harperdb 4.3.27 → 4.3.28
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/application-template/config.yaml +2 -5
- package/bin/harperdb.js +7 -5
- package/bin/lite.js +7 -5
- package/launchServiceScripts/launchInstallNATSServer.js +1 -1
- package/launchServiceScripts/launchNatsIngestService.js +6 -4
- package/launchServiceScripts/launchNatsReplyService.js +7 -5
- package/launchServiceScripts/launchUpdateNodes4-0-0.js +7 -5
- package/npm-shrinkwrap.json +7 -7
- package/package.json +1 -1
- package/server/jobs/jobProcess.js +7 -5
- package/server/threads/threadServer.js +7 -5
- package/studio/build-local/asset-manifest.json +2 -2
- package/studio/build-local/index.html +1 -1
- package/studio/build-local/static/js/{main.cbf96b8b.js → main.688e0bbd.js} +2 -2
- package/utility/scripts/restartHdb.js +7 -5
- package/application-template/routes/index.js +0 -14
- /package/studio/build-local/static/js/{main.cbf96b8b.js.LICENSE.txt → main.688e0bbd.js.LICENSE.txt} +0 -0
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
"use strict";var xq=Object.create;var fc=Object.defineProperty;var Hq=Object.getOwnPropertyDescriptor;var Gq=Object.getOwnPropertyNames;var qq=Object.getPrototypeOf,Fq=Object.prototype.hasOwnProperty;var a=(e,t)=>fc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var g=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)fc(e,r,{get:t[r],enumerable:!0})},EO=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Gq(t))!Fq.call(e,s)&&s!==r&&fc(e,s,{get:()=>t[s],enumerable:!(n=Hq(t,s))||n.enumerable});return e};var H=(e,t,r)=>(r=e!=null?xq(qq(e)):{},EO(t||!e||!e.__esModule?fc(r,"default",{value:e,enumerable:!0}):r,e)),ie=e=>EO(fc({},"__esModule",{value:!0}),e);var pO=g((cce,mO)=>{var kq=require("fast-glob"),{statSync:Uh,existsSync:vh,readFileSync:Vq,writeFileSync:$q}=require("fs"),{spawnSync:Yq,spawn:Kq,execFileSync:ace}=require("child_process"),{isMainThread:Wq}=require("worker_threads"),{join:ei,relative:hO}=require("path"),{PACKAGE_ROOT:Nn}=P(),{tmpdir:Qq,platform:zq}=require("os");require("source-map-support").install();var Jq=["resources","server","dataLayer","components"],Ec="ts-build",Bh,jq=__filename.endsWith("tsBuild.js");if(jq){if(Wq){let r;try{Uh(ei(Nn,Ec)),r=!0}catch{}if(r)for(let n of kq.sync(Jq.map(s=>s+"/**/*.ts"),{cwd:Nn})){let s=0,i=0;try{s=Uh(ei(Nn,n)).mtimeMs-5e3,i=Uh(ei(Nn,Ec,n.replace(/.ts$/,".js"))).mtimeMs}catch{}if(s>i){console.warn(`TypeScript ${n} is not compiled`+(i?` (TS source file was modified at ${new Date(s)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bh=!0;if(Bh){let n=ei(Nn,"node_modules/.bin/tsc");zq()==="win32"&&(n+=".cmd");let s=Yq(n,{cwd:Nn});if(s.stdout?.length&&console.log(s.stdout.toString()),s.stderr?.length&&console.log(s.stderr.toString()),r){let i=ei(Qq(),"harperdb-tsc.pid"),o;if(vh(i))try{process.kill(+Vq(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Kq(n,["--watch"],{cwd:Nn,detached:!0,stdio:"ignore"});$q(i,c.pid.toString()),c.unref()}}}}let e=mO.constructor,t=e._findPath;e._findPath=function(r,n,s){if(r.startsWith(".")&&!s&&n.length===1&&n[0].startsWith(Nn)&&!n[0].includes("node_modules")){let i=hO(Nn,n[0]),o;i.startsWith(Ec)?o=ei(Nn,hO(Ec,i)):o=ei(Nn,Ec,i);let c=ei(o,r),u=c+".js";if(vh(u))return u;if(c.includes(".")&&vh(c))return c}return t(r,n,s)}}});var P=g((_ce,LO)=>{"use strict";var an=require("path"),Xq=require("fs"),{relative:uce,join:lce}=an,{existsSync:Zq}=Xq;function eF(){let e=__dirname;for(;!Zq(an.join(e,"package.json"));){let t=an.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(eF,"getHDBPackageRoot");var ti=eF(),SO="js",u_=SO,tF="harperdb-config.yaml",rF="defaultConfig.yaml",nF="hdb",TO=`harperdb.${u_}`,gO=`customFunctionsServer.${u_}`,sF=`restartHdb.${u_}`,Hh="HarperDB",c_="Custom Functions",l_="Clustering Hub",__="Clustering Leaf",iF="Clustering Ingest Service",oF="Clustering Reply Service",aF="foreground.pid",cF="hdb.pid",uF="data",lF={HDB:Hh,CLUSTERING_HUB:l_,CLUSTERING_LEAF:__,CLUSTERING_INGEST_SERVICE:iF,CLUSTERING_REPLY_SERVICE:oF,CUSTOM_FUNCTIONS:c_,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"},_F={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},dF={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},fF={harperdb:Hh,"clustering hub":l_,"clustering leaf":__,"custom functions":c_,custom_functions:c_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},EF={CLUSTERING_HUB_PROC_DESCRIPTOR:l_,CLUSTERING_LEAF_PROC_DESCRIPTOR:__},xh={HDB:an.join(ti,"server/harperdb"),CUSTOM_FUNCTIONS:an.join(ti,"server/customFunctions"),CLUSTERING_HUB:an.join(ti,"server/nats"),CLUSTERING_LEAF:an.join(ti,"server/nats")},hF={HDB:an.join(xh.HDB,TO),CUSTOM_FUNCTIONS:an.join(xh.CUSTOM_FUNCTIONS,gO)},mF={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:an.join(ti,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:an.join(ti,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:an.join(ti,"launchServiceScripts/launchUpdateNodes4-0-0.js")},pF={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},RO="support@harperdb.io",SF="customer-success@harperdb.io",AO=1,TF=4141,OO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",gF="https://www.harperdb.io/product",RF=`For support, please submit a request at ${OO} or contact ${RO}`,bO=`For license support, please contact ${SF}`,AF="None of the specified records were found.",OF="hash attribute not found",bF=`Your current license only supports ${AO} role. ${bO}`,yF="Your current license only supports 3 connections to a node.",NF="127.0.0.1",IF=1,wF=/^\.$/,CF=/^\.\.$/,DF="U+002E",LF=/\//g,MF="U+002F",PF=/U\+002F/g,UF=/^U\+002E$/,vF=/^U\+002EU\+002E$/,BF="d",xF=999999,HF="*",GF="--max-old-space-size=",qF="system",FF="__hdb_hash",kF=".harperdb",VF=".hdb",$F="keys",YF="hdb_boot_properties.file",KF=".updateConfig.json",WF="SIGTSTP",QF=24,zF=6e4,JF=448,jF="blob",XF="trash",ZF="database",ek="schema",tk="transactions",rk=".count",nk="id",sk="PROCESS_NAME",yO={SETTINGS_PATH_KEY:"settings_path"},NO=require("lodash"),ik={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",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",HDB_CONFIG:"HDB_CONFIG",OPERATIONSAPI_NETWORK_SECUREPORT:"OPERATIONSAPI_NETWORK_SECUREPORT",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},ok={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},ak={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ck={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"},uk={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},Pr="hdb_internal:",lk={CREATE_SCHEMA:Pr+"create_schema",CREATE_TABLE:Pr+"create_table",CREATE_ATTRIBUTE:Pr+"create_attribute",ADD_USER:Pr+"add_user",ALTER_USER:Pr+"alter_user",DROP_USER:Pr+"drop_user",HDB_NODES:Pr+"hdb_nodes",HDB_USERS:Pr+"hdb_users",HDB_WORKERS:Pr+"hdb_workers",CATCHUP:Pr+"catchup",SCHEMA_CATCHUP:Pr+"schema_catchup",WORKER_ROOM:Pr+"cluster_workers"},_k={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"},dk="060493.ks",fk=".license",Ek={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},te={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",SET_NODE_REPLICATION:"set_node_replication",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},hk={CSV:".csv",JSON:".json"},mk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},pk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},hc={};hc[te.INSERT]=te.INSERT;hc[te.UPDATE]=te.UPDATE;hc[te.UPSERT]=te.UPSERT;hc[te.DELETE]=te.DELETE;var Ge=Object.create(null);Ge[te.DESCRIBE_ALL]=te.DESCRIBE_ALL;Ge[te.DESCRIBE_TABLE]=te.DESCRIBE_TABLE;Ge[te.DESCRIBE_SCHEMA]=te.DESCRIBE_SCHEMA;Ge[te.READ_LOG]=te.READ_LOG;Ge[te.ADD_NODE]=te.ADD_NODE;Ge[te.LIST_USERS]=te.LIST_USERS;Ge[te.LIST_ROLES]=te.LIST_ROLES;Ge[te.USER_INFO]=te.USER_INFO;Ge[te.SQL]=te.SQL;Ge[te.GET_JOB]=te.GET_JOB;Ge[te.SEARCH_JOBS_BY_START_DATE]=te.SEARCH_JOBS_BY_START_DATE;Ge[te.DELETE_FILES_BEFORE]=te.DELETE_FILES_BEFORE;Ge[te.EXPORT_LOCAL]=te.EXPORT_LOCAL;Ge[te.EXPORT_TO_S3]=te.EXPORT_TO_S3;Ge[te.CLUSTER_STATUS]=te.CLUSTER_STATUS;Ge[te.REMOVE_NODE]=te.REMOVE_NODE;Ge[te.RESTART]=te.RESTART;Ge[te.CUSTOM_FUNCTIONS_STATUS]=te.CUSTOM_FUNCTIONS_STATUS;Ge[te.GET_CUSTOM_FUNCTIONS]=te.GET_CUSTOM_FUNCTIONS;Ge[te.GET_CUSTOM_FUNCTION]=te.GET_CUSTOM_FUNCTION;Ge[te.SET_CUSTOM_FUNCTION]=te.SET_CUSTOM_FUNCTION;Ge[te.DROP_CUSTOM_FUNCTION]=te.DROP_CUSTOM_FUNCTION;Ge[te.ADD_CUSTOM_FUNCTION_PROJECT]=te.ADD_CUSTOM_FUNCTION_PROJECT;Ge[te.DROP_CUSTOM_FUNCTION_PROJECT]=te.DROP_CUSTOM_FUNCTION_PROJECT;Ge[te.PACKAGE_CUSTOM_FUNCTION_PROJECT]=te.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ge[te.DEPLOY_CUSTOM_FUNCTION_PROJECT]=te.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Sk={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"},Tk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},IO={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"},gk=NO.invert(IO),Rk={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"},w={ANALYTICS_AGGREGATEPERIOD:"analytics_aggregatePeriod",AUTHENTICATION_AUTHORIZELOCAL:"authentication_authorizeLocal",AUTHENTICATION_CACHETTL:"authentication_cacheTTL",AUTHENTICATION_ENABLESESSIONS:"authentication_enableSessions",AUTHENTICATION_OPERATIONTOKENTIMEOUT:"authentication_operationTokenTimeout",AUTHENTICATION_REFRESHTOKENTIMEOUT:"authentication_refreshTokenTimeout",CLUSTERING_USER:"clustering_user",CLUSTERING_ENABLED:"clustering_enabled",CLUSTERING_HUBSERVER_CLUSTER_NAME:"clustering_hubServer_cluster_name",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT:"clustering_hubServer_cluster_network_port",CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES:"clustering_hubServer_cluster_network_routes",CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT:"clustering_hubServer_leafNodes_network_port",CLUSTERING_HUBSERVER_NETWORK_PORT:"clustering_hubServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_PORT:"clustering_leafServer_network_port",CLUSTERING_LEAFSERVER_NETWORK_ROUTES:"clustering_leafServer_network_routes",CLUSTERING_LEAFSERVER_STREAMS_MAXAGE:"clustering_leafServer_streams_maxAge",CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES:"clustering_leafServer_streams_maxBytes",CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS:"clustering_leafServer_streams_maxMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS:"clustering_leafServer_streams_maxConsumeMsgs",CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS:"clustering_leafServer_streams_maxIngestThreads",CLUSTERING_LEAFSERVER_STREAMS_PATH:"clustering_leafServer_streams_path",CLUSTERING_NODENAME:"clustering_nodeName",CLUSTERING_TLS_CERTIFICATE:"clustering_tls_certificate",CLUSTERING_TLS_PRIVATEKEY:"clustering_tls_privateKey",CLUSTERING_TLS_CERT_AUTH:"clustering_tls_certificateAuthority",CLUSTERING_TLS_INSECURE:"clustering_tls_insecure",CLUSTERING_TLS_VERIFY:"clustering_tls_verify",CLUSTERING_LOGLEVEL:"clustering_logLevel",CLUSTERING_REPUBLISHMESSAGES:"clustering_republishMessages",CLUSTERING_DATABASELEVEL:"clustering_databaseLevel",CUSTOMFUNCTIONS_NETWORK_HTTPS:"customFunctions_network_https",THREADS:"threads",THREADS_COUNT:"threads_count",THREADS_DEBUG:"threads_debug",THREADS_DEBUG_STARTINGPORT:"threads_debug_startingPort",THREADS_DEBUG_PORT:"threads_debug_port",THREADS_DEBUG_HOST:"threads_debug_host",THREADS_DEBUG_WAITFORDEBUGGER:"threads_debug_waitForDebugger",THREADS_MAXHEAPMEMORY:"threads_maxHeapMemory",HTTP_SESSIONAFFINITY:"http_sessionAffinity",HTTP_COMPRESSIONTHRESHOLD:"http_compressionThreshold",HTTP_CORS:"http_cors",HTTP_CORSACCESSLIST:"http_corsAccessList",HTTP_HEADERSTIMEOUT:"http_headersTimeout",HTTP_KEEPALIVETIMEOUT:"http_keepAliveTimeout",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",LOCALSTUDIO_ENABLED:"localStudio_enabled",LOGGING_FILE:"logging_file",LOGGING_LEVEL:"logging_level",LOGGING_ROOT:"logging_root",LOGGING_ROTATION_ENABLED:"logging_rotation_enabled",LOGGING_ROTATION_COMPRESS:"logging_rotation_compress",LOGGING_ROTATION_INTERVAL:"logging_rotation_interval",LOGGING_ROTATION_MAXSIZE:"logging_rotation_maxSize",LOGGING_ROTATION_PATH:"logging_rotation_path",LOGGING_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_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",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_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",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"},wO={settings_path:yO.SETTINGS_PATH_KEY,hdb_root_key:w.ROOTPATH,hdb_root:w.ROOTPATH,rootpath:w.ROOTPATH,server_port_key:w.OPERATIONSAPI_NETWORK_PORT,server_port:w.OPERATIONSAPI_NETWORK_PORT,cert_key:w.TLS_CERTIFICATE,certificate:w.TLS_CERTIFICATE,private_key_key:w.TLS_PRIVATEKEY,private_key:w.TLS_PRIVATEKEY,http_secure_enabled_key:w.OPERATIONSAPI_NETWORK_HTTPS,https_on:w.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:w.OPERATIONSAPI_NETWORK_CORS,cors_on:w.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:w.LOGGING_LEVEL,log_level:w.LOGGING_LEVEL,log_path_key:w.LOGGING_ROOT,log_path:w.LOGGING_ROOT,clustering_node_name_key:w.CLUSTERING_NODENAME,node_name:w.CLUSTERING_NODENAME,clustering_enabled_key:w.CLUSTERING_ENABLED,clustering:w.CLUSTERING_ENABLED,max_http_threads:w.THREADS_COUNT,max_hdb_processes:w.THREADS_COUNT,server_timeout_key:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:w.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:w.LOGGING_AUDITLOG,disable_transaction_log:w.LOGGING_AUDITLOG,operation_token_timeout_key:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:w.HTTP_PORT,custom_functions_port:w.HTTP_PORT,custom_functions_directory_key:w.COMPONENTSROOT,custom_functions_directory:w.COMPONENTSROOT,max_custom_function_processes:w.THREADS_COUNT,log_to_file:w.LOGGING_FILE,log_to_stdstreams:w.LOGGING_STDSTREAMS,local_studio_on:w.LOCALSTUDIO_ENABLED,clustering_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:w.CLUSTERING_USER,clustering_enabled:w.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:w.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:w.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:w.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:w.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:w.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:w.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:w.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:w.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxconsumemsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS,clustering_leafserver_streams_maxingestthreads:w.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS,clustering_leafserver_streams_maxmsgs:w.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:w.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:w.CLUSTERING_NODENAME,clustering_tls_certificate:w.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:w.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:w.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:w.CLUSTERING_TLS_INSECURE,clustering_tls_verify:w.CLUSTERING_TLS_VERIFY,clustering_loglevel:w.CLUSTERING_LOGLEVEL,clustering_republishmessages:w.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:w.CLUSTERING_DATABASELEVEL,customfunctions_network_port:w.HTTP_PORT,customfunctions_tls_certificate:w.TLS_CERTIFICATE,customfunctions_network_cors:w.HTTP_CORS,customfunctions_network_corsaccesslist:w.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:w.HTTP_HEADERSTIMEOUT,customfunctions_network_https:w.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:w.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:w.HTTP_TIMEOUT,customfunctions_tls:w.TLS,http_threads:w.THREADS_COUNT,threads:w.THREADS_COUNT,threads_count:w.THREADS_COUNT,threads_debug:w.THREADS_DEBUG,threads_debug_startingport:w.THREADS_DEBUG_STARTINGPORT,threads_debug_port:w.THREADS_DEBUG_PORT,threads_debug_host:w.THREADS_DEBUG_HOST,threads_debug_waitfordebugger:w.THREADS_DEBUG_WAITFORDEBUGGER,threads_maxheapmemory:w.THREADS_MAXHEAPMEMORY,http_session_affinity:w.HTTP_SESSIONAFFINITY,http_compressionthreshold:w.HTTP_COMPRESSIONTHRESHOLD,http_cors:w.HTTP_CORS,http_corsaccesslist:w.HTTP_CORSACCESSLIST,http_headerstimeout:w.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:w.HTTP_KEEPALIVETIMEOUT,http_timeout:w.HTTP_TIMEOUT,http_port:w.HTTP_PORT,http_secureport:w.HTTP_SECUREPORT,http_mtls:w.HTTP_MTLS,http_mtls_user:w.HTTP_MTLS_USER,http_mtls_required:w.HTTP_MTLS_REQUIRED,http_maxheadersize:w.HTTP_MAXHEADERSIZE,http_threadrange:w.HTTP_THREADRANGE,customfunctions_processes:w.THREADS_COUNT,customfunctions_root:w.COMPONENTSROOT,localstudio_enabled:w.LOCALSTUDIO_ENABLED,logging_file:w.LOGGING_FILE,logging_level:w.LOGGING_LEVEL,logging_root:w.LOGGING_ROOT,logging_rotation_enabled:w.LOGGING_ROTATION_ENABLED,logging_rotation_compress:w.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:w.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:w.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:w.LOGGING_ROTATION_PATH,logging_stdstreams:w.LOGGING_STDSTREAMS,logging_auditlog:w.LOGGING_AUDITLOG,logging_auditretention:w.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:w.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:w.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:w.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:w.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:w.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:w.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:w.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:w.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_domainsocket:w.OPERATIONSAPI_NETWORK_DOMAINSOCKET,operationsapi_network_secureport:w.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls:w.OPERATIONSAPI_TLS,operationsapi_tls_certificate:w.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:w.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:w.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:w.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:w.ROOTPATH,databases:w.DATABASES,storage_path:w.STORAGE_PATH,storage_maxtransactionqueuetime:w.STORAGE_MAXTRANSACTIONQUEUETIME,ignorescripts:w.IGNORE_SCRIPTS,mqtt_network_port:w.MQTT_NETWORK_PORT,mqtt_websocket:w.MQTT_WEBSOCKET,mqtt_network_secureport:w.MQTT_NETWORK_SECUREPORT,mqtt_network_mtls:w.MQTT_NETWORK_MTLS,mqtt_network_mtls_certificateAuthority:w.MQTT_NETWORK_MTLS_CERTIFICATEAUTHORITY,mqtt_network_mtls_user:w.MQTT_NETWORK_MTLS_USER,mqtt_network_mtls_required:w.MQTT_NETWORK_MTLS_REQUIRED,mqtt_requireauthentication:w.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:w.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:w.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:w.AUTHENTICATION_CACHETTL,authentication_enablesessions:w.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:w.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:w.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:w.COMPONENTSROOT,tls:w.TLS,tls_certificate:w.TLS_CERTIFICATE,tls_privatekey:w.TLS_PRIVATEKEY,tls_certificateauthority:w.TLS_CERTIFICATEAUTHORITY,tls_ciphers:w.TLS_CIPHERS};for(let e in w){let t=w[e];wO[t.toLowerCase()]=t}var Ak={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Ok={csv_file_load:"csv_file_load",csv_data_load:te.CSV_DATA_LOAD,csv_url_load:te.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"},bk={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"},yk={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Nk={VERSION_DEFAULT:"2.2.0"},Ik={DEVELOPMENT:8192,DEFAULT:512},wk={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},Ck={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},Dk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST",ERR_INVALID_ARG_TYPE:"ERR_INVALID_ARG_TYPE"},CO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Lk=Symbol("metadata"),Mk="__clustering__",Pk=Object.values(CO),Uk=15984864e5,DO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},vk=NO.invert(DO),Bk={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},xk=111,Hk=`\r
|
|
2
|
-
`,Gk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qk=["*","%"],Fk="unauthorized_access",kk="func_val",Vk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},$k={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Yk={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"},Kk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Wk={HTTP:"http"},Qk={STOPPED:"stopped",ONLINE:"online"},zk="3.x.x",Jk={SUCCESS:"success",FAILURE:"failure"},jk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};LO.exports={LOCAL_HARPERDB_OPERATIONS:Ge,HDB_SUPPORT_ADDRESS:RO,HDB_SUPPORT_URL:OO,HDB_PRICING_URL:gF,SUPPORT_HELP_MSG:RF,LICENSE_HELP_MSG:bO,HDB_PROC_NAME:TO,HDB_PROC_DESCRIPTOR:Hh,CLUSTERING_LEAF_PROC_DESCRIPTOR:__,CLUSTERING_HUB_PROC_DESCRIPTOR:l_,SYSTEM_SCHEMA_NAME:qF,HASH_FOLDER_NAME:FF,HDB_HOME_DIR_NAME:kF,UPDATE_FILE_NAME:KF,LICENSE_KEY_DIR_NAME:$F,BOOT_PROPS_FILE_NAME:YF,JOB_TYPE_ENUM:Ok,JOB_STATUS_ENUM:Ek,SYSTEM_TABLE_NAMES:ck,SYSTEM_TABLE_HASH_ATTRIBUTES:uk,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:hk,S3_BUCKET_AUTH_KEYS:mk,VALID_SQL_OPS_ENUM:pk,GEO_CONVERSION_ENUM:Tk,HDB_SETTINGS_NAMES:IO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:gk,SERVICE_ACTIONS_ENUM:Sk,CLUSTER_MESSAGE_TYPE_ENUM:bk,CLUSTER_CONNECTION_DIRECTION_ENUM:yk,CLUSTER_EVENTS_DEFS_ENUM:wk,PERIOD_REGEX:wF,DOUBLE_PERIOD_REGEX:CF,UNICODE_PERIOD:DF,FORWARD_SLASH_REGEX:LF,UNICODE_FORWARD_SLASH:MF,ESCAPED_FORWARD_SLASH_REGEX:PF,ESCAPED_PERIOD_REGEX:UF,ESCAPED_DOUBLE_PERIOD_REGEX:vF,REG_KEY_FILE_NAME:dk,RESTART_TIMEOUT_MS:zF,HDB_FILE_PERMISSIONS:JF,DATABASES_DIR_NAME:ZF,LEGACY_DATABASES_DIR_NAME:ek,TRANSACTIONS_DIR_NAME:tk,LIMIT_COUNT_NAME:rk,ID_ATTRIBUTE_STRING:nk,INSERT_MODULE_ENUM:ok,UPGRADE_JSON_FIELD_NAMES_ENUM:ak,RESTART_CODE:WF,RESTART_CODE_NUM:QF,CLUSTER_OPERATIONS:hc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:_k,HDB_INTERNAL_SC_CHANNEL_PREFIX:Pr,INTERNAL_SC_CHANNELS:lk,CLUSTERING_MESSAGE_TYPES:Bk,HDB_FILE_SUFFIX:VF,BLOB_FOLDER_NAME:jF,HDB_TRASH_DIR:XF,ORIGINATOR_SET_VALUE:xk,LICENSE_VALUES:Nk,RAM_ALLOCATION_ENUM:Ik,TIME_STAMP_NAMES_ENUM:CO,TIME_STAMP_NAMES:Pk,PERMS_UPDATE_RELEASE_TIMESTAMP:Uk,SEARCH_NOT_FOUND_MESSAGE:AF,SEARCH_ATTRIBUTE_NOT_FOUND:OF,LICENSE_ROLE_DENIED_RESPONSE:bF,LICENSE_MAX_CONNS_REACHED:yF,BASIC_LICENSE_MAX_NON_CU_ROLES:AO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:TF,VALUE_SEARCH_COMPARATORS:DO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:vk,LICENSE_FILE_NAME:fk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Ck,NEW_LINE:Hk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:IF,MOMENT_DAYS_TAG:BF,API_TURNOVER_SEC:xF,LOOPBACK:NF,CODE_EXTENSION:u_,WILDCARD_SEARCH_VALUE:HF,NODE_ERROR_CODES:Dk,JAVASCRIPT_EXTENSION:SO,PERMS_CRUD_ENUM:Gk,UNAUTHORIZED_PERMISSION_NAME:Fk,SEARCH_WILDCARDS:qk,FUNC_VAL:kk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Vk,JWT_ENUM:$k,CLUSTERING_FLAG:Mk,ITC_EVENT_TYPES:Yk,CUSTOM_FUNCTION_PROC_NAME:gO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:c_,SERVICES:Kk,THREAD_TYPES:Wk,MEM_SETTING_KEY:GF,HDB_RESTART_SCRIPT:sF,PROCESS_DESCRIPTORS:lF,SERVICE_SERVERS:hF,SERVICE_SERVERS_CWD:xh,PROCESS_DESCRIPTORS_VALIDATE:fF,LAUNCH_SERVICE_SCRIPTS:mF,LOG_LEVELS:dF,PROCESS_NAME_ENV_PROP:sk,LOG_NAMES:_F,PM2_PROCESS_STATUSES:Qk,CONFIG_PARAM_MAP:wO,CONFIG_PARAMS:w,HDB_CONFIG_FILE:tF,HDB_DEFAULT_CONFIG_FILE:rF,ROLE_TYPES_ENUM:pF,BOOT_PROP_PARAMS:yO,INSTALL_PROMPTS:ik,HDB_ROOT_DIR_NAME:nF,CLUSTERING_PROCESSES:EF,FOREGROUND_PID_FILE:aF,PACKAGE_ROOT:ti,PRE_4_0_0_VERSION:zk,DATABASES_PARAM_CONFIG:Ak,METADATA_PROPERTY:Lk,AUTH_AUDIT_STATUS:Jk,AUTH_AUDIT_TYPES:jk,HDB_PID_FILE:cF,DEFAULT_DATABASE_NAME:uF,LEGACY_CONFIG_PARAMS:Rk};pO()});var Gh=g((fce,UO)=>{"use strict";var MO=require("minimist");UO.exports=Xk;function Xk(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PO(process.env),n=PO(MO(process.argv))):(r=process.env,n=MO(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Xk,"assignCMDENVVariables");function PO(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PO,"objKeysToLowerCase")});var $=g((hce,Kh)=>{"use strict";var Hi=require("fs-extra"),{workerData:Zk,threadId:eV}=require("worker_threads"),Ts=require("path"),xO=require("yaml"),HO=require("properties-reader"),Tt=P(),vO=Gh(),tV=require("os"),{PACKAGE_ROOT:Fh}=P(),{_assignPackageExport:rV}=require("../index"),pc={};for(let e in console)pc[e]||(pc[e]=console[e]);var cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},GO={STDOUT:"stdOut",STDERR:"stdErr"},nV=Ts.join(Fh,"logs"),sV=Ts.join(Fh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),iV=1e4,Ss,Qn,ar,d_,f_,Sc,Vo,mc;mc===void 0&&qO();Kh.exports={notify:VO,fatal:$O,error:Tc,warn:Yh,info:E_,debug:$h,trace:Vh,setLogLevel:dV,log_level:ar,loggerWithTag:oV,suppressLogging:aV,initLogSettings:qO,setupConsoleLogging:FO,logCustomLevel:lV,closeLogFile:kh,getLogFilePath:()=>Sc,OUTPUTS:GO,AuthAuditLog:hV};rV("logger",Kh.exports);function qO(e=!1){try{if(mc===void 0||e){kh();let t=_V(),r=vO(["ROOTPATH"]);try{mc=HO(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Hi.pathExistsSync(Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:ar,config_log_path:f_,to_file:Ss,to_stream:Qn}=fV(r.ROOTPATH?Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):mc.get("settings_path"))),d_=Tt.LOG_NAMES.HDB,Sc=Ts.join(f_,d_)}}catch(t){if(mc=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT||t.code===Tt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=vO(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){ar=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Qn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(Ss=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=EV();Ss=Ss===void 0?s:Ss,Ss=BO(Ss),Qn=Qn===void 0?i:Qn,Qn=BO(Qn),ar=ar===void 0?n:ar,f_=nV,d_=Tt.LOG_NAMES.INSTALL,Sc=Ts.join(f_,d_);return}throw Tc("Error initializing log settings"),Tc(t),t}process.env.DEV_MODE&&(Qn=!0),FO()}a(qO,"initLogSettings");var qh=!0;function FO(){ko("error",Tc),ko("warn",Yh),ko("log",E_),ko("info",E_),ko("debug",$h),ko("trace",Vh)}a(FO,"setupConsoleLogging");function ko(e,t){console[e]=function(...r){if(qh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return pc[e](...r)}}a(ko,"logConsole");function oV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VO),fatal:r($O),error:r(Tc),warn:r(Yh),info:r(E_),debug:r($h),trace:r(Vh)};function r(n){return function(...s){return n(t,...s)}}}a(oV,"loggerWithTag");function aV(e){try{qh=!1,e()}finally{qh=!0}}a(aV,"suppressLogging");var cV=Zk?.name?.replace(/ /g,"-")||"main";function gs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||cV+"/"+eV);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?n+=_.stack
|
|
2
|
+
`,Gk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},qk=["*","%"],Fk="unauthorized_access",kk="func_val",Vk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},$k={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Yk={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"},Kk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},Wk={HTTP:"http"},Qk={STOPPED:"stopped",ONLINE:"online"},zk="3.x.x",Jk={SUCCESS:"success",FAILURE:"failure"},jk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};LO.exports={LOCAL_HARPERDB_OPERATIONS:Ge,HDB_SUPPORT_ADDRESS:RO,HDB_SUPPORT_URL:OO,HDB_PRICING_URL:gF,SUPPORT_HELP_MSG:RF,LICENSE_HELP_MSG:bO,HDB_PROC_NAME:TO,HDB_PROC_DESCRIPTOR:Hh,CLUSTERING_LEAF_PROC_DESCRIPTOR:__,CLUSTERING_HUB_PROC_DESCRIPTOR:l_,SYSTEM_SCHEMA_NAME:qF,HASH_FOLDER_NAME:FF,HDB_HOME_DIR_NAME:kF,UPDATE_FILE_NAME:KF,LICENSE_KEY_DIR_NAME:$F,BOOT_PROPS_FILE_NAME:YF,JOB_TYPE_ENUM:Ok,JOB_STATUS_ENUM:Ek,SYSTEM_TABLE_NAMES:ck,SYSTEM_TABLE_HASH_ATTRIBUTES:uk,OPERATIONS_ENUM:te,VALID_S3_FILE_TYPES:hk,S3_BUCKET_AUTH_KEYS:mk,VALID_SQL_OPS_ENUM:pk,GEO_CONVERSION_ENUM:Tk,HDB_SETTINGS_NAMES:IO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:gk,SERVICE_ACTIONS_ENUM:Sk,CLUSTER_MESSAGE_TYPE_ENUM:bk,CLUSTER_CONNECTION_DIRECTION_ENUM:yk,CLUSTER_EVENTS_DEFS_ENUM:wk,PERIOD_REGEX:wF,DOUBLE_PERIOD_REGEX:CF,UNICODE_PERIOD:DF,FORWARD_SLASH_REGEX:LF,UNICODE_FORWARD_SLASH:MF,ESCAPED_FORWARD_SLASH_REGEX:PF,ESCAPED_PERIOD_REGEX:UF,ESCAPED_DOUBLE_PERIOD_REGEX:vF,REG_KEY_FILE_NAME:dk,RESTART_TIMEOUT_MS:zF,HDB_FILE_PERMISSIONS:JF,DATABASES_DIR_NAME:ZF,LEGACY_DATABASES_DIR_NAME:ek,TRANSACTIONS_DIR_NAME:tk,LIMIT_COUNT_NAME:rk,ID_ATTRIBUTE_STRING:nk,INSERT_MODULE_ENUM:ok,UPGRADE_JSON_FIELD_NAMES_ENUM:ak,RESTART_CODE:WF,RESTART_CODE_NUM:QF,CLUSTER_OPERATIONS:hc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:_k,HDB_INTERNAL_SC_CHANNEL_PREFIX:Pr,INTERNAL_SC_CHANNELS:lk,CLUSTERING_MESSAGE_TYPES:Bk,HDB_FILE_SUFFIX:VF,BLOB_FOLDER_NAME:jF,HDB_TRASH_DIR:XF,ORIGINATOR_SET_VALUE:xk,LICENSE_VALUES:Nk,RAM_ALLOCATION_ENUM:Ik,TIME_STAMP_NAMES_ENUM:CO,TIME_STAMP_NAMES:Pk,PERMS_UPDATE_RELEASE_TIMESTAMP:Uk,SEARCH_NOT_FOUND_MESSAGE:AF,SEARCH_ATTRIBUTE_NOT_FOUND:OF,LICENSE_ROLE_DENIED_RESPONSE:bF,LICENSE_MAX_CONNS_REACHED:yF,BASIC_LICENSE_MAX_NON_CU_ROLES:AO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:TF,VALUE_SEARCH_COMPARATORS:DO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:vk,LICENSE_FILE_NAME:fk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Ck,NEW_LINE:Hk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:IF,MOMENT_DAYS_TAG:BF,API_TURNOVER_SEC:xF,LOOPBACK:NF,CODE_EXTENSION:u_,WILDCARD_SEARCH_VALUE:HF,NODE_ERROR_CODES:Dk,JAVASCRIPT_EXTENSION:SO,PERMS_CRUD_ENUM:Gk,UNAUTHORIZED_PERMISSION_NAME:Fk,SEARCH_WILDCARDS:qk,FUNC_VAL:kk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Vk,JWT_ENUM:$k,CLUSTERING_FLAG:Mk,ITC_EVENT_TYPES:Yk,CUSTOM_FUNCTION_PROC_NAME:gO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:c_,SERVICES:Kk,THREAD_TYPES:Wk,MEM_SETTING_KEY:GF,HDB_RESTART_SCRIPT:sF,PROCESS_DESCRIPTORS:lF,SERVICE_SERVERS:hF,SERVICE_SERVERS_CWD:xh,PROCESS_DESCRIPTORS_VALIDATE:fF,LAUNCH_SERVICE_SCRIPTS:mF,LOG_LEVELS:dF,PROCESS_NAME_ENV_PROP:sk,LOG_NAMES:_F,PM2_PROCESS_STATUSES:Qk,CONFIG_PARAM_MAP:wO,CONFIG_PARAMS:w,HDB_CONFIG_FILE:tF,HDB_DEFAULT_CONFIG_FILE:rF,ROLE_TYPES_ENUM:pF,BOOT_PROP_PARAMS:yO,INSTALL_PROMPTS:ik,HDB_ROOT_DIR_NAME:nF,CLUSTERING_PROCESSES:EF,FOREGROUND_PID_FILE:aF,PACKAGE_ROOT:ti,PRE_4_0_0_VERSION:zk,DATABASES_PARAM_CONFIG:Ak,METADATA_PROPERTY:Lk,AUTH_AUDIT_STATUS:Jk,AUTH_AUDIT_TYPES:jk,HDB_PID_FILE:cF,DEFAULT_DATABASE_NAME:uF,LEGACY_CONFIG_PARAMS:Rk};pO()});var Gh=g((fce,UO)=>{"use strict";var MO=require("minimist");UO.exports=Xk;function Xk(e=[],t=!1){if(!Array.isArray(e))return{};let r,n;t?(r=PO(process.env),n=PO(MO(process.argv))):(r=process.env,n=MO(process.argv));let s={};for(let i=0,o=e.length;i<o;i++){let c=e[i];n[c]!==void 0?s[c]=n[c].toString().trim():r[c]!==void 0&&(s[c]=r[c].toString().trim())}return s}a(Xk,"assignCMDENVVariables");function PO(e){let t,r=Object.keys(e),n=r.length,s={};for(;n--;)t=r[n],s[t.toLowerCase()]=e[t];return s}a(PO,"objKeysToLowerCase")});var $=g((hce,Kh)=>{"use strict";var Hi=require("fs-extra"),{workerData:Zk,threadId:eV}=require("worker_threads"),Ts=require("path"),xO=require("yaml"),HO=require("properties-reader"),Tt=P(),vO=Gh(),tV=require("os"),{PACKAGE_ROOT:Fh}=P(),{_assignPackageExport:rV}=require("../index"),pc={};for(let e in console)pc[e]||(pc[e]=console[e]);var cr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},GO={STDOUT:"stdOut",STDERR:"stdErr"},nV=Ts.join(Fh,"logs"),sV=Ts.join(Fh,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),iV=1e4,Ss,Qn,ar,d_,f_,Sc,Vo,mc;mc===void 0&&qO();Kh.exports={notify:VO,fatal:$O,error:Tc,warn:Yh,info:E_,debug:$h,trace:Vh,setLogLevel:dV,log_level:ar,loggerWithTag:oV,suppressLogging:aV,initLogSettings:qO,setupConsoleLogging:FO,logCustomLevel:lV,closeLogFile:kh,getLogFilePath:()=>Sc,OUTPUTS:GO,AuthAuditLog:hV};rV("logger",Kh.exports);function qO(e=!1){try{if(mc===void 0||e){kh();let t=_V(),r=vO(["ROOTPATH"]);try{mc=HO(t)}catch(n){if(!r.ROOTPATH||r.ROOTPATH&&!Hi.pathExistsSync(Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw n}({level:ar,config_log_path:f_,to_file:Ss,to_stream:Qn}=fV(r.ROOTPATH?Ts.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):mc.get("settings_path"))),d_=Tt.LOG_NAMES.HDB,Sc=Ts.join(f_,d_)}}catch(t){if(mc=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT||t.code===Tt.NODE_ERROR_CODES.ERR_INVALID_ARG_TYPE){let r=vO(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){ar=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Qn=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(Ss=c)}let{default_level:n,default_to_file:s,default_to_stream:i}=EV();Ss=Ss===void 0?s:Ss,Ss=BO(Ss),Qn=Qn===void 0?i:Qn,Qn=BO(Qn),ar=ar===void 0?n:ar,f_=nV,d_=Tt.LOG_NAMES.INSTALL,Sc=Ts.join(f_,d_);return}throw Tc("Error initializing log settings"),Tc(t),t}process.env.DEV_MODE&&(Qn=!0),FO()}a(qO,"initLogSettings");var qh=!0;function FO(){ko("error",Tc),ko("warn",Yh),ko("log",E_),ko("info",E_),ko("debug",$h),ko("trace",Vh)}a(FO,"setupConsoleLogging");function ko(e,t){console[e]=function(...r){if(qh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return pc[e](...r)}}a(ko,"logConsole");function oV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(VO),fatal:r($O),error:r(Tc),warn:r(Yh),info:r(E_),debug:r($h),trace:r(Vh)};function r(n){return function(...s){return n(t,...s)}}}a(oV,"loggerWithTag");function aV(e){try{qh=!1,e()}finally{qh=!0}}a(aV,"suppressLogging");var cV=Zk?.name?.replace(/ /g,"-")||"main";function gs(e,t){let r=new Date(Date.now()).toISOString(),n="",s=t.length,i=s-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||cV+"/"+eV);c<s;c++){let _=t[c];_ instanceof Error&&_.stack?(n+=_.stack,Object.keys(_).length>0&&(n+=`
|
|
3
|
+
`+JSON.stringify(_)),_.cause&&(t[c--]=_.cause,_&&(n+=`
|
|
4
|
+
Caused by:`))):typeof _=="object"?n+=JSON.stringify(_):n+=_,c<i&&(n+=" ")}return`${r} [${o.join("] [")}]: ${n}
|
|
3
5
|
`}a(gs,"createLogRecord");function gc(e){Ss&&kO(e),Qn&&process.stdout.write(e)}a(gc,"logStdOut");function h_(e){Ss&&kO(e),Qn&&process.stderr.write(e)}a(h_,"logStdErr");function kO(e){uV(),Vo?Hi.appendFileSync(Vo,e):pc.log(e)}a(kO,"logToFile");function kh(){try{Hi.closeSync(Vo)}catch{}Vo=null}a(kh,"closeLogFile");function uV(){if(!Vo){try{if(!Sc)debugger;Vo=Hi.openSync(Sc,"a")}catch(e){pc.error(e)}setTimeout(()=>{kh()},iV).unref()}}a(uV,"openLogFile");function E_(...e){cr[ar]<=cr.info&&gc(gs("info",e))}a(E_,"info");function Vh(...e){cr[ar]<=cr.trace&&gc(gs("trace",e))}a(Vh,"trace");function Tc(...e){cr[ar]<=cr.error&&h_(gs("error",e))}a(Tc,"error");function $h(...e){cr[ar]<=cr.debug&&gc(gs("debug",e))}a($h,"debug");function VO(...e){cr[ar]<=cr.notify&&gc(gs("notify",e))}a(VO,"notify");function $O(...e){cr[ar]<=cr.fatal&&h_(gs("fatal",e))}a($O,"fatal");function Yh(...e){cr[ar]<=cr.warn&&h_(gs("warn",e))}a(Yh,"warn");function lV(e,t,...r){t===GO.STDERR?h_(gs(e,r)):gc(gs(e,r))}a(lV,"logCustomLevel");function _V(){let e;try{e=tV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ts.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return Hi.existsSync(t)||(t=Ts.join(Fh,"utility/hdb_boot_properties.file")),t}a(_V,"getPropsFilePath");function dV(e){ar=e}a(dV,"setLogLevel");function BO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(BO,"autoCastBoolean");function fV(e){try{if(e.includes("config/settings.js")){let o=HO(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ts.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=xO.parseDocument(Hi.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),n=t.getIn(["logging","root"]),s=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:n,to_file:s,to_stream:i}}catch(t){if(t.code===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(fV,"getLogConfig");function EV(){try{let e=xO.parseDocument(Hi.readFileSync(sV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),n=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:n}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(EV,"getDefaultConfig");function hV(e,t,r,n,s,i){this.username=e,this.status=t,this.type=r,this.originating_ip=n,this.request_method=s,this.path=i}a(hV,"AuthAuditLog")});var KO=g((pce,YO)=>{"use strict";var mV=require("util"),pV=require("path"),SV=require("child_process"),TV=mV.promisify(SV.execFile),gV=1e3*1e3*10;YO.exports={findPs:RV};async function RV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:n}=await TV("ps",["wwxo",`pid,${r}`],{maxBuffer:gV});for(let s of n.trim().split(`
|
|
4
6
|
`).slice(1)){s=s.trim();let[i]=s.split(" ",1),o=s.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,n])=>({pid:Number.parseInt(r,10),name:pV.basename(n.comm),cmd:n.args,ppid:Number.parseInt(n.ppid,10),uid:Number.parseInt(n.uid,10),cpu:Number.parseFloat(n["%cpu"]),memory:Number.parseFloat(n["%mem"])}))}a(RV,"findPs")});var ft=g((Tce,QO)=>{"use strict";var AV="__dbis__",OV="__txns__",bV="__environment_name__",yV="__dbi_defintion__",NV={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"},IV=["__createdtime__","__updatedtime__"],wV="\uFFFF",WO={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},CV=Object.values(WO);QO.exports={AUDIT_STORE_NAME:OV,INTERNAL_DBIS_NAME:AV,DBI_DEFINITION_NAME:yV,SEARCH_TYPES:NV,TIMESTAMP_NAMES:IV,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:bV,TRANSACTIONS_DBI_NAMES_ENUM:WO,TRANSACTIONS_DBIS:CV,OVERFLOW_MARKER:wV}});var Ur=g((gce,nb)=>{"use strict";var zO=P(),JO=ft(),jO={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},XO=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ZO={500:XO("There was an error processing your request."),400:"Invalid request"},DV=ZO[jO.INTERNAL_SERVER_ERROR],LV={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},MV={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},PV={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,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:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},UV={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 ${JO.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${JO.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"},vV={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${zO.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes.`,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 ${zO.INSERT_MODULE_ENUM.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"},eb={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"},BV={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:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' 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:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},xV={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a 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:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,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:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},HV={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},GV={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},qV={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},tb={INVALID_DATE:"Invalid date, must be in ISO-8601 format (YYYY-MM-DD).",SEARCH_CONDITIONS_INVALID_SORT_ATTRIBUTE:e=>`invalid sort attribute '${e}', the attribute must either be the table's hash attribute or an attribute used in conditions.`},rb={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:e=>`ITC server received invalid event type: ${e}`},FV={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."},kV={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},VV={...eb,...PV,...LV,...BV,...xV,...HV,...GV,...qV,...vV,...tb,...rb,...FV,...kV,...MV};nb.exports={CHECK_LOGS_WRAPPER:XO,HDB_ERROR_MSGS:VV,DEFAULT_ERROR_MSGS:ZO,DEFAULT_ERROR_RESP:DV,HTTP_STATUS_CODES:jO,LMDB_ERRORS_ENUM:UV,AUTHENTICATION_ERROR_MSGS:eb,VALIDATION_ERROR_MSGS:tb,ITC_ERRORS:rb}});var se=g((Ace,ob)=>{"use strict";var $o=Ur(),$V=$(),YV=P(),m_=class extends Error{static{a(this,"HdbError")}constructor(t,r,n,s,i){super(),Error.captureStackTrace(this,sb),this.statusCode=n||$o.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||($o.DEFAULT_ERROR_MSGS[n]?$o.DEFAULT_ERROR_MSGS[n]:$o.DEFAULT_ERROR_MSGS[$o.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&&$V[s](i)}},Wh=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.statusCode=r||400,t;super(t),this.statusCode=r||400}},Qh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function sb(e,t,r,n=YV.LOG_LEVELS.ERROR,s=null,i=!1){if(ib(e))return e;let o=new m_(e,t,r,n,s);return i&&delete o.stack,o}a(sb,"handleHDBError");function ib(e){return e.__proto__.constructor.name===m_.name}a(ib,"isHDBError");ob.exports={isHDBError:ib,handleHDBError:sb,ClientError:Wh,ServerError:Qh,hdb_errors:$o}});var je=g((bce,fb)=>{"use strict";var yc=P(),KV=z(),ur=ee(),Nc=require("path"),WV=require("minimist"),ab=require("fs-extra"),cb=require("lodash");ur.initSync();var{CONFIG_PARAMS:ri,DATABASES_PARAM_CONFIG:Rc,SYSTEM_SCHEMA_NAME:p_}=yc,Ac,Oc,bc;function ub(){if(Ac!==void 0)return Ac;if(ur.getHdbBasePath()!==void 0)return Ac=ur.get(ri.STORAGE_PATH)||Nc.join(ur.getHdbBasePath(),yc.DATABASES_DIR_NAME),Ac}a(ub,"getBaseSchemaPath");function lb(){if(Oc!==void 0)return Oc;if(ur.getHdbBasePath()!==void 0)return Oc=db(p_),Oc}a(lb,"getSystemSchemaPath");function _b(){if(bc!==void 0)return bc;if(ur.getHdbBasePath()!==void 0)return bc=ur.get(yc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Nc.join(ur.getHdbBasePath(),yc.TRANSACTIONS_DIR_NAME),bc}a(_b,"getTransactionAuditStoreBasePath");function QV(e,t){let r=ur.get(ri.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Nc.join(_b(),e.toString())}a(QV,"getTransactionAuditStorePath");function db(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(yc.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Nc.join(ub(),e)}a(db,"getSchemaPath");function zV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,WV(process.argv));let n=r[ri.DATABASES.toUpperCase()];if(n){let i;try{i=JSON.parse(n)}catch(o){if(!KV.isObject(n))throw o;i=n}for(let o of i){let c=o[p_];if(!c)continue;let u=ur.get(ri.DATABASES);u=u??{};let _=c?.tables?.[t]?.[Rc.PATH];if(_)return cb.set(u,[p_,Rc.TABLES,t,Rc.PATH],_),ur.setProperty(ri.DATABASES,u),_;let l=c?.[Rc.PATH];if(l)return cb.set(u,[p_,Rc.PATH],l),ur.setProperty(ri.DATABASES,u),l}}let s=r[ri.STORAGE_PATH.toUpperCase()];if(s){if(!ab.pathExistsSync(s))throw new Error(s+" does not exist");let i=Nc.join(s,e);return ab.mkdirsSync(i),ur.setProperty(ri.STORAGE_PATH,s),i}return lb()}a(zV,"initSystemSchemaPaths");function JV(){Ac=void 0,Oc=void 0,bc=void 0}a(JV,"resetPaths");fb.exports={getBaseSchemaPath:ub,getSystemSchemaPath:lb,getTransactionAuditStorePath:QV,getTransactionAuditStoreBasePath:_b,getSchemaPath:db,initSystemSchemaPaths:zV,resetPaths:JV}});var vr=g((wce,Sb)=>{"use strict";var jV=Ur().LMDB_ERRORS_ENUM,Nce=require("lmdb"),XV=ft(),Ice=require("buffer").Buffer,{OVERFLOW_MARKER:Eb,MAX_SEARCH_KEY_LENGTH:S_}=XV,hb=["number","string","symbol","boolean","bigint"];function ZV(e){if(e=e?.primaryStore||e,!e)throw new Error(jV.ENV_REQUIRED)}a(ZV,"validateEnv");function e$(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(e$,"stringifyData");function t$(e){return e instanceof Date?e.valueOf():e}a(t$,"convertKeyValueToWrite");function r$(e,t){if(e===null)return t?[null]:void 0;if(e===void 0)return;if(hb.includes(typeof e))return e.length>S_?[e.slice(0,S_)+Eb]:[e];let r;if(Array.isArray(e)){r=[];for(let n=0,s=e.length;n<s;n++){let i=e[n];if(hb.includes(typeof i))i.length>S_?r.push(i.slice(0,S_)+Eb):r.push(i);else{if(i===null&&t)return r.push(null);if(i instanceof Date)return r.push(i.getTime())}}}else if(e instanceof Date)return[e.getTime()];return r}a(r$,"getIndexedValues");var T_=0,mb=0;function pb(){mb=Date.now()-performance.now()}a(pb,"adjustStartTime");pb();var n$=6e4;setInterval(pb,n$).unref();function s$(){let e=performance.now()+mb;return e>T_?(T_=e,e):(T_+=488e-6,T_)}a(s$,"getNextMonotonicTime");Sb.exports={validateEnv:ZV,stringifyData:e$,convertKeyValueToWrite:t$,getNextMonotonicTime:s$,getIndexedValues:r$}});var Ic=g((Dce,Tb)=>{"use strict";var i$=P().OPERATIONS_ENUM,zh=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i=void 0){this.operation=i$.INSERT,this.schema=t,this.table=r,this.hash_attribute=n,this.records=s,this.__origin=i}};Tb.exports=zh});var wc=g((Pce,Ob)=>{"use strict";var Mce=Ic(),g_=P(),Jh=z(),gb=$(),o$=require("uuid"),{handleHDBError:R_,hdb_errors:a$}=se(),{HDB_ERROR_MSGS:A_,HTTP_STATUS_CODES:O_}=a$;Ob.exports=Rb;function Rb(e,t,r){for(let s=0;s<t.length;s++)Ab(t[s]);let{records:n}=e;for(let s=0;s<n.length;s++){let i=n[s];c$(i,r,e.operation)}}a(Rb,"processRows");Rb.validateAttribute=Ab;function Ab(e){if(Buffer.byteLength(String(e))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw R_(new Error,A_.ATTR_NAME_LENGTH_ERR(e),O_.BAD_REQUEST,void 0,void 0,!0);if(Jh.isEmptyOrZeroLength(e)||Jh.isEmpty(e.trim()))throw R_(new Error,A_.ATTR_NAME_NULLISH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(Ab,"validateAttribute");function c$(e,t,r){if(!e.hasOwnProperty(t)||Jh.isEmptyOrZeroLength(e[t])){if(r===g_.OPERATIONS_ENUM.INSERT||r===g_.OPERATIONS_ENUM.UPSERT){e[t]=o$.v4();return}throw gb.error("Update transaction aborted due to record with no hash value:",e),R_(new Error,A_.RECORD_MISSING_HASH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>g_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw gb.error(e),R_(new Error,A_.HASH_VAL_LENGTH_ERR,O_.BAD_REQUEST,void 0,void 0,!0)}a(c$,"validateHash")});var bb,In,jh,Cc=Re(()=>{bb=require("events"),In=class extends bb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;drainCloseListener;currentDrainResolver;[Symbol.asyncIterator](){let t=new jh;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)}},jh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});var Gi={};Fe(Gi,{server:()=>at});var yb,at,lr=Re(()=>{yb=require("../index"),at={};(0,yb._assignPackageExport)("server",at)});var em={};Fe(em,{loadGQLSchema:()=>_$,start:()=>Zh,startOnMainThread:()=>l$});function Zh({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,n,s,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),s)),E=new Map,f=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let B=function(U){if(U.kind==="NonNullType"){let Q=B(U.type);return Q.nullable=!1,Q}if(U.kind==="ListType")return{type:"array",elements:B(U.type)};let M={type:U.name?.value};return Object.defineProperty(M,"location",{value:U.loc.startToken}),M};a(B,"getProperty");let T=S.name.value,R=[],b={table:null,database:null,properties:R};E.set(T,b);for(let U of S.directives){if(U.name.value==="table"){for(let F of U.arguments)b[F.name.value]=F.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=T),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,f.push(b)}if(U.name.value==="sealed"&&(b.sealed=!0),U.name.value==="export"){b.export=!0;for(let F of U.arguments)F.name.value==="name"&&(b.export={name:F.value.value})}}let I=!1;for(let U of S.fields){let F=B(U.type);F.name=U.name.value,R.push(F);for(let M of U.directives)if(M.name.value==="primaryKey")I?console.warn("Can not define two attributes as a primary key"):(F.isPrimaryKey=!0,I=!0);else if(M.name.value==="indexed")F.indexed=!0;else if(M.name.value==="relationship"){let Q={};for(let J of M.arguments)Q[J.name.value]=J.value.value;F.relationship=Q}else if(M.name.value==="createdTime")F.assignCreatedTime=!0;else if(M.name.value==="updatedTime")F.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")F.expiresAt=!0;else if(M.name.value==="allow"){let Q=F.authorizedRoles=[];for(let J of M.arguments)J.name.value==="role"&&Q.push(J.value.value)}}b.type=T,T==="Query"&&(h=b)}function p(S){let T=E.get(S.type);T?(Object.defineProperty(S,"properties",{value:T.properties}),Object.defineProperty(S,"definition",{value:T})):S.type==="array"?p(S.elements):u$.includes(S.type)||(0,Nb.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${s}`)}a(p,"connectPropertyType");for(let S of E.values())for(let T of S.properties)p(T);for(let S of f)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,Xh.dirname)(n),S.tableClass):i.set((0,Xh.dirname)(n)+"/"+(S.export.name||S.type),S.tableClass))}}var Xh,Nb,u$,l$,_$,Ib=Re(()=>{Xh=require("path");Ae();Nb=H(Qe()),u$=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any","BigInt"];a(Zh,"start");l$=Zh,_$=Zh({ensureTable:Et}).handleFile});async function b_(e){let t=(0,Db.pathToFileURL)(e).toString();return d$?(Dc||(Dc=f$(h$)),(await(await Dc).import(t)).namespace):import(t)}async function f$(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Dc=new Compartment({console,Math,Date,fetch:E$,...e()},{},{name:"h-dapp",resolveHook(r,n){return r==="harperdb"?"harperdb":(r=new URL(r,n).toString(),(0,Cb.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(s){Object.assign(s,{Resource:$t,tables:Br,databases:ct})}};let n=await(0,wb.readFile)(new URL(r),{encoding:"utf-8"});return new t(n,r)}}),Dc}function E$(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 h$(){return{Resource:$t,tables:Br}}var wb,Cb,Db,d$,Dc,tm=Re(()=>{cn();Ae();wb=require("fs/promises"),Cb=require("path"),Db=require("url"),d$=!1;a(b_,"secureImport");a(f$,"getCompartment");a(E$,"secureOnlyFetch");a(h$,"getGlobalVars")});var nm={};Fe(nm,{handleFile:()=>m$});async function m$(e,t,r,n){let s=new Map,i=await b_(r);c(i.default)&&n.set((0,rm.dirname)(t),i.default),o(i,(0,rm.dirname)(t));function o(u,_){for(let l in u){let d=u[l];c(d)?n.set(_+"/"+l,d):typeof d=="object"&&o(d,_+"/"+l)}}a(o,"recurseForResources");function c(u){return typeof u=="function"&&(u.get||u.put||u.post||u.delete)}return a(c,"isResource"),s}var rm,Lb=Re(()=>{tm();rm=require("path");a(m$,"handleFile")});var im={};Fe(im,{start:()=>p$});function p$({resources:e}){e.set("login",sm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var sm,Mb=Re(()=>{cn();a(p$,"start");sm=class extends $t{static{a(this,"Login")}static async get(t,r,n){}static async post(t,r,n){let{username:s,password:i,redirect:o}=r;return{data:await n.login(s,i)}}}});var Gb={};Fe(Gb,{parse:()=>am,streamAsJSON:()=>Lc,stringify:()=>qi});function Lc(e){return new om({value:e})}function Pb(e){return console.error(e),JSON.stringify(e.toString())}function Ub(e,t,r){return e?.then?r?e.then(t,r):e.then(t):t(e)}function qi(e){try{return JSON.stringify(e)??"null"}catch(t){if(t===xb)return Hb(e);if(t.resolution)return t.resolution.then(()=>qi(e));throw t}}function Hb(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+=Hb(e[n]);return r+"]"}else{r="{";let n=!0;for(let s in e)n?n=!1:r+=",",r+=JSON.stringify(s)+":"+qi(e[s]);return r+"}"}}else{if(t==="string")return JSON.stringify(e);if(t==="undefined")return"null"}return e.toString()}function am(e){return g$.test(e)?S$.parse(e):JSON.parse(e)}var vb,Bb,S$,T$,xb,om,g$,cm=Re(()=>{vb=require("stream"),Bb=H(require("json-bigint-fixes")),S$=(0,Bb.default)({useNativeBigInt:!0}),T$=1e4,xb={};BigInt.prototype.toJSON=function(){throw xb};a(Lc,"streamAsJSON");om=class extends vb.Readable{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0),this.activeIterators=[]}*serialize(t){if(t&&typeof t=="object"){let r=t[Symbol.asyncIterator],n=t[Symbol.iterator];if((n||r)&&!t.then){yield"[";let s=!0;if((r||n)&&!(t instanceof Array)){let i=r?t[Symbol.asyncIterator]():t[Symbol.iterator]();this.activeIterators.push(i);let o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){this.activeIterators.splice(this.activeIterators.indexOf(i),1),yield"]";return}else s?s=!1:yield",",yield*this.serialize(o.value)}for(let i of t)s?s=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(s=>this.serialize(s),Pb)}catch(s){yield Pb(s)}else yield qi(t)}else yield qi(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);Ub(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>T$?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 Ub(this.readIterator(t.childIterator),n=>{if(n)return t.childIterator=null,this.readIterator(t)});do{let n=t.next();if(n.done)return!0;if(r=n.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(s=>{if(s&&typeof s.return=="function")return t.childIterator=s,this.readIterator(t);if(this.push(s+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}_destroy(t,r){for(let n of this.activeIterators)t?n.throw(t):n.return();r()}};a(Pb,"handleError");a(Ub,"when");a(qi,"stringify");a(Hb,"jsStringify");g$=/[[,:]\s*-?\d{16,}/;a(am,"parse")});var Xb=g((zce,jb)=>{"use strict";var um=require("recursive-iterator"),R$=require("alasql"),lm=require("clone"),qb=z(),{handleHDBError:Fb,hdb_errors:A$}=se(),{HDB_ERROR_MSGS:kb,HTTP_STATUS_CODES:Vb}=A$,{getDatabases:O$}=(Ae(),ie(ke)),b$=["DISTINCT_ARRAY"],$b=Symbol("validateTables"),_m=Symbol("validateTable"),Qce=Symbol("getAllColumns"),Yb=Symbol("validateAllColumns"),y_=Symbol("findColumn"),Kb=Symbol("validateOrderBy"),Mc=Symbol("validateSegment"),dm=Symbol("validateColumn"),Wb=Symbol("setColumnsForTable"),Qb=Symbol("checkColumnsForAsterisk"),zb=Symbol("validateGroupBy"),Jb=Symbol("hasColumns"),fm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[$b](),this[Qb](),this[Yb]()}[$b](){if(this[Jb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[_m](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[_m](t.table)})}}[Jb](){let t=!1,r=new um(this.statement);for(let{node:n,path:s}of r)if(n&&n.columnid){t=!0;break}return t}[_m](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=O$();if(!r[t.databaseid])throw Fb(new Error,kb.SCHEMA_NOT_FOUND(t.databaseid),Vb.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Fb(new Error,kb.TABLE_NOT_FOUND(t.databaseid,t.tableid),Vb.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(s=>{let i=lm(s);i.table=lm(t),this.attributes.push(i)})}[y_](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)}[Qb](){let t=new um(this.statement.columns);for(let{node:r,path:n}of t)r&&r.columnid==="*"&&n.indexOf("expression")<0&&this[Wb](r.tableid)}[Wb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&!r.relation&&this.statement.columns.push(new R$.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Yb](){this[Mc](this.statement.columns,!1),this[Mc](this.statement.joins,!1),this[Mc](this.statement.where,!1),this[zb](this.statement.group,!1),this[Mc](this.statement.order,!0)}[Mc](t,r){if(!t)return;let n=new um(t),s=[];for(let{node:i,path:o}of n)!qb.isEmpty(i)&&!qb.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Kb](i):s.push(this[dm](i)));return s}[zb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(n=>{if(!(n.funcid&&b$.indexOf(n.funcid.toUpperCase())>=0)){if(!n.aggregatorid&&!n.columnid){let s=lm(n);delete s.as,r.push(s)}else if(n.columnid){let s=this[y_](n)[0];s&&r.push(s)}}}),this.statement.group.forEach(n=>{let s=null;if(!n.columnid)r.forEach((i,o)=>{if(i.toString()===n.toString()){s=i,r.splice(o,1);return}});else{let i=this[y_](n);if(!i||i.length===0)throw`unknown column '${n.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${n.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){s=o,r.splice(c,1);return}})}if(!s)throw`group by column '${n.toString()}' must be in select`}),r.length>0)throw`select column '${r[0].attribute?r[0].attribute:r[0].toString()}' must be in group by`}[Kb](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[dm](t)}[dm](t){let r=this[y_](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]}};jb.exports=fm});var ey=g((jce,Zb)=>{"use strict";var Em=class{static{a(this,"BridgeMethods")}createSchema(){throw new Error("createSchema bridge method is not defined")}dropSchema(){throw new Error("dropSchema bridge method is not defined")}createTable(){throw new Error("createTable bridge method is not defined")}dropTable(){throw new Error("dropTable bridge method is not defined")}createRecords(){throw new Error("createRecords bridge method is not defined")}updateRecords(){throw new Error("updateRecords bridge method is not defined")}async upsertRecords(){throw new Error("upsertRecords bridge method is not defined")}deleteRecords(){throw new Error("deleteRecords bridge method is not defined")}createAttribute(){throw new Error("createAttribute bridge method is not defined")}dropAttribute(){throw new Error("dropAttribute bridge method is not defined")}searchByConditions(){throw new Error("searchByConditions bridge method is not defined")}searchByHash(){throw new Error("searchByHash bridge method is not defined")}searchByValue(){throw new Error("searchByValue bridge method is not defined")}getDataByHash(){throw new Error("getDataByHash bridge method is not defined")}getDataByValue(){throw new Error("getDataByValue bridge method is not defined")}deleteRecordsBefore(){throw new Error("deleteRecordsBefore bridge method is not defined")}deleteAuditLogsBefore(){throw new Error("deleteAuditLogsBefore bridge method is not defined")}async readAuditLog(){throw new Error("readAuditLog bridge method is not defined")}};Zb.exports=Em});var ry=g((Zce,ty)=>{"use strict";var hm=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ty.exports=hm});var oy={};Fe(oy,{HAS_EXPIRATION:()=>Am,LAST_TIMESTAMP_PLACEHOLDER:()=>vc,LOCAL_TIMESTAMP:()=>y$,METADATA:()=>Pc,NO_TIMESTAMP:()=>pm,PENDING_LOCAL_TIME:()=>Om,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Rm,RecordEncoder:()=>gm,TIMESTAMP_ASSIGN_LAST:()=>I$,TIMESTAMP_ASSIGN_NEW:()=>sy,TIMESTAMP_ASSIGN_PREVIOUS:()=>iy,TIMESTAMP_PLACEHOLDER:()=>N_,TIMESTAMP_RECORD_PREVIOUS:()=>Sm,getUpdateRecord:()=>bm,handleLocalTimeForGets:()=>D_});function C$(){return Uc[0]=Uc[0]^64,N$.getFloat64(0)}function D_(e){let t=e.getEntry;e.readCount=0,e.cachePuts=!1,e.getEntry=function(i,o){e.readCount++;let c=t.call(this,i,o),u=c?.value,_=u?.[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c&&(c.key=i),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[Pc]>=0?c.value:c};let n=e.getRange;e.getRange=function(i){let o=n.call(this,i);return i.valuesForKey?o.map(c=>c?.value):i.values===!1||i.onlyCount?o:o.map(c=>{let u=c.value,_=u[Pc];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})};let s=e.useReadTransaction();if(s.done(),!s.done.isTracked){let i=s.constructor,o=s.use,c=s.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Fi.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Fi.length;u++){let _=Fi[u].deref();(!_||_.isDone||_.isCommitted)&&Fi.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function bm(e,t,r){return function(n,s,i,o,c=-1,u,_,l,d="put",E,f){if(E||u==null?Yo=i?.localTime?Sm|iy:pm:Yo=u?i?.localTime?Sm|16384:sy|16384:pm,l>0&&(c|=Am),w_=c,Tm=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Yo>0},p;try{E&&(h.ifVersion=p=i?.version??null);let S=e.put(n,s,h);if(u){let T=_?.user?.username;if(f&&(I_=e.encoder.encode(f)),E&&i?.localTime){let R=i?.localTime,b=r.get(R);if(b){let I=vt(b).previousLocalTime;return r.put(R,C_(o,t,n,I,T,d,I_),{ifVersion:p}),S}}r.put(vc,C_(o,t,n,i?.localTime?1:0,T,d,I_),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return S}catch(S){throw S.message+=" id: "+n+" options: "+h,S}}}var ny,mm,N_,vc,Rm,y$,Pc,Uc,N$,pm,sy,I$,iy,Sm,Am,Om,w$,I_,Yo,w_,Tm,gm,Fi,Bc=Re(()=>{ny=require("msgpackr");ni();mm=H($()),N_=new Uint8Array([1,1,1,1,4,64,0,0]),vc=new Uint8Array([1,1,1,1,1,0,0,0]),Rm=new Uint8Array([1,1,1,1,3,64,0,0]),y$=Symbol("local-timestamp"),Pc=Symbol("metadata"),Uc=new Uint8Array(8),N$=new DataView(Uc.buffer,0,8),pm=0,sy=0,I$=1,iy=3,Sm=4,Am=16,Om=1,Yo=0,w_=-1,Tm=0,gm=class extends ny.Encoder{static{a(this,"RecordEncoder")}constructor(t){t.useBigIntExtension=!0,super(t);let r=this.encode;this.encode=function(n,s){if(Yo||w_>=0){let i=0,o=Yo;o&&(i+=8,Yo=0);let c=w_,u=Tm;c>=0&&(i+=2,w_=-1,u&&(i+=8,Tm=0));let _=w$=r.call(this,n,s|2048|i);I_=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(N_[4]=o,N_[5]=o>>8,_.set(N_,l),l+=8),c>=0&&(_[l++]=c,_[l++]=0,u&&(_.dataView||(_.dataView=new DataView(_.buffer,_.byteOffset,_.byteLength))).setFloat64(l,u)),_}else return r.call(this,n,s)}}decode(t,r){let n=r?.start||0,s=r>-1?r:r?.end||t.length,i=t[n],o=0;try{if(i<32&&s>2){let c=n,u;if(i===2){if(t.copy)t.copy(Uc,0,c),c+=8;else for(let d=0;d<8;d++)Uc[d]=t[c++];u=C$(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Am&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,s),s-c);return{localTime:u,value:l,[Pc]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(C$,"getTimestamp");a(D_,"handleLocalTimeForGets");Fi=[];setInterval(()=>{for(let e=0;e<Fi.length;e++){let t=Fi[e].deref();!t||t.isDone||t.isCommitted?Fi.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&(t.openTimer>60?(mm.error("Read transaction detected that has been open too long (over 15 minutes), ending transaction",t),t.done()):mm.error("Read transaction detected that has been open too long (over one minute), make sure read transactions are quickly closed",t)),t.openTimer++):t.openTimer=1)}},15e3).unref();a(bm,"getUpdateRecord")});var xc=g((sue,cy)=>{"use strict";var ay=ee(),D$=P(),{RecordEncoder:L$}=(Bc(),ie(oy)),nue=require("fs");ay.initSync();var M$=ay.get(D$.CONFIG_PARAMS.STORAGE_CACHING)!==!1,ym=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=M$&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:L$})}};cy.exports=ym});var Hc=g((oue,uy)=>{"use strict";var xr=ee(),un=P();xr.initSync();var L_=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=2048,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.eventTurnBatching=!1,this.noSync=xr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||xr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||xr.get(un.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",xr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)!==void 0&&(this.overlappingSync=xr.get(un.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC)),xr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)&&(this.maxFreeSpaceToLoad=xr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETOLOAD)),xr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)&&(this.maxFreeSpaceToRetain=xr.get(un.CONFIG_PARAMS.STORAGE_MAXFREESPACETORETAIN)),xr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)&&(this.pageSize=xr.get(un.CONFIG_PARAMS.STORAGE_PAGESIZE)),this.noReadAhead=xr.get(un.CONFIG_PARAMS.STORAGE_NOREADAHEAD)}};uy.exports=L_;L_.MAX_DBS=1e4});var ze=g((cue,Ty)=>{"use strict";var Im=require("lmdb"),wn=require("fs-extra"),Hr=require("path"),M_=vr(),dy=$(),_r=Ur().LMDB_ERRORS_ENUM,P_=ry(),wm=xc(),fy=Hc(),si=ft(),ly=P(),{table:P$,resetDatabases:U$}=(Ae(),ie(ke)),_y=ee(),Cn=si.INTERNAL_DBIS_NAME,Ey=si.DBI_DEFINITION_NAME,v$="data.mdb",B$="lock.mdb",Gc=".mdb",x$="-lock",Nm=class{static{a(this,"TransactionCursor")}constructor(t,r,n=!1){this.dbi=ln(t,r),this.key_type=this.dbi[si.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[si.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:n===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function U_(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(U_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await wn.access(e)}catch(n){throw n.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):n}try{let n=Hr.join(e,t+Gc);return await wn.access(n,wn.constants.R_OK|wn.constants.F_OK),n}catch(n){if(n.code==="ENOENT")if(r)try{return await wn.access(Hr.join(e,t,v$),wn.constants.R_OK|wn.constants.F_OK),Hr.join(e,t)}catch(s){if(s.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw n}}a(Cm,"validateEnvironmentPath");function v_(e,t){if(M_.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(v_,"validateEnvDBIName");async function H$(e,t,r=!1,n=!1){U_(e,t);let s=Hr.basename(e);t=t.toString();let i=_y.get(ly.CONFIG_PARAMS.DATABASES);i||_y.setProperty(ly.CONFIG_PARAMS.DATABASES,i={}),i[s]||(i[s]={}),i[s].path=e;try{return await Cm(e,t,n),hy(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=Hr.join(e,t);await wn.mkdirp(n?c:e);let u=new fy(n?c:c+Gc,!1),_=Im.open(u);_.dbis=Object.create(null);let l=new wm(!1);_.openDB(Cn,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dm(e,t,r);return _[si.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(H$,"createEnvironment");async function G$(e,t,r,n=!0){U_(e,t),t=t.toString();let s=Hr.join(e,t);return P$({table:t,database:Hr.parse(e).name,path:s,attributes:[{name:"id",isPrimaryKey:!0}]})}a(G$,"copyEnvironment");async function hy(e,t,r=!1){U_(e,t),t=t.toString();let n=Dm(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 Cm(e,t),i=Hr.join(e,t+Gc),o=s!=i,c=new fy(s,o),u=Im.open(c);u.dbis=Object.create(null);let _=py(u);for(let l=0;l<_.length;l++)ln(u,_[l]);return u[si.ENVIRONMENT_NAME_KEY]=n,global.lmdb_map[n]=u,u}a(hy,"openEnvironment");async function q$(e,t,r=!1){U_(e,t),t=t.toString();let n=Hr.join(e,t+Gc),s=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Dm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await my(o),delete global.lmdb_map[i]}}await wn.remove(s),await wn.remove(s===n?s+x$:Hr.join(Hr.dirname(s),B$))}a(q$,"deleteEnvironment");async function my(e){M_.validateEnv(e);let t=e[si.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(my,"closeEnvironment");function Dm(e,t,r=!1){let s=`${Hr.basename(e)}.${t}`;return r===!0&&(s=`txn.${s}`),s}a(Dm,"getCachedEnvironmentName");function F$(e){M_.validateEnv(e);let t=Object.create(null),r=ln(e,Cn);for(let{key:n,value:s}of r.getRange({start:!1}))if(n!==Cn)try{t[n]=Object.assign(new P_,s)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return t}a(F$,"listDBIDefinitions");function py(e){M_.validateEnv(e);let t=[],r=ln(e,Cn);for(let{key:n}of r.getRange({start:!1}))n!==Cn&&t.push(n);return t}a(py,"listDBIs");function k$(e,t){let n=ln(e,Cn).getEntry(t),s=new P_;if(n!==void 0){try{s=Object.assign(s,n.value)}catch{dy.warn(`an internal error occurred: unable to parse DBI Definition for ${n}`)}return s}}a(k$,"getDBIDefinition");function Sy(e,t,r,n=!r){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ln(e,t)}catch(s){if(s.message===_r.DBI_DOES_NOT_EXIST){let i=new wm(r,n===!0),o=e.openDB(t,i),c=new P_(r===!0,n);return o[Ey]=c,ln(e,Cn).putSync(t,c),e.dbis[t]=o,o}throw s}}a(Sy,"createDBI");function ln(e,t){if(v_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Cn?r=k$(e,t):r=new P_,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let n;try{let s=new wm(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(_r.DBI_DOES_NOT_EXIST):s}return n[Ey]=r,e.dbis[t]=n,n}a(ln,"openDBI");function V$(e,t){v_(e,t),t=t.toString();let r=ln(e,t),n=r.getStats();return r[si.DBI_DEFINITION_NAME].is_hash_attribute&&n.entryCount>0&&n.entryCount--,n}a(V$,"statDBI");async function $$(e,t){try{let r=Hr.join(e,t+Gc);return(await wn.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a($$,"environmentDataSize");function Y$(e,t){if(v_(e,t),t=t.toString(),t===Cn)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ln(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ln(e,Cn).removeSync(t)}a(Y$,"dropDBI");function K$(e,t,r){let n;for(let s=0;s<r.length;s++){let i=r[s];if(!e.dbis[i])try{ln(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)Sy(e,i,i!==t,i===t),n=!0;else throw o}}n&&U$()}a(K$,"initializeDBIs");Ty.exports={openDBI:ln,openEnvironment:hy,createEnvironment:H$,listDBIs:py,listDBIDefinitions:F$,createDBI:Sy,dropDBI:Y$,statDBI:V$,deleteEnvironment:q$,initializeDBIs:K$,TransactionCursor:Nm,environmentDataSize:$$,copyEnvironment:G$,closeEnvironment:my}});var Ry=g((lue,gy)=>{"use strict";var Lm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],n=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n}};gy.exports=Lm});var Oy=g((due,Ay)=>{"use strict";var Mm=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=n,this.original_records=s}};Ay.exports=Mm});var yy=g((Eue,by)=>{"use strict";var Pm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,n=[]){this.written_hashes=t,this.txn_time=r,this.original_records=n}};by.exports=Pm});var Ko=g((Tue,wy)=>{"use strict";var W$=ze(),Q$=Ry(),z$=Oy(),J$=yy(),zn=vr(),qc=Ur().LMDB_ERRORS_ENUM,j$=ft(),Rs=P(),X$=z(),Z$=require("uuid"),mue=require("lmdb"),{handleHDBError:e1,hdb_errors:t1}=se(),{OVERFLOW_MARKER:pue,MAX_SEARCH_KEY_LENGTH:Sue}=j$,Ny=ee();Ny.initSync();var B_=Ny.get(Rs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Um=Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ki=Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function r1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new Q$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u];Iy(_,!0,s);let l=n1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Bm(o,c,n,i,s)}a(r1,"insertRecords");function n1(e,t,r,n){let s=n[t];return e.dbis[t].ifNoExists(s,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||n.hasOwnProperty(o)===!1)continue;let c=n[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][Rs.FUNC_VAL],n[o]=c)}let u=zn.getIndexedValues(c),_=e.dbis[o];if(u){B_&&_.prefetch(u.map(l=>({key:l,value:s})),x_);for(let l=0,d=u.length;l<d;l++)_.put(u[l],s)}}B_&&e.dbis[t].prefetch([s],x_),e.dbis[t].put(s,n,n[ki])})}a(n1,"insertRecord");function s1(e,t=[]){let r=0;for(let n=0;n<t.length;n++){let s=t[n];e.splice(s-r,1),r++}}a(s1,"removeSkippedRecords");function Iy(e,t,r){let n=r>0;(n||!Number.isInteger(e[ki]))&&(e[ki]=r||(r=zn.getNextMonotonicTime())),t===!0?(n||!Number.isInteger(e[Um]))&&(e[Um]=r||zn.getNextMonotonicTime()):delete e[Um]}a(Iy,"setTimestamps");function vm(e,t,r){r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Rs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),W$.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function i1(e,t,r,n,s=zn.getNextMonotonicTime()){Hm(e,t,r,n),vm(e,t,r);let i=new z$,o=[],c=[],u=[];for(let _=0;_<n.length;_++){let l=n[_],d=l[t],E;try{E=xm(e,t,l,d,i,!0,s)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(E),u.push(d)}return Bm(c,u,n,i,s,o)}a(i1,"updateRecords");async function o1(e,t,r,n,s=zn.getNextMonotonicTime()){try{Hm(e,t,r,n)}catch(u){throw e1(u,u.message,t1.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new J$,o=[],c=[];for(let u=0;u<n.length;u++){let _=n[u],l;X$.isEmpty(_[t])?(l=Z$.v4(),_[t]=l):l=_[t];let d=xm(e,t,_,l,i,!1,s);o.push(d),c.push(l)}return Bm(o,c,n,i,s)}a(o1,"upsertRecords");async function Bm(e,t,r,n,s,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?n.written_hashes.push(t[c]):(n.skipped_hashes.push(t[c]),i.push(c));return n.txn_time=s||zn.getNextMonotonicTime(),s1(r,i),n}a(Bm,"finalizeWrite");function xm(e,t,r,n,s,i=!1,o){let c=e.dbis[t],u=c.getEntry(n),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(Iy(r,!l,o),Number.isInteger(r[ki])&&_[ki]>r[ki])return!1;l&&s.original_records.push(_);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],S=e.dbis[h];if(S===void 0)continue;let T=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][Rs.FUNC_VAL],r[h]=p)}if(p===T)continue;let R=zn.getIndexedValues(T);if(R){B_&&S.prefetch(R.map(b=>({key:b,value:n})),x_);for(let b=0,I=R.length;b<I;b++)S.remove(R[b],n)}if(R=zn.getIndexedValues(p),R){B_&&S.prefetch(R.map(b=>({key:b,value:n})),x_);for(let b=0,I=R.length;b<I;b++)S.put(R[b],n)}}let f=Object.assign({},_,r);c.put(n,f,f[ki])},"do_put");return u?d=c.ifVersion(n,u.version,E):d=c.ifNoExists(n,E),d.then(f=>f?!0:xm(e,t,r,n,s,i,o))}a(xm,"updateUpsertRecord");function a1(e,t,r){if(zn.validateEnv(e),t===void 0)throw new Error(qc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qc.WRITE_ATTRIBUTES_REQUIRED):new Error(qc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(a1,"validateBasic");function Hm(e,t,r,n){if(a1(e,t,r),!Array.isArray(n))throw n===void 0?new Error(qc.RECORDS_REQUIRED):new Error(qc.RECORDS_MUST_BE_ARRAY)}a(Hm,"validateWrite");function x_(){}a(x_,"noop");wy.exports={insertRecords:r1,updateRecords:i1,upsertRecords:o1}});var Vi=g((Rue,c1)=>{c1.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},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:"__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:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]},hdb_raw_analytics:{hash_attribute:"id",name:"hdb_raw_analytics",schema:"system",audit:!1,attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]},hdb_durable_session:{hash_attribute:"id",name:"hdb_durable_session",schema:"system",attributes:[{attribute:"id"}]},hdb_session_will:{hash_attribute:"id",name:"hdb_session_will",schema:"system",attributes:[{attribute:"id"}]}}});var jn=g((Aue,Ly)=>{"use strict";var Dy=z(),Cy=P(),Wo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Jn=require("joi"),ii={schema_format:{pattern:Wo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},u1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number(),Jn.array()).required(),l1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()),_1=Jn.alternatives(Jn.string().min(1).max(ii.schema_length.maximum).pattern(Wo).messages({"string.pattern.base":"{:#label} "+ii.schema_format.message}),Jn.number()).required();function d1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ii.schema_length.maximum?`'${e}' maximum of 250 characters`:Wo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(d1,"checkValidTable");function f1(e,t){return Dy.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(f1,"validateSchemaExists");function E1(e,t){let r=t.state.ancestors[0].schema;return Dy.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(E1,"validateTableExists");function h1(e,t){return e.toLowerCase()===Cy.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Cy.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(h1,"validateSchemaName");Ly.exports={common_validators:ii,schema_regex:Wo,hdb_schema_table:u1,validateSchemaExists:f1,validateTableExists:E1,validateSchemaName:h1,checkValidTable:d1,hdb_database:l1,hdb_table:_1}});var Xe=g((bue,My)=>{"use strict";var dr=require("validate.js");dr.validators.type=function(e,t,r,n){return e===null||typeof e>"u"||dr.validators.type.checks[t](e)?null:` must be a '${t}' value`};dr.validators.type.checks={Object:function(e){return dr.isObject(e)&&!dr.isArray(e)},Array:dr.isArray,Integer:dr.isInteger,Number:dr.isNumber,String:dr.isString,Date:dr.isDate,Boolean:function(e){return typeof e=="boolean"}};dr.validators.hasValidFileExt=function(e,t){return dr.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};My.exports={validateObject:m1,validateObjectAsync:p1,validateBySchema:S1};function m1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=dr(e,t,{format:"flat"});return r?new Error(r):null}a(m1,"validateObject");async function p1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await dr.async(e,t,{format:"flat"})}catch(r){let n=r.join(",");return new Error(n)}return null}a(p1,"validateObjectAsync");function S1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(S1,"validateBySchema")});var H_=g((Nue,Py)=>{var{common_validators:Xn}=jn(),kc=Xe(),Fc="is required",gt={database:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},schema:{presence:!1,format:Xn.schema_format,length:Xn.schema_length},table:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length},hash_attribute:{presence:!0,format:Xn.schema_format,length:Xn.schema_length}};function Vc(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Vc,"makeAttributesStrings");function T1(e){return e=Vc(e),gt.table.presence=!1,gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(T1,"schema_object");function g1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(g1,"table_object");function R1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,kc.validateObject(e,gt)}a(R1,"create_table_object");function A1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence={message:Fc},gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(A1,"attribute_object");function O1(e){return e=Vc(e),gt.table.presence={message:Fc},gt.attribute.presence=!1,gt.hash_attribute.presence=!1,kc.validateObject(e,gt)}a(O1,"describe_table");function b1(e){if(e){if(!Array.isArray(e))throw new Error("residence must be a string array");if(e.length===0)throw new Error("residence cannot be an empty array");for(let t=0;t<e.length;t++)if(typeof e[t]!="string")throw new Error(`residence must be a string array, item '${e[t]}' is not a string`)}}a(b1,"validateTableResidence");Py.exports={schema_object:T1,create_table_object:R1,table_object:g1,attribute_object:A1,describe_table:O1,validateTableResidence:b1}});var vy=g((wue,Uy)=>{"use strict";var y1=require("uuid"),Gm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.attribute=n,this.id=s||y1.v4(),this.schema_table=`${this.schema}.${this.table}`}};Uy.exports=Gm});var G_=g((Due,By)=>{"use strict";var N1=vy(),qm=class extends N1{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,n,s,i=!0,o=!1){super(t,r,n,s),this.dup_sort=i,this.is_hash_attribute=o}};By.exports=qm});var Hy=g((Mue,xy)=>{"use strict";xy.exports=w1;var I1="inserted";function w1(e,t,r,n){let s={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:n};return e===I1?(s.inserted_hashes=t,s):(s.update_hashes=t,s)}a(w1,"returnObject")});var q_=g((Uue,Vy)=>{"use strict";var C1=P(),Fm=ze(),D1=Ko(),{getSystemSchemaPath:L1,getSchemaPath:M1}=je(),P1=Vi(),U1=H_(),v1=G_(),B1=Hy(),{handleHDBError:Gy,hdb_errors:Fy}=se(),qy=z(),{HTTP_STATUS_CODES:x1}=Fy,km=P1.hdb_attribute,ky=[];for(let e=0;e<km.attributes.length;e++)ky.push(km.attributes[e].attribute);var H1="inserted";Vy.exports=G1;async function G1(e){let t=U1.attribute_object(e);if(t)throw Gy(new Error,t.message,Fy.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qy.checkGlobalSchemaTable(e.schema,e.table);if(r)throw Gy(new Error,r,x1.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qy.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 v1(e.schema,e.table,e.attribute,e.id);try{let i=await Fm.openEnvironment(M1(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}`);Fm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Fm.openEnvironment(L1(),C1.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await D1.insertRecords(o,km.hash_attribute,ky,[s]);return B1(H1,c,{records:[s]},u)}catch(i){throw i}}a(G1,"lmdbCreateAttribute")});var $m=g((Bue,Yy)=>{var{hdb_table:q1,hdb_database:$y}=jn(),F1=Xe(),Vm=require("joi"),k1={undefined:"undefined",null:"null"},V1=a((e,t)=>{let r=Object.keys(e),n=r.length,s;for(let i=0;i<n;i++){let o=r[i];(!o||o.length===0||k1[o]!==void 0)&&(s===void 0?s=`Invalid attribute name: '${o}'`:s+=`. Invalid attribute name: '${o}'`)}return s?t.message(s):e},"custom_records_val"),$1=Vm.object({database:$y,schema:$y,table:q1,records:Vm.array().items(Vm.object().custom(V1)).required()});Yy.exports=function(e){return F1.validateBySchema(e,$1)}});var $c=g((Gue,Wy)=>{"use strict";var As=z(),Ky=$(),Hue=$m(),{getDatabases:Y1}=(Ae(),ie(ke)),{ClientError:$i}=se();Wy.exports=K1;function K1(e){if(As.isEmpty(e))throw new $i("invalid update parameters defined.");if(As.isEmptyOrZeroLength(e.schema))throw new $i("invalid schema specified.");if(As.isEmptyOrZeroLength(e.table))throw new $i("invalid table specified.");if(!Array.isArray(e.records))throw new $i("records must be an array");let t=Y1()[e.schema]?.[e.table];if(As.isEmpty(t))throw new $i(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,n=new Set,s={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&As.isEmptyOrZeroLength(o[r]))throw Ky.error("a valid hash attribute must be provided with update record:",o),new $i("a valid hash attribute must be provided with update record, check log for more info");if(!As.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Ky.error(`a valid hash value must be provided with ${e.operation} record:`,o),new $i(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!As.isEmpty(o[r])&&o[r]!==""&&n.has(As.autoCast(o[r]))&&(o.skip=!0),n.add(As.autoCast(o[r]));for(let c in o)s[c]=1}),s[r]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(s)}}a(K1,"insertUpdateValidate")});var zy=g((Fue,Qy)=>{"use strict";var Ym=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Qy.exports=Ym});var Xy=g((Vue,jy)=>{"use strict";var Km=ze(),W1=$(),Jy=Ur().LMDB_ERRORS_ENUM;jy.exports=Q1;async function Q1(e){try{if(global.lmdb_map!==void 0&&e.operation!==void 0){let t=Object.keys(global.lmdb_map),r;switch(e.operation){case"drop_schema":for(let i=0;i<t.length;i++){let o=t[i];if(o.startsWith(`${e.schema}.`)||o.startsWith(`txn.${e.schema}.`))try{await Km.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Jy.ENV_REQUIRED)throw c}}break;case"drop_table":let n=`${e.schema}.${e.table}`,s=`txn.${n}`;try{await Km.closeEnvironment(global.lmdb_map[n]),await Km.closeEnvironment(global.lmdb_map[s])}catch(i){if(i.message!==Jy.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){W1.error(t)}}a(Q1,"cleanLMDBMap")});var Os=g((Yue,rN)=>{"use strict";var Yc=require("crypto"),z1=ee(),{CONFIG_PARAMS:J1}=P(),eN="aes-256-cbc",j1=32,X1=16,Wm=64,tN=32,Z1=Wm+tN,Zy=new Map;rN.exports={encrypt:eY,decrypt:tY,createNatsTableStreamName:rY};function eY(e){let t=Yc.randomBytes(j1),r=Yc.randomBytes(X1),n=Yc.createCipheriv(eN,Buffer.from(t),r),s=n.update(e);s=Buffer.concat([s,n.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=s.toString("hex");return i+o+c}a(eY,"encrypt");function tY(e){let t=e.substr(0,Wm),r=e.substr(Wm,tN),n=e.substr(Z1,e.length),s=Buffer.from(r,"hex"),i=Buffer.from(n,"hex"),o=Yc.createDecipheriv(eN,Buffer.from(t,"hex"),s),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(tY,"decrypt");function rY(e,t){let r=z1.get(J1.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,n=Zy.get(r);return n||(n=Yc.createHash("md5").update(r).digest("hex"),Zy.set(r,n)),n}a(rY,"createNatsTableStreamName")});var bs=g((Que,sN)=>{"use strict";var Wue=Gr(),Kc=$(),nN=H_(),nY=Os(),F_=z(),{handleHDBError:k_,hdb_errors:sY}=se(),{HDB_ERROR_MSGS:V_,HTTP_STATUS_CODES:Qm}=sY,iY=ee();iY.initSync();var{getDatabases:zm}=(Ae(),ie(ke)),oY=require("fs-extra");sN.exports={describeAll:aY,describeTable:$_,describeSchema:cY};async function aY(e={}){try{let t=F_.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=zm(),o={},c={},u=[],_=e?.exact_count;for(let d in i){o[d]=!0,!t&&!s&&!r&&(c[d]=e.hdb_user?.role?.permission[d]?.describe);let E=i[d];for(let f in E)try{let h;if(t||s||r)h=await $_({schema:d,table:f,exact_count:_});else if(n&&n[d].describe&&n[d].tables[f].describe){let p=n[d].tables[f].attribute_permissions;h=await $_({schema:d,table:f,exact_count:_},p)}h&&u.push(h)}catch(h){Kc.error(h)}}let l={};for(let d in u)t||s||r?(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]):c[u[d].schema]&&(l[u[d].schema]==null&&(l[u[d].schema]={}),l[u[d].schema][u[d].name]=u[d],o[u[d].schema]&&delete o[u[d].schema]);for(let d in o)t||s||r?l[d]={}:c[d]&&(l[d]={});return l}catch(t){return Kc.error("Got an error in describeAll"),Kc.error(t),k_(new Error,V_.DESCRIBE_ALL_ERR)}}a(aY,"describeAll");async function $_(e,t){F_.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=nN.describe_table(e);if(i)throw i;let c=zm()[r];if(!c)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let u=c[n];if(!u)throw k_(new Error,V_.TABLE_NOT_FOUND(e.schema,e.table),Qm.NOT_FOUND);function _(f){l.push(Object.assign({},{attribute:f.attribute,type:f.type,elements:f.elements?.type,indexed:f.indexed,is_primary_key:f.isPrimaryKey,assigned_created_time:f.assignCreatedTime,assigned_updated_time:f.assignUpdatedTime,nullable:f.nullable,properties:f.properties?f.properties.map(h=>({type:h.type,name:h.name})):void 0}))}a(_,"pushAtt");let l=[];if(s){let f={};s.forEach(h=>{h.describe&&(f[h.attribute_name]=!0)}),u.attributes.forEach(h=>{f[h.name]&&_(h)})}else u.attributes?.forEach(f=>_(f));let d;try{d=(await oY.stat(u.primaryStore.env.path)).size}catch(f){Kc.warn("unable to get database size",f)}let E={schema:r,name:u.tableName,hash_attribute:u.attributes.find(f=>f.isPrimaryKey||f.is_hash_attribute)?.name,audit:u.audit,schema_defined:u.schemaDefined,attributes:l,db_size:d};E.clustering_stream_name=nY.createNatsTableStreamName(E.schema,E.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});E.record_count=f.recordCount,E.estimated_record_range=f.estimatedRange;let h=u.auditStore;if(h)for(let p of h.getKeys({reverse:!0,limit:1}))E.last_updated_record=p[0];if(!E.last_updated_record&&u.indices.__updatedtime__)for(let p of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))E.last_updated_record=p}catch(f){Kc.warn(`unable to stat table dbi due to ${f}`)}return E}a($_,"descTable");async function cY(e){F_.transformReq(e);let t=nN.schema_object(e);if(t)throw t;let r;e.hdb_user&&!e.hdb_user?.role?.permission?.super_user&&(r=e.hdb_user?.role?.permission[e.schema]);let n=e.schema.toString(),i=zm()[n];if(!i)throw k_(new Error,V_.SCHEMA_NOT_FOUND(e.schema),Qm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let _=await $_({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(cY,"describeSchema")});var ys=g((Xue,uN)=>{var uY=Vi(),{callbackify:oN,promisify:lY}=require("util"),{getDatabases:aN}=(Ae(),ie(ke));uN.exports={setSchemaDataToGlobal:iN,getTableSchema:_Y,getSystemSchema:dY,setSchemaDataToGlobalAsync:lY(iN)};var cN=bs(),Jue=oN(cN.describeAll),jue=oN(cN.describeTable);function iN(e){global.hdb_schema=aN(),e&&e()}a(iN,"setSchemaDataToGlobal");function _Y(e,t,r){let n=aN()[e];if(!n)return r(`schema ${e} does not exist`);let s=n[t];return s?r(null,{schema:e,name:t,hash_attribute:s.primaryKey}):r(`table ${e}.${t} does not exist`)}a(_Y,"getTableSchema");function dY(){return uY}a(dY,"getSystemSchema")});var qr=g((ele,fN)=>{"use strict";var K_=$m(),Yt=z(),fY=require("util"),W_=Dn(),EY=ys(),lN=$(),{handleHDBError:Yi,hdb_errors:hY}=se(),{HTTP_STATUS_CODES:Ki}=hY,mY=fY.promisify(EY.getTableSchema),pY="updated",_N="inserted",dN="upserted";fN.exports={insert:TY,update:gY,upsert:RY,validation:SY,flush:AY};async function SY(e){if(Yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await mY(e.schema,e.table),r=K_(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let n=t.hash_attribute,s=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&Yt.isEmptyOrZeroLength(c[n]))throw lN.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(!Yt.isEmptyOrZeroLength(c[n])&&(c[n]==="null"||c[n]==="undefined"))throw lN.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[n]}" is not a valid hash attribute value`);!Yt.isEmpty(c[n])&&c[n]!==""&&s.has(Yt.autoCast(c[n]))&&(c.skip=!0),s.add(Yt.autoCast(c[n]));for(let u in c)i[u]=1}),i[n]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(i)}}a(SY,"validation");async function TY(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.createRecords(e);return Y_(_N,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time)}a(TY,"insertData");async function gY(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.updateRecords(e);return Yt.isEmpty(n.existing_rows)?Y_(pY,n.written_hashes,e,n.skipped_hashes,n.new_attributes,n.txn_time):Y_(n.update_action,[],e,n.hashes,void 0,n.txn_time)}a(gY,"updateData");async function RY(e){if(e.operation!=="upsert")throw Yi(new Error,"invalid operation, must be upsert",Ki.INTERNAL_SERVER_ERROR);let t=K_(e);if(t)throw Yi(new Error,t.message,Ki.BAD_REQUEST);Yt.transformReq(e);let r=Yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yi(new Error,r,Ki.BAD_REQUEST);let n=await W_.upsertRecords(e);return Y_(dN,n.written_hashes,e,[],n.new_attributes,n.txn_time)}a(RY,"upsertData");function Y_(e,t,r,n,s,i){let o={message:`${e} ${t.length} of ${t.length+n.length} records`,new_attributes:s,txn_time:i};return e===_N?(o.inserted_hashes=t,o.skipped_hashes=n,o):e===dN?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=n,o)}a(Y_,"returnObject");function AY(e){return Yt.transformReq(e),W_.flush(e.schema,e.table)}a(AY,"flush")});var jm=g((rle,mN)=>{var OY=Xe(),Jm=require("joi"),{hdb_table:bY,hdb_database:EN}=jn(),hN={schema:EN,database:EN,table:bY},yY={date:Jm.date().iso().required()},NY={timestamp:Jm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};mN.exports=function(e,t){let r=t==="timestamp"?{...hN,...NY}:{...hN,...yY},n=Jm.object(r);return OY.validateBySchema(e,n)}});var TN=g((nle,SN)=>{var IY=Xe(),Xm=require("joi"),{hdb_table:wY,hdb_database:pN}=jn(),CY=Xm.object({schema:pN,database:pN,table:wY,hash_values:Xm.array().required(),ids:Xm.array()});SN.exports=function(e){return IY.validateBySchema(e,CY)}});var RN=g((sle,gN)=>{"use strict";var Zm=class{static{a(this,"InsertObject")}constructor(t,r,n,s,i){this.operation=t,this.schema=r,this.table=n,this.hash_attribute=s,this.records=i}},ep=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,n,s,i,o){this.schema=t,this.table=r,this.search_attribute=n,this.hash_attribute=s,this.get_attributes=i,this.search_value=o}},tp=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gN.exports={InsertObject:Zm,NoSQLSeachObject:ep,DeleteResponseObject:tp}});var ci=g((ole,NN)=>{"use strict";var ON=jm(),DY=TN(),Wi=z(),AN=require("moment"),bN=$(),{promisify:LY,callbackify:MY}=require("util"),Qi=P(),PY=ys(),rp=LY(PY.getTableSchema),np=Dn(),{DeleteResponseObject:UY}=RN(),{handleHDBError:oi,hdb_errors:vY}=se(),{HDB_ERROR_MSGS:Q_,HTTP_STATUS_CODES:ai}=vY,BY="records successfully deleted",xY=MY(yN);NN.exports={delete:xY,deleteRecord:yN,deleteFilesBefore:HY,deleteAuditLogsBefore:GY};async function HY(e){let t=ON(e,"date");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),!AN(e.date,AN.ISO_8601).isValid())throw oi(new Error,Q_.INVALID_DATE,ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_DATE,!0);let n=Wi.checkSchemaTableExist(e.schema,e.table);if(n)throw oi(new Error,n,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,n,!0);let s=await np.deleteRecordsBefore(e);if(await rp(e.schema,e.table),bN.info(`Finished deleting files before ${e.date}`),s&&s.message)return s.message}a(HY,"deleteFilesBefore");async function GY(e){let t=ON(e,"timestamp");if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);if(Wi.transformReq(e),isNaN(e.timestamp))throw oi(new Error,Q_.INVALID_VALUE("Timestamp"),ai.BAD_REQUEST,Qi.LOG_LEVELS.ERROR,Q_.INVALID_VALUE("Timestamp"),!0);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);let n=await np.deleteAuditLogsBefore(e);return await rp(e.schema,e.table),bN.info(`Finished deleting audit logs before ${e.timestamp}`),n}a(GY,"deleteAuditLogsBefore");async function yN(e){e.ids&&(e.hash_values=e.ids);let t=DY(e);if(t)throw oi(t,t.message,ai.BAD_REQUEST,void 0,void 0,!0);Wi.transformReq(e);let r=Wi.checkSchemaTableExist(e.schema,e.table);if(r)throw oi(new Error,r,ai.NOT_FOUND,Qi.LOG_LEVELS.ERROR,r,!0);try{await rp(e.schema,e.table);let n=await np.deleteRecords(e);return Wi.isEmptyOrZeroLength(n.message)&&(n.message=`${n.deleted_hashes.length} of ${e.hash_values.length} ${BY}`),n}catch(n){if(n.message===Qi.SEARCH_NOT_FOUND_MESSAGE){let s=new UY;return s.message=Qi.SEARCH_NOT_FOUND_MESSAGE,s.skipped_hashes=e.hash_values.length,s.deleted_hashes=0,s}throw n}}a(yN,"deleteRecord")});var z_=g((cle,CN)=>{var qY=require("crypto"),IN=9;function FY(e){let t=VY(IN),r=wN(e+t);return t+r}a(FY,"createHash");function kY(e,t){let r=e?.substr(0,IN),n=r+wN(t+r);return e===n}a(kY,"validateHash");function VY(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,n="";for(let s=0;s<e;s++){let i=Math.floor(Math.random()*r);n+=t[i]}return n}a(VY,"generateSalt");function wN(e){return qY.createHash("md5").update(e).digest("hex")}a(wN,"md5");CN.exports={hash:FY,validate:kY}});var LN=g((lle,DN)=>{var sp=Xe(),Zt={username:{presence:!0,format:"[\\w\\-\\_]+",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 $Y(e){return Zt.password.presence=!0,Zt.username.presence=!0,Zt.role.presence=!0,Zt.active.presence=!0,sp.validateObject(e,Zt)}a($Y,"addUserValidation");function YY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(YY,"alterUserValidation");function KY(e){return Zt.password.presence=!1,Zt.username.presence=!0,Zt.role.presence=!1,Zt.active.presence=!1,sp.validateObject(e,Zt)}a(KY,"dropUserValidation");DN.exports={addUserValidation:$Y,alterUserValidation:YY,dropUserValidation:KY}});var Ve=g((fle,PN)=>{"use strict";var{platform:dle}=require("os"),WY="nats-server.zip",ip="nats-server",QY=process.platform==="win32"?`${ip}.exe`:ip,zY=/^[^\s.,*>]+$/,MN="__request__",JY=a(e=>`${e}.${MN}`,"REQUEST_SUBJECT"),jY={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},XY={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},ZY={HUB:"hub.pid",LEAF:"leaf.pid"},eK={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},tK={SUCCESS:"success",ERROR:"error"},rK={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},nK={TXN:"txn",MSGID:"msgid"},Qo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},sK={[Qo.ERR]:1,[Qo.WRN]:2,[Qo.INF]:3,[Qo.DBG]:4,[Qo.TRC]:5},iK={debug:"-D",trace:"-DVV"};PN.exports={NATS_SERVER_ZIP:WY,NATS_SERVER_NAME:ip,NATS_BINARY_NAME:QY,PID_FILES:ZY,NATS_CONFIG_FILES:XY,SERVER_SUFFIX:eK,NATS_TERM_CONSTRAINTS_RX:zY,REQUEST_SUFFIX:MN,UPDATE_REMOTE_RESPONSE_STATUSES:tK,CLUSTER_STATUS_STATUSES:rK,REQUEST_SUBJECT:JY,SUBJECT_PREFIXES:nK,MSG_HEADERS:jY,LOG_LEVELS:Qo,LOG_LEVEL_FLAGS:iK,LOG_LEVEL_HIERARCHY:sK}});var vN=g((hle,UN)=>{"use strict";var oK={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
|
|
5
7
|
`),cert:"-----BEGIN CERTIFICATE-----\rMIIDXDCCAkSgAwIBAgIFNTE4MzQwDQYJKoZIhvcNAQELBQAwXTEXMBUGA1UEAxMO\rSGFycGVyREIsIEluYy4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDTzEPMA0GA1UE\rBxMGRGVudmVyMRcwFQYDVQQKEw5IYXJwZXJEQiwgSW5jLjAeFw0yMjAzMTEyMzAz\rNDlaFw0yNzAzMTAyMzAzNDlaMF0xFzAVBgNVBAMTDkhhcnBlckRCLCBJbmMuMQsw\rCQYDVQQGEwJVUzELMAkGA1UECBMCQ08xDzANBgNVBAcTBkRlbnZlcjEXMBUGA1UE\rChMOSGFycGVyREIsIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\rAQCsEUlBF8WImS78rCFXVKyntxfrW++4qZ3hGnoD2MHZAuDHyeP/5eGnaE9GQhKc\r4DwG4DGvh0wP2zIYnBfiQ3L2ZtnlDR9ZkKIQYGlVxTUn6T43krhK5nZKqDF43Yg3\rZEvO3cbJBjiKZx0eA2/toehdSsTAHHQx5gTDcggNe2tgoJHYPwi9YF/AxSBZrbgb\ryWlYgtYDmF32ytHP03GUCIdKOFuBPsHTGu4SkdEIdLIqO9oglW1YFH5qZ6NiwApW\rsP+GCuqOwDXXbdjr75iq9Tq/CDrjGFLaTPmvd2Q0qG/BtaCll0ghpG+yIHvt/iQs\rajS+LxEWAnVlGMaDdFErbDUtAgMBAAGjIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYD\rVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQASR4YW/rPK7PNArHVe9zzM\rb0rKNX/2T9/0nybRhmE/+hdlSgliTAeebmwkUS2APckmekYt/q2ZY2NS65Fo/jjp\rG8TJrtcF4h+ylVqUp0ZXQLFtIsr7r2JZA7hJ6njW6G4DHSZ0gxtECLi4CBlTjzm5\rNmnmIDObvGRTuqmcdAZmXeObbta/He2XIzietukPAYX062pNM+G5XT5UM1eG/Vlp\rN86vjhpyI+ffKy+C60SJqxmKM3ydgN7oLscE7+2wLPN25XqN4W99OwGsp5dTdu/f\r5lPtFayXdJ55e/sNQKmGN+UGLrL05c2MWgjb8U/LFilnupUianceoeSERZmVjzKX\r-----END CERTIFICATE-----\r".replace(/\r/g,`\r
|
|
6
8
|
`)},aK="certificate.pem",cK="privateKey.pem",uK="ca.pem";UN.exports={CERTIFICATE_VALUES:oK,CERTIFICATE_PEM_NAME:aK,PRIVATEKEY_PEM_NAME:cK,CA_PEM_NAME:uK}});var op=g((ple,FN)=>{"use strict";var GN=require("fs-extra"),ae=require("joi"),lK=require("os"),{boolean:be,string:er,number:tt,array:J_}=ae.types(),{totalmem:BN}=require("os"),zi=require("path"),_K=$(),j_=z(),mle=vN(),xN=P(),dK=Xe(),HN="log",fK="components",EK="Invalid logging.rotation.maxSize unit. Available units are G, M or K",hK="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",mK="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",pK="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",SK="rootPath config parameter is undefined",TK="clustering.enabled config parameter is undefined",Ji=tt.min(0).required(),X_=J_.items({host:er.required(),port:Ji}).empty(null),Zn,qN=!1;FN.exports={configValidator:gK,routesValidator:NK,route_constraints:X_};function gK(e,t=!1){if(qN=t,Zn=e.rootPath,j_.isEmpty(Zn))throw SK;let r=be.required(),n=tt.min(0).max(1e3).empty(null).default(yK),s=er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Wc),i=er.optional().empty(null),o=er.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ae.string().empty(null).default(Wc),u=ae.custom(AK).empty(null).default(Wc),_=e.clustering?.enabled;if(j_.isEmpty(_))throw TK;let l=ae.object({certificate:i,certificateAuthority:i,privateKey:i}),d;return _===!0?d=ae.object({enabled:r,hubServer:ae.object({cluster:ae.object({name:ae.required().empty(null),network:ae.object({port:Ji,routes:X_}).required()}).required(),leafNodes:ae.object({network:ae.object({port:Ji}).required()}).required(),network:ae.object({port:Ji}).required()}).required(),leafServer:ae.object({network:ae.object({port:Ji,routes:X_}).required(),streams:ae.object({maxAge:tt.min(120).allow(null).optional(),maxBytes:tt.min(1).allow(null).optional(),maxMsgs:tt.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ae.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:be.optional(),databaseLevel:be.optional(),tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required(),verify:be.optional()}),user:er.optional().empty(null)}).required():d=ae.object({enabled:r,tls:ae.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:be.required()})}).required(),ae.object({authentication:ae.object({authorizeLocal:be,cacheTTL:tt.required(),enableSessions:be}),analytics:ae.object({aggregatePeriod:tt}),componentsRoot:s.optional(),clustering:d,localStudio:ae.object({enabled:r}).required(),logging:ae.object({auditAuthEvents:ae.object({logFailed:be,logSuccessful:be}),file:be.required(),level:ae.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ae.object({enabled:be.optional(),compress:be.optional(),interval:er.custom(bK).optional().empty(null),maxSize:er.custom(OK).optional().empty(null),path:er.optional().empty(null).default(Wc)}).required(),root:s,stdStreams:be.required(),auditLog:be.required()}).required(),operationsApi:ae.object({network:ae.object({cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),keepAliveTimeout:tt.min(1).optional(),port:tt.optional().empty(null),domainSocket:ae.optional().empty("hdb/operations-server").default(Wc),securePort:tt.optional().empty(null),timeout:tt.min(1).optional()}).optional(),tls:ae.alternatives([ae.array().items(l),l])}).required(),rootPath:er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ae.object({network:ae.object({port:Ji,securePort:Ji,mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})])}).required(),webSocket:be.optional(),requireAuthentication:be.optional()}),http:ae.object({compressionThreshold:tt.optional(),cors:be.optional(),corsAccessList:J_.optional(),headersTimeout:tt.min(1).optional(),port:tt.min(0).optional().empty(null),securePort:tt.min(0).optional().empty(null),maxHeaderSize:tt.optional(),mtls:ae.alternatives([be.optional(),ae.object({user:er.optional(),certificateAuthority:i,required:be.optional()})]),threadRange:ae.alternatives([J_.optional(),er.optional()])}).required(),threads:ae.alternatives(n.optional(),ae.object({count:n.optional(),debug:ae.alternatives(be.optional(),ae.object({startingPort:tt.min(1).optional(),host:er.optional(),waitForDebugger:be.optional()})),maxHeapMemory:tt.min(0).optional()})),storage:ae.object({writeAsync:be.required(),overlappingSync:be.optional(),caching:be.optional(),compression:ae.alternatives([be.optional(),ae.object({dictionary:er.optional(),threshold:tt.optional()})]),compactOnStart:be.optional(),compactOnStartKeepBackup:be.optional(),noReadAhead:be.optional(),path:u,prefetchWrites:be.optional(),maxFreeSpaceToLoad:tt.optional(),maxFreeSpaceToRetain:tt.optional()}).required(),ignoreScripts:be.optional(),tls:ae.alternatives([ae.array().items(l),l])}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(gK,"configValidator");function RK(e){return qN||GN.existsSync(e)?null:`Specified path ${e} does not exist.`}a(RK,"doesPathExist");function AK(e,t){ae.assert(e,er.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=RK(e);if(r)return t.message(r)}a(AK,"validatePath");function OK(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(EK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(mK):e}a(OK,"validateRotationMaxSize");function bK(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(hK);let n=e.slice(0,-1);return isNaN(parseInt(n))?t.message(pK):e}a(bK,"validateRotationInterval");function yK(e,t){let r=t.state.path.join("."),n=lK.cpus().length,s=n-1;s<=2&&(s=2);let i=process.constrainedMemory?.()||BN();return i=Math.round(Math.min(i,BN())/1e6),s=Math.max(Math.min(s,Math.round((i-750)/300)),1),_K.info(`Detected ${n} cores and ${i}MB on this machine, defaulting ${r} to ${s}`),s}a(yK,"setDefaultThreads");function Wc(e,t){let r=t.state.path.join(".");if(!j_.isEmpty(t.original)&&r!=="operationsApi.network.domainSocket")return t.original;if(j_.isEmpty(Zn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return zi.join(Zn,fK);case"logging.root":return zi.join(Zn,HN);case"clustering.leafServer.streams.path":return zi.join(Zn,"clustering","leaf");case"storage.path":let n=zi.join(Zn,xN.LEGACY_DATABASES_DIR_NAME);return GN.existsSync(n)?n:zi.join(Zn,xN.DATABASES_DIR_NAME);case"logging.rotation.path":return zi.join(Zn,HN);case"operationsApi.network.domainSocket":return r==null?null:zi.join(Zn,"operations-server");default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Wc,"setDefaultRoot");function NK(e){let t=ae.object({routes:X_});return dK.validateBySchema({routes:e},t)}a(NK,"routesValidator")});var Er=g((gle,JN)=>{"use strict";var kr=P(),Bt=z(),It=$(),{configValidator:IK,routesValidator:kN}=op(),fr=require("fs-extra"),wK=require("yaml"),Ln=require("path"),CK=require("is-number"),$N=require("properties-reader"),DK=require("lodash"),{handleHDBError:LK}=se(),{HTTP_STATUS_CODES:MK,HDB_ERROR_MSGS:Z_}=Ur(),Tle=require("minimist"),{server:PK}=(lr(),ie(Gi)),{DATABASES_PARAM_CONFIG:Qc,CONFIG_PARAMS:Fr,CONFIG_PARAM_MAP:Mn}=kr,UK="Unable to get config value because config is uninitialized",vK="Config successfully initialized",BK="Error backing up config file",xK="Empty parameter sent to getConfigValue",YN=Ln.join(kr.PACKAGE_ROOT,"config","yaml",kr.HDB_DEFAULT_CONFIG_FILE),HK="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",VN={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"},ed,wt,td;JN.exports={createConfigFile:GK,getDefaultConfig:qK,getConfigValue:WN,initConfig:cp,flattenConfig:zo,updateConfigValue:QN,updateConfigObject:kK,getConfiguration:YK,setConfiguration:KK,readConfigFile:lp,getClusteringRoutes:WK,initOldConfig:zN,getConfigFromFile:QK,getConfigFilePath:ji,addConfig:zK,deleteConfigFromFile:JK,getConfigObj:jK};function GK(e,t=!1){let r=ui(YN);ed=zo(r.toJSON());let n;for(let c in e){let u=Mn[c.toLowerCase()];if(u===Fr.DATABASES){Array.isArray(e[c])?n=e[c]:n=Object.keys(e[c]).map(_=>({[_]:e[c][_]}));continue}if(!u&&(c.endsWith("_package")||c.endsWith("_port"))&&(u=c),u!==void 0){let _=u.split("_"),l=ap(u,e[c]);u==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{r.setIn([..._],l)}catch(d){It.error(d)}}}n&&KN(r,n),up(r,t);let s=r.toJSON();wt=zo(s);let i=r.getIn(["rootPath"]),o=Ln.join(i,kr.HDB_CONFIG_FILE);fr.createFileSync(o),fr.writeFileSync(o,String(r)),It.trace(`Config file written to ${o}`)}a(GK,"createConfigFile");function KN(e,t){let r;try{try{r=JSON.parse(t)}catch(n){if(!Bt.isObject(t))throw n;r=t}for(let n of r){let s=Object.keys(n)[0];if(n[s].hasOwnProperty(Qc.TABLES))for(let i in n[s][Qc.TABLES])for(let o in n[s][Qc.TABLES][i]){let c=n[s][Qc.TABLES][i][o],u=[Fr.DATABASES,s,Qc.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in n[s]){let o=n[s][i],c=[Fr.DATABASES,s,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(n){It.error("Error parsing schemas CLI/env config arguments",n)}}a(KN,"setSchemasConfig");function qK(e){if(ed===void 0){let r=ui(YN);ed=zo(r.toJSON())}let t=Mn[e.toLowerCase()];if(t!==void 0)return ed[t.toLowerCase()]}a(qK,"getDefaultConfig");function WN(e){if(e==null){It.error(xK);return}if(wt===void 0){It.trace(UK);return}let t=Mn[e.toLowerCase()];if(t!==void 0)return wt[t.toLowerCase()]}a(WN,"getConfigValue");function ji(e=Bt.getPropsFilePath()){let t=Bt.getEnvCliRootPath();return t?Ln.join(t,kr.HDB_CONFIG_FILE):$N(e).get(kr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(ji,"getConfigFilePath");function cp(e=!1){if(wt===void 0||e){let t;if(!Bt.noBootFile()){t=Bt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw It.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=ji(t),n;if(r.includes("config/settings.js"))try{zN(r);return}catch(i){if(i.code!==kr.NODE_ERROR_CODES.ENOENT)throw i}try{n=ui(r)}catch(i){if(i.code===kr.NODE_ERROR_CODES.ENOENT){It.trace(`HarperDB config file not found at ${r}.
|
|
7
|
-
This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FK(n,r),up(n);let s=n.toJSON();if(PK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(vK)}}a(cp,"initConfig");function FK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(FK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=IK(r,t);if(n.error)throw Z_.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function kK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(kK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,kr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===Fr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===Fr.HTTP_SECUREPORT&&r[E]===wt[Fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===Fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[Fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===Fr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=kr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,kr.HDB_CONFIG_FILE);n===!0&&VK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function VK(e,t){try{let r=Ln.join(t,"backup",`${kr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(BK),It.error(r)}}a(VK,"backupConfigFile");var $K=["databases"];function zo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),td=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])&&!$K.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Fr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===Fr.CLUSTERING_NODENAME||e===Fr.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(CK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function YK(){let e=Bt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(YK,"getConfiguration");async function KK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),HK}catch(i){throw typeof i=="string"||i instanceof String?LK(i,i,MK.BAD_REQUEST,void 0,void 0,!0):i}}a(KK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return wK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function WK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===Fr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function QK(e){let t=lp();return DK.get(t,e.replaceAll("_","."))}a(QK,"getConfigFromFile");async function zK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(ji(),String(r))}a(zK,"addConfig");function JK(e){let t=ji(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,kr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(JK,"deleteConfigFromFile");function jK(){return td||(cp(),td)}a(jK,"getConfigObj")});var XN=g((Ale,jN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jN.exports={BaseLicense:nd,ExtendedLicense:_p}});var Xi=g((ble,sI)=>{"use strict";var jo=require("fs-extra"),eI=z_(),tI=require("crypto"),XK=require("moment"),ZK=require("uuid").v4,tr=$(),fp=require("path"),eW=z(),li=P(),{totalmem:ZN}=require("os"),tW=XN().ExtendedLicense,Jo="invalid license key format",rW="061183",nW="mofi25",sW="aes-256-cbc",iW=16,oW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:cW,licenseSearch:mp,getLicense:_W,checkMemoryLimit:dW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function aW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(aW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function cW(){let e=hp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(cW,"generateFingerPrint");async function uW(){let e=ZK(),t=eI.hash(e),r=hp();try{await jo.mkdirp(Ep()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(uW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nW),c=o[1];c=Buffer.concat([Buffer.from(c)],iW);let u=Buffer.concat([Buffer.from(i)],oW),_=tI.createDecipheriv(sW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=lW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<XK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${rW}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||tr.error("Invalid licence"),r}a(nI,"validateLicense");function lW(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(lW,"checkOldLicense");function mp(){let e=new tW,t=[];try{t=jo.readFileSync(aW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(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){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function _W(){return dp||await mp(),dp}a(_W,"getLicense");function dW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(dW,"checkMemoryLimit")});var _n=g((Cle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:RW,alterUser:AW,dropUser:bW,getSuperUser:wW,userInfo:yW,listUsers:id,listUsersExternal:NW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:CW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=qr(),fW=ci(),Tp=z_(),EI=LN(),hI=Gr(),gp=Ns(),Vr=z(),mI=require("validate.js"),Oe=$(),{promisify:EW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),hW=Er(),Nle=ee(),Ile=Xi(),mW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:pW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:Xo}=pW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),SW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,TW=hI.searchByHash,gW=EW(fW.delete);async function RW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,Xo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,Xo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,Xo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(RW,"addUser");async function AW(e){let t=mI.cleanAttributes(e,pI);if(Vr.isEmptyOrZeroLength(t.username))throw new Error(cI);if(Vr.isEmptyOrZeroLength(t.password)&&Vr.isEmptyOrZeroLength(t.role)&&Vr.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!Vr.isEmpty(t.password)&&Vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!Vr.isEmpty(t.active)&&!Vr.isBoolean(t.active))throw new Error(dI);let r=OW(t.username);if(!Vr.isEmpty(t.password)&&!Vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Xo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Xo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(AW,"alterUser");function OW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OW,"isClusterUser");async function bW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Vr.isEmpty(global.hdb_users.get(e.username)))throw es(new Error,Xo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bW,"dropUser");async function yW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(yW,"userInfo");async function NW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(NW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],IW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Vr.errorizeMessage(e)}return null}a(id,"listUsers");function IW(e){try{if(!e){Oe.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(mW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.UNAUTHORIZED,void 0,void 0,!0);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(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function wW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wW,"getSuperUser");async function CW(){let e=await id(),t=hW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Vr.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(CW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){SW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ple,bI)=>{"use strict";var Zi=$(),$r=P(),DW=Xy(),Lle=ys(),Mle=bs(),LW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),MW=require("process"),{resetDatabases:PW}=(Ae(),ie(ke)),UW={[$r.ITC_EVENT_TYPES.SCHEMA]:vW,[$r.ITC_EVENT_TYPES.USER]:OI};async function vW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await DW(e.message),await BW(e.message)}a(vW,"schemaHandler");async function BW(e){try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(BW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${$r.HDB_ITC_CLIENT_PREFIX}${MW.pid} received user event:`,e),await LW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=UW});var Pn=g((Gle,NI)=>{"use strict";var vle=$(),bp=z(),xW=P(),{ITC_ERRORS:jc}=Ur(),{parentPort:Ble,threadId:HW,isMainThread:GW,workerData:xle}=require("worker_threads"),{onMessageFromWorkers:qW,broadcast:Hle,broadcastWithAcknowledgement:FW}=Qe();NI.exports={sendItcEvent:kW,validateEvent:yI,SchemaEventMsg:VW,UserEventMsg:$W};var od;qW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kW(e){return!GW&&e.message&&(e.message.originator=HW),FW(e)}a(kW,"sendItcEvent");function yI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(xW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function VW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(VW,"SchemaEventMsg");function $W(e){this.originator=e}a($W,"UserEventMsg")});var Ns=g((kle,DI)=>{"use strict";var II=P(),Fle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function YW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(YW,"signalSchemaChange");function KW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalUserChange");DI.exports={signalSchemaChange:YW,signalUserChange:KW}});var cd=g(($le,MI)=>{"use strict";var LI=z(),WW=P(),QW=$(),zW=q_(),JW=G_(),jW=Ns(),{SchemaEventMsg:XW}=Pn(),ZW="already exists in";MI.exports=eQ;async function eQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.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 tQ(e,t.schema,t.name,i)})),s}a(eQ,"lmdbCheckForNewAttributes");async function tQ(e,t,r,n){let s=new JW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZW))QW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tQ,"createNewAttribute");async function rQ(e){let t;return t=await zW(e),jW.signalSchemaChange(new XW(process.pid,WW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rQ,"createAttribute")});var ta=g((Kle,PI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PI.exports=yp});var vI=g((Qle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Np=class extends nQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((Jle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,Ip=class extends iQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((Xle,HI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,wp=class extends aQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((e_e,qI)=>{"use strict";var uQ=ta(),lQ=P().OPERATIONS_ENUM,Cp=class extends uQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lQ.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var Xc=g((n_e,YI)=>{"use strict";var r_e=require("path"),kI=ze(),_Q=vI(),dQ=xI(),fQ=GI(),EQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:hQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:mQ}=je();YI.exports=pQ;async function pQ(e,t){if($I.get(hQ.LOGGING_AUDITLOG)===!1)return;let r=mQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=SQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pQ,"writeTransaction");function SQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new _Q(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new dQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new EQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SQ,"createTransactionObject")});var Dp=g((o_e,KI)=>{"use strict";var TQ=$c(),i_e=Ic(),Zc=P(),gQ=wc(),RQ=Ko().insertRecords,AQ=ze(),OQ=$(),bQ=cd(),{getSchemaPath:yQ}=je(),NQ=Xc();KI.exports=IQ;async function IQ(e){try{let{schema_table:t,attributes:r}=TQ(e);gQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bQ(e.hdb_auth_header,t,r),s=yQ(e.schema,e.table),i=await AQ.openEnvironment(s,e.table),o=await RQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NQ(e,o)}catch(c){OQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(IQ,"lmdbCreateRecords")});var zI=g((c_e,QI)=>{"use strict";var WI=P(),wQ=Dp(),CQ=Ic(),DQ=require("fs-extra"),{getSchemaPath:LQ}=je();QI.exports=MQ;async function MQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wQ(r),await DQ.mkdirp(LQ(e.schema))}a(MQ,"lmdbCreateSchema")});var jI=g((l_e,JI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};JI.exports=Lp});var tw=g((h_e,ew)=>{"use strict";var XI=ze(),Mp=vr(),Pp=Ur().LMDB_ERRORS_ENUM,PQ=ft(),ZI=$(),d_e=z(),UQ=require("lmdb"),vQ=jI(),BQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=PQ,xQ=BQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=XI.listDBIs(e);XI.initializeDBIs(e,t,s);let i=new vQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[xQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let R=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)R.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(HQ,"deleteRecords");ew.exports={deleteRecords:HQ}});var eu=g((p_e,nw)=>{"use strict";var na=z(),GQ=tw(),qQ=ze(),{getSchemaPath:FQ}=je(),kQ=Xc(),VQ=$();nw.exports=$Q;async function $Q(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.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=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await GQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kQ(e,o)}catch(c){VQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($Q,"lmdbDeleteRecords");function rw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(rw,"createDeleteResponse")});var vp=g((g_e,sw)=>{"use strict";var YQ=P(),T_e=vr();function Up(e,t){let r=Object.create(null);if(t.length===1&&YQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function KQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(KQ,"searchAll");function WQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(WQ,"searchAllToMap");function QQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function zQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(zQ,"endsWith");function JQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(JQ,"contains");function jQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(jQ,"greaterThanCompare");function XQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(XQ,"greaterThanEqualCompare");function ZQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ZQ,"lessThanCompare");function ez(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(ez,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:KQ,searchAllToMap:WQ,iterateDBI:QQ,endsWith:zQ,contains:JQ,greaterThanCompare:jQ,greaterThanEqualCompare:XQ,lessThanCompare:ZQ,lessThanEqualCompare:ez,pushResults:eo}});var sa=g((y_e,_w)=>{"use strict";var _i=ze(),A_e=$(),Yr=vr(),ld=ft(),ht=Ur().LMDB_ERRORS_ENUM,O_e=z(),tz=P(),_d=vp(),{parseRow:rz}=_d,b_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:nz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let R={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(R.values=!1,d.getRange(R).map(b=>({value:b}))):d.getRange(R)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function sz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rz(_.value,r))))}a(sz,"searchAll");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(iz,"searchAllToMap");function oz(e,t,r=!1,n=void 0,s=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oz,"iterateDBI");function az(e,t){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(az,"countAll");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Yr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(cz,"equals");function uz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(uz,"count");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Yr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lz,"startsWith");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(_z,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(dz,"greaterThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(fz,"greaterThanEqual");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(Ez,"lessThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(hz,"lessThanEqual");function mz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Yr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Yr.convertKeyValueToWrite(n),s=Yr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(mz,"between");function pz(e,t,r,n){Yr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(pz,"searchByHash");function Sz(e,t,r){Yr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sz,"checkHashExists");function Tz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(Tz,"batchSearchByHash");function gz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(gz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>nz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&tz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:sz,searchAllToMap:iz,count:uz,countAll:az,equals:cz,startsWith:lz,endsWith:_z,contains:cw,searchByHash:pz,setGetWholeRowAttributes:ru,batchSearchByHash:Tz,batchSearchByHashToMap:gz,checkHashExists:Sz,iterateDBI:oz,greaterThan:dz,greaterThanEqual:fz,lessThan:Ez,lessThanEqual:hz,between:mz}});var ia=g((I_e,mw)=>{var dw=require("lodash"),fw=Xe(),he=require("joi"),Rz=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=jn(),{handleHDBError:Az,hdb_errors:Oz}=se(),{getDatabases:bz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:yz}=Oz,Nz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Iz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=fw.validateBySchema(e,Iz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Az(new Error,s,yz.NOT_FOUND);let o=bz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((C_e,pw)=>{"use strict";var wz=ze(),Cz=ia(),{getSchemaPath:Dz}=je();pw.exports=Lz;function Lz(e){let t=Cz(e,"hashes");if(t)throw t;let r=Dz(e.schema,e.table);return wz.openEnvironment(r,e.table)}a(Lz,"initialize")});var xp=g((L_e,Sw)=>{"use strict";var Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Uz,"lmdbGetDataByHash")});var oa=g((P_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((B_e,gw)=>{"use strict";var v_e=oa(),vz=sa(),Bz=Bp();gw.exports=xz;async function xz(e){let t=await Bz(e),r=global.hdb_schema[e.schema][e.table];return vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xz,"lmdbSearchByHash")});var rs=g((H_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((q_e,ww)=>{"use strict";var rr=sa(),Hz=ze(),Gz=z(),me=ft(),ro=P(),qz=Vi(),Ow=Ur().LMDB_ERRORS_ENUM,{getSchemaPath:Fz}=je(),Is=ro.SEARCH_WILDCARDS;async function kz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(kz,"prepSearch");async function yw(e,t,r,n){let s=Fz(e.schema,e.table),i=await Hz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function Vz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Vz,"checkToFetchMore");function Iw(e,t,r,n){if(Gz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:kz,searchByType:Nw}});var Dw=g((V_e,Cw)=>{"use strict";var k_e=rs(),$z=ia(),Yz=z(),Kz=P(),Wz=Ed();Cw.exports=Qz;function Qz(e,t){if(!Yz.isEmpty(t)&&Kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$z(e,"value");if(n)throw n;return Wz.prepSearch(e,t,!0)}a(Qz,"lmdbGetDataByValue")});var su=g((K_e,Lw)=>{"use strict";var Y_e=rs(),zz=ia(),Jz=z(),jz=P(),Xz=Ed();Lw.exports=Zz;async function Zz(e,t){if(!Jz.isEmpty(t)&&jz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zz(e,"value");if(n)throw n;return Xz.prepSearch(e,t,!1)}a(Zz,"lmdbSearchByValue")});var Pw=g((z_e,Mw)=>{"use strict";var Q_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((Z_e,xw)=>{"use strict";var j_e=Pw().SearchByConditionsObject,e2=rs(),t2=ia(),Vp=sa(),hd=ft(),{Resource:X_e}=(cn(),ie($p)),Bw=Ed(),r2=vp(),n2=require("lodash"),{getSchemaPath:s2}=je(),Uw=ze(),{handleHDBError:i2,hdb_errors:o2}=se(),{HTTP_STATUS_CODES:a2}=o2,c2=1e8;xw.exports=u2;async function u2(e){let t=t2(e,"conditions");if(t)throw i2(t,t.message,a2.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=s2(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=n2.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=c2}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>r2.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(u2,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new e2(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((tde,Gw)=>{"use strict";var l2=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=l2.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((nde,Ww)=>{"use strict";var Vw=rs(),$w=aa(),Yw=su(),Kw=eu(),hr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:_2,getSchemaPath:d2}=je(),kw=$();Ww.exports=f2;async function f2(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await E2(e),await h2(e);let t=d2(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_2(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(f2,"lmdbDropTable");async function E2(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(E2,"deleteAttributesFromSystem");async function h2(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(h2,"dropTableFromSystem")});var zw=g((ide,Qw)=>{"use strict";var m2=require("fs-extra"),p2=rs(),S2=oa(),T2=aa(),g2=Kp(),R2=eu(),A2=xp(),O2=su(),ws=P(),{getSchemaPath:b2}=je(),{handleHDBError:y2,hdb_errors:N2}=se(),{HDB_ERROR_MSGS:I2,HTTP_STATUS_CODES:w2}=N2;Qw.exports=C2;async function C2(e){let t;try{t=await D2(e.schema);let r=new p2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await O2(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await g2(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new T2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await R2(s);let i=b2(t);await m2.remove(i)}catch(r){throw r}}a(C2,"lmdbDropSchema");async function D2(e){let t=new S2(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await A2(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw y2(new Error,I2.SCHEMA_NOT_FOUND(e),w2.NOT_FOUND,void 0,void 0,!0);return n}a(D2,"validateDropSchema")});var md=g((ade,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var Xw=g((lde,jw)=>{"use strict";var L2=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:M2}=je(),Qp=ft(),ude=md();jw.exports=P2;async function P2(e){let t;try{let r=M2(e.schema,e.table);await L2.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(P2,"createTransactionsAuditEnvironment")});var rC=g((dde,tC)=>{"use strict";var zp=P(),Zw=ze(),U2=Ko(),{getSystemSchemaPath:v2,getSchemaPath:B2}=je(),x2=Vi(),H2=q_(),Jp=G_(),G2=$(),q2=Xw(),Xp=x2.hdb_table,eC=[];for(let e=0;e<Xp.attributes.length;e++)eC.push(Xp.attributes[e].attribute);tC.exports=F2;async function F2(e,t){let r=B2(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(v2(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await U2.insertRecords(o,Xp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await jp(n),await jp(s),await jp(i)}await q2(t)}catch(o){throw o}}a(F2,"lmdbCreateTable");async function jp(e){try{await H2(e)}catch(t){G2.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jp,"createAttribute")});var sC=g((Ede,nC)=>{"use strict";var k2=$c(),V2=wc(),$2=cd(),iu=P(),Y2=Ko().updateRecords,K2=ze(),{getSchemaPath:W2}=je(),Q2=Xc(),z2=$();nC.exports=J2;async function J2(e){try{let{schema_table:t,attributes:r}=k2(e);V2(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $2(e.hdb_auth_header,t,r),s=W2(e.schema,e.table),i=await K2.openEnvironment(s,e.table),o=await Y2(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Q2(e,o)}catch(c){z2.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(J2,"lmdbUpdateRecords")});var oC=g((mde,iC)=>{"use strict";var j2=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=j2.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((Tde,aC)=>{"use strict";var Sde=oC(),X2=$c(),Z2=wc(),eJ=cd(),ou=P(),tJ=Ko().upsertRecords,rJ=ze(),{getSchemaPath:nJ}=je(),sJ=Xc(),iJ=$(),{handleHDBError:oJ,hdb_errors:aJ}=se();aC.exports=cJ;async function cJ(e){let t;try{t=X2(e)}catch(u){throw oJ(u,u.message,aJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;Z2(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await eJ(e.hdb_auth_header,r,n),i=nJ(e.schema,e.table),o=await rJ.openEnvironment(i,e.table),c=await tJ(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await sJ(e,c)}catch(u){iJ.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(cJ,"lmdbUpsertRecords")});var lC=g((Rde,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((Ode,_C)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};_C.exports=tS});var hC=g((Nde,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:uJ}=je(),yde=lC(),au=ft(),lJ=z(),fC=dC(),_J=require("util").promisify,dJ=_J(setTimeout),fJ=1e4,EJ=100;EC.exports=hJ;async function hJ(e){let t=uJ(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await mJ(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 dJ(EJ);while(s.transactions_deleted>0);return i}a(hJ,"deleteAuditLogsBefore");async function mJ(e,t){let r=new fC;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];lJ.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>fJ)break}return await s,r}catch(n){throw n}}a(mJ,"deleteTransactions")});var pC=g((wde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Lde,SC)=>{"use strict";var pJ=rs(),SJ=aa(),Dde=pC(),ns=P(),TJ=z(),sS=ze(),gJ=Vi(),RJ=su(),AJ=eu(),{getSchemaPath:OJ}=je();SC.exports=bJ;async function bJ(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=gJ[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await NJ(e),s=OJ(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await yJ(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(bJ,"lmdbDropAttribute");async function yJ(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(yJ,"removeAttributeFromAllObjects");async function NJ(e){let t=new pJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await RJ(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(TJ.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new SJ(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return AJ(i)}a(NJ,"dropAttributeFromSystem")});var yC=g((Ude,bC)=>{"use strict";var iS=ze(),ca=ft(),Pde=vr(),oS=P(),gC=z(),{getTransactionAuditStorePath:IJ}=je(),wJ=sa(),Sd=ta(),CJ=$();bC.exports=DJ;async function DJ(e){let t=IJ(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,MJ(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return LJ(r,e.search_values);default:return RC(r)}}a(DJ,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.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 Sd,s))}a(RC,"searchTransactionsByTimestamp");function LJ(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(LJ,"searchTransactionsByUsername");function MJ(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=wJ.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(MJ,"searchTransactionsByHashValues");function AC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){CJ.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Hde,NC)=>{"use strict";var{getSchemaPath:Bde}=je(),xde=ze(),{database:PJ}=(Ae(),ie(ke));NC.exports={writeTransaction:UJ};async function UJ(e,t,r){return PJ({database:e,table:t}).transaction(r)}a(UJ,"writeTransaction")});var LC=g((qde,DC)=>{"use strict";var{getSchemaPath:wC}=je(),CC=ze();DC.exports={flush:vJ,resetReadTxn:BJ};async function vJ(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(vJ,"flush");async function BJ(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(BJ,"resetReadTxn")});var vC=g((kde,UC)=>{"use strict";var{Readable:xJ}=require("stream"),{getDatabases:HJ}=(Ae(),ie(ke)),{readSync:GJ,openSync:qJ,createReadStream:MC}=require("fs"),{open:FJ}=require("lmdb"),PC=xc(),kJ=Hc(),{AUDIT_STORE_OPTIONS:VJ}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:$J,AUDIT_STORE_NAME:YJ}=ft();UC.exports=WJ;var aS=32768,KJ=100;async function WJ(e){let t=e.database||e.schema||"data",r=HJ()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=FJ({noSync:!0,maxDbs:kJ.MAX_DBS}),E,f=d.openDB($J,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(R,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(R,b),B=l.openDB(R,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%KJ===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>R.startsWith?.(I+"/"))){f.put(R,b);let[,I]=R.split("/"),B=!I,U=new PC(!B,B);await S(R,U)}e.include_audit&&await S(YJ,Object.assign({},VJ)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=qJ(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);GJ(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new xJ.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(WJ,"getBackup")});var GC=g(($de,HC)=>{"use strict";var QJ=$(),{handleHDBError:zJ}=se(),JJ=ey(),jJ=q_(),XJ=Dp(),ZJ=zI(),e4=eu(),t4=xp(),r4=Rw(),n4=Dw(),s4=su(),i4=Hw(),o4=zw(),a4=rC(),c4=sC(),u4=cC(),l4=hC(),_4=Kp(),d4=TC(),f4=yC(),E4=IC(),xC=LC(),h4=vC(),cS=class extends JJ{static{a(this,"LMDBBridge")}async searchByConditions(t){return i4(t)}async getDataByHash(t){return await t4(t)}async searchByHash(t){return await r4(t)}async getDataByValue(t,r){return await n4(t,r)}async searchByValue(t){return await s4(t)}async createSchema(t){return await ZJ(t)}async dropSchema(t){return await o4(t)}async createTable(t,r){return await a4(t,r)}async dropTable(t){return await _4(t)}async createAttribute(t){return await jJ(t)}async createRecords(t){return await XJ(t)}async updateRecords(t){return await c4(t)}async upsertRecords(t){try{return await u4(t)}catch(r){throw zJ(r,null,null,QJ.ERR,r)}}async deleteRecords(t){return await e4(t)}async dropAttribute(t){return await d4(t)}async deleteAuditLogsBefore(t){return await l4(t)}async readAuditLog(t){return await f4(t)}writeTransaction(t,r,n){return E4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return h4(t)}};HC.exports=cS});function T4(){S4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},p4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,m4,cu,FC,no,Td,p4,S4,_S=Re(()=>{lS=H(vr()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,m4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>m4)throw new kC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let R=T();h?h.push?h.push(R):h=[h,R]:h=R}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<qC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},p4=3e4;a(T4,"startMonitoringTxns");T4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.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},o;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&Rd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ss(e){let t=e.database||e.schema||R4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,g4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(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*jC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var XC,gd,Un,ZC,vn,dS,fS,eD,g4,R4,A4,O4,QC,ES,rD=Re(()=>{"use strict";XC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:g4}=Un.hdb_errors),R4="data",A4=1e4,O4=10,ES=class extends XC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.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}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.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:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(O4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%A4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,gd.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,s)})}async getDataByValue(t,r){let n=new Map,s=ss(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){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(ss,"getTable");a(JC,"createDeleteResponse");a(jC,"groupRecordsInHistory")});var Dn=g((ife,nD)=>{"use strict";var{ResourceBridge:b4}=(rD(),ie(tD)),y4=ee();y4.initSync();var Od;function N4(){return Od||(Od=new b4,Od)}a(N4,"getBridge");nD.exports=N4()});var aD=g((afe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),I4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:w4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function w4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=I4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(w4,"searchJSON")});var uD=g((ufe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((lfe,dD)=>{"use strict";var C4=require("@turf/area"),D4=require("@turf/length"),L4=require("@turf/circle"),M4=require("@turf/difference"),P4=require("@turf/distance"),U4=require("@turf/boolean-contains"),v4=require("@turf/boolean-equal"),B4=require("@turf/boolean-disjoint"),x4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:H4,geoLength:G4,geoCircle:q4,geoDifference:F4,geoDistance:_D,geoNear:k4,geoContains:V4,geoEqual:$4,geoCrosses:Y4,geoConvert:K4};function H4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(H4,"geoArea");function G4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(G4,"geoLength");function q4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(q4,"geoCircle");function F4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(F4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function k4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(k4,"geoNear");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoContains");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoEqual");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoCrosses");function K4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),x4[t](e,r)}a(K4,"geoConvert")});var bd=g((dfe,ED)=>{var io=aD(),Kr=uD(),is=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Kr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Kr.current_time,e.fn.extract=e.fn.EXTRACT=Kr.extract,e.fn.date=e.fn.DATE=Kr.date,e.fn.date_format=e.fn.DATE_FORMAT=Kr.date_format,e.fn.date_add=e.fn.DATE_ADD=Kr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Kr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Kr.date_diff,e.fn.now=e.fn.NOW=Kr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Kr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Kr.get_server_time,e.fn.getdate=e.fn.GETDATE=Kr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Kr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var SD=g((ffe,pD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var W4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Q4=P(),{hdb_errors:z4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),J4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";W4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.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(Bn)}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(Bn)}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(Bn)}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(Bn)}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(Bn)}}_getColumns(){let t=new yd(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(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.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 yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(Q4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.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&&_u.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(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.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(hD(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(J4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 pr.yy.FuncValue:new pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let R=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.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(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}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}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).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 pr.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(z4.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].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var Gr=g((hfe,TD)=>{"use strict";var j4=Xb();TD.exports={searchByConditions:Z4,searchByHash:e3,searchByValue:t3,search:r3};var TS=Dn(),{transformReq:gS}=z(),X4=SD();async function Z4(e){return gS(e),TS.searchByConditions(e)}a(Z4,"searchByConditions");async function e3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(e3,"searchByHash");async function t3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(t3,"searchByValue");function r3(e,t){try{let r=new j4(e);r.validate(),new X4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r3,"search")});var Nd=g((pfe,gD)=>{"use strict";var n3=Dn();gD.exports={writeTransaction:s3};function s3(e,t,r){return n3.writeTransaction(e,t,r)}a(s3,"writeTransaction")});var bD=g((gfe,OD)=>{"use strict";var i3=Gr(),o3=ys(),RD=$(),a3=qr(),Tfe=Nd(),c3=require("clone"),AS=require("alasql"),u3=bd(),AD=require("util"),l3=AD.promisify(o3.getTableSchema),_3=AD.promisify(i3.search),d3=P(),RS=z();u3(AS);OD.exports={update:E3};var f3="There was a problem performing this update. Please check the logs and try again.";async function E3({statement:e,hdb_user:t}){let r=await l3(e.table.databaseid,e.table.tableid),n=h3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await _3(_),d=m3(n,l);return p3(o,d,t)}a(E3,"update");function h3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${d3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(f3)}}a(h3,"createUpdateRecord");function m3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m3,"buildUpdateRecords");async function p3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p3,"updateRecords")});var ND=g((bfe,yD)=>{var S3=require("alasql"),T3=Gr(),g3=$(),R3=Dn(),bS=require("util"),OS=z(),A3=P(),O3=ys(),Afe=Nd(),Ofe=qr(),b3="record",y3="successfully deleted",N3=bS.callbackify(D3),I3=bS.promisify(T3.search),w3=bS.promisify(O3.getTableSchema);yD.exports={convertDelete:N3};function C3(e){return`${e.deleted_hashes.length} ${b3}${e.deleted_hashes.length===1?"":"s"} ${y3}`}a(C3,"generateReturnMessage");async function D3({statement:e,hdb_user:t}){let r=await w3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S3.parse(o).statements[0],u={operation:A3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I3(c);let _=await R3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=C3(_)),delete _.txn_time,_}catch(_){throw g3.error(_),_.hdb_code?_.message:_}}a(D3,"convertDelete")});var LD=g((Nfe,DD)=>{"use strict";var L3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:M3,schema_describe:L3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function M3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M3,"checkSchemaTableExists")});var du=g((wfe,P3)=>{P3.exports={name:"harperdb",version:"4.3.27",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Wr,setAnalyticsEnabled:()=>U3});function U3(e){qD=e}function Sr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||v3()}function Wr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function v3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function B3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:R}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:j,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[R];if(Ne)le=Ne;else{le.threads[R]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[R]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:R,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let j of F){let oe=j[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let R=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=R*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,j,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:j,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await B3(FD,e),await UD(IS(),x3),await UD(KD(),H3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||G3(),q3&&(zD=k3(r))}async function k3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>F3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
9
|
+
This can occur during early stages of install where the config file has not yet been created`);return}else throw It.error(i),new Error(`Error reading HarperDB config file at ${r}`)}FK(n,r),up(n);let s=n.toJSON();if(PK.config=s,wt=zo(s),wt.logging_rotation_rotate)for(let i in VN)wt[i]&&It.error(`Config ${VN[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);It.trace(vK)}}a(cp,"initConfig");function FK(e,t){let r=e.getIn(["rootPath"]),n=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Ln.join(r,"database")),n=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Ln.join(r,"clustering","leaf")),n=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Ln.join(r,"log")),n=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),n=!0),e.hasIn(["authentication"])||(e.addIn(["authentication"],{cacheTTL:3e4,enableSessions:!0,operationTokenTimeout:e.getIn(["operationsApi","authentication","operationTokenTimeout"])??"1d",refreshTokenTimeout:e.getIn(["operationsApi","authentication","refreshTokenTimeout"])??"30d"}),n=!0),e.hasIn(["analytics"])||(e.addIn(["analytics"],{aggregatePeriod:60}),n=!0),n&&(It.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(FK,"checkForUpdatedConfig");function up(e,t=!1){let r=e.toJSON();r.componentsRoot=r.componentsRoot??r?.customFunctions?.root,r?.http?.threads&&(r.threads=r?.http?.threads);let n=IK(r,t);if(n.error)throw Z_.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(["clustering","leafServer","streams","path"],n.value.clustering.leafServer.streams?.path),e.setIn(["operationsApi","network","domainSocket"],n.value?.operationsApi?.network?.domainSocket)}a(up,"validateConfig");function kK(e,t){wt===void 0&&(wt={});let r=Mn[e.toLowerCase()];if(r===void 0){It.trace(`Unable to update config object because config param '${e}' does not exist`);return}wt[r.toLowerCase()]=t}a(kK,"updateConfigObject");function QN(e,t,r=void 0,n=!1,s=!1,i=!1){wt===void 0&&cp();let o=WN(Mn.hdb_root),c=Ln.join(o,kr.HDB_CONFIG_FILE),u=ui(c),_;if(r===void 0&&e.toLowerCase()===Fr.DATABASES)_=t;else if(r===void 0){let E;if(i)E=e;else if(E=Mn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=ap(E,t);u.setIn([...f],h)}else for(let E in r){let f=Mn[E.toLowerCase()];if(f===Fr.HTTP_SECUREPORT&&r[E]===wt[Fr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),f===Fr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[E]===wt[Fr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),f===Fr.DATABASES){_=r[E];continue}if(f?.startsWith("threads_")){let h=u.getIn(["threads"]);h>=0&&(u.deleteIn(["threads"]),u.setIn(["threads","count"],h))}if(!f&&(E.endsWith("_package")||E.endsWith("_port"))&&(f=E),f!==void 0){let h=f.split("_"),p=kr.LEGACY_CONFIG_PARAMS[E.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(f=p,h=p.split("_"));let S=ap(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{h.length>1&&typeof u.getIn(h.slice(0,-1))=="boolean"&&u.deleteIn(h.slice(0,-1)),u.setIn([...h],S)}catch(T){It.error(T)}}}_&&KN(u,_),up(u);let l=u.getIn(["rootPath"]),d=Ln.join(l,kr.HDB_CONFIG_FILE);n===!0&&VK(c,l),fr.writeFileSync(d,String(u)),s&&(wt=zo(u.toJSON())),It.trace(`Config parameter: ${e} updated with value: ${t}`)}a(QN,"updateConfigValue");function VK(e,t){try{let r=Ln.join(t,"backup",`${kr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),It.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){It.error(BK),It.error(r)}}a(VK,"backupConfigFile");var $K=["databases"];function zo(e){return e.http&&Object.assign(e.http,e?.customFunctions?.network),e?.operationsApi?.network&&(e.operationsApi.network=Object.assign({},e.http,e.operationsApi.network)),e?.operationsApi&&(e.operationsApi.tls=Object.assign({},e.tls,e.operationsApi.tls)),td=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])&&!$K.includes(i)){let o=r(n[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!Fr[u.toUpperCase()]&&Mn[u]&&(s[Mn[u].toLowerCase()]=o[c]),s[u]=o[c]}}n[i]!==void 0&&(s[i.toLowerCase()]=n[i])}return s}a(r,"squashObj")}a(zo,"flattenConfig");function ap(e,t){if(e===Fr.CLUSTERING_NODENAME||e===Fr.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(CK(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||Bt.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 Bt.autoCast(t)}a(ap,"castConfigValue");function YK(){let e=Bt.getPropsFilePath(),t=ji(e);return ui(t).toJSON()}a(YK,"getConfiguration");async function KK(e){let{operation:t,hdb_user:r,hdb_auth_header:n,...s}=e;try{return QN(void 0,void 0,s,!0),HK}catch(i){throw typeof i=="string"||i instanceof String?LK(i,i,MK.BAD_REQUEST,void 0,void 0,!0):i}}a(KK,"setConfiguration");function lp(){let e=Bt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(n){if(!Bt.noBootFile())throw It.error(n),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=ji(e);return ui(t).toJSON()}a(lp,"readConfigFile");function ui(e){return wK.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ui,"parseYamlDoc");function WK(){let e=lp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=Bt.isEmptyOrZeroLength(t)?[]:t;let r=kN(t);if(r)throw Z_.CONFIG_VALIDATION(r.message);let n=e?.clustering?.leafServer?.network?.routes;n=Bt.isEmptyOrZeroLength(n)?[]:n;let s=kN(n);if(s)throw Z_.CONFIG_VALIDATION(s.message);if(!Bt.isEmptyOrZeroLength(n)&&!Bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>n.some(c=>c.host===o.host&&c.port===o.port));if(!Bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Z_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:n}}a(WK,"getClusteringRoutes");function zN(e){let t=$N(e);wt={};for(let r in Mn){let n=t.get(r.toUpperCase());if(Bt.isEmpty(n)||typeof n=="string"&&n.trim().length===0)continue;let s=Mn[r].toLowerCase();s===Fr.LOGGING_ROOT?wt[s]=Ln.dirname(n):wt[s]=n}return wt}a(zN,"initOldConfig");function QK(e){let t=lp();return DK.get(t,e.replaceAll("_","."))}a(QK,"getConfigFromFile");async function zK(e,t){let r=ui(ji());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(ji(),String(r))}a(zK,"addConfig");function JK(e){let t=ji(Bt.getPropsFilePath()),r=ui(t);r.deleteIn(e);let n=r.getIn(["rootPath"]),s=Ln.join(n,kr.HDB_CONFIG_FILE);fr.writeFileSync(s,String(r))}a(JK,"deleteConfigFromFile");function jK(){return td||(cp(),td)}a(jK,"getConfigObj")});var XN=g((Ale,jN)=>{"use strict";var rd=P(),nd=class{static{a(this,"BaseLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s){this.exp_date=t,this.ram_allocation=r,this.version=n,this.fingerprint=s}},_p=class extends nd{static{a(this,"ExtendedLicense")}constructor(t=0,r=rd.RAM_ALLOCATION_ENUM.DEFAULT,n=rd.LICENSE_VALUES.VERSION_DEFAULT,s,i=!1){super(t,r,n,s),this.enterprise=i}};jN.exports={BaseLicense:nd,ExtendedLicense:_p}});var Xi=g((ble,sI)=>{"use strict";var jo=require("fs-extra"),eI=z_(),tI=require("crypto"),XK=require("moment"),ZK=require("uuid").v4,tr=$(),fp=require("path"),eW=z(),li=P(),{totalmem:ZN}=require("os"),tW=XN().ExtendedLicense,Jo="invalid license key format",rW="061183",nW="mofi25",sW="aes-256-cbc",iW=16,oW=32,rI=ee();rI.initSync();var dp;sI.exports={validateLicense:nI,generateFingerPrint:cW,licenseSearch:mp,getLicense:_W,checkMemoryLimit:dW};function Ep(){return fp.join(rI.getHdbBasePath(),li.LICENSE_KEY_DIR_NAME,li.LICENSE_FILE_NAME)}a(Ep,"getLicenseDirPath");function aW(){let e=Ep();return fp.join(e,li.LICENSE_FILE_NAME)}a(aW,"getLicenseFilePath");function hp(){let e=Ep();return fp.join(e,li.REG_KEY_FILE_NAME)}a(hp,"getFingerPrintFilePath");async function cW(){let e=hp();try{return await jo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await uW();throw tr.error(`Error writing fingerprint file to ${e}`),tr.error(t),new Error("There was an error generating the fingerprint")}}a(cW,"generateFingerPrint");async function uW(){let e=ZK(),t=eI.hash(e),r=hp();try{await jo.mkdirp(Ep()),await jo.writeFile(r,t)}catch(n){if(n.code==="EEXIST")return t;throw tr.error(`Error writing fingerprint file to ${r}`),tr.error(n),new Error("There was an error generating the fingerprint")}return t}a(uW,"writeFingerprint");function nI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:li.RAM_ALLOCATION_ENUM.DEFAULT,version:li.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return tr.error("empty license key passed to validate."),r;let n=hp(),s=!1;try{s=jo.statSync(n)}catch(i){tr.error(i)}if(s){let i;try{i=jo.readFileSync(n,"utf8")}catch{tr.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(nW),c=o[1];c=Buffer.concat([Buffer.from(c)],iW);let u=Buffer.concat([Buffer.from(i)],oW),_=tI.createDecipheriv(sW,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let l=null;try{l=_.update(o[0],"hex","utf8"),l.trim(),l+=_.final("utf8")}catch{let f=lW(o[0],i);if(f)l=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Jo),tr.error(Jo),new Error(Jo)}let d;if(isNaN(l))try{d=JSON.parse(l),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(Jo),tr.error(Jo),new Error(Jo)}else r.exp_date=l;r.exp_date<XK().valueOf()&&(r.valid_date=!1),eI.validate(o[1],`${rW}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||tr.error("Invalid licence"),r}a(nI,"validateLicense");function lW(e,t){try{let r=tI.createDecipher("aes192",t),n=r.update(e,"hex","utf8");return n.trim(),n+=r.final("utf8"),n}catch{tr.warn("Check old license failed")}}a(lW,"checkOldLicense");function mp(){let e=new tW,t=[];try{t=jo.readFileSync(aW(),"utf-8").split(li.NEW_LINE)}catch(r){r.code==="ENOENT"?tr.info("no license file found"):tr.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let n=t[r];try{if(eW.isEmptyOrZeroLength(n))continue;let s=JSON.parse(n),i=nI(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){tr.error("There was an error parsing the license string."),tr.error(s),e.ram_allocation=li.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return dp=e,e}a(mp,"licenseSearch");async function _W(){return dp||await mp(),dp}a(_W,"getLicense");function dW(){let e=mp().ram_allocation,t=process.constrainedMemory?.()||ZN();if(t=Math.round(Math.min(t,ZN())/2**20),t>e)return`This server has more memory (${t}MB) than HarperDB is licensed for (${e}MB), this should only be used for educational and development purposes.`}a(dW,"checkMemoryLimit")});var _n=g((Cle,gI)=>{"use strict";var cI="username is required",uI="nothing to update, must supply active, role or password to update",lI="password cannot be an empty string",_I="If role is specified, it cannot be empty.",dI="active must be true or false";gI.exports={addUser:RW,alterUser:AW,dropUser:bW,getSuperUser:wW,userInfo:yW,listUsers:id,listUsersExternal:NW,setUsersToGlobal:Zo,findAndValidateUser:SI,getClusterUser:CW,USERNAME_REQUIRED:cI,ALTERUSER_NOTHING_TO_UPDATE:uI,EMPTY_PASSWORD:lI,EMPTY_ROLE:_I,ACTIVE_BOOLEAN:dI};var fI=qr(),fW=ci(),Tp=z_(),EI=LN(),hI=Gr(),gp=Ns(),Vr=z(),mI=require("validate.js"),Oe=$(),{promisify:EW}=require("util"),Rp=Os(),iI=P(),oI=Ve(),hW=Er(),Nle=ee(),Ile=Xi(),mW=Vi(),{table:wle}=(Ae(),ie(ke)),{handleHDBError:es,hdb_errors:pW}=se(),{HTTP_STATUS_CODES:ts,AUTHENTICATION_ERROR_MSGS:pp,HDB_ERROR_MSGS:Xo}=pW,{UserEventMsg:Ap}=Pn(),Sp=require("lodash"),{server:Op}=(lr(),ie(Gi)),SW=$();Op.getUser=(e,t)=>SI(e,t,t!=null);var pI={username:!0,active:!0,role:!0,password:!0},aI=new Map,sd=hI.searchByValue,TW=hI.searchByHash,gW=EW(fW.delete);async function RW(e){let t=mI.cleanAttributes(e,pI),r=EI.addUserValidation(t);if(r)throw es(new Error,r.message,ts.BAD_REQUEST,void 0,void 0,!0);let n={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},s;try{s=await sd(n),s=s&&Array.from(s)}catch(u){throw Oe.error("There was an error searching for a role in add user"),Oe.error(u),u}if(!s||s.length<1)throw es(new Error,Xo.ROLE_NAME_NOT_FOUND(t.role),ts.NOT_FOUND,void 0,void 0,!0);if(s.length>1)throw es(new Error,Xo.DUP_ROLES_FOUND(t.role),ts.CONFLICT,void 0,void 0,!0);s[0].permission.cluster_user===!0&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password),t.role=s[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await fI.insert(i)}catch(u){throw Oe.error("There was an error searching for a user."),Oe.error(u),u}Oe.debug(o);try{await Zo()}catch(u){throw Oe.error("Got an error setting users to global"),Oe.error(u),u}if(o.skipped_hashes.length===1)throw es(new Error,Xo.USER_ALREADY_EXISTS(t.username),ts.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=s[0],gp.signalUserChange(new Ap(process.pid)),`${c.username} successfully added`}a(RW,"addUser");async function AW(e){let t=mI.cleanAttributes(e,pI);if(Vr.isEmptyOrZeroLength(t.username))throw new Error(cI);if(Vr.isEmptyOrZeroLength(t.password)&&Vr.isEmptyOrZeroLength(t.role)&&Vr.isEmptyOrZeroLength(t.active))throw new Error(uI);if(!Vr.isEmpty(t.password)&&Vr.isEmptyOrZeroLength(t.password.trim()))throw new Error(lI);if(!Vr.isEmpty(t.active)&&!Vr.isBoolean(t.active))throw new Error(dI);let r=OW(t.username);if(!Vr.isEmpty(t.password)&&!Vr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Rp.encrypt(t.password)),t.password=Tp.hash(t.password)),t.role==="")throw new Error(_I);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},o;try{o=Array.from(await sd(i)||[])}catch(c){throw Oe.error("Got an error searching for a role."),Oe.error(c),c}if(!o||o.length===0){let c=Xo.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Oe.error(c),es(new Error,c,ts.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Xo.ALTER_USER_DUP_ROLES(t.role);throw Oe.error(c),es(new Error,c,ts.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let n={operation:"update",schema:"system",table:"hdb_user",records:[t]},s;try{s=await fI.update(n)}catch(i){throw Oe.error("Error during update."),Oe.error(i),i}try{await Zo()}catch(i){throw Oe.error("Got an error setting users to global"),Oe.error(i),i}return gp.signalUserChange(new Ap(process.pid)),s}a(AW,"alterUser");function OW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OW,"isClusterUser");async function bW(e){try{let t=EI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Vr.isEmpty(global.hdb_users.get(e.username)))throw es(new Error,Xo.USER_NOT_EXIST(e.username),ts.NOT_FOUND,void 0,void 0,!0);let n;try{n=await gW(r)}catch(s){throw Oe.error("Got an error deleting a user."),Oe.error(s),s}Oe.debug(n);try{await Zo()}catch(s){throw Oe.error("Got an error setting users to global."),Oe.error(s),s}return gp.signalUserChange(new Ap(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bW,"dropUser");async function yW(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=Sp.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},n;try{n=await TW(r)}catch(s){throw Oe.error("Got an error searching for a role."),Oe.error(s),s}t.role=n[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Oe.error(r),r}return t}a(yW,"userInfo");async function NW(){let e;try{e=await id()}catch(t){throw Oe.error("Got an error listing users."),Oe.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(NW,"listUsersExternal");async function id(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await sd(e)}catch(o){throw Oe.error("Got an error searching for roles."),Oe.error(o),o}let r={};for(let o of t)r[o.id]=Sp.cloneDeep(o);if(Object.keys(r).length===0)return null;let n={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},s;try{s=await sd(n)}catch(o){throw Oe.error("Got an error searching for users."),Oe.error(o),o}let i=new Map;for(let o of s)o=Sp.cloneDeep(o),o.role=r[o.role],IW(o.role),i.set(o.username,o);return i}catch(e){throw Oe.error("got an error listing users"),Oe.error(e),Vr.errorizeMessage(e)}return null}a(id,"listUsers");function IW(e){try{if(!e){Oe.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(mW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Oe.error("Got an error trying to set system permissions."),Oe.error(t)}}a(IW,"appendSystemTablesToRole");async function Zo(){try{let e=await id();global.hdb_users=e}catch(e){throw Oe.error(e),e}}a(Zo,"setUsersToGlobal");async function SI(e,t,r=!0){global.hdb_users||await Zo();let n=global.hdb_users.get(e);if(!n){if(!r)return{username:e};throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}if(n&&!n.active)throw es(new Error,pp.USER_INACTIVE,ts.UNAUTHORIZED,void 0,void 0,!0);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(aI.get(t)===n.password)return s;if(Tp.validate(n.password,t))aI.set(t,n.password);else throw es(new Error,pp.GENERIC_AUTH_FAIL,ts.UNAUTHORIZED,void 0,void 0,!0)}return s}a(SI,"findAndValidateUser");async function wW(){global.hdb_users||await Zo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wW,"getSuperUser");async function CW(){let e=await id(),t=hW.getConfigFromFile(iI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Vr.isEmpty(r)&&r?.role?.role===iI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Rp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+oI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+oI.SERVER_SUFFIX.ADMIN,r}a(CW,"getClusterUser");var TI=[];Op.invalidateUser=function(e){for(let t of TI)try{t(e)}catch(r){SW.error("Error invalidating user",r)}};Op.onInvalidatedUser=function(e){TI.push(e)}});var Jc=g((Ple,bI)=>{"use strict";var Zi=$(),$r=P(),DW=Xy(),Lle=ys(),Mle=bs(),LW=_n(),{validateEvent:RI}=Pn(),zc=Dn(),MW=require("process"),{resetDatabases:PW}=(Ae(),ie(ke)),UW={[$r.ITC_EVENT_TYPES.SCHEMA]:vW,[$r.ITC_EVENT_TYPES.USER]:OI};async function vW(e){let t=RI(e);if(t){Zi.error(t);return}Zi.trace("ITC schemaHandler received schema event:",e),await DW(e.message),await BW(e.message)}a(vW,"schemaHandler");async function BW(e){try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zi.error(t)}}a(BW,"syncSchemaMetadata");var AI=[];async function OI(e){try{try{zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),zc.resetReadTxn($r.SYSTEM_SCHEMA_NAME,$r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zi.warn(r)}let t=RI(e);if(t){Zi.error(t);return}Zi.trace(`ITC userHandler ${$r.HDB_ITC_CLIENT_PREFIX}${MW.pid} received user event:`,e),await LW.setUsersToGlobal();for(let r of AI)r()}catch(t){Zi.error(t)}}a(OI,"userHandler");OI.addListener=function(e){AI.push(e)};bI.exports=UW});var Pn=g((Gle,NI)=>{"use strict";var vle=$(),bp=z(),xW=P(),{ITC_ERRORS:jc}=Ur(),{parentPort:Ble,threadId:HW,isMainThread:GW,workerData:xle}=require("worker_threads"),{onMessageFromWorkers:qW,broadcast:Hle,broadcastWithAcknowledgement:FW}=Qe();NI.exports={sendItcEvent:kW,validateEvent:yI,SchemaEventMsg:VW,UserEventMsg:$W};var od;qW(async(e,t)=>{od=od||Jc(),yI(e),od[e.type]&&await od[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kW(e){return!GW&&e.message&&(e.message.originator=HW),FW(e)}a(kW,"sendItcEvent");function yI(e){if(typeof e!="object")return jc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||bp.isEmpty(e.type))return jc.MISSING_TYPE;if(!e.hasOwnProperty("message")||bp.isEmpty(e.message))return jc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||bp.isEmpty(e.message.originator))return jc.MISSING_ORIGIN;if(xW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return jc.INVALID_EVENT(e.type)}a(yI,"validateEvent");function VW(e,t,r,n=void 0,s=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=n,this.attribute=s}a(VW,"SchemaEventMsg");function $W(e){this.originator=e}a($W,"UserEventMsg")});var Ns=g((kle,DI)=>{"use strict";var II=P(),Fle=z(),ad=$(),wI=zy(),ea,{sendItcEvent:CI}=Pn();function YW(e){try{ad.trace("signalSchemaChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.SCHEMA,e);return ea.schema(t),CI(t)}catch(t){ad.error(t)}}a(YW,"signalSchemaChange");function KW(e){try{ad.trace("signalUserChange called with message:",e),ea=ea||Jc();let t=new wI(II.ITC_EVENT_TYPES.USER,e);return ea.user(t),CI(t)}catch(t){ad.error(t)}}a(KW,"signalUserChange");DI.exports={signalSchemaChange:YW,signalUserChange:KW}});var cd=g(($le,MI)=>{"use strict";var LI=z(),WW=P(),QW=$(),zW=q_(),JW=G_(),jW=Ns(),{SchemaEventMsg:XW}=Pn(),ZW="already exists in";MI.exports=eQ;async function eQ(e,t,r){if(LI.isEmptyOrZeroLength(r))return r;let n=[];LI.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 tQ(e,t.schema,t.name,i)})),s}a(eQ,"lmdbCheckForNewAttributes");async function tQ(e,t,r,n){let s=new JW(t,r,n,void 0,!0);e&&(s.hdb_auth_header=e);try{await rQ(s)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(ZW))QW.warn(`attribute ${t}.${r}.${n} already exists`);else throw i}}a(tQ,"createNewAttribute");async function rQ(e){let t;return t=await zW(e),jW.signalSchemaChange(new XW(process.pid,WW.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(rQ,"createAttribute")});var ta=g((Kle,PI)=>{"use strict";var yp=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,n,s,i=void 0){this.operation=t,this.user_name=r,this.timestamp=n,this.hash_values=s,this.origin=i}};PI.exports=yp});var vI=g((Qle,UI)=>{"use strict";var nQ=ta(),sQ=P().OPERATIONS_ENUM,Np=class extends nQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,n,s,i=void 0){super(sQ.INSERT,r,n,s,i),this.records=t}};UI.exports=Np});var xI=g((Jle,BI)=>{"use strict";var iQ=ta(),oQ=P().OPERATIONS_ENUM,Ip=class extends iQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(oQ.UPDATE,n,s,i,o),this.records=t,this.original_records=r}};BI.exports=Ip});var GI=g((Xle,HI)=>{"use strict";var aQ=ta(),cQ=P().OPERATIONS_ENUM,wp=class extends aQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,n,s,i,o=void 0){super(cQ.UPSERT,n,s,i,o),this.records=t,this.original_records=r}};HI.exports=wp});var FI=g((e_e,qI)=>{"use strict";var uQ=ta(),lQ=P().OPERATIONS_ENUM,Cp=class extends uQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,n,s,i=void 0){super(lQ.DELETE,n,s,t,i),this.original_records=r}};qI.exports=Cp});var Xc=g((n_e,YI)=>{"use strict";var r_e=require("path"),kI=ze(),_Q=vI(),dQ=xI(),fQ=GI(),EQ=FI(),ra=ft(),VI=z(),{CONFIG_PARAMS:hQ}=P(),$I=ee();$I.initSync();var ud=P().OPERATIONS_ENUM,{getTransactionAuditStorePath:mQ}=je();YI.exports=pQ;async function pQ(e,t){if($I.get(hQ.LOGGING_AUDITLOG)===!1)return;let r=mQ(e.schema,e.table),n=await kI.openEnvironment(r,e.table,!0),s=SQ(e,t);if(!(s===void 0||s.hash_values.length===0)&&n!==void 0){kI.initializeDBIs(n,ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ra.TRANSACTIONS_DBIS);let i=s.timestamp;return await n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,s),VI.isEmpty(s.user_name)||n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(s.user_name,i);for(let o=0;o<s.hash_values.length;o++)n.dbis[ra.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s.hash_values[o],i)})}}a(pQ,"writeTransaction");function SQ(e,t){let r=VI.isEmpty(e.hdb_user)?void 0:e.hdb_user?.username;if(e.operation===ud.INSERT)return new _Q(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPDATE)return new dQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.UPSERT)return new fQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ud.DELETE)return new EQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(SQ,"createTransactionObject")});var Dp=g((o_e,KI)=>{"use strict";var TQ=$c(),i_e=Ic(),Zc=P(),gQ=wc(),RQ=Ko().insertRecords,AQ=ze(),OQ=$(),bQ=cd(),{getSchemaPath:yQ}=je(),NQ=Xc();KI.exports=IQ;async function IQ(e){try{let{schema_table:t,attributes:r}=TQ(e);gQ(e,r,t.hash_attribute),e.schema!==Zc.SYSTEM_SCHEMA_NAME&&(r.includes(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Zc.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await bQ(e.hdb_auth_header,t,r),s=yQ(e.schema,e.table),i=await AQ.openEnvironment(s,e.table),o=await RQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await NQ(e,o)}catch(c){OQ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(IQ,"lmdbCreateRecords")});var zI=g((c_e,QI)=>{"use strict";var WI=P(),wQ=Dp(),CQ=Ic(),DQ=require("fs-extra"),{getSchemaPath:LQ}=je();QI.exports=MQ;async function MQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new CQ(WI.SYSTEM_SCHEMA_NAME,WI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await wQ(r),await DQ.mkdirp(LQ(e.schema))}a(MQ,"lmdbCreateSchema")});var jI=g((l_e,JI)=>{"use strict";var Lp=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],n=void 0,s=[]){this.deleted=t,this.skipped=r,this.txn_time=n,this.original_records=s}};JI.exports=Lp});var tw=g((h_e,ew)=>{"use strict";var XI=ze(),Mp=vr(),Pp=Ur().LMDB_ERRORS_ENUM,PQ=ft(),ZI=$(),d_e=z(),UQ=require("lmdb"),vQ=jI(),BQ=P(),{OVERFLOW_MARKER:f_e,MAX_SEARCH_KEY_LENGTH:E_e}=PQ,xQ=BQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function HQ(e,t,r,n){if(Mp.validateEnv(e),t===void 0)throw new Error(Pp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Pp.IDS_REQUIRED):new Error(Pp.IDS_MUST_BE_ITERABLE);try{let s=XI.listDBIs(e);XI.initializeDBIs(e,t,s);let i=new vQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||n&&h[xQ]>n){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,UQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<s.length;S++){let T=s[S];if(!h.hasOwnProperty(T)||T===t)continue;let R=e.dbis[T],b=h[T];if(b!=null)try{let I=Mp.getIndexedValues(b);if(I)for(let B=0,U=I.length;B<U;B++)R.remove(I[B],o)}catch{ZI.warn(`cannot delete from attribute: ${T}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){ZI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let E=0,f=l.length;E<f;E++)l[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),_.push(E));let d=0;for(let E=0;E<_.length;E++){let f=_[E];i.original_records.splice(f-d,1),d++}return i.txn_time=Mp.getNextMonotonicTime(),i}catch(s){throw s}}a(HQ,"deleteRecords");ew.exports={deleteRecords:HQ}});var eu=g((p_e,nw)=>{"use strict";var na=z(),GQ=tw(),qQ=ze(),{getSchemaPath:FQ}=je(),kQ=Xc(),VQ=$();nw.exports=$Q;async function $Q(e,t=!0){let n=global.hdb_schema[e.schema][e.table].hash_attribute;if(na.isEmpty(n))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(na.isEmptyOrZeroLength(e.hash_values)&&!na.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][n];na.isEmpty(u)||e.hash_values.push(u)}}if(na.isEmptyOrZeroLength(e.hash_values))return rw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(na.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=FQ(e.schema,e.table),i=await qQ.openEnvironment(s,e.table),o=await GQ.deleteRecords(i,n,e.hash_values,e.__origin?.timestamp);try{t===!0&&await kQ(e,o)}catch(c){VQ.error(`unable to write transaction due to ${c.message}`)}return rw(o.deleted,o.skipped,o.txn_time)}catch(s){throw s}}a($Q,"lmdbDeleteRecords");function rw(e,t,r){let n=e.length+t.length,s=n===1?"record":"records";return{message:`${e.length} of ${n} ${s} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(rw,"createDeleteResponse")});var vp=g((g_e,sw)=>{"use strict";var YQ=P(),T_e=vr();function Up(e,t){let r=Object.create(null);if(t.length===1&&YQ.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let n=0;n<t.length;n++){let s=t[n],i=e[s];r[s]=i===void 0?null:i}return r}a(Up,"parseRow");function KQ(e,t,r,n){let s=Up(r,e);n.push(s)}a(KQ,"searchAll");function WQ(e,t,r,n){let s=Up(r,e);n[t]=s}a(WQ,"searchAllToMap");function QQ(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(QQ,"iterateDBI");function eo(e,t,r,n,s){let i=Object.create(null);i[s]=e;let o;n===s?o=e:(o=t,n!==void 0&&(i[n]=o)),r[0].push(o),r[1].push(i)}a(eo,"pushResults");function zQ(e,t,r,n,s,i){t.toString().endsWith(e)&&eo(t,r,n,s,i)}a(zQ,"endsWith");function JQ(e,t,r,n,s,i){t.toString().includes(e)&&eo(t,r,n,s,i)}a(JQ,"contains");function jQ(e,t,r,n,s,i){t>e&&eo(t,r,n,s,i)}a(jQ,"greaterThanCompare");function XQ(e,t,r,n,s,i){t>=e&&eo(t,r,n,s,i)}a(XQ,"greaterThanEqualCompare");function ZQ(e,t,r,n,s,i){t<e&&eo(t,r,n,s,i)}a(ZQ,"lessThanCompare");function ez(e,t,r,n,s,i){t<=e&&eo(t,r,n,s,i)}a(ez,"lessThanEqualCompare");sw.exports={parseRow:Up,searchAll:KQ,searchAllToMap:WQ,iterateDBI:QQ,endsWith:zQ,contains:JQ,greaterThanCompare:jQ,greaterThanEqualCompare:XQ,lessThanCompare:ZQ,lessThanEqualCompare:ez,pushResults:eo}});var sa=g((y_e,_w)=>{"use strict";var _i=ze(),A_e=$(),Yr=vr(),ld=ft(),ht=Ur().LMDB_ERRORS_ENUM,O_e=z(),tz=P(),_d=vp(),{parseRow:rz}=_d,b_e=require("lmdb"),{OVERFLOW_MARKER:iw,MAX_SEARCH_KEY_LENGTH:nz}=ld;function ow(e,t,r,n=!1,s=void 0,i=void 0){return to(e,t,r,(o,c)=>c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}))}a(ow,"iterateFullIndex");function tu(e,t,r,n,s,i=!1,o=void 0,c=void 0,u=!1,_=!1){return to(e,t,r,(l,d,E,f)=>{let R={transaction:l,start:i===!0?s:n,end:i===!0?n:s,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return f===r?(R.values=!1,d.getRange(R).map(b=>({value:b}))):d.getRange(R)})}a(tu,"iterateRangeBetween");function to(e,t,r,n){let s=e.database||e,i=_i.openDBI(s,r);i[ld.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&_i.openDBI(s,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=n(o,i,s,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(to,"setupTransaction");function aw(e,t,r,n){let s;return function(i,o){if(typeof i=="string"&&i.endsWith(iw)){if(!s)if(r)s=_i.openDBI(e,r);else{let u=_i.listDBIs(e);for(let _=0,l=u.length;_<l&&(s=_i.openDBI(e,u[_]),!s[ld.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=s.get(o,{transaction:t,lazy:!0})[n]}return i}}a(aw,"getOverflowCheck");function sz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return to(e,t,t,(o,c,u)=>(dd(r),r=ru(u,r),c.getRange({transaction:o,start:n?void 0:!1,end:n?!1:void 0,limit:s,offset:i,reverse:n}).map(_=>rz(_.value,r))))}a(sz,"searchAll");function iz(e,t,r,n=!1,s=void 0,i=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);dd(r),r=ru(e.database||e,r);let o=new Map;for(let{key:c,value:u}of ow(e,t,t,n,s,i))o.set(c,_d.parseRow(u,r));return o}a(iz,"searchAllToMap");function oz(e,t,r=!1,n=void 0,s=void 0){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=ow(e,void 0,t,r,n,s),c=o.transaction,u=aw(c.database,c,void 0,t);for(let{key:_,value:l}of o){let d=u(_,l);i[d]===void 0&&(i[d]=[]),i[d].push(l)}return i}a(oz,"iterateDBI");function az(e,t){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);return _i.statDBI(e,t).entryCount}a(az,"countAll");function cz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,t,r,(c,u,_,l)=>(n=Yr.convertKeyValueToWrite(n),l===r?u.get(n,{transaction:c,lazy:!0})===void 0?[]:[{key:n,value:n}]:u.getValues(n,{transaction:c,reverse:s,limit:i,offset:o}).map(d=>({key:n,value:d}))))}a(cz,"equals");function uz(e,t,r){return di(e,t,r),_i.openDBI(e,t).getValuesCount(r)}a(uz,"count");function lz(e,t,r,n,s=!1,i=void 0,o=void 0){return di(e,r,n),to(e,null,r,(c,u)=>{n=Yr.convertKeyValueToWrite(n);let _=!0;typeof n=="number"&&(_=!1);let l;if(s===!0){let d;for(let E of u.getKeys({transaction:c,start:n}))if(!E.startsWith(n)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:s,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(n))return E;if(_===!0)return l.DONE}}),l.filter(E=>E)}else return l=u.getRange({transaction:c,start:n,reverse:s,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(n))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(lz,"startsWith");function _z(e,t,r,n,s=!1,i=void 0,o=void 0){return cw(e,t,r,n,s,i,o,!0)}a(_z,"endsWith");function cw(e,t,r,n,s=!1,i=void 0,o=void 0,c=!1){return di(e,r,n),to(e,null,r,(u,_,l,d)=>{let E=aw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:s?!1:void 0,reverse:s}).flatMap(f=>{let h=f.toString();return h.endsWith(iw)?_.getValues(f,{transaction:u}).map(p=>{let S=E(f,p);if(c?S.endsWith(n):S.includes(n))return{key:S,value:p}}).filter(p=>p):(c?h.endsWith(n):h.includes(n))?_[ld.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:_.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(cw,"contains");function dz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!0,!1)}a(dz,"greaterThan");function fz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),tu(e,t,r,n,u,s,i,o,!1,!1)}a(fz,"greaterThanEqual");function Ez(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!0)}a(Ez,"lessThan");function hz(e,t,r,n,s=!1,i=void 0,o=void 0){di(e,r,n);let c=typeof n,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),tu(e,t,r,u,n,s,i,o,!1,!1)}a(hz,"lessThanEqual");function mz(e,t,r,n,s,i=!1,o=void 0,c=void 0){if(Yr.validateEnv(e),r===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(n===void 0)throw new Error(ht.START_VALUE_REQUIRED);if(s===void 0)throw new Error(ht.END_VALUE_REQUIRED);if(n=Yr.convertKeyValueToWrite(n),s=Yr.convertKeyValueToWrite(s),n>s)throw new Error(ht.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return tu(e,t,r,n,s,i,o,c)}a(mz,"between");function pz(e,t,r,n){Yr.validateEnv(e);let s=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),r=ru(s,r),n===void 0)throw new Error(ht.ID_REQUIRED);let o=null,c=s.dbis[t].get(n,{transaction:i,lazy:r.length<3});return c&&(o=_d.parseRow(c,r)),o}a(pz,"searchByHash");function Sz(e,t,r){Yr.validateEnv(e);let n=e.database||e,s=e.database?e:null;if(t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.ID_REQUIRED);let i=!0;return n.dbis[t].get(r,{transaction:s,lazy:!0})===void 0&&(i=!1),i}a(Sz,"checkHashExists");function Tz(e,t,r,n,s=[]){return lw(e,t,r,n,s),uw(e,t,r,n,s).map(i=>i[1])}a(Tz,"batchSearchByHash");function gz(e,t,r,n,s=[]){lw(e,t,r,n,s);let i=new Map;for(let[o,c]of uw(e,t,r,n,s))i.set(o,c);return i}a(gz,"batchSearchByHashToMap");function uw(e,t,r,n,s=[]){return to(e,t,t,(i,o,c)=>{r=ru(c,r);let u=r.length<3;return n.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,_d.parseRow(l,r)];s.push(_)}).filter(_=>_)})}a(uw,"batchHashSearch");function lw(e,t,r,n,s){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.HASH_ATTRIBUTE_REQUIRED);if(dd(r),n==null)throw new Error(ht.IDS_REQUIRED);if(!n[Symbol.iterator])throw new Error(ht.IDS_MUST_BE_ITERABLE)}a(lw,"initializeBatchSearchByHash");function dd(e){if(!Array.isArray(e))throw e===void 0?new Error(ht.FETCH_ATTRIBUTES_REQUIRED):new Error(ht.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(dd,"validateFetchAttributes");function di(e,t,r){if(Yr.validateEnv(e),t===void 0)throw new Error(ht.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ht.SEARCH_VALUE_REQUIRED);if(r?.length>nz)throw new Error(ht.SEARCH_VALUE_TOO_LARGE)}a(di,"validateComparisonFunctions");function ru(e,t){return t.length===1&&tz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=_i.listDBIs(e)),t}a(ru,"setGetWholeRowAttributes");_w.exports={searchAll:sz,searchAllToMap:iz,count:uz,countAll:az,equals:cz,startsWith:lz,endsWith:_z,contains:cw,searchByHash:pz,setGetWholeRowAttributes:ru,batchSearchByHash:Tz,batchSearchByHashToMap:gz,checkHashExists:Sz,iterateDBI:oz,greaterThan:dz,greaterThanEqual:fz,lessThan:Ez,lessThanEqual:hz,between:mz}});var ia=g((I_e,mw)=>{var dw=require("lodash"),fw=Xe(),he=require("joi"),Rz=z(),{hdb_schema_table:nu,checkValidTable:Ew,hdb_table:hw,hdb_database:fd}=jn(),{handleHDBError:Az,hdb_errors:Oz}=se(),{getDatabases:bz}=(Ae(),ie(ke)),{HTTP_STATUS_CODES:yz}=Oz,Nz=he.object({database:fd,schema:fd,table:hw,search_attribute:nu,search_value:he.any().required(),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),desc:he.bool(),limit:he.number().integer().min(1),offset:he.number().integer().min(0)}),Iz=he.object({database:fd,schema:fd,table:hw,operator:he.string().valid("and","or").default("and").lowercase(),offset:he.number().integer().min(0),limit:he.number().integer().min(1),get_attributes:he.array().min(1).items(he.alternatives(nu,he.object())).optional(),sort:he.object({attribute:he.alternatives(nu,he.array().min(1)),descending:he.bool().optional()}).optional(),conditions:he.array().min(1).items(he.alternatives(he.object({operator:he.string().valid("and","or").default("and").lowercase(),conditions:he.array()}),he.object({search_attribute:he.alternatives(nu,he.array().min(1)),search_type:he.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between","not_equal").optional(),search_value:he.when("search_type",{switch:[{is:"equals",then:he.any()},{is:"between",then:he.array().items(he.alternatives([he.string(),he.number()])).length(2)}],otherwise:he.alternatives(he.string(),he.number())}).required()}))).required()});mw.exports=function(e,t){let r=null;switch(t){case"value":r=fw.validateBySchema(e,Nz);break;case"hashes":let i=function(o){s?s+=". "+o:s=o};var n=i;a(i,"addError");let s;i(Ew("database",e.schema)),i(Ew("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(o=>typeof o=="string"||typeof o=="number")||i("'hash_values' must be strings or numbers"):i("'hash_values' must be an array"):i("'hash_values' is required"),e.get_attributes?Array.isArray(e.get_attributes)?e.get_attributes.length===0?i("'get_attributes' must contain at least 1 item"):e.get_attributes.every(o=>typeof o=="string"||typeof o=="number")||i("'get_attributes' must be strings or numbers"):i("'get_attributes' must be an array"):i("'get_attributes' is required"),s&&(r=new Error(s.trim()));break;case"conditions":r=fw.validateBySchema(e,Iz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let s=Rz.checkGlobalSchemaTable(e.schema,e.table);if(s)return Az(new Error,s,yz.NOT_FOUND);let o=bz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];t==="value"&&c.push(e.search_attribute);let u=a(l=>{for(let d=0,E=l.conditions.length;d<E;d++){let f=l.conditions[d];f.conditions?u(f):c.push(f.search_attribute)}},"addConditions");t==="conditions"&&u(e);let _=dw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Array.isArray(l)&&!l.name&&!dw.some(o,d=>d===l||d.attribute===l||d.attribute===l.attribute));if(_&&_.length>0){let l=_.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var Bp=g((C_e,pw)=>{"use strict";var wz=ze(),Cz=ia(),{getSchemaPath:Dz}=je();pw.exports=Lz;function Lz(e){let t=Cz(e,"hashes");if(t)throw t;let r=Dz(e.schema,e.table);return wz.openEnvironment(r,e.table)}a(Lz,"initialize")});var xp=g((L_e,Sw)=>{"use strict";var Mz=sa(),Pz=Bp();Sw.exports=Uz;async function Uz(e){let t=await Pz(e),r=t.useReadTransaction();r.database=t;let n=global.hdb_schema[e.schema][e.table];try{return Mz.batchSearchByHashToMap(r,n.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Uz,"lmdbGetDataByHash")});var oa=g((P_e,Tw)=>{"use strict";var Hp=class{static{a(this,"SearchByHashObject")}constructor(t,r,n,s){this.schema=t,this.table=r,this.hash_values=n,this.get_attributes=s}};Tw.exports=Hp});var Rw=g((B_e,gw)=>{"use strict";var v_e=oa(),vz=sa(),Bz=Bp();gw.exports=xz;async function xz(e){let t=await Bz(e),r=global.hdb_schema[e.schema][e.table];return vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(xz,"lmdbSearchByHash")});var rs=g((H_e,Aw)=>{"use strict";var Gp=class{static{a(this,"SearchObject")}constructor(t,r,n,s,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=n,this.search_value=s,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Aw.exports=Gp});var Ed=g((q_e,ww)=>{"use strict";var rr=sa(),Hz=ze(),Gz=z(),me=ft(),ro=P(),qz=Vi(),Ow=Ur().LMDB_ERRORS_ENUM,{getSchemaPath:Fz}=je(),Is=ro.SEARCH_WILDCARDS;async function kz(e,t,r){let n;e.schema===ro.SYSTEM_SCHEMA_NAME?n=qz[e.table]:n=global.hdb_schema[e.schema][e.table];let s=Iw(e,n.hash_attribute,r,t);return yw(e,s,n.hash_attribute,r)}a(kz,"prepSearch");async function yw(e,t,r,n){let s=Fz(e.schema,e.table),i=await Hz.openEnvironment(s,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,me.SEARCH_TYPES.SEARCH_ALL,me.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Vz(e,r)===!1){let l=e.search_attribute;if(l===r)return n?bw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[l]:E.key}),"toObject");return n?bw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return n===!0?rr.batchSearchByHashToMap(c,r,e.get_attributes,_):rr.batchSearchByHash(c,r,e.get_attributes,_)}a(yw,"executeSearch");function Nw(e,t,r,n){let s,i=n;t.get_attributes.indexOf(n)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case me.SEARCH_TYPES.EQUALS:s=rr.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.CONTAINS:s=rr.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.ENDS_WITH:case me.SEARCH_TYPES._ENDS_WITH:s=rr.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.STARTS_WITH:case me.SEARCH_TYPES._STARTS_WITH:s=rr.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return rr.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return rr.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case me.SEARCH_TYPES.SEARCH_ALL:return rr.searchAll(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return rr.searchAllToMap(e,n,t.get_attributes,o,c,u);case me.SEARCH_TYPES.BETWEEN:s=rr.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN:case me.SEARCH_TYPES._GREATER_THAN:s=rr.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.GREATER_THAN_EQUAL:case me.SEARCH_TYPES._GREATER_THAN_EQUAL:s=rr.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN:case me.SEARCH_TYPES._LESS_THAN:s=rr.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case me.SEARCH_TYPES.LESS_THAN_EQUAL:case me.SEARCH_TYPES._LESS_THAN_EQUAL:s=rr.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return s}a(Nw,"searchByType");function bw(e,t){let r=new Map;for(let n of e)r.set(n.value,t(n));return r}a(bw,"createMapFromIterable");function Vz(e,t){if(e.get_attributes.length===1&&e.get_attributes[0]==="*")return!0;let r=[e.search_attribute];e.get_attributes.indexOf(t)>=0&&r.push(t);let n=!1;for(let s=0;s<e.get_attributes.length;s++)if(r.indexOf(e.get_attributes[s])<0){n=!0;break}return n}a(Vz,"checkToFetchMore");function Iw(e,t,r,n){if(Gz.isEmpty(n)){let s=e.search_value;typeof s=="object"?s=JSON.stringify(s):s=s.toString();let i=s.charAt(0),o=s.charAt(s.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Is.indexOf(s)>-1)return r===!0?me.SEARCH_TYPES.SEARCH_ALL_TO_MAP:me.SEARCH_TYPES.SEARCH_ALL;if(s.indexOf(Is[0])<0&&s.indexOf(Is[1])<0)return c===!0?r===!0?me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:me.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:me.SEARCH_TYPES.EQUALS;if(Is.indexOf(i)>=0&&Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),me.SEARCH_TYPES.CONTAINS;if(Is.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),me.SEARCH_TYPES.ENDS_WITH;if(Is.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),me.SEARCH_TYPES.STARTS_WITH;if(s.includes(Is[0])||s.includes(Is[1]))return me.SEARCH_TYPES.EQUALS;throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}else switch(n){case ro.VALUE_SEARCH_COMPARATORS.BETWEEN:return me.SEARCH_TYPES.BETWEEN;case ro.VALUE_SEARCH_COMPARATORS.GREATER:return me.SEARCH_TYPES.GREATER_THAN;case ro.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return me.SEARCH_TYPES.GREATER_THAN_EQUAL;case ro.VALUE_SEARCH_COMPARATORS.LESS:return me.SEARCH_TYPES.LESS_THAN;case ro.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return me.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Ow.UNKNOWN_SEARCH_TYPE)}}a(Iw,"createSearchTypeFromSearchObject");ww.exports={executeSearch:yw,createSearchTypeFromSearchObject:Iw,prepSearch:kz,searchByType:Nw}});var Dw=g((V_e,Cw)=>{"use strict";var k_e=rs(),$z=ia(),Yz=z(),Kz=P(),Wz=Ed();Cw.exports=Qz;function Qz(e,t){if(!Yz.isEmpty(t)&&Kz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=$z(e,"value");if(n)throw n;return Wz.prepSearch(e,t,!0)}a(Qz,"lmdbGetDataByValue")});var su=g((K_e,Lw)=>{"use strict";var Y_e=rs(),zz=ia(),Jz=z(),jz=P(),Xz=Ed();Lw.exports=Zz;async function Zz(e,t){if(!Jz.isEmpty(t)&&jz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let n=zz(e,"value");if(n)throw n;return Xz.prepSearch(e,t,!1)}a(Zz,"lmdbSearchByValue")});var Pw=g((z_e,Mw)=>{"use strict";var Q_e=ft(),qp=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,n,s,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=n,this.limit=i,this.offset=o,this.conditions=s,this.operator=c}},Fp=class{static{a(this,"SearchCondition")}constructor(t,r,n){this.search_attribute=t,this.search_type=r,this.search_value=n}},kp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Mw.exports={SearchByConditionsObject:qp,SearchCondition:Fp,SortAttribute:kp}});var Hw=g((Z_e,xw)=>{"use strict";var j_e=Pw().SearchByConditionsObject,eJ=rs(),tJ=ia(),Vp=sa(),hd=ft(),{Resource:X_e}=(cn(),ie($p)),Bw=Ed(),rJ=vp(),nJ=require("lodash"),{getSchemaPath:sJ}=je(),Uw=ze(),{handleHDBError:iJ,hdb_errors:oJ}=se(),{HTTP_STATUS_CODES:aJ}=oJ,cJ=1e8;xw.exports=uJ;async function uJ(e){let t=tJ(e,"conditions");if(t)throw iJ(t,t.message,aJ.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=sJ(e.schema,e.table),n=await Uw.openEnvironment(r,e.table),s=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Uw.openDBI(n,_.search_attribute);let i=nJ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===hd.SEARCH_TYPES.EQUALS?_.estimated_count=Vp.count(n,_.search_attribute,_.search_value):l===hd.SEARCH_TYPES.CONTAINS||l===hd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=cJ}return _.estimated_count}),o=n.useReadTransaction();o.database=n;let c=await vw(o,e,i[0],s.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=n.dbis[s.hash_attribute],l=i.slice(1).map(Bw.filterByType),d=l.length,E=Vp.setGetWholeRowAttributes(n,e.get_attributes);u=c.map(f=>_.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!l[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>rJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await vw(o,e,E,s.hash_attribute);c=c.concat(f)}let _=new Set,l=e.offset||0;c=c.filter(d=>_.has(d)?!1:(_.add(d),!0)).slice(l,e.limit&&e.limit+l),u=Vp.batchSearchByHash(o,s.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uJ,"lmdbSearchByConditions");async function vw(e,t,r,n){let s=new eJ(t.schema,t.table,void 0,void 0,n,t.get_attributes),i=r.search_type;return s.search_attribute=r.search_attribute,i===hd.SEARCH_TYPES.BETWEEN?(s.search_value=r.search_value[0],s.end_value=r.search_value[1]):s.search_value=r.search_value,Bw.searchByType(e,s,i,n).map(o=>o.value)}a(vw,"executeConditionSearch")});var aa=g((tde,Gw)=>{"use strict";var lJ=P().OPERATIONS_ENUM,Yp=class{static{a(this,"DeleteObject")}constructor(t,r,n,s=void 0){this.operation=lJ.DELETE,this.schema=t,this.table=r,this.hash_values=n,this.__origin=s}};Gw.exports=Yp});var Kp=g((nde,Ww)=>{"use strict";var Vw=rs(),$w=aa(),Yw=su(),Kw=eu(),hr=P(),qw=z(),Fw=ze(),{getTransactionAuditStorePath:_J,getSchemaPath:dJ}=je(),kw=$();Ww.exports=fJ;async function fJ(e){try{if(qw.isEmpty(global.hdb_schema[e.schema])||qw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await EJ(e),await hJ(e);let t=dJ(e.schema,e.table);try{await Fw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=_J(e.schema,e.table);await Fw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")kw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fJ,"lmdbDropTable");async function EJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Yw(t)),n=[];for(let i=0;i<r.length;i++){let o=r[i];n.push(o.id)}if(n.length===0)return;let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);await Kw(s)}a(EJ,"deleteAttributesFromSystem");async function hJ(e){let t=new Vw(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,hr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,n;try{r=Array.from(await Yw(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let o=r[i];o.name===e.table&&o.schema===e.schema&&(n=o)}if(!n)throw new Error(`${e.schema}.${e.table} was not found`);let s=new $w(hr.SYSTEM_SCHEMA_NAME,hr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[n.id]);try{await Kw(s)}catch(i){throw i}}a(hJ,"dropTableFromSystem")});var zw=g((ide,Qw)=>{"use strict";var mJ=require("fs-extra"),pJ=rs(),SJ=oa(),TJ=aa(),gJ=Kp(),RJ=eu(),AJ=xp(),OJ=su(),ws=P(),{getSchemaPath:bJ}=je(),{handleHDBError:yJ,hdb_errors:NJ}=se(),{HDB_ERROR_MSGS:IJ,HTTP_STATUS_CODES:wJ}=NJ;Qw.exports=CJ;async function CJ(e){let t;try{t=await DJ(e.schema);let r=new pJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),n=Array.from(await OJ(r));for(let o=0;o<n.length;o++){let c={schema:t,table:n[o].name};try{await gJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let s=new TJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await RJ(s);let i=bJ(t);await mJ.remove(i)}catch(r){throw r}}a(CJ,"lmdbDropSchema");async function DJ(e){let t=new SJ(ws.SYSTEM_SCHEMA_NAME,ws.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ws.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,n;try{r=Array.from(await AJ(t))}catch(s){throw s}for(let[,s]of r)s.name===e&&(n=e);if(!n)throw yJ(new Error,IJ.SCHEMA_NOT_FOUND(e),wJ.NOT_FOUND,void 0,void 0,!0);return n}a(DJ,"validateDropSchema")});var md=g((ade,Jw)=>{"use strict";var Wp=class{static{a(this,"CreateTableObject")}constructor(t,r,n){this.schema=t,this.table=r,this.hash_attribute=n}};Jw.exports=Wp});var Xw=g((lde,jw)=>{"use strict";var LJ=require("fs-extra"),pd=ze(),{getTransactionAuditStorePath:MJ}=je(),Qp=ft(),ude=md();jw.exports=PJ;async function PJ(e){let t;try{let r=MJ(e.schema,e.table);await LJ.mkdirp(r),t=await pd.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{pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pd.createDBI(t,Qp.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME,!0,!1)}catch(r){throw r.message=`unable to create dbi for ${e.schema}.${e.table} due to: ${r.message}`,r}return t}a(PJ,"createTransactionsAuditEnvironment")});var rC=g((dde,tC)=>{"use strict";var zp=P(),Zw=ze(),UJ=Ko(),{getSystemSchemaPath:vJ,getSchemaPath:BJ}=je(),xJ=Vi(),HJ=q_(),Jp=G_(),GJ=$(),qJ=Xw(),Xp=xJ.hdb_table,eC=[];for(let e=0;e<Xp.attributes.length;e++)eC.push(Xp.attributes[e].attribute);tC.exports=FJ;async function FJ(e,t){let r=BJ(t.schema,t.table),n=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),s=new Jp(t.schema,t.table,zp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Jp(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Zw.createEnvironment(r,t.table),e!==void 0){let o=await Zw.openEnvironment(vJ(),zp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UJ.insertRecords(o,Xp.hash_attribute,eC,[e]),n.skip_table_check=!0,s.skip_table_check=!0,i.skip_table_check=!0,await jp(n),await jp(s),await jp(i)}await qJ(t)}catch(o){throw o}}a(FJ,"lmdbCreateTable");async function jp(e){try{await HJ(e)}catch(t){GJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(jp,"createAttribute")});var sC=g((Ede,nC)=>{"use strict";var kJ=$c(),VJ=wc(),$J=cd(),iu=P(),YJ=Ko().updateRecords,KJ=ze(),{getSchemaPath:WJ}=je(),QJ=Xc(),zJ=$();nC.exports=JJ;async function JJ(e){try{let{schema_table:t,attributes:r}=kJ(e);VJ(e,r,t.hash_attribute),e.schema!==iu.SYSTEM_SCHEMA_NAME&&(r.includes(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(iu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $J(e.hdb_auth_header,t,r),s=WJ(e.schema,e.table),i=await KJ.openEnvironment(s,e.table),o=await YJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QJ(e,o)}catch(c){zJ.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:n,txn_time:o.txn_time}}catch(t){throw t}}a(JJ,"lmdbUpdateRecords")});var oC=g((mde,iC)=>{"use strict";var jJ=P().OPERATIONS_ENUM,Zp=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=jJ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};iC.exports=Zp});var cC=g((Tde,aC)=>{"use strict";var Sde=oC(),XJ=$c(),ZJ=wc(),e2=cd(),ou=P(),t2=Ko().upsertRecords,r2=ze(),{getSchemaPath:n2}=je(),s2=Xc(),i2=$(),{handleHDBError:o2,hdb_errors:a2}=se();aC.exports=c2;async function c2(e){let t;try{t=XJ(e)}catch(u){throw o2(u,u.message,a2.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:n}=t;ZJ(e,n,r.hash_attribute),e.schema!==ou.SYSTEM_SCHEMA_NAME&&(n.includes(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.CREATED_TIME),n.includes(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||n.push(ou.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await e2(e.hdb_auth_header,r,n),i=n2(e.schema,e.table),o=await r2.openEnvironment(i,e.table),c=await t2(o,r.hash_attribute,n,e.records,e.__origin?.timestamp);try{await s2(e,c)}catch(u){i2.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:s,txn_time:c.txn_time}}a(c2,"lmdbUpsertRecords")});var lC=g((Rde,uC)=>{"use strict";var eS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.timestamp=n}};uC.exports=eS});var dC=g((Ode,_C)=>{"use strict";var tS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,n=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=n}};_C.exports=tS});var hC=g((Nde,EC)=>{"use strict";var rS=ze(),{getTransactionAuditStorePath:u2}=je(),yde=lC(),au=ft(),l2=z(),fC=dC(),_2=require("util").promisify,d2=_2(setTimeout),f2=1e4,E2=100;EC.exports=h2;async function h2(e){let t=u2(e.schema,e.table),r=await rS.openEnvironment(t,e.table,!0),n=rS.listDBIs(r);rS.initializeDBIs(r,au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s,i=new fC;do s=await m2(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 d2(E2);while(s.transactions_deleted>0);return i}a(h2,"deleteAuditLogsBefore");async function m2(e,t){let r=new fC;try{let n=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let{key:i,value:o}of n.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),s=n.remove(i);let c=o[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];l2.isEmpty(c)||(s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)s=e.dbis[au.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f2)break}return await s,r}catch(n){throw n}}a(m2,"deleteTransactions")});var pC=g((wde,mC)=>{"use strict";var nS=class{static{a(this,"DropAttributeObject")}constructor(t,r,n){this.schema=t,this.table=r,this.attribute=n}};mC.exports=nS});var TC=g((Lde,SC)=>{"use strict";var p2=rs(),S2=aa(),Dde=pC(),ns=P(),T2=z(),sS=ze(),g2=Vi(),R2=su(),A2=eu(),{getSchemaPath:O2}=je();SC.exports=b2;async function b2(e,t=!0){let r;e.schema===ns.SYSTEM_SCHEMA_NAME?r=g2[e.table]:r=global.hdb_schema[e.schema][e.table];let n=await N2(e),s=O2(e.schema,e.table),i=await sS.openEnvironment(s,e.table);return t===!0&&await y2(e,i,r.hash_attribute),sS.dropDBI(i,e.attribute),n}a(b2,"lmdbDropAttribute");async function y2(e,t,r){let n=sS.openDBI(t,r),s,i=e.attribute;for(let{key:o,value:c,version:u}of n.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);s=t.dbis[r].put(o,_,u)}await s}a(y2,"removeAttributeFromAllObjects");async function N2(e){let t=new p2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),n=Array.from(await R2(t)).filter(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T2.isEmptyOrZeroLength(n))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let s=n.map(o=>o[ns.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new S2(ns.SYSTEM_SCHEMA_NAME,ns.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);return A2(i)}a(N2,"dropAttributeFromSystem")});var yC=g((Ude,bC)=>{"use strict";var iS=ze(),ca=ft(),Pde=vr(),oS=P(),gC=z(),{getTransactionAuditStorePath:I2}=je(),w2=sa(),Sd=ta(),C2=$();bC.exports=D2;async function D2(e){let t=I2(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),n=iS.listDBIs(r);iS.initializeDBIs(r,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,n);let s;switch(e.search_type){case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return RC(r,e.search_values);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return s=global.hdb_schema[e.schema][e.table].hash_attribute,M2(r,e.search_values,s);case oS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L2(r,e.search_values);default:return RC(r)}}a(D2,"readAuditLog");function RC(e,t=[0,Date.now()]){gC.isEmpty(t[0])&&(t[0]=0),gC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ca.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 Sd,s))}a(RC,"searchTransactionsByTimestamp");function L2(e,t=[]){let r=new Map;for(let n=0;n<t.length;n++){let s=t[n],i=[];for(let o of e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(s))i.push(o);r.set(s,OC(e,i))}return Object.fromEntries(r)}a(L2,"searchTransactionsByUsername");function M2(e,t,r){let n=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=w2.equals(e,ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ca.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let E=Number(d);n.has(E)?n.get(E).push(_.toString()):n.set(E,[_.toString()])}}let s=Array.from(n.keys()),i=OC(e,s),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=n.get(_);AC(u,"records",r,l,o),AC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(M2,"searchTransactionsByHashValues");function AC(e,t,r,n,s){let i=e.timestamp;if(e[t])for(let o=0;o<e[t].length;o++){let c=e[t][o],u=c[r].toString();if(n.indexOf(u)>=0)if(s.has(u)){let _=s.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Sd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Sd(e.operation,e.user_name,i,void 0);_[t]=[c],s.set(u,[_])}}}a(AC,"loopRecords");function OC(e,t){let r=[];try{let n=e.dbis[ca.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let s=0;s<t.length;s++)try{let i=n.get(t[s]);if(i){let o=Object.assign(new Sd,i);r.push(o)}}catch(i){C2.warn(i)}return r}catch(n){throw n}}a(OC,"batchSearchTransactions")});var IC=g((Hde,NC)=>{"use strict";var{getSchemaPath:Bde}=je(),xde=ze(),{database:P2}=(Ae(),ie(ke));NC.exports={writeTransaction:U2};async function U2(e,t,r){return P2({database:e,table:t}).transaction(r)}a(U2,"writeTransaction")});var LC=g((qde,DC)=>{"use strict";var{getSchemaPath:wC}=je(),CC=ze();DC.exports={flush:v2,resetReadTxn:B2};async function v2(e,t){return(await CC.openEnvironment(wC(e,t),t.toString())).flushed}a(v2,"flush");async function B2(e,t){try{(await CC.openEnvironment(wC(e,t),t.toString())).resetReadTxn()}catch{}}a(B2,"resetReadTxn")});var vC=g((kde,UC)=>{"use strict";var{Readable:x2}=require("stream"),{getDatabases:H2}=(Ae(),ie(ke)),{readSync:G2,openSync:q2,createReadStream:MC}=require("fs"),{open:F2}=require("lmdb"),PC=xc(),k2=Hc(),{AUDIT_STORE_OPTIONS:V2}=(ni(),ie(BC)),{INTERNAL_DBIS_NAME:$2,AUDIT_STORE_NAME:Y2}=ft();UC.exports=W2;var aS=32768,K2=100;async function W2(e){let t=e.database||e.schema||"data",r=H2()[t],n=new Date().toISOString(),s=e.tables||e.table&&[e.table];if(s){let _=r[s[0]];if(!_)throw new Error(`Can not find table ${s[0]}`);let l=_.dbisDB,d=F2({noSync:!0,maxDbs:k2.MAX_DBS}),E,f=d.openDB($2,new PC(!1)),h=l.useReadTransaction(),p=0,S=a(async function(R,b){b.encoding="binary",b.encoder=void 0;let I=d.openDB(R,b),B=l.openDB(R,b);for(let{key:U,version:F,value:M}of B.getRange({start:null,transaction:h,versions:B.useVersions}))E=I.put(U,M,F),p++%K2===0&&(await new Promise(Q=>setTimeout(Q,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:b}of l.getRange({transaction:h,start:!1}))if(s.some(I=>R.startsWith?.(I+"/"))){f.put(R,b);let[,I]=R.split("/"),B=!I,U=new PC(!B,B);await S(R,U)}e.include_audit&&await S(Y2,Object.assign({},V2)),await E;let T=MC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=q2(o.path);return o.transaction(()=>{let _=Buffer.alloc(aS);G2(c,_,0,aS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=MC(null,{fd:c,start:aS}),E=new x2.from(async function*(){yield _;for await(let f of d)l.openTimer&&(l.openTimer=0),yield f;l.done()}());return E.headers=u(),E});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",n),_}}a(W2,"getBackup")});var GC=g(($de,HC)=>{"use strict";var Q2=$(),{handleHDBError:z2}=se(),J2=ey(),j2=q_(),X2=Dp(),Z2=zI(),e4=eu(),t4=xp(),r4=Rw(),n4=Dw(),s4=su(),i4=Hw(),o4=zw(),a4=rC(),c4=sC(),u4=cC(),l4=hC(),_4=Kp(),d4=TC(),f4=yC(),E4=IC(),xC=LC(),h4=vC(),cS=class extends J2{static{a(this,"LMDBBridge")}async searchByConditions(t){return i4(t)}async getDataByHash(t){return await t4(t)}async searchByHash(t){return await r4(t)}async getDataByValue(t,r){return await n4(t,r)}async searchByValue(t){return await s4(t)}async createSchema(t){return await Z2(t)}async dropSchema(t){return await o4(t)}async createTable(t,r){return await a4(t,r)}async dropTable(t){return await _4(t)}async createAttribute(t){return await j2(t)}async createRecords(t){return await X2(t)}async updateRecords(t){return await c4(t)}async upsertRecords(t){try{return await u4(t)}catch(r){throw z2(r,null,null,Q2.ERR,r)}}async deleteRecords(t){return await e4(t)}async dropAttribute(t){return await d4(t)}async deleteAuditLogsBefore(t){return await l4(t)}async readAuditLog(t){return await f4(t)}writeTransaction(t,r,n){return E4.writeTransaction(t,r,n)}flush(t,r){return xC.flush(t,r)}resetReadTxn(t,r){return xC.resetReadTxn(t,r)}getBackup(t){return h4(t)}};HC.exports=cS});function T4(){S4=setInterval(function(){for(let e of uS)if(e.stale){let t=e[ye]?.url;VC.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.abort()}else e.stale=!0},p4).unref()}var lS,kC,VC,$C,YC,KC,qC,uS,m4,cu,FC,no,Td,p4,S4,_S=Re(()=>{lS=H(vr()),kC=H(se()),VC=H($());cn();$C=H(ee()),YC=H(P()),KC=H(z()),qC=100,uS=new Set,m4=(0,KC.convertToMS)($C.get(YC.CONFIG_PARAMS.STORAGE_MAXTRANSACTIONQUEUETIME))||45e3,no=class e{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;readTxnsUsed;validated=0;timestamp=0;overloadChecked;open=1;getReadTxn(){if(this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn)return this.readTxn.openTimer&&(this.readTxn.openTimer=0),this.readTxn;if(this.open===1)return this.readTxn=this.lmdbDb.useReadTransaction(),this.readTxnsUsed=1,this.readTxn.openTimer&&(this.readTxn.openTimer=0),uS.add(this),this.readTxn}useReadTxn(){return this.getReadTxn(),this.readTxn.use(),this.readTxnsUsed++,this.readTxn}doneReadTxn(){this.readTxn&&(this.readTxn.done(),--this.readTxnsUsed===0&&(uS.delete(this),this.readTxn=null))}disregardReadTxn(){--this.readTxnRefCount===0&&this.readTxnsUsed===1&&this.doneReadTxn()}checkOverloaded(){if(cu&&!this.overloadChecked&&performance.now()-FC>m4)throw new kC.ServerError("Outstanding write transactions have too long of queue, please try again later",503);this.overloadChecked=!0}addWrite(t){if(this.open===0)throw new Error("Can not use a transaction that is no longer open");if(this.open===2){let r=new e;return r.addWrite(t),r.commit({})}else this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&(this.writes[r]=null)}commit(t={}){let r=this.timestamp;r||(r=this.timestamp=t.timestamp=t.timestamp||(0,lS.getNextMonotonicTime)());let n=t.retries||0;if(this.validated<this.writes.length)try{let d=this.validated;this.validated=this.writes.length;for(let f=d;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let E;for(let f=d;f<this.validated;f++){let h=this.writes[f];h&&(h.before||h.beforeIntermediate)&&(E=!0)}if(E)return(async()=>{try{for(let f=0;f<2;f++){let h;for(let p=d;p<this.validated;p++){let S=this.writes[p];if(!S)continue;let T=S[f===0?"before":"beforeIntermediate"];if(T){let R=T();h?h.push?h.push(R):h=[h,R]:h=R}}h&&await(h.push?Promise.all(h):h)}}catch(f){throw this.abort(),f}return this.commit(t)})()}catch(d){throw this.abort(),d}n||this.doneReadTxn(),this.open=t?.letItLinger?2:0;let s,i=[],o=0;this.writes=this.writes.filter(d=>d);let c=a(d=>{d.commit(r,d.entry,n)},"doWrite"),u=a(()=>{let d=this.writes[o++];if(d)if(d.key){n>0&&(d.entry=d.store.getEntry(d.key));let E=d.store.ifVersion(d.key,d.entry?.version??null,u);s=s||E}else u();else for(let E of this.writes)c(E)},"nextCondition"),_=this.lmdbDb;if(this.writes.length>0&&(_?.retryRisk&&(_.retryRisk*=.99),this.writes.length+(_?.retryRisk||0)<qC>>n?u():s=this.writes[0].store.transaction(()=>{for(let d of this.writes)d.entry=d.store.getEntry(d.key),c(d);return!0})),s)return cu||(cu=s,FC=performance.now(),cu.then(()=>{cu=null})),s.then(d=>d?(this.next&&i.push(this.next.commit(t)),t?.flush&&i.push(this.writes[0].store.flushed),this.writes=[],this.next=null,Promise.all(i).then(()=>({txnTime:r}))):(_&&(_.retryRisk=(_.retryRisk||0)+qC/2),t?t.retries=n+1:t={retries:1},this.commit(t)));let l={txnTime:r};if(this.next){let d=this.next?.commit(t);if(d?.then)return d?.then(E=>({txnTime:r,next:E}));l.next=d}return l}abort(){for(;this.readTxnsUsed>0;)this.doneReadTxn();this.open=0,this.writes=[]}},Td=class extends no{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,lS.getNextMonotonicTime)())}getReadTxn(){}},p4=3e4;a(T4,"startMonitoringTxns");T4()});function rt(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction?.open===1&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let n=e.transaction=new no;e.timestamp&&(n.timestamp=e.timestamp),n[ye]=e,e.resourceCache||(e.resourceCache=[]);let s;try{if(s=t(n),s?.then)return s.then(i,o)}catch(c){o(c)}return i(s);function i(c){let u=n.commit({letItLinger:r?.letItLinger});return u.then?u.then(()=>c):c}function o(c){throw n.abort({}),c}}var WC,so=Re(()=>{WC=require("../index");cn();_S();a(rt,"transaction");(0,WC._assignPackageExport)("transaction",rt);rt.commit=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};rt.abort=function(e){let t=(e[ye]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});var tD={};Fe(tD,{ResourceBridge:()=>ES});function hS({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 zC(e,t){let r=ss(e),n=hS(e,r);if(!r)throw new Un.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},o;rt(i,()=>new Promise(_=>o=_));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let _=c[u++],l=await r.get({id:_,lazy:s,select:n},i);return l=l&&Rd(l),t?{value:{key:_,value:l}}:{value:l}}else return o(),{done:!0}},return(_){return o(),{value:_,done:!0}},throw(_){return o(),{done:!0}}}}}}function ss(e){let t=e.database||e.schema||R4,r=mr()[t];if(!r)throw(0,Un.handleHDBError)(new Error,g4.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function JC(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*jC(e,t,r){let n;for await(let s of e.getHistory(t,r)){let i=s.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=s;n?.timestamp===c?(n.hash_values.push(o),n.records.push(u)):(n&&(yield n),n={operation:i,user_name:s.user,timestamp:c,hash_values:[o],records:[u]})}n&&(yield n)}var XC,gd,Un,ZC,vn,dS,fS,eD,g4,R4,A4,O4,QC,ES,rD=Re(()=>{"use strict";XC=H(GC()),gd=H(ia()),Un=H(se());Ae();ZC=H($c()),vn=H(P()),dS=H(Ns()),fS=H(Pn()),eD=H(z());so();Ad();({HDB_ERROR_MSGS:g4}=Un.hdb_errors),R4="data",A4=1e4,O4=10,ES=class extends XC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),QC=this}async searchByConditions(t){t.select!==void 0&&(t.get_attributes=t.select);for(let o of t.conditions||[])o?.attribute!==void 0&&(o.search_attribute=o.attribute),o?.comparator!==void 0&&(o.search_type=o.comparator),o?.value!==void 0&&(o.search_value=o.value);let r=(0,gd.default)(t,"conditions");if(r)throw(0,Un.handleHDBError)(r,r.message,400,void 0,void 0,!0);let n=ss(t);if(!n)throw new Un.ClientError(`Table ${t.table} not found`);let s=t.conditions.map(i);function i(o){return o.conditions?(o.conditions=o.conditions.map(i),o):{attribute:o.search_attribute??o.attribute,comparator:o.search_type??o.comparator,value:o.search_value!==void 0?o.search_value:o.value}}return a(i,"mapCondition"),n.search({conditions:s,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,n),sort:t.sort,allowFullScan:!0})}async createTable(t,r){let n=r.attributes,s=!!n,i=r.primary_key||r.hash_attribute;if(n)for(let o of n)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Un.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}]}Et({database:r.schema,table:r.table,attributes:n,schemaDefined:s,expiration:r.expiration})}async createAttribute(t){return await ss(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ss(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let n=t.attribute,s,i=a((o,c,u)=>(c=Object.assign({},c),delete c[n],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(_=>{if(!_){let{value:l,version:d}=r.primaryStore.getEntry(o);return i(o,l,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))s=i(o,c,u),await new Promise(_=>setImmediate(_));await s}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){ss(t).dropTable()}createSchema(t){return ua({database:t.schema,table:null}),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new fS.SchemaEventMsg(process.pid,vn.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,QC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:n}=(0,ZC.default)(t),s,i=mr()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return rt(o,async c=>{if(!i.schemaDefined){s=[];for(let l of n)i.attributes.find(E=>E.name==l)||s.push(l);s.length>0&&await i.addAttributes(s.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=l[i.primaryKey],E=d!=null&&await i.get(d,o);if(t.requires_existing&&!E||t.requires_no_existing&&E){_.push(l[i.primaryKey]);continue}E&&(E=Rd(E));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let h=l[f];if(typeof h=="function")try{let p=h([[E]]);Array.isArray(p)&&(h=p[0].func_val,l[f]=h)}catch(p){throw p.message+="Trying to set key "+f+" on object"+JSON.stringify(l),p}}if(E)for(let f in E)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=E[f]);await(d==null?i.create(l,o):i.put(l,o)),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:s,skipped_hashes:_}})}async deleteRecords(t){let r=mr()[t.schema][t.table],n={user:t.hdb_user};return rt(n,async s=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,n)?o.push(u):c.push(u);return JC(o,c,s.timestamp)})}async deleteRecordsBefore(t){let r=mr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Un.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:vn.VALUE_SEARCH_COMPARATORS.LESS}]}),s=!1,i=[],o=[],c=0,u=[],_=a(async()=>{let l=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(...l.deleted_hashes),o.push(...l.skipped_hashes),await(0,eD.async_set_timeout)(O4),u=[],s=!0},"chunkDelete");for await(let l of n)u.push(l[r.primaryKey]),c++,c%A4===0&&await _();return u.length>0&&await _(),s?JC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){t.select!==void 0&&(t.get_attributes=t.select);let r=(0,gd.default)(t,"hashes");if(r)throw r;return zC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:n,value:s}of zC(t,!0))r.set(n,s);return r}searchByValue(t,r){if(r&&vn.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);t.select!==void 0&&(t.get_attributes=t.select),t.attribute!==void 0&&(t.search_attribute=condition.attribute),t.value!==void 0&&(t.search_value=condition.value);let n=(0,gd.default)(t,"value");if(n)throw n;let s=ss(t);if(!s)throw new Un.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===vn.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return s.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:hS(t,s)})}async getDataByValue(t,r){let n=new Map,s=ss(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){ss({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ss(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ss(t),n={};switch(t.search_type){case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)n[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,timestamp:o.version,user_name:o.user,hash_values:[i],records:[o.value]}});return n;case vn.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let s=t.search_values;for await(let i of jC(r))s.includes(i.user_name)&&(n[i.user_name]||(n[i.user_name]=[])).push(i);return n;default:return jC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(zC,"getRecords");a(ss,"getTable");a(JC,"createDeleteResponse");a(jC,"groupRecordsInHistory")});var Dn=g((ife,nD)=>{"use strict";var{ResourceBridge:b4}=(rD(),ie(tD)),y4=ee();y4.initSync();var Od;function N4(){return Od||(Od=new b4,Od)}a(N4,"getBridge");nD.exports=N4()});var aD=g((afe,oD)=>{"use strict";var sD=require("lodash"),uu=require("mathjs"),I4=require("jsonata"),iD=z();oD.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?sD.uniqWith(e,sD.isEqual):e,searchJSON:w4,mad:lu.bind(null,uu.mad),mean:lu.bind(null,uu.mean),mode:lu.bind(null,uu.mode),prod:lu.bind(null,uu.prod),median:lu.bind(null,uu.median)};function lu(e,t,r,n){return n===1?t==null?[]:[t]:n===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(lu,"aggregateFunction");function w4(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(iD.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),iD.isEmpty(this.__ala__.res[r])){let n=I4(e);this.__ala__.res[r]=n}return this.__ala__.res[r].evaluate(t)}a(w4,"searchJSON")});var uD=g((ufe,cD)=>{"use strict";var Rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";Rt.suppressDeprecationWarnings=!0;cD.exports={current_date:()=>Rt().utc().format("YYYY-MM-DD"),current_time:()=>Rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Rt(e).utc().format("YYYY");case"month":return Rt(e).utc().format("MM");case"day":return Rt(e).utc().format("DD");case"hour":return Rt(e).utc().format("HH");case"minute":return Rt(e).utc().format("mm");case"second":return Rt(e).utc().format("ss");case"millisecond":return Rt(e).utc().format("SSS");default:break}},date:e=>Rt(e).utc().format(pS),date_format:(e,t)=>Rt(e).utc().format(t),date_add:(e,t,r)=>Rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let n=Rt(e).utc(),s=Rt(t).utc();return r?n.diff(s,r,!0):n.diff(s)},now:()=>Rt().utc().valueOf(),get_server_time:()=>Rt().format(pS),offset_utc:(e,t)=>Rt(e).utc().utcOffset(t).format(pS)}});var fD=g((lfe,dD)=>{"use strict";var C4=require("@turf/area"),D4=require("@turf/length"),L4=require("@turf/circle"),M4=require("@turf/difference"),P4=require("@turf/distance"),U4=require("@turf/boolean-contains"),v4=require("@turf/boolean-equal"),B4=require("@turf/boolean-disjoint"),x4=require("@turf/helpers"),lD=P(),Te=z(),Cs=$();dD.exports={geoArea:H4,geoLength:G4,geoCircle:q4,geoDifference:F4,geoDistance:_D,geoNear:k4,geoContains:V4,geoEqual:$4,geoCrosses:Y4,geoConvert:K4};function H4(e){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return C4.default(e)}catch(t){return Cs.trace(t,e),NaN}}a(H4,"geoArea");function G4(e,t){if(Te.isEmpty(e))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return D4.default(e,{units:t||"kilometers"})}catch(r){return Cs.trace(r,e),NaN}}a(G4,"geoLength");function q4(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e));try{return L4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(q4,"geoCircle");function F4(e,t){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return M4(e,t)}catch(r){return Cs.trace(r,e,t),NaN}}a(F4,"geoDifference");function _D(e,t,r){if(Te.isEmpty(e))return NaN;if(Te.isEmpty(t))return NaN;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return P4.default(e,t,{units:r||"kilometers"})}catch(n){return Cs.trace(n,e,t),NaN}}a(_D,"geoDistance");function k4(e,t,r,n){if(Te.isEmpty(e)||Te.isEmpty(t))return!1;if(Te.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return _D(e,t,n)<=r}catch(s){return Cs.trace(s,e,t),!1}}a(k4,"geoNear");function V4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return U4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(V4,"geoContains");function $4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return v4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a($4,"geoEqual");function Y4(e,t){if(Te.isEmpty(e)||Te.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=Te.autoCastJSON(e)),typeof t=="string"&&(t=Te.autoCastJSON(t));try{return!B4.default(e,t)}catch(r){return Cs.trace(r,e,t),!1}}a(Y4,"geoCrosses");function K4(e,t,r){if(Te.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Te.isEmpty(t))throw new Error("geo_type is required");if(Te.isEmpty(lD.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(lD.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=Te.autoCastJSON(e)),x4[t](e,r)}a(K4,"geoConvert")});var bd=g((dfe,ED)=>{var io=aD(),Kr=uD(),is=fD();ED.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Kr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Kr.current_time,e.fn.extract=e.fn.EXTRACT=Kr.extract,e.fn.date=e.fn.DATE=Kr.date,e.fn.date_format=e.fn.DATE_FORMAT=Kr.date_format,e.fn.date_add=e.fn.DATE_ADD=Kr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Kr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Kr.date_diff,e.fn.now=e.fn.NOW=Kr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Kr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Kr.get_server_time,e.fn.getdate=e.fn.GETDATE=Kr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Kr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=is.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=is.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=is.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=is.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=is.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=is.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=is.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=is.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=is.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=is.geoNear}});var SD=g((ffe,pD)=>{"use strict";var _u=require("lodash"),pr=require("alasql");pr.options.cache=!1;var W4=bd(),hD=require("clone"),yd=require("recursive-iterator"),fe=$(),Le=z(),la=Dn(),Q4=P(),{hdb_errors:z4}=se(),{getDatabases:mD}=(Ae(),ie(ke)),J4="IS NULL",Bn="There was a problem performing this search. Please check the logs and try again.";W4(pr);var SS=class{static{a(this,"SQLSearch")}constructor(t,r){if(Le.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(),Le.backtickASTSchemaItems(this.statement)}async search(){let t;try{let n=await this._checkEmptySQL();if(!Le.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(Bn)}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(Bn)}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(Bn)}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(Bn)}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(Bn)}}_getColumns(){let t=new yd(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(hD(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=_u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let n=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[n]={},this.data[n].__hash_name=mD()[r.databaseid][r.tableid].primaryKey,this.data[n].__merged_data={},this.data[n].__merged_attributes=[],this.data[n].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(Le.isEmpty(this.statement.where)){fe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!Le.isEmpty(r)&&r.right)if(Le.isNotEmptyAndHasValue(r.right.value)){let n=Le.autoCast(r.right.value);[!0,!1].indexOf(n)>=0&&(r.right=new pr.yy.LogicValue({value:n}))}else Array.isArray(r.right)&&r.right.forEach((n,s)=>{let i=Le.autoCast(n.value);[!0,!1].indexOf(i)>=0?r.right[s]=new pr.yy.LogicValue({value:i}):n instanceof pr.yy.StringValue&&Le.autoCasterIsNumberCheck(i.toString())&&(r.right[s]=new pr.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 yd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let n=new Set,s=r.left.columnid?r.left:r.right,i=this._findColumn(s);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!Le.isEmpty(Q4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(Le.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(Le.isEmptyOrZeroLength(r.left.columnid)||Le.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(Le.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!Le.isEmpty(r.right.value)||!Le.isEmpty(r.left.value)?n.add(Le.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let _=0;_<u.length;_++)if(u[_].value)n.add(u[_].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...n])}}}_setAliasesForColumns(){if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from)&&Le.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&&_u.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(Le.isEmptyOrZeroLength(r)){let n=this.columns.columns.filter(s=>s.as?t.columnid===s.as:!1);Le.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(Le.isEmptyOrZeroLength(this.all_table_attributes)&&!Le.isEmptyOrZeroLength(this.columns.columns))return t;if(Le.isEmptyOrZeroLength(this.all_table_attributes)&&Le.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pr.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(hD(n))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,n,s){let i=this.data[t].__merged_attr_map[n];this.data[t].__merged_data[r].splice(i,1,s)}async _getFetchAttributeValues(){if(Le.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(J4)>-1&&this.tables.forEach(s=>{let i={columnid:mD()[s.databaseid][s.tableid].primaryKey,tableid:s.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=_u.uniqBy(this.fetch_attributes,s=>[s.table.databaseid,s.table.as?s.table.as:s.table.tableid,s.attribute].join()),r)return await this._simpleSQLQuery();let n=this.fetch_attributes.reduce((s,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return s[o]||(s[o]=[],s[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(s[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),s},{});for(let s of this.fetch_attributes){let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,o=this.data[i].__hash_name,c={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]},u=!1,_=[s.table.databaseid,s.table.tableid,s.attribute].join("/");if(s.attribute===o&&(u=!0),!Le.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await la.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]):(this.data[i].__merged_data[f]=[...n[i]],this._updateMergedAttribute(i,f,s.attribute,h[s.attribute]),this._setMergedHashAttribute(i,f))}))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),fe.error(l),new Error(Bn)}else if(!Le.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!Le.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,E=l.length;d<E;d++){let f=l[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...n[i]],this._setMergedHashAttribute(i,p));else for(let[p,S]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]):(this.data[i].__merged_data[p]=[...n[i]],this._updateMergedAttribute(i,p,s.attribute,S[s.attribute]),this._setMergedHashAttribute(i,p))}}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),fe.error(l),new Error(Bn)}else try{c.search_attribute=s.attribute,c.search_value="*";let l=await la.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...n[i]],this._setMergedHashAttribute(i,d));else for(let[d,E]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]):(this.data[i].__merged_data[d]=[...n[i]],this._updateMergedAttribute(i,d,s.attribute,E[s.attribute]),this._setMergedHashAttribute(i,d))}catch(l){throw fe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),fe.error(l),new Error(Bn)}}}_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 pr.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(s=>{let i=s.aggregatorid?s.expression:s,o=s.aggregatorid?s.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let n=r[0];if(t.is_func=!!n.funcid,t.is_aggregator=!!n.aggregatorid,n.as)if(n.as&&!t.expression.tableid)t.expression.columnid=n.as,t.expression.columnid_orig=n.as_orig;else{let s=new pr.yy.Column;s.columnid=n.as,s.columnid_orig=n.as_orig,t.expression=s}else{t.initial_select_column=Object.assign(new pr.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 pr.yy.FuncValue:new pr.yy.Column;t.initial_select_column=Object.assign(s,n)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(n=>!n.is_aggregator&&!n.is_ordinal).map(n=>n.is_func?{columnid:n.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:n.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],n=this.statement.from[0],s=[n],i=["? "+(n.as?" AS "+n.as:n.tableid)];t.push(Object.values(this.data[`${n.databaseid_orig}_${n.as?n.as_orig:n.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),s.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};s.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"";u=u.replace(/NOT\(NULL\)/g,"NOT NULL");let _="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(_="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&!this.statement.joins&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(f,s);E=await pr.promise(h,t),t=null}catch(f){throw fe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),fe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(S=>{p[S.key]!==null&&p[S.key]!==void 0&&S.keys.add(p[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=_u.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,T=p.length;S<T;S++){let R=p[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let n=[],s=new yd(this.columns);for(let{node:i}of s)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&n.push(o)}}n=_u.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(Bn)}}async _getData(t){try{let r=t.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]?n[i].columns.push(s.attribute):n[i]={schema:s.table.databaseid,table:s.table.tableid,columns:[s.attribute]},n},{});for(let n in r){let s=r[n],i=this.data[n].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[n].__merged_attributes.push(...s.columns);let c={schema:s.schema,table:s.table,hash_values:o,get_attributes:s.columns},u=await la.getDataByHash(c),_=s.columns.length;for(let l=0,d=o.length;l<d;l++){let E=o[l],f=u.get(E);for(let h=0;h<_;h++){let p=s.columns[h],S=f[p]===void 0?null:f[p];this.data[n].__merged_data[E].push(S)}}}}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}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(s=>{s.as=s.as?s.as:s.table.tableid,t.push(Object.values(this.data[`${s.table.databaseid_orig}_${s.table.as?s.table.as_orig:s.table.tableid_orig}`].__merged_data)),s.table.databaseid="",s.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(s=>{if(s.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return s.expression.tableid?c.columnid_orig===s.expression.columnid_orig&&c.tableid_orig===s.expression.tableid_orig:c.columnid_orig===s.expression.columnid_orig||s.expression.columnid_orig===u}).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 pr.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(z4.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].__merged_attributes.forEach((o,c)=>{let u=s[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;n=n.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;n=n.replace(u,_)});return n}async _simpleSQLQuery(){let t=this.statement.columns.reduce((n,s)=>(s.as_orig&&s.as_orig!=s.columnid_orig?n[s.columnid_orig]=s.as_orig:n[s.columnid_orig]||(n[s.columnid_orig]=s.columnid_orig),n),{}),r=this.fetch_attributes.reduce((n,s)=>{let i=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`;return n[i]||(n[i]={}),n[i][t[s.attribute]]=null,n},{});for(let n of this.fetch_attributes){let s=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,i={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]};try{i.search_attribute=n.attribute,i.search_value="*";let o=await la.getDataByValue(i);for(let[c,u]of o)this.data[s].__merged_data[c]||(u[n.attribute]===void 0&&(u[n.attribute]=null),this.data[s].__merged_data[c]=Object.assign({},r[s])),this.data[s].__merged_data[c][t[n.attribute]]=u[n.attribute]??null}catch(o){throw fe.error("There was an error when processing this SQL operation. Check your logs"),fe.error(o),new Error(Bn)}}return Object.values(Object.values(this.data)[0].__merged_data)}};pD.exports=SS});var Gr=g((hfe,TD)=>{"use strict";var j4=Xb();TD.exports={searchByConditions:Z4,searchByHash:e3,searchByValue:t3,search:r3};var TS=Dn(),{transformReq:gS}=z(),X4=SD();async function Z4(e){return gS(e),TS.searchByConditions(e)}a(Z4,"searchByConditions");async function e3(e){gS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of TS.searchByHash(e))r&&t.push(r);return t}a(e3,"searchByHash");async function t3(e){gS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of TS.searchByValue(e))t.push(r);return t}a(t3,"searchByValue");function r3(e,t){try{let r=new j4(e);r.validate(),new X4(r.statement,r.attributes).search().then(s=>{t(null,s)}).catch(s=>{t(s,null)})}catch(r){return t(r)}}a(r3,"search")});var Nd=g((pfe,gD)=>{"use strict";var n3=Dn();gD.exports={writeTransaction:s3};function s3(e,t,r){return n3.writeTransaction(e,t,r)}a(s3,"writeTransaction")});var bD=g((gfe,OD)=>{"use strict";var i3=Gr(),o3=ys(),RD=$(),a3=qr(),Tfe=Nd(),c3=require("clone"),AS=require("alasql"),u3=bd(),AD=require("util"),l3=AD.promisify(o3.getTableSchema),_3=AD.promisify(i3.search),d3=P(),RS=z();u3(AS);OD.exports={update:E3};var f3="There was a problem performing this update. Please check the logs and try again.";async function E3({statement:e,hdb_user:t}){let r=await l3(e.table.databaseid,e.table.tableid),n=h3(e.columns);RS.backtickASTSchemaItems(e);let{table:s,where:i}=e,o=c3(s),c=RS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${c}`,_=AS.parse(u).statements[0],l=await _3(_),d=m3(n,l);return p3(o,d,t)}a(E3,"update");function h3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=AS.compile(`SELECT ${r.expression.toString()} AS [${d3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw RD.error(t),new Error(f3)}}a(h3,"createUpdateRecord");function m3(e,t){return RS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(m3,"buildUpdateRecords");async function p3(e,t,r){let n={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},s=await a3.update(n);try{delete s.new_attributes,delete s.txn_time}catch(i){RD.error(`Error delete new_attributes from update response: ${i}`)}return s}a(p3,"updateRecords")});var ND=g((bfe,yD)=>{var S3=require("alasql"),T3=Gr(),g3=$(),R3=Dn(),bS=require("util"),OS=z(),A3=P(),O3=ys(),Afe=Nd(),Ofe=qr(),b3="record",y3="successfully deleted",N3=bS.callbackify(D3),I3=bS.promisify(T3.search),w3=bS.promisify(O3.getTableSchema);yD.exports={convertDelete:N3};function C3(e){return`${e.deleted_hashes.length} ${b3}${e.deleted_hashes.length===1?"":"s"} ${y3}`}a(C3,"generateReturnMessage");async function D3({statement:e,hdb_user:t}){let r=await w3(e.table.databaseid,e.table.tableid);OS.backtickASTSchemaItems(e);let{table:n,where:s}=e,i=OS.isEmpty(s)?"":` WHERE ${s.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${i}`,c=S3.parse(o).statements[0],u={operation:A3.OPERATIONS_ENUM.DELETE,schema:n.databaseid_orig,table:n.tableid_orig,hdb_user:t};try{u.records=await I3(c);let _=await R3.deleteRecords(u);return OS.isEmptyOrZeroLength(_.message)&&(_.message=C3(_)),delete _.txn_time,_}catch(_){throw g3.error(_),_.hdb_code?_.message:_}}a(D3,"convertDelete")});var LD=g((Nfe,DD)=>{"use strict";var L3=bs(),{hdb_errors:ID}=se(),{getDatabases:wD}=(Ae(),ie(ke));DD.exports={checkSchemaExists:CD,checkSchemaTableExists:M3,schema_describe:L3};async function CD(e){if(!wD()[e])return ID.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(CD,"checkSchemaExists");async function M3(e,t){let r=await CD(e);if(r)return r;if(!wD()[e][t])return ID.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M3,"checkSchemaTableExists")});var du=g((wfe,P3)=>{P3.exports={name:"harperdb",version:"4.3.28",description:"HarperDB is a distributed database, caching service, streaming broker, and application development platform focused on performance and ease of use.",keywords:["database","nosql","api","distributed","broker","mqtt","real-time","enterprise","Fastify","NATS","HarperDB","Harper","clustering","replication","REST","WebSockets","decentralized","server-sent events","document store"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.7","nats-server":"2.10.11"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:resources && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:bin && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"pm2 kill && rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:resources && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:bin && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:resources":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/resources/**/*.js' --config '../unitTests/.mocharc.json'","test:bin":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/bin/**/*.js' --config '../unitTests/.mocharc.json'","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"pm2 kill && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.635.0","@aws-sdk/lib-storage":"3.635.0","@endo/static-module-record":"^1.0.4","@fastify/autoload":"5.7.1","@fastify/compress":"~6.5.0","@fastify/cors":"~8.5.0","@fastify/static":"~6.12.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"4.1.10","cbor-x":"1.5.8",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.2",fastify:"~4.26.2","fastify-plugin":"~4.5.1","fs-extra":"11.2.0",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.12.2","json-bigint-fixes":"1.1.0",json2csv:"5.0.7",jsonata:"1.8.7",jsonwebtoken:"9.0.2",lmdb:"3.1.3",lodash:"4.17.21",mathjs:"11.12.0",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.30.1","mqtt-packet":"~8.2.1",msgpackr:"1.10.1",nats:"2.19.0",needle:"3.3.1","node-stream-zip":"1.15.0","node-unix-socket":"0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.5.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.16.0",pm2:"5.4.1",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0","serve-static":"1.15.0",ses:"1.1.0","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.22.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"8.17.1",yaml:"2.4.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"1.6.8",chai:"4.4.1","chai-integer":"0.1.0",esbuild:"^0.20.2",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.3.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.8",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"1.22.11","newman-reporter-teamcity":"0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^5.4.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var pu={};Fe(pu,{addAnalyticsListener:()=>mu,recordAction:()=>Sr,recordActionBinary:()=>Wr,setAnalyticsEnabled:()=>U3});function U3(e){qD=e}function Sr(e,t,r,n,s){if(!qD)return;let i=t+(r?"-"+r:"");n!==void 0&&(i+="-"+n),s!==void 0&&(i+="-"+s);let o=Cd.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let _=c;o.values=c=new Float32Array(u*2),c.set(_),c.index=u+1}c[u]=e,o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else if(typeof e=="function")o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else if(typeof e=="function")o={},o.count=1,o.callback=e;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:n,type:s},Cd.set(i,o)}Id||v3()}function Wr(e,t,r,n,s){Sr(!!e,t,r,n,s)}function mu(e){VD.push(e)}function v3(){Id=performance.now(),setTimeout(async()=>{let e=performance.now()-Id;Id=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[s,i]of Cd){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,_=[],l;for(let d of $D){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;if(f===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.count+=h}else _.push(h>1?{value:f,count:h}:f),l=f;u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:_,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 YD()}let n=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,byThread:!0,...n});for(let s of VD)s(t);Cd=new Map,oo.parentPort?oo.parentPort.postMessage({type:kD,report:r}):QD({report:r})},FD).unref()}async function B3(e,t=6e4){let r=IS(),n=KD(),s=new Promise(p=>{let S=performance.now();setImmediate(()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high event queue latency on the main thread of "+Math.round(T-S)+"ms"),S=performance.now()}),n.primaryStore.prefetch([1],()=>{let T=performance.now();T-S>5e3&&(0,fu.warn)("Unusually high task queue latency on the main thread of "+Math.round(T-S)+"ms"),p(T-S)})}),i;for(let p of n.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(p.value?.time){i=p.value.time;break}if(Date.now()-t<i)return;let o,c=new Map,u=new Map,_=[],l;for(let{key:p,value:S}of r.primaryStore.getRange({start:i||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(o){if(p>o+t)break}else o=p;l=p;let{metrics:T,threadId:R}=S;for(let b of T||[]){let{path:I,method:B,type:U,metric:F,count:M,total:Q,distribution:J,threads:j,...oe}=b;M||(M=1);let ue=F+(I?"-"+I:"");B!==void 0&&(ue+="-"+B),U!==void 0&&(ue+="-"+U);let le=c.get(ue);if(le){if(le.threads){let Ne=le.threads[R];if(Ne)le=Ne;else{le.threads[R]=Object.assign({},oe);continue}}le.count||(le.count=1);let Be=le.count;for(let Ne in oe){let xe=oe[Ne];typeof xe=="number"&&(le[Ne]=(le[Ne]*Be+xe*M)/(Be+M))}le.count+=M,Q>=0&&(le.total+=Q,le.ratio=le.total/le.count)}else le=Object.assign({period:t},b),delete le.distribution,c.set(ue,le),le.byThread&&(le.threads=[],le.threads[R]=Object.assign({},oe),_.push(le));if(J){J=J.map(Ne=>typeof Ne=="number"?{value:Ne,count:1}:Ne);let Be=u.get(ue);Be?Be.push(...J):u.set(ue,J)}}await YD()}for(let p of _){let{path:S,method:T,type:R,metric:b,count:I,total:B,distribution:U,threads:F,...M}=p;F=F.filter(Q=>Q);for(let Q in M){if(typeof p[Q]!="number")continue;let J=0;for(let j of F){let oe=j[Q];typeof oe=="number"&&(J+=oe)}p[Q]=J}p.count=F.length,delete p.threads,delete p.byThread}for(let[p,S]of u){let T=c.get(p);S.sort((Ne,xe)=>Ne.value>xe.value?1:-1);let R=T.count-1,b=[],I=0,B=0,U;for(let Ne of $D){let xe=R*Ne;for(;I<xe;)U=S[B++],I+=U.count,B===1&&I--;let n_=S[B>1?B-2:0];U||(U=S[0]),b.push(U.value-(U.value-n_.value)*(I-xe)/U.count)}let[F,M,Q,J,j,oe,ue,le,Be]=b;Object.assign(T,{p1:F,p10:M,p25:Q,median:J,p75:j,p90:oe,p95:ue,p99:le,p999:Be})}let d;for(let[p,S]of c)S.id=(0,wd.getNextMonotonicTime)(),S.time=l,n.primaryStore.put(S.id,S,{append:!0}).then(T=>{T||n.primaryStore.put(S.id,S)}),d=!0;let E=Date.now(),{idle:f,active:h}=performance.eventLoopUtilization();if(d||h*10>f){let p=(0,wd.getNextMonotonicTime)(),S={id:p,metric:"main-thread-utilization",idle:f-MD,active:h-PD,taskQueueLatency:await s,time:E,...process.memoryUsage()};n.primaryStore.put(p,S,{append:!0}).then(T=>{T||n.primaryStore.put(p,S)})}MD=f,PD=h}async function UD(e,t){let r=Date.now()-t;for(let n of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(n)}function IS(){return vD||(vD=Et({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function KD(){return BD||(BD=Et({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function G3(){WD=!0;let e=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await B3(FD,e),await UD(IS(),x3),await UD(KD(),H3)},Math.min(e/2,2147483647)).unref()}function QD(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let n of r.metrics)n.metric==="bytes-sent"&&(xD+=n.mean*n.count);r.totalBytesProcessed=xD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(HD.get(t))}),HD.set(t,t.performance.eventLoopUtilization())),r.id=(0,wd.getNextMonotonicTime)(),IS().primaryStore.put(r.id,r),WD||G3(),q3&&(zD=k3(r))}async function k3(e){if(await zD,!fi){let r=(0,Eu.dirname)((0,fu.getLogFilePath)());try{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"r+")}catch{fi=await(0,yS.open)((0,Eu.join)(r,"analytics.log"),"w+")}}let t=(await fi.stat()).size;if(t>F3){let r=Buffer.alloc(t);await fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await fi.write(r,{position:0}),await fi.truncate(r.length),t=r.length}await fi.write(JSON.stringify(e)+`
|
|
8
10
|
`,t)}var oo,GD,fu,Eu,yS,wd,hu,NS,Cd,qD,Id,FD,kD,VD,$D,MD,PD,YD,x3,H3,vD,BD,WD,xD,HD,q3,zD,fi,F3,Ds=Re(()=>{oo=require("worker_threads"),GD=H(Qe());Ae();fu=H($()),Eu=require("path"),yS=require("fs/promises"),wd=H(vr()),hu=H(ee()),NS=H(P());lr();(0,hu.initSync)();Cd=new Map,qD=(0,hu.get)(NS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(U3,"setAnalyticsEnabled");a(Sr,"recordAction");at.recordAnalytics=Sr;a(Wr,"recordActionBinary");Id=0,FD=1e3,kD="analytics-report",VD=[];a(mu,"addAnalyticsListener");$D=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(v3,"sendAnalytics");a(B3,"aggregation");MD=0,PD=0,YD=a(()=>new Promise(setImmediate),"rest");a(UD,"cleanup");x3=36e5,H3=31536e6;a(IS,"getRawAnalyticsTable");a(KD,"getAnalyticsTable");(0,GD.setChildListenerByType)(kD,QD);a(G3,"startScheduledTasks");xD=0,HD=new Map,q3=!1;a(QD,"recordAnalytics");F3=1e6;a(k3,"logAnalytics")});var MS=g((Ffe,aL)=>{"use strict";var{decode:V3}=require("msgpackr"),{isMainThread:Hfe,parentPort:Gfe,threadId:qfe}=require("worker_threads"),Md=ut(),_a=Ve(),DS=P(),nr=$(),CS=ee(),$3=P(),{onMessageByType:Y3}=Qe(),ZD=Os(),{recordAction:JD,recordActionBinary:K3}=(Ds(),ie(pu)),{publishToStream:W3}=Md,{ConsumerEvents:jD}=require("nats"),Q3=Gr(),{promisify:z3}=require("util"),eL=z3(setTimeout),Pd=1e4,Ud,Ld,J3,j3,tL,Su=new Map,da=new Map;aL.exports={initialize:rL,ingestConsumer:LS,setSubscription:X3,setIgnoreOrigin:tj,getDatabaseSubscriptions:ej,updateConsumer:nL};async function rL(){Y3(DS.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,async n=>{await nL(n)}),tL=!0,nr.notify("Initializing clustering ingest service.");let{connection:e,jsm:t,js:r}=await Md.getNATSReferences();Ud=e,Ld=e.info.server_name,J3=t,j3=r}a(rL,"initialize");async function nL(e){if(e.status==="start"){let{js:t,jsm:r}=await sL(e.node_domain_name);LS(e.stream_name,t,r,e.node_domain_name)}else if(e.status==="stop"){let t=Su.get(e.stream_name+e.node_domain_name);t&&(nr.notify("Closing ingest consumer for node:",e.node_domain_name,"stream:",e.stream_name),await t.close?.(),Su.set(e.stream_name+e.node_domain_name,"close")),da.get(e.node_domain_name)==="failed"&&da.set(e.node_domain_name,"close")}}a(nL,"updateConsumer");var vd=new Map;function X3(e,t,r){let n=vd.get(e);n||vd.set(e,n=new Map),n.set(t,r),tL||rL().then(Z3)}a(X3,"setSubscription");async function Z3(){let e=await Q3.searchByValue({database:"system",table:"hdb_nodes",search_attribute:"name",search_value:"*"});for await(let t of e){let r=t.name+_a.SERVER_SUFFIX.LEAF,n,s;for(let i of t.subscriptions)if(i.subscribe===!0){if(!n&&({js:n,jsm:s}=await sL(r),!n))break;let{schema:o,table:c}=i,u=ZD.createNatsTableStreamName(o,c);LS(u,n,s,r)}}}a(Z3,"accessConsumers");async function sL(e){let t,r,n=1;for(;!r;)try{t=await Ud.jetstream({domain:e}),r=await Ud.jetstreamManager({domain:e,checkAPI:!1})}catch(s){if(da.get(e)==="close")break;da.set(e,"failed"),n%10===1&&nr.warn("Nats ingest attempting to connect to:",e,"Nats error:",s.message);let i=n++*100<Pd?n++*100:Pd;await eL(i)}return{js:t,jsm:r}}a(sL,"connectToRemoteJS");function ej(){return vd}a(ej,"getDatabaseSubscriptions");var iL;function tj(e){iL=e}a(tj,"setIgnoreOrigin");var oL=100,XD=new Array(oL),Dd=0;async function LS(e,t,r,n){let{connection:s}=await Md.getNATSReferences();Ud=s,Ld=s.info.server_name;let i,o=1;for(;!i;)try{i=await t.consumers.get(e,Ld),nr.notify("Initializing ingest consumer for node:",n,"stream:",e)}catch(_){if(da.get(n)==="close")break;o%10===1&&nr.warn("Nats ingest error getting consumer:",n,"stream:",e,"Nats error:",_.message),_.code==="404"&&(nr.notify("Nats ingest creating consumer for node:",n,"stream:",e),i=await Md.createConsumer(r,e,Ld,new Date(Date.now()).toISOString()));let l=o++*100<Pd?o++*100:Pd;await eL(l)}let c=!1,u;for(;!c;){if(Su.get(e+n)==="close"||da.get(n)==="close"){Su.delete(e+n),c=!0;continue}u=await i.consume({max_messages:CS.get(DS.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXCONSUMEMSGS)??100,bind:!0}),Su.set(e+n,u);let _=!1;(async()=>{for await(let l of await u.status())if(l.type===jD.ConsumerDeleted&&(await u.close(),c=!0),l.type===jD.HeartbeatsMissed){let d=l.data;nr.trace(`${d} clustering ingest consumer heartbeats missed, node: ${n} stream: ${u.consumer.stream}`),d===100&&(nr.warn(`Restarting clustering ingest consumer due to missed heartbeat threshold being met, node: ${n} stream: ${u.consumer.stream}`),u.stop(),_=!0)}})();try{for await(let l of u)await XD[Dd],XD[Dd]=rj(l).catch(d=>{nr.error(d)}),++Dd>=oL&&(Dd=0)}catch(l){l.message==="consumer deleted"?(nr.notify("Nats consumer deleted, closing messages for node:",n,"stream:",u.consumer.stream),await u.close(),c=!0):nr.error("Error consuming clustering ingest, restarting consumer",l)}}}a(LS,"ingestConsumer");async function rj(e){let t=V3(e.data);JD(e.data.length,"bytes-received",e.subject,t.operation,"ingest"),nr.trace("Nats message processor message size:",e?.msg?._msg?.size,"bytes");let r=e.headers,n=!1,s=CS.get(DS.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(_a.MSG_HEADERS.TRANSACTED_NODES)&&r.values(_a.MSG_HEADERS.TRANSACTED_NODES).indexOf(s)>-1&&(n=!0);let i=r.get(_a.MSG_HEADERS.ORIGIN);if(n||(n=i===s&&!iL),K3(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}r.append(_a.MSG_HEADERS.TRANSACTED_NODES,s);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:E,expiresAt:f}=t;nr.trace("processing message:",o,c,_,(l?"records: "+l.map(B=>B?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),nr.trace(`messageProcessor nats msg id: ${e.headers.get(_a.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let p=new Promise(B=>h=B),{timestamp:S,user:T,node_name:R}=E||{},b=vd.get(c)?.get(_);if(!b)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,t.onCommit=h,b.send(t);else if(l.length===1&&!u)b.send({type:wS(o),value:l[0],id:d?.[0],expiresAt:f,timestamp:S,table:_,onCommit:h,user:T,nodeName:R});else{let B=l.map((U,F)=>({type:wS(o),value:U,expiresAt:f,id:d?.[F],table:_}));for(;u;)B.push({type:wS(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;b.send({type:"transaction",writes:B,table:_,timestamp:S,onCommit:h,user:T,nodeName:R})}CS.get($3.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&W3(e.subject.split(".").slice(0,-1).join("."),ZD.createNatsTableStreamName(c,_),e.headers,e.data),await p;let I=Date.now()-S;S&&JD(I,"replication-latency",e.subject,o,"ingest")}catch(o){nr.error(o)}e.ack()}a(rj,"messageProcessor");function wS(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(wS,"convertOperation")});var ut=g((Qfe,bL)=>{"use strict";var xt=ee();xt.initSync();var nj=require("fs-extra"),sj=require("semver"),Ru=require("path"),{monotonicFactory:ij}=require("ulidx"),uL=ij(),oj=require("util"),lL=require("child_process"),aj=oj.promisify(lL.exec),cj=lL.spawn,Kt=Ve(),Ie=P(),Bd=z(),xn=$(),xd=Os(),uj=Nd(),Tu=Er(),{broadcast:lj,onMessageByType:_j,getWorkerIndex:dj}=Qe(),{isMainThread:_L}=require("worker_threads"),{Encoder:fj,decode:BS}=require("msgpackr"),dL=new fj,{isEmpty:lo}=Bd,fL=_n(),Vfe=48*36e11;_L&&_j(Ie.ITC_EVENT_TYPES.RESTART,()=>{Tr=void 0,uo=void 0});var{connect:Ej,StorageType:hj,RetentionPolicy:mj,AckPolicy:xS,DeliverPolicy:HS,DiscardPolicy:pj,NatsConnection:$fe,JetStreamManager:Yfe,JetStreamClient:Kfe,StringCodec:Wfe,JSONCodec:Sj,createInbox:GS,headers:Tj,ErrorCode:cL}=require("nats"),{PACKAGE_ROOT:gj}=P(),Rj=du(),{recordAction:Aj}=(Ds(),ie(pu)),EL=Sj(),Oj="clustering",bj=Rj.engines[Kt.NATS_SERVER_NAME],yj=Ru.join(gj,"dependencies"),vS=Ru.join(yj,`${process.platform}-${process.arch}`,Kt.NATS_BINARY_NAME),PS,US,gu,ao,co;bL.exports={runCommand:hL,checkNATSServerInstalled:Nj,createConnection:qS,getConnection:Au,getJetStreamManager:Ou,getJetStream:pL,getNATSReferences:os,getServerList:wj,createLocalStream:FS,listStreams:SL,deleteLocalStream:Cj,getServerConfig:fa,listRemoteStreams:Dj,viewStream:Lj,viewStreamIterator:Mj,publishToStream:Pj,request:Bj,reloadNATS:kS,reloadNATSHub:xj,reloadNATSLeaf:Hj,extractServerName:vj,requestErrorHandler:Gj,createLocalTableStream:AL,createTableStreams:kj,purgeTableStream:OL,purgeSchemaTableStreams:Vj,getStreamInfo:$j,updateLocalStreams:Kj,closeConnection:Ij,getJsmServerName:Hd,addNatsMsgHeader:TL,clearClientCache:mL,updateRemoteConsumer:qj,createConsumer:gL,updateConsumerIterator:Fj};async function hL(e,t=void 0){let{stdout:r,stderr:n}=await aj(e,{cwd:t});if(n)throw new Error(n.replace(`
|
|
9
11
|
`,""));return r.replace(`
|
|
10
|
-
`,"")}a(hL,"runCommand");async function Nj(){try{await nj.access(vS)}catch{return!1}let e=await hL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return sj.eq(t,bj)}a(Nj,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await Ej({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),mL()}),i}a(qS,"createConnection");function mL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(mL,"clearClientCache");async function Ij(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(Ij,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function pL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(pL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await pL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function wj(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=EL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(wj,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:hj.File,retention:mj.Limits,subjects:t,discard:pj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function SL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SL,"listStreams");async function Cj(e){let{jsm:t}=await os();await t.streams.delete(e)}a(Cj,"deleteLocalStream");async function Dj(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Dj,"listRemoteStreams");async function Lj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Lj,"viewStream");async function*Mj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Mj,"viewStreamIterator");async function Pj(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),Aj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Pj,"publishToStream");function TL(e,t){t===void 0&&(t=Tj());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(TL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),Oj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function gL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:xS.Explicit,durable_name:r,deliver_policy:HS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gL,"createConsumer");async function Uj(e,t,r){await e.consumers.delete(t,r)}a(Uj,"removeConsumer");function vj(e){return e.split(".")[1]}a(vj,"extractServerName");async function Bj(e,t,r=6e4,n=GS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=dL.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(Bj,"request");function kS(e){return new Promise(async(t,r)=>{let n=cj(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function xj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(xj,"reloadNATSHub");async function Hj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(Hj,"reloadNATSLeaf");function Gj(e,t,r){let n;switch(e.code){case cL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Gj,"requestErrorHandler");async function qj(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await Qj(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RL(async()=>{if(e.subscribe===!0)await gL(s,c,n.info.server_name,u);else try{await Uj(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(qj,"updateRemoteConsumer");async function Fj(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!_L&&dj()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await lj(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(Fj,"updateConsumerIterator");function RL(e){return uj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=Yj(e,t,n);await FS(r,[s])}a(AL,"createLocalTableStream");async function kj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(kj,"createTableStreams");async function OL(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(OL,"purgeTableStream");async function Vj(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a(Vj,"purgeSchemaTableStreams");async function $j(e){return(await Ou()).streams.info(e)}a($j,"getStreamInfo");function Yj(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Yj,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function Kj(){let e=await Ou(),t=await Hd(),r=await SL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Wj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(Kj,"updateLocalStreams");function Wj(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Wj,"updateStreamLimits");async function Qj(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Qj,"connectToRemoteJS")});var bu=g((jfe,wL)=>{"use strict";var Ea=H_(),ha=LD(),zj=$(),Jj=require("uuid").v4,Jfe=require("clone"),qd=Ns(),ma=P(),jj=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:Xj}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Rr}=Xj,{SchemaEventMsg:Fd}=Pn(),yL=ut(),{getDatabases:Zj}=(Ae(),ie(ke)),{transformReq:pa}=z();wL.exports={createSchema:eX,createSchemaStructure:NL,createTable:tX,createTableStructure:IL,createAttribute:oX,dropSchema:rX,dropTable:nX,dropAttribute:sX,getBackup:aX};async function eX(e){let t=await NL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(eX,"createSchema");async function NL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(NL,"createSchemaStructure");async function tX(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IL(e)}a(tX,"createTable");async function IL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Jj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IL,"createTableStructure");async function rX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await yL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(rX,"dropSchema");async function nX(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await yL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nX,"dropTable");async function sX(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),iX(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw zj.error(`Got an error deleting attribute ${jj.inspect(e)}.`),n}}a(sX,"dropAttribute");function iX(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(iX,"dropAttributeFromGlobal");async function oX(e){pa(e);let t=Zj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oX,"createAttribute");function aX(e){return Ei.getBackup(e)}a(aX,"getBackup")});var DL=g((Zfe,CL)=>{"use strict";var{OPERATIONS_ENUM:cX}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=VS});var $S=g((rEe,vL)=>{"use strict";var uX=Dn(),tEe=DL(),kd=z(),Vd=P(),lX=ee(),{handleHDBError:LL,hdb_errors:_X}=se(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:PL}=_X,dX=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=fX;async function fX(e){if(kd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!lX.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,UL,PL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,UL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,PL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&dX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await uX.readAuditLog(e)}a(fX,"readAuditLog")});var xL=g((sEe,BL)=>{"use strict";var{OPERATIONS_ENUM:EX}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=EX.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=YS});var qL=g((cEe,GL)=>{"use strict";var hX=Dn(),oEe=xL(),KS=z(),mX=P(),aEe=ee(),{handleHDBError:pX,hdb_errors:SX}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:TX}=SX;GL.exports=gX;async function gX(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw pX(new Error,t,TX.NOT_FOUND,mX.LOG_LEVELS.ERROR,t,!0);return await hX.getBackup(read_audit_log_object)}a(gX,"getBackup")});var KL=g((lEe,YL)=>{var hi=require("validate.js"),kL=Xe(),Sa=P(),{handleHDBError:RX,hdb_errors:AX}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:OX}=AX,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bX={STRUCTURE_USER:"structure_user"},FL=Object.values(Sa.ROLE_TYPES_ENUM),yX="attribute_permissions",NX="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,IX=[yX,...Object.values(Ta)],VL=[Ta.READ,Ta.INSERT,Ta.UPDATE],wX=[NX,...VL];function CX(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(CX,"addRoleValidation");function DX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(DX,"alterRoleValidation");function LX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(LX,"dropRoleValidation");var MX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)MX.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=PX(e);o&&At(o,r),FL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FL.indexOf(o)<0){if(o===bX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{IX.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!wX.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return UX(r)}a($L,"customValidate");YL.exports={addRoleValidation:CX,alterRoleValidation:DX,dropRoleValidation:LX};function PX(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.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 mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(PX,"validateNoSUPerms");function UX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return RX(new Error,n,OX.BAD_REQUEST)}else return null}a(UX,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((dEe,JL)=>{"use strict";var WL=qr(),QL=Gr(),vX=ci(),zS=KL(),JS=Ns(),BX=require("uuid").v4,xX=require("util"),$d=P(),HX=z(),jS=QL.searchByValue,GX=QL.searchByHash,qX=xX.promisify(vX.delete),FX=rs(),kX=oa(),{hdb_errors:VX,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:yu}=VX,{UserEventMsg:XS}=Pn();JL.exports={addRole:$X,alterRole:YX,dropRole:KX,listRoles:WX};function QS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(QS,"scrubRoleDetails");async function $X(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(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 jS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,zL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=BX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),JS.signalUserChange(new XS(process.pid)),e=QS(e),e}a($X,"addRole");async function YX(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new XS(process.pid)),e}a(YX,"alterRole");async function KX(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new kX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await GX(r));if(n.length===0)throw _o(new Error,zL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new FX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jS(s)),o=!1;if(HX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qX(c),JS.signalUserChange(new XS(process.pid)),`${n[0].role} successfully deleted`}a(KX,"dropRole");async function WX(){return jS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(WX,"listRoles")});var eM=g((EEe,ZL)=>{"use strict";var QX=ee(),mi=require("joi"),zX=Xe(),jL=require("moment"),JX=require("fs-extra"),eT=require("path"),jX=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),XX="YYYY-MM-DD hh:mm:ss",ZX=eT.resolve(__dirname,"../logs");ZL.exports=function(e){return zX.validateBySchema(e,eZ)};var eZ=mi.object({from:mi.custom(XL),until:mi.custom(XL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(tZ)});function XL(e,t){if(jL(e,jL.ISO_8601).format(XX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XL,"validateDatetime");function tZ(e,t){if(jX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=QX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(ZX,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return JX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tZ,"validateReadLogPath")});var rT=g((mEe,rM)=>{"use strict";var Yd=P(),rZ=$(),nZ=ee(),sZ=eM(),tT=require("path"),tM=require("fs-extra"),{once:iZ}=require("events"),{handleHDBError:oZ,hdb_errors:aZ}=se(),{PACKAGE_ROOT:cZ}=P(),uZ=tT.join(cZ,"logs"),lZ=1e3,_Z=200;rM.exports=dZ;async function dZ(e){let t=sZ(e);if(t)throw oZ(t,t.message,aZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?tT.join(uZ,Yd.LOG_NAMES.INSTALL):tT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?lZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*_Z,0));let S=tM.createReadStream(s,{start:p});S.on("error",U=>{rZ.error(U)});let T=0,R=[],b="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,j,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),I={timestamp:j,thread:le,level:Be,tags:ue,message:""},M=Q.index+J.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,R),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,R),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await iZ(S,"close"),R}a(dZ,"readLog");function pi(e,t,r){t==="desc"?fZ(e,r):t==="asc"?EZ(e,r):r.push(e)}a(pi,"pushLineToResult");function fZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(fZ,"insertDescending");function EZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(EZ,"insertAscending")});var Kd=g((REe,oM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:nM,date:hZ}=nT.types(),mZ=Xe(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=jn(),pZ=P(),SZ=Ve(),sM=ee();sM.initSync();var TZ=Iu.invalid(sM.get(pZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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).required(),iM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:TZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:nM.required(),publish:nM.required().custom(RZ),start_time:hZ.iso()}).min(1).required()};function gZ(e){return mZ.validateBySchema(e,nT.object(iM))}a(gZ,"addUpdateNodeValidator");function RZ(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(RZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:gZ,validation_schema:iM}});var cM=g((OEe,aM)=>{var AZ=Xe(),OZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return AZ.validateObject(e,OZ)}});var Wd=g((bEe,uM)=>{"use strict";var bZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=sT});var _M=g((NEe,lM)=>{"use strict";var yZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:yZ,JWTRSAKeys:oT}});var Du=g((wEe,hM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:NZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=NZ,wu=$(),dM=z_(),_T=_n(),IZ=qr().update,wZ=Wd(),CZ=Ns(),{UserEventMsg:DZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:LZ,JWTRSAKeys:MZ,TOKEN_TYPE_ENUM:Qd}=_M(),PZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",lT;hM.exports={createTokens:vZ,validateOperationToken:xZ,refreshOperationToken:BZ,validateRefreshToken:EM};async function vZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await fM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UZ,algorithm:zd,subject:Qd.REFRESH}),u=dM.hash(c),_=new wZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await IZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return CZ.signalUserChange(new DZ(process.pid)),new LZ(o,c)}a(vZ,"createTokens");async function fM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:PZ,algorithm:zd,subject:Qd.OPERATION})}a(fM,"signOperationToken");async function Jd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new MZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(Jd,"getJWTRSAKeys");async function BZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Jd(),r=await Cu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(BZ,"refreshOperationToken");async function xZ(e){try{let t=await Jd(),r=await Cu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(xZ,"validateOperationToken");async function EM(e){let t;try{let r=await Jd(),n=await Cu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var dT=g((LEe,SM)=>{"use strict";var HZ=cM(),ga=require("passport"),GZ=require("passport-local").Strategy,qZ=require("passport-http").BasicStrategy,FZ=require("util"),kZ=_n(),pM=FZ.callbackify(kZ.findAndValidateUser),DEe=Ur(),VZ=P(),mM=Du();ga.use(new GZ(function(e,t,r){pM(e,t,r)}));ga.use(new qZ(function(e,t,r){pM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function $Z(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===VZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a($Z,"authorize");function YZ(e,t){let r=HZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(YZ,"checkPermissions");SM.exports={authorize:$Z,checkPermissions:YZ}});var Ti=g((PEe,TM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:fT,NodeSubscription:ET}});var RM=g((vEe,gM)=>{"use strict";var KZ=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=KZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=hT});var Lu=g((xEe,AM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};AM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var bM=g((GEe,OM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OM.exports=ST});var IM=g(($Ee,NM)=>{"use strict";var WZ=bM(),FEe=ft(),yM=ze(),QZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=je(),{getDatabases:zZ}=(Ae(),ie(ke));NM.exports=JZ;async function JZ(e){let t=new WZ;try{let r=zZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await yM.environmentDataSize(schema_path,e.name),o=await yM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){QZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(JZ,"lmdbGetTableSize")});var CM=g((KEe,wM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};wM.exports=TT});var Ra=g((XEe,PM)=>{"use strict";var jZ=require("fs-extra"),XZ=require("path"),sr=require("systeminformation"),gi=$(),DM=ut(),QEe=Ve(),Xd=P(),ZZ=IM(),e5=bs(),{getThreadInfo:LM}=Qe(),DT=ee();DT.initSync();var t5=CM(),{openEnvironment:zEe}=ze(),{getSchemaPath:JEe}=je(),{database:jEe,databases:gT}=(Ae(),ie(ke)),jd;PM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:r5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...R}=await sr.currentLoad();return R.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=b;R.cpus.push(J)}),l.current_load=R,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await jZ.readFile(XZ.join(DT.get(Xd.CONFIG_PARAMS.ROOTPATH),Xd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Xd.NODE_ERROR_CODES.ENOENT)gi.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 gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(jd!==void 0)return jd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,jd=e,jd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await e5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ZZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function MM(){if(DT.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DM.getNATSReferences(),t=await DM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(MM,"getNatsStreamInfo");async function r5(e){let t=new t5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await LM(),t.replication=await MM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await LM();break;case"replication":t.replication=await MM();break;default:break}return t}a(r5,"systemInformation")});var ef=g((ehe,UM)=>{"use strict";UM.exports={version:n5,printVersion:s5};var Zd=du();function n5(){if(Zd)return Zd.version}a(n5,"version");function s5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(s5,"printVersion")});var fn=g((she,HM)=>{"use strict";var i5=qr(),LT=z(),o5=require("util"),Eo=P(),vM=ee();vM.initSync();var a5=dT(),BM=Gr(),{Node:rhe,NodeSubscription:nhe}=Ti(),c5=oa(),u5=RM(),{RemotePayloadObject:l5,RemotePayloadSubscription:_5}=Lu(),{handleHDBError:d5,hdb_errors:f5}=se(),{HTTP_STATUS_CODES:E5,HDB_ERROR_MSGS:h5}=f5,m5=rs(),p5=Ra(),S5=ef(),{getDatabases:T5}=(Ae(),ie(ke)),g5=o5.promisify(a5.authorize),R5=BM.searchByHash,A5=BM.searchByValue;HM.exports={authHeaderToUser:O5,isEmpty:b5,getNodeRecord:y5,upsertNodeRecord:N5,buildNodePayloads:I5,checkClusteringEnabled:w5,getAllNodeRecords:C5,getSystemInfo:D5,reverseSubscription:xM};async function O5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await g5(t,null),e}a(O5,"authHeaderToUser");function b5(e){return e==null}a(b5,"isEmpty");async function y5(e){let t=new c5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return R5(t)}a(y5,"getNodeRecord");async function N5(e){let t=new u5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return i5.upsert(t)}a(N5,"upsertNodeRecord");function xM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(xM,"reverseSubscription");function I5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=xM(c),f=T5()[u]?.[_],h=new _5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new l5(r,t,s,n)}a(I5,"buildNodePayloads");function w5(){if(!vM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw d5(new Error,h5.CLUSTERING_NOT_ENABLED,E5.BAD_REQUEST,void 0,void 0,!0)}a(w5,"checkClusteringEnabled");async function C5(){let e=new m5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await A5(e))}a(C5,"getAllNodeRecords");async function D5(){let e=await p5.getSystemInformation();return{hdb_version:S5.version(),node_version:e.node_version,platform:e.platform}}a(D5,"getSystemInfo")});var MT=g((ohe,KM)=>{"use strict";var tf=ut(),GM=z(),qM=Ve(),FM=P(),rf=$(),kM=bu(),L5=md(),{RemotePayloadObject:M5}=Lu(),{handleHDBError:VM,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:$M}=P5,{NodeSubscription:YM}=Ti();KM.exports=U5;async function U5(e,t){let r;try{r=await tf.request(`${t}.${qM.REQUEST_SUFFIX}`,new M5(FM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=GM.doesSchemaExist(u),l=n[u]!==void 0,d=c?GM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new L5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await tf.createLocalTableStream(u,c);let f=new YM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(U5,"reviewSubscriptions")});var af=g((che,zM)=>{"use strict";var{handleHDBError:nf,hdb_errors:v5}=se(),{HTTP_STATUS_CODES:sf}=v5,{addUpdateNodeValidator:B5}=Kd(),of=$(),QM=P(),WM=Ve(),x5=z(),Mu=ut(),Pu=fn(),H5=ee(),G5=MT(),{Node:q5,NodeSubscription:F5}=Ti(),{broadcast:k5}=Qe(),V5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y5=H5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=K5;async function K5(e,t=!1){of.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=B5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!x5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await G5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=V5,o;let c=Pu.buildNodePayloads(s,Y5,QM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new F5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new q5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),k5({type:"nats_update"}),i.length>0?o.message=$5:o.message=`Successfully added '${n}' to manifest`,o}a(K5,"addNode")});var vT=g((_he,XM)=>{"use strict";var{handleHDBError:PT,hdb_errors:W5}=se(),{HTTP_STATUS_CODES:UT}=W5,{addUpdateNodeValidator:Q5}=Kd(),Uu=$(),jM=P(),JM=Ve(),lhe=z(),vu=ut(),Bu=fn(),z5=ee(),{cloneDeep:J5}=require("lodash"),j5=MT(),{Node:X5,NodeSubscription:Z5}=Ti(),{broadcast:e8}=Qe(),t8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",r8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",n8=z5.get(jM.CONFIG_PARAMS.CLUSTERING_NODENAME);XM.exports=s8;async function s8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=Q5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=J5(s));let{added:i,skipped:o}=await j5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=t8,c;let u=Bu.buildNodePayloads(i,n8,jM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new X5(r,[],_.system_info)]),await i8(n[0],i,_.system_info),o.length>0?c.message=r8:c.message=`Successfully updated '${r}'`,c}a(s8,"updateNode");async function i8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Z5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),e8({type:"nats_update"})}a(i8,"updateNodeTable")});var nP=g((fhe,rP)=>{"use strict";var tP=require("joi"),{string:ZM}=tP.types(),o8=Xe(),eP=P(),a8=ee(),c8=Ve();rP.exports=u8;function u8(e){let t=ZM.invalid(a8.get(eP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(c8.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=tP.object({operation:ZM.valid(eP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return o8.validateBySchema(e,r)}a(u8,"removeNodeValidator")});var uf=g((hhe,cP)=>{"use strict";var{handleHDBError:sP,hdb_errors:l8}=se(),{HTTP_STATUS_CODES:iP}=l8,_8=nP(),xu=$(),oP=fn(),d8=z(),cf=P(),aP=Ve(),BT=ut(),f8=ee(),{RemotePayloadObject:E8}=Lu(),{NodeSubscription:h8}=Ti(),m8=aa(),p8=ci(),{broadcast:S8}=Qe(),T8=f8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports=g8;async function g8(e){xu.trace("removeNode called with:",e),oP.checkClusteringEnabled();let t=_8(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oP.getNodeRecord(r);if(d8.isEmptyOrZeroLength(n))throw sP(new Error,`Node '${r}' was not found.`,iP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new E8(cf.OPERATIONS_ENUM.REMOVE_NODE,T8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new h8(l.schema,l.table,!1,!1),r)}catch(d){xu.error(d)}}try{i=await BT.request(`${r}.${aP.REQUEST_SUFFIX}`,s),xu.trace("Remove node reply from remote node:",r,i)}catch(u){xu.error("removeNode received error from request:",u),o=!0}let c=new m8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await p8.deleteRecord(c),S8({type:"nats_update"}),i?.status===aP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(g8,"removeNode")});var _P=g((phe,lP)=>{"use strict";var uP=require("joi"),{string:R8,array:A8}=uP.types(),O8=Xe(),b8=Kd();lP.exports=y8;function y8(e){let t=uP.object({operation:R8.valid("configure_cluster").required(),connections:A8.items(b8.validation_schema).required()});return O8.validateBySchema(e,t)}a(y8,"configureClusterValidator")});var xT=g((The,mP)=>{"use strict";var N8=P(),lf=$(),I8=z(),w8=uf(),C8=af(),dP=fn(),D8=_P(),{handleHDBError:fP,hdb_errors:L8}=se(),{HTTP_STATUS_CODES:EP}=L8,M8="Configure cluster complete.",P8="Failed to configure the cluster. Check the logs for more details.",U8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mP.exports=v8;async function v8(e){lf.trace("configure cluster called with:",e),dP.checkClusteringEnabled();let t=D8(e);if(t)throw fP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=await dP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await hP(w8,{operation:N8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await hP(C8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(I8.isEmptyOrZeroLength(o))return{message:M8,connections:c};if(u)return{message:U8,failed_nodes:o,connections:c};throw fP(new Error,P8,EP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(v8,"configureCluster");async function hP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hP,"functionWrapper")});var gP=g((Rhe,TP)=>{"use strict";var Hu=require("joi"),B8=Xe(),{validateSchemaExists:pP,validateTableExists:x8,validateSchemaName:SP}=jn(),H8=Hu.object({operation:Hu.string().valid("purge_stream"),schema:Hu.string().custom(pP).custom(SP).optional(),database:Hu.string().custom(pP).custom(SP).optional(),table:Hu.string().custom(x8).required()});function G8(e){return B8.validateBySchema(e,H8)}a(G8,"purgeStreamValidator");TP.exports=G8});var HT=g((Ohe,RP)=>{"use strict";var{handleHDBError:q8,hdb_errors:F8}=se(),{HTTP_STATUS_CODES:k8}=F8,V8=gP(),$8=ut(),Y8=fn();RP.exports=K8;async function K8(e){e.schema=e.schema??e.database;let t=V8(e);if(t)throw q8(t,t.message,k8.BAD_REQUEST,void 0,void 0,!0);Y8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await $8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(K8,"purgeStream")});var FT=g((yhe,IP)=>{"use strict";var qT=fn(),W8=ut(),bP=ee(),_f=P(),ho=Ve(),Q8=z(),GT=$(),{RemotePayloadObject:z8}=Lu(),{ErrorCode:AP}=require("nats"),OP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),yP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);IP.exports={clusterStatus:J8,buildNodeStatus:NP};async function J8(){let e={node_name:yP,is_enabled:OP,connections:[]};if(!OP)return e;let t=await qT.getAllNodeRecords();if(Q8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NP(t[n],e.connections));return await Promise.allSettled(r),e}a(J8,"clusterStatus");async function NP(e,t){let r=e.name,n=new z8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,yP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await W8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===AP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===AP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new j8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NP,"buildNodeStatus");function j8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(j8,"NodeStatusObject")});var VT=g((Ihe,wP)=>{"use strict";var{handleHDBError:X8,hdb_errors:Z8}=se(),{HTTP_STATUS_CODES:e6}=Z8,t6=ut(),r6=fn(),kT=z(),df=require("joi"),n6=Xe(),s6=2e3,i6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});wP.exports=o6;async function o6(e){r6.checkClusteringEnabled();let t=n6.validateBySchema(e,i6);if(t)throw X8(t,t.message,e6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await t6.getServerList(r??s6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(o6,"clusterNetwork")});var MP=g((Che,LP)=>{"use strict";var $T=require("joi"),CP=Xe(),{route_constraints:DP}=op();LP.exports={setRoutesValidator:a6,deleteRoutesValidator:c6};function a6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:DP.required()});return CP.validateBySchema(e,t)}a(a6,"setRoutesValidator");function c6(e){let t=$T.object({routes:DP.required()});return CP.validateBySchema(e,t)}a(c6,"deleteRoutesValidator")});var KT=g((Lhe,BP)=>{"use strict";var mo=Er(),YT=z(),ff=P(),PP=MP(),{handleHDBError:UP,hdb_errors:u6}=se(),{HTTP_STATUS_CODES:vP}=u6,l6="cluster routes successfully set",_6="cluster routes successfully deleted";BP.exports={setRoutes:d6,getRoutes:f6,deleteRoutes:E6};function d6(e){let t=PP.setRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:l6,set:o,skipped:i}}a(d6,"setRoutes");function f6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(f6,"getRoutes");function E6(e){let t=PP.deleteRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:_6,deleted:i,skipped:o}}a(E6,"deleteRoutes")});var HP=g((Phe,xP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),Hn=$(),h6=z(),qu=P(),WT=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,p6(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=>qu.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=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=m6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function m6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(m6,"filterReadRestrictedAttrs");function p6(e,t,r,n,s){S6(e,t,r,n,s)}a(p6,"interpretAST");function Fu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function S6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?A6(e,t,r):e instanceof Gu.yy.Select?T6(e,t,r,n,s):e instanceof Gu.yy.Update?g6(e,t,r):e instanceof Gu.yy.Delete?R6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(S6,"getRecordAttributesAST");function T6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(h6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new po(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(T6,"getSelectAttributes");function g6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(g6,"getUpdateAttributes");function R6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(R6,"getDeleteAttributes");function A6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(A6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");xP.exports=WT});var jT=g((vhe,kP)=>{var Ef=Xi(),GP=require("chalk"),Qr=$(),qP=require("prompt"),{promisify:O6}=require("util"),zT=P(),b6=require("fs-extra"),y6=require("path"),N6=z(),I6=ef(),FP=ee();FP.initSync();var w6=require("moment"),C6=O6(qP.get),D6=y6.join(FP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);kP.exports={getFingerprint:M6,setLicense:L6,parseLicense:JT,register:P6,getRegistrationInfo:v6};async function L6(e){if(e&&e.key&&e.company){try{Qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qr.error(r),Qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L6,"setLicense");async function M6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qr.error(r),Qr.error(t),new Error(r)}return e}a(M6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(Qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qr.info("writing license to disk"),await b6.writeFile(D6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function P6(){let e=await U6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(P6,"register");async function U6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:GP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:GP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qP.start()}catch(n){Qr.error(n)}let r;try{r=await C6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U6,"promptForRegistration");async function v6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw Qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=I6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=w6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(v6,"getRegistrationInfo")});var $P=g((xhe,VP)=>{"use strict";var B6=Ve(),XT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+B6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};VP.exports=XT});var WP=g((Ghe,KP)=>{"use strict";var YP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+YP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+YP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};KP.exports=ZT});var zP=g((Fhe,QP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QP.exports=eg});var jP=g((Vhe,JP)=>{"use strict";var x6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+x6.SERVER_SUFFIX.ADMIN,this.password=r}};JP.exports=tg});var sg=g((Yhe,eU)=>{"use strict";var Aa=require("path"),pf=require("fs-extra"),H6=$P(),G6=WP(),q6=zP(),F6=jP(),rg=_n(),ba=z(),yr=Er(),mf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=mf,ya=$(),Vu=ee(),XP=Os(),ng=ut(),Oa="clustering",k6=1e4,ZP=50;eU.exports={generateNatsConfig:$6,removeNatsConfig:Y6,getHubConfigPath:V6};function V6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(V6,"getHubConfigPath");async function $6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],b=[];for(let[J,j]of p.entries())j.role.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(R.push(new F6(j.username,XP.decrypt(j.hash))),b.push(new q6(j.username,XP.decrypt(j.hash))));let I=[],{hub_routes:B}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new H6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,R,b);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new G6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],R,b,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a($6,"generateNatsConfig");async function hf(e){let t=Vu.get(e);return ba.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&Sf(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function Y6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<ZP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=ZP)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 _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(k6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await pf.writeFile(u,c),await pf.remove(u),ya.notify(e,"started.")}a(Y6,"removeNatsConfig")});var oU=g((Whe,iU)=>{"use strict";var zr=ee(),K6=Xi(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),tU=ee(),Tf=z(),Na="/dev/null",W6=Ls.join(gf,"launchServiceScripts"),rU=Ls.join(gf,"utility/scripts"),Q6=Ls.join(rU,pe.HDB_RESTART_SCRIPT),nU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function sU(){let t=K6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(sU,"generateMainServerConfig");var z6=9930;function J6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==z6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsHubServerConfig");var j6=9940;function X6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==j6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(X6,"generateNatsLeafServerConfig");function Z6(){zr.initSync();let e=Ls.join(zr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:W6,autorestart:!1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(Z6,"generateClusteringUpgradeV4ServiceConfig");function e9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:rU},script:Q6}}a(e9,"generateRestart");function t9(){return{apps:[sU()]}}a(t9,"generateAllServiceConfigs");iU.exports={generateAllServiceConfigs:t9,generateMainServerConfig:sU,generateRestart:e9,generateNatsHubServerConfig:J6,generateNatsLeafServerConfig:X6,generateClusteringUpgradeV4ServiceConfig:Z6}});var gU=g((Jhe,TU)=>{"use strict";var ve=P(),r9=z(),Ps=sg(),Rf=ut(),Ms=Ve(),Ri=oU(),Af=ee(),Ai=$(),n9=fn(),{startWorker:aU,onMessageFromWorkers:s9}=Qe(),i9=Ra(),zhe=require("util"),o9=require("child_process"),a9=require("fs"),{execFile:c9}=o9,we;TU.exports={enterPM2Mode:u9,start:Oi,stop:ig,reload:uU,restart:lU,list:og,describe:dU,connect:Us,kill:E9,startAllServices:h9,startService:ag,getUniqueServicesList:fU,restartAllServices:m9,isServiceRegistered:EU,reloadStopStart:hU,restartHdb:_U,deleteProcess:d9,startClusteringProcesses:pU,startClusteringThreads:SU,isHdbRestartRunning:f9,isClusteringRunning:S9,stopClustering:p9,reloadClustering:T9};var Yu=!1;s9(e=>{e.type==="restart"&&Af.initSync(!0)});function u9(){Yu=!0}a(u9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,l9=10,cU;function Oi(e,t=!1){if(Yu)return _9(e);let r=c9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!cU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l9&&(a9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{cU=!0,Nr&&(Nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Nr.push(r)}a(Oi,"start");function _9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function uU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(uU,"reload");function lU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(lU,"restart");function d9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d9,"deleteProcess");async function _U(){await Oi(Ri.generateRestart())}a(_U,"restartHdb");async function f9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(f9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function dU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(dU,"describe");function E9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(E9,"kill");async function h9(){try{await pU(),await SU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(h9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function fU(){try{let e=await og(),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 we?.disconnect(),e}}a(fU,"getUniqueServicesList");async function m9(e=[]){try{let t=!1,r=await fU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await lU(o))}t&&await hU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(m9,"restartAllServices");async function EU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await i9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(EU,"isServiceRegistered");async function hU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await dU(e),n=r9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await _U():await uU(e)}a(hU,"reloadStopStart");var mU;async function pU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(pU,"startClusteringProcesses");async function SU(){mU=aU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await n9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),aU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(SU,"startClusteringThreads");async function p9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await mU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(p9,"stopClustering");async function S9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await EU(t)===!1)return!1}return!0}a(S9,"isClusteringRunning");async function T9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(T9,"reloadClustering")});var IU={};Fe(IU,{compactOnStart:()=>g9,copyDb:()=>NU});async function g9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await RU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await NU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Of.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await RU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
12
|
+
`,"")}a(hL,"runCommand");async function Nj(){try{await nj.access(vS)}catch{return!1}let e=await hL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return sj.eq(t,bj)}a(Nj,"checkNATSServerInstalled");async function qS(e,t,r,n=!0,s="127.0.0.1"){if(!t&&!r){let o=await fL.getClusterUser();if(lo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}xn.trace("create nats connection called");let i=await Ej({name:s,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:n,timeout:2e5,tls:{keyFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:xt.get(Ie.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),xn.trace("create connection established a nats client connection with id",i?.info?.client_id),i.closed().then(o=>{o&&xn.error("Error with Nats client connection, connection closed",o),mL()}),i}a(qS,"createConnection");function mL(){Tr=void 0,ao=void 0,co=void 0,uo=void 0}a(mL,"clearClientCache");async function Ij(){Tr&&(await Tr.drain(),Tr=void 0,ao=void 0,co=void 0,uo=void 0)}a(Ij,"closeConnection");var Tr,uo;async function Au(){return uo||(uo=qS(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Tr=await uo),Tr||uo}a(Au,"getConnection");async function Ou(){if(ao)return ao;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ao=await Tr.jetstreamManager({domain:e,timeout:6e4}),ao}a(Ou,"getJetStreamManager");async function pL(){if(co)return co;lo(Tr)&&await Au();let{domain:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(lo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return co=Tr.jetstream({domain:e,timeout:6e4}),co}a(pL,"getJetStream");async function os(){let e=Tr||await Au(),t=ao||await Ou(),r=co||await pL();return{connection:e,jsm:t,js:r}}a(os,"getNATSReferences");async function wj(e){let t=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:n}=await fL.getClusterUser(),s=await qS(t,r,n),i=GS(),o=s.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=EL.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=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 Bd.async_set_timeout(e),await o.drain(),await s.close(),await _,c}a(wj,"getServerList");async function FS(e,t){let{jsm:r}=await os(),n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:hj.File,retention:mj.Limits,subjects:t,discard:pj.Old,max_msgs:s,max_bytes:i,max_age:n})}a(FS,"createLocalStream");async function SL(){let{jsm:e}=await os(),t=await e.streams.list().next(),r=[];return t.forEach(n=>{r.push(n)}),r}a(SL,"listStreams");async function Cj(e){let{jsm:t}=await os();await t.streams.delete(e)}a(Cj,"deleteLocalStream");async function Dj(e){let{connection:t}=await os(),r=[],n=GS(),s=t.subscribe(n),i=(async()=>{for await(let o of s)r.push(EL.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:n}),await t.flush(),await s.drain(),await i,r}a(Dj,"listRemoteStreams");async function Lj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let _=[];for await(let l of u){let d=BS(l.data),E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(E.origin=l.headers.get(Kt.MSG_HEADERS.ORIGIN)),_.push(E),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(Lj,"viewStream");async function*Mj(e,t=void 0,r=void 0){let{jsm:n,js:s}=await os(),i=uL(),o={durable_name:i,ack_policy:xS.Explicit};t&&(o.deliver_policy=HS.StartTime,o.opt_start_time=new Date(t).toISOString()),await n.consumers.add(e,o);let c=await s.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let _ of u){let l=BS(_.data);l[0]||(l=[l]);for(let d of l){let E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(E.origin=_.headers.get(Kt.MSG_HEADERS.ORIGIN)),yield E}if(_.ack(),_.info.pending===0)break}await c.delete()}a(Mj,"viewStreamIterator");async function Pj(e,t,r,n){xn.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,n.operation),r=TL(n,r);let{js:s}=await os(),i=await Hd(),o=`${e}.${i}`,c=n instanceof Uint8Array?n:dL.encode(n);try{xn.trace(`publishToStream publishing to subject: ${o}`),Aj(c.length,"bytes-sent",e,n.operation,"replication"),await s.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return RL(async()=>{try{await s.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){xn.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await FS(t,[o]),await s.publish(o,c,{headers:r})}else throw u}});throw u}}a(Pj,"publishToStream");function TL(e,t){t===void 0&&(t=Tj());let r=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Kt.MSG_HEADERS.ORIGIN)&&r&&t.append(Kt.MSG_HEADERS.ORIGIN,r),t}a(TL,"addNatsMsgHeader");function fa(e){e=e.toLowerCase();let t=Ru.join(xt.get(Ie.CONFIG_PARAMS.ROOTPATH),Oj);if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return lo(US)&&(US={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.HUB,config_file:Kt.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,Kt.PID_FILES.HUB),hdb_nats_path:t}),US;if(e===Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return lo(PS)&&(PS={port:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,config_file:Kt.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ie.CONFIG_PARAMS.CLUSTERING_NODENAME)+Kt.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,Kt.PID_FILES.LEAF),hdb_nats_path:t}),PS;xn.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fa,"getServerConfig");async function gL(e,t,r,n){try{await e.consumers.add(t,{ack_policy:xS.Explicit,durable_name:r,deliver_policy:HS.StartTime,opt_start_time:n})}catch(s){if(s.message!=="consumer already exists")throw s}}a(gL,"createConsumer");async function Uj(e,t,r){await e.consumers.delete(t,r)}a(Uj,"removeConsumer");function vj(e){return e.split(".")[1]}a(vj,"extractServerName");async function Bj(e,t,r=6e4,n=GS()){if(!Bd.isObject(t))throw new Error("data param must be an object");let s=dL.encode(t),{connection:i}=await os(),o={timeout:r};n&&(o.reply=n,o.noMux=!0);let c=await i.request(e,s,o);return BS(c.data)}a(Bj,"request");function kS(e){return new Promise(async(t,r)=>{let n=cj(vS,["--signal",`reload=${e}`],{cwd:__dirname}),s,i;n.on("error",o=>{r(o)}),n.stdout.on("data",o=>{i+=o.toString()}),n.stderr.on("data",o=>{s+=o.toString()}),n.stderr.on("close",o=>{s&&r(s),t(i)})})}a(kS,"reloadNATS");async function xj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await kS(e)}a(xj,"reloadNATSHub");async function Hj(){let{pid_file_path:e}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await kS(e)}a(Hj,"reloadNATSLeaf");function Gj(e,t,r){let n;switch(e.code){case cL.NoResponders:n=`Unable to ${t}, node '${r}' is not listening.`;break;case cL.Timeout:n=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:n=e.message;break}return n}a(Gj,"requestErrorHandler");async function qj(e,t){let r=t+Kt.SERVER_SUFFIX.LEAF,{connection:n}=await os(),{jsm:s}=await Qj(r),{schema:i,table:o}=e,c=xd.createNatsTableStreamName(i,o),u=e.start_time?e.start_time:new Date(Date.now()).toISOString();await RL(async()=>{if(e.subscribe===!0)await gL(s,c,n.info.server_name,u);else try{await Uj(s,c,n.info.server_name)}catch(_){xn.trace(_)}})}a(qj,"updateRemoteConsumer");async function Fj(e,t,r,n){let s=xd.createNatsTableStreamName(e,t),i=r+Kt.SERVER_SUFFIX.LEAF,o={type:Ie.ITC_EVENT_TYPES.NATS_CONSUMER_UPDATE,status:n,stream_name:s,node_domain_name:i};if(!_L&&dj()<xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)){let{updateConsumer:c}=MS();await c(o)}await lj(o),n==="stop"&&await Bd.async_set_timeout(1e3)}a(Fj,"updateConsumerIterator");function RL(e){return uj.writeTransaction(Ie.SYSTEM_SCHEMA_NAME,Ie.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(RL,"exclusiveLock");async function AL(e,t){let r=xd.createNatsTableStreamName(e,t),n=await Hd(),s=Yj(e,t,n);await FS(r,[s])}a(AL,"createLocalTableStream");async function kj(e){for(let t=0,r=e.length;t<r;t++){let n=e[t].schema,s=e[t].table;await AL(n,s)}}a(kj,"createTableStreams");async function OL(e,t,r=void 0){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let n=xd.createNatsTableStreamName(e,t),{domain:s}=fa(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await(await(await Au()).jetstreamManager({domain:s,timeout:24e4})).streams.purge(n,r)}catch(n){if(n.message==="stream not found")xn.warn(n);else throw n}}a(OL,"purgeTableStream");async function Vj(e,t){if(xt.get(Ie.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,n=t.length;r<n;r++)await OL(e,t[r])}a(Vj,"purgeSchemaTableStreams");async function $j(e){return(await Ou()).streams.info(e)}a($j,"getStreamInfo");function Yj(e,t,r){return`${Kt.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Yj,"createSubjectName");async function Hd(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(Hd,"getJsmServerName");async function Kj(){let e=await Ou(),t=await Hd(),r=await SL();for(let n of r){let s=n.config,i=s.subjects[0];if(!i)continue;let o=Wj(n),c=i.split(".");if(c[c.length-1]===t&&!o||s.name==="__HARPERDB_WORK_QUEUE__")continue;let _=i.split(".");_[_.length-1]=t;let l=_.join(".");xn.trace(`Updating stream subject name from: ${i} to: ${l}`),s.subjects[0]=l,await e.streams.update(s.name,s)}}a(Kj,"updateLocalStreams");function Wj(e){let{config:t}=e,r=!1,n=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);n=n===null?0:n*1e9;let s=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);s=s===null?-1:s;let i=xt.get(Ie.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,n!==t.max_age&&(t.max_age=n,r=!0),s!==t.max_bytes&&(t.max_bytes=s,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Wj,"updateStreamLimits");async function Qj(e){let t,r;try{t=await Tr.jetstream({domain:e}),r=await Tr.jetstreamManager({domain:e,checkAPI:!1})}catch(n){throw xn.error("Unable to connect to:",e),n}return{js:t,jsm:r}}a(Qj,"connectToRemoteJS")});var bu=g((jfe,wL)=>{"use strict";var Ea=H_(),ha=LD(),zj=$(),Jj=require("uuid").v4,Jfe=require("clone"),qd=Ns(),ma=P(),jj=require("util"),Ei=Dn(),{handleHDBError:gr,hdb_errors:Xj}=se(),{HDB_ERROR_MSGS:Gd,HTTP_STATUS_CODES:Rr}=Xj,{SchemaEventMsg:Fd}=Pn(),yL=ut(),{getDatabases:Zj}=(Ae(),ie(ke)),{transformReq:pa}=z();wL.exports={createSchema:eX,createSchemaStructure:NL,createTable:tX,createTableStructure:IL,createAttribute:oX,dropSchema:rX,dropTable:nX,dropAttribute:sX,getBackup:aX};async function eX(e){let t=await NL(e);return qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),t}a(eX,"createSchema");async function NL(e){let t=Ea.schema_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(pa(e),!await ha.checkSchemaExists(e.schema))throw gr(new Error,Gd.SCHEMA_EXISTS_ERR(e.schema),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.SCHEMA_EXISTS_ERR(e.schema),!0);return await Ei.createSchema(e),`database '${e.schema}' successfully created`}a(NL,"createSchemaStructure");async function tX(e){return pa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await IL(e)}a(tX,"createTable");async function IL(e){let t=Ea.create_table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await ha.checkSchemaTableExists(e.schema,e.table))throw gr(new Error,Gd.TABLE_EXISTS_ERR(e.schema,e.table),Rr.BAD_REQUEST,ma.LOG_LEVELS.ERROR,Gd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let n={name:e.table,schema:e.schema,id:Jj(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)n.residence=e.residence,await Ei.createTable(n,e);else throw gr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Rr.BAD_REQUEST);else await Ei.createTable(n,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(s){throw s}}a(IL,"createTableStructure");async function rX(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),n=t??r;if(n)throw gr(n,n.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let s=await ha.checkSchemaExists(e.schema);if(s)throw gr(new Error,s,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,s,!0);let i=await ha.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Ei.dropSchema(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema)),await yL.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(rX,"dropSchema");async function nX(e){let t=Ea.table_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);return await Ei.dropTable(e),await yL.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(nX,"dropTable");async function sX(e){let t=Ea.attribute_object(e);if(t)throw gr(t,t.message,Rr.BAD_REQUEST,void 0,void 0,!0);pa(e);let r=await ha.checkSchemaTableExists(e.schema,e.table);if(r)throw gr(new Error,r,Rr.NOT_FOUND,ma.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw gr(new Error,"You cannot drop a hash attribute",Rr.BAD_REQUEST,void 0,void 0,!0);if(ma.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw gr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Rr.BAD_REQUEST,void 0,void 0,!0);try{return await Ei.dropAttribute(e),iX(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(n){throw zj.error(`Got an error deleting attribute ${jj.inspect(e)}.`),n}}a(sX,"dropAttribute");function iX(e){let t=Object.values(global.hdb_schema[e.schema][e.table].attributes);for(let r=0;r<t.length;r++)t[r].attribute===e.attribute&&global.hdb_schema[e.schema][e.table].attributes.splice(r,1)}a(iX,"dropAttributeFromGlobal");async function oX(e){pa(e);let t=Zj()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw gr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Rr.BAD_REQUEST,void 0,void 0,!0);return await Ei.createAttribute(e),qd.signalSchemaChange(new Fd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(oX,"createAttribute");function aX(e){return Ei.getBackup(e)}a(aX,"getBackup")});var DL=g((Zfe,CL)=>{"use strict";var{OPERATIONS_ENUM:cX}=P(),VS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,n=void 0,s=void 0){this.operation=cX.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=n,this.search_values=s}};CL.exports=VS});var $S=g((rEe,vL)=>{"use strict";var uX=Dn(),tEe=DL(),kd=z(),Vd=P(),lX=ee(),{handleHDBError:LL,hdb_errors:_X}=se(),{HDB_ERROR_MSGS:ML,HTTP_STATUS_CODES:PL}=_X,dX=Object.values(Vd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),UL="To use this operation audit log must be enabled in harperdb-config.yaml";vL.exports=fX;async function fX(e){if(kd.isEmpty(e.schema))throw new Error(ML.SCHEMA_REQUIRED_ERR);if(kd.isEmpty(e.table))throw new Error(ML.TABLE_REQUIRED_ERR);if(!lX.get(Vd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw LL(new Error,UL,PL.BAD_REQUEST,Vd.LOG_LEVELS.ERROR,UL,!0);let t=kd.checkSchemaTableExist(e.schema,e.table);if(t)throw LL(new Error,t,PL.NOT_FOUND,Vd.LOG_LEVELS.ERROR,t,!0);if(!kd.isEmpty(e.search_type)&&dX.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await uX.readAuditLog(e)}a(fX,"readAuditLog")});var xL=g((sEe,BL)=>{"use strict";var{OPERATIONS_ENUM:EX}=P(),YS=class{static{a(this,"GetBackupObject")}constructor(t,r,n=void 0,s=void 0){this.operation=EX.GET_BACKUP,this.schema=t,this.table=r}};BL.exports=YS});var qL=g((cEe,GL)=>{"use strict";var hX=Dn(),oEe=xL(),KS=z(),mX=P(),aEe=ee(),{handleHDBError:pX,hdb_errors:SX}=se(),{HDB_ERROR_MSGS:HL,HTTP_STATUS_CODES:TX}=SX;GL.exports=gX;async function gX(e){if(KS.isEmpty(e.schema))throw new Error(HL.SCHEMA_REQUIRED_ERR);if(KS.isEmpty(e.table))throw new Error(HL.TABLE_REQUIRED_ERR);let t=KS.checkSchemaTableExist(e.schema,e.table);if(t)throw pX(new Error,t,TX.NOT_FOUND,mX.LOG_LEVELS.ERROR,t,!0);return await hX.getBackup(read_audit_log_object)}a(gX,"getBackup")});var KL=g((lEe,YL)=>{var hi=require("validate.js"),kL=Xe(),Sa=P(),{handleHDBError:RX,hdb_errors:AX}=se(),{HDB_ERROR_MSGS:mt,HTTP_STATUS_CODES:OX}=AX,WS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),bX={STRUCTURE_USER:"structure_user"},FL=Object.values(Sa.ROLE_TYPES_ENUM),yX="attribute_permissions",NX="attribute_name",{PERMS_CRUD_ENUM:Ta}=Sa,IX=[yX,...Object.values(Ta)],VL=[Ta.READ,Ta.INSERT,Ta.UPDATE],wX=[NX,...VL];function CX(e){let t=WS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,$L(e,t)}a(CX,"addRoleValidation");function DX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,$L(e,t)}a(DX,"alterRoleValidation");function LX(e){let t=WS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,kL.validateObject(e,t)}a(LX,"dropRoleValidation");var MX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function $L(e,t){let r={main_permissions:[],schema_permissions:{}},n=Object.keys(e),s=[];for(let o=0,c=n.length;o<c;o++)MX.includes(n[o])||s.push(n[o]);s.length>0&&At(mt.INVALID_ROLE_JSON_KEYS(s),r);let i=kL.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{At(o,r)}),e.permission){let o=PX(e);o&&At(o,r),FL.forEach(c=>{e.permission[c]&&!hi.isBoolean(e.permission[c])&&At(mt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(FL.indexOf(o)<0){if(o===bX.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let _=0,l=u.length;_<l;_++){let d=u[_];global.hdb_schema[d]||At(mt.SCHEMA_NOT_FOUND(d),r)}continue}At(mt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){At(mt.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let _=c.tables[u];if(!u||!global.hdb_schema[o][u]){At(mt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{IX.includes(l)||At(mt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(Ta).forEach(l=>{hi.isDefined(_[l])?hi.isBoolean(_[l])||At(mt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):At(mt.TABLE_PERM_MISSING(l),r,o,u)}),hi.isDefined(_.attribute_permissions)){if(!hi.isArray(_.attribute_permissions)){At(mt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{At(mt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in _.attribute_permissions){let f=_.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!wX.includes(p)&&p!==Ta.DELETE&&At(mt.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!hi.isDefined(f.attribute_name)){At(mt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!l.includes(h)){At(mt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}VL.forEach(p=>{hi.isDefined(f[p])?hi.isBoolean(f[p])||At(mt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):At(mt.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let E=`${o}.${u}`;At(mt.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return UX(r)}a($L,"customValidate");YL.exports={addRoleValidation:CX,alterRoleValidation:DX,dropRoleValidation:LX};function PX(e){let{operation:t,permission:r}=e;if(t===Sa.OPERATIONS_ENUM.ADD_ROLE||t===Sa.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 mt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Sa.ROLE_TYPES_ENUM.SUPER_USER:Sa.ROLE_TYPES_ENUM.CLUSTER_USER;return mt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(PX,"validateNoSUPerms");function UX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let n={error:mt.ROLE_PERMS_ERROR,...e};return RX(new Error,n,OX.BAD_REQUEST)}else return null}a(UX,"generateRolePermResponse");function At(e,t,r,n){if(!r)t.main_permissions.push(e);else{let s=n?r+"_"+n:r;t.schema_permissions[s]?t.schema_permissions[s].push(e):t.schema_permissions[s]=[e]}}a(At,"addPermError")});var ZS=g((dEe,JL)=>{"use strict";var WL=qr(),QL=Gr(),vX=ci(),zS=KL(),JS=Ns(),BX=require("uuid").v4,xX=require("util"),$d=P(),HX=z(),jS=QL.searchByValue,GX=QL.searchByHash,qX=xX.promisify(vX.delete),FX=rs(),kX=oa(),{hdb_errors:VX,handleHDBError:_o}=se(),{HDB_ERROR_MSGS:zL,HTTP_STATUS_CODES:yu}=VX,{UserEventMsg:XS}=Pn();JL.exports={addRole:$X,alterRole:YX,dropRole:KX,listRoles:WX};function QS(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(QS,"scrubRoleDetails");async function $X(e){let t=zS.addRoleValidation(e);if(t)throw t;e=QS(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 jS(r)||[])}catch(i){throw _o(i)}if(n&&n.length>0)throw _o(new Error,zL.ROLE_ALREADY_EXISTS(e.role),yu.CONFLICT,void 0,void 0,!0);e.id||(e.id=BX());let s={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await WL.insert(s),JS.signalUserChange(new XS(process.pid)),e=QS(e),e}a($X,"addRole");async function YX(e){let t=zS.alterRoleValidation(e);if(t)throw t;e=QS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},n;try{n=await WL.update(r)}catch(s){throw _o(s)}if(n&&n?.message==="updated 0 of 1 records")throw _o(new Error,"Invalid role id",yu.BAD_REQUEST,void 0,void 0,!0);return await JS.signalUserChange(new XS(process.pid)),e}a(YX,"alterRole");async function KX(e){let t=zS.dropRoleValidation(e);if(t)throw _o(new Error,t,yu.BAD_REQUEST,void 0,void 0,!0);let r=new kX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),n=Array.from(await GX(r));if(n.length===0)throw _o(new Error,zL.ROLE_NOT_FOUND,yu.NOT_FOUND,void 0,void 0,!0);let s=new FX($d.SYSTEM_SCHEMA_NAME,$d.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await jS(s)),o=!1;if(HX.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw _o(new Error,`Cannot drop role ${n[0].role} as it has active user(s) tied to this role`,yu.CONFLICT,void 0,void 0,!0);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await qX(c),JS.signalUserChange(new XS(process.pid)),`${n[0].role} successfully deleted`}a(KX,"dropRole");async function WX(){return jS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(WX,"listRoles")});var eM=g((EEe,ZL)=>{"use strict";var QX=ee(),mi=require("joi"),zX=Xe(),jL=require("moment"),JX=require("fs-extra"),eT=require("path"),jX=require("lodash"),Nu=P(),{LOG_LEVELS:fo}=P(),XX="YYYY-MM-DD hh:mm:ss",ZX=eT.resolve(__dirname,"../logs");ZL.exports=function(e){return zX.validateBySchema(e,eZ)};var eZ=mi.object({from:mi.custom(XL),until:mi.custom(XL),level:mi.valid(fo.NOTIFY,fo.FATAL,fo.ERROR,fo.WARN,fo.INFO,fo.DEBUG,fo.TRACE),order:mi.valid("asc","desc"),limit:mi.number().min(1),start:mi.number().min(0),log_name:mi.custom(tZ)});function XL(e,t){if(jL(e,jL.ISO_8601).format(XX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(XL,"validateDatetime");function tZ(e,t){if(jX.invert(Nu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let n=QX.get(Nu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e===void 0?Nu.LOG_NAMES.HDB:e,i=s===Nu.LOG_NAMES.INSTALL?eT.join(ZX,Nu.LOG_NAMES.INSTALL):eT.join(n,s);return JX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(tZ,"validateReadLogPath")});var rT=g((mEe,rM)=>{"use strict";var Yd=P(),rZ=$(),nZ=ee(),sZ=eM(),tT=require("path"),tM=require("fs-extra"),{once:iZ}=require("events"),{handleHDBError:oZ,hdb_errors:aZ}=se(),{PACKAGE_ROOT:cZ}=P(),uZ=tT.join(cZ,"logs"),lZ=1e3,_Z=200;rM.exports=dZ;async function dZ(e){let t=sZ(e);if(t)throw oZ(t,t.message,aZ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=nZ.get(Yd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e.log_name===void 0?Yd.LOG_NAMES.HDB:e.log_name,s=n===Yd.LOG_NAMES.INSTALL?tT.join(uZ,Yd.LOG_NAMES.INSTALL):tT.join(r,n),i=e.level!==void 0,o=i?e.level:void 0,c=e.from!==void 0,u=c?new Date(e.from):void 0,_=e.until!==void 0,l=_?new Date(e.until):void 0,d=e.limit===void 0?lZ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!l&&(p=Math.max(tM.statSync(s).size-(h+5)*_Z,0));let S=tM.createReadStream(s,{start:p});S.on("error",U=>{rZ.error(U)});let T=0,R=[],b="",I;S.on("data",U=>{let F=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;U=b+U;let M=0,Q;for(;(Q=F.exec(U))&&!S.destroyed;){I&&(I.message=U.slice(M,Q.index),B(I));let[J,j,oe]=Q,ue=oe.split("] ["),le=ue[0],Be=ue[1];ue.splice(0,2),I={timestamp:j,thread:le,level:Be,tags:ue,message:""},M=Q.index+J.length}b=U.slice(M)}),S.on("end",U=>{S.destroyed||I&&(I.message=b.trim(),B(I))}),S.resume();function B(U){let F,M,Q;switch(!0){case(i&&c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),U.level===o&&F>=M&&F<=Q&&T<f?T++:U.level===o&&F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&c):F=new Date(U.timestamp),M=new Date(u),U.level===o&&F>=M&&T<f?T++:U.level===o&&F>=M&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(i&&_):F=new Date(U.timestamp),Q=new Date(l),U.level===o&&F<=Q&&T<f?T++:U.level===o&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case(c&&_):F=new Date(U.timestamp),M=new Date(u),Q=new Date(l),F>=M&&F<=Q&&T<f?T++:F>=M&&F<=Q&&(pi(U,E,R),T++,T===h&&S.destroy());break;case i:U.level===o&&T<f?T++:U.level===o&&(pi(U,E,R),T++,T===h&&S.destroy());break;case c:F=new Date(U.timestamp),M=new Date(u),F>=M&&T<f?T++:F>=M&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;case _:F=new Date(U.timestamp),Q=new Date(l),F<=Q&&T<f?T++:F<=Q&&T>=f&&(pi(U,E,R),T++,T===h&&S.destroy());break;default:T<f?T++:(pi(U,E,R),T++,T===h&&S.destroy())}}return a(B,"onLogMessage"),await iZ(S,"close"),R}a(dZ,"readLog");function pi(e,t,r){t==="desc"?fZ(e,r):t==="asc"?EZ(e,r):r.push(e)}a(pi,"pushLineToResult");function fZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)>r?n=i+1:s=i}t.splice(n,0,e)}a(fZ,"insertDescending");function EZ(e,t){let r=new Date(e.timestamp),n=0,s=t.length;for(;n<s;){let i=n+s>>>1;new Date(t[i].timestamp)<r?n=i+1:s=i}t.splice(n,0,e)}a(EZ,"insertAscending")});var Kd=g((REe,oM)=>{"use strict";var nT=require("joi"),{string:Iu,boolean:nM,date:hZ}=nT.types(),mZ=Xe(),{validateSchemaExists:SEe,validateTableExists:TEe,validateSchemaName:gEe}=jn(),pZ=P(),SZ=Ve(),sM=ee();sM.initSync();var TZ=Iu.invalid(sM.get(pZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(SZ.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).required(),iM={operation:Iu.valid("add_node","update_node","set_node_replication"),node_name:TZ,subscriptions:nT.array().items({table:Iu.optional(),schema:Iu.optional(),database:Iu.optional(),subscribe:nM.required(),publish:nM.required().custom(RZ),start_time:hZ.iso()}).min(1).required()};function gZ(e){return mZ.validateBySchema(e,nT.object(iM))}a(gZ,"addUpdateNodeValidator");function RZ(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(RZ,"checkForFalsy");oM.exports={addUpdateNodeValidator:gZ,validation_schema:iM}});var cM=g((OEe,aM)=>{var AZ=Xe(),OZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};aM.exports=function(e){return AZ.validateObject(e,OZ)}});var Wd=g((bEe,uM)=>{"use strict";var bZ=P().OPERATIONS_ENUM,sT=class{static{a(this,"UpdateObject")}constructor(t,r,n,s=void 0){this.operation=bZ.UPDATE,this.schema=t,this.table=r,this.records=n,this.__origin=s}};uM.exports=sT});var _M=g((NEe,lM)=>{"use strict";var yZ={OPERATION:"operation",REFRESH:"refresh"},iT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},oT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,n){this.public_key=t,this.private_key=r,this.passphrase=n}};lM.exports={JWTTokens:iT,TOKEN_TYPE_ENUM:yZ,JWTRSAKeys:oT}});var Du=g((wEe,hM)=>{"use strict";var Cu=require("jsonwebtoken"),aT=require("fs-extra"),cT=z(),dn=P(),{handleHDBError:Ar,hdb_errors:NZ}=se(),{HTTP_STATUS_CODES:Or,AUTHENTICATION_ERROR_MSGS:br}=NZ,wu=$(),dM=z_(),_T=_n(),IZ=qr().update,wZ=Wd(),CZ=Ns(),{UserEventMsg:DZ}=Pn(),Si=ee();Si.initSync();var uT=require("path"),{JWTTokens:LZ,JWTRSAKeys:MZ,TOKEN_TYPE_ENUM:Qd}=_M(),PZ=Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",UZ=Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Si.get(dn.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",zd="RS256",lT;hM.exports={createTokens:vZ,validateOperationToken:xZ,refreshOperationToken:BZ,validateRefreshToken:EM};async function vZ(e){if(cT.isEmpty(e)||typeof e!="object")throw Ar(new Error,br.INVALID_AUTH_OBJECT,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.username))throw Ar(new Error,br.USERNAME_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);if(cT.isEmpty(e.password))throw Ar(new Error,br.PASSWORD_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await _T.findAndValidateUser(e.username,e.password),!t)throw Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw wu.error(E),Ar(new Error,br.INVALID_CREDENTIALS,Or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Jd(),n=!1,s=!1;t.role&&t.role.permission&&(n=t.role.permission.super_user===!0,s=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:n,cluster_user:s},o=await fM(i,r.private_key,r.passphrase),c=await Cu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:UZ,algorithm:zd,subject:Qd.REFRESH}),u=dM.hash(c),_=new wZ(dn.SYSTEM_SCHEMA_NAME,dn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await IZ(_)}catch(E){wu.error(E),d=E}if(d!==void 0||l.skipped_hashes.length>0)throw Ar(new Error,br.REFRESH_TOKEN_SAVE_FAILED,Or.INTERNAL_SERVER_ERROR);return CZ.signalUserChange(new DZ(process.pid)),new LZ(o,c)}a(vZ,"createTokens");async function fM(e,t,r){return await Cu.sign(e,{key:t,passphrase:r},{expiresIn:PZ,algorithm:zd,subject:Qd.OPERATION})}a(fM,"signOperationToken");async function Jd(){if(lT===void 0)try{let e=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PASSPHRASE_NAME),t=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=uT.join(Si.getHdbBasePath(),dn.LICENSE_KEY_DIR_NAME,dn.JWT_ENUM.JWT_PUBLIC_KEY_NAME),n=(await aT.readFile(e)).toString(),s=(await aT.readFile(t)).toString(),i=(await aT.readFile(r)).toString();lT=new MZ(i,s,n)}catch(e){throw wu.error(e),Ar(new Error,br.NO_ENCRYPTION_KEYS,Or.INTERNAL_SERVER_ERROR)}return lT}a(Jd,"getJWTRSAKeys");async function BZ(e){if(!e)throw Ar(new Error,br.INVALID_BODY,Or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Ar(new Error,br.REFRESH_TOKEN_REQUIRED,Or.BAD_REQUEST,void 0,void 0,!0);await EM(e.refresh_token);let t=await Jd(),r=await Cu.decode(e.refresh_token);return{operation_token:await fM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(BZ,"refreshOperationToken");async function xZ(e){try{let t=await Jd(),r=await Cu.verify(e,t.public_key,{algorithms:zd,subject:Qd.OPERATION});return await _T.findAndValidateUser(r.username,void 0,!1)}catch(t){throw wu.warn(t),t.name&&t.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}}a(xZ,"validateOperationToken");async function EM(e){let t;try{let r=await Jd(),n=await Cu.verify(e,r.public_key,{algorithms:zd,subject:Qd.REFRESH});t=await _T.findAndValidateUser(n.username,void 0,!1)}catch(r){throw wu.warn(r),r.name&&r.name==="TokenExpiredError"?Ar(new Error,br.TOKEN_EXPIRED,Or.FORBIDDEN):Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED)}if(!dM.validate(t.refresh_token,e))throw Ar(new Error,br.INVALID_TOKEN,Or.UNAUTHORIZED);return t}a(EM,"validateRefreshToken")});var dT=g((LEe,SM)=>{"use strict";var HZ=cM(),ga=require("passport"),GZ=require("passport-local").Strategy,qZ=require("passport-http").BasicStrategy,FZ=require("util"),kZ=_n(),pM=FZ.callbackify(kZ.findAndValidateUser),DEe=Ur(),VZ=P(),mM=Du();ga.use(new GZ(function(e,t,r){pM(e,t,r)}));ga.use(new qZ(function(e,t,r){pM(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function $Z(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let n,s;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");n=o[0],s=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),n){case"Basic":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===VZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?mM.validateRefreshToken(s).then(o=>{e.body.refresh_token=s,r(null,o)}).catch(o=>{r(o)}):mM.validateOperationToken(s).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a($Z,"authorize");function YZ(e,t){let r=HZ(e);if(r){t(r);return}let n={authorized:!0,messages:[]},s=e.user.role;if(!s?.permission)return t("Invalid role");let i=JSON.parse(s.permission);if(i.super_user)return t(null,n);if(!i[e.schema])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.schema} schema`),t(null,n);if(!i[e.schema].tables[e.table])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.table} table`),t(null,n);if(!i[e.schema].tables[e.table][e.operation])return n.authorized=!1,n.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return n.authorized=!1,n.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,n);if(i[e.schema].tables[e.table].attribute_permissions&&e.attributes){let o=i[e.schema].tables[e.table].attribute_permissions;for(let c in o)e.attributes.indexOf(o[c].attribute_name)>-1&&!o[c][e.operation]&&(n.authorized=!1,n.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,n)}a(YZ,"checkPermissions");SM.exports={authorize:$Z,checkPermissions:YZ}});var Ti=g((PEe,TM)=>{"use strict";var fT=class{static{a(this,"Node")}constructor(t,r,n){this.name=t,this.subscriptions=r,this.system_info=n}},ET=class{static{a(this,"NodeSubscription")}constructor(t,r,n,s){this.schema=t,this.table=r,this.publish=n,this.subscribe=s}};TM.exports={Node:fT,NodeSubscription:ET}});var RM=g((vEe,gM)=>{"use strict";var KZ=P().OPERATIONS_ENUM,hT=class{static{a(this,"UpsertObject")}constructor(t,r,n,s=void 0){this.operation=KZ.UPSERT,this.schema=t,this.table=r,this.records=n,this.__origin=s}};gM.exports=hT});var Lu=g((xEe,AM)=>{"use strict";var mT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,n,s){this.operation=t,this.node_name=r,this.subscriptions=n,this.system_info=s}},pT=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,n,s,i,o,c){this.schema=t,this.table=r,this.hash_attribute=n,this.publish=s,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};AM.exports={RemotePayloadObject:mT,RemotePayloadSubscription:pT}});var bM=g((GEe,OM)=>{"use strict";var ST=class{static{a(this,"TableSizeObject")}constructor(t,r,n=0,s=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=n,this.record_count=s,this.transaction_log_size=i,this.transaction_log_record_count=o}};OM.exports=ST});var IM=g(($Ee,NM)=>{"use strict";var WZ=bM(),FEe=ft(),yM=ze(),QZ=$(),{getSchemaPath:kEe,getTransactionAuditStorePath:VEe}=je(),{getDatabases:zZ}=(Ae(),ie(ke));NM.exports=JZ;async function JZ(e){let t=new WZ;try{let r=zZ()[e.schema]?.[e.name],n=r.primaryStore.getStats(),s=r.auditStore?.getStats(),i=await yM.environmentDataSize(schema_path,e.name),o=await yM.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=n.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=s.entryCount}catch(r){QZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(JZ,"lmdbGetTableSize")});var CM=g((KEe,wM)=>{"use strict";var TT=class{static{a(this,"SystemInformationObject")}constructor(t,r,n,s,i,o,c){this.system=t,this.time=r,this.cpu=n,this.memory=s,this.disk=i,this.network=o,this.harperdb_processes=c}};wM.exports=TT});var Ra=g((XEe,PM)=>{"use strict";var jZ=require("fs-extra"),XZ=require("path"),sr=require("systeminformation"),gi=$(),DM=ut(),QEe=Ve(),Xd=P(),ZZ=IM(),e5=bs(),{getThreadInfo:LM}=Qe(),DT=ee();DT.initSync();var t5=CM(),{openEnvironment:zEe}=ze(),{getSchemaPath:JEe}=je(),{database:jEe,databases:gT}=(Ae(),ie(ke)),jd;PM.exports={getHDBProcessInfo:bT,getNetworkInfo:NT,getDiskInfo:yT,getMemoryInfo:OT,getCPUInfo:AT,getTimeInfo:RT,getSystemInformation:IT,systemInformation:r5,getTableSize:wT,getMetrics:CT};function RT(){return sr.time()}a(RT,"getTimeInfo");async function AT(){try{let{family:e,model:t,stepping:r,revision:n,voltage:s,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await sr.cpu();l.cpu_speed=await sr.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:S,cpus:T,...R}=await sr.currentLoad();return R.cpus=[],T.forEach(b=>{let{raw_load:I,raw_load_idle:B,raw_load_irq:U,raw_load_nice:F,raw_load_system:M,raw_load_user:Q,...J}=b;R.cpus.push(J)}),l.current_load=R,l}catch(e){return gi.error(`error in getCPUInfo: ${e}`),{}}}a(AT,"getCPUInfo");async function OT(){try{let{buffers:e,cached:t,slab:r,buffcache:n,...s}=await sr.mem();return Object.assign(s,process.memoryUsage())}catch(e){return gi.error(`error in getMemoryInfo: ${e}`),{}}}a(OT,"getMemoryInfo");async function bT(){let e={core:[],clustering:[]};try{let t=await sr.processes(),r;try{r=Number.parseInt(await jZ.readFile(XZ.join(DT.get(Xd.CONFIG_PARAMS.ROOTPATH),Xd.HDB_PID_FILE),"utf8"))}catch(n){if(n.code===Xd.NODE_ERROR_CODES.ENOENT)gi.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 gi.error(`error in getHDBProcessInfo: ${t}`),e}}a(bT,"getHDBProcessInfo");async function yT(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:n,ms:s,...i}=await sr.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await sr.fsStats();return e.read_write=_,e.size=await sr.fsSize(),e}catch(t){return gi.error(`error in getDiskInfo: ${t}`),e}}a(yT,"getDiskInfo");async function NT(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await sr.networkInterfaceDefault(),e.latency=await sr.inetChecksite("google.com"),(await sr.networkInterfaces()).forEach(n=>{let{internal:s,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...E}=n;e.interfaces.push(E)}),(await sr.networkStats()).forEach(n=>{let{rx_sec:s,tx_sec:i,ms:o,...c}=n;e.stats.push(c)}),e}catch(t){return gi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function IT(){if(jd!==void 0)return jd;let e={};try{let{codepage:t,logofile:r,serial:n,build:s,servicepack:i,uefi:o,...c}=await sr.osInfo();e=c;let u=await sr.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,jd=e,jd}catch(t){return gi.error(`error in getSystemInformation: ${t}`),e}}a(IT,"getSystemInformation");async function wT(){let e=[],t=await e5.describeAll();for(let r of Object.values(t))for(let n of Object.values(r))e.push(await ZZ(n));return e}a(wT,"getTableSize");async function CT(){let e={};for(let t in gT){let r=e[t]={},n=r.tables={};for(let s in gT[t])try{let i=gT[t][s];r.readers||(Object.assign(r,i.primaryStore.rootStore.getStats()),delete r.root,r.readers=i.primaryStore.rootStore.readerList().split(/\n\s+/).slice(1).map(u=>{let[_,l,d]=u.trim().split(" ");return{pid:_,thread:l,txnid:d}}),i.primaryStore.auditStore&&(r.audit=i.auditStore.getStats()));let o=i.primaryStore.getStats(),c={};for(let u of["treeDepth","treeBranchPageCount","treeLeafPageCount","entryCount","overflowPages"])c[u]=o[u];n[s]=c}catch(i){gi.notify(`Error getting stats for table ${s}: ${i}`)}}return e}a(CT,"getMetrics");async function MM(){if(DT.get(Xd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{jsm:e}=await DM.getNATSReferences(),t=await DM.listStreams(),r=[];for(let n of t){let s=[],i=await e.consumers.list(n.config.name);for await(let c of i)s.push({name:c.name,created:c.created,num_ack_pending:c.num_ack_pending,num_redelivered:c.num_redelivered,num_waiting:c.num_waiting,num_pending:c.num_pending});let o={stream_name:n.config.name,database:n.config.subjects[0].split(".")[1],table:n.config.subjects[0].split(".")[2],state:n.state,consumers:s};r.push(o)}return r}}a(MM,"getNatsStreamInfo");async function r5(e){let t=new t5;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await IT(),t.time=RT(),t.cpu=await AT(),t.memory=await OT(),t.disk=await yT(),t.network=await NT(),t.harperdb_processes=await bT(),t.table_size=await wT(),t.metrics=await CT(),t.threads=await LM(),t.replication=await MM(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await IT();break;case"time":t.time=RT();break;case"cpu":t.cpu=await AT();break;case"memory":t.memory=await OT();break;case"disk":t.disk=await yT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await bT();break;case"table_size":t.table_size=await wT();break;case"database_metrics":case"metrics":t.metrics=await CT();break;case"threads":t.threads=await LM();break;case"replication":t.replication=await MM();break;default:break}return t}a(r5,"systemInformation")});var ef=g((ehe,UM)=>{"use strict";UM.exports={version:n5,printVersion:s5};var Zd=du();function n5(){if(Zd)return Zd.version}a(n5,"version");function s5(){Zd&&console.log(`HarperDB Version ${Zd.version}`)}a(s5,"printVersion")});var fn=g((she,HM)=>{"use strict";var i5=qr(),LT=z(),o5=require("util"),Eo=P(),vM=ee();vM.initSync();var a5=dT(),BM=Gr(),{Node:rhe,NodeSubscription:nhe}=Ti(),c5=oa(),u5=RM(),{RemotePayloadObject:l5,RemotePayloadSubscription:_5}=Lu(),{handleHDBError:d5,hdb_errors:f5}=se(),{HTTP_STATUS_CODES:E5,HDB_ERROR_MSGS:h5}=f5,m5=rs(),p5=Ra(),S5=ef(),{getDatabases:T5}=(Ae(),ie(ke)),g5=o5.promisify(a5.authorize),R5=BM.searchByHash,A5=BM.searchByValue;HM.exports={authHeaderToUser:O5,isEmpty:b5,getNodeRecord:y5,upsertNodeRecord:N5,buildNodePayloads:I5,checkClusteringEnabled:w5,getAllNodeRecords:C5,getSystemInfo:D5,reverseSubscription:xM};async function O5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await g5(t,null),e}a(O5,"authHeaderToUser");function b5(e){return e==null}a(b5,"isEmpty");async function y5(e){let t=new c5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return R5(t)}a(y5,"getNodeRecord");async function N5(e){let t=new u5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return i5.upsert(t)}a(N5,"upsertNodeRecord");function xM(e){if(LT.isEmpty(e.subscribe)||LT.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:n}=e,s={schema:t,table:r,hash_attribute:n};return e.subscribe===!0&&e.publish===!1?(s.subscribe=!1,s.publish=!0):e.subscribe===!1&&e.publish===!0?(s.subscribe=!0,s.publish=!1):(s.subscribe=e.subscribe,s.publish=e.publish),s}a(xM,"reverseSubscription");function I5(e,t,r,n){let s=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=LT.getTableHashAttribute(u,_),{subscribe:d,publish:E}=xM(c),f=T5()[u]?.[_],h=new _5(u,_,l,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);s.push(h)}return new l5(r,t,s,n)}a(I5,"buildNodePayloads");function w5(){if(!vM.get(Eo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw d5(new Error,h5.CLUSTERING_NOT_ENABLED,E5.BAD_REQUEST,void 0,void 0,!0)}a(w5,"checkClusteringEnabled");async function C5(){let e=new m5(Eo.SYSTEM_SCHEMA_NAME,Eo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await A5(e))}a(C5,"getAllNodeRecords");async function D5(){let e=await p5.getSystemInformation();return{hdb_version:S5.version(),node_version:e.node_version,platform:e.platform}}a(D5,"getSystemInfo")});var MT=g((ohe,KM)=>{"use strict";var tf=ut(),GM=z(),qM=Ve(),FM=P(),rf=$(),kM=bu(),L5=md(),{RemotePayloadObject:M5}=Lu(),{handleHDBError:VM,hdb_errors:P5}=se(),{HTTP_STATUS_CODES:$M}=P5,{NodeSubscription:YM}=Ti();KM.exports=U5;async function U5(e,t){let r;try{r=await tf.request(`${t}.${qM.REQUEST_SUFFIX}`,new M5(FM.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),rf.trace("Response from remote describe all request:",r)}catch(o){rf.error(`addNode received error from describe all request to remote node: ${o}`);let c=tf.requestErrorHandler(o,"add_node",t);throw VM(new Error,c,$M.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===qM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw VM(new Error,o,$M.INTERNAL_SERVER_ERROR,"error",o)}let n=r.message,s=[],i=[];for(let o of e){let{table:c}=o,u=o.database??o.schema??"data";if(u===FM.SYSTEM_SCHEMA_NAME){await tf.createLocalTableStream(u,c);let h=new YM(u,c,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=GM.doesSchemaExist(u),l=n[u]!==void 0,d=c?GM.doesTableExist(u,c):!0,E=c?n?.[u]?.[c]!==void 0:!0;if(!_&&!l||!d&&!E){s.push(o);continue}if(!_&&l&&(rf.trace(`addNode creating schema: ${u}`),await kM.createSchema({operation:"create_schema",schema:u})),!d&&E){rf.trace(`addNode creating table: ${c} in schema: ${u} with attributes ${JSON.stringify(n[u][c].attributes)}`);let h=new L5(u,c,n[u][c].hash_attribute);n[u][c].attributes&&(h.attributes=n[u][c].attributes),await kM.createTable(h)}await tf.createLocalTableStream(u,c);let f=new YM(u,c,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:s}}a(U5,"reviewSubscriptions")});var af=g((che,zM)=>{"use strict";var{handleHDBError:nf,hdb_errors:v5}=se(),{HTTP_STATUS_CODES:sf}=v5,{addUpdateNodeValidator:B5}=Kd(),of=$(),QM=P(),WM=Ve(),x5=z(),Mu=ut(),Pu=fn(),H5=ee(),G5=MT(),{Node:q5,NodeSubscription:F5}=Ti(),{broadcast:k5}=Qe(),V5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y5=H5.get(QM.CONFIG_PARAMS.CLUSTERING_NODENAME);zM.exports=K5;async function K5(e,t=!1){of.trace("addNode called with:",e),Pu.checkClusteringEnabled();let r=B5(e);if(r)throw nf(r,r.message,sf.BAD_REQUEST,void 0,void 0,!0);let n=e.node_name;if(!t){let d=await Pu.getNodeRecord(n);if(!x5.isEmptyOrZeroLength(d))throw nf(new Error,`Node '${n}' has already been added, perform update_node to proceed.`,sf.BAD_REQUEST,void 0,void 0,!0)}let{added:s,skipped:i}=await G5(e.subscriptions,n),o={message:void 0,added:s,skipped:i};if(s.length===0)return o.message=V5,o;let c=Pu.buildNodePayloads(s,Y5,QM.OPERATIONS_ENUM.ADD_NODE,await Pu.getSystemInfo()),u=[];for(let d=0,E=s.length;d<E;d++){let f=s[d];s[d].start_time===void 0&&delete s[d].start_time,u.push(new F5(f.schema,f.table,f.publish,f.subscribe))}of.trace("addNode sending remote payload:",c);let _;try{_=await Mu.request(`${n}.${WM.REQUEST_SUFFIX}`,c)}catch(d){of.error(`addNode received error from request: ${d}`);for(let f=0,h=s.length;f<h;f++){let p=s[f];p.publish=!1,p.subscribe=!1,await Mu.updateRemoteConsumer(p,n)}let E=Mu.requestErrorHandler(d,"add_node",n);throw nf(new Error,E,sf.INTERNAL_SERVER_ERROR,"error",E)}if(_.status===WM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${n}: ${_.message}`;throw nf(new Error,d,sf.INTERNAL_SERVER_ERROR,"error",d)}of.trace(_);for(let d=0,E=s.length;d<E;d++){let f=s[d];await Mu.updateRemoteConsumer(f,n),f.subscribe===!0&&await Mu.updateConsumerIterator(f.schema,f.table,n,"start")}let l=new q5(n,u,_.system_info);return await Pu.upsertNodeRecord(l),k5({type:"nats_update"}),i.length>0?o.message=$5:o.message=`Successfully added '${n}' to manifest`,o}a(K5,"addNode")});var vT=g((_he,XM)=>{"use strict";var{handleHDBError:PT,hdb_errors:W5}=se(),{HTTP_STATUS_CODES:UT}=W5,{addUpdateNodeValidator:Q5}=Kd(),Uu=$(),jM=P(),JM=Ve(),lhe=z(),vu=ut(),Bu=fn(),z5=ee(),{cloneDeep:J5}=require("lodash"),j5=MT(),{Node:X5,NodeSubscription:Z5}=Ti(),{broadcast:e8}=Qe(),t8="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",r8="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",n8=z5.get(jM.CONFIG_PARAMS.CLUSTERING_NODENAME);XM.exports=s8;async function s8(e){Uu.trace("updateNode called with:",e),Bu.checkClusteringEnabled();let t=Q5(e);if(t)throw PT(t,t.message,UT.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n,s=await Bu.getNodeRecord(r);s.length>0&&(n=J5(s));let{added:i,skipped:o}=await j5(e.subscriptions,r),c={message:void 0,updated:i,skipped:o};if(i.length===0)return c.message=t8,c;let u=Bu.buildNodePayloads(i,n8,jM.OPERATIONS_ENUM.UPDATE_NODE,await Bu.getSystemInfo());for(let l=0,d=i.length;l<d;l++){let E=i[l];Uu.trace(`updateNode updating work stream for node: ${r} subscription:`,E),i[l].start_time===void 0&&delete i[l].start_time}Uu.trace("updateNode sending remote payload:",u);let _;try{_=await vu.request(`${r}.${JM.REQUEST_SUFFIX}`,u)}catch(l){Uu.error(`updateNode received error from request: ${l}`);let d=vu.requestErrorHandler(l,"update_node",r);throw PT(new Error,d,UT.INTERNAL_SERVER_ERROR,"error",d)}if(_.status===JM.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${_.message}`;throw PT(new Error,l,UT.INTERNAL_SERVER_ERROR,"error",l)}Uu.trace(_);for(let l=0,d=i.length;l<d;l++){let E=i[l];await vu.updateRemoteConsumer(E,r),E.subscribe===!0?await vu.updateConsumerIterator(E.schema,E.table,r,"start"):await vu.updateConsumerIterator(E.schema,E.table,r,"stop")}return n||(n=[new X5(r,[],_.system_info)]),await i8(n[0],i,_.system_info),o.length>0?c.message=r8:c.message=`Successfully updated '${r}'`,c}a(s8,"updateNode");async function i8(e,t,r){let n=e;for(let s=0,i=t.length;s<i;s++){let o=t[s],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=n.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||n.subscriptions.push(new Z5(o.schema,o.table,o.publish,o.subscribe))}n.system_info=r,await Bu.upsertNodeRecord(n),e8({type:"nats_update"})}a(i8,"updateNodeTable")});var nP=g((fhe,rP)=>{"use strict";var tP=require("joi"),{string:ZM}=tP.types(),o8=Xe(),eP=P(),a8=ee(),c8=Ve();rP.exports=u8;function u8(e){let t=ZM.invalid(a8.get(eP.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(c8.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=tP.object({operation:ZM.valid(eP.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return o8.validateBySchema(e,r)}a(u8,"removeNodeValidator")});var uf=g((hhe,cP)=>{"use strict";var{handleHDBError:sP,hdb_errors:l8}=se(),{HTTP_STATUS_CODES:iP}=l8,_8=nP(),xu=$(),oP=fn(),d8=z(),cf=P(),aP=Ve(),BT=ut(),f8=ee(),{RemotePayloadObject:E8}=Lu(),{NodeSubscription:h8}=Ti(),m8=aa(),p8=ci(),{broadcast:S8}=Qe(),T8=f8.get(cf.CONFIG_PARAMS.CLUSTERING_NODENAME);cP.exports=g8;async function g8(e){xu.trace("removeNode called with:",e),oP.checkClusteringEnabled();let t=_8(e);if(t)throw sP(t,t.message,iP.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,n=await oP.getNodeRecord(r);if(d8.isEmptyOrZeroLength(n))throw sP(new Error,`Node '${r}' was not found.`,iP.BAD_REQUEST,void 0,void 0,!0);n=n[0];let s=new E8(cf.OPERATIONS_ENUM.REMOVE_NODE,T8,[]),i,o=!1;for(let u=0,_=n.subscriptions.length;u<_;u++){let l=n.subscriptions[u];l.subscribe===!0&&await BT.updateConsumerIterator(l.schema,l.table,r,"stop");try{await BT.updateRemoteConsumer(new h8(l.schema,l.table,!1,!1),r)}catch(d){xu.error(d)}}try{i=await BT.request(`${r}.${aP.REQUEST_SUFFIX}`,s),xu.trace("Remove node reply from remote node:",r,i)}catch(u){xu.error("removeNode received error from request:",u),o=!0}let c=new m8(cf.SYSTEM_SCHEMA_NAME,cf.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await p8.deleteRecord(c),S8({type:"nats_update"}),i?.status===aP.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(xu.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(g8,"removeNode")});var _P=g((phe,lP)=>{"use strict";var uP=require("joi"),{string:R8,array:A8}=uP.types(),O8=Xe(),b8=Kd();lP.exports=y8;function y8(e){let t=uP.object({operation:R8.valid("configure_cluster").required(),connections:A8.items(b8.validation_schema).required()});return O8.validateBySchema(e,t)}a(y8,"configureClusterValidator")});var xT=g((The,mP)=>{"use strict";var N8=P(),lf=$(),I8=z(),w8=uf(),C8=af(),dP=fn(),D8=_P(),{handleHDBError:fP,hdb_errors:L8}=se(),{HTTP_STATUS_CODES:EP}=L8,M8="Configure cluster complete.",P8="Failed to configure the cluster. Check the logs for more details.",U8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";mP.exports=v8;async function v8(e){lf.trace("configure cluster called with:",e),dP.checkClusteringEnabled();let t=D8(e);if(t)throw fP(t,t.message,EP.BAD_REQUEST,void 0,void 0,!0);let r=await dP.getAllNodeRecords(),n=[];for(let l=0,d=r.length;l<d;l++){let E=await hP(w8,{operation:N8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[l].name},r[l].name);n.push(E)}lf.trace("All results from configure_cluster remove node:",n);let s=[],i=e.connections.length;for(let l=0;l<i;l++){let d=e.connections[l],E=await hP(C8,d,d.node_name);s.push(E)}lf.trace("All results from configure_cluster add node:",s);let o=[],c=[],u=!1,_=n.concat(s);for(let l=0,d=_.length;l<d;l++){let E=_[l];E.status==="rejected"&&(lf.error(E),o.includes(E.node_name)||o.push(E.node_name)),(E?.result?.message?.includes?.("Successfully")||E?.result?.includes?.("Successfully"))&&(u=!0),!(typeof E.result=="string"&&E.result.includes("Successfully removed")||E.status==="rejected")&&c.push({node_name:E?.node_name,subscriptions:E?.result})}if(I8.isEmptyOrZeroLength(o))return{message:M8,connections:c};if(u)return{message:U8,failed_nodes:o,connections:c};throw fP(new Error,P8,EP.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(v8,"configureCluster");async function hP(e,t,r){try{return{node_name:r,result:await e(t)}}catch(n){return{node_name:r,error:n,status:"rejected"}}}a(hP,"functionWrapper")});var gP=g((Rhe,TP)=>{"use strict";var Hu=require("joi"),B8=Xe(),{validateSchemaExists:pP,validateTableExists:x8,validateSchemaName:SP}=jn(),H8=Hu.object({operation:Hu.string().valid("purge_stream"),schema:Hu.string().custom(pP).custom(SP).optional(),database:Hu.string().custom(pP).custom(SP).optional(),table:Hu.string().custom(x8).required()});function G8(e){return B8.validateBySchema(e,H8)}a(G8,"purgeStreamValidator");TP.exports=G8});var HT=g((Ohe,RP)=>{"use strict";var{handleHDBError:q8,hdb_errors:F8}=se(),{HTTP_STATUS_CODES:k8}=F8,V8=gP(),$8=ut(),Y8=fn();RP.exports=K8;async function K8(e){e.schema=e.schema??e.database;let t=V8(e);if(t)throw q8(t,t.message,k8.BAD_REQUEST,void 0,void 0,!0);Y8.checkClusteringEnabled();let{schema:r,table:n,options:s}=e;return await $8.purgeTableStream(r,n,s),`Successfully purged table '${r}.${n}'`}a(K8,"purgeStream")});var FT=g((yhe,IP)=>{"use strict";var qT=fn(),W8=ut(),bP=ee(),_f=P(),ho=Ve(),Q8=z(),GT=$(),{RemotePayloadObject:z8}=Lu(),{ErrorCode:AP}=require("nats"),OP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_ENABLED),yP=bP.get(_f.CONFIG_PARAMS.CLUSTERING_NODENAME);IP.exports={clusterStatus:J8,buildNodeStatus:NP};async function J8(){let e={node_name:yP,is_enabled:OP,connections:[]};if(!OP)return e;let t=await qT.getAllNodeRecords();if(Q8.isEmptyOrZeroLength(t))return e;let r=[];for(let n=0,s=t.length;n<s;n++)r.push(NP(t[n],e.connections));return await Promise.allSettled(r),e}a(J8,"clusterStatus");async function NP(e,t){let r=e.name,n=new z8(_f.OPERATIONS_ENUM.CLUSTER_STATUS,yP,void 0,await qT.getSystemInfo()),s,i,o=ho.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();s=await W8.request(ho.REQUEST_SUBJECT(r),n),i=Date.now()-u,s.status===ho.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ho.CLUSTER_STATUS_STATUSES.CLOSED,GT.error(`Error getting node status from ${r} `,s))}catch(u){GT.warn(`Error getting node status from ${r}`,u),u.code===AP.NoResponders?o=ho.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===AP.Timeout?o=ho.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ho.CLUSTER_STATUS_STATUSES.CLOSED}let c=new j8(r,o,s?.message?.ports?.clustering,s?.message?.ports?.operations_api,i,s?.message?.uptime,e.subscriptions,s?.message?.system_info);try{let u={name:r,system_info:s?.message?.system_info};e.system_info?.hdb_version!==_f.PRE_4_0_0_VERSION&&await qT.upsertNodeRecord(u)}catch(u){GT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(NP,"buildNodeStatus");function j8(e,t,r,n,s,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:n},this.latency_ms=s,this.uptime=i,this.subscriptions=o,this.system_info=c}a(j8,"NodeStatusObject")});var VT=g((Ihe,wP)=>{"use strict";var{handleHDBError:X8,hdb_errors:Z8}=se(),{HTTP_STATUS_CODES:e6}=Z8,t6=ut(),r6=fn(),kT=z(),df=require("joi"),n6=Xe(),s6=2e3,i6=df.object({timeout:df.number().min(1),connected_nodes:df.boolean(),routes:df.boolean()});wP.exports=o6;async function o6(e){r6.checkClusteringEnabled();let t=n6.validateBySchema(e,i6);if(t)throw X8(t,t.message,e6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:n,routes:s}=e,i=n===void 0||kT.autoCastBoolean(n),o=s===void 0||kT.autoCastBoolean(s),c={nodes:[]},u=await t6.getServerList(r??s6),_={};if(i)for(let l=0,d=u.length;l<d;l++){let E=u[l].statsz;E&&(_[u[l].server.name]=E.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let E=u[l].server,f=u[l].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[E.name]&&_[E.name].forEach(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:kT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(o6,"clusterNetwork")});var MP=g((Che,LP)=>{"use strict";var $T=require("joi"),CP=Xe(),{route_constraints:DP}=op();LP.exports={setRoutesValidator:a6,deleteRoutesValidator:c6};function a6(e){let t=$T.object({server:$T.valid("hub","leaf").required(),routes:DP.required()});return CP.validateBySchema(e,t)}a(a6,"setRoutesValidator");function c6(e){let t=$T.object({routes:DP.required()});return CP.validateBySchema(e,t)}a(c6,"deleteRoutesValidator")});var KT=g((Lhe,BP)=>{"use strict";var mo=Er(),YT=z(),ff=P(),PP=MP(),{handleHDBError:UP,hdb_errors:u6}=se(),{HTTP_STATUS_CODES:vP}=u6,l6="cluster routes successfully set",_6="cluster routes successfully deleted";BP.exports={setRoutes:d6,getRoutes:f6,deleteRoutes:E6};function d6(e){let t=PP.setRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=e.server==="hub"?r.hub_routes:r.leaf_routes,s=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let _=e.routes[c];_.port=YT.autoCast(_.port);let l=n.some(E=>E.host===_.host&&E.port===_.port),d=s.some(E=>E.host===_.host&&E.port===_.port);l||d?i.push(_):(n.push(_),o.push(_))}return e.server==="hub"?mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n):mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n),{message:l6,set:o,skipped:i}}a(d6,"setRoutes");function f6(){let e=mo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(f6,"getRoutes");function E6(e){let t=PP.deleteRoutesValidator(e);if(t)throw UP(t,t.message,vP.BAD_REQUEST,void 0,void 0,!0);let r=mo.getClusteringRoutes(),n=r.hub_routes,s=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],E=!1;for(let f=0,h=n.length;f<h;f++){let p=n[f];if(d.host===p.host&&d.port===p.port){n.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=s.length;h<p;h++){let S=s[h];if(d.host===S.host&&d.port===S.port){s.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(n=YT.isEmptyOrZeroLength(n)?null:n,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,n)),u&&(s=YT.isEmptyOrZeroLength(s)?null:s,mo.updateConfigValue(ff.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s)),{message:_6,deleted:i,skipped:o}}a(E6,"deleteRoutes")});var HP=g((Phe,xP)=>{"use strict";var Gu=require("alasql"),po=require("recursive-iterator"),Hn=$(),h6=z(),qu=P(),WT=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,p6(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=>qu.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=>!qu.SEARCH_WILDCARDS.includes(s.columnid)),r.forEach(s=>{let i=this.table_to_schema_lookup.has(s.tableid)?this.table_to_schema_lookup.get(s.tableid):n,o=this.table_lookup.has(s.tableid)?this.table_lookup.get(s.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=m6(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(_=>({attribute_name:_.attribute}));let u=this.affected_attributes.get(i).get(o).filter(_=>!qu.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Gu.yy.Column({columnid:_});s.tableid&&(l.tableid=s.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function m6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(m6,"filterReadRestrictedAttrs");function p6(e,t,r,n,s){S6(e,t,r,n,s)}a(p6,"interpretAST");function Fu(e,t,r,n,s){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),n&&!n.has(e.as)&&n.set(e.as,e.databaseid)),s)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),s.set(o,i)}}a(Fu,"addSchemaTableToMap");function S6(e,t,r,n,s){if(!e){Hn.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Gu.yy.Insert?A6(e,t,r):e instanceof Gu.yy.Select?T6(e,t,r,n,s):e instanceof Gu.yy.Update?g6(e,t,r):e instanceof Gu.yy.Delete?R6(e,t,r):Hn.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(S6,"getRecordAttributesAST");function T6(e,t,r,n,s){if(!e){Hn.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(h6.isEmptyOrZeroLength(i)){Hn.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,n,s)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,n,s)});let o=new po(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=n.has(u)?n.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Hn.info(`table specified as ${u} not found.`);return}t.get(_).get(u).indexOf(c.columnid)<0&&t.get(_).get(u).push(c.columnid)}if(e.where){let c=new po(e.where),u=e.from[0].tableid;for(let{node:_}of c)if(_&&_.columnid){let l=_.tableid?_.tableid:u;if(!t.get(i).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(i).get(l).indexOf(_.columnid)<0&&t.get(i).get(l).push(_.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new po(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=s.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Hn.info(`table specified as ${l} not found.`);continue}t.get(d).get(l).indexOf(_.columnid)<0&&t.get(d).get(l).push(_.columnid)}}),e.order){let c=new po(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=n.has(_)?n.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Hn.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(T6,"getSelectAttributes");function g6(e,t,r){if(!e){Hn.info("getUpdateAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(g6,"getUpdateAttributes");function R6(e,t,r){if(!e){Hn.info("getDeleteAttributes: invalid SQL syntax tree");return}let n=new po(e.where),s=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.table.tableid,s,i.columnid,t,r)}a(R6,"getDeleteAttributes");function A6(e,t,r){if(!e){Hn.info("getInsertAttributes: invalid SQL syntax tree");return}let n=new po(e.columns),s=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of n)i&&i.columnid&&QT(e.into.tableid,s,i.columnid,t,r)}a(A6,"getInsertAttributes");function QT(e,t,r,n,s){if(!n.get(t))return;let i=e;n.get(t).has(i)||(i=s.get(i)),n.get(t).get(i).push(r)}a(QT,"pushAttribute");xP.exports=WT});var jT=g((vhe,kP)=>{var Ef=Xi(),GP=require("chalk"),Qr=$(),qP=require("prompt"),{promisify:O6}=require("util"),zT=P(),b6=require("fs-extra"),y6=require("path"),N6=z(),I6=ef(),FP=ee();FP.initSync();var w6=require("moment"),C6=O6(qP.get),D6=y6.join(FP.getHdbBasePath(),zT.LICENSE_KEY_DIR_NAME,zT.LICENSE_FILE_NAME,zT.LICENSE_FILE_NAME);kP.exports={getFingerprint:M6,setLicense:L6,parseLicense:JT,register:P6,getRegistrationInfo:v6};async function L6(e){if(e&&e.key&&e.company){try{Qr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await JT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Qr.error(r),Qr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(L6,"setLicense");async function M6(){let e={};try{e=await Ef.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Qr.error(r),Qr.error(t),new Error(r)}return e}a(M6,"getFingerprint");async function JT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Qr.info("Validating license input...");let r=Ef.validateLicense(e,t);if(Qr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Qr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Qr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Qr.info("writing license to disk"),await b6.writeFile(D6,JSON.stringify({license_key:e,company:t}))}catch(n){throw Qr.error("Failed to write License"),n}return"Registration successful."}a(JT,"parseLicense");async function P6(){let e=await U6();return JT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(P6,"register");async function U6(){let e=await Ef.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:GP.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:GP.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{qP.start()}catch(n){Qr.error(n)}let r;try{r=await C6(t)}catch(n){throw console.error("There was a problem prompting for registration input. Exiting."),n}return r}a(U6,"promptForRegistration");async function v6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await Ef.getLicense()}catch(r){throw Qr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(N6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=I6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=w6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(v6,"getRegistrationInfo")});var $P=g((xhe,VP)=>{"use strict";var B6=Ve(),XT=class{static{a(this,"HubConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+B6.SERVER_SUFFIX.HUB,this.pid_file=n,this.max_payload=67108864,this.reconnect_error_reports=100,this.jetstream={enabled:!1},this.tls={cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:E,tls:{cert_file:s,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};VP.exports=XT});var WP=g((Ghe,KP)=>{"use strict";var YP=Ve(),ZT=class{static{a(this,"LeafConfigObject")}constructor(t,r,n,s,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+YP.SERVER_SUFFIX.LEAF,this.pid_file=n,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:s,domain:r+YP.SERVER_SUFFIX.LEAF},this.tls={cert_file:_,key_file:l,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:o,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};KP.exports=ZT});var zP=g((Fhe,QP)=>{"use strict";var eg=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};QP.exports=eg});var jP=g((Vhe,JP)=>{"use strict";var x6=Ve(),tg=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+x6.SERVER_SUFFIX.ADMIN,this.password=r}};JP.exports=tg});var sg=g((Yhe,eU)=>{"use strict";var Aa=require("path"),pf=require("fs-extra"),H6=$P(),G6=WP(),q6=zP(),F6=jP(),rg=_n(),ba=z(),yr=Er(),mf=P(),ku=Ve(),{CONFIG_PARAMS:pt}=mf,ya=$(),Vu=ee(),XP=Os(),ng=ut(),Oa="clustering",k6=1e4,ZP=50;eU.exports={generateNatsConfig:$6,removeNatsConfig:Y6,getHubConfigPath:V6};function V6(){let e=Vu.get(pt.ROOTPATH);return Aa.join(e,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER)}a(V6,"getHubConfigPath");async function $6(e=!1,t=void 0){Vu.initSync();let r=Vu.get(pt.ROOTPATH),n=Aa.join(r,Oa,ku.PID_FILES.HUB),s=Aa.join(r,Oa,ku.PID_FILES.LEAF),i=yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.HUB_SERVER),c=Aa.join(r,Oa,ku.NATS_CONFIG_FILES.LEAF_SERVER),u=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERTIFICATE),_=yr.getConfigFromFile(pt.CLUSTERING_TLS_PRIVATEKEY),l=yr.getConfigFromFile(pt.CLUSTERING_TLS_CERT_AUTH),d=yr.getConfigFromFile(pt.CLUSTERING_TLS_INSECURE),E=yr.getConfigFromFile(pt.CLUSTERING_TLS_VERIFY),f=yr.getConfigFromFile(pt.CLUSTERING_NODENAME),h=yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await ng.checkNATSServerInstalled()||Sf("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await rg.listUsers(),S=yr.getConfigFromFile(pt.CLUSTERING_USER),T=await rg.getClusterUser();(ba.isEmpty(T)||T.active!==!0)&&Sf(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await hf(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await hf(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),await hf(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],b=[];for(let[J,j]of p.entries())j.role?.role===mf.ROLE_TYPES_ENUM.CLUSTER_USER&&j.active&&(R.push(new F6(j.username,XP.decrypt(j.hash))),b.push(new q6(j.username,XP.decrypt(j.hash))));let I=[],{hub_routes:B}=yr.getClusteringRoutes();if(!ba.isEmptyOrZeroLength(B))for(let J of B)I.push(`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@${J.host}:${J.port}`);let U=new H6(yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,n,u,_,l,d,E,h,yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NAME),yr.getConfigFromFile(pt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),I,R,b);l==null&&(delete U.tls.ca_file,delete U.leafnodes.tls.ca_file),t=ba.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await pf.writeJson(o,U),ya.trace(`Hub server config written to ${o}`));let F=`tls://${T.sys_name_encoded}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,M=`tls://${T.uri_encoded_name}:${T.uri_encoded_d_hash}@0.0.0.0:${h}`,Q=new G6(yr.getConfigFromFile(pt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,s,i,[F],[M],R,b,u,_,l,d);l==null&&delete Q.tls.ca_file,(t===void 0||t===mf.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await pf.writeJson(c,Q),ya.trace(`Leaf server config written to ${c}`))}a($6,"generateNatsConfig");async function hf(e){let t=Vu.get(e);return ba.isEmpty(t)&&Sf(`port undefined for '${e}'`),await ba.isPortTaken(t)&&Sf(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(hf,"isPortAvailable");function Sf(e){let t=`Error generating clustering config: ${e}`;ya.error(t),console.error(t),process.exit(1)}a(Sf,"generateNatsConfigError");async function Y6(e){let{port:t,config_file:r}=ng.getServerConfig(e),{username:n,decrypt_hash:s}=await rg.getClusterUser(),i=0,o=2e3;for(;i<ZP;){try{let l=await ng.createConnection(t,n,s,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ya.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=ZP)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 _=o*(i*2);_>3e4&&ya.notify("Operations API waiting for Nats server connection. This could be caused by large Nats streams or incorrect clustering config."),await ba.async_set_timeout(_)}let c="0".repeat(k6),u=Aa.join(Vu.get(pt.ROOTPATH),Oa,r);await pf.writeFile(u,c),await pf.remove(u),ya.notify(e,"started.")}a(Y6,"removeNatsConfig")});var oU=g((Whe,iU)=>{"use strict";var zr=ee(),K6=Xi(),pe=P(),$u=Ve(),Ls=require("path"),{PACKAGE_ROOT:gf}=P(),tU=ee(),Tf=z(),Na="/dev/null",W6=Ls.join(gf,"launchServiceScripts"),rU=Ls.join(gf,"utility/scripts"),Q6=Ls.join(rU,pe.HDB_RESTART_SCRIPT),nU=Ls.resolve(gf,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function sU(){let t=K6.licenseSearch().ram_allocation||pe.RAM_ALLOCATION_ENUM.DEFAULT,r=pe.MEM_SETTING_KEY+t,n={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return Tf.noBootFile()&&(n[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{name:pe.PROCESS_DESCRIPTORS.HDB,script:pe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:n,node_args:r,cwd:gf}}a(sU,"generateMainServerConfig");var z6=9930;function J6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(n!==z6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(J6,"generateNatsHubServerConfig");var j6=9940;function X6(){zr.initSync(!0);let e=zr.get(pe.CONFIG_PARAMS.ROOTPATH),t=Ls.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Ls.join(zr.get(pe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),pe.LOG_NAMES.HDB),n=tU.get(pe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),s=$u.LOG_LEVEL_FLAGS[zr.get(pe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(n!==j6?"-"+n:""),script:nU,args:s?`${s} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Na,i.error_file=Na),i}a(X6,"generateNatsLeafServerConfig");function Z6(){zr.initSync();let e=Ls.join(zr.get(pe.CONFIG_PARAMS.LOGGING_ROOT),pe.LOG_NAMES.HDB),t={name:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:pe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:W6,autorestart:!1};return zr.get(pe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Na,t.error_file=Na),t}a(Z6,"generateClusteringUpgradeV4ServiceConfig");function e9(){let e={[pe.PROCESS_NAME_ENV_PROP]:pe.PROCESS_DESCRIPTORS.RESTART_HDB};return Tf.noBootFile()&&(e[pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Tf.getEnvCliRootPath()),{...{name:pe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:rU},script:Q6}}a(e9,"generateRestart");function t9(){return{apps:[sU()]}}a(t9,"generateAllServiceConfigs");iU.exports={generateAllServiceConfigs:t9,generateMainServerConfig:sU,generateRestart:e9,generateNatsHubServerConfig:J6,generateNatsLeafServerConfig:X6,generateClusteringUpgradeV4ServiceConfig:Z6}});var gU=g((Jhe,TU)=>{"use strict";var ve=P(),r9=z(),Ps=sg(),Rf=ut(),Ms=Ve(),Ri=oU(),Af=ee(),Ai=$(),n9=fn(),{startWorker:aU,onMessageFromWorkers:s9}=Qe(),i9=Ra(),zhe=require("util"),o9=require("child_process"),a9=require("fs"),{execFile:c9}=o9,we;TU.exports={enterPM2Mode:u9,start:Oi,stop:ig,reload:uU,restart:lU,list:og,describe:dU,connect:Us,kill:E9,startAllServices:h9,startService:ag,getUniqueServicesList:fU,restartAllServices:m9,isServiceRegistered:EU,reloadStopStart:hU,restartHdb:_U,deleteProcess:d9,startClusteringProcesses:pU,startClusteringThreads:SU,isHdbRestartRunning:f9,isClusteringRunning:S9,stopClustering:p9,reloadClustering:T9};var Yu=!1;s9(e=>{e.type==="restart"&&Af.initSync(!0)});function u9(){Yu=!0}a(u9,"enterPM2Mode");function Us(){return we||(we=require("pm2")),new Promise((e,t)=>{we.connect((r,n)=>{Ai.setupConsoleLogging(),r&&t(r),e(n)})})}a(Us,"connect");var Nr,l9=10,cU;function Oi(e,t=!1){if(Yu)return _9(e);let r=c9(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Nr.indexOf(r);o>-1&&Nr.splice(o,1),!cU&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<l9&&(a9.existsSync(Ps.getHubConfigPath())?Oi(e):(await Ps.generateNatsConfig(!0),Oi(e),await new Promise(c=>setTimeout(c,3e3)),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let n={serviceName:e.name.replace(/ /g,"-")};function s(i){let o=Af.get(ve.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",f,n,i.slice(_,u.index).trim())}let[d,E]=u;_=u.index+d.length,l=Ms.LOG_LEVELS[E]}if(Ms.LOG_LEVEL_HIERARCHY[o]>=Ms.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Ms.LOG_LEVELS.ERR||l===Ms.LOG_LEVELS.WRN?Ai.OUTPUTS.STDERR:Ai.OUTPUTS.STDOUT;Ai.logCustomLevel(l||"info",d,n,i.slice(_).trim())}}if(a(s,"extractMessages"),r.stdout.on("data",s),r.stderr.on("data",s),r.unref(),Nr=[],!Nr&&!t){let i=a(()=>{cU=!0,Nr&&(Nr.map(o=>o.kill()),process.exit(0))},"kill_children");process.on("exit",i),process.on("SIGINT",i),process.on("SIGQUIT",i),process.on("SIGTERM",i)}Nr.push(r)}a(Oi,"start");function _9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.start(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(_9,"startWithPM2");function ig(e){if(!Yu){for(let t of Nr||[])t.name===e&&(Nr.splice(Nr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.stop(e,async(n,s)=>{n&&(we.disconnect(),r(n)),we.delete(e,(i,o)=>{i&&(we.disconnect(),r(n)),we.disconnect(),t(o)})})})}a(ig,"stop");function uU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.reload(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(uU,"reload");function lU(e){if(!Yu)for(let t of Nr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.restart(e,(n,s)=>{we.disconnect(),t(s)})})}a(lU,"restart");function d9(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.delete(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(d9,"deleteProcess");async function _U(){await Oi(Ri.generateRestart())}a(_U,"restartHdb");async function f9(){let e=await og();for(let t in e)if(e[t].name===ve.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(f9,"isHdbRestartRunning");function og(){return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.list((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(og,"list");function dU(e){return new Promise(async(t,r)=>{try{await Us()}catch(n){r(n)}we.describe(e,(n,s)=>{n&&(we.disconnect(),r(n)),we.disconnect(),t(s)})})}a(dU,"describe");function E9(){if(!Yu){for(let e of Nr||[])e.kill();Nr=[];return}return new Promise(async(e,t)=>{try{await Us()}catch(r){t(r)}we.killDaemon((r,n)=>{r&&(we.disconnect(),t(r)),we.disconnect(),e(n)})})}a(E9,"kill");async function h9(){try{await pU(),await SU(),await Oi(Ri.generateAllServiceConfigs())}catch(e){throw we?.disconnect(),e}}a(h9,"startAllServices");async function ag(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case ve.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Ri.generateMainServerConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Ri.generateNatsIngestServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Ri.generateNatsReplyServiceConfig();break;case ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Ri.generateNatsHubServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Ri.generateNatsLeafServerConfig(),await Oi(r,t),await Ps.removeNatsConfig(e);return;case ve.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Ri.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(r)}catch(r){throw we?.disconnect(),r}}a(ag,"startService");async function fU(){try{let e=await og(),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 we?.disconnect(),e}}a(fU,"getUniqueServicesList");async function m9(e=[]){try{let t=!1,r=await fU();for(let n=0,s=Object.values(r).length;n<s;n++){let o=Object.values(r)[n].name;e.includes(o)||(o===ve.PROCESS_DESCRIPTORS.HDB?t=!0:await lU(o))}t&&await hU(ve.PROCESS_DESCRIPTORS.HDB)}catch(t){throw we?.disconnect(),t}}a(m9,"restartAllServices");async function EU(e){if(Nr?.find(r=>r.name===e))return!0;let t=await i9.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(EU,"isServiceRegistered");async function hU(e){let t=Af.get(ve.CONFIG_PARAMS.THREADS_COUNT)??Af.get(ve.CONFIG_PARAMS.THREADS),r=await dU(e),n=r9.isEmptyOrZeroLength(r)?0:r.length;t!==n?(await ig(e),await ag(e)):e===ve.PROCESS_DESCRIPTORS.HDB?await _U():await uU(e)}a(hU,"reloadStopStart");var mU;async function pU(e=!1){for(let t in ve.CLUSTERING_PROCESSES){let r=ve.CLUSTERING_PROCESSES[t];await ag(r,e)}}a(pU,"startClusteringProcesses");async function SU(){mU=aU(ve.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ve.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE});try{await Rf.deleteLocalStream("__HARPERDB_WORK_QUEUE__")}catch{}await Rf.updateLocalStreams();let e=await n9.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ve.PRE_4_0_0_VERSION){Ai.info("Starting clustering upgrade 4.0.0 process"),aU(ve.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(SU,"startClusteringThreads");async function p9(){for(let e in ve.CLUSTERING_PROCESSES)if(e!==ve.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ve.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await mU.terminate();else{let t=ve.CLUSTERING_PROCESSES[e];await ig(t)}}a(p9,"stopClustering");async function S9(){for(let e in ve.CLUSTERING_PROCESSES){let t=ve.CLUSTERING_PROCESSES[e];if(await EU(t)===!1)return!1}return!0}a(S9,"isClusteringRunning");async function T9(){await Ps.generateNatsConfig(!0),await Rf.reloadNATSHub(),await Rf.reloadNATSLeaf(),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ps.removeNatsConfig(ve.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(T9,"reloadClustering")});var IU={};Fe(IU,{compactOnStart:()=>g9,copyDb:()=>NU});async function g9(){Wu.notify("Running compact on start"),console.log("Running compact on start");let e=(0,cg.get)(bi.CONFIG_PARAMS.ROOTPATH),t=new Map,r=mr();try{for(let n in r){if(n==="system")continue;let s;for(let u in r[n]){s=r[n][u].primaryStore.path;break}if(!s){console.log("Couldn't find any tables in database",n);continue}let i=(0,Of.join)(e,"backup",n+".mdb"),o=(0,Of.join)(e,bi.DATABASES_DIR_NAME,n+"-copy.mdb"),c=await RU(n);console.log("Database",n,"before compact has a total record count of",c),t.set(n,{db_path:s,copy_dest:o,backup_dest:i,record_count:c}),await NU(n,o),console.log("Backing up",n,"to",i),await(0,So.move)(s,i,{overwrite:!0})}Ku();for(let[n,{db_path:s,copy_dest:i}]of t)console.log("Moving copy compacted",n,"to",s),await(0,So.move)(i,s,{overwrite:!0}),await(0,So.remove)((0,Of.join)(e,bi.DATABASES_DIR_NAME,`${n}-copy.mdb-lock`));Ku()}catch(n){Wu.error("Error compacting database, rolling back operation",n),console.error("Error compacting database, rolling back operation",n),(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1);for(let[s,{db_path:i,backup_dest:o}]of t){console.error("Moving backup database",o,"back to",i);try{await(0,So.move)(o,i,{overwrite:!0})}catch(c){console.error(c)}}throw Ku(),n}for(let[n,{backup_dest:s,record_count:i}]of t){let o=!0,c=await RU(n);if(console.log("Database",n,"after compact has a total record count of",c),i!==c){o=!1;let u=`There is a discrepancy between pre and post compact record count for database ${n}.
|
|
11
13
|
Total record count before compaction: ${i}, total after: ${c}.
|
|
12
14
|
Database backup has not been removed and can be found here: ${s}`;Wu.error(u),console.error(u)}(0,cg.get)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTARTKEEPBACKUP)===!0||o===!1||(console.log("Removing backup",s),await(0,So.remove)(s))}(0,ug.updateConfigValue)(bi.CONFIG_PARAMS.STORAGE_COMPACTONSTART,!1)}async function RU(e){let t=await(0,yU.describeSchema)({database:e}),r=0;for(let n in t)r+=t[n].record_count;return r}async function NU(e,t){console.log("copyDb start");let r=mr()[e],n;for(let d in r){n=r[d].primaryStore.rootStore;break}let s=n.dbisDb,i=n.auditStore,o=(0,AU.open)(new OU.default(t)),c=o.openDB(bf.INTERNAL_DBIS_NAME),u,_=0,l=s.useReadTransaction();try{for(let{key:f,value:h}of s.getRange({transaction:l})){let p=h.is_hash_attribute||h.isPrimaryKey,S,T;if(p&&(S=h.compression,T=Nf(),T?h.compression=T:delete h.compression,S?.dictionary?.toString()===T?.dictionary?.toString()&&(S=null,T=null)),c.put(f,h),!(p||h.indexed))continue;let R=new bU.default(!p,p);R.encoding="binary",R.compression=S;let b=n.openDB(f,R);b.decoder=null,R.compression=T;let I=o.openDB(f,R);I.encoder=null,console.log("copying",f,"from",e,"to",t),await E(b,I,p,l)}let d=n.openDB(bf.AUDIT_STORE_NAME,yf);console.log("copying audit log"),E(i,d,!1,l);async function E(f,h,p,S){let T=0,R=0;for(let{key:b,value:I,version:B}of f.getRange({start:null,versions:p,transaction:S}))u=h.put(b,I,B),T++,S.openTimer&&(S.openTimer=0),R+=(b?.length||10)+I.length,_++>5e3&&(await u,console.log("copied",T,"entries",R,"bytes"),_=0);console.log("finish copying, copied",T,"entries",R,"bytes")}a(E,"copyDbi"),await u,console.log("copied database "+e+" to "+t)}finally{l.done(),o.close()}}var AU,Of,So,cg,OU,bU,bf,bi,yU,ug,Wu,wU=Re(()=>{Ae();AU=require("lmdb"),Of=require("path"),So=require("fs-extra"),cg=H(ee()),OU=H(Hc()),bU=H(xc()),bf=H(ft()),bi=H(P());ni();yU=H(bs()),ug=H(Er()),Wu=H($());a(g9,"compactOnStart");a(RU,"getTotalDBRecordCount");a(NU,"copyDb")});var ju=g((nme,UU)=>{"use strict";var R9=require("minimist"),{isMainThread:dg,parentPort:lg,threadId:tme}=require("worker_threads"),nt=P(),{PROCESS_DESCRIPTORS_VALIDATE:Qu}=nt,as=$(),fg=z(),wf=sg(),If=ut(),rme=Ve(),LU=Er(),cs=gU(),CU=Ra(),{compactOnStart:A9}=(wU(),ie(IU)),O9=Gh(),{restartWorkers:Cf,onMessageByType:b9}=Qe(),{handleHDBError:y9,hdb_errors:N9}=se(),{HTTP_STATUS_CODES:I9}=N9,Ju=ee();Ju.initSync();var zu=`Restarting HarperDB. This may take up to ${nt.RESTART_TIMEOUT_MS/1e3} seconds.`,w9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",DU="Clustering is not enabled so cannot be restarted",C9="Invalid service",Ia,En;UU.exports={restart:MU,restartService:Eg};dg&&b9(nt.ITC_EVENT_TYPES.RESTART,async(e,t)=>{e.workerType?await Eg({service:e.workerType}):MU({operation:"restart"}),t.postMessage({type:"restart-complete"})});async function MU(e){En=Object.keys(e).length===0,Ia=await cs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR);let t=R9(process.argv);if(t.service){await Eg(t);return}if(En&&!Ia){console.error(w9);return}if(En&&console.log(zu),Ia){cs.enterPM2Mode(),as.notify(zu);let r=O9(Object.keys(nt.CONFIG_PARAM_MAP),!0);return fg.isEmptyOrZeroLength(Object.keys(r))||LU.updateConfigValue(void 0,void 0,r,!0,!0),D9(),zu}return dg?(as.notify(zu),Ju.get(nt.CONFIG_PARAMS.STORAGE_COMPACTONSTART)&&await A9(),setTimeout(()=>{Cf()},50)):lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART}),zu}a(MU,"restart");async function Eg(e){let{service:t}=e;if(nt.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw y9(new Error,C9,I9.BAD_REQUEST,void 0,void 0,!0);if(Ia=await cs.isServiceRegistered(nt.HDB_PROC_DESCRIPTOR),!dg)return lg.postMessage({type:nt.ITC_EVENT_TYPES.RESTART,workerType:t}),new Promise(n=>{lg.on("message",s=>{s.type==="restart-complete"&&n()})});let r;switch(t){case Qu.clustering:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=DU;break}En&&console.log("Restarting clustering"),as.notify("Restarting clustering"),await PU();break;case Qu.clustering_config:case Qu["clustering config"]:if(!Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=DU;break}En&&console.log("Restarting clustering_config"),as.notify("Restarting clustering_config"),await cs.reloadClustering();break;case"custom_functions":case"custom functions":case Qu.harperdb:case Qu.http_workers:if(En&&!Ia){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}En&&console.log("Restarting http_workers"),as.notify("Restarting http_workers"),En?await cs.restart(nt.HDB_PROC_DESCRIPTOR):await Cf("http");break;default:r=`Unrecognized service: ${t}`;break}return r?(as.error(r),En&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Eg,"restartService");async function D9(){await PU(),await cs.restart(nt.HDB_PROC_DESCRIPTOR),await fg.async_set_timeout(2e3),Ju.get(nt.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await _g(),En&&(await If.closeConnection(),process.exit(0))}a(D9,"restartPM2Mode");async function PU(){if(!LU.getConfigFromFile(nt.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await CU.getHDBProcessInfo()).clustering.length===0)as.trace("Clustering not running, restart will start clustering services"),await wf.generateNatsConfig(!0),await cs.startClusteringProcesses(),await cs.startClusteringThreads(),await _g(),En&&await If.closeConnection();else{await wf.generateNatsConfig(!0),Ia?(as.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await cs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await cs.restart(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await CU.getHDBProcessInfo()).clustering.forEach(s=>{as.trace("Restart clustering killing process pid",s.pid),process.kill(s.pid)}),await fg.async_set_timeout(3e3),await _g(),await If.updateLocalStreams(),En&&await If.closeConnection(),as.trace("Restart clustering restarting ingest and reply service threads");let t=Cf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=Cf(nt.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(PU,"restartClustering");async function _g(){await wf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await wf.removeNatsConfig(nt.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(_g,"removeNatsConfig")});var YU=g((ome,$U)=>{"use strict";var ime=require("lodash"),Ir=P(),{handleHDBError:vU,hdb_errors:L9}=se(),{HDB_ERROR_MSGS:M9,HTTP_STATUS_CODES:P9}=L9,hg=$();$U.exports={getRolePermissions:v9};var To=Object.create(null),U9=a(e=>({key:e,perms:{}}),"perms_template_obj"),GU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),qU=a((e=!1,t=!1,r=!1,n=!1)=>({[Ir.PERMS_CRUD_ENUM.READ]:e,[Ir.PERMS_CRUD_ENUM.INSERT]:t,[Ir.PERMS_CRUD_ENUM.UPDATE]:r,[Ir.PERMS_CRUD_ENUM.DELETE]:n}),"permissions_template"),mg=a((e=!1,t=!1,r=!1,n=!1,s=!1)=>({attribute_permissions:[],describe:e,...qU(t,r,n,s)}),"table_perms_template"),BU=a((e,t=qU())=>({attribute_name:e,describe:VU(t),[Xu]:t[Xu],[pg]:t[pg],[Sg]:t[Sg]}),"attr_perms_template"),xU=a((e,t=!1)=>({attribute_name:e,describe:t,[Xu]:t}),"timestamp_attr_perms_template"),{READ:Xu,INSERT:pg,UPDATE:Sg}=Ir.PERMS_CRUD_ENUM,FU=Object.values(Ir.PERMS_CRUD_ENUM),kU=[Xu,pg,Sg];function v9(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Ir.SYSTEM_SCHEMA_NAME],t=e.role;let n=JSON.stringify([e.__updatedtime__,r]);if(To[t]&&To[t].key===n)return To[t].perms;let s=B9(e,r);return To[t]?To[t].key=n:To[t]=U9(n),To[t].perms=s,s}catch(r){if(!e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ir.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ir.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 hg.error(n),hg.debug(r),vU(new Error,M9.OUTDATED_PERMS_TRANSLATION_ERROR,P9.BAD_REQUEST)}else{let n=`There was an error while translating role permissions for role: ${t}.
|
|
13
15
|
${r.stack}`;throw hg.error(n),vU(new Error)}}}a(v9,"getRolePermissions");function B9(e,t){let r=Object.create(null);r.super_user=!1;let n=e.permission;r[Ir.SYSTEM_SCHEMA_NAME]=n[Ir.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]=x9(t[i]);return}r[i]=GU(),n[i]?(n[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(n[i].tables[o]){let c=n[i].tables[o],u=t[i][o],_=H9(c,u);r[i].describe||FU.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=mg()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=mg()})}),r}a(B9,"translateRolePermissions");function x9(e){let t=GU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=mg(!0,!0,!0,!0,!0)}),t}a(x9,"createStructureUserPermissions");function H9(e,t){let{attribute_permissions:r}=e;if(r.length>0){let s=Object.assign({},e);s.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,E=l;return Ir.TIME_STAMP_NAMES.includes(d)&&(E=xU(d,l[Xu])),_[d]=E,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=BU(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=VU(l),s.attribute_permissions.push(l),c||G9(l,u)}else if(_!==o){let l;Ir.TIME_STAMP_NAMES.includes(_)?l=xU(_):l=BU(_),s.attribute_permissions.push(l)}}),c||s.attribute_permissions.push(u),s.describe=HU(s),s}else return e.describe=HU(e),e}a(H9,"getTableAttrPerms");function HU(e){return FU.filter(t=>e[t]).length>0}a(HU,"getSchemaTableDescribePerm");function VU(e){return kU.filter(t=>e[t]).length>0}a(VU,"getAttributeDescribePerm");function G9(e,t){kU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(G9,"checkForHashPerms")});var KU={};Fe(KU,{Resources:()=>Df,keyArrayToString:()=>wa,resetResources:()=>q9,resources:()=>yi});function q9(){return yi=new Df}function wa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Df,yi,Zu=Re(()=>{so();Df=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,n,s){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:n,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!s)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let _=2;for(;(_=c.indexOf("/",_))>-1;){let l=this.get(c.slice(0,_));l&&(l.hasSubPaths=!0),_+=2}}}getMatch(t,r){let n=2,s;for(;(n=t.indexOf("/",n))>-1;){let c=t.slice(0,n),u=this.get(c);if(!u&&c.indexOf(".")>-1){let _=c.split(".");u=this.get(_[0])}if(u){if(u.relativeURL=t.slice(n),!u.hasSubPaths)return u;s=u}n+=2}if(s)return s;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return s=this.get(o),!s&&o.indexOf(".")>-1&&(s=this.get(o.split(".")[0])),s?s.relativeURL=i>-1?t.slice(i):"":s||(s=this.get(""),s&&(t[0]!=="/"&&(t="/"+t),s.relativeURL=t)),s}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 rt(r,async()=>{let s=this.getMatch(t);if(s)return t=s.relativeURL,n(s.Resource,s.path,t)})}setRepresentation(t,r,n){}};a(q9,"resetResources");a(wa,"keyArrayToString")});var WU={};Fe(WU,{Headers:()=>Ni,appendHeader:()=>Tg});function Tg(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}var Ni,el=Re(()=>{Ni=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}has(t){return typeof t!="string"&&(t=""+t),super.has(t.toLowerCase())}setIfNone(t,r){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase();if(!super.has(n))return super.set(n,[t,r])}append(t,r,n){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let s=t.toLowerCase(),i=super.get(s);if(i){let o=i[1];if(n)r=(typeof o=="string"?o:o.join(", "))+", "+r;else if(typeof o=="string")r=[o,r];else{o.push(r);return}}return super.set(s,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}};a(Tg,"appendHeader")});var tl={};Fe(tl,{authentication:()=>tv,bypassAuth:()=>W9,login:()=>z9,logout:()=>J9,start:()=>Q9});function W9(){ev=!0}async function tv(e,t){let r=e.headers.asObject,n=r.authorization,s=r.cookie,i=r.origin,o=[];try{if(i){let f=e.isOperationsServer?$9?V9:[]:k9?F9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ni([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return Lf&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),Lf&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(Lf){i||(i=r.host);let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=s?.split(/;\s+/)||[];for(let p of h)if(p.startsWith(f)){let S=p.indexOf(";");u=p.slice(f.length,S===-1?p.length:S),_=await zU.get(u);break}e.session=_||(_={})}let l=a((f,h,p)=>{let S=new Ca.AuthAuditLog(f,h,Ht.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=p,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===Ht.AUTH_AUDIT_STATUS.SUCCESS?QU.notify(S):QU.error(S)},"authAuditLog");if(e.mtlsConfig&&e.authorized){let f=e.mtlsConfig.user;f!==null?((f===void 0||f==="Common Name"||f==="CN")&&(f=e.peerCertificate.subject.CN),e.user=await at.getUser(f,null,null),l(f,Ht.AUTH_AUDIT_STATUS.SUCCESS,"mTLS")):(0,Ca.debug)("HTTPS/WSS mTLS authorized connection (mTLS did not authorize a user)","from",e.ip)}let d;if(!e.user)if(n){if(d=go.get(n),!d){let f=n.indexOf(" "),h=n.slice(0,f),p=n.slice(f+1),S,T;try{switch(h){case"Basic":let R=atob(p),b=R.indexOf(":");S=R.slice(0,b),T=R.slice(b+1),d=S||T?await at.getUser(S,T,e):null;break;case"Bearer":try{d=await(0,Mf.validateOperationToken)(p)}catch(I){if(I.message==="invalid token")try{return await(0,Mf.validateRefreshToken)(p),c({status:-1})}catch{throw I}}break}}catch(R){return K9&&(go.get(p)||(go.set(p,p),l(S,Ht.AUTH_AUDIT_STATUS.FAILURE,h))),c({status:401,body:Ro({error:R.message},e)})}go.set(n,d),Y9&&l(d.username,Ht.AUTH_AUDIT_STATUS.SUCCESS,h)}e.user=d}else _?.user?e.user=await at.getUser(_.user,null,e):(ev&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")||e?._nodeRequest?.socket?.server?._pipeName&&e.ip===void 0)&&(e.user=await(0,jU.getSuperUser)());Lf&&(e.session.update=function(f){if(!u){u=(0,XU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${u}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):E?.headers?.set&&E.headers.set("Set-Cookie",p)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):E?.headers?.set&&(i&&E.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),E.headers.set("X-Hdb-Session","Secure"))),f.id=u,zU.put(f)},e.login=async function(f,h){e.user=await at.getUser(f,h,e),e.session.update({user:e.user.username})},(d&&!_||_?.user?.username!==d?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let E=await t(e);return E&&(E.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yi.loginPath?(E.status=302,E.headers.set("Location",yi.loginPath(e))):E.headers.set("WWW-Authenticate","Basic")),c(E))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ni);for(let d=0;d<_;){let E=o[d++];l.set(E,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function Q9({server:e,port:t}){e.http(tv,{port:t||"all"}),JU||(JU=!0,setInterval(()=>{go=new Map},hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),ZU.user.addListener(()=>{go=new Map}))}async function z9(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 J9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var jU,Mf,XU,hn,Ht,Ca,ZU,QU,F9,k9,V9,$9,zU,Lf,ev,Y9,K9,go,JU,Pf=Re(()=>{jU=H(_n());lr();Zu();Mf=H(Du());Ae();XU=require("uuid"),hn=H(ee()),Ht=H(P()),Ca=H($()),ZU=H(Jc());el();Da();QU=(0,Ca.loggerWithTag)("auth-event");hn.initSync();F9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORSACCESSLIST),k9=hn.get(Ht.CONFIG_PARAMS.HTTP_CORS),V9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$9=hn.get(Ht.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),zU=Et({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),Lf=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,ev=hn.get(Ht.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Y9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,K9=hn.get(Ht.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,go=new Map;at.onInvalidatedUser(()=>{go=new Map});a(W9,"bypassAuth");a(tv,"authentication");a(Q9,"start");a(z9,"login");a(J9,"logout")});var cv=g((pme,av)=>{"use strict";var Ce=require("joi"),rv=require("fs-extra"),nv=require("path"),Bs=Xe(),sv=ee(),iv=P(),ov=$(),{hdb_errors:j9}=se(),{HDB_ERROR_MSGS:ir}=j9,vs=/^[a-zA-Z0-9-_]+$/;av.exports={getDropCustomFunctionValidator:Z9,setCustomFunctionValidator:e7,addComponentValidator:s7,dropCustomFunctionProjectValidator:i7,packageComponentValidator:o7,deployComponentValidator:a7,setComponentFileValidator:t7,getComponentFileValidator:n7,dropComponentFileValidator:r7};function Uf(e,t,r){try{let n=sv.get(iv.CONFIG_PARAMS.COMPONENTSROOT),s=nv.join(n,t);return rv.existsSync(s)?e?t:r.message(ir.PROJECT_EXISTS):e?r.message(ir.NO_PROJECT):t}catch(n){return ov.error(n),r.message(ir.VALIDATION_ERR)}}a(Uf,"checkProjectExists");function rl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(rl,"checkFilePath");function X9(e,t,r,n){try{let s=sv.get(iv.CONFIG_PARAMS.COMPONENTSROOT),i=nv.join(s,e,t,r+".js");return rv.existsSync(i)?r:n.message(ir.NO_FILE)}catch(s){return ov.error(s),n.message(ir.VALIDATION_ERR)}}a(X9,"checkFileExists");function Z9(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().pattern(vs).custom(X9.bind(null,e.project,e.type)).custom(rl).required().messages({"string.pattern.base":ir.BAD_FILE_NAME})});return Bs.validateBySchema(e,t)}a(Z9,"getDropCustomFunctionValidator");function e7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),type:Ce.string().valid("helpers","routes").required(),file:Ce.string().custom(rl).required(),function_content:Ce.string().required()});return Bs.validateBySchema(e,t)}a(e7,"setCustomFunctionValidator");function t7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).required(),payload:Ce.string().allow("").optional(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(t7,"setComponentFileValidator");function r7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),file:Ce.string().custom(rl).optional()});return Bs.validateBySchema(e,t)}a(r7,"dropComponentFileValidator");function n7(e){let t=Ce.object({project:Ce.string().required(),file:Ce.string().custom(rl).required(),encoding:Ce.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Bs.validateBySchema(e,t)}a(n7,"getComponentFileValidator");function s7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!1)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(s7,"addComponentValidator");function i7(e){let t=Ce.object({project:Ce.string().pattern(vs).custom(Uf.bind(null,!0)).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME})});return Bs.validateBySchema(e,t)}a(i7,"dropCustomFunctionProjectValidator");function o7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),skip_node_modules:Ce.boolean()});return Bs.validateBySchema(e,t)}a(o7,"packageComponentValidator");function a7(e){let t=Ce.object({project:Ce.string().pattern(vs).required().messages({"string.pattern.base":ir.BAD_PROJECT_NAME}),payload:Ce.string().optional().messages({"string.pattern.base":ir.BAD_PACKAGE}),package:Ce.string().optional()});return Bs.validateBySchema(e,t)}a(a7,"deployComponentValidator")});var Hf=g((Tme,hv)=>{"use strict";var vf=require("joi"),Bf=require("path"),uv=require("fs-extra"),{exec:c7}=require("child_process"),u7=require("util"),lv=u7.promisify(c7),nl=P(),{handleHDBError:La,hdb_errors:l7}=se(),{HTTP_STATUS_CODES:Ma}=l7,sl=ee(),_7=Xe(),Pa=$();sl.initSync();var gg=sl.get(nl.CONFIG_PARAMS.COMPONENTSROOT),_v="npm install --omit=dev --json",d7=`${_v} --dry-run`;hv.exports={installModules:m7,auditModules:p7,installAllRootModules:f7,uninstallRootModule:E7,linkHarperdb:h7};async function f7(e=!1){await xf(),await il(e?"npm install --ignore-scripts":"npm install",sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(f7,"installAllRootModules");async function E7(e){await il(`npm uninstall ${e}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(E7,"uninstallRootModule");async function h7(){await xf(),await il(`npm link ${nl.PACKAGE_ROOT}`,sl.get(nl.CONFIG_PARAMS.ROOTPATH))}a(h7,"linkHarperdb");async function il(e,t=void 0){let r,n;try{({stdout:r,stderr:n}=await lv(e,{cwd:t}))}catch(s){throw new Error(s.stderr.replace(`
|
|
@@ -25,8 +27,8 @@ Database backup has not been removed and can be found here: ${s}`;Wu.error(u),co
|
|
|
25
27
|
|
|
26
28
|
`:`data: ${e}
|
|
27
29
|
|
|
28
|
-
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});O0={type:"application/json",serializeStream:Lc,serialize:hl,deserialize:ite,q:.5};Ft.set("*/*",O0);Ft.set("",O0);a(ite,"tryJSONParse");a(Qg,"registerContentHandlers");ote=require("fastify-plugin"),ate=ote(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Zf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Zf,"findBestSerializer");p0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(eE,"serialize");a(Ro,"serializeMessage");a(cte,"streamToBuffer");a(yo,"getDeserializer");a(S0,"deserializerUnknownType");a(ute,"transformIterable")});function jg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?jg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let R=h.operator==="or",b=l(h.conditions,!R,f);return R?(I,B)=>b.some(U=>U(I,B)):(I,B)=>b.every(U=>U(I,B))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=Ste(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],b=Fs(n.attributes,R);if(b.relationship){if(o.length<2)throw new Xr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=b.definition?.tableClass||b.elements?.definition?.tableClass,B=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,I,s,B);if(b.relationship.to){i[o[0]]=B;let F=!!Fs(I.attributes,b.relationship.to)?.elements;U=Ete(U,b,I.primaryStore,F,B)}if(b.relationship.from){let F=a(M=>Ga({attribute:b.relationship.from,value:M},t,r,n,s,B),"searchEntry");b.elements?(i[o[0]]=B,U=hte(U,b,I.primaryStore,B,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Xr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(Xg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ds.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Xr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let R=_;_=l,l=R,R=!E,E=!d,d=R}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Xr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Xr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Xr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Xr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Xr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let R=S.getRange(T).map(h?function({key:b,value:I}){return this.isSync?I&&h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(I&&h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:b=>b.value==null?Ci.SKIP:b);return R.hasEntries=!0,R}else return S?S.getRange(T).map(h?function({key:R,value:b}){let I;return typeof R=="string"&&R.length>Tn.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(b):I={[o]:R},this.isSync?h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:b}){return this.isSync?b&&h(b)?R:Ci.SKIP:new Promise((I,B)=>setImmediate(()=>{try{I(b&&h(b)?R:Ci.SKIP)}catch(U){B(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(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 Ete(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=Gn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function hte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Gn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Gn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(Gn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((R,b)=>{let I,B;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(R);return S.idFilter&&(T.idFilter=S.idFilter),U}B=p(R,r,b),I=B?.value}else I=R[l];return I?Array.isArray(I)?I.some(h):h(I,B):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Xg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Xr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&rE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(R){let b=R[l],I;if(typeof b!="object"||!b||f?I=d(b):Array.isArray(b)?I=b.some(d):b instanceof Date&&(I=d(b.getTime())),E&&(S++,!I&&!T.idFilter&&++p/S*(i-S)>h)){let B=Ga(e,r.transaction.getReadTxn(),!1,t).map(Gn),U=new Set(B);T.idFilter=F=>U.has(Gn(F)),T.idFilter.idSet=U}return I}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function rE(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/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Xg[n]||n,n===Tn.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=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=rE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=dte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=_te*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=lte*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function nE(e){if(e)if(Di=e,xa.lastIndex=0,mte.test(e))try{let t=pl(new Ha,"");if(Dr!==Di.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=xa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=fte[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":xa.lastIndex=Dr;let f=pl(l?[]:new Ha,")");switch(l){case"":tE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=N0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");xa.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":xa.lastIndex=Dr,l?(E=pl(new Ha,"]"),E.name=l):E=pl(e.conditions?new Ha:[],"]"),e.conditions?(tE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?pte:xa,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function tE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+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 Xr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function y0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Xr.ClientError("wildcard can only be used at the end of a string")}function N0(e){let t=I0(e[0]);return e.length>1&&(t.next=N0(e.slice(1))),t}function I0(e){if(Array.isArray(e)){let t=I0(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Gn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Ste(e,t,r){return t*r/qs(e)}var Xr,Tn,ds,Ci,lte,_te,dte,fte,Jg,Xg,mte,xa,pte,Dr,Di,Ha,sE=Re(()=>{Xr=H(se()),Tn=H(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();lte=.3,_te=.1,dte=.05,fte={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(jg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(Ete,"joinTo");a(hte,"joinFrom");Xg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(rE,"estimateCondition");mte=/[()[\]|!<>.]|(=\w*=)/,xa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,pte=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(nE,"parseQuery");a(pl,"parseBlock");a(tE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(y0,"wildcardDecoding");a(N0,"toSortObject");a(I0,"toSortEntry");Ha=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Gn,"flattenKey");a(qs,"estimatedEntryCount");a(Ste,"intersectionEstimate")});function M0(e){let t={openapi:Tte,info:{title:"HarperDB HTTP REST interface",version:(0,L0.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)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:b,name:I,elements:B,relationship:U,definition:F}of o){if(U)b==="array"?_[I]={type:"array",items:{$ref:Li+B.type}}:_[I]={$ref:Li+b};else{let M=F??B?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new D0(Q)}b==="array"?_[I]={type:"array",items:{$ref:Li+M.type}}:_[I]={$ref:Li+M.type}}else b==="array"?B.type==="Any"||B.type=="ID"?_[I]={type:"array",items:{format:B.type}}:_[I]={type:"array",items:new rR(Zg[B.type],B.type)}:b==="Any"||b=="ID"?_[I]={format:b}:_[I]=new rR(Zg[b],b)}l.push(new nR(I,"query",_[I]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new D0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new gte(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new C0(l,r,"delete all the records that match the provided query",{204:new w0})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new Rte([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new C0([E],r,"delete a record with the given primary key",{204:new w0})),S&&f.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function gte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function w0(){this.description="successfully processed request, no content returned to client"}function Rte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function C0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function D0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var L0,Tte,Zg,Li,sR,P0=Re(()=>{L0=H(ef()),Tte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(M0,"generateJsonApi");a(gte,"Post");a(eR,"Get");a(tR,"Response200");a(w0,"Response204");a(Rte,"Put");a(C0,"Delete");a(D0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var oE={};Fe(oE,{start:()=>bte});async function Ote(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&nE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==U0){let h=iE.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new Fa.ClientError(h,400)}if(e.authorize=!0,i===U0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return M0(iE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Ate[0]=d;let h=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),iR.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:l,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=eE(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=eE(i.contentType?i:i.toString(),e,o),o}}function bte(e){iR=e,!v0&&(v0=!0,iE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Ote(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;B0||(B0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=iE.getMatch(u);if(Wr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Sr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Sr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(yte[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,Ate,iR,U0,v0,iE,B0,gl,yte,x0=Re(()=>{Da();Ds();No=H($()),Fa=H(se());sE();Cc();so();el();P0();Qt=new Uint8Array(8),Ate=new Float64Array(Qt.buffer,0,1),iR={},U0="openapi";a(Ote,"http");gl=0;a(bte,"start");yte={401:3e3,403:3003}});var oR=g((ape,G0)=>{var{recordAction:aE,recordActionBinary:H0}=(Ds(),ie(pu)),Nte=require("fastify-plugin"),Ite=200;G0.exports=Nte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),aE(o,"duration",_,d,l),H0(s.raw.statusCode<400,"success",_,d,l),H0(1,s.raw.statusCode,_,d,l);let E=Ite;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{aE(performance.now()-c,"transfer",_,d,l),aE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,aE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((lpe,V0)=>{var _E=require("clone"),dE=Xe(),wte=z(),uE=P(),cpe=$(),aR=require("fs"),uR=require("joi"),{string:lE}=uR.types(),{hdb_errors:Cte,handleHDBError:cE}=se(),{HDB_ERROR_MSGS:upe,HTTP_STATUS_CODES:cR}=Cte,{common_validators:ka}=jn(),q0=" is required",Dte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Dte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Lte={schema:lE.required(),table:lE.required(),action:lE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Mte,AWS_SECRET:Pte,AWS_BUCKET:Ute,AWS_FILE_KEY:vte,REGION:Bte}=uE.S3_BUCKET_AUTH_KEYS,xte={s3:{presence:!0},[`s3.${Mte}`]:{presence:!0,type:"String"},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String"},[`s3.${vte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Bte}`]:{presence:!0,type:"String"}},F0=_E(lR);F0.data.presence={message:q0};var k0=_E(lR);k0.file_path.presence={message:q0};var Hte=Object.assign(_E(lR),xte),_R=_E(Lte);_R.csv_url=lE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function Gte(e){let t=dE.validateObject(e,F0);return fE(e,t)}a(Gte,"dataObject");function qte(e){let t=dE.validateBySchema(e,uR.object(_R));return fE(e,t)}a(qte,"urlObject");function Fte(e){let t=dE.validateObject(e,k0);return fE(e,t)}a(Fte,"fileObject");function kte(e){let t=dE.validateObject(e,Hte);return fE(e,t)}a(kte,"s3FileObject");function fE(e,t){if(!t){let r=wte.checkGlobalSchemaTable(e.schema,e.table);if(r)return cE(new Error,r,cR.BAD_REQUEST);if(e.operation===uE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===uE.NODE_ERROR_CODES.ENOENT?cE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===uE.NODE_ERROR_CODES.EACCES?cE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):cE(n)}}return t}a(fE,"postValidateChecks");V0.exports={dataObject:Gte,urlObject:qte,fileObject:Fte,s3FileObject:kte}});var fR=g((dpe,$0)=>{"use strict";var Rl=$(),EE=P();async function Vte(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===EE.OPERATIONS_ENUM.INSERT||t.operation===EE.OPERATIONS_ENUM.UPDATE||t.operation===EE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===EE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a(Vte,"callOperationFunctionAsAwait");$0.exports={callOperationFunctionAsAwait:Vte}});var K0=g((Epe,Y0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Y0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var Q0=g((mpe,W0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};W0.exports=mR});var AR=g((Ape,_B)=>{"use strict";var hE=qr(),pE=dR(),$te=require("needle"),qn=P(),Spe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:nB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=nB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var Fn=require("fs-extra"),Yte=require("path"),{chain:z0}=require("stream-chain"),J0=require("stream-json/streamers/StreamArray"),j0=require("stream-json/utils/Batch"),X0=require("stream-chain/utils/comp"),{finished:Z0}=require("stream"),Kte=ee(),sB=fR(),Wte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:Qte}=K0(),gR=Lg(),{verifyBulkLoadAttributePerms:iB}=Wf(),Tpe=Q0(),gpe=ut(),Rpe=Os(),{databases:zte}=(Ae(),ie(ke)),{coerceType:Jte}=(SE(),ie(OR)),eB="No records parsed from csv file.",Io=`${Kte.get("HDB_ROOT")}/tmp`,{schema_regex:jte}=jn(),tB=1024*1024*2,rB=5e3,Xte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_B.exports={csvDataLoad:Zte,csvURLLoad:ere,csvFileLoad:tre,importFromS3:rre};async function Zte(e,t){let r=pE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=cB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&iB(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new Qte(e.action,e.schema,e.table,i.data);return n=await sB.callOperationFunctionAsAwait(uB,u,null),n.message===eB?eB:lB(n.records,n.number_written)}catch(s){throw Co(s)}}a(Zte,"csvDataLoad");async function ere(e){let t=pE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await nre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RR(s);return await mE(n),i}catch(s){throw await mE(n),Co(s)}}a(ere,"csvURLLoad");async function tre(e){let t=pE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(tre,"csvFileLoad");async function rre(e){let t=pE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Yte.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await sre(s,e);let o=await RR(i);return await mE(r),o}catch(n){throw await mE(r),Co(n)}}a(rre,"importFromS3");async function nre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await $te("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 lt(n,s,n.statusCode,qn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ore(r,e.csv_url),await ire(t,r.raw)}a(nre,"downloadCSVFile");async function sre(e,t){try{let r=`${Io}/${e}`;await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await Fn.createWriteStream(r),s=await Wte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(sre,"downloadFileFromS3");async function ire(e,t){try{await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(ire,"writeFileToTempFolder");async function mE(e){if(e)try{await Fn.access(e),await Fn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(mE,"deleteTempFile");function ore(e,t){if(e.statusCode!==nB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!Xte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(ore,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case qn.VALID_S3_FILE_TYPES.CSV:t=await are(e);break;case qn.VALID_S3_FILE_TYPES.JSON:t=await cre(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return lB(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function oB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(oB,"validateChunk");async function aB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await sB.callOperationFunctionAsAwait(uB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(aB,"insertChunk");async function are(e){let t={records:0,number_written:0},r=cB(e.schema,e.table);try{let n=new gR,s=Fn.createReadStream(e.file_path,{highWaterMark:tB});s.setEncoding("utf8"),await pR.parsePromise(s,oB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=Fn.createReadStream(e.file_path,{highWaterMark:tB}),s.setEncoding("utf8"),await pR.parsePromise(s,aB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(are,"callPapaParse");function cB(e,t){let r=zte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Jte(i,s));return n}a(cB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function cre(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new j0({batchSize:rB}),X0(async c=>{await oB(e,n,r,c)})]);await new Promise((c,u)=>{Z0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new j0({batchSize:rB}),X0(async c=>{await aB(e,t,r,c)})]);return await new Promise((c,u)=>{Z0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(cre,"insertJson");async function uB(e){let t={};try{e.data&&e.data.length>0&&ure(e.data[0])?t=await lre(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(uB,"callBulkFileLoad");function ure(e){let t=Object.keys(e);for(let r of t)if(!jte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ure,"validateColumnNames");async function lre(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hE.insert;break;case"update":i=hE.update;break;case"upsert":i=hE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(lre,"bulkFileLoad");function lB(e,t){return`successfully loaded ${t} of ${e} records`}a(lB,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var fB=g((bpe,dB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dB.exports=bR});var mB=g((Npe,hB)=>{"use strict";var _re=P(),EB=require("moment"),dre=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=dre(),this.type=void 0,this.start_datetime=EB().valueOf(),this.created_datetime=EB().valueOf(),this.end_datetime=void 0,this.status=_re.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hB.exports=yR});var NR=g((wpe,bB)=>{"use strict";var fre=require("uuid").v4,RB=qr(),AB=Gr(),Ere=rs(),hre=oa(),mre=fB(),Ze=P(),pre=mB(),Sre=Wd(),gn=$(),Tre=Ic(),Ya=z(),{promisify:gre}=require("util"),Do=require("moment"),Rre=zf(),TE=dR(),pB=jm(),{deleteTransactionLogsBeforeValidator:Are}=Ng(),{handleHDBError:SB,hdb_errors:Ore}=se(),{HTTP_STATUS_CODES:TB}=Ore,gB=AB.searchByValue,bre=AB.searchByHash,yre=RB.insert,Nre=gre(Rre.evaluateSQL),Ire=RB.update;bB.exports={addJob:Dre,updateJob:Mre,handleGetJob:wre,handleGetJobsByStartDate:Cre,getJobById:OB};async function wre(e){try{let t=await OB(e.id);return Ya.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw gn.error("There was an error getting job",t),new Error(r)}}a(wre,"handleGetJob");async function Cre(e){try{let t=await Lre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(Cre,"handleGetJobsByStartDate");async function Dre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=TE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=TE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=TE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=TE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=pB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=pB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Are(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw SB(new Error,"Invalid service",TB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw SB(n,n.message,TB.BAD_REQUEST,void 0,void 0,!0);let s=new pre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Ere(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await gB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=fre();try{o=await gB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Tre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await yre(u)}catch(l){return gn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Dre,"addJob");async function Lre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.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 mre(n,e.hdb_user);try{return await Nre(s)}catch(i){throw gn.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(Lre,"getJobsInDateRange");async function OB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new hre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await bre(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(OB,"getJobById");async function Mre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new Sre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Ire(t),r}a(Mre,"updateJob")});var MB=g((Dpe,LB)=>{"use strict";var yB=z(),Mt=P(),Pre=require("moment"),gE=AR(),Al=$(),NB=NR(),IB=Jf(),wB=ci(),CB=Qe(),Ure=Vf(),vre=ju(),{parentPort:Bre,isMainThread:DB}=require("worker_threads"),{onMessageByType:xre}=Qe(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hre(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(yB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,gE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,gE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,gE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,gE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,IB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,IB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,wB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,wB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,Ure.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,vre.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Pre().valueOf(),await NB.updateJob(e.job),await Gre(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):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await NB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function Gre(e){Al.trace("launching job thread:",e),DB?CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):Bre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Gre,"launchJobThread");DB&&xre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});LB.exports={parseMessage:Hre,RunnerMessage:IR}});var UB=g((Mpe,PB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};PB.exports=wR});var jB=g((Upe,UR)=>{"use strict";var yE=Gr(),LR=zf(),RE=AR(),ks=bu(),AE=bs(),bl=ci(),qre=$S(),Ol=_n(),OE=ZS(),Jt=yg(),bE=$(),Fre=rT(),kre=af(),vB=vT(),Vre=uf(),$re=xT(),Yre=HT(),Kre=FT(),Wre=VT(),CR=KT(),BB=Jf(),Qre=Wf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:xB}=Nl,DR=jT(),HB=ju(),WB=require("util"),Ka=qr(),zre=ys(),Jre=Ra(),GB=MB(),qB=Du(),FB=(Pf(),ie(tl)),kB=Er(),VB=Vf(),$B=Hf(),{setServerUtilities:jre}=(SE(),ie(OR)),{CONTEXT:Xre}=(cn(),ie($p)),{_assignPackageExport:Zre}=require("../index"),{transformReq:ene}=z(),{server:tne}=(lr(),ie(Gi)),or=bE.loggerWithTag("operation"),rne=fR(),YB=yE.searchByHash,nne=yE.searchByValue,sne=WB.promisify(yE.search),ine=WB.promisify(LR.evaluateSQL),one={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=UB();async function QB(e,t){try{if(e.body.operation!=="read_log"&&(bE.log_level===k.LOG_LEVELS.INFO||bE.log_level===k.LOG_LEVELS.DEBUG||bE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;or.info(o)}}catch(n){or.error(n)}let r=await rne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return one[e.body.operation]&&zre.setSchemaDataToGlobal(n=>{n&&or.error(n)}),r}a(QB,"processLocalTransaction");var KB=cne();UR.exports={chooseOperation:zB,getOperationFunction:JB,operation:PR,processLocalTransaction:QB};jre(UR.exports);tne.operation=PR;function zB(e){let t;try{t=JB(e)}catch(s){throw or.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=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Qre.verifyPerms(i,s);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(zB,"chooseOperation");function JB(e){if(or.trace(`getOperationFunction with operation: ${e.operation}`),KB.has(e.operation))return KB.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(JB,"getOperationFunction");Zre("operation",PR);function PR(e,t){e.hdb_user=this[Xre]?.user,e.bypass_auth=!t;let r=zB(e);return QB({body:e},r)}a(PR,"operation");async function ane(e){or.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:or.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){or.info("Invalid operation in transaction"),or.error(o)}}a(ane,"catchup");async function kn(e){ene(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,or.info("addJob result",r);let n=new GB.RunnerMessage(t,e);return{message:await GB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw or.error(s),yl(n,s)}}a(kn,"executeJob");function cne(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(yE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(nne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(sne)),e.set(k.OPERATIONS_ENUM.SQL,new Y(ine)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(kn,RE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(kn,RE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(kn,RE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(kn,RE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(AE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(AE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(OE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(OE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(OE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(OE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(Fre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(kre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(vB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(vB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y(Vre)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y($re)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y(Yre)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(kB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Kre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Wre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(kn,BB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(kn,BB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(HB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(kn,HB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(ane)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Jre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(kn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(qre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(qB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(qB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(FB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(FB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(kB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(VB.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(kn,VB.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y($B.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y($B.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(cne,"initializeOperationFunctionMap")});var IE=g((Bpe,ex)=>{"use strict";var vR=P(),une=z(),Il=$(),{handleHDBError:BR,hdb_errors:NE}=se(),{isMainThread:lne}=require("worker_threads"),{Readable:_ne}=require("stream"),XB=require("os"),dne=require("util"),fne=dT(),Ene=dne.promisify(fne.authorize),ZB=jB(),{createGzip:hne,constants:mne}=require("zlib");function pne(e){let t=`Found an uncaught exception with message: ${e.message}. ${XB.EOL}Stack: ${e.stack} ${XB.EOL}Terminating ${lne?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(pne,"handleServerUncaughtException");function Sne(e,t,r){if(Il[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:NE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Sne,"serverErrorHandler");function Tne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(une.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Tne,"reqBodyValidationHandler");function gne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?Ene(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,NE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(gne,"authHandler");async function Rne(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=ZB.chooseOperation(e.body);let s=await ZB.processLocalTransaction(e,n);if(s instanceof _ne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(hne({level:mne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(Rne,"handlePostRequest");ex.exports={authHandler:gne,handlePostRequest:Rne,handleServerUncaughtException:pne,serverErrorHandler:Sne,reqBodyValidationHandler:Tne}});var sx=g((Hpe,nx)=>{"use strict";var Ane=require("fastify-plugin"),{handlePostRequest:tx,authHandler:One,reqBodyValidationHandler:bne}=IE();async function yne(e){e.decorate("hdbCore",{preValidation:[bne,One],request:t=>rx(tx(t,response)),requestWithoutAuthentication:(t,r)=>rx(tx(t,r,!0))})}a(yne,"hdbCore");async function rx(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(rx,"convertAsyncIterators");nx.exports=Ane(yne)});var ax=g((Fpe,ox)=>{"use strict";var qpe=require("fs"),xR=ee();xR.initSync();var{CONFIG_PARAMS:ix}=P(),Nne=1024*1024*1024;function Ine(e){let t=xR.get(ix.HTTP_TIMEOUT),r=xR.get(ix.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Nne,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ine,"getServerOptions");ox.exports=Ine});var lx=g((Vpe,ux)=>{"use strict";var HR=ee();HR.initSync();var{CONFIG_PARAMS:cx}=P();function wne(){let e=HR.get(cx.HTTP_CORSACCESSLIST),t=HR.get(cx.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(wne,"getCORSOptions");ux.exports=wne});var fx=g((Ype,dx)=>{"use strict";var _x=ee();_x.initSync();var Cne=P();function Dne(){return _x.get(Cne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Dne,"getHeaderTimeoutConfig");dx.exports=Dne});var qR={};Fe(qR,{customFunctionsServer:()=>Pne,ready:()=>wx,start:()=>Mne});function Mne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=Ix(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!Ex.has(c)){Ex.add(c);try{o.register(vne(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:wx}}async function Pne(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Une();let e=gx.get(Rx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await Ix(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Une(){try{Ye.info("Custom Functions starting configuration."),await Ax.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function vne(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,hx.existsSync)(e)&&r.register(Tx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Ix(e){Ye.info("Custom Functions starting buildServer.");let t=(0,Ox.default)(e),r=(0,mx.default)(t);r.server.headersTimeout=(0,yx.default)(),r.setErrorHandler(Nx.serverErrorHandler);let n=(0,bx.default)();return n&&r.register(px.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Sx.default),await r.register(Lne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function wx(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,hx,mx,px,Sx,Tx,gx,Rx,Ye,Lne,Ax,Ox,bx,yx,Nx,Vs,Ex,Cx=Re(()=>{GR=require("path"),hx=require("fs"),mx=H(require("fastify")),px=H(require("@fastify/cors")),Sx=H(oR()),Tx=H(require("@fastify/autoload")),gx=H(ee()),Rx=H(P()),Ye=H($()),Lne=H(sx()),Ax=H(_n()),Ox=H(ax()),bx=H(lx()),yx=H(fx()),Nx=H(IE());Da();lr();Ex=new Set;a(Mne,"start");a(Pne,"customFunctionsServer");a(Une,"setUp");a(vne,"buildRouteFolder");a(Ix,"buildServer");a(wx,"ready")});var FR={};Fe(FR,{start:()=>Bne});function Bne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Ux.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Lx||(Lx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Dx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Mx.default)(s,(0,Px.realpathSync)(o))}}return i(s)},{runFirst:!0})),Dx.set(r,n)}}}var Mx,Px,Ux,Dx,Lx,vx=Re(()=>{Mx=H(require("send")),Px=require("fs"),Ux=H(require("serve-static")),Dx=new Map;a(Bne,"start")});function Gne(){let e=(0,Gx.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{DE.notify(e)},Hne).unref())}function qne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:ja.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===ja.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});xne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=CE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)qx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Fx(e=0,t){if(typeof e=="string")try{(0,LE.existsSync)(e)&&(0,LE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Fne:r=kne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=qx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(Bx){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Bx.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.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(),o.localPort=e,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),qne(0));Sr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Kne(l,c,e)}Sr(!0,"socket-routed")})};let s=du();DE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=wE)return wE=i,t(r);n=i}wE=0,t(r)}function Fne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function kne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function $ne(){wE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+Vne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Kne(e,t,r){let n=Yne++;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(),CE.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")),CE.delete(n)),s.event=="destroy"&&(e.destroy(),CE.delete(n))})}var $s,za,ja,DE,LE,Hx,Gx,Wa,Qa,qx,Bx,kR,xne,VR,Hne,$R,wE,xx,Ja,Vne,CE,Yne,kx=Re(()=>{$s=H(Qe()),za=require("net"),ja=H(P()),DE=H($()),LE=require("fs");Ds();Hx=require("worker_threads"),Gx=H(Xi()),Wa=[],Qa=[],qx=[],kR=0,xne=[];Hx.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===ja.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),Gne())}));Hne=6e5;a(Gne,"licenseWarning");a(qne,"startHTTPWorker");a(Fx,"startSocketServer");wE=0;a(YR,"findMostIdleWorker");xx=36e5,Ja=new Map;a(Fne,"findByRemoteAddressAffinity");a(kne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+xx<e&&Ja.delete(t)},xx).unref();Vne=1e3;a($ne,"updateWorkerIdleness");(0,$s.setMonitorListener)($ne);CE=new Map,Yne=1;a(Kne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>ME});var Vx,KR,WR,QR,ME,PE=Re(()=>{Vx=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(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 WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Vx.platform)()!="win32"&&(ME=require("node-unix-socket").createReuseportFd)});var Wx=g((oSe,Kx)=>{"use strict";var Wne=require("cluster"),Lo=ee();Lo.initSync();var Yx=P(),tSe=require("util"),Ys=$(),rSe=require("fs"),Qne=require("fastify"),nSe=du(),zne=require("@fastify/cors"),Jne=require("@fastify/compress"),jne=require("@fastify/static"),Xne=oR(),Zne=require("path"),{PACKAGE_ROOT:ese}=P(),tse=ys(),rse=z(),nse=_n(),sse=Xi(),{server:ise}=(lr(),ie(Gi)),{node_request_key:sSe}=(PE(),ie(zR)),{authHandler:ose,handlePostRequest:ase,serverErrorHandler:cse,reqBodyValidationHandler:use}=IE(),iSe=require("net"),{registerContentHandlers:lse}=(Da(),ie(b0)),_se=6e4,dse=1024*1024*1024,fse="TRUE",{CONFIG_PARAMS:wl}=Yx,Xa;Kx.exports={hdbServer:$x,start:$x};async function $x(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Wne.isMaster,await Ese();let t=e.securePort>0;Xa=hse(t),await Xa.ready(),e||(e={}),e.isOperationsServer=!0;try{ise.http(Xa.server,e),Xa.server.closeIdleConnections||await Xa.listen({port:0,host:"::"})}catch(r){throw Xa.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a($x,"operationsServer");async function Ese(){Ys.trace("Configuring HarperDB process."),tse.setSchemaDataToGlobal(),await nse.setUsersToGlobal(),await sse.getLicense()}a(Ese,"setUp");function hse(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=mse(e),r=Qne(t);r.server.headersTimeout=Sse(),r.setErrorHandler(cse);let n=pse();n&&r.register(zne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Xne),r.register(Jne),r.register(jne,{root:Zne.join(ese,"studio/build-local")}),lse(r);let s=Lo.get(Yx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!rse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[use,ose],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ase(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(hse,"buildServer");function mse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:dse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(mse,"getServerOptions");function pse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(pse,"getCORSOpts");function Sse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??_se}a(Sse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>gse,publishToStream:()=>BE,setNATSReplicator:()=>JR,setPublishToStream:()=>Rse,setSubscription:()=>eA,start:()=>Tse});function Tse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ose()}function gse(e=!0){Xx=e}function Rse(e,t){BE=e,eA=t}function Ose(){if(Xx||process.env._DISABLE_NATS)return;let e=mr(),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];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&eH(r)}),!Qx&&(Qx=!0)}function JR(e,t,r){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 $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){eH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ase)}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 UE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Zx;return i}a(n,"getNATSTransaction")}function eH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);BE(`${XR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 zx,XR,ZR,Jx,jx,Cl,Dl,vE,Xx,BE,eA,Ase,Zx,Qx,UE,jR,tH=Re(()=>{Ae();cn();zx=H(ut()),XR=H(Ve()),ZR=H(Os());Cc();Jx=H(MS()),jx=H(vr()),Cl=H(ee()),Dl=H(P()),vE=H($());a(Tse,"start");a(gse,"disableNATS");BE=zx.publishToStream,eA=Jx.setSubscription;a(Rse,"setPublishToStream");Ase=2;a(Ose,"assignReplicationSource");a(JR,"setNATSReplicator");a(eH,"publishSchema");UE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(vE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(BE(`${XR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw vE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},jR=class extends UE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,jx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Zx=new jR});var mH=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:xE}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Nse,IncomingMessage:Ise}=require("http"),{createServer:wse}=require("https"),{readFileSync:Cse,unlinkSync:rH,existsSync:Dse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:qE}=(lr(),ie(Gi)),{WebSocketServer:Lse}=require("ws"),{createSecureContext:Mse,createServer:Pse}=require("node:tls"),{getTicketKeys:aH,restartNumber:Use,getWorkerIndex:Pl}=Qe(),{Headers:cH,appendHeader:vse}=(el(),ie(WU)),{recordAction:Ll,recordActionBinary:nH}=(Ds(),ie(pu)),{Request:uH,createReuseportFd:sH}=(PE(),ie(zR)),{checkMemoryLimit:Bse}=Xi(),{X509Certificate:xse}=require("crypto"),lH=require("tls"),Hse=lH.createSecureContext,Za;lH.createSecureContext=function(e){return Za||Hse(e)};var _H=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(_H){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){Use<=1&&Pt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:fSe,CONFIG_PARAMS:Gse}=_t;qe.initSync();var qse=qe.get(Gse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=dH;Mi.when_components_loaded=null;Mi.createSNICallback=_A;qE.http=lA;qE.request=$se;qE.socket=Yse;qE.ws=Kse;var nA={},HE={},Fse,Ks={},GE={},kse=[],oA=[];function dH(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)Vse(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",xE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
30
|
+
`},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,n]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let s=t[r];Array.isArray(s)?s.push(n):t.key=[s,n]}else t[r]=n},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});O0={type:"application/json",serializeStream:Lc,serialize:hl,deserialize:ite,q:.5};Ft.set("*/*",O0);Ft.set("",O0);a(ite,"tryJSONParse");a(Qg,"registerContentHandlers");ote=require("fastify-plugin"),ate=ote(function(e,t,r){e.addHook("preSerialization",async(n,s)=>{if(s.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Zf(n.raw);s.type(c),s.serializer(function(u){return(o.serializeStream||o.serialize)(u,{headers:{set:(_,l)=>{s.header(_,l)}}})})}),r()},{name:"content-type-negotiation"});a(Zf,"findBestSerializer");p0=$g.default.get(Yg.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(eE,"serialize");a(Ro,"serializeMessage");a(cte,"streamToBuffer");a(yo,"getDeserializer");a(S0,"deserializerUnknownType");a(ute,"transformIterable")});function jg(e,t,r,n,s,i,o,c){let u=e[0];if(t==="or"){let d=_(u);for(let f=1;f<e.length;f++){let h=e[f],p=_(h);d=d.concat(p)}let E=new Set;return d.filter(f=>{let h=f.key??f;return E.has(h)?!1:(E.add(h),!0)})}else{let d=_(u),E=l(e.slice(1),!0,u.estimated_count);return E.length>0?o(d,E):d}function _(d){return d.conditions?jg(d.conditions,d.operator,r,n,s,i,o,c):Ga(d,n,d.descending||s.reverse===!0,r,s.allowFullScan,c)}a(_,"executeCondition");function l(d,E,f){return d.map((h,p)=>{if(h.conditions){let R=h.operator==="or",b=l(h.conditions,!R,f);return R?(I,B)=>b.some(U=>U(I,B)):(I,B)=>b.every(U=>U(I,B))}let S=(h.attribute||h[0])===r.primaryKey,T=Tl(h,r,i,c,S,f);return E&&p<d.length-1&&f&&(f=Ste(r.primaryStore,h.estimated_count,f)),T}).filter(Boolean)}a(l,"mapConditionsToFilters")}function Ga(e,t,r,n,s,i){let o=e[0]??e.attribute,c=e[1]??e.value,u=e.comparator;if(Array.isArray(o)){let R=o[0],b=Fs(n.attributes,R);if(b.relationship){if(o.length<2)throw new Xr.ClientError("Can not directly query a relational attribute, must query an attribute within the target table");let I=b.definition?.tableClass||b.elements?.definition?.tableClass,B=new Map,U=Ga({attribute:o.length>2?o.slice(1):o[1],value:c,comparator:u},t,r,I,s,B);if(b.relationship.to){i[o[0]]=B;let F=!!Fs(I.attributes,b.relationship.to)?.elements;U=Ete(U,b,I.primaryStore,F,B)}if(b.relationship.from){let F=a(M=>Ga({attribute:b.relationship.from,value:M},t,r,n,s,B),"searchEntry");b.elements?(i[o[0]]=B,U=hte(U,b,I.primaryStore,B,F)):U=U.flatMap(F)}return U}else if(o.length===1)o=o[0];else throw new Xr.ClientError("Unable to query by attribute "+JSON.stringify(o))}let _,l,d,E;c instanceof Date&&(c=c.getTime());let f;switch(Xg[u]||u){case"lt":_=!0,l=c;break;case"le":_=!0,l=c,d=!0;break;case"gt":_=c,E=!0;break;case"ge":_=c;break;case"prefix":Array.isArray(c)?c[c.length-1]!=null&&(c=c.concat(null)):c=[c,null],_=c,l=c.slice(0),l[l.length-1]=ds.MAXIMUM_KEY;break;case"starts_with":_=c.toString(),l=c+"\uFFFF";break;case"between":_=c[0],_ instanceof Date&&(_=_.getTime()),l=c[1],l instanceof Date&&(l=l.getTime()),d=!0;break;case"equals":case void 0:_=c,l=c,d=!0;break;case"ne":if(c===null){_=c,E=!0;break}case"sort":case"contains":case"ends_with":_=!0,f=!0;break;default:throw new Xr.ClientError(`Unknown query comparator "${u}"`)}let h,p=o===n.primaryKey||o==null;if(typeof _=="string"&&_.length>Tn.MAX_SEARCH_KEY_LENGTH&&(_=_.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,E=!1,h=Tl(e,n,null,i,p)),typeof l=="string"&&l.length>Tn.MAX_SEARCH_KEY_LENGTH&&(l=l.slice(0,Tn.MAX_SEARCH_KEY_LENGTH)+Tn.OVERFLOW_MARKER,d=!0,h=h??Tl(e,n,null,i,p)),r){let R=_;_=l,l=R,R=!E,E=!d,d=R}let S=p?n.primaryStore:n.indices[o];if(!S||S.isIndexing||f||c===null&&!S.indexNulls){if(s===!1&&!S)throw new Xr.ClientError(`"${o}" is not indexed, can not search for this attribute`,404);if(s===!1&&f)throw new Xr.ClientError(`Can not use ${u||"equal"} operator without combining with a condition that uses an index, can not search for attribute ${o}`,403);if(S?.isIndexing)throw new Xr.ServerError(`"${o}" is not indexed yet, can not search for this attribute`,503);if(c===null&&!S.indexNulls)throw new Xr.ClientError(`"${o}" is not indexed for nulls, index needs to be rebuilt to search for nulls, can not search for this attribute`,400);if(h=h??Tl(e,n,null,i,p),!h)throw new Xr.ClientError(`Unknown search operator ${e.comparator}`)}let T={start:_,end:l,inclusiveEnd:d,exclusiveStart:E,values:!0,versions:p,transaction:t,reverse:r};if(p){let R=S.getRange(T).map(h?function({key:b,value:I}){return this.isSync?I&&h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(I&&h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:b=>b.value==null?Ci.SKIP:b);return R.hasEntries=!0,R}else return S?S.getRange(T).map(h?function({key:R,value:b}){let I;return typeof R=="string"&&R.length>Tn.MAX_SEARCH_KEY_LENGTH?I=n.primaryStore.get(b):I={[o]:R},this.isSync?h(I)?b:Ci.SKIP:new Promise((B,U)=>setImmediate(()=>{try{B(h(I)?b:Ci.SKIP)}catch(F){U(F)}}))}:({value:R})=>R):n.primaryStore.getRange(r?{end:!0,transaction:t,reverse:!0}:{start:!0,transaction:t}).map(function({key:R,value:b}){return this.isSync?b&&h(b)?R:Ci.SKIP:new Promise((I,B)=>setImmediate(()=>{try{I(b&&h(b)?R:Ci.SKIP)}catch(U){B(U)}}))})}function Fs(e,t){if(Array.isArray(t))if(t.length>1){let r=Fs(e,t[0]),n=(r?.definition?.tableClass||r?.elements.definition?.tableClass)?.attributes;return n?Fs(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 Ete(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i;s.hasMappings=!0;let o;return{next(){if(!i){let u=t.relationship.to,_=a((l,d)=>{let E=l;Array.isArray(l)&&(E=Gn(l),o=!0);let f=s.get(E);f?f.push(d):s.set(E,f=[d]),l!==E&&(f.key=l)},"add_entry");for(let l of e){let d=l.value??r.get(l.key??l),E=d?.[u];if(E!=null&&!s.filters?.some(f=>!f(d)))if(n)for(let f=0;f<E.length;f++)_(E[f],l);else _(E,l)}return i=(o?s:s.keys())[Symbol.iterator](),this.next()}let c=i.next();return c.done?c:{value:o?c.value[1].key||c.value[0]:c.value}},return(){if(i?.return)return i.return()}}}})}function hte(e,t,r,n,s){return new e.constructor({[Symbol.iterator](){let i,o,c=new Set;return{next(){let u;if(o)for(;u=o.next(),!u.done;){let _=Gn(u.value);if(!c.has(_))return c.add(_),u}if(!i){let _=new Map;n.fromRecord=l=>l[t.relationship.from]?.filter?.(d=>_.has(Gn(d)));for(let l of e){if(n.filters){let d=r.get(l);if(n.filters.some(E=>!E(d)))continue}_.set(Gn(l),l)}return i=_.values()[Symbol.iterator](),this.next()}do{let _=i.next();return _.done?_:(o=s(_.value)[Symbol.iterator](),this.next())}while(!0)},return(){return o?.return?.()},throw(){return o?.throw?.()}}}})}function Tl(e,t,r,n,s,i){let o=e.comparator,c=e[0]??e.attribute,u=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 l=c[0],d=Fs(t.attributes,l),E=d.definition?.tableClass||d.elements.definition?.tableClass,f=n?.[l],h=Tl({attribute:c.length>2?c.slice(1):c[1],value:u,comparator:o},E,r,f?.[l]?.joined,c[1]===E.primaryKey,i);if(!h)return;if(f){f.filters||(f.filters=[]),f.filters.push(h);return}let p=t.propertyResolvers?.[l],S,T=a((R,b)=>{let I,B;if(p){if(p.from&&h.idFilter){if(!S)if(h.idFilter.idSet?.size===1){for(let F of h.idFilter.idSet)e={attribute:p.from,value:F};S=_(p.from,h.idFilter,!0,!0)}else S=_(p.from,h.idFilter,!1,!0);let U=S(R);return S.idFilter&&(T.idFilter=S.idFilter),U}B=p(R,r,b),I=B?.value}else I=R[l];return I?Array.isArray(I)?I.some(h):h(I,B):!1},"recordFilter");return T}}switch(u instanceof Date&&(u=u.getTime()),Xg[o]||o){case Tn.SEARCH_TYPES.EQUALS:case void 0:return _(c,l=>l===u,!0);case"contains":return _(c,l=>l?.toString().includes(u));case"ends_with":return _(c,l=>l?.toString().endsWith(u));case"starts_with":return _(c,l=>typeof l=="string"&&l.startsWith(u),!0);case"prefix":return Array.isArray(u)?u[u.length-1]==null&&(u=u.slice(0,-1)):u=[u],_(c,l=>{if(!Array.isArray(l))return!1;for(let d=0,E=u.length;d<E;d++)if(l[d]!==u[d])return!1;return!0},!0);case"between":return u[0]instanceof Date&&(u[0]=u[0].getTime()),u[1]instanceof Date&&(u[1]=u[1].getTime()),_(c,l=>(0,ds.compareKeys)(l,u[0])>=0&&(0,ds.compareKeys)(l,u[1])<=0,!0);case"gt":return _(c,l=>(0,ds.compareKeys)(l,u)>0);case"ge":return _(c,l=>(0,ds.compareKeys)(l,u)>=0);case"lt":return _(c,l=>(0,ds.compareKeys)(l,u)<0);case"le":return _(c,l=>(0,ds.compareKeys)(l,u)<=0);case"ne":return _(c,l=>(0,ds.compareKeys)(l,u)!==0);case"sort":return()=>!0;default:throw new Xr.ClientError(`Unknown query comparator "${o}"`)}function _(l,d,E,f){let h;E=E&&!s&&t?.indices[l]&&i>3,E&&(e.estimated_count==null&&rE(t)(e),h=e.estimated_count>>4,(isNaN(h)||h>=i)&&(E=!1));let p=0,S=3;function T(R){let b=R[l],I;if(typeof b!="object"||!b||f?I=d(b):Array.isArray(b)?I=b.some(d):b instanceof Date&&(I=d(b.getTime())),E&&(S++,!I&&!T.idFilter&&++p/S*(i-S)>h)){let B=Ga(e,r.transaction.getReadTxn(),!1,t).map(Gn),U=new Set(B);T.idFilter=F=>U.has(Gn(F)),T.idFilter.idSet=U}return I}return a(T,"recordFilter"),s&&(T.idFilter=d),T}a(_,"attributeComparator")}function rE(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/qs(e.primaryStore):i.estimated_count}return r.estimated_count=s,r.estimated_count}let n=r.comparator||r.search_type;if(n=Xg[n]||n,n===Tn.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=Fs(e.attributes,s[0]),o=i.definition?.tableClass||i.elements.definition?.tableClass,c=rE(o)({value:r.value,attribute:s.length>2?s.slice(1):s[1],comparator:"equals"}),u=e.indices[i.relationship.from];r.estimated_count=c+(u?c*qs(e.indices[i.relationship.from])/(qs(o.primaryStore)||1):c)}else{let i=e.indices[s];r.estimated_count=i?i.getValuesCount(r[1]??r.value):1/0}}else if(n==="contains"||n==="ends_with"||n==="ne"){let s=r[0]??r.attribute,i=e.indices[s];r.value===null&&n==="ne"?r.estimated_count=qs(e.primaryStore)-(i?i.getValuesCount(null):0):r.estimated_count=1/0}else n==="starts_with"||n==="prefix"?r.estimated_count=dte*qs(e.primaryStore)+1:n==="between"?r.estimated_count=_te*qs(e.primaryStore)+1:n==="sort"?r.estimated_count=qs(e.primaryStore)+1:r.estimated_count=lte*qs(e.primaryStore)+1;typeof r.descending=="boolean"&&(r.estimated_count/=2)}return r.estimated_count}return a(t,"estimateConditionForTable"),t}function nE(e){if(e)if(Di=e,xa.lastIndex=0,mte.test(e))try{let t=pl(new Ha,"");if(Dr!==Di.length)throw new SyntaxError("Unable to parse query, unexpected end of query");return t}catch(t){throw t.statusCode=400,t.message=`Unable to parse query, ${t.message} at position ${Dr} in '${Di}'`,t}else{let t=new URLSearchParams(e);return t.conditions=t,t}}function pl(e,t){let r=xa,n,s,i,o,c,u=decodeURIComponent,_;for(;n=r.exec(Di);){Dr=r.lastIndex;let[,l,d]=n;if(o){if(l)throw new SyntaxError(`expected operator, but encountered '${l}'`);o=!1,c=!1}else c=!0;let E;switch(d){case"=":if(s){if(l.length<=2)i=l;else throw new SyntaxError(`invalid FIQL operator ${l}`);u=zg}else{if(u=decodeURIComponent,i="equals",!l)throw new SyntaxError("attribute must be specified before equality comparator");s=Sl(l)}break;case"==":case"!=":case"<":case"<=":case">":case">=":case"===":case"!==":if(i=fte[d],u=Jg[i]?zg:decodeURIComponent,!l)throw new SyntaxError(`attribute must be specified before comparator ${d}`);s=Sl(l);break;case"|":case"&":case"":case void 0:if(s==null){if(s===void 0)throw t?new SyntaxError(`expected '${t}', but encountered ${d[0]?"'"+d[0]+"'":"end of string"}}`):new SyntaxError(`no comparison specified before ${d?"'"+d+"'":"end of string"}`)}else{if(!e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");let h={comparator:i,attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}d==="&"&&(_="and"),d==="|"&&(_="or"),s=void 0;break;case",":if(e.conditions)throw new SyntaxError("conditions/comparisons are not allowed in a property list");e.push(Sl(l)),s=void 0;break;case"(":xa.lastIndex=Dr;let f=pl(l?[]:new Ha,")");switch(l){case"":tE(e,_),e.conditions.push(f);break;case"limit":switch(f.length){case 1:e.limit=+f[0];break;case 2:e.offset=+f[0],e.limit=f[1]-e.offset;break;default:throw new SyntaxError("limit must have 1 or 2 arguments")}break;case"select":Array.isArray(f[0])&&f.length===1&&!f[0].name?(e.select=f[0],e.select.asArray=!0):f.length===1?e.select=f[0]:f.length===2&&f[1]===""?e.select=f.slice(0,1):e.select=f;break;case"group-by":throw new SyntaxError("group by is not implemented yet");case"sort":e.sort=N0(f);break;default:throw new SyntaxError(`unknown query function call ${l}`)}Di[Dr]===","?r.lastIndex=++Dr:o=!0,s=null;break;case"{":if(e.conditions)throw new SyntaxError("property sets are not allowed in a queries");if(!l)throw new SyntaxError("property sets must have a defined parent property name");xa.lastIndex=Dr,E=pl([],"}"),E.name=l,e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case"[":xa.lastIndex=Dr,l?(E=pl(new Ha,"]"),E.name=l):E=pl(e.conditions?new Ha:[],"]"),e.conditions?(tE(e,_),e.conditions.push(E),s=null):e.push(E),Di[Dr]===","?r.lastIndex=++Dr:o=!0;break;case")":case"]":case"}":if(t===d[0]){if(e.conditions){if(s){let h={comparator:i||"equals",attribute:s,value:u(l)};i==="eq"&&y0(h,l),tE(e,_),e.conditions.push(h)}else if(l)throw new SyntaxError("no attribute or comparison specified")}else(l||e.length>0&&c)&&e.push(Sl(l));return e}else throw t?new SyntaxError(`expected '${t}', but encountered '${d[0]}'`):new SyntaxError(`unexpected token '${d[0]}'`);default:throw new SyntaxError(`unexpected operator '${d}'`)}if(t!==")"&&(r=s?pte:xa,r.lastIndex=Dr),Dr===Di.length)return e}if(t)throw new SyntaxError(`expected '${t}', but encountered end of string`)}function tE(e,t){if(e.conditions.length>0)if(e.operator){if(e.operator!==t)throw new SyntaxError("Can not mix operators within a condition grouping")}else e.operator=t}function Sl(e){return e.indexOf(".")>-1?e.split(".").map(Sl):decodeURIComponent(e)}function zg(e){if(e==="null")return null;if(e.indexOf("/")>-1){let t=e.split("/"),r=new qa(t.length);for(let n=0,s=t.length;n<s;n++)r[n]=zg(t[n]);return r}if(e.indexOf(":")>-1){let[t,r]=e.split(":");if(t==="number")return+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 Xr.ClientError(`Unknown type ${t}`)}return decodeURIComponent(e)}function y0(e,t){if(t.indexOf("*")>-1)if(t.endsWith("*"))e.comparator="starts_with",e.value=decodeURIComponent(t.slice(0,-1));else throw new Xr.ClientError("wildcard can only be used at the end of a string")}function N0(e){let t=I0(e[0]);return e.length>1&&(t.next=N0(e.slice(1))),t}function I0(e){if(Array.isArray(e)){let t=I0(e[0]);return e[0]=t.attribute,t.attribute=e,t}if(typeof e=="string")switch(e[0]){case"-":return{attribute:e.slice(1),descending:!0};case"+":return{attribute:e.slice(1),descending:!1};default:return{attribute:e,descending:!1}}throw new SyntaxError(`Unknown sort type ${e}`)}function Gn(e){return Array.isArray(e)?e.join("\0"):e}function qs(e){let t=Date.now();return(e.estimatedEntryCountExpires||0)<t&&(e.estimatedEntryCount=e.getStats().entryCount,e.estimatedEntryCountExpires=t+1e4),e.estimatedEntryCount}function Ste(e,t,r){return t*r/qs(e)}var Xr,Tn,ds,Ci,lte,_te,dte,fte,Jg,Xg,mte,xa,pte,Dr,Di,Ha,sE=Re(()=>{Xr=H(se()),Tn=H(ft()),ds=require("ordered-binary"),Ci=require("lmdb");cn();lte=.3,_te=.1,dte=.05,fte={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne","==":"eq","===":"equals","!==":"not_equal"},Jg={lt:!0,le:!0,gt:!0,ge:!0,ne:!0,eq:!0};a(jg,"executeConditions");a(Ga,"searchByIndex");a(Fs,"findAttribute");a(Ete,"joinTo");a(hte,"joinFrom");Xg={eq:"equals",greater_than:"gt",greaterThan:"gt",greater_than_equal:"ge",greaterThanEqual:"ge",less_than:"lt",lessThan:"lt",less_than_equal:"le",lessThanEqual:"le",not_equal:"ne",notEqual:"ne",equal:"equals",sw:"starts_with",startsWith:"starts_with",ew:"ends_with",endsWith:"ends_with",ct:"contains",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(Tl,"filterByType");a(rE,"estimateCondition");mte=/[()[\]|!<>.]|(=\w*=)/,xa=/([^?&|=<>!([{}\]),]*)([([{}\])|,&]|[=<>!]*)/g,pte=/([^&|=[\]{}]+)([[\]{}]|[&|=]*)/g;a(nE,"parseQuery");a(pl,"parseBlock");a(tE,"assignOperator");a(Sl,"decodeProperty");a(zg,"typedDecoding");a(y0,"wildcardDecoding");a(N0,"toSortObject");a(I0,"toSortEntry");Ha=class{static{a(this,"Query")}constructor(){this.conditions=[]}[Symbol.iterator](){return this.conditions[Symbol.iterator]()}get(t){for(let r=0;r<this.conditions.length;r++){let n=this.conditions[r];if(n.attribute===t)return n.value}}};a(Gn,"flattenKey");a(qs,"estimatedEntryCount");a(Ste,"intersectionEstimate")});function M0(e){let t={openapi:Tte,info:{title:"HarperDB HTTP REST interface",version:(0,L0.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)continue;let{path:s}=n,i=s.split("/").slice(-1),{attributes:o,primaryKey:c,prototype:u}=n.Resource;if(c=c??"id",!c)continue;let _={},l=[];if(o)for(let{type:b,name:I,elements:B,relationship:U,definition:F}of o){if(U)b==="array"?_[I]={type:"array",items:{$ref:Li+B.type}}:_[I]={$ref:Li+b};else{let M=F??B?.definition;if(M){if(!t.components.schemas[M.type]){let Q={};M.properties.forEach(J=>{Q[J.name]=new rR(Zg[J.type],J.type)}),t.components.schemas[M.type]=new D0(Q)}b==="array"?_[I]={type:"array",items:{$ref:Li+M.type}}:_[I]={$ref:Li+M.type}}else b==="array"?B.type==="Any"||B.type=="ID"?_[I]={type:"array",items:{format:B.type}}:_[I]={type:"array",items:new rR(Zg[B.type],B.type)}:b==="Any"||b=="ID"?_[I]={format:b}:_[I]=new rR(Zg[b],b)}l.push(new nR(I,"query",_[I]))}let d=Object.keys(_),E=new nR(c,"path",{format:"ID"});E.required=!0,E.description="primary key of record";let f=new nR("property","path",{enum:d});f.required=!0,t.components.schemas[i]=new D0(_);let h=u.post!==Resource.prototype.post||u.update,p=typeof u.put=="function",S=typeof u.get=="function",T=typeof u.delete=="function",R="/"+s+"/";h&&(t.paths[R]={},t.paths[R].post=new gte(i,r,"create a new record auto-assigning a primary key")),S&&(t.paths[R]||(t.paths[R]={}),t.paths[R].get=new eR(l,r,{200:new tR({$ref:Li+i})},"search for records by the specified property name and value pairs")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new C0(l,r,"delete all the records that match the provided query",{204:new w0})),R="/"+s+"/{"+c+"}",S&&(t.paths[R]={},t.paths[R].get=new eR([E],r,{200:new tR({$ref:Li+i})},"retrieve a record by its primary key")),p&&(t.paths[R]||(t.paths[R]={}),t.paths[R].put=new Rte([E],r,i,"create or update the record with the URL path that maps to the record's primary key")),T&&(t.paths[R]||(t.paths[R]={}),t.paths[R].delete=new C0([E],r,"delete a record with the given primary key",{204:new w0})),S&&f.schema.enum.length>0&&(R="/"+s+"/{"+c+"}.{property}",t.paths[R]={},t.paths[R].get=new eR([E,f],r,{200:new tR({enum:d})},"used to retrieve the specified property of the specified record"))}return t}function gte(e,t,r){this.description=r,this.requestBody={content:{"application/json":{schema:{$ref:Li+e}}}},this.security=t,this.responses={200:{description:sR,headers:{Location:{description:"primary key of new record",schema:{type:"string",format:"ID"}}},content:{"application/json":{schema:{type:"string",format:"ID"}}}}}}function eR(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.responses=r}function tR(e){this.description=sR,this.content={"application/json":{schema:e}}}function w0(){this.description="successfully processed request, no content returned to client"}function Rte(e,t,r,n){this.description=n,this.parameters=e,this.security=t,this.requestBody={content:{"application/json":{schema:{$ref:Li+r}}}},this.responses={200:{description:sR}}}function C0(e,t,r,n){this.description=r,this.parameters=e,this.security=t,this.responses=n}function D0(e){this.type="object",this.properties=e}function rR(e,t){this.type=e,this.format=t}function nR(e,t,r){this.name=e,this.in=t,this.schema=r}var L0,Tte,Zg,Li,sR,P0=Re(()=>{L0=H(ef()),Tte="3.0.3",Zg={Int:"integer",Float:"number",Long:"integer",String:"string",Boolean:"boolean",Date:"string",Bytes:"string",BigInt:"integer",array:"array"},Li="#/components/schemas/",sR="successful operation";a(M0,"generateJsonApi");a(gte,"Post");a(eR,"Get");a(tR,"Response200");a(w0,"Response204");a(Rte,"Put");a(C0,"Delete");a(D0,"ResourceSchema");a(rR,"Type");a(nR,"Parameter")});var oE={};Fe(oE,{start:()=>bte});async function Ote(e,t){let r=e.headers.asObject,n=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&nE(e);let s=new Ni;try{e.responseHeaders=s;let i=e.url.slice(1),o,c;if(i!==U0){let h=iE.getMatch(i);if(!h)return t(e);e.handlerPath=h.path,o={url:h.relativeURL,async:!0},c=h.Resource}let u=r["cache-control"];if(u){u=u.toLowerCase();let h=u.match(/max-age=(\d+)/)?.[1];h&&(e.expiresAt=h*1e3+Date.now()),u.includes("only-if-cached")&&(e.onlyIfCached=!0),u.includes("no-cache")&&(e.noCache=!0),u.includes("no-store")&&(e.noCacheStore=!0),u.includes("stale-if-error")&&(e.staleIfError=!0),u.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await rt(e,()=>{if(r["content-length"]||r["transfer-encoding"])try{e.data=yo(r["content-type"],!0)(e.body,e.headers)}catch(h){throw new Fa.ClientError(h,400)}if(e.authorize=!0,i===U0&&n==="GET"){if(e?.user?.role?.permission?.super_user)return M0(iE);throw new Fa.ServerError("Forbidden",403)}switch(n){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,r.destination,e);case"MOVE":return c.move(o,r.destination,e);case"BREW":throw new Fa.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Fa.ServerError(`Method ${n} is not recognized`,501)}}),l=200,d;if(_==null)l=n==="GET"||n==="HEAD"?404:204,iR.lastModified&&e.lastModified&&s.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(d=e.lastModified){Ate[0]=d;let h=String.fromCharCode(34,(Qt[0]&63)+62,(Qt[0]>>6)+(Qt[1]<<2&63)+62,(Qt[1]>>4)+(Qt[2]<<4&63)+62,(Qt[2]>>2)+62,(Qt[3]&63)+62,(Qt[3]>>6)+(Qt[4]<<2&63)+62,(Qt[4]>>4)+(Qt[5]<<4&63)+62,(Qt[5]>>2)+62,(Qt[6]&63)+62,(Qt[6]>>6)+(Qt[7]<<2&63)+62,34),p=r["if-none-match"];p&&h==p?(_?.onDone&&_.onDone(),l=304,_=void 0):s.setIfNone("ETag",h),iR.lastModified&&s.setIfNone("Last-Modified",new Date(d).toUTCString())}e.createdResource&&(l=201),e.newLocation&&s.setIfNone("Location",e.newLocation);let E={status:l,headers:s,body:void 0},f=_?.wasLoadedFromSource?.();return f!==void 0&&(E.wasCacheMiss=f,!f&&d&&s.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||d))/1e3))),_!==void 0&&(E.body=eE(_,e,E),n==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?No.warn(i):No.info(i):No.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),s.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:s,body:void 0};return o.body=eE(i.contentType?i:i.toString(),e,o),o}}function bte(e){iR=e,!v0&&(v0=!0,iE=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Ote(t,r)},e),e.server.ws(async(t,r,n)=>{gl++;let s=new In;B0||(B0=!0,mu(u=>{gl>0&&u.push({metric:"ws-connections",connections:gl,byThread:!0})}));let i;t.on("error",u=>{i=!0,No.warn(u)});let o;t.on("message",a(function(_){o||(o=yo(r.requestedContentType??r.headers.asObject["content-type"],!1));let l=o(_);s.push(l)},"message"));let c;t.on("close",()=>{gl--,Wr(!i,"connection","ws","disconnect"),s.emit("close"),c&&c.return()});try{await n;let u=r.url.slice(1),_=iE.getMatch(u);if(Wr(!!_,"connection","ws","connect"),_){r.handlerPath=_.path,Sr(h=>({count:h.count,total:gl}),"connections",r.handlerPath,"connect","ws"),r.authorize=!0;let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await rt(r,()=>d.connect(l,s,r)))[Symbol.asyncIterator]();let f;for(;!(f=await c.next()).done;){let h=Ro(f.value,r);t.send(h),Sr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}else return t.close(1011,`No resource was found to handle ${r.pathname}`)}catch(u){t.close(yte[u.statusCode]||1011,u.toString()),t.close("login failed")}t.close()},e))}var No,Fa,Qt,Ate,iR,U0,v0,iE,B0,gl,yte,x0=Re(()=>{Da();Ds();No=H($()),Fa=H(se());sE();Cc();so();el();P0();Qt=new Uint8Array(8),Ate=new Float64Array(Qt.buffer,0,1),iR={},U0="openapi";a(Ote,"http");gl=0;a(bte,"start");yte={401:3e3,403:3003}});var oR=g((ape,G0)=>{var{recordAction:aE,recordActionBinary:H0}=(Ds(),ie(pu)),Nte=require("fastify-plugin"),Ite=200;G0.exports=Nte(function(e,t,r){e.addHook("onResponse",async(n,s)=>{let i=s.elapsedTime}),e.addHook("onSend",async(n,s,i)=>{let o=s.elapsedTime,c=performance.now(),u=s.request.routeOptions,_,l,d;u.config?.isOperation?(_=n.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),aE(o,"duration",_,d,l),H0(s.raw.statusCode<400,"success",_,d,l),H0(1,"response_"+s.raw.statusCode,_,d,l);let E=Ite;i?.pipe?(i.on("data",S=>{E+=S.length}),i.on("end",()=>{aE(performance.now()-c,"transfer",_,d,l),aE(E,"bytes-sent",_,d,l)})):(E+=i?.length||0,aE(E,"bytes-sent",_,d,l));let f=o.toFixed(3),h=s.getHeader("Server-Timing"),p=`db;dur=${f}`;s.header("Server-Timing",h?`${h}, ${p}`:p)}),r()},{name:"hdb-request-time"})});var dR=g((lpe,V0)=>{var _E=require("clone"),dE=Xe(),wte=z(),uE=P(),cpe=$(),aR=require("fs"),uR=require("joi"),{string:lE}=uR.types(),{hdb_errors:Cte,handleHDBError:cE}=se(),{HDB_ERROR_MSGS:upe,HTTP_STATUS_CODES:cR}=Cte,{common_validators:ka}=jn(),q0=" is required",Dte=["insert","update","upsert"],lR={database:{presence:!1,format:ka.schema_format,length:ka.schema_length},schema:{presence:!1,format:ka.schema_format,length:ka.schema_length},table:{presence:!0,format:ka.schema_format,length:ka.schema_length},action:{inclusion:{within:Dte,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Lte={schema:lE.required(),table:lE.required(),action:lE.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Mte,AWS_SECRET:Pte,AWS_BUCKET:Ute,AWS_FILE_KEY:vte,REGION:Bte}=uE.S3_BUCKET_AUTH_KEYS,xte={s3:{presence:!0},[`s3.${Mte}`]:{presence:!0,type:"String"},[`s3.${Pte}`]:{presence:!0,type:"String"},[`s3.${Ute}`]:{presence:!0,type:"String"},[`s3.${vte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Bte}`]:{presence:!0,type:"String"}},F0=_E(lR);F0.data.presence={message:q0};var k0=_E(lR);k0.file_path.presence={message:q0};var Hte=Object.assign(_E(lR),xte),_R=_E(Lte);_R.csv_url=lE.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_R.passthrough_headers=uR.object();function Gte(e){let t=dE.validateObject(e,F0);return fE(e,t)}a(Gte,"dataObject");function qte(e){let t=dE.validateBySchema(e,uR.object(_R));return fE(e,t)}a(qte,"urlObject");function Fte(e){let t=dE.validateObject(e,k0);return fE(e,t)}a(Fte,"fileObject");function kte(e){let t=dE.validateObject(e,Hte);return fE(e,t)}a(kte,"s3FileObject");function fE(e,t){if(!t){let r=wte.checkGlobalSchemaTable(e.schema,e.table);if(r)return cE(new Error,r,cR.BAD_REQUEST);if(e.operation===uE.OPERATIONS_ENUM.CSV_FILE_LOAD)try{aR.accessSync(e.file_path,aR.constants.R_OK|aR.constants.F_OK)}catch(n){return n.code===uE.NODE_ERROR_CODES.ENOENT?cE(n,`No such file or directory ${n.path}`,cR.BAD_REQUEST):n.code===uE.NODE_ERROR_CODES.EACCES?cE(n,`Permission denied ${n.path}`,cR.BAD_REQUEST):cE(n)}}return t}a(fE,"postValidateChecks");V0.exports={dataObject:Gte,urlObject:qte,fileObject:Fte,s3FileObject:kte}});var fR=g((dpe,$0)=>{"use strict";var Rl=$(),EE=P();async function Vte(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===EE.OPERATIONS_ENUM.INSERT||t.operation===EE.OPERATIONS_ENUM.UPDATE||t.operation===EE.OPERATIONS_ENUM.UPSERT?(delete s.new_attributes,delete s.txn_time):t.operation===EE.OPERATIONS_ENUM.DELETE&&delete s.txn_time,s}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Rl.info(i.message),i):i.http_resp_msg?(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i.http_resp_msg),i):(Rl.error(`Error calling operation: ${e.name}`),Rl.error(i),i)}}a(Vte,"callOperationFunctionAsAwait");$0.exports={callOperationFunctionAsAwait:Vte}});var K0=g((Epe,Y0)=>{"use strict";var ER=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,n,s,i,o,c=null){this.op=t,this.action=r,this.schema=n,this.table=s,this.file_path=i,this.file_type=o,this.role_perms=c}},hR=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,n,s){this.action=t,this.schema=r,this.table=n,this.data=s}};Y0.exports={BulkLoadFileObject:ER,BulkLoadDataObject:hR}});var Q0=g((mpe,W0)=>{"use strict";var mR=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,n){this.timestamp=t,this.user=r,this.node_name=n}};W0.exports=mR});var AR=g((Ape,_B)=>{"use strict";var hE=qr(),pE=dR(),$te=require("needle"),qn=P(),Spe=Ve(),Va=z(),{handleHDBError:lt,hdb_errors:nB}=se(),{HTTP_STATUS_CODES:zt,HDB_ERROR_MSGS:Lt,CHECK_LOGS_WRAPPER:wo}=nB,$a=$(),pR=require("papaparse");Va.promisifyPapaParse();var Fn=require("fs-extra"),Yte=require("path"),{chain:z0}=require("stream-chain"),J0=require("stream-json/streamers/StreamArray"),j0=require("stream-json/utils/Batch"),X0=require("stream-chain/utils/comp"),{finished:Z0}=require("stream"),Kte=ee(),sB=fR(),Wte=Fg(),{BulkLoadFileObject:TR,BulkLoadDataObject:Qte}=K0(),gR=Lg(),{verifyBulkLoadAttributePerms:iB}=Wf(),Tpe=Q0(),gpe=ut(),Rpe=Os(),{databases:zte}=(Ae(),ie(ke)),{coerceType:Jte}=(SE(),ie(OR)),eB="No records parsed from csv file.",Io=`${Kte.get("HDB_ROOT")}/tmp`,{schema_regex:jte}=jn(),tB=1024*1024*2,rB=5e3,Xte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};_B.exports={csvDataLoad:Zte,csvURLLoad:ere,csvFileLoad:tre,importFromS3:rre};async function Zte(e,t){let r=pE.dataObject(e);if(r)throw lt(r,r.message,zt.BAD_REQUEST,void 0,void 0,!0);let n={};try{let s=cB(e.schema,e.table),i=pR.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SR.bind(null,s),dynamicTyping:!1}),o=new gR;e.hdb_user&&e.hdb_user?.role&&e.hdb_user?.role?.permission&&e.hdb_user?.role?.permission?.super_user!==!0&&iB(e.hdb_user?.role?.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw lt(new Error,c,zt.BAD_REQUEST,void 0,void 0,!0);let u=new Qte(e.action,e.schema,e.table,i.data);return n=await sB.callOperationFunctionAsAwait(uB,u,null),n.message===eB?eB:lB(n.records,n.number_written)}catch(s){throw Co(s)}}a(Zte,"csvDataLoad");async function ere(e){let t=pE.urlObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,n=`${Io}/${r}`;try{await nre(e,r)}catch(s){throw $a.error(Lt.DOWNLOAD_FILE_ERR(r)+" - "+s),lt(s,wo(Lt.DOWNLOAD_FILE_ERR(r)))}try{let s=new TR(this.job_operation_function.name,e.action,e.schema,e.table,n,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission),i=await RR(s);return await mE(n),i}catch(s){throw await mE(n),Co(s)}}a(ere,"csvURLLoad");async function tre(e){let t=pE.fileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r=new TR(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qn.VALID_S3_FILE_TYPES.CSV,e.hdb_user?.role?.permission);try{return await RR(r)}catch(n){throw Co(n)}}a(tre,"csvFileLoad");async function rre(e){let t=pE.s3FileObject(e);if(t)throw lt(t,t.message,zt.BAD_REQUEST,void 0,void 0,!0);let r;try{let n=Yte.extname(e.s3.key),s=`${Date.now()}${n}`;r=`${Io}/${s}`;let i=new TR(this.job_operation_function.name,e.action,e.schema,e.table,r,n,e.hdb_user?.role?.permission);await sre(s,e);let o=await RR(i);return await mE(r),o}catch(n){throw await mE(r),Co(n)}}a(rre,"importFromS3");async function nre(e,t){let r;try{let n=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await $te("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 lt(n,s,n.statusCode,qn.LOG_LEVELS.ERROR,"Error downloading CSV file - "+n)}ore(r,e.csv_url),await ire(t,r.raw)}a(nre,"downloadCSVFile");async function sre(e,t){try{let r=`${Io}/${e}`;await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,"",{flag:"a+"});let n=await Fn.createWriteStream(r),s=await Wte.getFileStreamFromS3(t);await new Promise((i,o)=>{s.on("error",function(c){o(c)}),s.pipe(n).on("error",function(c){o(c)}).on("close",function(){$a.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw $a.error(Lt.S3_DOWNLOAD_ERR+" - "+r),lt(r,wo(Lt.S3_DOWNLOAD_ERR))}}a(sre,"downloadFileFromS3");async function ire(e,t){try{await Fn.mkdirp(Io),await Fn.writeFile(`${Io}/${e}`,t)}catch(r){throw $a.error(Lt.WRITE_TEMP_FILE_ERR),lt(r,wo(Lt.DEFAULT_BULK_LOAD_ERR))}}a(ire,"writeFileToTempFolder");async function mE(e){if(e)try{await Fn.access(e),await Fn.unlink(e)}catch{$a.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(mE,"deleteTempFile");function ore(e,t){if(e.statusCode!==nB.HTTP_STATUS_CODES.OK)throw lt(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,zt.BAD_REQUEST);if(!Xte[e.headers["content-type"]])throw lt(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,zt.BAD_REQUEST);if(!e.raw)throw lt(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,zt.BAD_REQUEST)}a(ore,"validateURLResponse");async function RR(e){try{let t;switch(e.file_type){case qn.VALID_S3_FILE_TYPES.CSV:t=await are(e);break;case qn.VALID_S3_FILE_TYPES.JSON:t=await cre(e);break;default:throw lt(new Error,Lt.DEFAULT_BULK_LOAD_ERR,zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_FILE_EXT_ERR(e))}return lB(t.records,t.number_written)}catch(t){throw Co(t)}}a(RR,"fileLoad");async function oB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;s&&s.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await hE.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&iB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),s&&s.resume()}catch(c){let u=lt(c);r(u)}}a(oB,"validateChunk");async function aB(e,t,r,n,s){let i=n.data?n.data:n;if(i.length===0)return;Va.autoCastJSONDeep(i),s&&s.pause();let o=n.meta?n.meta.fields:null;if(o)i.forEach(c=>{!Va.isEmpty(c)&&!Va.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(_=>c.add(_))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await sB.callOperationFunctionAsAwait(uB,c,null);t.records+=u.records,t.number_written+=u.number_written,s&&s.resume()}catch(c){let u=lt(c,wo(Lt.INSERT_CSV_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_CSV_ERR+" - "+c);r(u)}}a(aB,"insertChunk");async function are(e){let t={records:0,number_written:0},r=cB(e.schema,e.table);try{let n=new gR,s=Fn.createReadStream(e.file_path,{highWaterMark:tB});s.setEncoding("utf8"),await pR.parsePromise(s,oB.bind(null,e,n),SR.bind(null,r));let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);return s=Fn.createReadStream(e.file_path,{highWaterMark:tB}),s.setEncoding("utf8"),await pR.parsePromise(s,aB.bind(null,e,t),SR.bind(null,r)),s.destroy(),t}catch(n){throw lt(n,wo(Lt.PAPA_PARSE_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.PAPA_PARSE_ERR+n)}}a(are,"callPapaParse");function cB(e,t){let r=zte[e][t].attributes,n=new Map;for(let s of r)s.type&&n.set(s.name,i=>Jte(i,s));return n}a(cB,"createTransformMap");function SR(e,t,r){let n=e.get(r);return n?n(t):Va.autoCast(t)}a(SR,"typeFunction");async function cre(e){let t={records:0,number_written:0},r=a(n=>{throw n},"throwErr");try{let n=new gR,s=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new j0({batchSize:rB}),X0(async c=>{await oB(e,n,r,c)})]);await new Promise((c,u)=>{Z0(s,_=>{_?u(_):c()}),s.resume()});let i=n.getPermsResponse();if(i)throw lt(new Error,i,zt.BAD_REQUEST);let o=z0([Fn.createReadStream(e.file_path,{encoding:"utf-8"}),J0.withParser(),c=>c.value,new j0({batchSize:rB}),X0(async c=>{await aB(e,t,r,c)})]);return await new Promise((c,u)=>{Z0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(n){throw lt(n,wo(Lt.INSERT_JSON_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.INSERT_JSON_ERR+n)}}a(cre,"insertJson");async function uB(e){let t={};try{e.data&&e.data.length>0&&ure(e.data[0])?t=await lre(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",$a.info(t.message))}catch(r){throw Co(r)}return t}a(uB,"callBulkFileLoad");function ure(e){let t=Object.keys(e);for(let r of t)if(!jte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(ure,"validateColumnNames");async function lre(e,t,r,n){n||(n="insert");let s={operation:n,schema:t,table:r,records:e},i;switch(n){case"insert":i=hE.insert;break;case"update":i=hE.update;break;case"upsert":i=hE.upsert;break;default:throw lt(new Error,Lt.INVALID_ACTION_PARAM_ERR(n),zt.BAD_REQUEST,qn.LOG_LEVELS.ERROR,Lt.INVALID_ACTION_PARAM_ERR(n))}try{let o=await i(s),c;switch(n){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let l=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][l])>=0&&e.splice(d,1)}let u=Va.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Co(o)}}a(lre,"bulkFileLoad");function lB(e,t){return`successfully loaded ${t} of ${e} records`}a(lB,"buildResponseMsg");function Co(e){return lt(e,wo(Lt.DEFAULT_BULK_LOAD_ERR),zt.INTERNAL_SERVER_ERROR,qn.LOG_LEVELS.ERROR,Lt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Co,"buildTopLevelErrMsg")});var fB=g((bpe,dB)=>{"use strict";var bR=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};dB.exports=bR});var mB=g((Npe,hB)=>{"use strict";var _re=P(),EB=require("moment"),dre=require("uuid").v4,yR=class{static{a(this,"JobObject")}constructor(){this.id=dre(),this.type=void 0,this.start_datetime=EB().valueOf(),this.created_datetime=EB().valueOf(),this.end_datetime=void 0,this.status=_re.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};hB.exports=yR});var NR=g((wpe,bB)=>{"use strict";var fre=require("uuid").v4,RB=qr(),AB=Gr(),Ere=rs(),hre=oa(),mre=fB(),Ze=P(),pre=mB(),Sre=Wd(),gn=$(),Tre=Ic(),Ya=z(),{promisify:gre}=require("util"),Do=require("moment"),Rre=zf(),TE=dR(),pB=jm(),{deleteTransactionLogsBeforeValidator:Are}=Ng(),{handleHDBError:SB,hdb_errors:Ore}=se(),{HTTP_STATUS_CODES:TB}=Ore,gB=AB.searchByValue,bre=AB.searchByHash,yre=RB.insert,Nre=gre(Rre.evaluateSQL),Ire=RB.update;bB.exports={addJob:Dre,updateJob:Mre,handleGetJob:wre,handleGetJobsByStartDate:Cre,getJobById:OB};async function wre(e){try{let t=await OB(e.id);return Ya.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw gn.error("There was an error getting job",t),new Error(r)}}a(wre,"handleGetJob");async function Cre(e){try{let t=await Lre(e);if(gn.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=Do(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Do(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 gn.error(r),new Error(r)}}a(Cre,"handleGetJobsByStartDate");async function Dre(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ya.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return gn.info(l),t.error=l,t}if(!Ze.JOB_TYPE_ENUM[e.operation])return gn.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,n;switch(r){case Ze.OPERATIONS_ENUM.CSV_FILE_LOAD:n=TE.fileObject(e);break;case Ze.OPERATIONS_ENUM.CSV_URL_LOAD:n=TE.urlObject(e);break;case Ze.OPERATIONS_ENUM.CSV_DATA_LOAD:n=TE.dataObject(e);break;case Ze.OPERATIONS_ENUM.IMPORT_FROM_S3:n=TE.s3FileObject(e);break;case Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:n=pB(e,"date");break;case Ze.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:n=pB(e,"timestamp");break;case Ze.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:n=Are(e);break;case Ze.OPERATIONS_ENUM.RESTART_SERVICE:if(Ze.PROCESS_DESCRIPTORS_VALIDATE[e.service]===void 0)throw SB(new Error,"Invalid service",TB.BAD_REQUEST,void 0,void 0,!0);break;default:break}if(n)throw SB(n,n.message,TB.BAD_REQUEST,void 0,void 0,!0);let s=new pre;s.type=e.operation===Ze.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ze.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,s.type=e.operation,s.user=e.hdb_user?.username;let i=new Ere(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",s.id,"id",["id"]),o;try{o=Array.from(await gB(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){s.id=fre();try{o=await gB(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return gn.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return gn.error("Error creating a job, could not find a unique job id."),t}s.request=e;let u=new Tre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[s]),_;try{_=await yre(u)}catch(l){return gn.error(`There was an error inserting a job for job type: ${e.operation} -- ${l}`),t.success=!1,t}if(_.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${s.operation} and id ${s.id}`;else{let l=`Created a job with type ${s.type} and id ${s.id}`;t.message=l,t.createdJob=s,t.success=!0,gn.trace(l)}return t}a(Dre,"addJob");async function Lre(e){let t=Do(e.from_date,Do.ISO_8601),r=Do(e.to_date,Do.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 mre(n,e.hdb_user);try{return await Nre(s)}catch(i){throw gn.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(Lre,"getJobsInDateRange");async function OB(e){if(Ya.isEmptyOrZeroLength(e))return Ya.errorizeMessage("Invalid job ID specified.");let t=new hre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await bre(t)}catch(r){let n=`There was an error searching for a job by id: ${e} ${r}`;return gn.error(n),Ya.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(OB,"getJobById");async function Mre(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ya.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ze.JOB_STATUS_ENUM.COMPLETE||e.status===Ze.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Do().valueOf());let t=new Sre(Ze.SYSTEM_SCHEMA_NAME,Ze.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Ire(t),r}a(Mre,"updateJob")});var MB=g((Dpe,LB)=>{"use strict";var yB=z(),Mt=P(),Pre=require("moment"),gE=AR(),Al=$(),NB=NR(),IB=Jf(),wB=ci(),CB=Qe(),Ure=Vf(),vre=ju(),{parentPort:Bre,isMainThread:DB}=require("worker_threads"),{onMessageByType:xre}=Qe(),IR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Hre(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(yB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(yB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Mt.JOB_TYPE_ENUM.csv_file_load:await Es(e,gE.csvFileLoad);break;case Mt.JOB_TYPE_ENUM.csv_url_load:await Es(e,gE.csvURLLoad);break;case Mt.JOB_TYPE_ENUM.csv_data_load:await Es(e,gE.csvDataLoad);break;case Mt.JOB_TYPE_ENUM.import_from_s3:await Es(e,gE.importFromS3);break;case Mt.JOB_TYPE_ENUM.empty_trash:break;case Mt.JOB_TYPE_ENUM.export_local:await Es(e,IB.export_local);break;case Mt.JOB_TYPE_ENUM.export_to_s3:await Es(e,IB.export_to_s3);break;case Mt.JOB_TYPE_ENUM.delete_files_before:case Mt.JOB_TYPE_ENUM.delete_records_before:await Es(e,wB.deleteFilesBefore);break;case Mt.JOB_TYPE_ENUM.delete_audit_logs_before:await Es(e,wB.deleteAuditLogsBefore);break;case Mt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Es(e,Ure.deleteTransactionLogsBefore);break;case Mt.JOB_TYPE_ENUM.restart_service:return await Es(e,vre.restartService),`Restarting ${e.json.service}`;break;default:return`Invalid operation ${e.json.operation} specified`}}a(Hre,"parseMessage");async function Es(e,t){try{e.job.status=Mt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Pre().valueOf(),await NB.updateJob(e.job),await Gre(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):Al.error(`There was an error running ${t.name} job with id ${e.job.id}`),Al.error(n),e.job.message=n,e.job.status=Mt.JOB_STATUS_ENUM.ERROR;try{await NB.updateJob(e.job)}catch(s){throw Al.error(`Unable to update job with id ${e.job.id}`),s}throw r}}a(Es,"runJob");async function Gre(e){Al.trace("launching job thread:",e),DB?CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})}):Bre.postMessage({type:Mt.ITC_EVENT_TYPES.START_JOB,jobId:e})}a(Gre,"launchJobThread");DB&&xre(Mt.ITC_EVENT_TYPES.START_JOB,async(e,t)=>{try{CB.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Mt.PROCESS_NAME_ENV_PROP]:`JOB-${e.jobId}`})})}catch(r){Al.error(r)}});LB.exports={parseMessage:Hre,RunnerMessage:IR}});var UB=g((Mpe,PB)=>{"use strict";var wR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};PB.exports=wR});var jB=g((Upe,UR)=>{"use strict";var yE=Gr(),LR=zf(),RE=AR(),ks=bu(),AE=bs(),bl=ci(),qre=$S(),Ol=_n(),OE=ZS(),Jt=yg(),bE=$(),Fre=rT(),kre=af(),vB=vT(),Vre=uf(),$re=xT(),Yre=HT(),Kre=FT(),Wre=VT(),CR=KT(),BB=Jf(),Qre=Wf(),MR=NR(),k=P(),{hdb_errors:Nl,handleHDBError:yl}=se(),{HTTP_STATUS_CODES:xB}=Nl,DR=jT(),HB=ju(),WB=require("util"),Ka=qr(),zre=ys(),Jre=Ra(),GB=MB(),qB=Du(),FB=(Pf(),ie(tl)),kB=Er(),VB=Vf(),$B=Hf(),{setServerUtilities:jre}=(SE(),ie(OR)),{CONTEXT:Xre}=(cn(),ie($p)),{_assignPackageExport:Zre}=require("../index"),{transformReq:ene}=z(),{server:tne}=(lr(),ie(Gi)),or=bE.loggerWithTag("operation"),rne=fR(),YB=yE.searchByHash,nne=yE.searchByValue,sne=WB.promisify(yE.search),ine=WB.promisify(LR.evaluateSQL),one={[k.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.CREATE_TABLE]:!0,[k.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[k.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[k.OPERATIONS_ENUM.DROP_TABLE]:!0,[k.OPERATIONS_ENUM.DROP_SCHEMA]:!0},Y=UB();async function QB(e,t){try{if(e.body.operation!=="read_log"&&(bE.log_level===k.LOG_LEVELS.INFO||bE.log_level===k.LOG_LEVELS.DEBUG||bE.log_level===k.LOG_LEVELS.TRACE)){let{hdb_user:n,hdb_auth_header:s,password:i,...o}=e.body;or.info(o)}}catch(n){or.error(n)}let r=await rne.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return one[e.body.operation]&&zre.setSchemaDataToGlobal(n=>{n&&or.error(n)}),r}a(QB,"processLocalTransaction");var KB=cne();UR.exports={chooseOperation:zB,getOperationFunction:JB,operation:PR,processLocalTransaction:QB};jre(UR.exports);tne.operation=PR;function zB(e){let t;try{t=JB(e)}catch(s){throw or.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=LR.convertSQLToAST(s);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LR.checkASTPermissions(e,i);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${e.hdb_user?.username}' is not permitted to ${e.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==k.OPERATIONS_ENUM.LOGIN&&e.operation!==k.OPERATIONS_ENUM.LOGOUT){let s=n===void 0?r:n,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Qre.verifyPerms(i,s);if(o)throw or.error(`${xB.FORBIDDEN} from operation ${e.operation}`),or.warn(`User '${i.hdb_user?.username}' is not permitted to ${i.operation}`),yl(new Error,o,Nl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(s){throw yl(s,"There was an error when trying to choose an operation path")}return r}a(zB,"chooseOperation");function JB(e){if(or.trace(`getOperationFunction with operation: ${e.operation}`),KB.has(e.operation))return KB.get(e.operation);throw yl(new Error,Nl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Nl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(JB,"getOperationFunction");Zre("operation",PR);function PR(e,t){e.hdb_user=this[Xre]?.user,e.bypass_auth=!t;let r=zB(e);return QB({body:e},r)}a(PR,"operation");async function ane(e){or.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),n=r[0],s=r[1];for(let i of t.transactions)try{i.schema=n,i.table=s,i[k.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case k.OPERATIONS_ENUM.INSERT:o=await Ka.insert(i);break;case k.OPERATIONS_ENUM.UPDATE:o=await Ka.update(i);break;case k.OPERATIONS_ENUM.UPSERT:o=await Ka.upsert(i);break;case k.OPERATIONS_ENUM.DELETE:o=await bl.deleteRecord(i);break;default:or.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){or.info("Invalid operation in transaction"),or.error(o)}}a(ane,"catchup");async function kn(e){ene(e);let t,r;try{r=await MR.addJob(e),t=r.createdJob,or.info("addJob result",r);let n=new GB.RunnerMessage(t,e);return{message:await GB.parseMessage(n)??`Starting job with id ${t.id}`,job_id:t.id}}catch(n){let s=`There was an error executing job: ${n.http_resp_msg?n.http_resp_msg:n}`;throw or.error(s),yl(n,s)}}a(kn,"executeJob");function cne(){let e=new Map;return e.set(k.OPERATIONS_ENUM.INSERT,new Y(Ka.insert)),e.set(k.OPERATIONS_ENUM.UPDATE,new Y(Ka.update)),e.set(k.OPERATIONS_ENUM.UPSERT,new Y(Ka.upsert)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new Y(yE.searchByConditions)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_HASH,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_ID,new Y(YB)),e.set(k.OPERATIONS_ENUM.SEARCH_BY_VALUE,new Y(nne)),e.set(k.OPERATIONS_ENUM.SEARCH,new Y(sne)),e.set(k.OPERATIONS_ENUM.SQL,new Y(ine)),e.set(k.OPERATIONS_ENUM.CSV_DATA_LOAD,new Y(kn,RE.csvDataLoad)),e.set(k.OPERATIONS_ENUM.CSV_FILE_LOAD,new Y(kn,RE.csvFileLoad)),e.set(k.OPERATIONS_ENUM.CSV_URL_LOAD,new Y(kn,RE.csvURLLoad)),e.set(k.OPERATIONS_ENUM.IMPORT_FROM_S3,new Y(kn,RE.importFromS3)),e.set(k.OPERATIONS_ENUM.CREATE_SCHEMA,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_DATABASE,new Y(ks.createSchema)),e.set(k.OPERATIONS_ENUM.CREATE_TABLE,new Y(ks.createTable)),e.set(k.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new Y(ks.createAttribute)),e.set(k.OPERATIONS_ENUM.DROP_SCHEMA,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_DATABASE,new Y(ks.dropSchema)),e.set(k.OPERATIONS_ENUM.DROP_TABLE,new Y(ks.dropTable)),e.set(k.OPERATIONS_ENUM.DROP_ATTRIBUTE,new Y(ks.dropAttribute)),e.set(k.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_DATABASE,new Y(AE.describeSchema)),e.set(k.OPERATIONS_ENUM.DESCRIBE_TABLE,new Y(AE.describeTable)),e.set(k.OPERATIONS_ENUM.DESCRIBE_ALL,new Y(AE.describeAll)),e.set(k.OPERATIONS_ENUM.DELETE,new Y(bl.deleteRecord)),e.set(k.OPERATIONS_ENUM.ADD_USER,new Y(Ol.addUser)),e.set(k.OPERATIONS_ENUM.ALTER_USER,new Y(Ol.alterUser)),e.set(k.OPERATIONS_ENUM.DROP_USER,new Y(Ol.dropUser)),e.set(k.OPERATIONS_ENUM.LIST_USERS,new Y(Ol.listUsersExternal)),e.set(k.OPERATIONS_ENUM.LIST_ROLES,new Y(OE.listRoles)),e.set(k.OPERATIONS_ENUM.ADD_ROLE,new Y(OE.addRole)),e.set(k.OPERATIONS_ENUM.ALTER_ROLE,new Y(OE.alterRole)),e.set(k.OPERATIONS_ENUM.DROP_ROLE,new Y(OE.dropRole)),e.set(k.OPERATIONS_ENUM.USER_INFO,new Y(Ol.userInfo)),e.set(k.OPERATIONS_ENUM.READ_LOG,new Y(Fre)),e.set(k.OPERATIONS_ENUM.ADD_NODE,new Y(kre)),e.set(k.OPERATIONS_ENUM.UPDATE_NODE,new Y(vB)),e.set(k.OPERATIONS_ENUM.SET_NODE_REPLICATION,new Y(vB)),e.set(k.OPERATIONS_ENUM.REMOVE_NODE,new Y(Vre)),e.set(k.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new Y($re)),e.set(k.OPERATIONS_ENUM.PURGE_STREAM,new Y(Yre)),e.set(k.OPERATIONS_ENUM.SET_CONFIGURATION,new Y(kB.setConfiguration)),e.set(k.OPERATIONS_ENUM.CLUSTER_STATUS,new Y(Kre.clusterStatus)),e.set(k.OPERATIONS_ENUM.CLUSTER_NETWORK,new Y(Wre)),e.set(k.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new Y(CR.setRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new Y(CR.getRoutes)),e.set(k.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new Y(CR.deleteRoutes)),e.set(k.OPERATIONS_ENUM.EXPORT_TO_S3,new Y(kn,BB.export_to_s3)),e.set(k.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new Y(kn,bl.deleteFilesBefore)),e.set(k.OPERATIONS_ENUM.EXPORT_LOCAL,new Y(kn,BB.export_local)),e.set(k.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new Y(MR.handleGetJobsByStartDate)),e.set(k.OPERATIONS_ENUM.GET_JOB,new Y(MR.handleGetJob)),e.set(k.OPERATIONS_ENUM.GET_FINGERPRINT,new Y(DR.getFingerprint)),e.set(k.OPERATIONS_ENUM.SET_LICENSE,new Y(DR.setLicense)),e.set(k.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new Y(DR.getRegistrationInfo)),e.set(k.OPERATIONS_ENUM.RESTART,new Y(HB.restart)),e.set(k.OPERATIONS_ENUM.RESTART_SERVICE,new Y(kn,HB.restartService)),e.set(k.OPERATIONS_ENUM.CATCHUP,new Y(ane)),e.set(k.OPERATIONS_ENUM.SYSTEM_INFORMATION,new Y(Jre.systemInformation)),e.set(k.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new Y(kn,bl.deleteAuditLogsBefore)),e.set(k.OPERATIONS_ENUM.READ_AUDIT_LOG,new Y(qre)),e.set(k.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new Y(qB.createTokens)),e.set(k.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new Y(qB.refreshOperationToken)),e.set(k.OPERATIONS_ENUM.LOGIN,new Y(FB.login)),e.set(k.OPERATIONS_ENUM.LOGOUT,new Y(FB.logout)),e.set(k.OPERATIONS_ENUM.GET_CONFIGURATION,new Y(kB.getConfiguration)),e.set(k.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new Y(Jt.customFunctionsStatus)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new Y(Jt.getCustomFunctions)),e.set(k.OPERATIONS_ENUM.GET_COMPONENT_FILE,new Y(Jt.getComponentFile)),e.set(k.OPERATIONS_ENUM.GET_COMPONENTS,new Y(Jt.getComponents)),e.set(k.OPERATIONS_ENUM.SET_COMPONENT_FILE,new Y(Jt.setComponentFile)),e.set(k.OPERATIONS_ENUM.DROP_COMPONENT,new Y(Jt.dropComponent)),e.set(k.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new Y(Jt.getCustomFunction)),e.set(k.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new Y(Jt.setCustomFunction)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new Y(Jt.dropCustomFunction)),e.set(k.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.ADD_COMPONENT,new Y(Jt.addComponent)),e.set(k.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new Y(Jt.dropCustomFunctionProject)),e.set(k.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.PACKAGE_COMPONENT,new Y(Jt.packageComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.DEPLOY_COMPONENT,new Y(Jt.deployComponent)),e.set(k.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new Y(VB.readTransactionLog)),e.set(k.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new Y(kn,VB.deleteTransactionLogsBefore)),e.set(k.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new Y($B.installModules)),e.set(k.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new Y($B.auditModules)),e.set(k.OPERATIONS_ENUM.GET_BACKUP,new Y(ks.getBackup)),e}a(cne,"initializeOperationFunctionMap")});var IE=g((Bpe,ex)=>{"use strict";var vR=P(),une=z(),Il=$(),{handleHDBError:BR,hdb_errors:NE}=se(),{isMainThread:lne}=require("worker_threads"),{Readable:_ne}=require("stream"),XB=require("os"),dne=require("util"),fne=dT(),Ene=dne.promisify(fne.authorize),ZB=jB(),{createGzip:hne,constants:mne}=require("zlib");function pne(e){let t=`Found an uncaught exception with message: ${e.message}. ${XB.EOL}Stack: ${e.stack} ${XB.EOL}Terminating ${lne?"HDB":"thread"}.`;console.error(t),Il.fatal(t),process.exit(1)}a(pne,"handleServerUncaughtException");function Sne(e,t,r){if(Il[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:NE.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(n).send({error:e}):r.code(n).send(e.message?{error:e.message}:e)}a(Sne,"serverErrorHandler");function Tne(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let n=BR(new Error,"Invalid JSON.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}if(une.isEmpty(e.body.operation)){let n=BR(new Error,"Request body must include an 'operation' property.",NE.HTTP_STATUS_CODES.BAD_REQUEST);r(n,null)}r()}a(Tne,"reqBodyValidationHandler");function gne(e,t,r){let n;e.body.operation!==vR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vR.OPERATIONS_ENUM.LOGOUT?Ene(e,t).then(s=>{n=s,e.body.hdb_user=n,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(s=>{Il.warn(s),Il.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${s.stack}"`);let i=typeof s=="string"?{error:s}:{error:s.message};r(BR(s,i,NE.HTTP_STATUS_CODES.UNAUTHORIZED),null)}):(e.body.hdb_user=null,e.body.hdb_auth_header=e.headers.authorization,e.body.baseRequest=e.raw?.baseRequest,e.body.baseResponse=t.raw?.baseResponse,e.body.fastifyResponse=t,r())}a(gne,"authHandler");async function Rne(e,t,r=!1){let n;try{e.body.bypass_auth&&delete e.body.bypass_auth,n=ZB.chooseOperation(e.body);let s=await ZB.processLocalTransaction(e,n);if(s instanceof _ne&&s.headers){for(let[i,o]of s.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),s=s.pipe(hne({level:mne.Z_BEST_SPEED})))}return s}catch(s){throw Il.error(s),s}}a(Rne,"handlePostRequest");ex.exports={authHandler:gne,handlePostRequest:Rne,handleServerUncaughtException:pne,serverErrorHandler:Sne,reqBodyValidationHandler:Tne}});var sx=g((Hpe,nx)=>{"use strict";var Ane=require("fastify-plugin"),{handlePostRequest:tx,authHandler:One,reqBodyValidationHandler:bne}=IE();async function yne(e){e.decorate("hdbCore",{preValidation:[bne,One],request:t=>rx(tx(t,response)),requestWithoutAuthentication:(t,r)=>rx(tx(t,r,!0))})}a(yne,"hdbCore");async function rx(e){if(e=await e,e?.[Symbol.asyncIterator]&&!e[Symbol.iterator]){let t=[];for await(let r of e)t.push(r);return t}return e}a(rx,"convertAsyncIterators");nx.exports=Ane(yne)});var ax=g((Fpe,ox)=>{"use strict";var qpe=require("fs"),xR=ee();xR.initSync();var{CONFIG_PARAMS:ix}=P(),Nne=1024*1024*1024;function Ine(e){let t=xR.get(ix.HTTP_TIMEOUT),r=xR.get(ix.HTTP_KEEPALIVETIMEOUT);return{bodyLimit:Nne,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0,https:e}}a(Ine,"getServerOptions");ox.exports=Ine});var lx=g((Vpe,ux)=>{"use strict";var HR=ee();HR.initSync();var{CONFIG_PARAMS:cx}=P();function wne(){let e=HR.get(cx.HTTP_CORSACCESSLIST),t=HR.get(cx.HTTP_CORS),r;return t&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},e&&e.length>0&&e[0]!==null&&e[0]!=="*"&&(r.origin=(n,s)=>s(null,e.indexOf(n)!==-1))),r}a(wne,"getCORSOptions");ux.exports=wne});var fx=g((Ype,dx)=>{"use strict";var _x=ee();_x.initSync();var Cne=P();function Dne(){return _x.get(Cne.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Dne,"getHeaderTimeoutConfig");dx.exports=Dne});var qR={};Fe(qR,{customFunctionsServer:()=>Pne,ready:()=>wx,start:()=>Mne});function Mne(e){let t=e.securePort>0;return{async handleFile(r,n,s,i){Vs||(Vs=Ix(t),at.http((await Vs).server));let o=await Vs,c=(0,GR.dirname)(s),u=(0,GR.dirname)(n);if(u.startsWith("/")&&(u=u.slice(1)),!Ex.has(c)){Ex.add(c);try{o.register(vne(c,u))}catch(_){if(_.message==="Root plugin has already booted")Ye.warn(`Could not load root fastify route for ${s}, this may require a restart to install properly`);else throw _}}},ready:wx}}async function Pne(){try{Ye.info("In Custom Functions Fastify server"+process.cwd()),Ye.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ye.debug(`Custom Functions server process ${process.pid} starting up.`),await Une();let e=gx.get(Rx.CONFIG_PARAMS.HTTP_SECUREPORT)>0,t;try{t=Vs=await Ix(e)}catch(r){throw Ye.error(`Custom Functions buildServer error: ${r}`),r}try{await t.ready()}catch(r){throw Ye.error(`Custom Functions server.ready() error: ${r}`),r}t.server.cantCleanupProperly=!0}catch(e){Ye.error(`Custom Functions ${process.pid} Error: ${e}`),Ye.error(e),process.exit(1)}}async function Une(){try{Ye.info("Custom Functions starting configuration."),await Ax.setUsersToGlobal(),Ye.info("Custom Functions completed configuration.")}catch(e){Ye.error(e)}}function vne(e,t){return async function(r){try{Ye.info("Custom Functions starting buildRoutes"),Ye.trace("Loading fastify routes folder "+e),(0,hx.existsSync)(e)&&r.register(Tx.default,s=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:s.hdbCore,logger:Ye.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((s,i,o)=>{s?.message?Ye.error(s.message):s&&Ye.error(s),o()})}catch(n){Ye.error(`Custom Functions errored buildRoutes: ${n}`)}}}async function Ix(e){Ye.info("Custom Functions starting buildServer.");let t=(0,Ox.default)(e),r=(0,mx.default)(t);r.server.headersTimeout=(0,yx.default)(),r.setErrorHandler(Nx.serverErrorHandler);let n=(0,bx.default)();return n&&r.register(px.default,n),r.register(function(s,i,o){s.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Sx.default),await r.register(Lne),await r.after(),Qg(r),Ye.info("Custom Functions completed buildServer."),r}function wx(){if(Vs)return Vs.then?Vs.then(e=>e.ready()):Vs.ready()}var GR,hx,mx,px,Sx,Tx,gx,Rx,Ye,Lne,Ax,Ox,bx,yx,Nx,Vs,Ex,Cx=Re(()=>{GR=require("path"),hx=require("fs"),mx=H(require("fastify")),px=H(require("@fastify/cors")),Sx=H(oR()),Tx=H(require("@fastify/autoload")),gx=H(ee()),Rx=H(P()),Ye=H($()),Lne=H(sx()),Ax=H(_n()),Ox=H(ax()),bx=H(lx()),yx=H(fx()),Nx=H(IE());Da();lr();Ex=new Set;a(Mne,"start");a(Pne,"customFunctionsServer");a(Une,"setUp");a(vne,"buildRouteFolder");a(Ix,"buildServer");a(wx,"ready")});var FR={};Fe(FR,{start:()=>Bne});function Bne(e){return{handleDirectory(t,r){if(t==="/"){let n=(0,Ux.default)(r,e);return e.server.http(async(s,i)=>{if(!s.isWebSocket)return new Promise(o=>n(s._nodeRequest,s._nodeResponse,()=>{o(i(s))}))}),!0}},handleFile(t,r,n){Lx||(Lx=!0,e.server.http(async(s,i)=>{if(!s.isWebSocket){let o=Dx.get(s.pathname);if(o)return{handlesHeaders:!0,body:(0,Mx.default)(s,(0,Px.realpathSync)(o))}}return i(s)},{runFirst:!0})),Dx.set(r,n)}}}var Mx,Px,Ux,Dx,Lx,vx=Re(()=>{Mx=H(require("send")),Px=require("fs"),Ux=H(require("serve-static")),Dx=new Map;a(Bne,"start")});function Gne(){let e=(0,Gx.checkMemoryLimit)();e&&!process.env.DEV_MODE&&(console.error(e),VR=setInterval(()=>{DE.notify(e)},Hne).unref())}function qne(e,t=1,r){if(kR++,(0,$s.startWorker)("server/threads/threadServer.js",{name:ja.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(n){let s=new Promise((o,c)=>{function u(_){_.type===ja.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(n.removeListener("message",u),o(n))}a(u,"onMessage"),n.on("message",u),n.on("error",c)});xne.push(s),await s,Wa.push(n),n.expectedIdle=1,n.lastIdle=0,n.requests=1,n.on("message",o=>{if(o.requestId){let c=CE.get(o.requestId);c&&c(o)}}),n.on("exit",i),n.on("shutdown",i);function i(){let o=Wa.indexOf(n);o>-1&&Wa.splice(o,1)}if(a(i,"removeWorker"),Qa){let o=Qa;Qa=[];for(let c of o)qx[c.localPort](null,c)}}}),r){let n=setInterval(()=>{$R?$R=!1:(clearInterval(n),console.log("shut down dynamic thread due to inactivity"),(0,$s.shutdownWorkers)(),kR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function Fx(e=0,t){if(typeof e=="string")try{(0,LE.existsSync)(e)&&(0,LE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Fne:r=kne(t):r=YR;let n=(0,za.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(n._handle){n._handle.onconnection=qx[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),$R=!0,r(o,(c,u)=>{if(!c){if(Bx){let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Bx.deliverSocket(l,e,u),l.resume()}else kR>0?(Qa.length===0&&setTimeout(()=>{Qa.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(),o.localPort=e,Qa.push(o)):(console.log("start up a dynamic thread to handle request"),qne(0));Sr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new za.Socket({handle:o,writable:!0,readable:!0});Kne(l,c,e)}Sr(!0,"socket-routed")})};let s=du();DE.info(`HarperDB ${s.version} Server running on port ${e}`)}return n.on("error",s=>{console.error("Error in socket server",s)}),process.env._UNREF_SERVER&&n.unref(),n}function YR(e,t){let r,n=0;for(let s of Wa){if(s.threadId===-1)continue;let i=s.expectedIdle/s.requests;if(i>n)r=s;else if(n>=wE)return wE=i,t(r);n=i}wE=0,t(r)}function Fne(e,t){let r={};e.getpeername(r);let n=r.address,s=Ja.get(n),i=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=i,t(s.worker);YR(e,o=>{Ja.set(n,{worker:o,lastUsed:i}),t(o)})}function kne(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(n,s){let i=new za.Socket({handle:n,readable:!0,writable:!0});n._socket=i,i.on("data",o=>{n.readStop();let u=o.toString("latin1").match(t)?.[1],_=Ja.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,s(_.worker);YR(n,d=>{Ja.set(u,{worker:d,lastUsed:l}),s(d,o)})})}a(r,"findByHeaderAffinity")}function $ne(){wE=0;for(let e of Wa)e.expectedIdle=e.recentELU.idle+Vne,e.requests=1;Wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Kne(e,t,r){let n=Yne++;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(),CE.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")),CE.delete(n)),s.event=="destroy"&&(e.destroy(),CE.delete(n))})}var $s,za,ja,DE,LE,Hx,Gx,Wa,Qa,qx,Bx,kR,xne,VR,Hne,$R,wE,xx,Ja,Vne,CE,Yne,kx=Re(()=>{$s=H(Qe()),za=require("net"),ja=H(P()),DE=H($()),LE=require("fs");Ds();Hx=require("worker_threads"),Gx=H(Xi()),Wa=[],Qa=[],qx=[],kR=0,xne=[];Hx.isMainThread&&(process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)}),(0,$s.onMessageFromWorkers)(e=>{e.type===ja.ITC_EVENT_TYPES.RESTART&&VR&&(clearInterval(VR),Gne())}));Hne=6e5;a(Gne,"licenseWarning");a(qne,"startHTTPWorker");a(Fx,"startSocketServer");wE=0;a(YR,"findMostIdleWorker");xx=36e5,Ja=new Map;a(Fne,"findByRemoteAddressAffinity");a(kne,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ja)r.lastUsed+xx<e&&Ja.delete(t)},xx).unref();Vne=1e3;a($ne,"updateWorkerIdleness");(0,$s.setMonitorListener)($ne);CE=new Map,Yne=1;a(Kne,"proxySocket")});var zR={};Fe(zR,{Request:()=>KR,createReuseportFd:()=>ME});var Vx,KR,WR,QR,ME,PE=Re(()=>{Vx=require("os"),KR=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let n=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=n,this.headers=new QR(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 WR(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}pipe(t,r){return this.#e.pipe(t,r)}},QR=class{constructor(t){this.asObject=t}static{a(this,"Headers")}set(t,r){this.asObject[t.toLowerCase()]=r}get(t){return this.asObject[t.toLowerCase()]}has(t){return this.asObject.hasOwnProperty(t.toLowerCase())}[Symbol.iterator](){return Object.entries(this.asObject)[Symbol.iterator]()}keys(){return Object.keys(this.asObject)}values(){return Object.values(this.asObject)}forEach(t){for(let[r,n]of this)t(n,r,this)}};(0,Vx.platform)()!="win32"&&(ME=require("node-unix-socket").createReuseportFd)});var Wx=g((oSe,Kx)=>{"use strict";var Wne=require("cluster"),Lo=ee();Lo.initSync();var Yx=P(),tSe=require("util"),Ys=$(),rSe=require("fs"),Qne=require("fastify"),nSe=du(),zne=require("@fastify/cors"),Jne=require("@fastify/compress"),jne=require("@fastify/static"),Xne=oR(),Zne=require("path"),{PACKAGE_ROOT:ese}=P(),tse=ys(),rse=z(),nse=_n(),sse=Xi(),{server:ise}=(lr(),ie(Gi)),{node_request_key:sSe}=(PE(),ie(zR)),{authHandler:ose,handlePostRequest:ase,serverErrorHandler:cse,reqBodyValidationHandler:use}=IE(),iSe=require("net"),{registerContentHandlers:lse}=(Da(),ie(b0)),_se=6e4,dse=1024*1024*1024,fse="TRUE",{CONFIG_PARAMS:wl}=Yx,Xa;Kx.exports={hdbServer:$x,start:$x};async function $x(e){try{Ys.info("In Fastify server"+process.cwd()),Ys.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ys.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Wne.isMaster,await Ese();let t=e.securePort>0;Xa=hse(t),await Xa.ready(),e||(e={}),e.isOperationsServer=!0;try{ise.http(Xa.server,e),Xa.server.closeIdleConnections||await Xa.listen({port:0,host:"::"})}catch(r){throw Xa.close(),Ys.error(r),Ys.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Ys.fatal(t),process.exit(1)}}a($x,"operationsServer");async function Ese(){Ys.trace("Configuring HarperDB process."),tse.setSchemaDataToGlobal(),await nse.setUsersToGlobal(),await sse.getLicense()}a(Ese,"setUp");function hse(e){Ys.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=mse(e),r=Qne(t);r.server.headersTimeout=Sse(),r.setErrorHandler(cse);let n=pse();n&&r.register(zne,n),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Xne),r.register(Jne),r.register(jne,{root:Zne.join(ese,"studio/build-local")}),lse(r);let s=Lo.get(Yx.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!rse.isEmpty(s)&&s.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[use,ose],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ase(i,o)}),r.get("/health",()=>"HarperDB is running."),Ys.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(hse,"buildServer");function mse(e){let t=Lo.get(wl.OPERATIONSAPI_NETWORK_TIMEOUT),r=Lo.get(wl.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT);return{bodyLimit:dse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1,https:e}}a(mse,"getServerOptions");function pse(){let e=Lo.get(wl.OPERATIONSAPI_NETWORK_CORS),t=Lo.get(wl.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===fse)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(n,s)=>s(null,t.indexOf(n)!==-1))),r}a(pse,"getCORSOpts");function Sse(){return Lo.get(wl.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??_se}a(Sse,"getHeaderTimeoutConfig")});var tA={};Fe(tA,{disableNATS:()=>gse,publishToStream:()=>BE,setNATSReplicator:()=>JR,setPublishToStream:()=>Rse,setSubscription:()=>eA,start:()=>Tse});function Tse(){Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Ose()}function gse(e=!0){Xx=e}function Rse(e,t){BE=e,eA=t}function Ose(){if(Xx||process.env._DISABLE_NATS)return;let e=mr(),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];JR(s,r,i)}}rA((r,n)=>{JR(r.tableName,r.databaseName,r),n&&eH(r)}),!Qx&&(Qx=!0)}function JR(e,t,r){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 $t{static{a(this,"NATSReplicator")}put(i){return n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Me],record:i})}delete(){return n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Me]})}publish(i){return n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Me],record:i})}patch(i){return n(this.getContext()).addWrite(t,{operation:"patch",table:e,id:this[Me],record:i})}invalidate(){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Me]})}static defineSchema(i){eH(i)}static subscribe(){let i=new In;return eA(t,e,i),i}static subscribeOnThisThread(i){return i<(Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXINGESTTHREADS)??Ase)}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 UE(s.transaction,s);let o=s.transaction;for(;o.next;)o=o.next;o.next=s.transaction.nats,i.user=s.user,i.context=s}else i=Zx;return i}a(n,"getNATSTransaction")}function eH(e){let t=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME);BE(`${XR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,ZR.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 zx,XR,ZR,Jx,jx,Cl,Dl,vE,Xx,BE,eA,Ase,Zx,Qx,UE,jR,tH=Re(()=>{Ae();cn();zx=H(ut()),XR=H(Ve()),ZR=H(Os());Cc();Jx=H(MS()),jx=H(vr()),Cl=H(ee()),Dl=H(P()),vE=H($());a(Tse,"start");a(gse,"disableNATS");BE=zx.publishToStream,eA=Jx.setSubscription;a(Rse,"setPublishToStream");Ase=2;a(Ose,"assignReplicationSource");a(JR,"setNATSReplicator");a(eH,"publishSchema");UE=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r){r.expiresAt=this.context?.expiresAt;let n=this.writes_by_db.get(t);n||this.writes_by_db.set(t,n=[]),n.push(r)}commit({timestamp:t}){let r=Cl.default.get(Dl.default.CONFIG_PARAMS.CLUSTERING_NODENAME),n=[];for(let[s,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,E=l.operation=="put"?"upsert":l.operation;u||(vE.trace(`Sending transaction event ${E}`),_=u={operation:E,schema:s,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&E!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(l.record),c.push(l.id)):_=_.next={operation:E,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&n.push(BE(`${XR.SUBJECT_PREFIXES.TXN}.${s}.${u.table}`,(0,ZR.createNatsTableStreamName)(s,u.table),void 0,u)?.catch(l=>{throw vE.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(n)}},jR=class extends UE{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,jx.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit({})}};Zx=new jR});var mH=g(Mi=>{"use strict";var{isMainThread:iA,parentPort:Ml,threadId:xE}=require("worker_threads"),{Socket:bse,createServer:yse}=require("net"),{createServer:Nse,IncomingMessage:Ise}=require("http"),{createServer:wse}=require("https"),{readFileSync:Cse,unlinkSync:rH,existsSync:Dse}=require("fs"),Pt=$(),qe=ee(),_t=P(),{server:qE}=(lr(),ie(Gi)),{WebSocketServer:Lse}=require("ws"),{createSecureContext:Mse,createServer:Pse}=require("node:tls"),{getTicketKeys:aH,restartNumber:Use,getWorkerIndex:Pl}=Qe(),{Headers:cH,appendHeader:vse}=(el(),ie(WU)),{recordAction:Ll,recordActionBinary:nH}=(Ds(),ie(pu)),{Request:uH,createReuseportFd:sH}=(PE(),ie(zR)),{checkMemoryLimit:Bse}=Xi(),{X509Certificate:xse}=require("crypto"),lH=require("tls"),Hse=lH.createSecureContext,Za;lH.createSecureContext=function(e){return Za||Hse(e)};var _H=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG);if(_H){let e;if(iA)e=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_PORT)??9229,process.on(["SIGINT","SIGTERM","SIGQUIT","exit"],()=>{try{require("inspector").close()}catch(t){Pt.info("Could not close debugger",t)}});else{let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_STARTINGPORT);t&&Pl()>=0&&(e=t+Pl())}if(e){let t=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_HOST),r=qe.get(_t.CONFIG_PARAMS.THREADS_DEBUG_WAITFORDEBUGGER);try{require("inspector").open(e,t,r)}catch(n){Pt.trace(`Could not start debugging on port ${e}, you may already be debugging:`,n.message)}}}else if(process.env.DEV_MODE&&iA)try{require("inspector").open(9229)}catch(e){Use<=1&&Pt.trace("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:fSe,CONFIG_PARAMS:Gse}=_t;qe.initSync();var qse=qe.get(Gse.HTTP_SESSIONAFFINITY),hs={};Mi.registerServer=uA;Mi.httpServer=lA;Mi.deliverSocket=cA;Mi.startServers=dH;Mi.when_components_loaded=null;Mi.createSNICallback=_A;qE.http=lA;qE.request=$se;qE.socket=Yse;qE.ws=Kse;var nA={},HE={},Fse,Ks={},GE={},kse=[],oA=[];function dH(){return Mi.when_components_loaded=dA().loadRootComponents(!0).then(()=>{Ml?.on("message",t=>{let{port:r,fd:n,data:s}=t;if(n)cA(n,r,s);else if(t.requestId)Vse(t);else if(t.type===_t.ITC_EVENT_TYPES.SHUTDOWN){Pt.trace("received shutdown request",xE);for(let i in hs){let o=hs[i],c;if(o.closeIdleConnections){let _=Object.getOwnPropertySymbols(o).find(E=>E.description.includes("connections")),l=0,d=setInterval(()=>{l++;let E=l>=100,f=o[_][E?"all":"idle"]();if(f.length===0){E&&clearInterval(d);return}l===1?Pt.info(`Closing ${f.length} idle connections`):E&&Pt.warn(`Forcefully closing ${f.length} active connections`);for(let h=0,p=f.length;h<p;h++){let S=f[h].socket;S._httpMessage&&!S._httpMessage.finished&&!E||(E?S.destroySoon():S.end(`HTTP/1.1 408 Request Timeout\r
|
|
29
31
|
Connection: close\r
|
|
30
32
|
\r
|
|
31
|
-
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{rH(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,xE),o.cantCleanupProperly||Pt.warn("Had to forcefully exit the thread",xE),process.exit(0)},5e3).unref()})}if(_H||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Pt.info("Could not close debugger",i)}}}).ref();let e=[];if(sH&&!qse)for(let t in hs){let r=hs[t];if(isNaN(t)&&Pl()==0){Dse(t)&&rH(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),Pt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=qe.get(_t.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=Pl();if(o<i[0]||o>i[1])continue}let s;try{s=sH(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),Pt.trace("Listening on port "+t,xE)}).on("error",o)}))}Promise.all(e).then(()=>{Ml?.postMessage({type:_t.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dH,"startServers");iA||dH();function cA(e,t,r){let n=e?.read?e:new bse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=hs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=hs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Pt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cA,"deliverSocket");var iH=new Map;function Vse(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=iH.get(s),r){case"connection":i=cA(void 0,t),iH.set(s,i),i.write=(c,u,_)=>(Ml.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Ml.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Ml.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Vse,"proxyRequest");function uA(e,t,r=!0){!+t&&t!==qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(qe.get(_t.CONFIG_PARAMS.HTTP_PORT),10));let n=hs[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",oH),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else hs[t]=e;e.on("unhandled",oH)}a(uA,"registerServer");function fH(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],qe.get(_t.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_PORT),secure:qe.get(_t.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(fH,"getPorts");function lA(e,t){for(let{port:r,secure:n}of fH(t))EH(r,n,t?.isOperationsServer),typeof e=="function"?oA[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,uA(e,r,!1)),GE[r]=aA(oA,r),Fse=aA(kse,r)}a(lA,"httpServer");function EH(e,t,r){if(!Ks[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:qe.get(n+"_keepAliveTimeout"),headersTimeout:qe.get(n+"_headersTimeout"),requestTimeout:qe.get(n+"_timeout")},i=qe.get(n+"_mtls"),o=qe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=qe.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:aH(),maxHeaderSize:qe.get(_t.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:_A(u)})}let c=Bse();Ks[e]=(t?wse:Nse)(s,async(u,_)=>{try{let d=performance.now(),E=new uH(u,_);r&&(E.isOperationsServer=!0);let f=await GE[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=hH(E)}if(c?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 B of f.headers||[])_.setHeader(B[0],B[1]);return u.baseRequest=E,_.baseResponse=f,Ks[e].emit("unhandled",u,_)}let h=f.status||200,p=performance.now(),S=p-d,T=f.body,R;if(!f.handlesHeaders){let B=f.headers||new cH;T?T.length>=0&&(typeof T=="string"?B.set("Content-Length",Buffer.byteLength(T)):B.set("Content-Length",T.length),R=!0):(B.set("Content-Length","0"),R=!0);let U=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(U+=", miss"),vse(B,"Server-Timing",U,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),R&&_.end(T)}let b=E.handlerPath,I=E.method;if(Ll(S,"duration",b,I,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),nH(h<400,"success",b,I),nH(1,h,b,I),!R)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let B=0;T.on("data",U=>{B+=U.length}),T.on("end",()=>{Ll(performance.now()-p,"transfer",b,I),Ll(B,"bytes-sent",b,I)})}else T?.then?T.then(B=>{_.end(B)},l):_.end(T)}catch(d){l(d)}function l(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?Pt.warn(d):Pt.info(d):Pt.error(d)}a(l,"onError")}),i&&(Ks[e].mtlsConfig=i),t&&(Ks[e].on("secureConnection",u=>{u._parent.startTime&&Ll(performance.now()-u._parent.startTime,"tls-handshake",e),Ll(u.isSessionReused(),"tls-reused",e)}),Ks[e].isSecure=!0,s.SNICallback(null,(u,_)=>{try{Za=_,_&&Ks[e].setSecureContext(_.options)}finally{Za=null}})),uA(Ks[e],e)}return Ks[e]}a(EH,"getHTTPServer");function aA(e,t){let r=hH;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(aA,"makeCallbackChain");function hH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new cH}}a(hH,"unhandled");function $se(e,t){lA(e,{requestOnly:!0,...t})}a($se,"onRequest");function Yse(e,t){let r;if(t.securePort){let n=Object.assign({},qe.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:_A(n)};r=Pse(s,e),s.SNICallback(null,(i,o)=>{try{Za=o,o&&r.setSecureContext(o.options)}finally{Za=null}}),hs[t.securePort]=r}return t.port&&(r=yse({noDelay:!0},e),hs[t.port]=r),r}a(Yse,"onSocket");Object.defineProperty(Ise.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Kse(e,t){let r;for(let{port:n,secure:s}of fH(t)){HE[n]||(HE[n]=new Lse({server:r=EH(n,s)}),HE[n].on("connection",async(c,u)=>{try{let _=new uH(u);_.isWebSocket=!0;let l=GE[n](_),d=u.headers["sec-websocket-protocol"]||"",E=nA[n];if(d){let f;for(let h=0;h<E.length;h++){let p=E[h];p.protocol===d&&(f=!0,p.listener(c,_,l))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,l)}}catch(_){Pt.warn("Error handling WebSocket connection",_)}}),HE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=nA[n];o||(o=nA[n]=[]),o.push({listener:e,protocol:i}),GE[n]=aA(oA,n)}return r}a(Kse,"onWebSocket");function oH(e,t){t.writeHead(404),t.end(`Not found
|
|
33
|
+
`))}},25).unref()}o.close?.(()=>{if(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&Pl()==0)try{rH(qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET))}catch{}clearInterval(c),setTimeout(()=>{console.log("forced close server",i,xE),o.cantCleanupProperly||Pt.warn("Had to forcefully exit the thread",xE),process.exit(0)},5e3).unref()})}if(_H||process.env.DEV_MODE)try{require("inspector").close()}catch(i){Pt.info("Could not close debugger",i)}}}).ref();let e=[];if(sH&&!qse)for(let t in hs){let r=hs[t];if(isNaN(t)&&Pl()==0){Dse(t)&&rH(t),e.push(new Promise((i,o)=>{r.listen({path:t},()=>{i(),Pt.info("Domain socket listening on "+t)}).on("error",o)}));continue}let n=qe.get(_t.CONFIG_PARAMS.HTTP_THREADRANGE);if(n){let i=typeof n=="string"?n.split("-"):n,o=Pl();if(o<i[0]||o>i[1])continue}let s;try{s=sH(+t,"::")}catch(i){console.error(`Unable to bind to port ${t}`,i);continue}e.push(new Promise((i,o)=>{r.listen({fd:s},()=>{i(),Pt.trace("Listening on port "+t,xE)}).on("error",o)}))}Promise.all(e).then(()=>{Ml?.postMessage({type:_t.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dH,"startServers");iA||dH();function cA(e,t,r){let n=e?.read?e:new bse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),s=hs[t];if(s.isSecure&&(n.startTime=performance.now()),s)typeof s=="function"?s(n):s.emit("connection",n),r&&n.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=hs[t];c?(typeof c=="function"?c(n):c.emit("connection",n),r&&n.emit("data",r)):o<5?i(o+1):(Pt.error(`Server on port ${t} was not registered`),n.destroy())},1e3)},"retry");i(1)}return n}a(cA,"deliverSocket");var iH=new Map;function Vse(e){let{port:t,event:r,data:n,requestId:s}=e,i;switch(i=iH.get(s),r){case"connection":i=cA(void 0,t),iH.set(s,i),i.write=(c,u,_)=>(Ml.postMessage({requestId:s,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(Ml.postMessage({requestId:s,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Ml.postMessage({requestId:s,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(n,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Vse,"proxyRequest");function uA(e,t,r=!0){!+t&&t!==qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&(t=parseInt(qe.get(_t.CONFIG_PARAMS.HTTP_PORT),10));let n=hs[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",oH),s.on("unhandled",(i,o)=>{e.cantCleanupProperly&&(n.cantCleanupProperly=!0),e.emit("request",i,o)}),n.lastServer=e}else hs[t]=e;e.on("unhandled",oH)}a(uA,"registerServer");function fH(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[],qe.get(_t.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_PORT),secure:qe.get(_t.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:qe.get(_t.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),e?.isOperationsServer&&qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET)&&t.push({port:qe.get(_t.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_DOMAINSOCKET),secure:!1}),t}a(fH,"getPorts");function lA(e,t){for(let{port:r,secure:n}of fH(t))EH(r,n,t?.isOperationsServer),typeof e=="function"?oA[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):(e.isSecure=n,uA(e,r,!1)),GE[r]=aA(oA,r),Fse=aA(kse,r)}a(lA,"httpServer");function EH(e,t,r){if(!Ks[e]){let n=r?"operationsApi_network":"http",s={noDelay:!0,keepAliveTimeout:qe.get(n+"_keepAliveTimeout"),headersTimeout:qe.get(n+"_headersTimeout"),requestTimeout:qe.get(n+"_timeout")},i=qe.get(n+"_mtls"),o=qe.get(n+"_mtls_required");if(t){n=r?"operationsApi_":"";let u=qe.get(n+"tls");Object.assign(s,{allowHTTP1:!0,rejectUnauthorized:!!o,requestCert:!!i,ticketKeys:aH(),maxHeaderSize:qe.get(_t.CONFIG_PARAMS.HTTP_MAXHEADERSIZE),SNICallback:_A(u)})}let c=Bse();Ks[e]=(t?wse:Nse)(s,async(u,_)=>{try{let d=performance.now(),E=new uH(u,_);r&&(E.isOperationsServer=!0);let f=await GE[e](E);if(!f){if(E._nodeResponse.statusCode)return;f=hH(E)}if(c?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 B of f.headers||[])_.setHeader(B[0],B[1]);return u.baseRequest=E,_.baseResponse=f,Ks[e].emit("unhandled",u,_)}let h=f.status||200,p=performance.now(),S=p-d,T=f.body,R;if(!f.handlesHeaders){let B=f.headers||new cH;T?T.length>=0&&(typeof T=="string"?B.set("Content-Length",Buffer.byteLength(T)):B.set("Content-Length",T.length),R=!0):(B.set("Content-Length","0"),R=!0);let U=`hdb;dur=${S.toFixed(2)}`;f.wasCacheMiss&&(U+=", miss"),vse(B,"Server-Timing",U,!0),_.writeHead(h,B&&(B[Symbol.iterator]?Array.from(B):B)),R&&_.end(T)}let b=E.handlerPath,I=E.method;if(Ll(S,"duration",b,I,f.wasCacheMiss==null?void 0:f.wasCacheMiss?"cache-miss":"cache-hit"),nH(h<400,"success",b,I),nH(1,"response_"+h,b,I),!R)if(T?.pipe){T.pipe(_),T.destroy&&_.on("close",()=>{T.destroy()});let B=0;T.on("data",U=>{B+=U.length}),T.on("end",()=>{Ll(performance.now()-p,"transfer",b,I),Ll(B,"bytes-sent",b,I)})}else T?.then?T.then(B=>{_.end(B)},l):_.end(T)}catch(d){l(d)}function l(d){let E=d.headers;_.writeHead(d.statusCode||500,E&&(E[Symbol.iterator]?Array.from(E):E)),_.end(d.toString()),d.statusCode?d.statusCode===500?Pt.warn(d):Pt.info(d):Pt.error(d)}a(l,"onError")}),i&&(Ks[e].mtlsConfig=i),t&&(Ks[e].on("secureConnection",u=>{u._parent.startTime&&Ll(performance.now()-u._parent.startTime,"tls-handshake",e),Ll(u.isSessionReused(),"tls-reused",e)}),Ks[e].isSecure=!0,s.SNICallback(null,(u,_)=>{try{Za=_,_&&Ks[e].setSecureContext(_.options)}finally{Za=null}})),uA(Ks[e],e)}return Ks[e]}a(EH,"getHTTPServer");function aA(e,t){let r=hH;for(let n=e.length;n>0;){let{listener:s,port:i}=e[--n];if(i===t||i==="all"){let o=r;r=a(c=>s(c,o),"next_callback")}}return r}a(aA,"makeCallbackChain");function hH(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new cH}}a(hH,"unhandled");function $se(e,t){lA(e,{requestOnly:!0,...t})}a($se,"onRequest");function Yse(e,t){let r;if(t.securePort){let n=Object.assign({},qe.get("tls"));t.mtls?.certificateAuthority&&(n.certificateAuthority=t.mtls.certificateAuthority);let s={noDelay:!0,rejectUnauthorized:!!t.mtls?.required,requestCert:!!t.mtls,SNICallback:_A(n)};r=Pse(s,e),s.SNICallback(null,(i,o)=>{try{Za=o,o&&r.setSecureContext(o.options)}finally{Za=null}}),hs[t.securePort]=r}return t.port&&(r=yse({noDelay:!0},e),hs[t.port]=r),r}a(Yse,"onSocket");Object.defineProperty(Ise.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.includes("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Kse(e,t){let r;for(let{port:n,secure:s}of fH(t)){HE[n]||(HE[n]=new Lse({server:r=EH(n,s)}),HE[n].on("connection",async(c,u)=>{try{let _=new uH(u);_.isWebSocket=!0;let l=GE[n](_),d=u.headers["sec-websocket-protocol"]||"",E=nA[n];if(d){let f;for(let h=0;h<E.length;h++){let p=E[h];p.protocol===d&&(f=!0,p.listener(c,_,l))}if(f)return}for(let f=0;f<E.length;f++){let h=E[f];h.protocol||h.listener(c,_,l)}}catch(_){Pt.warn("Error handling WebSocket connection",_)}}),HE[n].on("error",c=>{console.log("Error in setting up WebSocket server",c)}));let i=t?.subProtocol||"",o=nA[n];o||(o=nA[n]=[]),o.push({listener:e,protocol:i}),GE[n]=aA(oA,n)}return r}a(Kse,"onWebSocket");function oH(e,t){t.writeHead(404),t.end(`Not found
|
|
32
34
|
`)}a(oH,"defaultNotFound");function sA(e){return e.startsWith("-----BEGIN")?e:Cse(e)}a(sA,"readPEM");function _A(e){let t=[];for(let i=0;e[i];i++)t.push(e[i]);t.length||t.push(e);let r=new Map,n,s=!1;for(let i of t){let o=sA(i.privateKey),c=sA(i.certificate),u=i.certificateAuthority&&sA(i.certificateAuthority);if(!o||!c)throw new Error("Missing private key or certificate for secure server");let _={ciphers:i.ciphers,ca:u,ticketKeys:aH()},l=Mse(_);l.options=_,_.instantiatedContext=l,l.context.setCert(c),l.context.setKey(o,void 0),_.cert=c,_.key=o,l.certStart=c.slice(0,100).toString(),n||(n=l);let d=new xse(c),E=i.hostname??i.host??i.hostnames??i.hosts??(d.subjectAltName?d.subjectAltName.split(",").map(f=>{let h=f.indexOf(":");return f.slice(h+1)}):[d.subject.match(/CN=(.*)/)?.[1]]);Array.isArray(E)||(E=[E]);for(let f of E)f?(f[0]==="*"&&(s=!0,f=f.slice(1)),r.has(f)||r.set(f,l)):Pt.error("No hostname found for certificate at",i.certificate)}return(i,o)=>{let c=i;for(;;){let u=r.get(c);if(u)return Pt.debug("Found certificate for",i,u.certStart),o(null,u);if(s&&c){let _=c.indexOf(".",1);_<0?c="":c=c.slice(_)}else break}Pt.debug("No certificate found to match",i,"using the first certificate"),o(null,n)}}a(_A,"createSNICallback")});async function RH({clientId:e,user:t,clean:r,will:n,keepalive:s}){let i;if(e&&!r){let o=await fA.get(e,{returnNonexistent:!0});i=new mA(e,t,o),o&&(i.sessionWasPresent=!0)}else{if(e){let o=await fA.get(e);o&&o.delete()}i=new kE(e,t)}return n&&(n.id=e,n.user={username:t?.username},Ul.put(n)),s&&(i.keepalive=s,i.receivedPacket()),i}function EA(){return FE++,FE>65500&&(FE=1),FE}function hA(e,t,r){let{topic:n,retain:s}=e;e.data=t,e.async=!0,r.authorize=!0;let i=yi.getMatch(n);if(!i)throw new Error(`Can not publish to topic ${n} as it does not exist, no resource has been defined to handle this topic`);e.url=i.relativeURL;let o=i.Resource;return rt(r,()=>s?t===void 0?o.delete(e,r):o.put(e,e.data,r):o.publish(e,e.data,r))}var SH,Pi,TH,gH,pH,fA,Ul,FE,kE,mA,AH=Re(()=>{Ae();Zu();SH=H(vr()),Pi=H($());so();TH=H(Qe()),gH=H(mH());lr();pH=100,fA=Et({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"}]}}]}),Ul=Et({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,TH.getWorkerIndex)()===0&&(async()=>{await gH.when_components_loaded,await new Promise(e=>setTimeout(e,2e3));for await(let e of Ul.search({})){let t=e.data,r=Object.assign({},e);r.user?.username&&(r.user=await at.getUser(r.user.username));try{await hA(r,t,r)}catch{(0,Pi.warn)("Failed to publish will",t)}Ul.delete(e.id)}})();a(RH,"getSession");FE=1;a(EA,"getNextMessageId");kE=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;request;socket;subscriptions=[];awaitingAcks;sessionWasPresent;keepalive;keepaliveTimer;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,n){let{topic:s,rh:i,startTime:o}=t,c=s.indexOf("?"),u,_;if(c>-1?(u=s.slice(c),_=s.slice(0,c)):_=s,!_)throw new Error("No topic provided");if(_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");let l=this.subscriptions.find(T=>T.topic===s),d;l?(d=i>0,l.end(),this.subscriptions.splice(this.subscriptions.indexOf(l),1)):d=i===2;let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:d,url:""};o&&(0,Pi.trace)("Resuming subscription from",s,"from",o);let f=yi.getMatch(_);if(!f){let T=new Error(`The topic ${s} does not exist, no resource has been defined to handle this topic`);throw T.statusCode=404,T}if(E.url=f.relativeURL,E.url.indexOf("+")>-1||E.url.indexOf("#")>-1){let T=E.url.slice(1);if(T.indexOf("#")>-1&&T.indexOf("#")!==T.length-1)throw new Error("Multi-level wildcards can only be used at the end of a topic");if(E.isCollection=!0,T.indexOf("+")===T.length-1)E.onlyChildren=!0,E.url="/"+T.slice(0,T.length-1);else{let R=T.split("/"),b;for(let U=0;U<R.length;U++)if(R[U].indexOf("+")>-1)if(R[U]==="+")b=!0;else throw new Error("Single-level wildcards can only be used as a topic level (between or after slashes)");if(n&&b)throw new Error("Filters can not be combined");let I=!0;R[R.length-1]==="#"&&(R.length--,I=!1),b&&(n=a(U=>{let F=U.id;if(!Array.isArray(F)||I&&F.length!==R.length)return!1;for(let M=0;M<R.length;M++)if(R[M]!=="+"&&R[M]!==F[M])return!1;return!0},"filter"));let B=R.indexOf("+");E.url="/"+(B>-1?R.slice(0,B):R).concat("").join("/")}}let h=f.path,p=f.Resource,S=await rt(E,async()=>{let T=this.createContext();T.topic=s,T.retainHandling=i;let R=await p.subscribe(E,T);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${s}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${s}`);let b=(async()=>{for await(let I of R)try{let B;if(I.type&&I.type!=="put"&&I.type!=="delete"&&I.type!=="message"&&I.type!=="patch"||n&&!n(I))continue;r?(I.topic=s,B=this.needsAcknowledge(I)):(I.acknowledge?.(),B=EA());let U=I.id;if(Array.isArray(U)&&(U=wa(U)),U==null&&(U=""),await this.listener(h+"/"+U,I.value,B,t)===!1)break;this.awaitingAcks?.size>pH?await new Promise(M=>setTimeout(M,this.awaitingAcks.size-pH)):await new Promise(setImmediate)}catch(B){(0,Pi.warn)(B)}})();return R});return S.topic=s,S.qos=t.qos,this.subscriptions.push(S),S}resume(){}needsAcknowledge(t){let r=EA();return t.acknowledge&&(this.awaitingAcks||(this.awaitingAcks=new Map),this.awaitingAcks.set(r,t.acknowledge)),r}acknowledge(t){let r=this.awaitingAcks?.get(t);r&&(this.awaitingAcks.delete(t),r())}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 hA(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();rt(r,async()=>{try{if(!t){let n=await Ul.get(this.sessionId);n?.doesExist()&&await hA(n,n.data,r)}}finally{await Ul.delete(this.sessionId)}}).catch(n=>{(0,Pi.warn)(`Error publishing MQTT will for ${this.sessionId}`,n)});for(let n of this.subscriptions)n.end();this.subscriptions=[]}receivedPacket(){this.keepalive&&(clearTimeout(this.keepaliveTimer),this.keepaliveTimer=setTimeout(()=>{this.socket?.destroy?this.socket.destroy(new Error("Keepalive timeout")):this.socket?.terminate()},this.keepalive*1500))}};a(hA,"publish");mA=class extends kE{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,n){super(t,r),this.sessionRecord=n||{id:t,subscriptions:[]}}async resume(){for(let t of this.sessionRecord.subscriptions||[])await this.resumeSubscription({omitCurrent:!0,topic:t.topic,qos:t.qos,startTime:t.startTime},!0,t.acks?r=>!t.acks.includes(r.timestamp):null)}resumeSubscription(t,r,n){return super.addSubscription(t,r,n)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=EA(),n={topic:t.topic,timestamp:t.timestamp};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,Pi.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,SH.getNextMonotonicTime)()),(0,Pi.trace)("Added durable subscription",t.topic,r),{qos:t.qos,topic:t.topic,startTime:r}}),fA.put(this.sessionRecord)}}});var SA={};Fe(SA,{bypassAuth:()=>Wse,start:()=>Qse});function Wse(){IH=!0}function Qse({server:e,port:t,network:r,webSocket:n,securePort:s,requireAuthentication:i}){e.mqtt||(e.mqtt={requireAuthentication:i,sessions:new Set,events:new NH.EventEmitter},e.mqtt.events.on("error",()=>{}));let o=e.mqtt,c,u=r?.mtls;return n&&(c=e.ws((_,l,d)=>{if(_.protocol==="mqtt"){o.events.emit("connection",_),jt.debug("Received WebSocket connection for MQTT from",_._socket.remoteAddress);let{onMessage:E,onClose:f}=bH(_,h=>{_.send(h)},l,Promise.resolve(d).then(()=>l?.user),o);_.on("message",E),_.on("close",f),_.on("error",h=>{jt.info("WebSocket error",h)})}},Object.assign({subProtocol:"mqtt"},n))),(t||s)&&(c=e.socket(async _=>{let l;if(o.events.emit("connection",_),jt.debug(`Received ${_.getCertificate?"SSL":"TCP"} connection for MQTT from ${_.remoteAddress}`),u){if(_.authorized)try{let f=u.user;if(f!==null){(f===void 0||f==="Common Name"||f==="CN")&&(f=_.getPeerCertificate().subject.CN);try{l=await e.getUser(f,null,null),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:l?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT mTLS",remote_address:_.remoteAddress})}catch(h){throw(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:f,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:_.remoteAddress}),h}}else jt.debug("MQTT mTLS authorized connection (mTLS did not authorize a user)","from",_.remoteAddress)}catch(f){o.events.emit("error",f,_),jt.error(f)}else if(u.required)return jt.info(`Unauthorized connection attempt, no authorized client certificate provided, error: ${_.authorizationError}`),_.end()}!l&&IH&&_.remoteAddress.includes("127.0.0.1")&&(l=await(0,yH.getSuperUser)(),jt.debug("Auto-authorizing local connection",l?.username));let{onMessage:d,onClose:E}=bH(_,f=>_.write(f),null,l,o);_.on("data",d),_.on("close",E),_.on("error",f=>{jt.info("Socket error",f)})},{port:t,securePort:s,mtls:u})),c}function bH(e,t,r,n,s){OH||(OH=!0,mu(d=>{VE>0&&d.push({metric:"mqtt-connections",connections:VE,byThread:!0})}));let i;VE++;let o,c={protocolVersion:4},u=(0,YE.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){VE--,i||(i=!0,o?.disconnect?.(),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!1,"connection","mqtt","disconnect"),jt.debug("MQTT connection was closed",e.remoteAddress))}return a(l,"onClose"),u.on("packet",async d=>{n?.then&&(n=await n),o?.then&&await o;let E=d.topic,f=E?.indexOf("/",1),h=f>0?E.slice(0,f):E;Sr(d.length,"bytes-received",h,S(d),"mqtt");try{switch(o?.receivedPacket?.(),d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{n=await at.getUser(d.username,d.password.toString(),r),(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&$E.notify({username:n?.username,status:Xt.AUTH_AUDIT_STATUS.SUCCESS,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch(M){return(0,ec.get)(Xt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&$E.error({username:d.username,status:Xt.AUTH_AUDIT_STATUS.FAILURE,type:Xt.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134})}if(!n&&s.requireAuthentication)return s.events.emit("auth-failed",d,e),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:4,returnCode:134});try{if(s.authorizeClient?.(d,n),d.will){let M=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type")));d.will.data=d.will.payload?.length>0?M(d.will.payload):void 0,delete d.will.payload}o=RH({user:n,...d}),o=await o,o.socket=e,r&&(o.request=r),s.sessions.add(o)}catch(M){return jt.error(M),s.events.emit("auth-failed",d,e,M),Wr(!1,"connection","mqtt","connect"),p({cmd:"connack",reasonCode:M.code||5,returnCode:M.code||128})}s.events.emit("connected",o,e),Wr(!0,"connection","mqtt","connect"),p({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((M,Q,J,j)=>{try{if(i)throw new Error("Session disconnected while trying to send message to",M);let oe=M.indexOf("/",1),ue=oe>0?M.slice(0,oe):M;p({cmd:"publish",topic:M,payload:T(Q),messageId:J||Math.floor(Math.random()*1e8),qos:j.qos},ue);let le=e._socket??e;return le.writableNeedDrain?new Promise(Be=>le.once("drain",Be)):!le.closed}catch(oe){return jt.error(oe),o?.disconnect(),s.sessions.delete(o),!1}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let R=[];for(let M of d.subscriptions){let Q;try{Q=(await o.addSubscription(M,M.qos>=1)).qos||0}catch(J){s.events.emit("error",J,e,M,o),jt.error(J),Q=c.protocolVersion<5?128:J.statusCode===403?135:J.statusCode===404?143:128}R.push(Q)}await o.committed,p({cmd:"suback",granted:R,messageId:d.messageId});break;case"unsubscribe":{let M=[];for(let Q of d.unsubscriptions)M.push(o.removeSubscription(Q)?0:17);p({cmd:"unsuback",granted:M,messageId:d.messageId});break}case"pubrel":p({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let b=d.qos===2?"pubrec":"puback",I=e.deserialize||(e.deserialize=yo(r?.headers.get?.("content-type"))),U=(d.payload?.length||0)>0?I(d.payload):void 0,F;try{F=await o.publish(d,U)}catch(M){s.events.emit("error",M,e,d,o),jt.warn(M),d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&p({cmd:b,messageId:d.messageId,reasonCode:F===!1?144:0},d.topic);break;case"pubrec":p({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":p({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(!0),s.events.emit("disconnected",o,e),s.sessions.delete(o),Wr(!0,"connection","mqtt","disconnect"),jt.debug("Received disconnect command, closing MQTT session",e.remoteAddress),e.close?e.close():e.end();break}}catch(R){s.events.emit("error",R,e,d,o),jt.error(R),p({cmd:"disconnect"})}function p(R,b){let I=(0,YE.generate)(R,c);t(I),Sr(I.length,"bytes-sent",b,S(R),"mqtt")}a(p,"sendPacket");function S(R){return R.qos>0?R.cmd+",qos="+R.qos:R.cmd}a(S,"packetMethodName");function T(R){return Ro(R,r)}a(T,"serialize")}),u.on("error",d=>{jt.warn("MQTT parsing error, closing connection:",d.message),e?.destroy?e.destroy():e?.terminate()}),{onMessage:_,onClose:l}}var YE,yH,ec,Xt,pA,NH,$E,jt,IH,OH,VE,wH=Re(()=>{YE=require("mqtt-packet");AH();yH=H(_n());Da();Ds();lr();ec=H(ee()),Xt=H(P()),pA=H($()),NH=require("events"),$E=(0,pA.loggerWithTag)("auth-event"),jt=(0,pA.loggerWithTag)("mqtt"),IH=(0,ec.get)(Xt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE;a(Wse,"bypassAuth");a(Qse,"start");VE=0;a(bH,"onSocket")});var Ff={};Fe(Ff,{component_errors:()=>rc,loadComponent:()=>KE,loadComponentDirectories:()=>xH,setErrorReporter:()=>Xse});function xH(e,t){t&&(gA=t),e&&(RA=e);let r=[];if((0,et.existsSync)(TA)){let s=(0,et.readdirSync)(TA,{withFileTypes:!0});for(let i of s){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,st.join)(TA,o);r.push(KE(c,gA,"hdb",!1))}}let n=process.env.RUN_HDB_APP;return n&&r.push(KE(n,gA,n,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{BH=!0})}function Xse(e){vl=e}async function KE(e,t,r,n,s,i){let o=(0,et.realpathSync)(e);if(!DH.has(o)){DH.set(o,!0),s&&(RA=s);try{let c;n&&(rc=new Map);let u=(0,st.join)(e,n?"harperdb-config.yaml":"config.yaml");(0,et.existsSync)(u)?c=n?(0,vH.getConfigObj)():(0,LH.parseDocument)((0,et.readFileSync)(u,"utf8"),{simpleKeys:!0}).toJSON():c=AA;let _=(0,st.join)(e,"node_modules","harperdb");try{Mo.isMainThread&&(n||(0,et.existsSync)(_)&&(0,et.realpathSync)(sc.PACKAGE_ROOT)!==(0,et.realpathSync)(_))&&((0,et.rmSync)(_,{recursive:!0,force:!0}),(0,et.existsSync)((0,st.join)(e,"node_modules"))||(0,et.mkdirSync)((0,st.join)(e,"node_modules")),(0,et.symlinkSync)(sc.PACKAGE_ROOT,_,"dir"))}catch(E){tc.default.error("Error symlinking harperdb module",E)}let l=[],d=n;for(let E in c){let f=c[E];if(rc.set(n?E:(0,st.basename)(e),!1),!f)continue;let h,p=f.package;try{if(p){let I=e,B;for(;!(0,et.existsSync)(B=(0,st.join)(I,"node_modules",E));)if(I=(0,st.dirname)(I),I.length<(0,UH.getHdbBasePath)().length){B=null;break}if(B)h=await KE(B,t,r,!1),d=!0;else throw new Error(`Unable to find package ${E}:${p}`)}else h=jse[E];if(!h)continue;l.push(h);let S=a(I=>(I.origin=r,Et(I)),"ensureTable"),T=f.network||(f.port||f.securePort)&&f,R=T?.securePort||T?.https&&T.port,b=!T?.https&&T?.port;if(Mo.isMainThread&&(h=await h.startOnMainThread?.({server:at,ensureTable:S,port:b,securePort:R,resources:t,...f})||h,n&&T))for(let I of[b,R])try{if(+I&&!CH.includes(I)){let B=OA.get(sc.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);B&&tc.default.warn("Session affinity is not recommended and may cause memory leaks"),(B||!ME)&&(CH.push(I),Fx(I,B))}}catch(B){console.error("Error listening on socket",I,B,E)}if(t.isWorker&&(h=await h.start?.({server:at,ensureTable:S,port:b,securePort:R,resources:t,...f})||h),RA.set(h,!0),(h.handleFile||h.handleDirectory)&&f.files){if(f.files.includes(".."))throw(0,PH.handleHDBError)("Can not reference parent directories");let I=(0,st.join)(e,f.files).replace(/\\/g,"/"),B=I.indexOf("/*");if(B>-1&&f.files!==AA[E]?.files&&!(0,et.existsSync)(I.slice(0,B)))throw new Error(`The path '${I.slice(0,B)}' does not exist and cannot be used as the base of the resolved 'files' path value '${f.files}'`);let U=(0,st.basename)(e),F=f.path||"/";F=F.startsWith("/")?F:F.startsWith("./")?"/"+U+F.slice(2):F==="."?"/"+U:"/"+U+"/"+F;let M,Q,J;if(f.root){let oe=f.root;oe.startsWith("/")&&(oe=oe.slice(1)),oe.endsWith("/")&&(oe=oe.slice(0,-1)),oe+="/",Q=(0,st.join)(e,oe)}else(J=I.indexOf("/*"))>-1&&(Q=I.slice(0,J+1),M=(0,st.relative)(e,Q));let j=!1;if(Mo.isMainThread&&h.setupDirectory&&(j=await h.setupDirectory?.(F,Q,t)),t.isWorker&&h.handleDirectory&&(j=await h.handleDirectory?.(F,Q,t)),j)continue;for(let oe of await(0,MH.default)(I,{onlyFiles:!1,objectMode:!0})){let{path:ue,dirent:le}=oe;d=!0;let Be=(0,st.relative)(e,ue).replace(/\\/g,"/");if(M)if(Be.startsWith(M))Be=Be.slice(M.length+1);else throw new Error(`The root path '${f.root}' does not reference a valid part of the file path '${Be}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`);let Ne=F+(F.endsWith("/")?"":"/")+Be;try{if(le.isFile()){let xe=await Jse(ue);Mo.isMainThread&&await h.setupFile?.(xe,Ne,ue,t),t.isWorker&&await h.handleFile?.(xe,Ne,ue,t)}else Mo.isMainThread&&await h.setupDirectory?.(Ne,ue,t),t.isWorker&&await h.handleDirectory?.(Ne,ue,t)}catch(xe){xe.message=`Could not load ${le.isFile()?"file":"directory"} '${ue}'${f.module?" using '"+f.module+"'":""} for application '${e}' due to: ${xe.message}`,vl?.(xe),((0,nc.getWorkerIndex)()===0?console:tc.default).error(xe),t.set(f.path||"/",new Bl(xe)),rc.set(n?E:(0,st.basename)(e),xe.message)}}}}catch(S){S.message=`Could not load component '${E}' for application '${(0,st.basename)(e)}' due to: ${S.message}`,vl?.(S),((0,nc.getWorkerIndex)()===0?console:tc.default).error(S),t.set(f.path||"/",new Bl(S),null,!0),rc.set(n?E:(0,st.basename)(e),S.message)}}if(Mo.isMainThread&&!BH&&i&&(0,nc.watchDir)(e,async()=>xH()),c.extensionModule)return await b_((0,st.join)(e,c.extensionModule));if(!d&&t.isWorker){let E=`${e} did not load any modules, resources, or files, is this a valid component?`;vl?.(new Error(E)),((0,nc.getWorkerIndex)()===0?console:tc.default).error(E),rc.set((0,st.basename)(e),E)}}catch(c){console.error(`Could not load application directory ${e}`,c),c.message=`Could not load application due to ${c.message}`,vl?.(c),t.set("",new Bl(c))}}}var et,st,Mo,LH,OA,sc,MH,nc,tc,PH,UH,zse,vH,Jse,TA,RA,BH,gA,rc,jse,AA,CH,DH,vl,Bl,kf=Re(()=>{et=require("fs"),st=require("path"),Mo=require("worker_threads"),LH=require("yaml"),OA=H(ee()),sc=H(P());Ib();Lb();Mb();x0();Cx();vx();MH=H(require("fast-glob")),nc=H(Qe()),tc=H($());tm();lr();PH=H(se());cn();Ae();kx();UH=H(ee()),zse=H(Wx());Pf();tH();wH();vH=H(Er());PE();({readFile:Jse}=et.promises),TA=OA.get(sc.CONFIG_PARAMS.COMPONENTSROOT),RA=new Map,rc=new Map;a(xH,"loadComponentDirectories");jse={REST:oE,rest:oE,graphqlSchema:em,jsResource:nm,fastifyRoutes:qR,login:im,static:FR,operationsApi:zse,customFunctions:{},http:{},clustering:tA,authentication:tl,mqtt:SA},AA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(AA,"static",{value:{files:"web/**"}});CH=[],DH=new Map;a(Xse,"setErrorReporter");a(KE,"loadComponent");Bl=class extends $t{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}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 dA=g((BSe,GH)=>{var{isMainThread:HH}=require("worker_threads"),{getTables:Zse}=(Ae(),ie(ke)),{loadComponentDirectories:eie,loadComponent:tie}=(kf(),ie(Ff)),{resetResources:rie}=(Zu(),ie(KU)),nie=Ag(),sie=Er(),{dirname:iie}=require("path"),{getConnection:oie}=ut(),aie=ee(),cie=P(),bA=new Map;async function uie(e=!1){!HH&&aie.get(cie.CONFIG_PARAMS.CLUSTERING_ENABLED)&&oie();try{HH&&await nie()}catch(n){console.error(n)}let t=rie();Zse(),t.isWorker=e,await tie(iie(sie.getConfigFilePath()),t,"hdb",!0,bA),await eie(bA,t);let r=[];for(let[n]of bA)n.ready&&r.push(n.ready());r.length>0&&await Promise.all(r)}a(uie,"loadRootComponents");GH.exports.loadRootComponents=uie});var Qe=g((HSe,vi)=>{"use strict";var{Worker:lie,MessageChannel:_ie,parentPort:ms,isMainThread:CA,threadId:die,workerData:Ws}=require("worker_threads"),{PACKAGE_ROOT:fie}=P(),{join:VH,isAbsolute:Eie,extname:hie}=require("path"),{server:$H}=(lr(),ie(Gi)),{watch:mie,readdir:pie}=require("fs/promises"),{totalmem:qH}=require("os"),xl=P(),YH=ee(),Qs=$(),{randomBytes:Sie}=require("crypto"),{_assignPackageExport:Tie}=require("../index"),gie=P(),FH=1024*1024,Ui=[],Rn=[],Rie=50,DA=1e4,Aie="restart",KH="request_thread_info",WH="resource_report",QH="thread_info",zH="added-port",Oie="ack",yA;Tie("threads",Rn);vi.exports={startWorker:NA,restartWorkers:MA,shutdownWorkers:wie,workers:Ui,setMonitorListener:Bie,onMessageFromWorkers:Cie,onMessageByType:rG,broadcast:Lie,broadcastWithAcknowledgement:Pie,setChildListenerByType:Iie,getWorkerIndex:JH,getWorkerCount:jH,getTicketKeys:ZH,setMainIsWorker:yie,setTerminateTimeout:bie,restartNumber:Ws?.restartNumber||1};Rn.onMessageByType=rG;Rn.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rn.find(n=>n.threadId===e);if(r)return r.postMessage(t),!0};var LA;function bie(e){DA=e}a(bie,"setTerminateTimeout");function JH(){return Ws?Ws.workerIndex:LA?0:void 0}a(JH,"getWorkerIndex");function jH(){return Ws?Ws.workerCount:LA?1:void 0}a(jH,"getWorkerCount");function yie(e){LA=e}a(yie,"setMainIsWorker");var XH=1,WE;function ZH(){return WE||(WE=CA?Sie(48):Ws.ticketKeys,WE)}a(ZH,"getTicketKeys");Object.defineProperty($H,"workerIndex",{get(){return JH()}});Object.defineProperty($H,"workerCount",{get(){return jH()}});var eG={[KH](e,t){Uie(t)},[WH](e,t){vie(t,e)}};function NA(e,t={}){let r=process.constrainedMemory?.()||qH();r=Math.min(r,qH(),2e4*FH);let n=YH.get(xl.CONFIG_PARAMS.THREADS_MAXHEAPMEMORY)??Math.max(Math.floor(r/FH/(10+(t.threadCount||1)/4)),512),s=Math.min(Math.max(n>>6,16),64),i=[],o=[];for(let u of Rn){let _=new _ie;_.existingPort=u,i.push(_),o.push(_.port2)}hie(e)||(e+=".js");let c=new lie(Eie(e)?e:VH(fie,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:n,maxYoungGenerationSizeMb:s},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:XH=t.threadCount,name:t.name,restartNumber:vi.exports.restartNumber,ticketKeys:ZH()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:zH,port:u,threadId:c.threadId},[u]);return zE(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>NA(e,t),c.on("error",u=>{Qs.error(`Worker index ${t.workerIndex} error:`,u)}),c.on("exit",u=>{Ui.splice(Ui.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Rie?(t.unexpectedRestarts=c.unexpectedRestarts+1,NA(e,t)):Qs.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{eG[u.type]?.(u,c)}),Ui.push(c),Hie(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(NA,"startWorker");var Nie=[xl.THREAD_TYPES.HTTP];async function MA(e=null,t=Math.max(XH>3,1),r=!0){if(CA){if(r){let{loadRootComponents:o}=dA();await o()}vi.exports.restartNumber++,t<1&&(t=t*Ui.length);let n=[],s=[];for(let o of Ui.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;Qs.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:vi.exports.restartNumber,type:xl.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Nie.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),DA*2).unref();o.on("exit",()=>{clearTimeout(l),n.splice(n.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(n.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let E=a(f=>{f.type===gie.ITC_EVENT_TYPES.CHILD_STARTED&&(Qs.trace("Worker has started",_.threadId),d(),s.splice(s.indexOf(l)),_.off("message",E))},"startListener");Qs.trace("Waiting for worker to start",_.threadId),_.on("message",E)});s.push(l),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}=ju();r&&(e==="http"||!e)&&YH.get(xl.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else ms.postMessage({type:Aie,workerType:e})}a(MA,"restartWorkers");function Iie(e,t){eG[e]=t}a(Iie,"setChildListenerByType");function wie(e){return MA(e,1/0,!1)}a(wie,"shutdownWorkers");var tG=[];function Cie(e){tG.push(e)}a(Cie,"onMessageFromWorkers");var IA=new Map;function rG(e,t){let r=IA.get(e);r||IA.set(e,r=[]),r.push(t)}a(rG,"onMessageByType");var Die=10;async function Lie(e){let t=0;for(let r of Rn)try{r.postMessage(e),t++>Die&&(t=0,await new Promise(setImmediate))}catch(n){Qs.error("Unable to send message to worker",n)}}a(Lie,"broadcast");var QE=new Map,Mie=1;function Pie(e){return new Promise(t=>{let r=0;for(let n of Rn)try{let s=Mie++,i=a(()=>{QE.delete(s),--r===0&&t(),n!==ms&&--n.refCount===0&&n.unref()},"ack_handler");i.port=n,n.ref(),n.refCount=(n.refCount||0)+1,QE.set(e.requestId=s,i),n.hasAckCloseListener||(n.hasAckCloseListener=!0,n.on(n.close?"close":"exit",()=>{for(let[,o]of QE)o.port===n&&o()})),n.postMessage(e),r++}catch(s){Qs.error("Unable to send message to worker",s)}r===0&&t()})}a(Pie,"broadcastWithAcknowledgement");function Uie(e){e.postMessage({type:QH,workers:nG()})}a(Uie,"sendThreadInfo");function nG(){let e=Date.now();return Ui.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(nG,"getChildWorkerInfo");function vie(e,t){e.resources=t,e.resources.updated=Date.now()}a(vie,"recordResourceReport");var wA;function Bie(e){wA=e}a(Bie,"setMonitorListener");var xie=1e3,kH=!1;function Hie(){kH||(kH=!0,setInterval(()=>{for(let e of Ui){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}wA&&wA()},xie).unref())}a(Hie,"startMonitoring");var Gie=1e3;if(ms){zE(ms);for(let e=0,t=Ws.addPorts.length;e<t;e++){let r=Ws.addPorts[e];r.threadId=Ws.addThreadIds[e],zE(r)}setInterval(()=>{let e=process.memoryUsage();ms.postMessage({type:WH,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Gie).unref(),yA=a(()=>new Promise((e,t)=>{ms.on("message",r),ms.postMessage({type:KH});function r(n){n.type===QH&&(ms.off("message",r),e(n.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yA=nG;vi.exports.getThreadInfo=yA;function zE(e,t){Rn.push(e),e.on("message",r=>{if(r.type===zH)r.port.threadId=r.threadId,zE(r.port);else if(r.type===Oie){let n=QE.get(r.id);n&&n()}else{for(let s of tG)s(r,e);let n=IA.get(r.type);if(n)for(let s of n)try{s(r,e)}catch(i){Qs.error(i)}}}).on("close",()=>{Rn.splice(Rn.indexOf(e),1)}).on("exit",()=>{Rn.splice(Rn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zE,"addPort");if(CA){let e,t,r=new Set,n=a(async(s,i)=>{i&&(e=i);for(let o of await pie(s,{withFileTypes:!0}))o.isDirectory()&&o.name!=="node_modules"&&n(VH(s,o.name));try{for await(let{filename:o}of mie(s,{persistent:!1}))r.add(o),t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await MA(),console.log("Reloaded HarperDB components, changed files:",Array.from(r)),r.clear()},100)}catch(o){console.warn("Error trying to watch component directory",s,o)}},"watch_dir");vi.exports.watchDir=n,process.env.WATCH_DIR&&n(process.env.WATCH_DIR)}else ms.on("message",async e=>{let{type:t}=e;t===xl.ITC_EVENT_TYPES.SHUTDOWN&&(vi.exports.restartNumber=e.restartNumber,ms.unref(),setTimeout(()=>{Qs.warn("Thread did not voluntarily terminate",die),process.exit(0)},DA).unref())})});var BC={};Fe(BC,{AUDIT_STORE_OPTIONS:()=>yf,createAuditEntry:()=>C_,openAuditStore:()=>ZE,readAuditEntry:()=>vt,setAuditRetention:()=>Fie,transactionKeyEncoder:()=>dG});function ZE(e){let t=e.auditStore=e.openDB(uG.AUDIT_STORE_NAME,yf);t.rootStore=e;let r=[];t.addDeleteRemovalCallback=function(i,o){return r[i]=o,{remove(){delete r[i]}}};let n=null;function s(i=JE){clearTimeout(n),n=setTimeout(async()=>{if(t.rootStore.status==="closed"||t.rootStore.status==="closing")return;let o=0,c;try{for(let{key:u,value:_}of t.getRange({start:0,snapshot:!1,end:Date.now()-PA})){if((_[0]&15)===BA){let l=vt(_),d=l.tableId;r[d]?.(l.recordId)}if(c=t.remove(u),await new Promise(setImmediate),++o>=qie){i=10;break}}await c}finally{o===0&&(i=Math.min(i<<1,PA/10)),s(i)}},i).unref()}return a(s,"scheduleAuditCleanup"),t.scheduleAuditCleanup=s,(0,XE.getWorkerIndex)()===(0,XE.getWorkerCount)()-1&&s(JE),t}function Fie(e,t=JE){PA=e,JE=t}function C_(e,t,r,n,s,i,o){let c=fG[i];if(!c)throw new Error(`Invalid audit entry type ${i}`);let u=1;n&&(n>1?ic.setFloat64(0,n):An.set(Rm),u=9),E(0),E(t),d(r),ic.setFloat64(u,e),u+=8,s?d(s):An[u++]=0,An[n?8:0]=c;let l=An.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(f){let h=u;u+=1,u=(0,oc.writeKey)(f,An,u);let p=u-h-1;p>127?p>16383?(HA.error("Key or username was too large for audit entry",f),u=h+1,An[h]=0):(An.copyWithin(h+2,h+1,u),ic.setUint16(h,p|32768),u++):An[h]=p}function E(f){f<128?An[u++]=f:f<16384?(ic.setUint16(u,f|32768),u+=2):f<1056964608?(ic.setUint32(u,f|3221225472),u+=4):(An[u]=255,ic.setUint32(u+1,f),u+=5)}}function vt(e){try{let t=e.dataView||(e.dataView=new xA(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let n=t.readInt(),s=t.readInt(),i=t.readInt(),o=t.readInt(),c=t.position,u=t.position+=o,_=t.readFloat64();o=t.readInt();let l=t.position,d=t.position+=o;return{type:fG[n&7],tableId:i,get recordId(){return cG(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?cG(e,l,d):void 0},getValue(E,f,h){if(n&UA||n&vA&&!f)return E.decoder.decode(e.subarray(t.position));if(n&vA&&h)return GA(E.getEntry(this.recordId),h,E)}}}catch(t){return HA.error("Reading audit entry error",t,e),{}}}function cG(e,t,r){let n=e.subarray(t,r);return(0,oc.readKey)(n,0,r-t)}var oc,jE,uG,lG,XE,_G,HA,An,ic,dG,yf,PA,qie,JE,UA,vA,sG,BA,iG,oG,aG,fG,xA,ni=Re(()=>{oc=require("ordered-binary"),jE=H(ee()),uG=H(ft()),lG=H(P()),XE=H(Qe()),_G=H(z());Bc();HA=H($());eh();(0,jE.initSync)();An=Buffer.alloc(1024),ic=new DataView(An.buffer,An.byteOffset,1024),dG={writeKey(e,t,r){return e===vc?(t.set(vc,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,oc.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,oc.readKey)(e,t,r)}},yf={encoding:"binary",keyEncoder:dG},PA=(0,_G.convertToMS)((0,jE.get)(lG.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,qie=1e3,JE=1e4;a(ZE,"openAuditStore");a(Fie,"setAuditRetention");UA=16,vA=32,sG=1,BA=2,iG=3,oG=4,aG=5,fG={put:sG|UA,[sG]:"put",delete:BA,[BA]:"delete",message:iG|UA,[iG]:"message",invalidate:oG,[oG]:"invalidate",patch:aG|vA,[aG]:"patch"};a(C_,"createAuditEntry");a(vt,"readAuditEntry");xA=class extends DataView{static{a(this,"Decoder")}position=0;readInt(){let t=this.getUint8(this.position++);return 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{debugger}}};a(cG,"readKeySafely")});var qA={};Fe(qA,{add:()=>th,applyReverse:()=>EG,getRecordAtTime:()=>GA,rebuildUpdateBefore:()=>rh});function th(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 rh(e,t){let r=null;for(let n in e)if(n in t){let s=t[n];if(s?.__op__){let i=e[n];if(i?.__op__)if(i.__op__===s.__op__)r||(r={}),r[n]=i;else throw new Error("Can not merge updates with different operations");else r||(r={}),r[n]=i,th(r,n,s)}}else r||(r={}),r[n]=e[n];return r}function EG(e,t){for(let r in t){let n=t[r];if(n?.__op__){let s=kie[n.__op__]?.reverse;if(s)s(e,r,{value:n.value});else throw new Error(`Unsupported operation ${n.__op__}`)}else e[r]=hG}}function GA(e,t,r){let n=r.rootStore.auditStore,s=Object.assign({},e.value),i=e.localTime;for(;i>t;){let u=n.get(i),_=vt(u);switch(_.type){case"put":s=_.getValue(r);break;case"patch":EG(s,_.getValue(r));break;case"delete":s=null}i=_.previousLocalTime}let o={},c=0;for(let u in s)s[u]===hG&&(o[u]=!0,c++);for(;c>0&&i>0;){let u=n.get(i),_=vt(u),l;switch(_.type){case"put":l=_.getValue(r);break;case"patch":l=_.getValue(r);break}for(let d in l)o[d]&&(s[d]=l[d],o[d]=!1,c--);i=_.previousLocalTime}if(c>0)for(let u in o)s[u]=null;return s}var kie,hG,eh=Re(()=>{ni();a(th,"add");th.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)};kie={add:th};a(rh,"rebuildUpdateBefore");a(EG,"applyReverse");hG={};a(GA,"getRecordAtTime")});function Zr(e){return e[Nt]||(e[Nt]=Object.create(null))}function ah(e,t){let r=e.prototype,n={},s=t.attributes||t.properties||[];for(let o of s){let c=o.name,u,_;if(o.resolve)_={get(){return o.resolve(this,this[ye])},set(l){return o.set(this,l)},configurable:!0};else{switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"ID":u=a(function(l){if(!(typeof l=="string"||l?.length>0&&l.every?.(d=>typeof d=="string")||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a string, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Float":case"Number":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="number"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a number, attempt to assign ${d}`);Zr(this)[c]=l},"set");break;case"Int":u=a(function(l){let d=l?.__op__?l.value:l;if(!(d>>0===d||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs((d>>0)-d)<=1)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Long":u=a(function(l){let d=l?.__op__?l.value:l;if(!(Math.round(d)===l&&Math.abs(d)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof d=="number"&&Math.abs(d)<=9007199254740992)d=Math.round(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"BigInt":u=a(function(l){let d=l?.__op__?l.value:l;if(!(typeof d=="bigint"||l==null&&o.nullable!==!1))if(typeof d=="string"||typeof d=="number")d=BigInt(d),l?.__op__?l.value=d:l=d;else throw new On.ClientError(`${c} must be a number, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a boolean, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Date":u=a(function(l){if(!(l instanceof Date||l==null&&o.nullable!==!1))if(typeof l=="string"||typeof l=="number")l=new Date(l);else throw new On.ClientError(`${c} must be a Date, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);Zr(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){Zr(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new On.ClientError(`${c} must be an object, attempt to assign ${l}`);Zr(this)[c]=l},"set")}_={get(){let l=this[Nt];if(l&&c in l){let E=l[c];if(E?.__op__){let f=this[Ee]?.[c];return E.update(f)}return E}let d=this[Ee]?.[c];if(d&&typeof d=="object"){let E=pG(d,o);if(E)return l||(l=this[Nt]=Object.create(null)),l[c]=E}return d},set:u,enumerable:!0,configurable:!0}}_.get.isAttribute=!0,n[c]=_,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=n[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[Ee]?.[o]}),i("set",function(o,c){let u=n[o];if(u)return u.set.call(this,c);if(t.sealed)throw new On.ClientError("Can not add a property to a sealed table schema");Zr(this)[o]=c}),i("deleteProperty",function(o){Zr(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let _ in o){c||(c=Object.assign({},this[Ee]));let l=o[_];if(l?.__op__){let d=c[_];l=l.update(d)}c[_]=l}return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ee])),Object.assign(c,this)),c||this[Ee]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function pG(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(s){if(s?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=s}},ah(r,t)),new r(e)):new nh(e);case Array:let n=new ih(e.length);n[Ee]=e;for(let s=0,i=e.length;s<i;s++){let o=e[s];o&&typeof o=="object"&&(o=pG(o,t?.elements)),n[s]=o}return n;default:return e}}function Rd(e){let t=e[Nt],r;for(let s in t){r||(r=Object.assign({},e[Ee]));let i=t[s];if(i&&typeof i=="object")if(i.__op__){let o=r[s];i=i.update(o)}else i=Rd(i);r[s]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ee])),Object.assign(r,e)),r||e[Ee]}function Uo(e,t=e[Nt]){let r;if(mG.call(e,Ee)&&e.constructor===Array&&!Object.isFrozen(e)){r=e;for(let n=0,s=e.length;n<s;n++){let i=e[n];if(i&&typeof i=="object"){let o=Uo(i);o!==i&&r===e&&(r=e.slice(0)),i=o}r[n]=i}return Object.freeze(r)}for(let n in t){r||(r=Object.assign({},e[Ee]));let s=t[n];if(s&&typeof s=="object")if(s.__op__){let i=qA[s?.__op__];if(i)i(r,n,s);else throw new Error("Invalid CRDT operation "+s.__op__);continue}else s=Uo(s);r[n]=s}return r?Object.freeze(r):mG.call(e,Ee)?e[Ee]:e}function sh(e){let t=e[Ee];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Po]||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?.[Ee]===s){if(sh(i))return!0}else return!0}}else{let r=e[Nt];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[Ee]===i){if(sh(s))return!0}else return!0}else return!0}}return!1}var On,Nt,nh,mG,Po,ih,oh,Ad=Re(()=>{cn();On=H(se());eh();Nt=Symbol("own-data");a(Zr,"getChanges");a(ah,"assignTrackedAccessors");a(pG,"trackObject");nh=class{static{a(this,"GenericTrackedObject")}constructor(t){if(t?.[Ee])throw new Error("Can not track an already tracked object, check for circular references");this[Ee]=t}};ah(nh,{});a(Rd,"collapseData");mG=Object.prototype.hasOwnProperty;a(Uo,"deepFreeze");a(sh,"hasChanges");Po=Symbol.for("has-array-changes"),ih=class extends Array{static{a(this,"TrackedArray")}[Po];constructor(t){super(t)}splice(...t){return this[Po]=!0,super.splice(...t)}push(...t){return this[Po]=!0,super.push(...t)}pop(){return this[Po]=!0,super.pop()}unshift(...t){return this[Po]=!0,super.unshift(...t)}shift(){return this[Po]=!0,super.shift()}};ih.prototype.constructor=Array;oh=class{constructor(t){this.value=t}static{a(this,"Addition")}__op__="add";update(t){return(+t||0)+this.value}}});var $p={};Fe($p,{CONTEXT:()=>ye,ID_PROPERTY:()=>Me,IS_COLLECTION:()=>Vn,MultiPartId:()=>qa,RECORD_PROPERTY:()=>Ee,Resource:()=>$t,snake_case:()=>$ie,transformForSelect:()=>uh});function $ie(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function SG(e,t){if(Hl=!1,e==="")return null;if(e=e.slice(1),e.indexOf("/")===-1)return e===""?(Hl=!0,null):(e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e)));let r=e.split("/"),n=new qa;for(let s=0;s<r.length;s++){let i=r[s];if(!i&&s===r.length-1){Hl=!0;break}n[s]=t.coerceId(decodeURIComponent(i))}return n}function en(e,t){n.reliesOnPrototype=!0;let r=t.hasContent;return n;function n(s,i,o){let c,u,_,l;if(r?(o?(l=i,o=o[ye]||o):i?typeof s=="object"&&s&&(!Array.isArray(s)||typeof s[0]=="object")?(l=s,c=l[this.primaryKey]??null,o=i[ye]||i):l=i:(l=s,c=l[Me]??l[this.primaryKey]??null),c==null&&(_=!0)):i?o=i[ye]||i:s&&typeof s=="object"&&!Array.isArray(s)&&(o=s),c===void 0)if(typeof s=="string")c=s;else if(typeof s=="object"&&s)if(u=s,s[Symbol.iterator]){c=[],_=!0;for(let f of s){if(typeof f=="object"&&f)break;c.push(f)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null,_=!1)))}else{if(typeof(c=s.url)=="string"){let f=c.indexOf("?");if(f>-1){let p=this.parseQuery(c.slice(f+1));u?u=Object.assign(p,u):u=p,c=c.slice(0,f)}let h=this.parsePath(c,o,u);h?.id!==void 0?(h.query&&(u?u=Object.assign(h.query,u):u=h.query),_=h.isCollection,c=h.id):c=h}c===void 0&&(c=s.id??null,c==null&&(_=!0))}else c=s??null,c==null&&(_=!0);o||(o={});let d;if(u?.ensureLoaded!=null||u?.async||_?(d=Object.assign({},t),u?.ensureLoaded!=null&&(d.ensureLoaded=u.ensureLoaded),u?.async&&(d.async=u.async),_&&(d.isCollection=!0)):d=t,o.transaction){let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)}else return rt(o,()=>{let f=this.getResource(c,o,d);return f.then?f.then(E):E(f)},d);function E(f){if(o.authorize){o.authorize=!1;let h=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,l,o):f.allowUpdate(o.user,l,o):t.type==="create"?f.allowCreate(o.user,l,o):f.allowDelete(o.user,u,o);if(h?.then)return h.then(p=>{if(!p)throw new ch(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!h)throw new ch(o.user)}return typeof l?.then=="function"?l.then(h=>e(f,u,o,h)):e(f,u,o,l)}a(E,"authorizeActionOnResource")}}function tn(e,t){let r=new RG.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 FA(e,t,r){let n=e[Ee];if(n){let s=e[Nt];return i=>{let o,c;return e.hasOwnProperty(i)&&typeof(o=e[i])!="function"?o:s&&i in s?s[i]:(c=t?.[i])?c(e,r):n[i]}}else return t?s=>{let i=t[s];return i?i(e,r):e[s]}:s=>e[s]}function uh(e,t){let r=t?.propertyResolvers,n=t[ye],s;if(typeof e=="string")return a(function o(c){return c.then?c.then(o):Array.isArray(c)?c.map(o):FA(c,r,n)(e)},"transform");if(typeof e=="object"){if(e.asArray)return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(c);let _=[],l=i(FA(u,r,n));for(let d of e)_.push(l(d));return _},"transform");let o=e.forceNulls;return a(function c(u){if(u.then)return u.then(c);if(Array.isArray(u))return u.map(E=>E&&typeof E=="object"?c(E):E);let _={},l=i(FA(u,r,n)),d;for(let E of e){let f=l(E);f===void 0&&o&&(f=null),f?.then?(d||(d=[]),d.push(f.then(h=>_[E.name||E]=h))):_[E.name||E]=f}return d?Promise.all(d).then(()=>_):_},"transform")}else throw new Error("Invalid select argument type "+typeof e);function i(o){return c=>{if(typeof c=="string")return o(c);if(typeof c=="object")if(c.name){s||(s={});let u=s[c.name];if(!u){let l=r[c.name]?.definition?.tableClass;u=s[c.name]=uh(c.select||c,l)}let _=o(c.name);return u(_)}else return o(c);else return c}}a(i,"handleProperty")}var TG,gG,RG,ye,Me,Vn,Ee,Vie,$t,ch,Hl,qa,cn=Re(()=>{TG=require("crypto");Cc();gG=require("../index"),RG=H(se());Ad();so();sE();ye=Symbol.for("context"),Me=Symbol.for("primary-key"),Vn=Symbol("is-collection"),Ee=Symbol("stored-record"),Vie={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},$t=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Me]=t;let n=r?.[ye];this[ye]=n!==void 0?n:r||null}static get=en(function(t,r,n,s){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null&&!c.selectApplied){let _=uh(u,t.constructor);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",letItLinger:!0,ensureLoaded:!0,async:!0});static put=en(function(t,r,n,s){if(Array.isArray(s)&&t[Vn]){let i=[],o=n.authorize;for(let c of s){let u=t.constructor,_=u.getResource(c[u.primaryKey],n,{async:!0});_.then?i.push(_.then(l=>l.put(c,n))):i.push(_.put(c,n))}return Promise.all(i)}return t.put?t.put(s,r):tn(t,"put")},{hasContent:!0,type:"update"});static patch=en(function(t,r,n,s){return t.patch?t.patch(s,r):tn(t,"patch")},{hasContent:!0,type:"update"});static delete=en(function(t,r,n,s){return t.delete?t.delete(r):tn(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,TG.randomUUID)()}static create(t,r,n){let s;return t==null?s=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?s=[...t,this.getNewId()]:typeof t!="object"?s=[t,this.getNewId()]:(s=this.getNewId(),n=r,r=t),n||(n={}),rt(n,()=>{let i=new this(s,n),o=i.update?i.update(r,!0):tn(i,"update");return n.newLocation=s,n.createdResource=!0,o?.then?o.then(()=>s):s})}static invalidate=en(function(t,r,n,s){return t.invalidate?t.invalidate(r):tn(t,"delete")},{hasContent:!1,type:"update"});static post=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.post(s,r)},{hasContent:!0,type:"create"});static connect=en(function(t,r,n,s){return t.connect?t.connect(s,r):tn(t,"connect")},{hasContent:!0,type:"read"});static subscribe=en(function(t,r,n,s){return t.subscribe?t.subscribe(r):tn(t,"subscribe")},{type:"read"});static publish=en(function(t,r,n,s){return t[Me]!=null&&t.update?.(),t.publish?t.publish(s,r):tn(t,"publish")},{hasContent:!0,type:"create"});static search=en(function(t,r,n,s){let i=t.search?t.search(r):tn(t,"search"),o=n.select;if(o&&n.hasOwnProperty("select")&&i!=null&&!i.selectApplied){let c=uh(o,t.constructor);return i.map(c)}return i},{type:"read"});static query=en(function(t,r,n,s){return t.search?t.search(s,r):tn(t,"search")},{hasContent:!0,type:"read"});static copy=en(function(t,r,n,s){return t.copy?t.copy(s,r):tn(t,"copy")},{type:"create"});static move=en(function(t,r,n,s){return t.move?t.move(s,r):tn(t,"move")},{type:"delete"});post(t){if(this[Vn])return this.constructor.create(this[Me],t,this[ye]);tn(this,"post")}static isCollection(t){return t?.[Vn]}static coerceId(t){return t}static parseQuery(t){return nE(t)}static parsePath(t,r,n){let s=t.indexOf(".");if(s>-1){let o=t.slice(s+1);t=t.slice(0,s);let c=r?.headers&&Vie[o];if(c)r.requestedContentType=c;else if(n)n.property=o;else return{query:{property:o},id:SG(t,this),isCollection:Hl}}let i=SG(t,this);return Hl?{id:i,isCollection:!0}:i}static getResource(t,r,n){let s,i=r[ye],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=n?.isCollection;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let _=u.asMap.get(t);if(s=_?.find(l=>l.constructor===c),s)return s;_||u.asMap.set(t,_=[]),_.push(s=new c(t,i))}else{if(s=u.find(_=>_[Me]===t&&_.constructor===c),s)return s;if(u.push(s=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Me],E=_.get(d);E?E.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else s=new c(t,i);return o&&(s[Vn]=!0),s}subscribe(t){return new In}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new In}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[Me]}getContext(){return this[ye]}};$t.prototype[ye]=null;(0,gG._assignPackageExport)("Resource",$t);a($ie,"snake_case");ch=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.statusCode=403):(super("Must login"),this.statusCode=401)}};a(SG,"pathToId");qa=class extends Array{static{a(this,"MultiPartId")}toString(){return this.join("/")}};a(en,"transactional");a(tn,"missingMethod");a(FA,"selectFromObject");a(uh,"transformForSelect")});function bG(e,t,r,n,s){let i=e.primaryStore.env.path,o=e.primaryStore.tableId,c;s?.crossThreads===!1?(c=OG,Yie(e.primaryStore,e.auditStore)):(c=AG,e.primaryStore.env.hasSubscriptionCommitListener||(e.primaryStore.env.hasSubscriptionCommitListener=!0,e.primaryStore.on("committed",()=>{yG(AG[i])})));let u=c[i]||(c[i]=[]);u.auditStore=e.auditStore,u.lastTxnTime==null&&(u.lastTxnTime=Date.now());let _=u[o];_||(_=u[o]=new Map,_.envs=u,_.tableId=o,_.store=e.primaryStore),t=wa(t);let l=new VA(r);l.startTime=n;let d=_.get(t);return d?d.push(l):(_.set(t,d=[l]),d.tables=_,d.key=t),l.subscriptions=d,l}function yG(e){if(!e)return;let t=e.auditStore;try{t.resetReadTxn()}catch(n){throw n.message+=" in "+path,n}let r;for(let{key:n,value:s}of t.getRange({start:e.lastTxnTime,exclusiveStart:!0})){e.lastTxnTime=n;let i=vt(s),o=e[i.tableId];if(!o)continue;let c=i.recordId,u,_=wa(i.recordId),l=0;do{let d=o.get(_);if(d){for(let f of d)if(!(l>0&&!(f.includeDescendants&&!(f.onlyChildren&&l>1)))){if(f.startTime>=n){(0,kA.info)("omitting",c,f.startTime,n);continue}try{let h;f.supportsTransactions&&f.txnInProgress!==i.version&&(h=!0,f.txnInProgress||(r?r.push(f):r=[f]),f.txnInProgress=i.version),f.listener(c,i,n,h)}catch(h){console.error(h),(0,kA.info)(h)}}}if(_==null)break;let E=_.lastIndexOf?.("/",_.length-2);E>-1?_=_.slice(0,E):_=null,l++}while(!0)}if(r)for(let n of r)n.txnInProgress=null,n.listener(null,{type:"end_txn"},e.lastTxnTime,!0)}function Yie(e,t){let r=t||e,n=r.env;if(!n.hasAfterCommitListener){n.hasAfterCommitListener=!0;let s=n.path;r.on("aftercommit",({next:i,last:o,txnId:c})=>{let u=OG[s];if(!u)return;let _=a(()=>{r.threadLocalWrites||(r.threadLocalWrites=new Float64Array(r.getUserSharedBuffer("last-thread-local-write",new ArrayBuffer(8)))),u.txnTime=r.threadLocalWrites[0]||Date.now(),yG(u),r.threadLocalWrites[0]=u.lastTxnTime,r.unlock("thread-local-writes")},"acquiredLock");r.attemptLock("thread-local-writes",_)&&_()})}}var kA,AG,OG,VA,NG=Re(()=>{kA=H($());Cc();Zu();ni();AG=Object.create(null),OG=Object.create(null);a(bG,"addSubscription");VA=class extends In{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t,this.on("close",()=>this.end())}end(){if(this.subscriptions){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let n=t.envs,s=t.dbi;delete n[s]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}};a(yG,"notifyFromTransactionData");a(Yie,"listenToCommits")});var OR={};Fe(OR,{coerceType:()=>lh,makeTable:()=>fh,setServerUtilities:()=>eoe,updateResource:()=>_h});function fh(e){let{primaryKey:t,indices:r,tableId:n,tableName:s,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l,sealed:d}=e,{expirationMS:E,evictionMS:f,audit:h,trackDeletes:p}=e,{attributes:S}=e;S||(S=[]);let T=bm(i,n,u),R=0,b,I,B={},U=Promise.resolve(),F,M,Q;for(let K of S)(K.assignCreatedTime||K.name==="__createdtime__")&&(F=K),(K.assignUpdatedTime||K.name==="__updatedtime__")&&(M=K),K.expiresAt&&(Q=K),K.isPrimaryKey&&(B=K);let J,j=[],oe=[],ue=1,le=2,Be={},Ne={},xe=864e5,n_,s_,js,lO=!1,Ch,Dh,Mq=i.getRange({start:!1,end:!1}).constructor,Pq=10,Uq=6;h&&fO();class Ke extends $t{static name=s;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=s;static indices=r;static audit=h;static databasePath=o;static databaseName=c;static attributes=S;static expirationTimer;static createdTimeProperty=F;static updatedTimeProperty=M;static propertyResolvers;static sources=[];static get expirationMS(){return E}static dbisDB=l;static schemaDefined=_;static sourcedFrom(m,A){A&&(this.sourceOptions=A,(A.expiration||A.eviction||A.scanInterval)&&this.setTTLExpiration(A)),A?.intermediateSource?(m.intermediateSource=!0,this.sources.unshift(m)):this.sources.push(m),I=m.get&&(!m.get.reliesOnPrototype||m.prototype.get);let D=a(L=>{let y=this.sources.slice(0,-1);if(y=y.filter(v=>v[L]&&(!v[L].reliesOnPrototype||v.prototype[L])),y.length>0)if(y.length===1){let v=y[0];return(q,C,G)=>{if(q?.source!==v)return v[L](C,G,q)}}else return(v,q,C)=>{let G=[];for(let x of y){if(v?.source===x)break;G.push(x[L](q,C,v))}return Promise.all(G)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],N=a(L=>{if(O[L]&&(!O[L].reliesOnPrototype||O.prototype[L]))return(y,v,q)=>{if(!y?.source)return O[L](v,q,y)}},"getApplyToCanonicalSource");return Be={put:N("put"),patch:N("patch"),delete:N("delete"),publish:N("publish")},Ne={put:D("put"),patch:D("patch"),delete:D("delete"),publish:D("publish"),invalidate:D("invalidate")},(async()=>{let L=!1,y=a(async(v,q)=>{let C=v.value,G=v.table?ct[c][v.table]:Ke;if(c===Yn.SYSTEM_SCHEMA_NAME&&(v.table===Yn.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||v.table===Yn.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),v.id===void 0&&(v.id=C[G.primaryKey],v.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(v));v.source=m;let x=await G.getResource(v.id,q,ac);switch(v.type){case"put":return x._writeUpdate(C,!0,ac);case"patch":return x._writeUpdate(C,!1,ac);case"delete":return x._writeDelete(ac);case"publish":return x._writePublish(C,ac);case"invalidate":return x.invalidate(ac);default:it.error("Unknown operation",v.type,v.id)}},"writeUpdate");try{let v=m.subscribe;v&&p==null&&(p=!0);let q=m.subscribeOnThisThread?m.subscribeOnThisThread((0,Bo.getWorkerIndex)()):(0,Bo.getWorkerIndex)()===0,C=v&&q&&await m.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(C){let G;for await(let x of C)try{if(!(x.type==="transaction"?x.writes[0]:x)){it.error("Bad subscription event",x);continue}if(x.source=m,G)if(x.beginTxn)G.resolve();else{y(x,G);continue}if(x.type==="end_txn")continue;let _e=rt(x,()=>{if(x.type==="transaction"){let ne=[];for(let Ue of x.writes)try{ne.push(y(Ue,x))}catch(ce){throw ce.message+=" writing "+JSON.stringify(Ue)+" of event "+JSON.stringify(x),ce}return Promise.all(ne)}else if(x.type==="define_schema"){let ne=this.attributes.slice(0),Ue;for(let ce of x.attributes)ne.find(De=>De.name===ce.name)||(ne.push(ce),Ue=!0);Ue&&(Et({table:s,database:c,attributes:ne,origin:"cluster"}),Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.CREATE_TABLE,c,s)))}else return x.beginTxn?(G=x,y(x,x),new Promise(ne=>{G.resolve=ne})):y(x,x)});L&&(await _e,Yl.signalUserChange(new Kl.UserEventMsg(process.pid))),x.onCommit&&(_e?.then?_e.then(x.onCommit):x.onCommit())}catch(Z){it.error("error in subscription handler",Z)}}}catch(v){it.error(v)}})(),this}static getResource(m,A,D){let O=super.getResource(m,A,D);if(m!=null){dc(m);try{if(O.hasOwnProperty(Ee))return O;if(typeof m=="object"&&m&&!Array.isArray(m))throw new Error(`Invalid id ${JSON.stringify(m)}`);let N=!D?.async||i.cache?.get(m),L=yn(A),y=L.getReadTxn();if(y?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return Lh(m,A,{transaction:y},N,v=>{if(v?_h(O,v):O[Ee]=null,A.onlyIfCached&&A.noCacheStore){if(!O.doesExist())throw new rn.ServerError("Entry is not cached",504)}else if(D?.ensureLoaded){let q=Mh(m,v,A,O);if(q)return L?.disregardReadTxn(),O[$A]=!0,KA(q,C=>(_h(O,C),O))}return O})}catch(N){throw N.message.includes("Unable to serialize object")&&(N.message+=": "+JSON.stringify(m)),N}}return O}ensureLoaded(){let m=Mh(this[Me],this[Lr],this[ye]);if(m)return this[$A]=!0,KA(m,A=>{this[Lr]=A,this[Ee]=A.value,this[Vl]=A.version})}static setTTLExpiration(m){if(typeof m=="number")E=m*1e3,f||(f=0);else if(m&&typeof m=="object")E=m.expiration*1e3,f=(m.eviction||0)*1e3,xe=m.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(E<0)throw new Error("Expiration can not be negative");xe=xe||(E+f)/4,a_()}static enableAuditing(m=!0){h=m,m&&fO(),Ke.audit=m}static coerceId(m){return m===""?null:lh(m,B)}static async dropTable(){if(delete ct[c][s],c===o){for(let m of S)l.remove(Ke.tableName+"/"+m.name),r[m.name]?.drop();l.remove(Ke.tableName+"/"),i.drop(),await l.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yl.signalSchemaChange(new Kl.SchemaEventMsg(process.pid,Yn.OPERATIONS_ENUM.DROP_TABLE,c,s))}get(m){if(typeof m=="string")return this.getProperty(m);if(this[Vn])return this.search(m);if(this[Me]===null){if(m?.conditions)return this.search(m);let A=Ke.getRecordCount();return{recordCount:A.recordCount,estimatedRecordRange:A.estimatedRange,records:"./",name:s,database:c,attributes:S}}if(m?.property)return this.getProperty(m.property);if(this.doesExist()||m?.ensureLoaded===!1||this[ye]?.returnNonexistent)return this}allowRead(m,A){let D=o_(m);if(D?.read){if(D.isSuperUser)return!0;let O=D.attribute_permissions,N=A?.select;if(O?.length>0||lO&&N){if(A||(A={}),N){let L=O?.length>0&&YA(O,"read");A.select=N.map(y=>{let v=y.name||y;if(!L||L[v]){let q=js[v]?.definition?.tableClass;if(q){if(y.name||(y={name:y}),!q.prototype.allowRead.call(null,m,y))return!1;if(!y.select)return y.name}return y}}).filter(Boolean)}else A.select=O.filter(L=>L.read&&!js[L.attribute_name]).map(L=>L.attribute_name);return A}else return!0}}allowUpdate(m,A){let D=o_(m);if(D?.update){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"update");for(let L in A)if(!N[L])return!1;for(let L of O){let y=L.attribute_name;!L.update&&!(y in A)&&(A[y]=this.getProperty(y))}}return!0}}allowCreate(m,A){if(this[Vn]){let D=o_(m);if(D?.insert){let O=D.attribute_permissions;if(O?.length>0){let N=YA(O,"insert");for(let L in A)if(!N[L])return!1}else return!0}}else return this.allowUpdate(m,{})}allowDelete(m){return o_(m)?.delete}update(m,A){if(!yn(this[ye]))throw new Error("Can not update a table resource outside of a transaction");if(m===!1)return this;let O;return typeof m=="object"&&m&&(A?(Object.isFrozen(m)&&(m=Object.assign({},m)),this[Ee]={},this[Nt]=m):(O=this[Nt],O&&(m=Object.assign(O,m)),this[Nt]=O=m)),this._writeUpdate(this[Nt],A),this}addTo(m,A){if(typeof A=="number"||typeof A=="bigint")this[Gl]===wG?this.set(m,(+this.getProperty(m)||0)+A):(this[Gl]||this.update(),this.set(m,new oh(A)));else throw new Error("Can not add a non-numeric value")}subtractFrom(m,A){if(typeof A=="number")return this.addTo(m,-A);throw new Error("Can not subtract a non-numeric value")}getMetadata(){return this[Lr]}invalidate(m){let A=this[ye],D=this[Me];dc(D),yn(this[ye]).addWrite({key:D,store:i,invalidated:!0,entry:this[Lr],nodeName:this[ye]?.nodeName,before:Be.invalidate?.bind(this,A,D),beforeIntermediate:Ne.invalidate?.bind(this,A,D),commit:(N,L)=>{if(L?.version>N)return;let y=null;for(let v in r)y||(y={}),y[v]=this.getProperty(v);T(D,y,this[Lr],N,ql,h,this[ye],0,"invalidate")}})}static evict(m,A,D){let O=this.Source,N;if(!((I||h)&&(!A||(N=i.getEntry(m),!N||!A)||N.version!==D))){if(I){if(i.hasLock(m,N.version))return;let L;for(let y in r)L||(L={}),L[y]=A[y];if(L)return T(m,L,N,D,Fl,null,null,0,null,!0)}return i.ifVersion(m,D,()=>{i_(m,A,null)}),h?T(m,null,N,D,Fl,null,null,0,null,!0):i.remove(m,D)}}lock(){throw new Error("Not yet implemented")}static operation(m,A){return m.table||=s,m.schema||=c,BG.operation(m,A)}put(m){this.update(m,!0)}patch(m){this.update(m,!1)}_writeUpdate(m,A,D){let O=this[ye],N=yn(O),L=this[Me];dc(L);let y=this[Lr];this[Gl]=A?wG:jie;let v={key:L,store:i,entry:y,nodeName:O?.nodeName,validate:q=>{m||(m=this[Nt]),A||m&&sh(this[Nt]===m?this:m)?O?.source||(N.checkOverloaded(),this.validate(m,!A),M&&(m[M.name]=M.type==="Date"?new Date(q):M.type==="String"?new Date(q).toISOString():q),A&&(t&&m[t]!==L&&(m[t]=L),F&&(y?.value?m[F.name]=y?.value[F.name]:m[F.name]=F.type==="Date"?new Date(q):F.type==="String"?new Date(q).toISOString():q),m=Uo(m))):N.removeWrite(v)},before:A?Be.put?()=>Be.put(O,L,m):null:Be.patch?()=>Be.patch(O,L,m):Be.put?()=>Be.put(O,L,Uo(this)):null,beforeIntermediate:A?Ne.put?()=>Ne.put(O,L,m):null:Ne.patch?()=>Ne.patch(O,L,m):Ne.put?()=>Ne.put(O,L,Uo(this)):null,commit:(q,C,G)=>{if(G){if(O&&C?.version>(O.lastModified||0)&&(O.lastModified=C.version),this[Lr]=C,C?.value?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");A||(this[Ee]=C?.value??null)}this[Nt]=void 0,this[Vl]=q;let x=C?.value,Z=m;if(this[Gl]=0,C?.version>=q)if(h){let ce=C.localTime,De=C.version;for(;Z&&(ce>q||De>=q&&ce>0);){let re=u.get(ce);if(!re)break;let X=vt(re);if(De=X.version,De>q){if(X.type==="patch"){let Se=X.getValue(i);Z=rh(Z,Se)}else if(X.type==="put"||X.type==="delete")return}else if(De===q)return;ce=X.previousLocalTime}}else{if(A)return;Z=rh(Z,x)}let _e;if(A?_e=Z:(this[Ee]=x,_e=A?Z:Uo(this,Z)),this[Ee]=_e,_e?.[Ee])throw new Error("Can not assign a record to a record, check for circular references");let ne;A||(ne=m),i_(L,x,_e);let Ue=A?"put":"patch";T(L,_e,C,q,0,h,O,O.expiresAt||(E?E+Date.now():0),Ue,!1,ne),O.expiresAt&&a_()}};N.addWrite(v)}async delete(m){if(typeof m=="string")return this.deleteProperty(m);if(this[Vn]){for await(let A of this.search(m))(await Ke.getResource(A[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(m);return}return this[Ee]?this._writeDelete(m):!1}_writeDelete(m){let A=yn(this[ye]),D=this[Me];dc(D);let O=this[ye];return A.addWrite({key:D,store:i,resource:this,nodeName:O?.nodeName,before:Be.delete?.bind(this,O,D),beforeIntermediate:Ne.delete?.bind(this,O,D),commit:(N,L,y)=>{let v=L?.value;y&&(O&&L?.version>(O.lastModified||0)&&(O.lastModified=L.version),_h(this,L)),!(L?.version>N)&&(i_(this[Me],v),it.trace("Write delete entry",D,N),h||p?(T(D,null,this[Lr],N,0,h,this[ye],0,"delete"),h||a_()):i.remove(this[Me]))}}),!0}search(m){let A=this[ye],D=yn(A);if(!m)throw new Error("No query provided");let O=m.conditions;O?O.length===void 0&&(O=O[Symbol.iterator]?Array.from(O):[O]):O=Array.isArray(m)?m:m[Symbol.iterator]?Array.from(m):[],this[Me]&&(O=[{attribute:null,comparator:"prefix",value:this[Me]}].concat(O));let N,L={};function y(X,Se){let He;switch(Se){case"and":case void 0:if(X.length<1)throw new Error('An "and" operator requires at least one condition');He=!0;break;case"or":if(X.length<2)throw new Error('An "or" operator requires at least two conditions');break;default:throw new Error("Invalid operator "+Se)}let Kn=He&&{},Xs;for(let We of X){if(We.conditions){We.conditions=y(We.conditions,We.operator);continue}let kt=We[0]??We.attribute,on=kt==null?B:Fs(S,kt);if(on){if(He){let Wn=Gn(kt),Vt=Kn[Wn];Vt?(Vt.push(We),Xs=!0):Kn[Wn]=[We]}(on.type||Jg[We.comparator])&&(We[1]===void 0?We.value=q(We.value,on):We[1]=q(We[1],on))}else if(kt!=null)throw(0,rn.handleHDBError)(new Error,`${kt} is not a defined attribute`,404)}if(m.enforceExecutionOrder)return X;if(Xs)for(let We in Kn){let kt=Kn[We],on=kt.length;if(on>1)for(let Wn=0;Wn<on;Wn++){let Vt=kt[Wn];if(Vt.comparator==="ge"||Vt.comparator==="greater_than_equal")for(let Zs=0;Zs<on;Zs++){let Fo=kt[Zs];(Fo.comparator==="le"||Fo.comparator==="less_than_equal")&&(Vt.comparator="between",Vt.value=[Vt.value,Fo.value],X.splice(X.indexOf(Fo),1))}if(Vt.comparator==="equals"||!Vt.comparator){for(let Zs=0;Zs<on;Zs++)if(Zs!==Wn){let Fo=kt[Zs];X.splice(X.indexOf(Fo),1)}break}}}return X}a(y,"prepareConditions");function v(X,Se){if(m.enforceExecutionOrder)return X;for(let He of X)He.conditions&&(He.conditions=v(He.conditions,He.operator));return X.length>1&&Se!=="or"?(0,UG.sortBy)(X,rE(Ke)):X}a(v,"orderConditions");function q(X,Se){return Array.isArray(X)?X.map(He=>lh(He,Se)):lh(X,Se)}a(q,"coerceTypedValues");let C=m.operator;(O.length>0||C)&&(O=y(O,C));let G=typeof m.sort=="object"&&m.sort,x;if(G&&C!=="or"){let X=G.attribute;if(N=O.find(Se=>Gn(Se.attribute)===Gn(X)),!N){let Se=Fs(S,X);if(!Se)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not a defined attribute`,404);if(Se.indexed)N={attribute:X,comparator:"sort"},O.push(N);else if(O.length===0&&!m.allowFullScan)throw(0,rn.handleHDBError)(new Error,`${Array.isArray(X)?X.join("."):X} is not indexed and not combined with any other conditions`,404)}N&&(N.descending=!!G.descending)}O=v(O,C),G&&(N&&O[0]===N?G.next&&(x={dbOrderedAttribute:G.attribute,attribute:G.next.attribute,descending:G.next.descending,next:G.next.next}):(N&&O.splice(O.indexOf(N),1),x=G));let Z=m.select;if(O.length===0&&(O=[{attribute:t,comparator:"greater_than",value:!0}]),m.explain)return{conditions:O,operator:C,postOrdering:x,selectApplied:!!Z};let _e=D.useReadTxn(),ne=jg(O,C,Ke,_e,m,A,(X,Se)=>_O(X,Z,A,_e,Se),L),Ue=m.ensureLoaded!==!1;x||(ne=re(ne));let ce=Ke.transformEntryForSelect(Z,A,_e,L,Ue,!0),De=Ke.transformToOrderedSelect(ne,Z,x,_e,A,ce);function re(X){return m.offset||m.limit!==void 0?X.slice(m.offset,m.limit!==void 0?(m.offset||0)+m.limit:void 0):X}return a(re,"applyOffset"),x&&(De=re(De)),De.onDone=()=>{De.onDone=null,D.doneReadTxn()},De.selectApplied=!0,De.getColumns=()=>{if(Z){let X=[];for(let Se of Z)Se==="*"?X.push(...S.map(He=>He.name)):X.push(Se.name||Se);return X}return S.map(X=>X.name)},De}static transformToOrderedSelect(m,A,D,O,N,L){let y=new Mq;if(D){m=_O(m,A,O,N,null);let v;y.iterate=function(){let C,G=m[Symbol.asyncIterator]?m[Symbol.asyncIterator]():m[Symbol.iterator](),x,Z=D.dbOrderedAttribute,_e,ne,Ue=!0;function ce(re){let X=re.next&&ce(re.next),Se=re.descending;return(He,Kn)=>{let Xs=Ph(He,re.attribute,O),We=Ph(Kn,re.attribute,O),kt=Se?(0,xo.compareKeys)(We,Xs):(0,xo.compareKeys)(Xs,We);return kt===0?X?.(He,Kn)||0:kt}}a(ce,"createComparator");let De=ce(D);return{async next(){let re;if(C)if(re=C.next(),re.done){if(x)return y.onDone&&y.onDone(),re}else return{value:await L.call(this,re.value)};v=[],_e&&v.push(_e);do if(re=await G.next(),re.done){if(x=!0,v.length)break;return y.onDone&&y.onDone(),re}else{let X=re.value;if(X?.then&&(X=await X),Z){let Se=Ph(X,Z,O);if(Ue)Ue=!1,ne=Se;else if(Se!==ne){ne=Se,_e=X;break}}v.push(X)}while(!0);return D.isGrouped,v.sort(De),C=v[Symbol.iterator](),re=C.next(),re.done?(y.onDone&&y.onDone(),re):{value:await L.call(this,re.value)}},return(){y.onDone&&y.onDone(),G.return()},throw(){y.onDone&&y.onDone(),G.throw()}}};let q=a(C=>{if(typeof A=="object"&&Array.isArray(C.attribute))for(let G=0;G<A.length;G++){let x=A[G],Z;if(x.name===C.attribute[0]){for(Z=x.sort||(x.sort={});Z.next;)Z=Z.next;Z.attribute=C.attribute.slice(1),Z.descending=C.descending}else x===C.attribute[0]&&(A[G]=Z={name:x,sort:{attribute:C.attribute.slice(1),descending:C.descending}})}C.next&&q(C.next)},"applySortingOnSelect");q(D)}else y.iterate=(m[Symbol.asyncIterator]||m[Symbol.iterator]).bind(m),y=y.map(L);return y}static transformEntryForSelect(m,A,D,O,N,L){if(m&&(m===t||m?.length===1&&m[0]===t)){let C=a(G=>(A?.transaction?.stale&&(A.transaction.stale=!1),G?.key??G),"transform");return m===t?C:m.asArray?G=>[C(G)]:G=>({[t]:C(G)})}let y;N&&I&&!m?.every(C=>{let G;return typeof C=="object"?G=C.name:G=C,r[G]||G===t})&&(y=!0);let v,q=a(function(C){let G;if(A?.transaction?.stale&&(A.transaction.stale=!1),C!=null){if(Ch=C,G=C.value||C.deref?.(),!G&&(C.key===void 0||C.deref)){if(C=Lh(C.key??C,A,{transaction:D,lazy:m?.length<4},this?.isSync,x=>x),C?.then)return C.then(q.bind(this));G=C?.value}if(y&&C?.metadataFlags&(ql|Fl)||C?.expiresAt&&C?.expiresAt<Date.now()){let x=Mh(C.key??C,C,A);if(x?.then)return x.then(q)}}if(G==null)return L?vo.SKIP:G;if(m&&!(m[0]==="*"&&m.length===1)){let x,Z=a((ne,Ue)=>{let ce;typeof ne=="object"?ce=ne.name:ce=ne;let De=js?.[ce],re;if(De){let X=O?.[ce];if(X)if(X.hasMappings){let He=De.from?G[De.from]:Gn(C.key);re=X.get(He),re||(re=[])}else re=X.fromRecord?.(G);else re=De(G,A,C);let Se=a(He=>{if(He&&typeof He=="object"){let Kn=De.definition?.tableClass||Ke;v||(v={});let Xs=v[ce]||(v[ce]=Kn.transformEntryForSelect(ce===ne?null:ne.select||(Array.isArray(ne)?ne:null),A,D,X,N));if(Array.isArray(He)){let We=[],kt=Kn.transformToOrderedSelect(He,ne.select,typeof ne.sort=="object"&&ne.sort,A,D,Xs)[this.isSync?Symbol.iterator:Symbol.asyncIterator](),on=a(Vt=>{for(;!Vt.done;){if(Vt?.then)return Vt.then(on);We.push(Vt.value),Vt=kt.next()}Ue(We,ce)},"nextValue"),Wn=on(kt.next());Wn&&(x||(x=[]),x.push(Wn));return}else if(He=Xs.call(this,He),He?.then){x||(x=[]),x.push(He.then(We=>Ue(We,ce)));return}}Ue(He,ce)},"handleResolvedValue");re?.then?(x||(x=[]),x.push(re.then(Se))):Se(re);return}else re=G[ce],re&&typeof re=="object"&&ce!==ne&&(re=Ke.transformEntryForSelect(ne.select||ne,A,D,null)({value:re}));Ue(re,ce)},"selectAttribute"),_e;if(typeof m=="string")Z(m,ne=>{_e=ne});else if(Array.isArray(m))if(m.asArray)_e=[],m.forEach((ne,Ue)=>{ne==="*"?m[Ue]=G:Z(ne,ce=>_e[Ue]=ce)});else{_e={};let ne=m.forceNulls;for(let Ue of m)if(Ue==="*")for(let ce in G)_e[ce]=G[ce];else Z(Ue,(ce,De)=>{ce===void 0&&ne&&(ce=null),_e[De]=ce})}else throw new rn.ClientError("Invalid select"+m);return x?Promise.all(x).then(()=>_e):_e}return G},"transform");return q}async subscribe(m){if(!u)throw new Error("Can not subscribe to a table without an audit log");h||Et({table:s,database:c,schemaDefined:_,attributes:S,audit:!0}),m||(m={});let A=!m.rawEvents,D=[],O=bG(Ke,this[Me]??null,function(L,y,v,q){try{let C=y.getValue?.(i,A);if(!C&&y.type==="patch"&&A){let x=i.getEntry(L);x?.version===y.version?C=x.value:C=y.getValue?.(i,!0,v),y.type="put"}let G={id:L,timestamp:v,value:C,version:y.version,type:y.type,beginTxn:q};D?D.push(G):this.send(G)}catch(C){it.error(C)}},m.startTime||0,m),N=(async()=>{this[Vn]&&(O.includeDescendants=!0,m.onlyChildren&&(O.onlyChildren=!0)),m.supportsTransactions&&(O.supportsTransactions=!0);let L=this[Me],y=m.previousCount;y>1e3&&(y=1e3);let v=m.startTime;if(this[Vn]){if(v){if(y)throw new rn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:q,value:C}of u.getRange({start:v,exclusiveStart:!0,snapshot:!1})){let G=vt(C);if(G.tableId!==n)continue;let x=G.recordId;if(L==null||MG(L,x)){let Z=G.getValue(i,A,q);if(O.send({id:x,timestamp:q,value:Z,version:G.version,type:G.type}),O.queue?.length>DG&&await O.waitForDrain()===!1)return}O.startTime=q}}else if(y){let q=[];for(let{key:C,value:G}of u.getRange({start:"z",end:!1,reverse:!0}))try{let x=vt(G);if(x.tableId!==n)continue;let Z=x.recordId;if(L==null||MG(L,Z)){let _e=x.getValue(i,A,C);if(q.push({id:Z,timestamp:C,value:_e,version:x.version,type:x.type}),--y<=0)break}}catch(x){it.error("Error getting history entry",C,x)}for(let C=q.length;C>0;)O.send(q[--C]);q[0]&&(O.startTime=q[0].timestamp)}else if(!m.omitCurrent){for(let{key:q,value:C,version:G,localTime:x}of i.getRange({start:L??!1,end:L==null?void 0:[L,xo.MAXIMUM_KEY],versions:!0,snapshot:!1}))if(C&&(O.send({id:q,timestamp:x,value:C,version:G,type:"put"}),O.queue?.length>DG&&await O.waitForDrain()===!1))return}}else{y&&!v&&(v=0);let q=this[Lr]?.localTime;if(q===Om&&(i.cache?.delete(L),this[Lr]=i.getEntry(L),it.trace("re-retrieved record",q,this[Lr]?.localTime),q=this[Lr]?.localTime),it.trace("Subscription from",v,"from",L,q),v<q){let C=[],G=q;do{let x=u.get(G);if(x){m.omitCurrent=!0;let Z=vt(x),_e=Z.getValue(i,A,G);A&&(Z.type="put"),C.push({id:L,value:_e,timestamp:G,...Z}),G=Z.previousLocalTime}else break;y&&y--}while(G>v&&y!==0);for(let x=C.length;x>0;)O.send(C[--x]);O.startTime=q}!m.omitCurrent&&this.doesExist()&&O.send({id:L,timestamp:q,value:this[Ee],version:this[Vl],type:"put"})}for(let q of D)O.send(q);D=null})();return m.listener&&O.on("data",m.listener),O}doesExist(){return!!(this[Ee]||this[Gl])}publish(m,A){this._writePublish(m,A)}_writePublish(m,A){let D=yn(this[ye]),O=this[Me]||null;dc(O);let N=this[ye];D.addWrite({key:O,store:i,entry:this[Lr],nodeName:N?.nodeName,validate:()=>{N?.source||(D.checkOverloaded(),this.validate(m))},before:Be.publish?.bind(this,N,O,m),beforeIntermediate:Ne.publish?.bind(this,N,O,m),commit:(L,y,v)=>{y===void 0&&p&&!h&&a_(),T(O,y?.value??null,y,y?.version||L,0,!0,N,y?.expiresAt,"message",!1,m)}})}validate(m,A){let D,O=a((N,L,y)=>{if(L.type&&N!=null)if(A&&N.__op__&&(N=N.value),L.properties){typeof N!="object"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an object${L.type?" ("+L.type+")":""}`);let v=L.properties;for(let q=0,C=v.length;q<C;q++){let G=v[q],x=O(N[G.name],G,y+"."+G.name);x&&(N[G.name]=x)}if(L.sealed&&N!=null&&typeof N=="object")for(let q in N)v.find(C=>C.name===q)||(D||(D=[])).push(`Property ${q} is not allowed within object in property ${y}`)}else switch(L.type){case"Int":(typeof N!="number"||N>>0!==N)&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(v=>typeof v=="string")||(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a string`);break;case"Boolean":typeof N!="boolean"&&(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Date`)}break;case"BigInt":if(typeof N!="bigint"){if(typeof N=="string"||typeof N=="number")return BigInt(N);(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a bigint`)}break;case"Bytes":N instanceof Uint8Array||(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(L.elements)for(let v=0,q=N.length;v<q;v++){let C=N[v],G=O(C,L.elements,y+"[*]");G&&(N[v]=G)}}else(D||(D=[])).push(`Value ${$n(N)} in property ${y} must be a Buffer or Uint8Array`);break}L.nullable===!1&&N==null&&(D||(D=[])).push(`Property ${y} is required (and not does not allow null values)`)},"validateValue");for(let N=0,L=S.length;N<L;N++){let y=S[N];if(!y.relationship&&(!A||y.name in m)){let v=O(m[y.name],y,y.name);v&&(m[y.name]=v)}}if(d)for(let N in m)S.find(L=>L.name===N)||(D||(D=[])).push(`Property ${N} is not allowed`);if(D)throw new rn.ClientError(D.join(". "))}getUpdatedTime(){return this[Vl]}wasLoadedFromSource(){return I?!!this[$A]:void 0}static async addAttributes(m){let A=S.slice(0);for(let D of m){if(!D.name)throw new rn.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new rn.ClientError("Attribute names cannot include backticks or forward slashes");(0,vG.validateAttribute)(D.name),A.push(D)}return Et({table:s,database:c,schemaDefined:_,attributes:A}),Ke.indexingOperation}static async removeAttributes(m){let A=S.filter(D=>!m.includes(D.name));return Et({table:s,database:c,schemaDefined:_,attributes:A}),Ke.indexingOperation}static getRecordCount(m){let A=i.getStats().entryCount,D=1e3/2,O=performance.now(),N=Math.floor(A/2),L=m?.exactCount,y=0,v=0,q;for(let{value:C}of i.getRange({start:!0,lazy:!0}))if(C!=null&&y++,v++,!L&&v<N&&performance.now()-O>D){q=v;break}if(q){let C=y;y=0;for(let{value:re}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:q}))re!=null&&y++;let G=q*2,x=(y+C)/G,Z=Math.pow((y-C+1)/q/2,2)+x*(1-x)/G,_e=Math.max(Math.sqrt(Z)*A,1),ne=Math.round(x*A),Ue=Math.max(ne-1.96*_e,y+C),ce=Math.min(ne+1.96*_e,A),De=Math.pow(10,Math.round(Math.log10(_e)));return De>ne&&(De=De/10),y=Math.round(ne/De)*De,{recordCount:y,estimatedRange:[Math.round(Ue),Math.round(ce)]}}return{recordCount:y}}static updatedAttributes(){js=this.propertyResolvers={$id:(m,A,D)=>({value:D.key}),$updatedtime:(m,A,D)=>D.version,$record:(m,A,D)=>D?{value:m}:m};for(let m of this.attributes){m.resolve=null;let A=m.relationship;if(A)if(m.indexed&&console.error("A relationship property can not be directly indexed, (but you may want to index the foreign key attribute)"),lO=!0,A.to)m.elements?.definition?(js[m.name]=m.resolve=(D,O,N)=>{let L=D[A.from?A.from:t],y=m.elements.definition.tableClass;return N?Ga({attribute:A.to,value:L},yn(O).getReadTxn(),!1,y,!1).asArray:y.search([{attribute:A.to,value:L}],O).asArray},m.set=()=>{throw new Error("Setting a one-to-many relationship property is not supported")},m.resolve.definition=m.elements.definition,A.from&&(m.resolve.from=A.from)):console.error(`The one-to-many/many-to-many relationship property "${m.name}" in table "${s}" must have an array type referencing a table as the elements`);else if(A.from){let D=m.definition||m.elements?.definition;D?(js[m.name]=m.resolve=(O,N,L)=>{let y=O[A.from];if(y!==void 0){if(m.elements){let v,q=y.map(C=>{let G=L?D.tableClass.primaryStore.getEntry(C,{transaction:yn(N).getReadTxn()}):D.tableClass.get(C,N);return G?.then&&(v=!0),G});return A.filterMissing?v?Promise.all(q).then(C=>C.filter(PG)):q.filter(PG):v?Promise.all(q):q}return L?D.tableClass.primaryStore.getEntry(y,{transaction:yn(N).getReadTxn()}):D.tableClass.get(y,N)}},m.set=(O,N)=>{if(Array.isArray(N)){let L=N.map(y=>y[Me]||y[D.tableClass.primaryKey]);O[A.from]=L}else{let L=N[Me]||N[D.tableClass.primaryKey];O[A.from]=L}},m.resolve.definition=m.definition||m.elements?.definition,m.resolve.from=A.from):console.error(`The relationship property "${m.name}" in table "${s}" must be a type that references a table`)}else console.error(`The relationship directive on "${m.name}" in table "${s}" must use either "from" or "to" arguments`)}ah(this,this)}static async deleteHistory(m=0){let A;for(let{key:D,value:O}of u.getRange({start:0,end:m}))await kl(),vt(O).tableId===n&&(A=u.remove(D));await A}static async*getHistory(m=0,A=1/0){for(let{key:D,value:O}of u.getRange({start:m,end:A})){await kl();let N=vt(O);N.tableId===n&&(yield{id:N.recordId,localTime:D,version:N.version,type:N.type,value:N.getValue(i,!0,D),user:N.user})}}static async getHistoryOfRecord(m){let A=[];if(m==null)throw new Error("An id is required");let D=i.getEntry(m);if(!D)return A;let O=D.localTime;if(!O)throw new Error("The entry does not have a local audit time");let N=0;do{await kl();let L=u.get(O);if(L){let y=vt(L);A.push({id:y.recordId,localTime:O,version:y.version,type:y.type,value:y.getValue(i,!0,O),user:y.user}),O=y.previousLocalTime}else break}while(N<1e3&&O);return A.reverse()}static cleanup(){J?.remove()}}Ke.updatedAttributes();let vq=Ke.prototype;return vq[Jie]=!0,E&&Ke.setTTLExpiration(E/1e3),Q&&Bq(),Ke;function i_(K,m,A){let D;for(let O in r){let N=r[O],L=N.isIndexing,y=A?.[O],v=m?.[O];if(y===v&&!L)continue;D=!0;let q=N.indexNulls,C=(0,$l.getIndexedValues)(y,q),G=(0,$l.getIndexedValues)(v,q);if(G?.length>0){let x=new Set(G);if(C=C?C.filter(Z=>{if(x.has(Z))x.delete(Z);else return!0}):[],G=Array.from(x),(G.length>0||C.length>0)&&IG){let Z=G.concat(C).map(_e=>({key:_e,value:K}));N.prefetch(Z,LG)}for(let Z=0,_e=G.length;Z<_e;Z++)N.remove(G[Z],K)}else C?.length>0&&IG&&N.prefetch(C.map(x=>({key:x,value:K})),LG);if(C)for(let x=0,Z=C.length;x<Z;x++)N.put(C[x],K)}return D}a(i_,"updateIndices");function dc(K){switch(typeof K){case"number":return!0;case"string":if(K.length<659)return!0;if(K.length>CG)throw new Error("Primary key size is too large: "+K.length);break;case"object":if(K===null)return!0;break;case"bigint":if(K<2n**64n&&K>-(2n**64n))return!0;break;default:throw new Error("Invalid primary key type: "+typeof K)}if((0,xo.writeKey)(K,Xie,0)>CG)throw new Error("Primary key size is too large: "+K.length);return!0}a(dc,"checkValidId");function Lh(K,m,A,D,O){let N=a(()=>{if(m?.transaction?.stale&&(m.transaction.stale=!1),A.transaction?.isDone)return O(null,K);let L=i.getEntry(K,A);return L&&m&&(L?.version>(m.lastModified||0)&&(m.lastModified=L.version),L?.localTime&&!m.lastRefreshed&&(m.lastRefreshed=L.localTime)),O(L,K)},"whenPrefetched");return D?N():ue>0?(ue--,N()):new Promise((L,y)=>{ue===0?(ue--,i.prefetch([K],()=>{v(),q()})):(j.push(K),oe.push(q),j.length>Uq&&(ue--,v()));function v(){if(j.length>0){let C=oe;i.prefetch(j,()=>{ue===-1?v():ue++;for(let G of C)G()}),j=[],oe=[],le>2&&le--}else ue=le,le<Pq&&le++}a(v,"prefetch");function q(){try{L(N())}catch(C){y(C)}}a(q,"load")})}a(Lh,"loadLocalRecord");function o_(K){if(!K?.role)return;let m=K.role.permission;if(m.super_user)return Zie;let A=m[c],D,O=A?.tables;if(O)return O[s];if(c==="data"&&(D=m[s])&&!D.tables)return D}a(o_,"getTablePermissions");function Mh(K,m,A,D){if(I){let O;if(A.noCache?O=!0:(m?(!m.value||m.metadataFlags&(ql|Fl)||m.expiresAt&&m.expiresAt<Date.now())&&(O=!0):O=!0,Wr(!O,"cache-hit",s)),O){let N=dO(K,m,A).then(L=>(L?.value?.[Ee]&&it.error("Can not assign a record with a record property"),A&&(L?.version>(A.lastModified||0)&&(A.lastModified=L.version),A.lastRefreshed=Date.now()),L));if(A?.onlyIfCached||m?.value&&D?.allowStaleWhileRevalidate?.(m,K)){if(N.catch(L=>it.warn(L)),A?.onlyIfCached&&!D.doesExist())throw new rn.ServerError("Entry is not cached",504);return}else return N}}else if(m?.value&&m.expiresAt&&m.expiresAt<Date.now())return Ke.evict(m.key,m.value,m.version),m.value=null,{then(O){return O(m)}}}a(Mh,"ensureLoadedFromSource");function yn(K){let m=K?.transaction;if(m){if(!m.lmdbDb)return m.lmdbDb=i,m;do{if(m.lmdbDb?.path===i.path)return m;let A=m.next;if(!A)return m=m.next=new no,m.lmdbDb=i,m;m=A}while(!0)}else return new Td}a(yn,"txnForContext");function Ph(K,m,A){if(!K)return;Ch=K;let D=K.value||K.deref?.()||(Ch=i.getEntry(K.key))?.value;if(typeof m=="object"){let N=js,L=D;for(let y=0,v=m.length;y<v;y++){let q=m[y],C=N?.[q];L=C&&L?C(L,A,!0)?.value:L?.[q],N=C?.definition?.tableClass?.propertyResolvers}return L}let O=js[m];return O?O(D,A):D[m]}a(Ph,"getAttributeValue");function _O(K,m,A,D,O){let N=O?.length,L={transaction:D,lazy:N>0||typeof m=="string"||m?.length<4,alwaysPrefetch:!0},y;function v(q,C){let G=q?.value;if(!G)return vo.SKIP;for(let x=0;x<N;x++)if(!y?.includes(x)&&!O[x](G,q))return vo.SKIP;return C!==void 0&&(q.key=C),q}if(a(v,"processEntry"),N>0||!K.hasEntries){let q=K.map(C=>{if(y=null,typeof C=="object"&&C?.key!==void 0)return N>0?v(C):C;if(C==null)return vo.SKIP;for(let G=0;G<N;G++){let Z=O[G].idFilter;if(Z){if(!Z(C))return vo.SKIP;y||(y=[]),y.push(G)}}return Lh(C,A,L,!1,v)});return Array.isArray(K)&&(q=q.filter(C=>C!==vo.SKIP)),q.hasEntries=!0,q}return K}a(_O,"transformToEntries");async function dO(K,m,A){let D=m?.metadataFlags,O=m?.version,N,L;if(!i.attemptLock(K,O,()=>{clearTimeout(L);let C=i.getEntry(K);!C||!C.value||C.metadataFlags&(ql|Fl)?N(dO(K,i.getEntry(K),A)):N(C)}))return new Promise(C=>{N=C,L=setTimeout(()=>{i.unlock(K,O)},zie)});let y=m?.value,v={requestContext:A,replacingRecord:y,replacingVersion:O,noCacheStore:!1,source:null,resourceCache:A?.resourceCache},q=A?.responseHeaders;return new Promise((C,G)=>{let x;KA(rt(v,async Z=>{let _e=performance.now(),ne,Ue,ce;try{for(let Se of Ke.sources)if(Se.get&&(!Se.get.reliesOnPrototype||Se.prototype.get)&&(v.source=Se,ne=await Se.get(K,v),ne))break;ce=D&ql;let re=v.lastModified||ce&&O;Ue=ce||re>O||!y,re||(re=(0,$l.getNextMonotonicTime)());let X=performance.now()-_e;if(Sr(X,"cache-resolution",s),q&&Tg(q,"Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`,!0),Z.timestamp=re,E&&!v.expiresAt&&(v.expiresAt=Date.now()+E),ne){if(typeof ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof ne.toJSON=="function"&&(ne=ne.toJSON()),t&&ne[t]!==K&&(ne[t]=K)}x=!0,C({version:re,value:ne})}catch(re){re.message+=` while resolving record ${K} for ${s}`,y&&((re.code==="ECONNRESET"||re.code==="ECONNREFUSED"||re.code==="EAI_AGAIN")&&!A?.mustRevalidate||A?.staleIfError&&(re.statusCode===500||re.statusCode===502||re.statusCode===503||re.statusCode===504))?(C({version:O,value:y}),it.trace(re.message,"(returned stale record)")):G(re),v.transaction.abort();return}if(A?.noCacheStore||v.noCacheStore){v.transaction.abort();return}yn(v).addWrite({key:K,store:i,entry:m,nodeName:"source",commit:(re,X)=>{if(X?.version!==O)return;let Se=i_(K,y,ne);ne?(Ne.put?.(v,K,ne),T(K,ne,X,re,0,h&&Ue||null,v,v.expiresAt,"put",!!ce)):(Ne.delete?.(v,K),h||p?T(K,null,X,re,0,h&&Ue||null,v,0,"delete",!!ce):i.remove(K,O))}})}),()=>{i.unlock(K,O)},Z=>{i.unlock(K,O),x&&it.error("Error committing cache update",Z)})})}a(dO,"getFromSource");function a_(){if(xe!==n_&&(n_=xe,(0,Bo.getWorkerIndex)()===(0,Bo.getWorkerCount)()-1)){if(s_&&clearTimeout(s_),!xe)return;let K=new Date;K.setMonth(0),K.setDate(1),K.setHours(0),K.setMinutes(0),K.setSeconds(0);let m=Math.ceil((Date.now()-K.getTime())/xe)*xe+K.getTime(),A=a(D=>{it.trace(`Scheduled next cleanup scan at ${new Date(D)}ms`),s_=setTimeout(()=>U=U.then(async()=>{if(A(Math.max(D+xe,Date.now())),i.rootStore.status!=="open"){clearTimeout(s_);return}let O=50,N=new Array(O),L=0;it.trace(`Starting cleanup scan for ${s}`);try{let y=0;for(let{key:v,value:q,version:C,expiresAt:G}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0})){let x;q===null&&!h&&C+Qie<Date.now()?x=i.remove(v,C):G&&G+f<Date.now()&&(x=Ke.evict(v,q,C),y++),x&&(await N[L],N[L]=x.catch(Z=>{it.error("Cleanup error",Z)}),++L>=O&&(L=0)),await kl()}it.trace(`Finished cleanup scan for ${s}, evicted ${y} entries`)}catch(y){it.trace(`Error in cleanup scan for ${s}:`,y)}}),Math.min(D-Date.now(),2147483647)).unref()},"startNextTimer");A(m)}}a(a_,"scheduleCleanup");function fO(){J=u?.addDeleteRemovalCallback(n,K=>{let m=i.getEntry(K);m?.value===null&&i.remove(K,m.version)})}a(fO,"addDeleteRemoval");function Bq(){(0,Bo.getWorkerIndex)()===0&&setInterval(async()=>{if(!Dh){Dh=!0;try{let K=Q.name,m=r[K];if(!m)throw new Error(`expiresAt attribute ${Q} must be indexed`);for(let A of m.getRange({start:!0,values:!1,end:Date.now(),snapshot:!1})){for(let D of m.getValues(A)){let O=i.getEntry(D);O?.value?O.value[K]<Date.now()&&Ke.evict(D,O.value,O.version):i.ifVersion(D,O?.version,()=>m.remove(A,D))}await kl()}}catch(K){it.error("Error in evicting old records",K)}finally{Dh=!1}}},Wie).unref()}a(Bq,"runRecordExpirationEviction")}function YA(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 LG(){}function eoe(e){BG=e}function lh(e,t){let r=t?.type;if(e===null)return e;if(e===""&&r&&r!=="String"&&r!=="Any")return null;switch(r){case"Int":case"Long":return e==="null"?null:parseInt(e);case"Float":return e==="null"?null:parseFloat(e);case"BigInt":return e==="null"?null:BigInt(e);case"Boolean":return e==="true"?!0:e==="false"?!1:e;case"Date":return isNaN(e)?e==="null"?null:(toe.test(e)||(e+="Z"),new Date(e)):new Date(+e);case void 0:case"Any":return(0,dh.autoCast)(e);default:return e}}function MG(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;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 KA(e,t,r){return e?.then?e.then(t,r):t(e)}function _h(e,t){e[Lr]=t,e[Ee]=t?.value??null,e[Vl]=t?.version}function PG(e){return e!=null}function $n(e){try{return JSON.stringify(e)}catch{return e}}var Yn,vo,$l,UG,vG,Wl,rn,Yl,Kl,it,xo,Bo,dh,Kie,BG,Wie,Qie,IG,zie,Vl,Jie,Lr,Gl,wG,jie,$A,ac,ql,Fl,Xie,CG,DG,Zie,ATe,toe,kl,SE=Re(()=>{Yn=H(P()),vo=require("lmdb"),$l=H(vr()),UG=require("lodash"),vG=H(wc());cn();_S();Wl=H(ee());NG();rn=H(se()),Yl=H(Ns()),Kl=H(Pn());Ae();sE();it=H($());Ad();so();xo=require("ordered-binary"),Bo=H(Qe());ni();dh=H(z());Bc();Ds();eh();el();Kie=new Uint8Array(9);Kie[8]=192;Wie=6e4,Qie=864e5;Wl.initSync();IG=Wl.get(Yn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),zie=1e4,Vl=Symbol.for("version"),Jie=Symbol.for("incremental-update"),Lr=Symbol("entry"),Gl=Symbol("is-saving"),wG=1,jie=2,$A=Symbol("loaded-from-source"),ac={isNotification:!0,ensureLoaded:!1},ql=1,Fl=8,Xie=Buffer.allocUnsafeSlow(8192),CG=1978,DG=100,Zie={read:!0,insert:!0,update:!0,delete:!0,isSuperUser:!0},ATe=(0,dh.convertToMS)(Wl.get(Yn.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(fh,"makeTable");a(YA,"attributesAsObject");a(LG,"noop");a(eoe,"setServerUtilities");toe=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(lh,"coerceType");a(MG,"isDescendantId");kl=a(()=>new Promise(setImmediate),"rest");a(KA,"when");a(_h,"updateResource");a(PG,"exists");a($n,"stringify")});var ke={};Fe(ke,{database:()=>ua,databases:()=>ct,dropDatabase:()=>mS,dropTableMeta:()=>ooe,getDatabases:()=>mr,getDefaultCompression:()=>Nf,getTables:()=>roe,onUpdatedTable:()=>rA,readMetaDb:()=>Ql,resetDatabases:()=>Ku,table:()=>Et,tables:()=>Br});function roe(){return Sh||mr(),Br||{}}function mr(){if(Sh)return ct;Sh=!0,lc=new Map;let e=(0,St.getHdbBasePath)()&&(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),t=(0,St.get)(Ut.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,nn.existsSync)(e)?e:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,nn.existsSync)(e))for(let r of(0,nn.readdirSync)(e,{withFileTypes:!0})){let n=(0,ot.basename)(r.name,".mdb");r.isFile()&&(0,ot.extname)(r.name).toLowerCase()===".mdb"&&!t[n]?.path&&Ql((0,ot.join)(e,r.name),null,n)}if((0,nn.existsSync)((0,uc.getBaseSchemaPath)())){for(let r of(0,nn.readdirSync)((0,uc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let n=(0,ot.join)((0,uc.getBaseSchemaPath)(),r.name),s=(0,ot.join)((0,uc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,nn.readdirSync)(n,{withFileTypes:!0}))if(i.isFile()&&(0,ot.extname)(i.name).toLowerCase()===".mdb"){let o=(0,ot.join)(s,i.name);Ql((0,ot.join)(n,i.name),(0,ot.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let n=t[r],s=n.path;if((0,nn.existsSync)(s))for(let o of(0,nn.readdirSync)(s,{withFileTypes:!0}))o.isFile()&&(0,ot.extname)(o.name).toLowerCase()===".mdb"&&Ql((0,ot.join)(s,o.name),(0,ot.basename)(o.name,".mdb"),r);let i=n.tables;if(i)for(let o in i){let c=i[o],u=(0,ot.join)(c.path,(0,ot.basename)(o+".mdb"));(0,nn.existsSync)(u)&&Ql(u,o,r,null,!0)}}for(let r in ct){let n=lc.get(r);if(n){let s=ct[r];r.includes("delete")&&bn.trace(`defined tables ${Array.from(n.keys())}`);for(let i in s)n.has(i)||(bn.trace(`delete table class ${i}`),delete s[i])}else if(delete ct[r],r==="data"){for(let s in Br)delete Br[s];delete Br[Th]}}return lc=null,ct}}function Ku(){Sh=!1;for(let[,e]of Bi)e.needsDeletion=!0;mr();for(let[e,t]of Bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Bi.delete(e));return ct}function Ql(e,t,r=zA,n,s){let i=new WA.default(e,!1);try{let o=Bi.get(e);o?o.needsDeletion=!1:(o=(0,hh.open)(i),Bi.set(e,o));let c=new Ho.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Eh.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(n?(0,nn.existsSync)(n)&&(i.path=n,_=(0,hh.open)(i),_.isLegacy=!0):_=ZE(o));let l=qG(r),d=l[Th],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,S]=f.toString().split("/");S===""?S=h.name:S||(S=p,p=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(p);let T=E.get(p);T||E.set(p,T={attributes:[]}),(S==null||h.is_hash_attribute)&&(T.primary=h),S!=null&&T.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:S}=h;if(!S){for(let j of p)if(j.is_hash_attribute||j.isPrimaryKey){S=j;break}if(!S){bn.fatal(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`);continue}}let T=l[f],R={},b=[],I,B,U=typeof S.audit=="boolean"?S.audit:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),F=S.trackDeletes,M=S.expiration,Q=S.eviction,J=S.sealed;if(T)R=T.indices,b=T.attributes,T.schemaVersion++;else{I=S.tableId,I?I>=(u.get(cc)||0)&&u.putSync(cc,I+1):(S.tableId=I=u.get(cc),I||(I=1),u.putSync(cc,I+1),u.putSync(S.key,S));let j=new Ho.default(!S.is_hash_attribute,S.is_hash_attribute);if(j.compression=S.compression,j.compression){let oe=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||GG;j.compression.threshold=oe}B=D_(o.openDB(S.key,j)),B.rootStore=o,B.tableId=I}for(let j of p){j.attribute=j.name;try{if(!j.is_hash_attribute&&(j.indexed||j.attribute&&!j.name)){if(!R[j.name]){let ue=new Ho.default(!j.is_hash_attribute,j.is_hash_attribute);R[j.name]=o.openDB(j.key,ue),R[j.name].indexNulls=j.indexNulls}let oe=b.find(ue=>ue.name===j.name);oe?b.splice(b.indexOf(oe),1,j):b.push(j)}}catch(oe){bn.error("Error trying to update attribute",j,b,R,oe)}}if(!T){T=FG(l,f,fh({primaryStore:B,auditStore:_,audit:U,sealed:J,expirationMS:M&&M*1e3,evictionMS:Q&&Q*1e3,trackDeletes:F,tableName:f,tableId:I,primaryKey:S.name,databasePath:s?r+"/"+f:r,databaseName:r,indices:R,attributes:p,schemaDefined:S.schemaDefined,dbisDB:u})),T.schemaVersion=1;for(let j of JA)j(T)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function qG(e){let t=ct[e];if(t||(e==="data"?t=ct[e]=Br:e==="system"?Object.defineProperty(ct,"system",{value:t=Object.create(null),configurable:!0}):t=ct[e]=Object.create(null)),lc&&!lc.has(e)){let r=new Set;t[Th]=r,lc.set(e,r)}return t}function FG(e,t,r){return e[t]=r,r}function ua({database:e,table:t}){e||(e=zA),mr();let r=qG(e),n=(0,ot.join)((0,St.getHdbBasePath)(),Ut.DATABASES_DIR_NAME),s=(0,St.get)(Ut.CONFIG_PARAMS.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,St.get)(Ut.CONFIG_PARAMS.STORAGE_PATH)||((0,nn.existsSync)(n)?n:(0,ot.join)((0,St.getHdbBasePath)(),Ut.LEGACY_DATABASES_DIR_NAME));let o=(0,ot.join)(n,(i?t:e)+".mdb"),c=Bi.get(o);if(!c){let u=new WA.default(o,!1);c=(0,hh.open)(u),Bi.set(o,c)}return c}async function mS(e){if(!ct[e])throw new Error("Schema does not exist");let t=ct[e],r;for(let n in t)r=t[n].primaryStore.rootStore,Bi.delete(r.path),r.status==="open"&&(await r.close(),await zl.remove(r.path));if(r||(r=ua({database:e,table:null}),r.status==="open"&&(await r.close(),await zl.remove(r.path))),e==="data"){for(let n in Br)delete Br[n];delete Br[Th]}delete ct[e]}function Et({table:e,database:t,expiration:r,eviction:n,scanInterval:s,attributes:i,audit:o,sealed:c,trackDeletes:u,schemaDefined:_,origin:l}){t||(t=zA);let d=ua({database:t,table:e}),E=ct[t],f=E?.[e];if(d.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let h,p,S,T;_==null&&(_=!0);let R=new Ho.default(!1);for(let M of i)M.attribute&&!M.name?(M.name=M.attribute,M.indexed=!0):M.attribute=M.name,M.expiresAt&&(M.indexed=!0);let b,I;if(f){if(h=f.primaryKey,f.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);f.attributes.splice(0,f.attributes.length,...i)}else{let M=d.auditStore;M||(M=ZE(d)),p=i.find(oe=>oe.isPrimaryKey)||{},h=p.name,p.is_hash_attribute=!0,p.schemaDefined=_,p.compression=Nf(),u&&(p.trackDeletes=!0),o=p.audit=typeof o=="boolean"?o:(0,St.get)(Ut.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(p.expiration=r),n&&(p.eviction=n),typeof c=="boolean"&&(p.sealed=c),l&&(p.origins?p.origins.includes(l)||p.origins.push(l):p.origins=[l]),bn.trace(`${e} table loading, opening primary store`);let Q=new Ho.default(!1,!0);Q.compression=p.compression;let J=e+"/",j=D_(d.openDB(J,Q));j.rootStore=d,T=d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,R),j.tableId=T.get(cc),j.tableId||(j.tableId=1),T.putSync(cc,j.tableId+1),p.tableId=j.tableId,f=FG(E,e,fh({primaryStore:j,auditStore:M,audit:o,sealed:c,trackDeletes:u,expirationMS:r&&r*1e3,evictionMS:n&&n*1e3,primaryKey:h,tableName:e,tableId:j.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:_,dbisDB:T})),f.schemaVersion=1,b=!0,F(),T.put(J,p)}S=f.indices,T=T||(d.dbisDb=d.openDB(Eh.INTERNAL_DBIS_NAME,R)),f.dbisDB=T;let B=[];for(let{key:M,value:Q}of T.getRange({start:!0})){let[J,j]=M.toString().split("/");if(j===""&&(j=Q.name),j){if(J!==e)continue}else j=J;let oe=i.find(le=>le.name===j),ue=!oe?.indexed&&Q.indexed&&!Q.isPrimaryKey;if((!oe||ue)&&(F(),b=!0,oe||T.remove(M),ue)){let le=f.indices[J];le&&B.push(le)}}let U=[];try{for(let M of i||[]){if(M.relationship)continue;let Q=e+"/"+(M.name||"");Object.defineProperty(M,"key",{value:Q,configurable:!0});let J=T.get(Q);if(M.isPrimaryKey){if(J=J||T.get(Q=e+"/")||{},o!==f.audit||c!==c||(+r||void 0)!==(+J.expiration||void 0)||(+n||void 0)!==(+J.eviction||void 0)){let oe=Object.assign({},J);typeof o=="boolean"&&(o&&f.enableAuditing(o),oe.audit=o),r&&(oe.expiration=+r),n&&(oe.eviction=+n),c!==void 0&&(oe.sealed=c),b=!0,F(),T.put(Q,oe)}continue}J?.attribute&&!J.name&&(J.indexed=!0);let j=!J||J.type!==M.type||J.indexed!==M.indexed||J.nullable!==M.nullable||JSON.stringify(J.attributes)!==JSON.stringify(M.attributes)||JSON.stringify(J.elements)!==JSON.stringify(M.elements);if(M.indexed){let oe=new Ho.default(!0,!1),ue=d.openDB(Q,oe);(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,F(),J=T.get(Q),(j||J.indexingPID&&J.indexingPID!==process.pid||J.restartNumber<Jl.workerData?.restartNumber)&&(b=!0,M.indexNulls===void 0&&(M.indexNulls=!0),f.primaryStore.getStats().entryCount>0&&(M.lastIndexedKey=J?.lastIndexedKey||!1,M.indexingPID=process.pid,ue.isIndexing=!0,Object.defineProperty(M,"dbi",{value:ue}),U.push(M))),T.put(Q,M)),J?.indexNulls&&M.indexNulls===void 0&&(M.indexNulls=!0),ue.indexNulls=M.indexNulls,S[M.name]=ue}else j&&(b=!0,F(),T.put(Q,M))}}finally{I&&I()}if(b&&(f.schemaVersion++,f.updatedAttributes()),bn.trace(`${e} table loading, running index`),U.length>0||B.length>0?f.indexingOperation=ioe(f,U,B):b&&mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,b)for(let M of JA)M(f,l!=="cluster");return(r||n||s)&&f.setTTLExpiration({expiration:r,eviction:n,scanInterval:s}),bn.trace(`${e} table loaded`),f;function F(){I||d.transactionSync(()=>({then(M){I=M}}))}a(F,"startTxn")}async function ioe(e,t,r){try{let n=e.schemaVersion;await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let s;for(let u of r)s=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:_,value:l,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(l){if(u++,s=e.primaryStore.ifVersion(_,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,xG.getIndexedValues)(l[h]);if(p)for(let S=0,T=p.length;S<T;S++)f.dbi.put(p[S],_)}}),s.then(()=>u--,E=>{u--,bn.error(E)}),Jl.workerData&&Jl.workerData.restartNumber!==HG.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=_,e.dbisDB.put(E.key,E);if(i)return}u>noe?await s:u>soe&&await new Promise(E=>setImmediate(E))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,s=e.dbisDB.put(_.key,_)}await s,await mh.signalSchemaChange(new ph.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(n){bn.error("Error in indexing",n)}}function ooe({table:e,database:t}){let r=ua({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 rA(e){JA.push(e)}function Nf(){let e=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION),t=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_DICTIONARY),r=(0,St.get)(Ut.CONFIG_PARAMS.STORAGE_COMPRESSION_THRESHOLD)||GG,n={startingOffset:32};return t&&(n.dictionary=zl.readFileSync(t)),r&&(n.threshold=r),e&&n}var St,Eh,hh,ot,nn,uc,Ho,WA,Ut,zl,QA,xG,mh,ph,Jl,bn,HG,zA,Th,GG,Br,ct,cc,JA,Sh,Bi,lc,noe,soe,Ae=Re(()=>{St=H(ee()),Eh=H(ft()),hh=require("lmdb"),ot=require("path"),nn=require("fs"),uc=H(je());SE();Ho=H(xc()),WA=H(Hc()),Ut=H(P()),zl=H(require("fs-extra")),QA=require("../index"),xG=H(vr()),mh=H(Ns()),ph=H(Pn()),Jl=require("worker_threads"),bn=H($()),HG=H(Qe());ni();Bc();zA="data",Th=Symbol("defined-tables"),GG=((0,St.get)(Ut.CONFIG_PARAMS.STORAGE_PAGESIZE)||4096)-60;(0,St.initSync)();Br=Object.create(null),ct=Object.create(null);(0,QA._assignPackageExport)("databases",ct);(0,QA._assignPackageExport)("tables",Br);cc=Symbol.for("next-table-id"),JA=[],Bi=new Map;a(roe,"getTables");a(mr,"getDatabases");a(Ku,"resetDatabases");a(Ql,"readMetaDb");a(qG,"ensureDB");a(FG,"setTable");a(ua,"database");a(mS,"dropDatabase");a(Et,"table");noe=1e3,soe=10;a(ioe,"runIndexing");a(ooe,"dropTableMeta");a(rA,"onUpdatedTable");a(Nf,"getDefaultCompression")});var z=g((LTe,tq)=>{"use strict";var xi=require("path"),KG=require("fs-extra"),Mr=$(),kG=require("fs-extra"),gh=require("os"),aoe=require("net"),coe=require("recursive-iterator"),dt=P(),uoe=KO(),VG=require("papaparse"),Rh=require("moment"),{inspect:loe}=require("util"),$G=require("is-number"),DTe=require("lodash"),_oe=require("minimist"),doe=require("https"),foe=require("http"),{hdb_errors:Ah}=se(),Eoe=/^((\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)))$/,WG=require("util").promisify(setTimeout),hoe=100,moe=5,poe="",Soe=4,YG={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};tq.exports={isEmpty:sn,isEmptyOrZeroLength:ps,arrayHasEmptyValues:Roe,arrayHasEmptyOrZeroLengthValues:Aoe,buildFolderPath:Ooe,isBoolean:QG,errorizeMessage:Toe,stripFileExtension:yoe,autoCast:Noe,autoCastJSON:zG,autoCastJSONDeep:XA,removeDir:Ioe,compareVersions:woe,isCompatibleDataVersion:Coe,escapeRawValue:Doe,unescapeValue:Loe,stringifyProps:Moe,timeoutPromise:Uoe,isClusterOperation:Boe,getClusterUser:Hoe,checkGlobalSchemaTable:xoe,getHomeDir:jG,getPropsFilePath:Poe,promisifyPapaParse:Goe,removeBOM:XG,createEventPromise:qoe,checkProcessRunning:Foe,checkSchemaTableExist:koe,checkSchemaExists:ZG,checkTableExists:eq,getStartOfTomorrowInSeconds:Voe,getLimitKey:$oe,isObject:boe,isNotEmptyAndHasValue:goe,autoCasterIsNumberCheck:JG,backtickASTSchemaItems:Yoe,isPortTaken:voe,createForkArgs:Koe,autoCastBoolean:Woe,async_set_timeout:WG,getTableHashAttribute:Qoe,doesSchemaExist:zoe,doesTableExist:Joe,stringifyObj:joe,ms_to_time:Xoe,changeExtension:Zoe,getEnvCliRootPath:ZA,noBootFile:eae,httpRequest:tae,transformReq:rae,convertToMS:nae,PACKAGE_ROOT:dt.PACKAGE_ROOT};function Toe(e){return e instanceof Error?e:new Error(e)}a(Toe,"errorizeMessage");function sn(e){return e==null}a(sn,"isEmpty");function goe(e){return!sn(e)&&(e||e===0||e===""||QG(e))}a(goe,"isNotEmptyAndHasValue");function ps(e){return sn(e)||e.length===0||e.size===0}a(ps,"isEmptyOrZeroLength");function Roe(e){if(sn(e))return!0;for(let t=0;t<e.length;t++)if(sn(e[t]))return!0;return!1}a(Roe,"arrayHasEmptyValues");function Aoe(e){if(ps(e))return!0;for(let t=0;t<e.length;t++)if(ps(e[t]))return!0;return!1}a(Aoe,"arrayHasEmptyOrZeroLengthValues");function Ooe(...e){try{return e.join(xi.sep)}catch{console.error(e)}}a(Ooe,"buildFolderPath");function QG(e){return sn(e)?!1:e===!0||e===!1}a(QG,"isBoolean");function boe(e){return sn(e)?!1:typeof e=="object"}a(boe,"isObject");function yoe(e){return ps(e)?poe:e.slice(0,-Soe)}a(yoe,"stripFileExtension");function Noe(e){return sn(e)||e===""||typeof e!="string"?e:YG[e]!==void 0?YG[e]:JG(e)===!0?Number(e):Eoe.test(e)?new Date(e):e}a(Noe,"autoCast");function zG(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(zG,"autoCastJSON");function XA(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=XA(n);s!==n&&(e[t]=s)}else for(let t in e){let r=e[t],n=XA(r);n!==r&&(e[t]=n)}return e}else return zG(e)}a(XA,"autoCastJSONDeep");function JG(e){if(e.startsWith("0.")&&$G(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&$G(e))}a(JG,"autoCasterIsNumberCheck");async function Ioe(e){if(ps(e))throw new Error(`Directory path: ${e} does not exist`);try{await kG.emptyDir(e),await kG.remove(e)}catch(t){throw Mr.error(`Error removing files in ${e} -- ${t}`),t}}a(Ioe,"removeDir");function woe(e,t){if(ps(e)){Mr.info("Invalid current version sent as parameter.");return}if(ps(t)){Mr.info("Invalid upgrade version sent as parameter.");return}let r,n=/(\.0+)+$/,s=e.version?e.version:e,i=t.version?t.version:t,o=s.replace(n,"").split("."),c=i.replace(n,"").split("."),u=Math.min(o.length,c.length);for(let _=0;_<u;_++)if(r=parseInt(o[_],10)-parseInt(c[_],10),r)return r;return o.length-c.length}a(woe,"compareVersions");function Coe(e,t,r=!1){let n=e.toString().split("."),s=t.toString().split(".");return n[0]===s[0]&&(!r||n[1]===s[1])}a(Coe,"isCompatibleDataVersion");function Doe(e){if(sn(e))return e;let t=String(e);return t==="."?dt.UNICODE_PERIOD:t===".."?dt.UNICODE_PERIOD+dt.UNICODE_PERIOD:t.replace(dt.FORWARD_SLASH_REGEX,dt.UNICODE_FORWARD_SLASH)}a(Doe,"escapeRawValue");function Loe(e){if(sn(e))return e;let t=String(e);return t===dt.UNICODE_PERIOD?".":t===dt.UNICODE_PERIOD+dt.UNICODE_PERIOD?"..":String(e).replace(dt.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Loe,"unescapeValue");function Moe(e,t){if(sn(e))return Mr.info("Properties object is null"),"";let r="";return e.each(function(n,s){try{if(t&&t[n]){let i=t[n];for(let o of i)r+=";"+o+gh.EOL}!ps(n)&&n[0]===";"?r+=" "+n+s+gh.EOL:ps(n)||(r+=n+"="+s+gh.EOL)}catch{Mr.error(`Found bad property during upgrade with key ${n} and value: ${s}`)}}),r}a(Moe,"stringifyProps");function jG(){let e;try{e=gh.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(jG,"getHomeDir");function Poe(){let e=xi.join(jG(),dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return KG.existsSync(e)||(e=xi.join(__dirname,"../","hdb_boot_properties.file")),e}a(Poe,"getPropsFilePath");function Uoe(e,t){let r,n;return n=new Promise(function(s){r=setTimeout(function(){s(t)},e)}),{promise:n,cancel:function(){clearTimeout(r)}}}a(Uoe,"timeoutPromise");async function voe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let n=aoe.createServer().once("error",s=>{s.code==="EADDRINUSE"?t(!0):r(s)}).once("listening",()=>n.once("close",()=>t(!1)).close()).listen(e)})}a(voe,"isPortTaken");function Boe(e){try{return dt.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Boe,"isClusterOperation");function xoe(e,t){let r=(Ae(),ie(ke)).getDatabases();if(!r[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(xoe,"checkGlobalSchemaTable");function Hoe(e,t){if(sn(t)){Mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sn(e)||ps(e)){Mr.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){Mr.error(`unable to find cluster_user due to: ${n.message}`);return}if(r===void 0){Mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Hoe,"getClusterUser");function Goe(){VG.parsePromise=function(e,t,r){return new Promise(function(n,s){VG.parse(e,{header:!0,transformHeader:XG,chunk:t.bind(null,s),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:s,complete:n})})}}a(Goe,"promisifyPapaParse");function XG(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(XG,"removeBOM");function qoe(e,t,r){return new Promise(n=>{t.once(e,s=>{let i=r;Mr.info(`Got cluster status event response: ${loe(s)}`);try{i.cancel()}catch{Mr.error("Error trying to cancel timeout.")}n(s)})})}a(qoe,"createEventPromise");async function Foe(e){let t=!0,r=0;do await WG(hoe*r++),(await uoe.findPs(e)).length>0&&(t=!1);while(t&&r<moe);if(t)throw new Error(`process ${e} was not started`)}a(Foe,"checkProcessRunning");function koe(e,t){let r=ZG(e);if(r)return r;let n=eq(e,t);if(n)return n}a(koe,"checkSchemaTableExist");function ZG(e){let{getDatabases:t}=(Ae(),ie(ke));if(!t()[e])return Ah.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(ZG,"checkSchemaExists");function eq(e,t){let{getDatabases:r}=(Ae(),ie(ke));if(!r()[e][t])return Ah.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(eq,"checkTableExists");function Voe(){let e=Rh().utc().add(1,dt.MOMENT_DAYS_TAG).startOf(dt.MOMENT_DAYS_TAG).unix(),t=Rh().utc().unix();return e-t}a(Voe,"getStartOfTomorrowInSeconds");function $oe(){return Rh().utc().format("DD-MM-YYYY")}a($oe,"getLimitKey");function Yoe(e){try{let t=new coe(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){Mr.error("Got an error back ticking items."),Mr.error(t)}}a(Yoe,"backtickASTSchemaItems");function Koe(e){return[e]}a(Koe,"createForkArgs");function Woe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Woe,"autoCastBoolean");function Qoe(e,t){let{getDatabases:r}=(Ae(),ie(ke)),n=r()[e]?.[t];return n?.primaryKey||n?.hash_attribute}a(Qoe,"getTableHashAttribute");function zoe(e){let{getDatabases:t}=(Ae(),ie(ke));return t()[e]!==void 0}a(zoe,"doesSchemaExist");function Joe(e,t){let{getDatabases:r}=(Ae(),ie(ke));return r()[e]?.[t]!==void 0}a(Joe,"doesTableExist");function joe(e){try{return JSON.stringify(e)}catch{return e}}a(joe,"stringifyObj");function Xoe(e){let t=Rh.duration(e),r=t.seconds()>0?t.seconds()+"s":"",n=t.minutes()>0?t.minutes()+"m ":"",s=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+s+n+r}a(Xoe,"ms_to_time");function Zoe(e,t){let r=xi.basename(e,xi.extname(e));return xi.join(xi.dirname(e),r+t)}a(Zoe,"changeExtension");function ZA(){if(process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=_oe(process.argv);if(e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[dt.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(ZA,"getEnvCliRootPath");var jA;function eae(){if(jA)return jA;let e=ZA();if(ZA()&&KG.pathExistsSync(xi.join(e,dt.HDB_CONFIG_FILE)))return jA=!0,!0}a(eae,"noBootFile");function tae(e,t){let r;return e.protocol==="http:"?r=foe:r=doe,new Promise((n,s)=>{let i=r.request(e,o=>{o.setEncoding("utf8");let c={body:"",headers:o.headers};o.on("data",u=>{c.body+=u}),o.on("end",()=>{n(c)})});i.on("error",o=>{s(o)}),i.write(JSON.stringify(t)),i.end()})}a(tae,"httpRequest");function rae(e){if(!e.schema&&!e.database){e.schema=dt.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(rae,"transformReq");function nae(e){let t=0;if(typeof e=="number"&&(t=e),typeof e=="string")switch(t=parseFloat(e),e.slice(-1)){case"M":t*=86400*30;break;case"D":case"d":t*=86400;break;case"H":case"h":t*=3600;break;case"m":t*=60;break}return t*1e3}a(nae,"convertToMS")});var ee=g((PTe,oq)=>{"use strict";var eO=require("fs-extra"),Go=require("path"),rq=require("os"),sae=require("properties-reader"),Xl=$(),jl=z(),de=P(),Oh=Er(),iae="Error initializing environment manager",bh="BOOT_PROPS_FILE_PATH",nq=!1,oae={[de.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zs={};oq.exports={BOOT_PROPS_FILE_PATH:bh,getHdbBasePath:aae,setHdbBasePath:cae,get:sq,initSync:lae,setProperty:Pe,initTestEnvironment:dae,setCloneVar:_ae};function aae(){return zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(aae,"getHdbBasePath");function cae(e){zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cae,"setHdbBasePath");function sq(e){let t=Oh.getConfigValue(e);return t===void 0?zs[e]:t}a(sq,"get");function Pe(e,t){oae[e]&&(zs[e]=t),Oh.updateConfigObject(e,t)}a(Pe,"setProperty");function uae(){let e;try{e=jl.getPropsFilePath(),eO.accessSync(e,eO.constants.F_OK|eO.constants.R_OK),nq=!0;let t=sae(e);return zs[de.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(de.HDB_SETTINGS_NAMES.INSTALL_USER),zs[de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zs[bh]=e,!0}catch{return Xl.trace(`Environment manager found no properties file at ${e}`),!1}}a(uae,"doesPropFileExist");function lae(e=!1){try{(nq||uae()||jl.noBootFile())&&!iq&&(Oh.initConfig(e),zs[de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Oh.getConfigValue(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Xl.error(iae),Xl.error(t),console.error(t),process.exit(1)}}a(lae,"initSync");var iq=!1;function _ae(e){iq=e}a(_ae,"setCloneVar");function dae(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:n,https_enabled:s,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Go.join(__dirname,"../../","unitTests");zs[bh]=Go.join(u,"hdb_boot_properties.file"),Pe(de.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Go.join(u,"settings.test")),Pe(de.HDB_SETTINGS_NAMES.INSTALL_USER,rq.userInfo()?rq.userInfo().username:void 0),Pe(de.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Pe(de.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Go.join(u,"envDir","log")),Pe(de.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Pe(de.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Go.join(u,"envDir")),Pe(de.CONFIG_PARAMS.STORAGE_PATH,Go.join(u,"envDir")),s&&(Pe(de.CONFIG_PARAMS.HTTP_SECUREPORT,sq(de.CONFIG_PARAMS.HTTP_PORT)),Pe(de.CONFIG_PARAMS.HTTP_PORT,null)),Pe(de.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,!!s),Pe(de.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Pe(de.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,jl.isEmpty(i)?!1:i),Pe(de.CONFIG_PARAMS.HTTP_CORS,jl.isEmpty(i)?!1:i),Pe(de.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Pe(de.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Pe(de.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Go.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Pe(de.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,jl.isEmpty(c)?!1:c),o&&(Pe("CORS_ACCESSLIST",o),Pe(de.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),n&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,n),Pe(de.CONFIG_PARAMS.HTTP_TIMEOUT,n)),t&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Pe(de.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(Pe(de.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Pe(de.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bh}. Please check your boot props and settings files`;Xl.fatal(r),Xl.error(t)}}a(dae,"initTestEnvironment")});var _q=g((vTe,lq)=>{"use strict";var uq=require("joi"),{string:Zl,boolean:aq,array:fae}=uq.types(),cq=P(),Eae=Xe();lq.exports=hae;function hae(e){let t=uq.object({operation:Zl.valid(cq.OPERATIONS_ENUM.ADD_NODE,cq.OPERATIONS_ENUM.UPDATE_NODE).required(),node_name:Zl.required(),subscriptions:fae.items({schema:Zl.required(),table:Zl.optional(),hash_attribute:Zl.optional(),subscribe:aq.required(),publish:aq.required()}).min(1).required()});return Eae.validateBySchema(e,t)}a(hae,"updateRemoteSourceValidator")});var e_=g((xTe,dq)=>{"use strict";var tO=class{static{a(this,"UpdateRemoteResponseObject")}constructor(t,r,n=void 0){this.status=t,this.message=r,this.system_info=n}};dq.exports=tO});var mq=g((GTe,hq)=>{"use strict";var mae=_q(),Js=$(),rO=Ve(),pae=P(),nO=fn(),qo=ut(),fq=bu(),Sae=md(),{Node:Tae,NodeSubscription:Eq}=Ti(),sO=e_(),iO=z(),gae=ee(),{cloneDeep:Rae}=require("lodash"),{broadcast:Aae}=Qe();hq.exports=Oae;async function Oae(e){try{let t=mae(e);if(t)return Js.error(`Validation error in updateRemoteSource: ${t.message}`),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let{subscriptions:r,node_name:n,system_info:s}=e,i=[],o=Rae(await nO.getNodeRecord(n)),c=!iO.isEmptyOrZeroLength(o);o=c?o[0]:o,c&&Js.trace(`Existing record found for ${n}, updating records subscriptions`);for(let _=0,l=r.length;_<l;_++){let d=r[_],E=d.schema,f=d.table;if(!iO.doesSchemaExist(E)){Js.trace(`updateRemoteSource creating schema: ${E}`);try{await fq.createSchema({operation:"create_schema",schema:E})}catch(h){Js.error(h)}}if(f&&!iO.doesTableExist(E,f)){let h=new Sae(E,f,d.hash_attribute);d.attributes&&(h.attributes=d.attributes),Js.trace(`updateRemoteSource creating table: ${f} in schema: ${E} with attributes: ${JSON.stringify(d.attributes)}`);try{await fq.createTable(h)}catch(p){Js.error(p)}}if(Js.trace(`Creating local stream for ${E}.${f}`),await qo.createLocalTableStream(E,f),c?(await qo.updateConsumerIterator(E,f,n,"stop"),await qo.updateRemoteConsumer(d,n),d.subscribe===!0&&await qo.updateConsumerIterator(E,f,n,"start")):(await qo.updateRemoteConsumer(d,n),d.subscribe===!0?await qo.updateConsumerIterator(E,f,n,"start"):await qo.updateConsumerIterator(E,f,n,"stop")),c){let h=!1;for(let p=0,S=o.subscriptions.length;p<S;p++){let T=o.subscriptions[p];if(T.schema===E&&T.table===f){T.publish=d.publish,T.subscribe=d.subscribe,h=!0;break}}h||o.subscriptions.push(new Eq(E,f,d.publish,d.subscribe))}else i.push(new Eq(E,f,d.publish,d.subscribe))}c||(o=new Tae(n,i,void 0),Js.trace(`No record found for ${n}, creating a new one`));let u=Object.create({});return Object.assign(u,o),u.system_info=s,await nO.upsertNodeRecord(u),Aae({type:"nats_update"}),new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${gae.get(pae.CONFIG_PARAMS.CLUSTERING_NODENAME)} successfully updated remote source`,await nO.getSystemInfo())}catch(t){Js.error(t);let r=t.message?t.message:t;return new sO(rO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Oae,"updateRemoteSource")});var gq=g((FTe,Tq)=>{"use strict";var Sq=require("joi"),{string:pq}=Sq.types(),bae=P(),yae=Xe();Tq.exports=Nae;function Nae(e){let t=Sq.object({operation:pq.valid(bae.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:pq.required()});return yae.validateBySchema(e,t)}a(Nae,"removeRemoteSourceValidator")});var Oq=g((VTe,Aq)=>{"use strict";var Iae=gq(),yh=$(),Nh=Ve(),oO=P(),wae=fn(),Cae=z(),Rq=ut(),Dae=ee(),Ih=e_(),{NodeSubscription:Lae}=Ti(),Mae=aa(),Pae=ci(),{broadcast:Uae}=Qe(),vae=Dae.get(oO.CONFIG_PARAMS.CLUSTERING_NODENAME);Aq.exports=Bae;async function Bae(e){try{let t=Iae(e);if(t)return yh.error(`Validation error in removeRemoteSource: ${t.message}`),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,t.message);let r=e.node_name,n=await wae.getNodeRecord(r);if(Cae.isEmptyOrZeroLength(n)){let i=`No record found for node '${r}'`;return yh.error(i),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,i)}n=n[0];for(let i=0,o=n.subscriptions.length;i<o;i++){let c=n.subscriptions[i];yh.trace(`remove remote source removing subscription: ${c.schema}.${c.table} for node: ${r}`);let u=new Lae(c.schema,c.table,!1,!1);await Rq.updateConsumerIterator(c.schema,c.table,r,"stop"),await Rq.updateRemoteConsumer(u,r)}let s=new Mae(oO.SYSTEM_SCHEMA_NAME,oO.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Pae.deleteRecord(s),Uae({type:"nats_update"}),new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,`Node ${vae} successfully removed node '${r}'.`)}catch(t){yh.error(t);let r=t.message?t.message:t;return new Ih(Nh.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Bae,"removeRemoteSource")});var Iq=g((YTe,Nq)=>{"use strict";var wh=$(),t_=P(),bq=Ve(),aO=ee(),xae=z(),yq=e_(),Hae=fn(),Gae=Wd(),qae=qr();Nq.exports=Fae;async function Fae(e){try{wh.trace("getRemoteSourceConfig called");let t=process.uptime()*1e3,r=xae.ms_to_time(t),n=new kae(aO.get(t_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_PORT)??aO.get(t_.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_SECUREPORT),r,await Hae.getSystemInfo());try{let s={name:e.node_name,system_info:e.system_info},i=new Gae(t_.SYSTEM_SCHEMA_NAME,t_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[s]);await qae.update(i)}catch(s){wh.error("Get remote config encountered an error updating system info for node:",e.node_name,s)}return wh.trace("getRemoteSourceConfig response:",n),new yq(bq.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,n)}catch(t){wh.error(t);let r=t.message?t.message:t;return new yq(bq.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,r)}}a(Fae,"getRemoteSourceConfig");function kae(e,t,r,n){this.uptime=r,this.ports={clustering:e,operations_api:t},this.system_info=n}a(kae,"ConfigResponseObject")});var Lq=g((WTe,Dq)=>{"use strict";var wq=ee();wq.initSync();var Cq=ut(),r_=$(),_c=P(),cO=Ve(),Vae=mq(),$ae=Oq(),Yae=Iq(),Kae=e_(),{encode:Wae,decode:Qae}=require("msgpackr"),zae=ys(),Jae=bs(),jae=require("util"),Xae=P(),{isMainThread:Zae,parentPort:ece}=require("worker_threads");Qe();var tce=jae.promisify(zae.setSchemaDataToGlobal),uO=wq.get(_c.CONFIG_PARAMS.CLUSTERING_NODENAME);Dq.exports=rce;async function rce(){try{r_.notify("Starting reply service."),await tce();let e=await Cq.getConnection(),t=`${uO}.__request__`,r=e.subscribe(t,{queue:uO});await nce(r)}catch(e){r_.error(e)}}a(rce,"initialize");async function nce(e){for await(let t of e){let r=Qae(t.data),n;switch(r.operation){case _c.OPERATIONS_ENUM.ADD_NODE:case _c.OPERATIONS_ENUM.UPDATE_NODE:n=await Vae(r);break;case _c.OPERATIONS_ENUM.REMOVE_NODE:n=await $ae(r);break;case _c.OPERATIONS_ENUM.CLUSTER_STATUS:n=await Yae(r);break;case _c.OPERATIONS_ENUM.DESCRIBE_ALL:n=await sce();break;default:let s=`node '${uO}' reply service received unrecognized request operation`;r_.error(s),n=new Kae(cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,s)}r_.trace(n),t.respond(Wae(n))}}a(nce,"handleRequest");async function sce(){try{return{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.SUCCESS,message:await Jae.describeAll({bypass_auth:!0})}}catch(e){return r_.error(e),{status:cO.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR,message:e.message}}}a(sce,"getRemoteDescribeAll");Zae||ece.on("message",async e=>{let{type:t}=e;t===Xae.ITC_EVENT_TYPES.SHUTDOWN&&Cq.closeConnection()})});var ice=Lq();(async()=>{try{await ice()}catch(e){console.error("Error launching Nats reply service."),console.error(e)}})();
|