harperdb 4.2.5 → 4.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/harperdb.js CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var Sk=Object.create;var Qc=Object.defineProperty;var Tk=Object.getOwnPropertyDescriptor;var gk=Object.getOwnPropertyNames;var Rk=Object.getPrototypeOf,Ak=Object.prototype.hasOwnProperty;var a=(e,t)=>Qc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Qc(e,r,{get:t[r],enumerable:!0})},yN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of gk(t))!Ak.call(e,n)&&n!==r&&Qc(e,n,{get:()=>t[n],enumerable:!(s=Tk(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?Sk(Rk(e)):{},yN(t||!e||!e.__esModule?Qc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>yN(Qc({},"__esModule",{value:!0}),e);var CN=T((wde,wN)=>{var Ok=require("fast-glob"),{statSync:Mm,existsSync:Um,readFileSync:Nk,writeFileSync:bk}=require("fs"),{spawnSync:yk,spawn:Ik,execFileSync:Ide}=require("child_process"),{isMainThread:wk}=require("worker_threads"),{join:bi,relative:IN}=require("path"),{PACKAGE_ROOT:Is}=R(),{tmpdir:Ck,platform:Lk}=require("os");require("source-map-support").install();var Dk=["resources","server","dataLayer","components"],jc="ts-build",vm,Pk=__filename.endsWith("tsBuild.js");if(Pk){if(wk){let r;try{Mm(bi(Is,jc)),r=!0}catch{}if(r)for(let s of Ok.sync(Dk.map(n=>n+"/**/*.ts"),{cwd:Is})){let n=0,i=0;try{n=Mm(bi(Is,s)).mtimeMs-5e3,i=Mm(bi(Is,jc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),vm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),vm=!0;if(vm){let s=bi(Is,"node_modules/.bin/tsc");Lk()==="win32"&&(s+=".cmd");let n=yk(s,{cwd:Is});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=bi(Ck(),"harperdb-tsc.pid"),o;if(Um(i))try{process.kill(+Nk(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Ik(s,["--watch"],{cwd:Is,detached:!0,stdio:"ignore"});bk(i,c.pid.toString()),c.unref()}}}}let e=wN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Is)&&!s[0].includes("node_modules")){let i=IN(Is,s[0]),o;i.startsWith(jc)?o=bi(Is,IN(jc,i)):o=bi(Is,jc,i);let c=bi(o,r),u=c+".js";if(Um(u))return u;if(c.includes(".")&&Um(c))return c}return t(r,s,n)}}});var R=T((Dde,$N)=>{"use strict";var ts=require("path"),Mk=require("fs"),{relative:Cde,join:Lde}=ts,{existsSync:Uk}=Mk;function vk(){let e=__dirname;for(;!Uk(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(vk,"getHDBPackageRoot");var yi=vk(),LN="js",Y_=LN,Bk="harperdb-config.yaml",Hk="defaultConfig.yaml",qk="hdb",DN=`harperdb.${Y_}`,PN=`customFunctionsServer.${Y_}`,Gk=`restartHdb.${Y_}`,Hm="HarperDB",V_="Custom Functions",K_="Clustering Hub",W_="Clustering Leaf",Fk="Clustering Ingest Service",xk="Clustering Reply Service",kk="foreground.pid",$k="hdb.pid",Vk="data",Yk={HDB:Hm,CLUSTERING_HUB:K_,CLUSTERING_LEAF:W_,CLUSTERING_INGEST_SERVICE:Fk,CLUSTERING_REPLY_SERVICE:xk,CUSTOM_FUNCTIONS:V_,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"},Kk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Wk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Qk={harperdb:Hm,"clustering hub":K_,"clustering leaf":W_,"custom functions":V_,custom_functions:V_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},jk={CLUSTERING_HUB_PROC_DESCRIPTOR:K_,CLUSTERING_LEAF_PROC_DESCRIPTOR:W_},Bm={HDB:ts.join(yi,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(yi,"server/customFunctions"),CLUSTERING_HUB:ts.join(yi,"server/nats"),CLUSTERING_LEAF:ts.join(yi,"server/nats")},zk={HDB:ts.join(Bm.HDB,DN),CUSTOM_FUNCTIONS:ts.join(Bm.CUSTOM_FUNCTIONS,PN)},Jk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(yi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(yi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(yi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Xk={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},MN="support@harperdb.io",Zk="customer-success@harperdb.io",UN=1,e$=4141,vN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",t$="https://www.harperdb.io/product",r$=`For support, please submit a request at ${vN} or contact ${MN}`,BN=`For license support, please contact ${Zk}`,s$="None of the specified records were found.",n$="hash attribute not found",i$=`Your current license only supports ${UN} role. ${BN}`,o$="Your current license only supports 3 connections to a node.",a$="127.0.0.1",c$=1,u$=/^\.$/,l$=/^\.\.$/,_$="U+002E",d$=/\//g,f$="U+002F",E$=/U\+002F/g,h$=/^U\+002E$/,m$=/^U\+002EU\+002E$/,p$="d",S$=999999,T$="*",g$="--max-old-space-size=",R$="system",A$="__hdb_hash",O$=".harperdb",N$=".hdb",b$="keys",y$="hdb_boot_properties.file",I$=".updateConfig.json",w$="SIGTSTP",C$=24,L$=6e4,D$=448,P$="blob",M$="trash",U$="database",v$="schema",B$="transactions",H$=".count",q$="id",G$="PROCESS_NAME",HN={SETTINGS_PATH_KEY:"settings_path"},qN=require("lodash"),F$={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},x$={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},k$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},$$={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"},V$={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"},Dr="hdb_internal:",Y$={CREATE_SCHEMA:Dr+"create_schema",CREATE_TABLE:Dr+"create_table",CREATE_ATTRIBUTE:Dr+"create_attribute",ADD_USER:Dr+"add_user",ALTER_USER:Dr+"alter_user",DROP_USER:Dr+"drop_user",HDB_NODES:Dr+"hdb_nodes",HDB_USERS:Dr+"hdb_users",HDB_WORKERS:Dr+"hdb_workers",CATCHUP:Dr+"catchup",SCHEMA_CATCHUP:Dr+"schema_catchup",WORKER_ROOM:Dr+"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"},W$="060493.ks",Q$=".license",j$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={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",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"},z$={CSV:".csv",JSON:".json"},J$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},X$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zc={};zc[J.INSERT]=J.INSERT;zc[J.UPDATE]=J.UPDATE;zc[J.UPSERT]=J.UPSERT;zc[J.DELETE]=J.DELETE;var we=Object.create(null);we[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;we[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;we[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;we[J.READ_LOG]=J.READ_LOG;we[J.ADD_NODE]=J.ADD_NODE;we[J.LIST_USERS]=J.LIST_USERS;we[J.LIST_ROLES]=J.LIST_ROLES;we[J.USER_INFO]=J.USER_INFO;we[J.SQL]=J.SQL;we[J.GET_JOB]=J.GET_JOB;we[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;we[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;we[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;we[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;we[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;we[J.REMOVE_NODE]=J.REMOVE_NODE;we[J.RESTART]=J.RESTART;we[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;we[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;we[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;we[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;we[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;we[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;we[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;we[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Z$={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},eV={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},GN={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"},tV=qN.invert(GN),rV={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"},y={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_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",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",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_SECUREPORT:"operationsApi_network_securePort",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",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_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},FN={settings_path:HN.SETTINGS_PATH_KEY,hdb_root_key:y.ROOTPATH,hdb_root:y.ROOTPATH,rootpath:y.ROOTPATH,server_port_key:y.OPERATIONSAPI_NETWORK_PORT,server_port:y.OPERATIONSAPI_NETWORK_PORT,cert_key:y.TLS_CERTIFICATE,certificate:y.TLS_CERTIFICATE,private_key_key:y.TLS_PRIVATEKEY,private_key:y.TLS_PRIVATEKEY,http_secure_enabled_key:y.OPERATIONSAPI_NETWORK_HTTPS,https_on:y.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:y.OPERATIONSAPI_NETWORK_CORS,cors_on:y.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:y.LOGGING_LEVEL,log_level:y.LOGGING_LEVEL,log_path_key:y.LOGGING_ROOT,log_path:y.LOGGING_ROOT,clustering_node_name_key:y.CLUSTERING_NODENAME,node_name:y.CLUSTERING_NODENAME,clustering_enabled_key:y.CLUSTERING_ENABLED,clustering:y.CLUSTERING_ENABLED,max_http_threads:y.THREADS,max_hdb_processes:y.THREADS,server_timeout_key:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:y.LOGGING_AUDITLOG,disable_transaction_log:y.LOGGING_AUDITLOG,operation_token_timeout_key:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:y.HTTP_PORT,custom_functions_port:y.HTTP_PORT,custom_functions_directory_key:y.COMPONENTSROOT,custom_functions_directory:y.COMPONENTSROOT,max_custom_function_processes:y.THREADS,log_to_file:y.LOGGING_FILE,log_to_stdstreams:y.LOGGING_STDSTREAMS,local_studio_on:y.LOCALSTUDIO_ENABLED,clustering_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:y.CLUSTERING_USER,clustering_enabled:y.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:y.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:y.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:y.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:y.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:y.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:y.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:y.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:y.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:y.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:y.CLUSTERING_NODENAME,clustering_tls_certificate:y.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:y.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:y.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:y.CLUSTERING_TLS_INSECURE,clustering_tls_verify:y.CLUSTERING_TLS_VERIFY,clustering_loglevel:y.CLUSTERING_LOGLEVEL,clustering_republishmessages:y.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:y.CLUSTERING_DATABASELEVEL,customfunctions_network_port:y.HTTP_PORT,customfunctions_tls_certificate:y.TLS_CERTIFICATE,customfunctions_network_cors:y.HTTP_CORS,customfunctions_network_corsaccesslist:y.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:y.HTTP_HEADERSTIMEOUT,customfunctions_network_https:y.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:y.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:y.HTTP_TIMEOUT,http_threads:y.THREADS,threads:y.THREADS,http_session_affinity:y.HTTP_SESSIONAFFINITY,http_compressionthreshold:y.HTTP_COMPRESSIONTHRESHOLD,http_cors:y.HTTP_CORS,http_corsaccesslist:y.HTTP_CORSACCESSLIST,http_headerstimeout:y.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,http_timeout:y.HTTP_TIMEOUT,http_port:y.HTTP_PORT,http_secureport:y.HTTP_SECUREPORT,customfunctions_processes:y.THREADS,customfunctions_root:y.COMPONENTSROOT,localstudio_enabled:y.LOCALSTUDIO_ENABLED,logging_file:y.LOGGING_FILE,logging_level:y.LOGGING_LEVEL,logging_root:y.LOGGING_ROOT,logging_rotation_enabled:y.LOGGING_ROTATION_ENABLED,logging_rotation_compress:y.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:y.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:y.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:y.LOGGING_ROTATION_PATH,logging_stdstreams:y.LOGGING_STDSTREAMS,logging_auditlog:y.LOGGING_AUDITLOG,logging_auditretention:y.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:y.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:y.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:y.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:y.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:y.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:y.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:y.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:y.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:y.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:y.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:y.ROOTPATH,databases:y.DATABASES,storage_path:y.STORAGE_PATH,ignorescripts:y.IGNORE_SCRIPTS,mqtt_network_port:y.MQTT_NETWORK_PORT,mqtt_websocket:y.MQTT_WEBSOCKET,mqtt_network_secureport:y.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:y.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:y.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:y.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:y.AUTHENTICATION_CACHETTL,authentication_enablesessions:y.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:y.COMPONENTSROOT,tls_certificate:y.TLS_CERTIFICATE,tls_privatekey:y.TLS_PRIVATEKEY,tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY};for(let e in y){let t=y[e];FN[t.toLowerCase()]=t}var sV={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},nV={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.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"},iV={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"},oV={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},aV={VERSION_DEFAULT:"2.2.0"},cV={DEVELOPMENT:8192,DEFAULT:512},uV={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"},lV={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"},_V={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},xN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},dV=Symbol("metadata"),fV="__clustering__",EV=Object.values(xN),hV=15984864e5,kN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},mV=qN.invert(kN),pV={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"},SV=111,TV=`\r
3
- `,gV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},RV=["*","%"],AV="unauthorized_access",OV="func_val",NV={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},bV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},yV={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"},IV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},wV={HTTP:"http"},CV={STOPPED:"stopped",ONLINE:"online"},LV="3.x.x",DV={SUCCESS:"success",FAILURE:"failure"},PV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};$N.exports={LOCAL_HARPERDB_OPERATIONS:we,HDB_SUPPORT_ADDRESS:MN,HDB_SUPPORT_URL:vN,HDB_PRICING_URL:t$,SUPPORT_HELP_MSG:r$,LICENSE_HELP_MSG:BN,HDB_PROC_NAME:DN,HDB_PROC_DESCRIPTOR:Hm,CLUSTERING_LEAF_PROC_DESCRIPTOR:W_,CLUSTERING_HUB_PROC_DESCRIPTOR:K_,SYSTEM_SCHEMA_NAME:R$,HASH_FOLDER_NAME:A$,HDB_HOME_DIR_NAME:O$,UPDATE_FILE_NAME:I$,LICENSE_KEY_DIR_NAME:b$,BOOT_PROPS_FILE_NAME:y$,JOB_TYPE_ENUM:nV,JOB_STATUS_ENUM:j$,SYSTEM_TABLE_NAMES:$$,SYSTEM_TABLE_HASH_ATTRIBUTES:V$,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:z$,S3_BUCKET_AUTH_KEYS:J$,VALID_SQL_OPS_ENUM:X$,GEO_CONVERSION_ENUM:eV,HDB_SETTINGS_NAMES:GN,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:tV,SERVICE_ACTIONS_ENUM:Z$,CLUSTER_MESSAGE_TYPE_ENUM:iV,CLUSTER_CONNECTION_DIRECTION_ENUM:oV,CLUSTER_EVENTS_DEFS_ENUM:uV,PERIOD_REGEX:u$,DOUBLE_PERIOD_REGEX:l$,UNICODE_PERIOD:_$,FORWARD_SLASH_REGEX:d$,UNICODE_FORWARD_SLASH:f$,ESCAPED_FORWARD_SLASH_REGEX:E$,ESCAPED_PERIOD_REGEX:h$,ESCAPED_DOUBLE_PERIOD_REGEX:m$,REG_KEY_FILE_NAME:W$,RESTART_TIMEOUT_MS:L$,HDB_FILE_PERMISSIONS:D$,DATABASES_DIR_NAME:U$,LEGACY_DATABASES_DIR_NAME:v$,TRANSACTIONS_DIR_NAME:B$,LIMIT_COUNT_NAME:H$,ID_ATTRIBUTE_STRING:q$,INSERT_MODULE_ENUM:x$,UPGRADE_JSON_FIELD_NAMES_ENUM:k$,RESTART_CODE:w$,RESTART_CODE_NUM:C$,CLUSTER_OPERATIONS:zc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:K$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Dr,INTERNAL_SC_CHANNELS:Y$,CLUSTERING_MESSAGE_TYPES:pV,HDB_FILE_SUFFIX:N$,BLOB_FOLDER_NAME:P$,HDB_TRASH_DIR:M$,ORIGINATOR_SET_VALUE:SV,LICENSE_VALUES:aV,RAM_ALLOCATION_ENUM:cV,TIME_STAMP_NAMES_ENUM:xN,TIME_STAMP_NAMES:EV,PERMS_UPDATE_RELEASE_TIMESTAMP:hV,SEARCH_NOT_FOUND_MESSAGE:s$,SEARCH_ATTRIBUTE_NOT_FOUND:n$,LICENSE_ROLE_DENIED_RESPONSE:i$,LICENSE_MAX_CONNS_REACHED:o$,BASIC_LICENSE_MAX_NON_CU_ROLES:UN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:e$,VALUE_SEARCH_COMPARATORS:kN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:mV,LICENSE_FILE_NAME:Q$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:lV,NEW_LINE:TV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:c$,MOMENT_DAYS_TAG:p$,API_TURNOVER_SEC:S$,LOOPBACK:a$,CODE_EXTENSION:Y_,WILDCARD_SEARCH_VALUE:T$,NODE_ERROR_CODES:_V,JAVASCRIPT_EXTENSION:LN,PERMS_CRUD_ENUM:gV,UNAUTHORIZED_PERMISSION_NAME:AV,SEARCH_WILDCARDS:RV,FUNC_VAL:OV,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:NV,JWT_ENUM:bV,CLUSTERING_FLAG:fV,ITC_EVENT_TYPES:yV,CUSTOM_FUNCTION_PROC_NAME:PN,CUSTOM_FUNCTION_PROC_DESCRIPTOR:V_,SERVICES:IV,THREAD_TYPES:wV,MEM_SETTING_KEY:g$,HDB_RESTART_SCRIPT:Gk,PROCESS_DESCRIPTORS:Yk,SERVICE_SERVERS:zk,SERVICE_SERVERS_CWD:Bm,PROCESS_DESCRIPTORS_VALIDATE:Qk,LAUNCH_SERVICE_SCRIPTS:Jk,LOG_LEVELS:Wk,PROCESS_NAME_ENV_PROP:G$,LOG_NAMES:Kk,PM2_PROCESS_STATUSES:CV,CONFIG_PARAM_MAP:FN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:Bk,HDB_DEFAULT_CONFIG_FILE:Hk,ROLE_TYPES_ENUM:Xk,BOOT_PROP_PARAMS:HN,INSTALL_PROMPTS:F$,HDB_ROOT_DIR_NAME:qk,CLUSTERING_PROCESSES:jk,FOREGROUND_PID_FILE:kk,PACKAGE_ROOT:yi,PRE_4_0_0_VERSION:LV,DATABASES_PARAM_CONFIG:sV,METADATA_PROPERTY:dV,AUTH_AUDIT_STATUS:DV,AUTH_AUDIT_TYPES:PV,HDB_PID_FILE:$k,DEFAULT_DATABASE_NAME:Vk,LEGACY_CONFIG_PARAMS:rV};CN()});var Eo=T((Mde,KN)=>{"use strict";var VN=require("minimist");KN.exports=MV;function MV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=YN(process.env),s=YN(VN(process.argv))):(r=process.env,s=VN(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(MV,"assignCMDENVVariables");function YN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(YN,"objKeysToLowerCase")});var v=T((vde,Vm)=>{"use strict";var ho=require("fs-extra"),{workerData:UV,threadId:vV}=require("worker_threads"),qn=require("path"),jN=require("yaml"),zN=require("properties-reader"),St=R(),WN=Eo(),BV=require("os"),{PACKAGE_ROOT:Gm}=R(),{_assignPackageExport:HV}=require("../index"),Xc={};for(let e in console)Xc[e]||(Xc[e]=console[e]);var nr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},JN={STDOUT:"stdOut",STDERR:"stdErr"},qV=qn.join(Gm,"logs"),GV=qn.join(Gm,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),FV=1e4,Hn,sn,sr,Q_,j_,Zc,Sa,Jc;Jc===void 0&&XN();Vm.exports={notify:tb,fatal:rb,error:eu,warn:$m,info:z_,debug:km,trace:xm,setLogLevel:WV,log_level:sr,loggerWithTag:xV,suppressLogging:kV,initLogSettings:XN,setupConsoleLogging:ZN,logCustomLevel:YV,closeLogFile:Fm,getLogFilePath:()=>Zc,OUTPUTS:JN,AuthAuditLog:zV};HV("logger",Vm.exports);function XN(e=!1){try{if(Jc===void 0||e){Fm();let t=KV(),r=WN(["ROOTPATH"]);try{Jc=zN(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ho.pathExistsSync(qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw s}({level:sr,config_log_path:j_,to_file:Hn,to_stream:sn}=QV(r.ROOTPATH?qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE):Jc.get("settings_path"))),Q_=St.LOG_NAMES.HDB,Zc=qn.join(j_,Q_)}}catch(t){if(Jc=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=WN(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){sr=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){sn=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(Hn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=jV();Hn=Hn===void 0?n:Hn,Hn=QN(Hn),sn=sn===void 0?i:sn,sn=QN(sn),sr=sr===void 0?s:sr,j_=qV,Q_=St.LOG_NAMES.INSTALL,Zc=qn.join(j_,Q_);return}throw eu("Error initializing log settings"),eu(t),t}process.env.DEV_MODE&&(sn=!0),ZN()}a(XN,"initLogSettings");var qm=!0;function ZN(){pa("error",eu),pa("warn",$m),pa("log",z_),pa("info",z_),pa("debug",km),pa("trace",xm)}a(ZN,"setupConsoleLogging");function pa(e,t){console[e]=function(...r){if(qm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Xc[e](...r)}}a(pa,"logConsole");function xV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(tb),fatal:r(rb),error:r(eu),warn:r($m),info:r(z_),debug:r(km),trace:r(xm)};function r(s){return function(...n){return s(t,...n)}}}a(xV,"loggerWithTag");function kV(e){try{qm=!1,e()}finally{qm=!0}}a(kV,"suppressLogging");var $V=UV?.name?.replace(/ /g,"-")||"main";function Gn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||$V+"/"+vV);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
4
- `}a(Gn,"createLogRecord");function tu(e){Hn&&eb(e),sn&&process.stdout.write(e)}a(tu,"logStdOut");function J_(e){Hn&&eb(e),sn&&process.stderr.write(e)}a(J_,"logStdErr");function eb(e){VV(),Sa?ho.appendFileSync(Sa,e):Xc.log(e)}a(eb,"logToFile");function Fm(){try{ho.closeSync(Sa)}catch{}Sa=null}a(Fm,"closeLogFile");function VV(){if(!Sa){try{if(!Zc)debugger;Sa=ho.openSync(Zc,"a")}catch(e){Xc.error(e)}setTimeout(()=>{Fm()},FV).unref()}}a(VV,"openLogFile");function z_(...e){nr[sr]<=nr.info&&tu(Gn("info",e))}a(z_,"info");function xm(...e){nr[sr]<=nr.trace&&tu(Gn("trace",e))}a(xm,"trace");function eu(...e){nr[sr]<=nr.error&&J_(Gn("error",e))}a(eu,"error");function km(...e){nr[sr]<=nr.debug&&tu(Gn("debug",e))}a(km,"debug");function tb(...e){nr[sr]<=nr.notify&&tu(Gn("notify",e))}a(tb,"notify");function rb(...e){nr[sr]<=nr.fatal&&J_(Gn("fatal",e))}a(rb,"fatal");function $m(...e){nr[sr]<=nr.warn&&J_(Gn("warn",e))}a($m,"warn");function YV(e,t,...r){t===JN.STDERR?J_(Gn(e,r)):tu(Gn(e,r))}a(YV,"logCustomLevel");function KV(){let e;try{e=BV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return ho.existsSync(t)||(t=qn.join(Gm,"utility/hdb_boot_properties.file")),t}a(KV,"getPropsFilePath");function WV(e){sr=e}a(WV,"setLogLevel");function QN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(QN,"autoCastBoolean");function QV(e){try{if(e.includes("config/settings.js")){let o=zN(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qn.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=jN.parseDocument(ho.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(QV,"getLogConfig");function jV(){try{let e=jN.parseDocument(ho.readFileSync(GV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(jV,"getDefaultConfig");function zV(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(zV,"AuthAuditLog")});var mo=T((Hde,JV)=>{JV.exports={name:"harperdb",version:"4.2.5",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@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:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",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.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var po=T((qde,sb)=>{"use strict";sb.exports={version:XV,printVersion:ZV};var X_=mo();function XV(){if(X_)return X_.version}a(XV,"version");function ZV(){X_&&console.log(`HarperDB Version ${X_.version}`)}a(ZV,"printVersion")});var ob=T((Fde,ib)=>{"use strict";var nb=require("semver/functions/major"),eY=mo(),Ym=process.versions&&process.versions.node?process.versions.node:void 0;ib.exports=tY;function tY(){let e=eY.engines["minimum-node"];if(Ym&&nb(Ym)<nb(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Ym}. Please install a version of Node.js that is withing the defined range.`}}a(tY,"checkNodeVersion")});var So={};Fe(So,{server:()=>Tt});var ab,Tt,Pr=Re(()=>{ab=require("../index"),Tt={};(0,ab._assignPackageExport)("server",Tt)});var Km=T((kde,cb)=>{"use strict";var rY=require("util"),sY=require("path"),nY=require("child_process"),iY=rY.promisify(nY.execFile),oY=1e3*1e3*10;cb.exports={findPs:aY};async function aY(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await iY("ps",["wwxo",`pid,${r}`],{maxBuffer:oY});for(let n of s.trim().split(`
5
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:sY.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(aY,"findPs")});var Ke=T((Vde,lb)=>{"use strict";var cY="__dbis__",uY="__txns__",lY="__environment_name__",_Y="__dbi_defintion__",dY={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"},fY=["__createdtime__","__updatedtime__"],EY="\uFFFF",ub={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},hY=Object.values(ub);lb.exports={AUDIT_STORE_NAME:uY,INTERNAL_DBIS_NAME:cY,DBI_DEFINITION_NAME:_Y,SEARCH_TYPES:dY,TIMESTAMP_NAMES:fY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:lY,TRANSACTIONS_DBI_NAMES_ENUM:ub,TRANSACTIONS_DBIS:hY,OVERFLOW_MARKER:EY}});var Mr=T((Yde,Tb)=>{"use strict";var _b=R(),db=Ke(),fb={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},Eb=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),hb={500:Eb("There was an error processing your request."),400:"Invalid request"},mY=hb[fb.INTERNAL_SERVER_ERROR],pY={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.`},SY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},TY={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"},gY={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 ${db.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${db.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"},RY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${_b.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 ${_b.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"},mb={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"},AY={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."},OY={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`},NY={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"},bY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},yY={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`},pb={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.`},Sb={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}`},IY={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."},wY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},CY={...mb,...TY,...pY,...AY,...OY,...NY,...bY,...yY,...RY,...pb,...Sb,...IY,...wY,...SY};Tb.exports={CHECK_LOGS_WRAPPER:Eb,HDB_ERROR_MSGS:CY,DEFAULT_ERROR_MSGS:hb,DEFAULT_ERROR_RESP:mY,HTTP_STATUS_CODES:fb,LMDB_ERRORS_ENUM:gY,AUTHENTICATION_ERROR_MSGS:mb,VALIDATION_ERROR_MSGS:pb,ITC_ERRORS:Sb}});var Z=T((Wde,Ab)=>{"use strict";var Ta=Mr(),LY=v(),DY=R(),Z_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,gb),this.statusCode=s||Ta.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Ta.DEFAULT_ERROR_MSGS[s]?Ta.DEFAULT_ERROR_MSGS[s]:Ta.DEFAULT_ERROR_MSGS[Ta.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&LY[n](i)}},Wm=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}},Qm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function gb(e,t,r,s=DY.LOG_LEVELS.ERROR,n=null,i=!1){if(Rb(e))return e;let o=new Z_(e,t,r,s,n);return i&&delete o.stack,o}a(gb,"handleHDBError");function Rb(e){return e.__proto__.constructor.name===Z_.name}a(Rb,"isHDBError");Ab.exports={isHDBError:Rb,handleHDBError:gb,ClientError:Wm,ServerError:Qm,hdb_errors:Ta}});var He=T((jde,Cb)=>{"use strict";var ou=R(),PY=G(),ir=j(),au=require("path"),MY=require("minimist"),Ob=require("fs-extra"),Nb=require("lodash");ir.initSync();var{CONFIG_PARAMS:Ii,DATABASES_PARAM_CONFIG:ru,SYSTEM_SCHEMA_NAME:ed}=ou,su,nu,iu;function bb(){if(su!==void 0)return su;if(ir.getHdbBasePath()!==void 0)return su=ir.get(Ii.STORAGE_PATH)||au.join(ir.getHdbBasePath(),ou.DATABASES_DIR_NAME),su}a(bb,"getBaseSchemaPath");function yb(){if(nu!==void 0)return nu;if(ir.getHdbBasePath()!==void 0)return nu=wb(ed),nu}a(yb,"getSystemSchemaPath");function Ib(){if(iu!==void 0)return iu;if(ir.getHdbBasePath()!==void 0)return iu=ir.get(ou.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||au.join(ir.getHdbBasePath(),ou.TRANSACTIONS_DIR_NAME),iu}a(Ib,"getTransactionAuditStoreBasePath");function UY(e,t){let r=ir.get(Ii.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||au.join(Ib(),e.toString())}a(UY,"getTransactionAuditStorePath");function wb(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(ou.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||au.join(bb(),e)}a(wb,"getSchemaPath");function vY(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,MY(process.argv));let s=r[Ii.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!PY.isObject(s))throw o;i=s}for(let o of i){let c=o[ed];if(!c)continue;let u=ir.get(Ii.DATABASES);u=u??{};let _=c?.tables?.[t]?.[ru.PATH];if(_)return Nb.set(u,[ed,ru.TABLES,t,ru.PATH],_),ir.setProperty(Ii.DATABASES,u),_;let l=c?.[ru.PATH];if(l)return Nb.set(u,[ed,ru.PATH],l),ir.setProperty(Ii.DATABASES,u),l}}let n=r[Ii.STORAGE_PATH.toUpperCase()];if(n){if(!Ob.pathExistsSync(n))throw new Error(n+" does not exist");let i=au.join(n,e);return Ob.mkdirsSync(i),ir.setProperty(Ii.STORAGE_PATH,n),i}return yb()}a(vY,"initSystemSchemaPaths");function BY(){su=void 0,nu=void 0,iu=void 0}a(BY,"resetPaths");Cb.exports={getBaseSchemaPath:bb,getSystemSchemaPath:yb,getTransactionAuditStorePath:UY,getTransactionAuditStoreBasePath:Ib,getSchemaPath:wb,initSystemSchemaPaths:vY,resetPaths:BY}});var or=T((Zde,Ub)=>{"use strict";var HY=Mr().LMDB_ERRORS_ENUM,Jde=require("lmdb"),qY=Ke(),Xde=require("buffer").Buffer,{OVERFLOW_MARKER:Lb,MAX_SEARCH_KEY_LENGTH:td}=qY,Db=["number","string","symbol","boolean","bigint"];function GY(e){if(e=e?.primaryStore||e,!e)throw new Error(HY.ENV_REQUIRED)}a(GY,"validateEnv");function FY(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(FY,"stringifyData");function xY(e){return e instanceof Date?e.valueOf():e}a(xY,"convertKeyValueToWrite");function kY(e){if(e==null)return;if(Db.includes(typeof e))return e.length>td?[e.slice(0,td)+Lb]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Db.includes(typeof n))n.length>td?t.push(n.slice(0,td)+Lb):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(kY,"getIndexedValues");var rd=0,Pb=0;function Mb(){Pb=Date.now()-performance.now()}a(Mb,"adjustStartTime");Mb();var $Y=6e4;setInterval(Mb,$Y).unref();function VY(){let e=performance.now()+Pb;return e>rd?(rd=e,e):(rd+=488e-6,rd)}a(VY,"getNextMonotonicTime");Ub.exports={validateEnv:GY,stringifyData:FY,convertKeyValueToWrite:xY,getNextMonotonicTime:VY,getIndexedValues:kY}});var vb,ws,jm,cu=Re(()=>{vb=require("events"),ws=class extends vb.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new jm;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(){return this.queue?.shift()}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)}},jm=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function rs(e){return e[Kt]||(e[Kt]=Object.create(null))}function od(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(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 Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a number, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a boolean, attempt to assign ${l}`);rs(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 Cs.ClientError(`${c} must be a Date, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){rs(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be an object, attempt to assign ${l}`);rs(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Kt];if(l&&c in l)return l[c];let d=this[Ae]?.[c];if(d&&typeof d=="object"){let f=Bb(d,o);if(f)return l||(l=this[Kt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Kt];return u?.[o]!==void 0?u[o]:this[Ae]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cs.ClientError("Can not add a property to a sealed table schema");rs(this)[o]=c}),i("deleteProperty",function(o){rs(this)[o]=void 0}),i("toJSON",function(){let o=this[Kt],c;for(let _ in o)c||(c=Object.assign({},this[Ae])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ae])),Object.assign(c,this)),c||this[Ae]}),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 Bb(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Ae]=n}},od(r,t)),new r(e)):new sd(e);case Array:let s=new id(e.length);s[Ae]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Bb(o,t?.elements)),s[n]=o}return s}}function ad(e){let t=e[Kt],r;for(let n in t){r||(r=Object.assign({},e[Ae]));let i=t[n];i&&typeof i=="object"&&(i=ad(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ae])),Object.assign(r,e)),r||e[Ae]}function uu(e){let t;if(e[Ae]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=uu(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Kt];for(let s in r){t||(t=Object.assign({},e[Ae]));let n=r[s];n&&typeof n=="object"&&(n=uu(n)),t[s]=n}return t?Object.freeze(t):e[Ae]||(e.buffer?e:Object.freeze(e))}function nd(e){let t=e[Ae];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[To]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Ae]===n){if(nd(i))return!0}else return!0}}else{let r=e[Kt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Ae]===i){if(nd(n))return!0}else return!0}else return!0}}return!1}var Cs,Kt,sd,To,id,cd=Re(()=>{Ls();Cs=D(Z()),Kt=Symbol("own-data");a(rs,"getChanges");a(od,"assignTrackedAccessors");a(Bb,"trackObject");sd=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ae]=t}};od(sd,{});a(ad,"collapseData");a(uu,"deepFreeze");a(nd,"hasChanges");To=Symbol.for("has-array-changes"),id=class extends Array{static{a(this,"TrackedArray")}[To];constructor(t){super(t)}splice(...t){return this[To]=!0,super.splice(...t)}push(...t){return this[To]=!0,super.push(...t)}pop(){return this[To]=!0,super.pop()}unshift(...t){return this[To]=!0,super.unshift(...t)}shift(){return this[To]=!0,super.shift()}};id.prototype.constructor=Array});function QY(){WY=setInterval(function(){for(let e of zm)if(e.stale){let t=e[Se]?.url;Hb.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},KY).unref()}var Jm,Hb,YY,zm,go,ud,KY,WY,Xm=Re(()=>{Jm=D(or()),Hb=D(v());Ls();YY=100,zm=new Set,go=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),zm.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(zm.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,Jm.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<YY>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(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}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},ud=class extends go{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Jm.getNextMonotonicTime)())}getReadTxn(){}},KY=3e4;a(QY,"startMonitoringTxns");QY()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new go;e.timestamp&&(s.timestamp=e.timestamp),s[Se]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var qb,Ro=Re(()=>{qb=require("../index");Ls();Xm();a(We,"transaction");(0,qb._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function ep(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new ga.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(xb[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=on.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case yt.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new ga.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new ga.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=tp(e);if(!S)throw new ga.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise((N,V)=>setImmediate(()=>{try{N(g&&S(g)?A:Fb.SKIP)}catch($){V($)}})))}let m={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(m):h.getRange(m).map(({value:S})=>S)}function tp(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),xb[t]||t){case yt.SEARCH_TYPES.EQUALS:case void 0:return nn(r,n=>n===s);case yt.SEARCH_TYPES.CONTAINS:return nn(r,n=>n?.toString().includes(s));case yt.SEARCH_TYPES.ENDS_WITH:case yt.SEARCH_TYPES._ENDS_WITH:return nn(r,n=>n?.toString().endsWith(s));case yt.SEARCH_TYPES.STARTS_WITH:case yt.SEARCH_TYPES._STARTS_WITH:return nn(r,n=>typeof n=="string"&&n.startsWith(s));case yt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),nn(r,n=>(0,on.compareKeys)(n,s[0])>=0&&(0,on.compareKeys)(n,s[1])<=0);case"gt":case yt.SEARCH_TYPES.GREATER_THAN:case yt.SEARCH_TYPES._GREATER_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)>0);case"ge":case yt.SEARCH_TYPES.GREATER_THAN_EQUAL:case yt.SEARCH_TYPES._GREATER_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)>=0);case yt.SEARCH_TYPES.LESS_THAN:case"lt":case yt.SEARCH_TYPES._LESS_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)<0);case"le":case yt.SEARCH_TYPES.LESS_THAN_EQUAL:case yt.SEARCH_TYPES._LESS_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)<=0);case"ne":return nn(r,n=>(0,on.compareKeys)(n,s)!==0);default:throw new ga.ClientError(`Unknown query comparator "${t}"`)}}function nn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function ld(e){if(!e)return;let t=new Zm,r,s,n,i,o,c=Gb;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=jY[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?zY:Gb,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var ga,yt,on,Fb,jY,xb,Gb,zY,Zm,_d=Re(()=>{ga=D(Z()),yt=D(Ke()),on=require("ordered-binary"),Fb=require("lmdb"),jY={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ep,"idsForCondition");xb={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(tp,"filterByType");a(nn,"attributeComparator");Gb=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,zY=/([^&|*=]+)([&|*=]*)/g;a(ld,"parseQuery");Zm=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var np={};Fe(np,{CONTEXT:()=>Se,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>Ds,RECORD_PROPERTY:()=>Ae,Resource:()=>Ut,SAVE_UPDATES_PROPERTY:()=>Wb,snake_case:()=>XY});function XY(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function kb(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new sp(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function ss(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[Se]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Se]||i):_=i:(_=n,c=_[Le]??_[this.primaryKey]??null):i?o=i[Se]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return We(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[Wb]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new dd(o.user);return typeof _?.then=="function"?_.then(m=>e(f,u,o,m)):e(f,u,o,_)});if(!E)throw new dd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ns(e,t){let r=new Kb.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function rp(e){let t=e[Ae];if(t){let r=e[Kt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function $b(e){if(typeof e=="string")return t=>rp(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=rp(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=rp(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var Vb,Yb,Kb,Se,Le,Ds,Wb,Ae,JY,Ut,dd,sp,Ls=Re(()=>{Vb=require("crypto");cu();Yb=require("../index"),Kb=D(Z());cd();Ro();_d();Se=Symbol.for("context"),Le=Symbol.for("primary-key"),Ds=Symbol("is-collection"),Wb=Symbol("save-updates"),Ae=Symbol("stored-record"),JY={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ut=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let s=r?.[Se];this[Se]=s!==void 0?s:r||null}static get=ss(function(t,r,s,n){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){let _=$b(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=ss(function(t,r,s,n){if(Array.isArray(n)&&t[Ds]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ns(t,"put")},{hasContent:!0,type:"update"});static delete=ss(function(t,r,s,n){return t.delete?t.delete(r):ns(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Vb.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ns(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=ss(function(t,r,s,n){return t.invalidate?t.invalidate(r):ns(t,"delete")},{hasContent:!1,type:"update"});static post=ss(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=ss(function(t,r,s,n){return t.connect?t.connect(n,r):ns(t,"connect")},{hasContent:!0,type:"read"});static subscribe=ss(function(t,r,s,n){return t.subscribe?t.subscribe(r):ns(t,"subscribe")},{type:"read"});static publish=ss(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.publish?t.publish(n,r):ns(t,"publish")},{hasContent:!0,type:"create"});static search=ss(function(t,r,s,n){let i=t.search?t.search(r):ns(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=$b(o);return i.map(c)}return i},{type:"read"});static query=ss(function(t,r,s,n){return t.search?t.search(n,r):ns(t,"search")},{hasContent:!0,type:"read"});static copy=ss(function(t,r,s,n){return t.copy?t.copy(n,r):ns(t,"copy")},{type:"create"});static move=ss(function(t,r,s,n){return t.move?t.move(n,r):ns(t,"move")},{type:"delete"});post(t){if(this[Ds])return this.constructor.create(this[Le],t,this[Se]);ns(this,"post")}static isCollection(t){return t?.[Ds]}static coerceId(t){return t}static parseQuery(t){return ld(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&JY[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:kb(t,this)}}return kb(t,this)}static getResource(t,r,s){let n,i=r[Se],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Le]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[Ds]=!0),n}subscribe(t){return new ws}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ws}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[Le]}getContext(){return this[Se]}};Ut.prototype[Se]=null;(0,Yb._assignPackageExport)("Resource",Ut);a(XY,"snake_case");dd=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(kb,"pathToId");sp=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(ss,"transactional");a(ns,"missingMethod");a(rp,"selectFromObject");a($b,"transformForSelect")});var Qb={};Fe(Qb,{Resources:()=>fd,keyArrayToString:()=>Ra,resetResources:()=>ZY,resources:()=>wi});function ZY(){return wi=new fd}function Ra(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var fd,wi,lu=Re(()=>{Ro();fd=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(ZY,"resetResources");a(Ra,"keyArrayToString")});var ey={};Fe(ey,{HAS_EXPIRATION:()=>_p,LAST_TIMESTAMP_PLACEHOLDER:()=>du,LOCAL_TIMESTAMP:()=>e1,METADATA:()=>_u,NO_TIMESTAMP:()=>ip,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>lp,RecordEncoder:()=>up,TIMESTAMP_ASSIGN_LAST:()=>r1,TIMESTAMP_ASSIGN_NEW:()=>Jb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Xb,TIMESTAMP_PLACEHOLDER:()=>Ed,TIMESTAMP_RECORD_PREVIOUS:()=>op,getUpdateRecord:()=>dp,handleLocalTimeForGets:()=>Sd});function Zb(){return Oa[0]=Oa[0]^64,t1.getFloat64(0)}function Sd(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[_u];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[_u]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[_u];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=s1.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Oa,0,d),l.timestampBytes=null,l.localTime=Zb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Ao.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Ao.length;u++){let _=Ao[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Ao.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function dp(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Aa=i?.localTime?op|Xb:ip:Aa=u?i?.localTime?op|16384:Jb|16384:ip,l>0&&(c|=_p),md=c,cp=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Aa>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=ap,A.timestampOffset=ap.start||0))}if(u){let A=_?.user?.username;if(E&&(hd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,N=r.get(g);if(N){let V=Ur(N).previousLocalTime;return r.put(g,pd(o,t,s,V,A,d,hd),{ifVersion:m}),S}}r.put(du,pd(o,t,s,i?.localTime?1:0,A,d,hd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var jb,zb,Ed,du,lp,e1,_u,Oa,t1,ip,Jb,r1,Xb,op,_p,ap,hd,Aa,md,cp,up,s1,Ao,fu=Re(()=>{jb=require("msgpackr");Na();zb=D(v()),Ed=new Uint8Array([1,1,1,1,4,64,0,0]),du=new Uint8Array([1,1,1,1,1,0,0,0]),lp=new Uint8Array([1,1,1,1,3,64,0,0]),e1=Symbol("local-timestamp"),_u=Symbol("metadata"),Oa=new Uint8Array(8),t1=new DataView(Oa.buffer,0,8),ip=0,Jb=0,r1=1,Xb=3,op=4,_p=16,Aa=0,md=-1,cp=0,up=class extends jb.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(Aa||md>=0){let i=0,o=Aa;o&&(i+=8,Aa=0);let c=md,u=cp;c>=0&&(i+=2,md=-1,u&&(i+=8,cp=0));let _=ap=r.call(this,s,n|2048|i);hd=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(Ed[4]=o,Ed[5]=o>>8,_.set(Ed,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Oa,0,c),c+=8;else for(let d=0;d<8;d++)Oa[d]=t[c++];u=Zb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&_p&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[_u]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Zb,"getTimestamp");s1=Map.prototype.get;a(Sd,"handleLocalTimeForGets");Ao=[];setInterval(()=>{for(let e=0;e<Ao.length;e++){let t=Ao[e].deref();!t||t.isDone||t.isCommitted?Ao.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&zb.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(dp,"getUpdateRecord")});var dy={};Fe(dy,{AUDIT_STORE_OPTIONS:()=>ly,createAuditEntry:()=>pd,openAuditStore:()=>gd,readAuditEntry:()=>Ur,setAuditRetention:()=>n1,transactionKeyEncoder:()=>uy});function gd(e){let t=e.auditStore=e.openDB(iy.AUDIT_STORE_NAME,ly);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,ay.getWorkerIndex)()===0&&e.on("aftercommit",()=>{Eu||(Eu=setTimeout(()=>{if(Eu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-fp})){if((n[0]&15)===hp){let i=Ur(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},fp/10).unref())}),t}function n1(e){clearTimeout(Eu),Eu=null,fp=e}function pd(e,t,r,s,n,i,o){let c=_y[i],u=1;s&&(s>1?ba.setFloat64(0,s):is.set(lp),u=9),f(0),f(t),d(r),ba.setFloat64(u,e),u+=8,n?d(n):is[u++]=0,is[s?8:0]=c;let l=is.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ya.writeKey)(E,is,u);let m=u-h-1;m>127?m>16383?(pp.error("Key or username was too large for audit entry",E),u=h+1,is[h]=0):(is.copyWithin(h+2,h+1,u),ba.setUint16(h,m|32768),u++):is[h]=m}function f(E){E<128?is[u++]=E:E<16384?(ba.setUint16(u,E|32768),u+=2):E<1056964608?(ba.setUint32(u,E|3221225472),u+=4):(is[u]=255,ba.setUint32(u+1,E),u+=5)}}function Ur(e){try{let t=e.dataView||(e.dataView=new mp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:_y[s&7],tableId:i,get recordId(){return ny(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?ny(e,l,d):void 0},getValue(f){return s&Ep?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return pp.error("Reading audit entry error",e),{}}}function ny(e,t,r){let s=e.subarray(t,r);return(0,ya.readKey)(s,0,r-t)}var ya,Td,iy,oy,ay,cy,pp,is,ba,uy,ly,fp,Eu,Ep,ty,hp,ry,sy,_y,mp,Na=Re(()=>{ya=require("ordered-binary"),Td=D(j()),iy=D(Ke()),oy=D(R()),ay=D(Qe()),cy=D(G());fu();pp=D(v());(0,Td.initSync)();is=Buffer.alloc(1024),ba=new DataView(is.buffer,is.byteOffset,1024),uy={writeKey(e,t,r){return e===du?(t.set(du,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ya.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,ya.readKey)(e,t,r)}},ly={encoding:"binary",keyEncoder:uy},fp=(0,cy.convertToMS)((0,Td.get)(oy.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Eu=null;a(gd,"openAuditStore");a(n1,"setAuditRetention");Ep=16,ty=1,hp=2,ry=3,sy=4,_y={put:ty|Ep,[ty]:"put",delete:hp,[hp]:"delete",message:ry|Ep,[ry]:"message",invalidate:sy,[sy]:"invalidate"};a(pd,"createAuditEntry");a(Ur,"readAuditEntry");mp=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(ny,"readKeySafely")});function Ey(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ia||((0,mu.onMessageByType)(fy,d=>{hy(d.path)}),(0,mu.onMessageByType)(i1,d=>{(0,hu.trace)("confirming to proceed with txn",d.txnId)}),Ia=Object.create(null));let c=Ia[i]||(Ia[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Ra(t);let _=new Tp(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function hy(e,t){if(!Ia)return;let r=Ia[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:Sp,exclusiveStart:!0})){Sp=n;let o=Ur(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Ra(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,hu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,m)}catch(m){console.error(m),(0,hu.info)(m)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},Sp,!0)}function my(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,mu.broadcast)({type:fy,path:n}),hy(n,!0)})}}var hu,mu,fy,i1,Ia,Dfe,Tp,Sp,py=Re(()=>{hu=D(v()),mu=D(Qe());cu();lu();Na();fy="transaction",i1="transaction-await",Dfe=Buffer.alloc(4096);a(Ey,"addSubscription");Tp=class extends ws{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Sp=Date.now();a(hy,"notifyFromTransactionData");a(my,"listenToCommits")});var Ty=T((Ufe,Sy)=>{"use strict";var gp=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};Sy.exports=gp});var Ry=T((Bfe,gy)=>{"use strict";var Rp=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};gy.exports=Rp});var Rd=T((qfe,Ay)=>{"use strict";var Op=j(),Np=R(),{RecordEncoder:o1}=(fu(),te(ey));Op.initSync();var a1=Op.get(Np.CONFIG_PARAMS.STORAGE_COMPRESSION),c1=Op.get(Np.CONFIG_PARAMS.STORAGE_CACHING)!==!1,u1=Np.UPDATES_PROPERTY,Ap=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=a1&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=c1&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:o1},this.alwaysLazyProperty=s=>s===u1)}};Ay.exports=Ap});var Od=T((Ffe,Ny)=>{"use strict";var wa=j(),pu=R();wa.initSync();var l1=wa.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||wa.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||wa.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Oy=wa.get(pu.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),_1=wa.get(pu.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Ad=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=l1,this.noFSAccess=!0,Oy!==void 0&&(this.overlappingSync=Oy),this.noReadAhead=_1}};Ny.exports=Ad;Ad.MAX_DBS=1e4});var Me=T((kfe,Uy)=>{"use strict";var yp=require("lmdb"),Ps=require("fs-extra"),vr=require("path"),Nd=or(),Iy=v(),ar=Mr().LMDB_ERRORS_ENUM,bd=Ry(),Ip=Rd(),wy=Od(),Ci=Ke(),by=R(),{table:d1,resetDatabases:f1}=(fe(),te(De)),yy=j(),Ms=Ci.INTERNAL_DBIS_NAME,Cy=Ci.DBI_DEFINITION_NAME,E1="data.mdb",h1="lock.mdb",Su=".mdb",m1="-lock",bp=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=os(t,r),this.key_type=this.dbi[Ci.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Ci.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new yp.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function yd(e,t){if(e===void 0)throw new Error(ar.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ar.ENV_NAME_REQUIRED)}a(yd,"pathEnvNameValidation");async function wp(e,t,r=!0){try{await Ps.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ar.INVALID_BASE_PATH):s}try{let s=vr.join(e,t+Su);return await Ps.access(s,Ps.constants.R_OK|Ps.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ps.access(vr.join(e,t,E1),Ps.constants.R_OK|Ps.constants.F_OK),vr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ar.INVALID_ENVIRONMENT)}else throw new Error(ar.INVALID_ENVIRONMENT);throw s}}a(wp,"validateEnvironmentPath");function Id(e,t){if(Nd.validateEnv(e),t===void 0)throw new Error(ar.DBI_NAME_REQUIRED)}a(Id,"validateEnvDBIName");async function p1(e,t,r=!1,s=!1){yd(e,t);let n=vr.basename(e);t=t.toString();let i=yy.get(by.CONFIG_PARAMS.DATABASES);i||yy.setProperty(by.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await wp(e,t,s),Ly(e,t,r)}catch(o){if(o.message===ar.INVALID_ENVIRONMENT){let c=vr.join(e,t);await Ps.mkdirp(s?c:e);let u=new wy(s?c:c+Su,!1),_=yp.open(u);_.dbis=Object.create(null);let l=new Ip(!1);_.openDB(Ms,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Cp(e,t,r);return _[Ci.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(p1,"createEnvironment");async function S1(e,t,r,s=!0){yd(e,t),t=t.toString();let n=vr.join(e,t);return d1({table:t,database:vr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(S1,"copyEnvironment");async function Ly(e,t,r=!1){yd(e,t),t=t.toString();let s=Cp(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await wp(e,t),i=vr.join(e,t+Su),o=n!=i,c=new wy(n,o),u=yp.open(c);u.dbis=Object.create(null);let _=Py(u);for(let l=0;l<_.length;l++)os(u,_[l]);return u[Ci.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Ly,"openEnvironment");async function T1(e,t,r=!1){yd(e,t),t=t.toString();let s=vr.join(e,t+Su),n=await wp(e,t);if(global.lmdb_map!==void 0){let i=Cp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Dy(o),delete global.lmdb_map[i]}}await Ps.remove(n),await Ps.remove(n===s?n+m1:vr.join(vr.dirname(n),h1))}a(T1,"deleteEnvironment");async function Dy(e){Nd.validateEnv(e);let t=e[Ci.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Dy,"closeEnvironment");function Cp(e,t,r=!1){let n=`${vr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Cp,"getCachedEnvironmentName");function g1(e){Nd.validateEnv(e);let t=Object.create(null),r=os(e,Ms);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ms)try{t[s]=Object.assign(new bd,n)}catch{Iy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(g1,"listDBIDefinitions");function Py(e){Nd.validateEnv(e);let t=[],r=os(e,Ms);for(let{key:s}of r.getRange({start:!1}))s!==Ms&&t.push(s);return t}a(Py,"listDBIs");function R1(e,t){let s=os(e,Ms).getEntry(t),n=new bd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Iy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(R1,"getDBIDefinition");function My(e,t,r,s=!r){if(Id(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return os(e,t)}catch(n){if(n.message===ar.DBI_DOES_NOT_EXIST){let i=new Ip(r,s===!0),o=e.openDB(t,i),c=new bd(r===!0,s);return o[Cy]=c,os(e,Ms).putSync(t,c),e.dbis[t]=o,o}throw n}}a(My,"createDBI");function os(e,t){if(Id(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ms?r=R1(e,t):r=new bd,r===void 0)throw new Error(ar.DBI_DOES_NOT_EXIST);let s;try{let n=new Ip(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ar.DBI_DOES_NOT_EXIST):n}return s[Cy]=r,e.dbis[t]=s,s}a(os,"openDBI");function A1(e,t){Id(e,t),t=t.toString();let r=os(e,t),s=r.getStats();return r[Ci.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(A1,"statDBI");async function O1(e,t){try{let r=vr.join(e,t+Su);return(await Ps.stat(r)).size}catch{throw new Error(ar.INVALID_ENVIRONMENT)}}a(O1,"environmentDataSize");function N1(e,t){if(Id(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_DROP_INTERNAL_DBIS_NAME);os(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],os(e,Ms).removeSync(t)}a(N1,"dropDBI");function b1(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{os(e,i)}catch(o){if(o.message===ar.DBI_DOES_NOT_EXIST)My(e,i,i!==t,i===t),s=!0;else throw o}}s&&f1()}a(b1,"initializeDBIs");Uy.exports={openDBI:os,openEnvironment:Ly,createEnvironment:p1,listDBIs:Py,listDBIDefinitions:g1,createDBI:My,dropDBI:N1,statDBI:A1,deleteEnvironment:T1,initializeDBIs:b1,TransactionCursor:bp,environmentDataSize:O1,copyEnvironment:S1,closeEnvironment:Dy}});var Hy=T((Vfe,By)=>{"use strict";var Lp=Me(),y1=v(),vy=Mr().LMDB_ERRORS_ENUM;By.exports=I1;async function I1(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 Lp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==vy.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Lp.closeEnvironment(global.lmdb_map[s]),await Lp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==vy.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){y1.error(t)}}a(I1,"cleanLMDBMap")});var Fn=T((Kfe,w1)=>{w1.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"},{attribute:"time"},{attribute:"metric"}]},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"}]}}});var zy=T((Qfe,jy)=>{"use strict";var Dp=require("recursive-iterator"),C1=require("alasql"),Pp=require("clone"),qy=G(),{handleHDBError:Gy,hdb_errors:L1}=Z(),{HDB_ERROR_MSGS:Fy,HTTP_STATUS_CODES:xy}=L1,{getDatabases:D1}=(fe(),te(De)),P1=["DISTINCT_ARRAY"],ky=Symbol("validateTables"),Mp=Symbol("validateTable"),Wfe=Symbol("getAllColumns"),$y=Symbol("validateAllColumns"),wd=Symbol("findColumn"),Vy=Symbol("validateOrderBy"),Tu=Symbol("validateSegment"),Up=Symbol("validateColumn"),Yy=Symbol("setColumnsForTable"),Ky=Symbol("checkColumnsForAsterisk"),Wy=Symbol("validateGroupBy"),Qy=Symbol("hasColumns"),vp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[ky](),this[Ky](),this[$y]()}[ky](){if(this[Qy]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Mp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Mp](t.table)})}}[Qy](){let t=!1,r=new Dp(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Mp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=D1();if(!r[t.databaseid])throw Gy(new Error,Fy.SCHEMA_NOT_FOUND(t.databaseid),xy.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Gy(new Error,Fy.TABLE_NOT_FOUND(t.databaseid,t.tableid),xy.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Pp(n);i.table=Pp(t),this.attributes.push(i)})}[wd](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)}[Ky](){let t=new Dp(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Yy](r.tableid)}[Yy](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new C1.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[$y](){this[Tu](this.statement.columns,!1),this[Tu](this.statement.joins,!1),this[Tu](this.statement.where,!1),this[Wy](this.statement.group,!1),this[Tu](this.statement.order,!0)}[Tu](t,r){if(!t)return;let s=new Dp(t),n=[];for(let{node:i,path:o}of s)!qy.isEmpty(i)&&!qy.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Vy](i):n.push(this[Up](i)));return n}[Wy](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&P1.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Pp(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[wd](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[wd](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[Vy](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[Up](t)}[Up](t){let r=this[wd](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};jy.exports=vp});var Xy=T((zfe,Jy)=>{"use strict";var Bp=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")}};Jy.exports=Bp});var eI=T((Xfe,Zy)=>{"use strict";var Hp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Zy.exports=Hp});var rI=T((eEe,tI)=>{"use strict";var qp=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};tI.exports=qp});var nI=T((rEe,sI)=>{"use strict";var Gp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};sI.exports=Gp});var No=T((aEe,aI)=>{"use strict";var M1=Me(),U1=eI(),v1=rI(),B1=nI(),an=or(),gu=Mr().LMDB_ERRORS_ENUM,H1=Ke(),xn=R(),q1=G(),G1=require("uuid"),nEe=require("lmdb"),{handleHDBError:F1,hdb_errors:x1}=Z(),{OVERFLOW_MARKER:iEe,MAX_SEARCH_KEY_LENGTH:oEe}=H1,iI=j();iI.initSync();var Cd=iI.get(xn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Fp=xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Oo=xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function k1(e,t,r,s,n=an.getNextMonotonicTime()){Vp(e,t,r,s),xp(e,t,r);let i=new U1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];oI(_,!0,n);let l=$1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return kp(o,c,s,i,n)}a(k1,"insertRecords");function $1(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][xn.FUNC_VAL],s[o]=c)}let u=an.getIndexedValues(c),_=e.dbis[o];if(u){Cd&&_.prefetch(u.map(l=>({key:l,value:n})),Ld);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Cd&&e.dbis[t].prefetch([n],Ld),e.dbis[t].put(n,s,s[Oo])})}a($1,"insertRecord");function V1(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(V1,"removeSkippedRecords");function oI(e,t,r){let s=r>0;(s||!Number.isInteger(e[Oo]))&&(e[Oo]=r||(r=an.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Fp]))&&(e[Fp]=r||an.getNextMonotonicTime()):delete e[Fp]}a(oI,"setTimestamps");function xp(e,t,r){r.indexOf(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),M1.initializeDBIs(e,t,r)}a(xp,"initializeTransaction");async function Y1(e,t,r,s,n=an.getNextMonotonicTime()){Vp(e,t,r,s),xp(e,t,r);let i=new v1,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=$p(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return kp(c,u,s,i,n,o)}a(Y1,"updateRecords");async function K1(e,t,r,s,n=an.getNextMonotonicTime()){try{Vp(e,t,r,s)}catch(u){throw F1(u,u.message,x1.HTTP_STATUS_CODES.BAD_REQUEST)}xp(e,t,r);let i=new B1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;q1.isEmpty(_[t])?(l=G1.v4(),_[t]=l):l=_[t];let d=$p(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return kp(o,c,s,i,n)}a(K1,"upsertRecords");async function kp(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||an.getNextMonotonicTime(),V1(r,i),s}a(kp,"finalizeWrite");function $p(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(oI(r,!l,o),Number.isInteger(r[Oo])&&_[Oo]>r[Oo])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][xn.FUNC_VAL],r[h]=m)}if(m===A)continue;let g=an.getIndexedValues(A);if(g){Cd&&S.prefetch(g.map(N=>({key:N,value:s})),Ld);for(let N=0,V=g.length;N<V;N++)S.remove(g[N],s)}if(g=an.getIndexedValues(m),g){Cd&&S.prefetch(g.map(N=>({key:N,value:s})),Ld);for(let N=0,V=g.length;N<V;N++)S.put(g[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[Oo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:$p(e,t,r,s,n,i,o))}a($p,"updateUpsertRecord");function W1(e,t,r){if(an.validateEnv(e),t===void 0)throw new Error(gu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(gu.WRITE_ATTRIBUTES_REQUIRED):new Error(gu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(W1,"validateBasic");function Vp(e,t,r,s){if(W1(e,t,r),!Array.isArray(s))throw s===void 0?new Error(gu.RECORDS_REQUIRED):new Error(gu.RECORDS_MUST_BE_ARRAY)}a(Vp,"validateWrite");function Ld(){}a(Ld,"noop");aI.exports={insertRecords:k1,updateRecords:Y1,upsertRecords:K1}});var cn=T((uEe,lI)=>{"use strict";var uI=G(),cI=R(),Ca=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,kn=require("joi"),Li={schema_format:{pattern:Ca,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Q1=kn.alternatives(kn.string().min(1).max(Li.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),kn.number()).required(),j1=kn.alternatives(kn.string().min(1).max(Li.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),kn.number()),z1=kn.alternatives(kn.string().min(1).max(Li.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Li.schema_format.message}),kn.number()).required();function J1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Li.schema_length.maximum?`'${e}' maximum of 250 characters`:Ca.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(J1,"checkValidTable");function X1(e,t){return uI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(X1,"validateSchemaExists");function Z1(e,t){let r=t.state.ancestors[0].schema;return uI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Z1,"validateTableExists");function eK(e,t){return e.toLowerCase()===cI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${cI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(eK,"validateSchemaName");lI.exports={common_validators:Li,schema_regex:Ca,hdb_schema_table:Q1,validateSchemaExists:X1,validateTableExists:Z1,validateSchemaName:eK,checkValidTable:J1,hdb_database:j1,hdb_table:z1}});var Ve=T((_Ee,_I)=>{"use strict";var cr=require("validate.js");cr.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||cr.validators.type.checks[t](e)?null:` must be a '${t}' value`};cr.validators.type.checks={Object:function(e){return cr.isObject(e)&&!cr.isArray(e)},Array:cr.isArray,Integer:cr.isInteger,Number:cr.isNumber,String:cr.isString,Date:cr.isDate,Boolean:function(e){return typeof e=="boolean"}};cr.validators.hasValidFileExt=function(e,t){return cr.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};_I.exports={validateObject:tK,validateObjectAsync:rK,validateBySchema:sK};function tK(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cr(e,t,{format:"flat"});return r?new Error(r):null}a(tK,"validateObject");async function rK(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await cr.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(rK,"validateObjectAsync");function sK(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(sK,"validateBySchema")});var Dd=T((fEe,dI)=>{var{common_validators:un}=cn(),Au=Ve(),Ru="is required",ct={database:{presence:!1,format:un.schema_format,length:un.schema_length},schema:{presence:!1,format:un.schema_format,length:un.schema_length},table:{presence:!0,format:un.schema_format,length:un.schema_length},attribute:{presence:!0,format:un.schema_format,length:un.schema_length},hash_attribute:{presence:!0,format:un.schema_format,length:un.schema_length}};function Ou(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(Ou,"makeAttributesStrings");function nK(e){return e=Ou(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(nK,"schema_object");function iK(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(iK,"table_object");function oK(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,Au.validateObject(e,ct)}a(oK,"create_table_object");function aK(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence={message:Ru},ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(aK,"attribute_object");function cK(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(cK,"describe_table");function uK(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(uK,"validateTableResidence");dI.exports={schema_object:nK,create_table_object:oK,table_object:iK,attribute_object:aK,describe_table:cK,validateTableResidence:uK}});var EI=T((hEe,fI)=>{"use strict";var lK=require("uuid"),Yp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||lK.v4(),this.schema_table=`${this.schema}.${this.table}`}};fI.exports=Yp});var Pd=T((pEe,hI)=>{"use strict";var _K=EI(),Kp=class extends _K{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};hI.exports=Kp});var pI=T((TEe,mI)=>{"use strict";mI.exports=fK;var dK="inserted";function fK(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===dK?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fK,"returnObject")});var Md=T((REe,AI)=>{"use strict";var EK=R(),Wp=Me(),hK=No(),{getSystemSchemaPath:mK,getSchemaPath:pK}=He(),SK=Fn(),TK=Dd(),gK=Pd(),RK=pI(),{handleHDBError:SI,hdb_errors:gI}=Z(),TI=G(),{HTTP_STATUS_CODES:AK}=gI,Qp=SK.hdb_attribute,RI=[];for(let e=0;e<Qp.attributes.length;e++)RI.push(Qp.attributes[e].attribute);var OK="inserted";AI.exports=NK;async function NK(e){let t=TK.attribute_object(e);if(t)throw SI(new Error,t.message,gI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&TI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw SI(new Error,r,AK.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=TI.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new gK(e.schema,e.table,e.attribute,e.id);try{let i=await Wp.openEnvironment(pK(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}`);Wp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Wp.openEnvironment(mK(),EK.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await hK.insertRecords(o,Qp.hash_attribute,RI,[n]);return RK(OK,c,{records:[n]},u)}catch(i){throw i}}a(NK,"lmdbCreateAttribute")});var zp=T((OEe,NI)=>{var{hdb_table:bK,hdb_database:OI}=cn(),yK=Ve(),jp=require("joi"),IK={undefined:"undefined",null:"null"},wK=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||IK[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),CK=jp.object({database:OI,schema:OI,table:bK,records:jp.array().items(jp.object().custom(wK)).required()});NI.exports=function(e){return yK.validateBySchema(e,CK)}});var Nu=T((yEe,yI)=>{"use strict";var $n=G(),bI=v(),bEe=zp(),{getDatabases:LK}=(fe(),te(De)),{ClientError:bo}=Z();yI.exports=DK;function DK(e){if($n.isEmpty(e))throw new bo("invalid update parameters defined.");if($n.isEmptyOrZeroLength(e.schema))throw new bo("invalid schema specified.");if($n.isEmptyOrZeroLength(e.table))throw new bo("invalid table specified.");if(!Array.isArray(e.records))throw new bo("records must be an array");let t=LK()[e.schema]?.[e.table];if($n.isEmpty(t))throw new bo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&$n.isEmptyOrZeroLength(o[r]))throw bI.error("a valid hash attribute must be provided with update record:",o),new bo("a valid hash attribute must be provided with update record, check log for more info");if(!$n.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw bI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new bo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!$n.isEmpty(o[r])&&o[r]!==""&&s.has($n.autoCast(o[r]))&&(o.skip=!0),s.add($n.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(DK,"insertUpdateValidate")});var bu=T((wEe,II)=>{"use strict";var PK=R().OPERATIONS_ENUM,Jp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=PK.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};II.exports=Jp});var Cu=T((DEe,wI)=>{"use strict";var LEe=bu(),Ud=R(),Zp=G(),Xp=v(),MK=require("uuid"),{handleHDBError:yu,hdb_errors:UK}=Z(),{HDB_ERROR_MSGS:Iu,HTTP_STATUS_CODES:wu}=UK;wI.exports=vK;function vK(e,t,r){for(let n=0;n<t.length;n++)BK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];HK(i,r,e.operation)}}a(vK,"processRows");function BK(e){if(Buffer.byteLength(String(e))>Ud.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yu(new Error,Iu.ATTR_NAME_LENGTH_ERR(e),wu.BAD_REQUEST,void 0,void 0,!0);if(Zp.isEmptyOrZeroLength(e)||Zp.isEmpty(e.trim()))throw yu(new Error,Iu.ATTR_NAME_NULLISH_ERR,wu.BAD_REQUEST,void 0,void 0,!0)}a(BK,"validateAttribute");function HK(e,t,r){if(!e.hasOwnProperty(t)||Zp.isEmptyOrZeroLength(e[t])){if(r===Ud.OPERATIONS_ENUM.INSERT||r===Ud.OPERATIONS_ENUM.UPSERT){e[t]=MK.v4();return}throw Xp.error("Update transaction aborted due to record with no hash value:",e),yu(new Error,Iu.RECORD_MISSING_HASH_ERR,wu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ud.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Xp.error(e),yu(new Error,Iu.HASH_VAL_LENGTH_ERR,wu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Xp.error(e),yu(new Error,Iu.INVALID_FORWARD_SLASH_IN_HASH_ERR,wu.BAD_REQUEST,void 0,void 0,!0)}a(HK,"validateHash")});var vd=T((MEe,LI)=>{"use strict";var CI=G(),qK=R(),GK=v(),FK=Md(),xK=Pd(),kK=Vn(),{SchemaEventMsg:$K}=Us(),VK="already exists in";LI.exports=YK;async function YK(e,t,r){if(CI.isEmptyOrZeroLength(r))return r;let s=[];CI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await KK(e,t.schema,t.name,i)})),n}a(YK,"lmdbCheckForNewAttributes");async function KK(e,t,r,s){let n=new xK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await WK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(VK))GK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(KK,"createNewAttribute");async function WK(e){let t;return t=await FK(e),kK.signalSchemaChange(new $K(process.pid,qK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(WK,"createAttribute")});var La=T((vEe,DI)=>{"use strict";var eS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};DI.exports=eS});var MI=T((HEe,PI)=>{"use strict";var QK=La(),jK=R().OPERATIONS_ENUM,tS=class extends QK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(jK.INSERT,r,s,n,i),this.records=t}};PI.exports=tS});var vI=T((GEe,UI)=>{"use strict";var zK=La(),JK=R().OPERATIONS_ENUM,rS=class extends zK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(JK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};UI.exports=rS});var HI=T((xEe,BI)=>{"use strict";var XK=La(),ZK=R().OPERATIONS_ENUM,sS=class extends XK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(ZK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};BI.exports=sS});var GI=T(($Ee,qI)=>{"use strict";var eW=La(),tW=R().OPERATIONS_ENUM,nS=class extends eW{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(tW.DELETE,s,n,t,i),this.original_records=r}};qI.exports=nS});var Lu=T((KEe,$I)=>{"use strict";var YEe=require("path"),FI=Me(),rW=MI(),sW=vI(),nW=HI(),iW=GI(),Da=Ke(),xI=G(),{CONFIG_PARAMS:oW}=R(),kI=j();kI.initSync();var Bd=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:aW}=He();$I.exports=cW;async function cW(e,t){if(kI.get(oW.LOGGING_AUDITLOG)===!1)return;let r=aW(e.schema,e.table),s=await FI.openEnvironment(r,e.table,!0),n=uW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){FI.initializeDBIs(s,Da.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Da.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Da.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Da.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),xI.isEmpty(n.user_name)||s.dbis[Da.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Da.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(cW,"writeTransaction");function uW(e,t){let r=xI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Bd.INSERT)return new rW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bd.UPDATE)return new sW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bd.UPSERT)return new nW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Bd.DELETE)return new iW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(uW,"createTransactionObject")});var iS=T((jEe,VI)=>{"use strict";var lW=Nu(),QEe=bu(),Du=R(),_W=Cu(),dW=No().insertRecords,fW=Me(),EW=v(),hW=vd(),{getSchemaPath:mW}=He(),pW=Lu();VI.exports=SW;async function SW(e){try{let{schema_table:t,attributes:r}=lW(e);_W(e,r,t.hash_attribute),e.schema!==Du.SYSTEM_SCHEMA_NAME&&(r.includes(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Du.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Du.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await hW(e.hdb_auth_header,t,r),n=mW(e.schema,e.table),i=await fW.openEnvironment(n,e.table),o=await dW(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await pW(e,o)}catch(c){EW.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(SW,"lmdbCreateRecords")});var WI=T((JEe,KI)=>{"use strict";var YI=R(),TW=iS(),gW=bu(),RW=require("fs-extra"),{getSchemaPath:AW}=He();KI.exports=OW;async function OW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new gW(YI.SYSTEM_SCHEMA_NAME,YI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await TW(r),await RW.mkdirp(AW(e.schema))}a(OW,"lmdbCreateSchema")});var jI=T((ZEe,QI)=>{"use strict";var oS=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};QI.exports=oS});var ZI=T((nhe,XI)=>{"use strict";var zI=Me(),aS=or(),cS=Mr().LMDB_ERRORS_ENUM,NW=Ke(),JI=v(),the=G(),bW=require("lmdb"),yW=jI(),IW=R(),{OVERFLOW_MARKER:rhe,MAX_SEARCH_KEY_LENGTH:she}=NW,wW=IW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CW(e,t,r,s){if(aS.validateEnv(e),t===void 0)throw new Error(cS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(cS.IDS_REQUIRED):new Error(cS.IDS_MUST_BE_ITERABLE);try{let n=zI.listDBIs(e);zI.initializeDBIs(e,t,n);let i=new yW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[wW]>s){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,bW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],N=h[A];if(N!=null)try{let V=aS.getIndexedValues(N);if(V)for(let $=0,F=V.length;$<F;$++)g.remove(V[$],o)}catch{JI.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(m),u.push(o),i.original_records.push(h)}catch(h){JI.warn(h),i.skipped.push(o)}let _=[],l=await Promise.all(c);for(let f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=aS.getNextMonotonicTime(),i}catch(n){throw n}}a(CW,"deleteRecords");XI.exports={deleteRecords:CW}});var Pu=T((ohe,tw)=>{"use strict";var Pa=G(),LW=ZI(),DW=Me(),{getSchemaPath:PW}=He(),MW=Lu(),UW=v();tw.exports=vW;async function vW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Pa.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Pa.isEmptyOrZeroLength(e.hash_values)&&!Pa.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Pa.isEmpty(u)||e.hash_values.push(u)}}if(Pa.isEmptyOrZeroLength(e.hash_values))return ew([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Pa.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=PW(e.schema,e.table),i=await DW.openEnvironment(n,e.table),o=await LW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await MW(e,o)}catch(c){UW.error(`unable to write transaction due to ${c.message}`)}return ew(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(vW,"lmdbDeleteRecords");function ew(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ew,"createDeleteResponse")});var lS=T((uhe,rw)=>{"use strict";var BW=R(),che=or();function uS(e,t){let r=Object.create(null);if(t.length===1&&BW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(uS,"parseRow");function HW(e,t,r,s){let n=uS(r,e);s.push(n)}a(HW,"searchAll");function qW(e,t,r,s){let n=uS(r,e);s[t]=n}a(qW,"searchAllToMap");function GW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(GW,"iterateDBI");function yo(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(yo,"pushResults");function FW(e,t,r,s,n,i){t.toString().endsWith(e)&&yo(t,r,s,n,i)}a(FW,"endsWith");function xW(e,t,r,s,n,i){t.toString().includes(e)&&yo(t,r,s,n,i)}a(xW,"contains");function kW(e,t,r,s,n,i){t>e&&yo(t,r,s,n,i)}a(kW,"greaterThanCompare");function $W(e,t,r,s,n,i){t>=e&&yo(t,r,s,n,i)}a($W,"greaterThanEqualCompare");function VW(e,t,r,s,n,i){t<e&&yo(t,r,s,n,i)}a(VW,"lessThanCompare");function YW(e,t,r,s,n,i){t<=e&&yo(t,r,s,n,i)}a(YW,"lessThanEqualCompare");rw.exports={parseRow:uS,searchAll:HW,searchAllToMap:qW,iterateDBI:GW,endsWith:FW,contains:xW,greaterThanCompare:kW,greaterThanEqualCompare:$W,lessThanCompare:VW,lessThanEqualCompare:YW,pushResults:yo}});var Ma=T((Ehe,uw)=>{"use strict";var Di=Me(),_he=v(),Br=or(),Hd=Ke(),tt=Mr().LMDB_ERRORS_ENUM,dhe=G(),KW=R(),qd=lS(),{parseRow:WW}=qd,fhe=require("lmdb"),{OVERFLOW_MARKER:sw,MAX_SEARCH_KEY_LENGTH:QW}=Hd;function nw(e,t,r,s=!1,n=void 0,i=void 0){return Io(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(nw,"iterateFullIndex");function Mu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Io(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(N=>({value:N}))):d.getRange(g)})}a(Mu,"iterateRangeBetween");function Io(e,t,r,s){let n=e.database||e,i=Di.openDBI(n,r);i[Hd.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Di.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(Io,"setupTransaction");function iw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(sw)){if(!n)if(r)n=Di.openDBI(e,r);else{let u=Di.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Di.openDBI(e,u[_]),!n[Hd.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(iw,"getOverflowCheck");function jW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Io(e,t,t,(o,c,u)=>(Gd(r),r=Uu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>WW(_.value,r))))}a(jW,"searchAll");function zW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);Gd(r),r=Uu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of nw(e,t,t,s,n,i))o.set(c,qd.parseRow(u,r));return o}a(zW,"searchAllToMap");function JW(e,t,r=!1,s=void 0,n=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=nw(e,void 0,t,r,s,n),c=o.transaction,u=iw(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(JW,"iterateDBI");function XW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Di.statDBI(e,t).entryCount}a(XW,"countAll");function ZW(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,t,r,(c,u,_,l)=>(s=Br.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(ZW,"equals");function eQ(e,t,r){return Pi(e,t,r),Di.openDBI(e,t).getValuesCount(r)}a(eQ,"count");function tQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Pi(e,r,s),Io(e,null,r,(c,u)=>{s=Br.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(tQ,"startsWith");function rQ(e,t,r,s,n=!1,i=void 0,o=void 0){return ow(e,t,r,s,n,i,o,!0)}a(rQ,"endsWith");function ow(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Pi(e,r,s),Io(e,null,r,(u,_,l,d)=>{let f=iw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(sw)?_.getValues(E,{transaction:u}).map(m=>{let S=f(E,m);if(c?S.endsWith(s):S.includes(s))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(s):h.includes(s))?_[Hd.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ow,"contains");function sQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Mu(e,t,r,s,u,n,i,o,!0,!1)}a(sQ,"greaterThan");function nQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Mu(e,t,r,s,u,n,i,o,!1,!1)}a(nQ,"greaterThanEqual");function iQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Mu(e,t,r,u,s,n,i,o,!1,!0)}a(iQ,"lessThan");function oQ(e,t,r,s,n=!1,i=void 0,o=void 0){Pi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Mu(e,t,r,u,s,n,i,o,!1,!1)}a(oQ,"lessThanEqual");function aQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(tt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(tt.END_VALUE_REQUIRED);if(s=Br.convertKeyValueToWrite(s),n=Br.convertKeyValueToWrite(n),s>n)throw new Error(tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Mu(e,t,r,s,n,i,o,c)}a(aQ,"between");function cQ(e,t,r,s){Br.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(Gd(r),r=Uu(n,r),s===void 0)throw new Error(tt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=qd.parseRow(c,r)),o}a(cQ,"searchByHash");function uQ(e,t,r){Br.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(uQ,"checkHashExists");function lQ(e,t,r,s,n=[]){return cw(e,t,r,s,n),aw(e,t,r,s,n).map(i=>i[1])}a(lQ,"batchSearchByHash");function _Q(e,t,r,s,n=[]){cw(e,t,r,s,n);let i=new Map;for(let[o,c]of aw(e,t,r,s,n))i.set(o,c);return i}a(_Q,"batchSearchByHashToMap");function aw(e,t,r,s,n=[]){return Io(e,t,t,(i,o,c)=>{r=Uu(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,qd.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(aw,"batchHashSearch");function cw(e,t,r,s,n){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(Gd(r),s==null)throw new Error(tt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(tt.IDS_MUST_BE_ITERABLE)}a(cw,"initializeBatchSearchByHash");function Gd(e){if(!Array.isArray(e))throw e===void 0?new Error(tt.FETCH_ATTRIBUTES_REQUIRED):new Error(tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Gd,"validateFetchAttributes");function Pi(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.SEARCH_VALUE_REQUIRED);if(r?.length>QW)throw new Error(tt.SEARCH_VALUE_TOO_LARGE)}a(Pi,"validateComparisonFunctions");function Uu(e,t){return t.length===1&&KW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Di.listDBIs(e)),t}a(Uu,"setGetWholeRowAttributes");uw.exports={searchAll:jW,searchAllToMap:zW,count:eQ,countAll:XW,equals:ZW,startsWith:tQ,endsWith:rQ,contains:ow,searchByHash:cQ,setGetWholeRowAttributes:Uu,batchSearchByHash:lQ,batchSearchByHashToMap:_Q,checkHashExists:uQ,iterateDBI:JW,greaterThan:sQ,greaterThanEqual:nQ,lessThan:iQ,lessThanEqual:oQ,between:aQ}});var Ua=T((mhe,Ew)=>{var lw=require("lodash"),_w=Ve(),xe=require("joi"),dQ=G(),{hdb_schema_table:Fd,checkValidTable:dw,hdb_table:fw,hdb_database:xd}=cn(),{handleHDBError:fQ,hdb_errors:EQ}=Z(),{getDatabases:hQ}=(fe(),te(De)),{HTTP_STATUS_CODES:mQ}=EQ,pQ=xe.object({database:xd,schema:xd,table:fw,search_attribute:Fd,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(Fd).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),SQ=xe.object({database:xd,schema:xd,table:fw,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(Fd).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:Fd,search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()})).required()});Ew.exports=function(e,t){let r=null;switch(t){case"value":r=_w.validateBySchema(e,pQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(dw("database",e.schema)),i(dw("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=_w.validateBySchema(e,SQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=dQ.checkGlobalSchemaTable(e.schema,e.table);if(n)return fQ(new Error,n,mQ.NOT_FOUND);let o=hQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=lw.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!lw.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var _S=T((She,hw)=>{"use strict";var TQ=Me(),gQ=Ua(),{getSchemaPath:RQ}=He();hw.exports=AQ;function AQ(e){let t=gQ(e,"hashes");if(t)throw t;let r=RQ(e.schema,e.table);return TQ.openEnvironment(r,e.table)}a(AQ,"initialize")});var dS=T((ghe,mw)=>{"use strict";var OQ=Ma(),NQ=_S();mw.exports=bQ;async function bQ(e){let t=await NQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return OQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(bQ,"lmdbGetDataByHash")});var va=T((Ahe,pw)=>{"use strict";var fS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};pw.exports=fS});var Tw=T((bhe,Sw)=>{"use strict";var Nhe=va(),yQ=Ma(),IQ=_S();Sw.exports=wQ;async function wQ(e){let t=await IQ(e),r=global.hdb_schema[e.schema][e.table];return yQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(wQ,"lmdbSearchByHash")});var vs=T((Ihe,gw)=>{"use strict";var ES=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};gw.exports=ES});var kd=T((Che,yw)=>{"use strict";var Wt=Ma(),CQ=Me(),LQ=G(),ce=Ke(),wo=R(),DQ=Fn(),Rw=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:PQ}=He(),Yn=wo.SEARCH_WILDCARDS;async function MQ(e,t,r){let s;e.schema===wo.SYSTEM_SCHEMA_NAME?s=DQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=bw(e,s.hash_attribute,r,t);return Ow(e,n,s.hash_attribute,r)}a(MQ,"prepSearch");async function Ow(e,t,r,s){let n=PQ(e.schema,e.table),i=await CQ.openEnvironment(n,e.table),o=Nw(i,e,t,r),c=o.transaction||i;if([ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ce.SEARCH_TYPES.SEARCH_ALL,ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(UQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Aw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Aw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Wt.batchSearchByHashToMap(c,r,e.get_attributes,_):Wt.batchSearchByHash(c,r,e.get_attributes,_)}a(Ow,"executeSearch");function Nw(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ce.SEARCH_TYPES.EQUALS:n=Wt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.CONTAINS:n=Wt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.ENDS_WITH:case ce.SEARCH_TYPES._ENDS_WITH:n=Wt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.STARTS_WITH:case ce.SEARCH_TYPES._STARTS_WITH:n=Wt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.SEARCH_ALL:return Wt.searchAll(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.BETWEEN:n=Wt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN:case ce.SEARCH_TYPES._GREATER_THAN:n=Wt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN_EQUAL:case ce.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Wt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN:case ce.SEARCH_TYPES._LESS_THAN:n=Wt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN_EQUAL:case ce.SEARCH_TYPES._LESS_THAN_EQUAL:n=Wt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Nw,"searchByType");function Aw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Aw,"createMapFromIterable");function UQ(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(UQ,"checkToFetchMore");function bw(e,t,r,s){if(LQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Yn.indexOf(n)>-1)return r===!0?ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ce.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Yn[0])<0&&n.indexOf(Yn[1])<0)return c===!0?r===!0?ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ce.SEARCH_TYPES.EQUALS;if(Yn.indexOf(i)>=0&&Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ce.SEARCH_TYPES.CONTAINS;if(Yn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ce.SEARCH_TYPES.ENDS_WITH;if(Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ce.SEARCH_TYPES.STARTS_WITH;if(n.includes(Yn[0])||n.includes(Yn[1]))return ce.SEARCH_TYPES.EQUALS;throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}else switch(s){case wo.VALUE_SEARCH_COMPARATORS.BETWEEN:return ce.SEARCH_TYPES.BETWEEN;case wo.VALUE_SEARCH_COMPARATORS.GREATER:return ce.SEARCH_TYPES.GREATER_THAN;case wo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ce.SEARCH_TYPES.GREATER_THAN_EQUAL;case wo.VALUE_SEARCH_COMPARATORS.LESS:return ce.SEARCH_TYPES.LESS_THAN;case wo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ce.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(Rw.UNKNOWN_SEARCH_TYPE)}}a(bw,"createSearchTypeFromSearchObject");yw.exports={executeSearch:Ow,createSearchTypeFromSearchObject:bw,prepSearch:MQ,searchByType:Nw}});var ww=T((Phe,Iw)=>{"use strict";var Dhe=vs(),vQ=Ua(),BQ=G(),HQ=R(),qQ=kd();Iw.exports=GQ;function GQ(e,t){if(!BQ.isEmpty(t)&&HQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=vQ(e,"value");if(s)throw s;let n=!0;return qQ.prepSearch(e,t,n)}a(GQ,"lmdbGetDataByValue")});var vu=T((vhe,Cw)=>{"use strict";var Uhe=vs(),FQ=Ua(),xQ=G(),kQ=R(),$Q=kd();Cw.exports=VQ;async function VQ(e,t){if(!xQ.isEmpty(t)&&kQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=FQ(e,"value");if(s)throw s;return $Q.prepSearch(e,t,!1)}a(VQ,"lmdbSearchByValue")});var Dw=T((qhe,Lw)=>{"use strict";var Hhe=Ke(),hS=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},mS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},pS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Lw.exports={SearchByConditionsObject:hS,SearchCondition:mS,SortAttribute:pS}});var Bw=T((khe,vw)=>{"use strict";var Fhe=Dw().SearchByConditionsObject,YQ=vs(),KQ=Ua(),SS=Ma(),$d=Ke(),{Resource:xhe}=(Ls(),te(np)),Uw=kd(),WQ=lS(),QQ=require("lodash"),{getSchemaPath:jQ}=He(),Pw=Me(),{handleHDBError:zQ,hdb_errors:JQ}=Z(),{HTTP_STATUS_CODES:XQ}=JQ,ZQ=1e8;vw.exports=ej;async function ej(e){let t=KQ(e,"conditions");if(t)throw zQ(t,t.message,XQ.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=jQ(e.schema,e.table),s=await Pw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Pw.openDBI(s,_.search_attribute);let i=QQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===$d.SEARCH_TYPES.EQUALS?_.estimated_count=SS.count(s,_.search_attribute,_.search_value):l===$d.SEARCH_TYPES.CONTAINS||l===$d.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=ZQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Mw(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Uw.filterByType),d=l.length,f=SS.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))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(E=>WQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Mw(o,e,f,n.hash_attribute);c=c.concat(E)}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=SS.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(ej,"lmdbSearchByConditions");async function Mw(e,t,r,s){let n=new YQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===$d.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Uw.searchByType(e,n,i,s).map(o=>o.value)}a(Mw,"executeConditionSearch")});var Bu=T((Vhe,Hw)=>{"use strict";var tj=R().OPERATIONS_ENUM,TS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=tj.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Hw.exports=TS});var gS=T((Khe,Yw)=>{"use strict";var xw=vs(),kw=Bu(),$w=vu(),Vw=Pu(),ur=R(),qw=G(),Gw=Me(),{getTransactionAuditStorePath:rj,getSchemaPath:sj}=He(),Fw=v();Yw.exports=nj;async function nj(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 ij(e),await oj(e);let t=sj(e.schema,e.table);try{await Gw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=rj(e.schema,e.table);await Gw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Fw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(nj,"lmdbDropTable");async function ij(e){let t=new xw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await $w(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new kw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Vw(n)}a(ij,"deleteAttributesFromSystem");async function oj(e){let t=new xw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await $w(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new kw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Vw(n)}catch(i){throw i}}a(oj,"dropTableFromSystem")});var Ww=T((Qhe,Kw)=>{"use strict";var aj=require("fs-extra"),cj=vs(),uj=va(),lj=Bu(),_j=gS(),dj=Pu(),fj=dS(),Ej=vu(),Kn=R(),{getSchemaPath:hj}=He(),{handleHDBError:mj,hdb_errors:pj}=Z(),{HDB_ERROR_MSGS:Sj,HTTP_STATUS_CODES:Tj}=pj;Kw.exports=gj;async function gj(e){let t;try{t=await Rj(e.schema);let r=new cj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Ej(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await _j(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new lj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await dj(n);let i=hj(t);await aj.remove(i)}catch(r){throw r}}a(gj,"lmdbDropSchema");async function Rj(e){let t=new uj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await fj(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw mj(new Error,Sj.SCHEMA_NOT_FOUND(e),Tj.NOT_FOUND,void 0,void 0,!0);return s}a(Rj,"validateDropSchema")});var Hu=T((zhe,Qw)=>{"use strict";var RS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Qw.exports=RS});var OS=T((Zhe,jw)=>{"use strict";var Aj=require("fs-extra"),Vd=Me(),{getTransactionAuditStorePath:Oj}=He(),AS=Ke(),Xhe=Hu();jw.exports=Nj;async function Nj(e){let t;try{let r=Oj(e.schema,e.table);await Aj.mkdirp(r),t=await Vd.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{Vd.createDBI(t,AS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Vd.createDBI(t,AS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Vd.createDBI(t,AS.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(Nj,"createTransactionsAuditEnvironment")});var Zw=T((tme,Xw)=>{"use strict";var NS=R(),zw=Me(),bj=No(),{getSystemSchemaPath:yj,getSchemaPath:Ij}=He(),wj=Fn(),Cj=Md(),bS=Pd(),Lj=v(),Dj=OS(),IS=wj.hdb_table,Jw=[];for(let e=0;e<IS.attributes.length;e++)Jw.push(IS.attributes[e].attribute);Xw.exports=Pj;async function Pj(e,t){let r=Ij(t.schema,t.table),s=new bS(t.schema,t.table,NS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bS(t.schema,t.table,NS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bS(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(yj(),NS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await bj.insertRecords(o,IS.hash_attribute,Jw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await yS(s),await yS(n),await yS(i)}await Dj(t)}catch(o){throw o}}a(Pj,"lmdbCreateTable");async function yS(e){try{await Cj(e)}catch(t){Lj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yS,"createAttribute")});var tC=T((sme,eC)=>{"use strict";var Mj=Nu(),Uj=Cu(),vj=vd(),qu=R(),Bj=No().updateRecords,Hj=Me(),{getSchemaPath:qj}=He(),Gj=Lu(),Fj=v();eC.exports=xj;async function xj(e){try{let{schema_table:t,attributes:r}=Mj(e);Uj(e,r,t.hash_attribute),e.schema!==qu.SYSTEM_SCHEMA_NAME&&(r.includes(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vj(e.hdb_auth_header,t,r),n=qj(e.schema,e.table),i=await Hj.openEnvironment(n,e.table),o=await Bj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Gj(e,o)}catch(c){Fj.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(xj,"lmdbUpdateRecords")});var sC=T((ime,rC)=>{"use strict";var kj=R().OPERATIONS_ENUM,wS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=kj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rC.exports=wS});var iC=T((cme,nC)=>{"use strict";var ame=sC(),$j=Nu(),Vj=Cu(),Yj=vd(),Gu=R(),Kj=No().upsertRecords,Wj=Me(),{getSchemaPath:Qj}=He(),jj=Lu(),zj=v(),{handleHDBError:Jj,hdb_errors:Xj}=Z();nC.exports=Zj;async function Zj(e){let t;try{t=$j(e)}catch(u){throw Jj(u,u.message,Xj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Vj(e,s,r.hash_attribute),e.schema!==Gu.SYSTEM_SCHEMA_NAME&&(s.includes(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Yj(e.hdb_auth_header,r,s),i=Qj(e.schema,e.table),o=await Wj.openEnvironment(i,e.table),c=await Kj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await jj(e,c)}catch(u){zj.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(Zj,"lmdbUpsertRecords")});var aC=T((lme,oC)=>{"use strict";var CS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};oC.exports=CS});var uC=T((dme,cC)=>{"use strict";var LS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};cC.exports=LS});var dC=T((hme,_C)=>{"use strict";var DS=Me(),{getTransactionAuditStorePath:ez}=He(),Eme=aC(),Fu=Ke(),tz=G(),lC=uC(),rz=require("util").promisify,sz=rz(setTimeout),nz=1e4,iz=100;_C.exports=oz;async function oz(e){let t=ez(e.schema,e.table),r=await DS.openEnvironment(t,e.table,!0),s=DS.listDBIs(r);DS.initializeDBIs(r,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new lC;do n=await az(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await sz(iz);while(n.transactions_deleted>0);return i}a(oz,"deleteAuditLogsBefore");async function az(e,t){let r=new lC;try{let s=e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Fu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];tz.isEmpty(c)||(n=e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Fu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>nz)break}return await n,r}catch(s){throw s}}a(az,"deleteTransactions")});var EC=T((pme,fC)=>{"use strict";var PS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};fC.exports=PS});var mC=T((gme,hC)=>{"use strict";var cz=vs(),uz=Bu(),Tme=EC(),ln=R(),lz=G(),MS=Me(),_z=Fn(),dz=vu(),fz=Pu(),{getSchemaPath:Ez}=He();hC.exports=hz;async function hz(e,t=!0){let r;e.schema===ln.SYSTEM_SCHEMA_NAME?r=_z[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await pz(e),n=Ez(e.schema,e.table),i=await MS.openEnvironment(n,e.table);return t===!0&&await mz(e,i,r.hash_attribute),MS.dropDBI(i,e.attribute),s}a(hz,"lmdbDropAttribute");async function mz(e,t,r){let s=MS.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(mz,"removeAttributeFromAllObjects");async function pz(e){let t=new cz(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await dz(t)).filter(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(lz.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new uz(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return fz(i)}a(pz,"dropAttributeFromSystem")});var AC=T((Ome,RC)=>{"use strict";var US=Me(),Ba=Ke(),Ame=or(),vS=R(),pC=G(),{getTransactionAuditStorePath:Sz}=He(),Tz=Ma(),Yd=La(),gz=v();RC.exports=Rz;async function Rz(e){let t=Sz(e.schema,e.table),r=await US.openEnvironment(t,e.table,!0),s=US.listDBIs(r);US.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case vS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return SC(r,e.search_values);case vS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Oz(r,e.search_values,n);case vS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Az(r,e.search_values);default:return SC(r)}}a(Rz,"readAuditLog");function SC(e,t=[0,Date.now()]){pC.isEmpty(t[0])&&(t[0]=0),pC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Yd,n))}a(SC,"searchTransactionsByTimestamp");function Az(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,gC(e,i))}return Object.fromEntries(r)}a(Az,"searchTransactionsByUsername");function Oz(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Tz.equals(e,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=gC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);TC(u,"records",r,l,o),TC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Oz,"searchTransactionsByHashValues");function TC(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Yd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Yd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(TC,"loopRecords");function gC(e,t){let r=[];try{let s=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Yd,i);r.push(o)}}catch(i){gz.warn(i)}return r}catch(s){throw s}}a(gC,"batchSearchTransactions")});var NC=T((Ime,OC)=>{"use strict";var{getSchemaPath:bme}=He(),yme=Me(),{database:Nz}=(fe(),te(De));OC.exports={writeTransaction:bz};async function bz(e,t,r){return Nz({database:e,table:t}).transaction(r)}a(bz,"writeTransaction")});var wC=T((Cme,IC)=>{"use strict";var{getSchemaPath:bC}=He(),yC=Me();IC.exports={flush:yz,resetReadTxn:Iz};async function yz(e,t){return(await yC.openEnvironment(bC(e,t),t.toString())).flushed}a(yz,"flush");async function Iz(e,t){try{(await yC.openEnvironment(bC(e,t),t.toString())).resetReadTxn()}catch{}}a(Iz,"resetReadTxn")});var PC=T((Dme,DC)=>{"use strict";var{Readable:wz}=require("stream"),{getDatabases:Cz}=(fe(),te(De)),{readSync:Lz,openSync:Dz,createReadStream:CC}=require("fs"),{open:Pz}=require("lmdb"),LC=Rd(),Mz=Od(),{AUDIT_STORE_OPTIONS:Uz}=(Na(),te(dy)),{INTERNAL_DBIS_NAME:vz,AUDIT_STORE_NAME:Bz}=Ke();DC.exports=qz;var BS=32768,Hz=100;async function qz(e){let t=e.database||e.schema||"data",r=Cz()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=Pz({noSync:!0,maxDbs:Mz.MAX_DBS}),f,E=d.openDB(vz,new LC(!1)),h=l.useReadTransaction(),m=0,S=a(async function(g,N){N.encoding="binary",N.encoder=void 0;let V=d.openDB(g,N),$=l.openDB(g,N);for(let{key:F,version:w,value:K}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,K,w),m++%Hz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(V=>g.startsWith?.(V+"/"))){E.put(g,N);let[,V]=g.split("/"),$=!V,F=new LC(!$,$);await S(g,F)}e.include_audit&&await S(Bz,Object.assign({},Uz)),await f;let A=CC(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Dz(o.path);return o.transaction(()=>{let _=Buffer.alloc(BS);Lz(c,_,0,BS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=CC(null,{fd:c,start:BS}),f=new wz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(qz,"getBackup")});var vC=T((Mme,UC)=>{"use strict";var Gz=v(),{handleHDBError:Fz}=Z(),xz=Xy(),kz=Md(),$z=iS(),Vz=WI(),Yz=Pu(),Kz=dS(),Wz=Tw(),Qz=ww(),jz=vu(),zz=Bw(),Jz=Ww(),Xz=Zw(),Zz=tC(),eJ=iC(),tJ=dC(),rJ=gS(),sJ=mC(),nJ=AC(),iJ=NC(),MC=wC(),oJ=PC(),HS=class extends xz{static{a(this,"LMDBBridge")}async searchByConditions(t){return zz(t)}async getDataByHash(t){return await Kz(t)}async searchByHash(t){return await Wz(t)}async getDataByValue(t,r){return await Qz(t,r)}async searchByValue(t){return await jz(t)}async createSchema(t){return await Vz(t)}async dropSchema(t){return await Jz(t)}async createTable(t,r){return await Xz(t,r)}async dropTable(t){return await rJ(t)}async createAttribute(t){return await kz(t)}async createRecords(t){return await $z(t)}async updateRecords(t){return await Zz(t)}async upsertRecords(t){try{return await eJ(t)}catch(r){throw Fz(r,null,null,Gz.ERR,r)}}async deleteRecords(t){return await Yz(t)}async dropAttribute(t){return await sJ(t)}async deleteAuditLogsBefore(t){return await tJ(t)}async readAuditLog(t){return await nJ(t)}writeTransaction(t,r,s){return iJ.writeTransaction(t,r,s)}flush(t,r){return MC.flush(t,r)}resetReadTxn(t,r){return MC.resetReadTxn(t,r)}getBackup(t){return oJ(t)}};UC.exports=HS});var VC={};Fe(VC,{ResourceBridge:()=>FS});function xS({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 HC(e,t){let r=_n(e),s=xS(e,r);if(!r)throw new Bs.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(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:n,select:s},i);return l=l&&ad(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 _n(e){let t=e.database||e.schema||cJ,r=Hs()[t];if(!r)throw(0,Bs.handleHDBError)(new Error,aJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function qC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*GC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var FC,Kd,Bs,xC,kC,qs,qS,GS,$C,aJ,cJ,uJ,lJ,BC,FS,YC=Re(()=>{"use strict";FC=D(vC()),Kd=D(Ua()),Bs=D(Z());fe();xC=D(Nu()),kC=D(Cu()),qs=D(R()),qS=D(Vn()),GS=D(Us()),$C=D(G());Ro();cd();({HDB_ERROR_MSGS:aJ}=Bs.hdb_errors),cJ="data",uJ=1e4,lJ=10,FS=class extends FC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),BC=this}async searchByConditions(t){let r=(0,Kd.default)(t,"conditions");if(r)throw(0,Bs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_n(t);if(!s)throw new Bs.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xS(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Bs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await _n(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=_n(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){_n(t).dropTable()}createSchema(t){return xu({database:t.schema,table:null}),qS.signalSchemaChange(new GS.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await kS(t.schema),qS.signalSchemaChange(new GS.SchemaEventMsg(process.pid,qs.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,BC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,xC.default)(t);(0,kC.default)(t,s,r.primaryKey);let n,i=Hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=ad(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Hs()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return qC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Bs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:qs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,$C.async_set_timeout)(lJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%uJ===0&&await _();return u.length>0&&await _(),n?qC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Kd.default)(t,"hashes");if(r)throw r;return HC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of HC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&qs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Kd.default)(t,"value");if(s)throw s;let n=_n(t);if(!n)throw new Bs.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===qs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xS(t,n)})}async getDataByValue(t,r){let s=new Map,n=_n(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){_n({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return _n(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=_n(t),s={};switch(t.search_type){case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of GC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return GC(r,t.search_values?.[0],t.search_values?.[1])}}};a(xS,"getSelect");a(HC,"getRecords");a(_n,"getTable");a(qC,"createDeleteResponse");a(GC,"groupRecordsInHistory")});var as=T((Gme,KC)=>{"use strict";var{ResourceBridge:_J}=(YC(),te(VC)),dJ=j();dJ.initSync();var Wd;function fJ(){return Wd||(Wd=new _J,Wd)}a(fJ,"getBridge");KC.exports=fJ()});var zC=T((xme,jC)=>{"use strict";var WC=require("lodash"),ku=require("mathjs"),EJ=require("jsonata"),QC=G();jC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?WC.uniqWith(e,WC.isEqual):e,searchJSON:hJ,mad:$u.bind(null,ku.mad),mean:$u.bind(null,ku.mean),mode:$u.bind(null,ku.mode),prod:$u.bind(null,ku.prod),median:$u.bind(null,ku.median)};function $u(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a($u,"aggregateFunction");function hJ(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(QC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),QC.isEmpty(this.__ala__.res[r])){let s=EJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(hJ,"searchJSON")});var XC=T(($me,JC)=>{"use strict";var lt=require("moment"),$S="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;JC.exports={current_date:()=>lt().utc().format("YYYY-MM-DD"),current_time:()=>lt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return lt(e).utc().format("YYYY");case"month":return lt(e).utc().format("MM");case"day":return lt(e).utc().format("DD");case"hour":return lt(e).utc().format("HH");case"minute":return lt(e).utc().format("mm");case"second":return lt(e).utc().format("ss");case"millisecond":return lt(e).utc().format("SSS");default:break}},date:e=>lt(e).utc().format($S),date_format:(e,t)=>lt(e).utc().format(t),date_add:(e,t,r)=>lt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>lt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=lt(e).utc(),n=lt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>lt().utc().valueOf(),get_server_time:()=>lt().format($S),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format($S)}});var rL=T((Vme,tL)=>{"use strict";var mJ=require("@turf/area"),pJ=require("@turf/length"),SJ=require("@turf/circle"),TJ=require("@turf/difference"),gJ=require("@turf/distance"),RJ=require("@turf/boolean-contains"),AJ=require("@turf/boolean-equal"),OJ=require("@turf/boolean-disjoint"),NJ=require("@turf/helpers"),ZC=R(),Ee=G();tL.exports={geoArea:bJ,geoLength:yJ,geoCircle:IJ,geoDifference:wJ,geoDistance:eL,geoNear:CJ,geoContains:LJ,geoEqual:DJ,geoCrosses:PJ,geoConvert:MJ};var VS="geo1 is required",YS="geo2 is required";function bJ(e){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),mJ.default(e)}a(bJ,"geoArea");function yJ(e,t){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),pJ.default(e,{units:t||"kilometers"})}a(yJ,"geoLength");function IJ(e,t,r){if(Ee.isEmpty(e))throw new Error("point is required");if(Ee.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),SJ.default(e,t,{units:r||"kilometers"})}a(IJ,"geoCircle");function wJ(e,t){if(Ee.isEmpty(e))throw new Error("poly1 is required");if(Ee.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),TJ(e,t)}a(wJ,"geoDifference");function eL(e,t,r){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),gJ.default(e,t,{units:r||"kilometers"})}a(eL,"geoDistance");function CJ(e,t,r,s){if(Ee.isEmpty(e)||Ee.isEmpty(t))return!1;if(Ee.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return eL(e,t,s)<=r}a(CJ,"geoNear");function LJ(e,t){if(Ee.isEmpty(e))throw new Error(VS);if(Ee.isEmpty(e))throw new Error(YS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),RJ.default(e,t)}a(LJ,"geoContains");function DJ(e,t){if(Ee.isEmpty(e))throw new Error(VS);if(Ee.isEmpty(e))throw new Error(YS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),AJ.default(e,t)}a(DJ,"geoEqual");function PJ(e,t){if(Ee.isEmpty(e))throw new Error(VS);if(Ee.isEmpty(e))throw new Error(YS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),!OJ.default(e,t)}a(PJ,"geoCrosses");function MJ(e,t,r){if(Ee.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(Ee.isEmpty(t))throw new Error("geo_type is required");if(Ee.isEmpty(ZC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(ZC.GEO_CONVERSION_ENUM).join(",")}`);return NJ[t](e,r)}a(MJ,"geoConvert")});var Qd=T((Kme,sL)=>{var Co=zC(),Hr=XC(),dn=rL();sL.exports=e=>{e.aggr.mad=e.aggr.MAD=Co.mad,e.aggr.mean=e.aggr.MEAN=Co.mean,e.aggr.mode=e.aggr.MODE=Co.mode,e.aggr.prod=e.aggr.PROD=Co.prod,e.aggr.median=e.aggr.MEDIAN=Co.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Co.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Co.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=dn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=dn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=dn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=dn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=dn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=dn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=dn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=dn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=dn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=dn.geoNear}});var aL=T((Wme,oL)=>{"use strict";var Vu=require("lodash"),lr=require("alasql");lr.options.cache=!1;var UJ=Qd(),nL=require("clone"),jd=require("recursive-iterator"),ne=v(),le=G(),Ha=as(),vJ=R(),{hdb_errors:BJ}=Z(),{getDatabases:iL}=(fe(),te(De)),HJ="IS NULL",Gs="There was a problem performing this search. Please check the logs and try again.";UJ(lr);var KS=class{static{a(this,"SQLSearch")}constructor(t,r){if(le.isEmpty(t))throw ne.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 s=await this._checkEmptySQL();if(!le.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Gs)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}}_getColumns(){let t=new jd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(nL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Vu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=iL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(le.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new jd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!le.isEmpty(r)&&r.right)if(le.isNotEmptyAndHasValue(r.right.value)){let s=le.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=le.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&le.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new jd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!le.isEmpty(vJ.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)?s.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)s.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,...s])}}}_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((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Vu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(le.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);le.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.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 lr.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(nL(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}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(HJ)>-1&&this.tables.forEach(n=>{let i={columnid:iL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Vu.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.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 Ha.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await Ha.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}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,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Ha.getDataByValue(c,E.operation);if(u)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,le.autoCast(m)));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(m)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Ha.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,le.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,le.autoCast(d)))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(l),new Error(Gs)}}}_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 lr.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.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 n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";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(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Vu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new jd(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Vu.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Gs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Ha.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let m=n.columns[h],S=E[m]===void 0?null:E[m];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(BJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await Ha.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Gs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};oL.exports=KS});var _r=T((jme,cL)=>{"use strict";var qJ=zy();cL.exports={searchByConditions:FJ,searchByHash:xJ,searchByValue:kJ,search:$J};var WS=as(),{transformReq:QS}=G(),GJ=aL();async function FJ(e){return QS(e),WS.searchByConditions(e)}a(FJ,"searchByConditions");async function xJ(e){QS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of WS.searchByHash(e))r&&t.push(r);return t}a(xJ,"searchByHash");async function kJ(e){QS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of WS.searchByValue(e))t.push(r);return t}a(kJ,"searchByValue");function $J(e,t){try{let r=new qJ(e);r.validate(),new GJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a($J,"search")});var Wn=T((Jme,dL)=>{"use strict";var Yu=require("crypto"),VJ=j(),{CONFIG_PARAMS:YJ}=R(),lL="aes-256-cbc",KJ=32,WJ=16,jS=64,_L=32,QJ=jS+_L,uL=new Map;dL.exports={encrypt:jJ,decrypt:zJ,createNatsTableStreamName:JJ};function jJ(e){let t=Yu.randomBytes(KJ),r=Yu.randomBytes(WJ),s=Yu.createCipheriv(lL,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(jJ,"encrypt");function zJ(e){let t=e.substr(0,jS),r=e.substr(jS,_L),s=e.substr(QJ,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Yu.createDecipheriv(lL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(zJ,"decrypt");function JJ(e,t){let r=VJ.get(YJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=uL.get(r);return s||(s=Yu.createHash("md5").update(r).digest("hex"),uL.set(r,s)),s}a(JJ,"createNatsTableStreamName")});var Mi=T((epe,EL)=>{"use strict";var Zme=_r(),zd=v(),fL=Dd(),XJ=Wn(),Jd=G(),{handleHDBError:Xd,hdb_errors:ZJ}=Z(),{HDB_ERROR_MSGS:Zd,HTTP_STATUS_CODES:zS}=ZJ,e2=j();e2.initSync();var{getDatabases:JS}=(fe(),te(De));EL.exports={describeAll:t2,describeTable:ef,describeSchema:r2};async function t2(e){try{let t=Jd.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=JS(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await ef({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await ef({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){zd.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return zd.error("Got an error in describeAll"),zd.error(t),Xd(new Error,Zd.DESCRIBE_ALL_ERR)}}a(t2,"describeAll");async function ef(e,t){Jd.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=fL.describe_table(e);if(i)throw i;let c=JS()[r];if(!c)throw Xd(new Error,Zd.SCHEMA_NOT_FOUND(e.schema),zS.NOT_FOUND);let u=c[s];if(!u)throw Xd(new Error,Zd.TABLE_NOT_FOUND(e.schema,e.table),zS.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(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={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};d.clustering_stream_name=XJ.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){zd.warn(`unable to stat table dbi due to ${f}`)}return d}a(ef,"descTable");async function r2(e){Jd.transformReq(e);let t=fL.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 s=e.schema.toString(),i=JS()[s];if(!i)throw Xd(new Error,Zd.SCHEMA_NOT_FOUND(e.schema),zS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Jd.isEmpty(u)||u.describe){let _=await ef({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(r2,"describeSchema")});var cs=T((npe,TL)=>{var s2=Fn(),{callbackify:mL,promisify:n2}=require("util"),{getDatabases:pL}=(fe(),te(De));TL.exports={setSchemaDataToGlobal:hL,getTableSchema:i2,getSystemSchema:o2,setSchemaDataToGlobalAsync:n2(hL)};var SL=Mi(),rpe=mL(SL.describeAll),spe=mL(SL.describeTable);function hL(e){global.hdb_schema=pL(),e&&e()}a(hL,"setSchemaDataToGlobal");function i2(e,t,r){let s=pL()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(i2,"getTableSchema");function o2(){return s2}a(o2,"getSystemSchema")});var dr=T((ope,OL)=>{"use strict";var rf=zp(),vt=G(),a2=require("util"),sf=as(),c2=cs(),gL=v(),{handleHDBError:Lo,hdb_errors:u2}=Z(),{HTTP_STATUS_CODES:Do}=u2,l2=a2.promisify(c2.getTableSchema),_2="updated",RL="inserted",AL="upserted";OL.exports={insert:f2,update:E2,upsert:h2,validation:d2,flush:m2};async function d2(e){if(vt.isEmpty(e))throw new Error("invalid update parameters defined.");if(vt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(vt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await l2(e.schema,e.table),r=rf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&vt.isEmptyOrZeroLength(c[s]))throw gL.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(!vt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw gL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!vt.isEmpty(c[s])&&c[s]!==""&&n.has(vt.autoCast(c[s]))&&(c.skip=!0),n.add(vt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(d2,"validation");async function f2(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rf(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await sf.createRecords(e);return tf(RL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(f2,"insertData");async function E2(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rf(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await sf.updateRecords(e);return vt.isEmpty(s.existing_rows)?tf(_2,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):tf(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(E2,"updateData");async function h2(e){if(e.operation!=="upsert")throw Lo(new Error,"invalid operation, must be upsert",Do.INTERNAL_SERVER_ERROR);let t=rf(e);if(t)throw Lo(new Error,t.message,Do.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Lo(new Error,r,Do.BAD_REQUEST);let s=await sf.upsertRecords(e);return tf(AL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(h2,"upsertData");function tf(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===RL?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===AL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(tf,"returnObject");function m2(e){return vt.transformReq(e),sf.flush(e.schema,e.table)}a(m2,"flush")});var ZS=T((cpe,yL)=>{var p2=Ve(),XS=require("joi"),{hdb_table:S2,hdb_database:NL}=cn(),bL={schema:NL,database:NL,table:S2},T2={date:XS.date().iso().required()},g2={timestamp:XS.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};yL.exports=function(e,t){let r=t==="timestamp"?{...bL,...g2}:{...bL,...T2},s=XS.object(r);return p2.validateBySchema(e,s)}});var CL=T((upe,wL)=>{var R2=Ve(),eT=require("joi"),{hdb_table:A2,hdb_database:IL}=cn(),O2=eT.object({schema:IL,database:IL,table:A2,hash_values:eT.array().required(),ids:eT.array()});wL.exports=function(e){return R2.validateBySchema(e,O2)}});var nT=T((lpe,LL)=>{"use strict";var tT=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},rT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},sT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};LL.exports={InsertObject:tT,NoSQLSeachObject:rT,DeleteResponseObject:sT}});var Uo=T((dpe,vL)=>{"use strict";var PL=ZS(),N2=CL(),Po=G(),DL=require("moment"),ML=v(),{promisify:b2,callbackify:y2}=require("util"),Mo=R(),I2=cs(),iT=b2(I2.getTableSchema),oT=as(),{DeleteResponseObject:w2}=nT(),{handleHDBError:Ui,hdb_errors:C2}=Z(),{HDB_ERROR_MSGS:nf,HTTP_STATUS_CODES:vi}=C2,L2="records successfully deleted",D2=y2(UL);vL.exports={delete:D2,deleteRecord:UL,deleteFilesBefore:P2,deleteAuditLogsBefore:M2};async function P2(e){let t=PL(e,"date");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),!DL(e.date,DL.ISO_8601).isValid())throw Ui(new Error,nf.INVALID_DATE,vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,nf.INVALID_DATE,!0);let s=Po.checkSchemaTableExist(e.schema,e.table);if(s)throw Ui(new Error,s,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,s,!0);let n=await oT.deleteRecordsBefore(e);if(await iT(e.schema,e.table),ML.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(P2,"deleteFilesBefore");async function M2(e){let t=PL(e,"timestamp");if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);if(Po.transformReq(e),isNaN(e.timestamp))throw Ui(new Error,nf.INVALID_VALUE("Timestamp"),vi.BAD_REQUEST,Mo.LOG_LEVELS.ERROR,nf.INVALID_VALUE("Timestamp"),!0);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);let s=await oT.deleteAuditLogsBefore(e);return await iT(e.schema,e.table),ML.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(M2,"deleteAuditLogsBefore");async function UL(e){e.ids&&(e.hash_values=e.ids);let t=N2(e);if(t)throw Ui(t,t.message,vi.BAD_REQUEST,void 0,void 0,!0);Po.transformReq(e);let r=Po.checkSchemaTableExist(e.schema,e.table);if(r)throw Ui(new Error,r,vi.NOT_FOUND,Mo.LOG_LEVELS.ERROR,r,!0);try{await iT(e.schema,e.table);let s=await oT.deleteRecords(e);return Po.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${L2}`),s}catch(s){if(s.message===Mo.SEARCH_NOT_FOUND_MESSAGE){let n=new w2;return n.message=Mo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UL,"deleteRecord")});var of=T((Epe,qL)=>{var U2=require("crypto"),BL=9;function v2(e){let t=H2(BL),r=HL(e+t);return t+r}a(v2,"createHash");function B2(e,t){let r=e.substr(0,BL),s=r+HL(t+r);return e===s}a(B2,"validateHash");function H2(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(H2,"generateSalt");function HL(e){return U2.createHash("md5").update(e).digest("hex")}a(HL,"md5");qL.exports={hash:v2,validate:B2}});var FL=T((mpe,GL)=>{var aT=Ve(),Qt={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 q2(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,aT.validateObject(e,Qt)}a(q2,"addUserValidation");function G2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,aT.validateObject(e,Qt)}a(G2,"alterUserValidation");function F2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,aT.validateObject(e,Qt)}a(F2,"dropUserValidation");GL.exports={addUserValidation:q2,alterUserValidation:G2,dropUserValidation:F2}});var ke=T((Tpe,kL)=>{"use strict";var{platform:Spe}=require("os"),x2="nats-server.zip",cT="nats-server",k2=process.platform==="win32"?`${cT}.exe`:cT,uT="HDB",$2=/^[^\s.,*>]+$/,xL="__request__",V2=a(e=>`${e}.${xL}`,"REQUEST_SUBJECT"),Y2={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},K2={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},W2={HUB:"hub.pid",LEAF:"leaf.pid"},Q2={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},j2={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:uT,deliver_subject:"__HDB__.WORKQUEUE"},z2={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:uT,deliver_subject:"HDB.SCHEMAQUEUE"},J2={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:uT,deliver_subject:"HDB.USERQUEUE"},X2={SUCCESS:"success",ERROR:"error"},Z2={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},e4={TXN:"txn",MSGID:"msgid"},qa={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},t4={[qa.ERR]:1,[qa.WRN]:2,[qa.INF]:3,[qa.DBG]:4,[qa.TRC]:5},r4={debug:"-D",trace:"-DVV"};kL.exports={NATS_SERVER_ZIP:x2,NATS_SERVER_NAME:cT,NATS_BINARY_NAME:k2,PID_FILES:W2,NATS_CONFIG_FILES:K2,SERVER_SUFFIX:Q2,WORK_QUEUE_CONSUMER_NAMES:j2,SCHEMA_QUEUE_CONSUMER_NAMES:z2,USER_QUEUE_CONSUMER_NAMES:J2,NATS_TERM_CONSTRAINTS_RX:$2,REQUEST_SUFFIX:xL,UPDATE_REMOTE_RESPONSE_STATUSES:X2,CLUSTER_STATUS_STATUSES:Z2,REQUEST_SUBJECT:V2,SUBJECT_PREFIXES:e4,MSG_HEADERS:Y2,LOG_LEVELS:qa,LOG_LEVEL_FLAGS:r4,LOG_LEVEL_HIERARCHY:t4}});var lT=T((Rpe,$L)=>{"use strict";var s4={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
2
+ "use strict";var pk=Object.create;var jc=Object.defineProperty;var Sk=Object.getOwnPropertyDescriptor;var Tk=Object.getOwnPropertyNames;var gk=Object.getPrototypeOf,Rk=Object.prototype.hasOwnProperty;var a=(e,t)=>jc(e,"name",{value:t,configurable:!0});var Re=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)jc(e,r,{get:t[r],enumerable:!0})},bN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Tk(t))!Rk.call(e,n)&&n!==r&&jc(e,n,{get:()=>t[n],enumerable:!(s=Sk(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?pk(gk(e)):{},bN(t||!e||!e.__esModule?jc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>bN(jc({},"__esModule",{value:!0}),e);var wN=T((Ide,IN)=>{var Ak=require("fast-glob"),{statSync:Um,existsSync:vm,readFileSync:Ok,writeFileSync:Nk}=require("fs"),{spawnSync:bk,spawn:yk,execFileSync:yde}=require("child_process"),{isMainThread:Ik}=require("worker_threads"),{join:yi,relative:yN}=require("path"),{PACKAGE_ROOT:Is}=R(),{tmpdir:wk,platform:Ck}=require("os");require("source-map-support").install();var Lk=["resources","server","dataLayer","components"],zc="ts-build",Bm,Dk=__filename.endsWith("tsBuild.js");if(Dk){if(Ik){let r;try{Um(yi(Is,zc)),r=!0}catch{}if(r)for(let s of Ak.sync(Lk.map(n=>n+"/**/*.ts"),{cwd:Is})){let n=0,i=0;try{n=Um(yi(Is,s)).mtimeMs-5e3,i=Um(yi(Is,zc,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),Bm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Bm=!0;if(Bm){let s=yi(Is,"node_modules/.bin/tsc");Ck()==="win32"&&(s+=".cmd");let n=bk(s,{cwd:Is});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=yi(wk(),"harperdb-tsc.pid"),o;if(vm(i))try{process.kill(+Ok(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=yk(s,["--watch"],{cwd:Is,detached:!0,stdio:"ignore"});Nk(i,c.pid.toString()),c.unref()}}}}let e=IN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Is)&&!s[0].includes("node_modules")){let i=yN(Is,s[0]),o;i.startsWith(zc)?o=yi(Is,yN(zc,i)):o=yi(Is,zc,i);let c=yi(o,r),u=c+".js";if(vm(u))return u;if(c.includes(".")&&vm(c))return c}return t(r,s,n)}}});var R=T((Lde,kN)=>{"use strict";var ts=require("path"),Pk=require("fs"),{relative:wde,join:Cde}=ts,{existsSync:Mk}=Pk;function Uk(){let e=__dirname;for(;!Mk(ts.join(e,"package.json"));){let t=ts.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Uk,"getHDBPackageRoot");var Ii=Uk(),CN="js",K_=CN,vk="harperdb-config.yaml",Bk="defaultConfig.yaml",Hk="hdb",LN=`harperdb.${K_}`,DN=`customFunctionsServer.${K_}`,qk=`restartHdb.${K_}`,qm="HarperDB",Y_="Custom Functions",W_="Clustering Hub",Q_="Clustering Leaf",Gk="Clustering Ingest Service",Fk="Clustering Reply Service",xk="foreground.pid",kk="hdb.pid",$k="data",Vk={HDB:qm,CLUSTERING_HUB:W_,CLUSTERING_LEAF:Q_,CLUSTERING_INGEST_SERVICE:Gk,CLUSTERING_REPLY_SERVICE:Fk,CUSTOM_FUNCTIONS:Y_,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"},Yk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Kk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Wk={harperdb:qm,"clustering hub":W_,"clustering leaf":Q_,"custom functions":Y_,custom_functions:Y_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Qk={CLUSTERING_HUB_PROC_DESCRIPTOR:W_,CLUSTERING_LEAF_PROC_DESCRIPTOR:Q_},Hm={HDB:ts.join(Ii,"server/harperdb"),CUSTOM_FUNCTIONS:ts.join(Ii,"server/customFunctions"),CLUSTERING_HUB:ts.join(Ii,"server/nats"),CLUSTERING_LEAF:ts.join(Ii,"server/nats")},jk={HDB:ts.join(Hm.HDB,LN),CUSTOM_FUNCTIONS:ts.join(Hm.CUSTOM_FUNCTIONS,DN)},zk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:ts.join(Ii,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:ts.join(Ii,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:ts.join(Ii,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Jk={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},PN="support@harperdb.io",Xk="customer-success@harperdb.io",MN=1,Zk=4141,UN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",e$="https://www.harperdb.io/product",t$=`For support, please submit a request at ${UN} or contact ${PN}`,vN=`For license support, please contact ${Xk}`,r$="None of the specified records were found.",s$="hash attribute not found",n$=`Your current license only supports ${MN} role. ${vN}`,i$="Your current license only supports 3 connections to a node.",o$="127.0.0.1",a$=1,c$=/^\.$/,u$=/^\.\.$/,l$="U+002E",_$=/\//g,d$="U+002F",f$=/U\+002F/g,E$=/^U\+002E$/,h$=/^U\+002EU\+002E$/,m$="d",p$=999999,S$="*",T$="--max-old-space-size=",g$="system",R$="__hdb_hash",A$=".harperdb",O$=".hdb",N$="keys",b$="hdb_boot_properties.file",y$=".updateConfig.json",I$="SIGTSTP",w$=24,C$=6e4,L$=448,D$="blob",P$="trash",M$="database",U$="schema",v$="transactions",B$=".count",H$="id",q$="PROCESS_NAME",BN={SETTINGS_PATH_KEY:"settings_path"},HN=require("lodash"),G$={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},F$={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},x$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},k$={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"},$$={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"},Dr="hdb_internal:",V$={CREATE_SCHEMA:Dr+"create_schema",CREATE_TABLE:Dr+"create_table",CREATE_ATTRIBUTE:Dr+"create_attribute",ADD_USER:Dr+"add_user",ALTER_USER:Dr+"alter_user",DROP_USER:Dr+"drop_user",HDB_NODES:Dr+"hdb_nodes",HDB_USERS:Dr+"hdb_users",HDB_WORKERS:Dr+"hdb_workers",CATCHUP:Dr+"catchup",SCHEMA_CATCHUP:Dr+"schema_catchup",WORKER_ROOM:Dr+"cluster_workers"},Y$={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"},K$="060493.ks",W$=".license",Q$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},J={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",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"},j$={CSV:".csv",JSON:".json"},z$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},J$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jc={};Jc[J.INSERT]=J.INSERT;Jc[J.UPDATE]=J.UPDATE;Jc[J.UPSERT]=J.UPSERT;Jc[J.DELETE]=J.DELETE;var we=Object.create(null);we[J.DESCRIBE_ALL]=J.DESCRIBE_ALL;we[J.DESCRIBE_TABLE]=J.DESCRIBE_TABLE;we[J.DESCRIBE_SCHEMA]=J.DESCRIBE_SCHEMA;we[J.READ_LOG]=J.READ_LOG;we[J.ADD_NODE]=J.ADD_NODE;we[J.LIST_USERS]=J.LIST_USERS;we[J.LIST_ROLES]=J.LIST_ROLES;we[J.USER_INFO]=J.USER_INFO;we[J.SQL]=J.SQL;we[J.GET_JOB]=J.GET_JOB;we[J.SEARCH_JOBS_BY_START_DATE]=J.SEARCH_JOBS_BY_START_DATE;we[J.DELETE_FILES_BEFORE]=J.DELETE_FILES_BEFORE;we[J.EXPORT_LOCAL]=J.EXPORT_LOCAL;we[J.EXPORT_TO_S3]=J.EXPORT_TO_S3;we[J.CLUSTER_STATUS]=J.CLUSTER_STATUS;we[J.REMOVE_NODE]=J.REMOVE_NODE;we[J.RESTART]=J.RESTART;we[J.CUSTOM_FUNCTIONS_STATUS]=J.CUSTOM_FUNCTIONS_STATUS;we[J.GET_CUSTOM_FUNCTIONS]=J.GET_CUSTOM_FUNCTIONS;we[J.GET_CUSTOM_FUNCTION]=J.GET_CUSTOM_FUNCTION;we[J.SET_CUSTOM_FUNCTION]=J.SET_CUSTOM_FUNCTION;we[J.DROP_CUSTOM_FUNCTION]=J.DROP_CUSTOM_FUNCTION;we[J.ADD_CUSTOM_FUNCTION_PROJECT]=J.ADD_CUSTOM_FUNCTION_PROJECT;we[J.DROP_CUSTOM_FUNCTION_PROJECT]=J.DROP_CUSTOM_FUNCTION_PROJECT;we[J.PACKAGE_CUSTOM_FUNCTION_PROJECT]=J.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[J.DEPLOY_CUSTOM_FUNCTION_PROJECT]=J.DEPLOY_CUSTOM_FUNCTION_PROJECT;var X$={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Z$={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},qN={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"},eV=HN.invert(qN),tV={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"},y={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_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",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",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_SECUREPORT:"operationsApi_network_securePort",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",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_PATH:"storage_path",STORAGE_AUDIT_PATH:"storage_audit_path",DATABASES:"databases",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication",COMPONENTSROOT:"componentsRoot",TLS_CERTIFICATE:"tls_certificate",TLS_PRIVATEKEY:"tls_privateKey",TLS_CERTIFICATEAUTHORITY:"tls_certificateAuthority"},GN={settings_path:BN.SETTINGS_PATH_KEY,hdb_root_key:y.ROOTPATH,hdb_root:y.ROOTPATH,rootpath:y.ROOTPATH,server_port_key:y.OPERATIONSAPI_NETWORK_PORT,server_port:y.OPERATIONSAPI_NETWORK_PORT,cert_key:y.TLS_CERTIFICATE,certificate:y.TLS_CERTIFICATE,private_key_key:y.TLS_PRIVATEKEY,private_key:y.TLS_PRIVATEKEY,http_secure_enabled_key:y.OPERATIONSAPI_NETWORK_HTTPS,https_on:y.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:y.OPERATIONSAPI_NETWORK_CORS,cors_on:y.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:y.LOGGING_LEVEL,log_level:y.LOGGING_LEVEL,log_path_key:y.LOGGING_ROOT,log_path:y.LOGGING_ROOT,clustering_node_name_key:y.CLUSTERING_NODENAME,node_name:y.CLUSTERING_NODENAME,clustering_enabled_key:y.CLUSTERING_ENABLED,clustering:y.CLUSTERING_ENABLED,max_http_threads:y.THREADS,max_hdb_processes:y.THREADS,server_timeout_key:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:y.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:y.LOGGING_AUDITLOG,disable_transaction_log:y.LOGGING_AUDITLOG,operation_token_timeout_key:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_port_key:y.HTTP_PORT,custom_functions_port:y.HTTP_PORT,custom_functions_directory_key:y.COMPONENTSROOT,custom_functions_directory:y.COMPONENTSROOT,max_custom_function_processes:y.THREADS,log_to_file:y.LOGGING_FILE,log_to_stdstreams:y.LOGGING_STDSTREAMS,local_studio_on:y.LOCALSTUDIO_ENABLED,clustering_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:y.CLUSTERING_USER,clustering_enabled:y.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:y.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:y.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:y.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:y.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:y.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:y.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:y.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:y.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:y.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:y.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:y.CLUSTERING_NODENAME,clustering_tls_certificate:y.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:y.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:y.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:y.CLUSTERING_TLS_INSECURE,clustering_tls_verify:y.CLUSTERING_TLS_VERIFY,clustering_loglevel:y.CLUSTERING_LOGLEVEL,clustering_republishmessages:y.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:y.CLUSTERING_DATABASELEVEL,customfunctions_network_port:y.HTTP_PORT,customfunctions_tls_certificate:y.TLS_CERTIFICATE,customfunctions_network_cors:y.HTTP_CORS,customfunctions_network_corsaccesslist:y.HTTP_CORSACCESSLIST,customfunctions_network_headerstimeout:y.HTTP_HEADERSTIMEOUT,customfunctions_network_https:y.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:y.TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY,customfunctions_network_timeout:y.HTTP_TIMEOUT,http_threads:y.THREADS,threads:y.THREADS,http_session_affinity:y.HTTP_SESSIONAFFINITY,http_compressionthreshold:y.HTTP_COMPRESSIONTHRESHOLD,http_cors:y.HTTP_CORS,http_corsaccesslist:y.HTTP_CORSACCESSLIST,http_headerstimeout:y.HTTP_HEADERSTIMEOUT,http_keepalivetimeout:y.HTTP_KEEPALIVETIMEOUT,http_timeout:y.HTTP_TIMEOUT,http_port:y.HTTP_PORT,http_secureport:y.HTTP_SECUREPORT,customfunctions_processes:y.THREADS,customfunctions_root:y.COMPONENTSROOT,localstudio_enabled:y.LOCALSTUDIO_ENABLED,logging_file:y.LOGGING_FILE,logging_level:y.LOGGING_LEVEL,logging_root:y.LOGGING_ROOT,logging_rotation_enabled:y.LOGGING_ROTATION_ENABLED,logging_rotation_compress:y.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:y.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:y.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:y.LOGGING_ROTATION_PATH,logging_stdstreams:y.LOGGING_STDSTREAMS,logging_auditlog:y.LOGGING_AUDITLOG,logging_auditretention:y.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:y.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:y.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_network_cors:y.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:y.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:y.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:y.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:y.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:y.OPERATIONSAPI_NETWORK_PORT,operationsapi_network_secureport:y.OPERATIONSAPI_NETWORK_SECUREPORT,operationsapi_tls_certificate:y.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_tls_privatekey:y.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:y.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY,operationsapi_network_timeout:y.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_root:y.ROOTPATH,databases:y.DATABASES,storage_path:y.STORAGE_PATH,ignorescripts:y.IGNORE_SCRIPTS,mqtt_network_port:y.MQTT_NETWORK_PORT,mqtt_websocket:y.MQTT_WEBSOCKET,mqtt_network_secureport:y.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:y.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:y.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:y.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:y.AUTHENTICATION_CACHETTL,authentication_enablesessions:y.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:y.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:y.AUTHENTICATION_REFRESHTOKENTIMEOUT,componentsroot:y.COMPONENTSROOT,tls_certificate:y.TLS_CERTIFICATE,tls_privatekey:y.TLS_PRIVATEKEY,tls_certificateauthority:y.TLS_CERTIFICATEAUTHORITY};for(let e in y){let t=y[e];GN[t.toLowerCase()]=t}var rV={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},sV={csv_file_load:"csv_file_load",csv_data_load:J.CSV_DATA_LOAD,csv_url_load:J.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"},nV={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"},iV={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},oV={VERSION_DEFAULT:"2.2.0"},aV={DEVELOPMENT:8192,DEFAULT:512},cV={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"},uV={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"},lV={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},FN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},_V=Symbol("metadata"),dV="__clustering__",fV=Object.values(FN),EV=15984864e5,xN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},hV=HN.invert(xN),mV={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"},pV=111,SV=`\r
3
+ `,TV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},gV=["*","%"],RV="unauthorized_access",AV="func_val",OV={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},NV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},bV={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"},yV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},IV={HTTP:"http"},wV={STOPPED:"stopped",ONLINE:"online"},CV="3.x.x",LV={SUCCESS:"success",FAILURE:"failure"},DV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};kN.exports={LOCAL_HARPERDB_OPERATIONS:we,HDB_SUPPORT_ADDRESS:PN,HDB_SUPPORT_URL:UN,HDB_PRICING_URL:e$,SUPPORT_HELP_MSG:t$,LICENSE_HELP_MSG:vN,HDB_PROC_NAME:LN,HDB_PROC_DESCRIPTOR:qm,CLUSTERING_LEAF_PROC_DESCRIPTOR:Q_,CLUSTERING_HUB_PROC_DESCRIPTOR:W_,SYSTEM_SCHEMA_NAME:g$,HASH_FOLDER_NAME:R$,HDB_HOME_DIR_NAME:A$,UPDATE_FILE_NAME:y$,LICENSE_KEY_DIR_NAME:N$,BOOT_PROPS_FILE_NAME:b$,JOB_TYPE_ENUM:sV,JOB_STATUS_ENUM:Q$,SYSTEM_TABLE_NAMES:k$,SYSTEM_TABLE_HASH_ATTRIBUTES:$$,OPERATIONS_ENUM:J,VALID_S3_FILE_TYPES:j$,S3_BUCKET_AUTH_KEYS:z$,VALID_SQL_OPS_ENUM:J$,GEO_CONVERSION_ENUM:Z$,HDB_SETTINGS_NAMES:qN,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:eV,SERVICE_ACTIONS_ENUM:X$,CLUSTER_MESSAGE_TYPE_ENUM:nV,CLUSTER_CONNECTION_DIRECTION_ENUM:iV,CLUSTER_EVENTS_DEFS_ENUM:cV,PERIOD_REGEX:c$,DOUBLE_PERIOD_REGEX:u$,UNICODE_PERIOD:l$,FORWARD_SLASH_REGEX:_$,UNICODE_FORWARD_SLASH:d$,ESCAPED_FORWARD_SLASH_REGEX:f$,ESCAPED_PERIOD_REGEX:E$,ESCAPED_DOUBLE_PERIOD_REGEX:h$,REG_KEY_FILE_NAME:K$,RESTART_TIMEOUT_MS:C$,HDB_FILE_PERMISSIONS:L$,DATABASES_DIR_NAME:M$,LEGACY_DATABASES_DIR_NAME:U$,TRANSACTIONS_DIR_NAME:v$,LIMIT_COUNT_NAME:B$,ID_ATTRIBUTE_STRING:H$,INSERT_MODULE_ENUM:F$,UPGRADE_JSON_FIELD_NAMES_ENUM:x$,RESTART_CODE:I$,RESTART_CODE_NUM:w$,CLUSTER_OPERATIONS:Jc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:Y$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Dr,INTERNAL_SC_CHANNELS:V$,CLUSTERING_MESSAGE_TYPES:mV,HDB_FILE_SUFFIX:O$,BLOB_FOLDER_NAME:D$,HDB_TRASH_DIR:P$,ORIGINATOR_SET_VALUE:pV,LICENSE_VALUES:oV,RAM_ALLOCATION_ENUM:aV,TIME_STAMP_NAMES_ENUM:FN,TIME_STAMP_NAMES:fV,PERMS_UPDATE_RELEASE_TIMESTAMP:EV,SEARCH_NOT_FOUND_MESSAGE:r$,SEARCH_ATTRIBUTE_NOT_FOUND:s$,LICENSE_ROLE_DENIED_RESPONSE:n$,LICENSE_MAX_CONNS_REACHED:i$,BASIC_LICENSE_MAX_NON_CU_ROLES:MN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Zk,VALUE_SEARCH_COMPARATORS:xN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:hV,LICENSE_FILE_NAME:W$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:uV,NEW_LINE:SV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:a$,MOMENT_DAYS_TAG:m$,API_TURNOVER_SEC:p$,LOOPBACK:o$,CODE_EXTENSION:K_,WILDCARD_SEARCH_VALUE:S$,NODE_ERROR_CODES:lV,JAVASCRIPT_EXTENSION:CN,PERMS_CRUD_ENUM:TV,UNAUTHORIZED_PERMISSION_NAME:RV,SEARCH_WILDCARDS:gV,FUNC_VAL:AV,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:OV,JWT_ENUM:NV,CLUSTERING_FLAG:dV,ITC_EVENT_TYPES:bV,CUSTOM_FUNCTION_PROC_NAME:DN,CUSTOM_FUNCTION_PROC_DESCRIPTOR:Y_,SERVICES:yV,THREAD_TYPES:IV,MEM_SETTING_KEY:T$,HDB_RESTART_SCRIPT:qk,PROCESS_DESCRIPTORS:Vk,SERVICE_SERVERS:jk,SERVICE_SERVERS_CWD:Hm,PROCESS_DESCRIPTORS_VALIDATE:Wk,LAUNCH_SERVICE_SCRIPTS:zk,LOG_LEVELS:Kk,PROCESS_NAME_ENV_PROP:q$,LOG_NAMES:Yk,PM2_PROCESS_STATUSES:wV,CONFIG_PARAM_MAP:GN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:vk,HDB_DEFAULT_CONFIG_FILE:Bk,ROLE_TYPES_ENUM:Jk,BOOT_PROP_PARAMS:BN,INSTALL_PROMPTS:G$,HDB_ROOT_DIR_NAME:Hk,CLUSTERING_PROCESSES:Qk,FOREGROUND_PID_FILE:xk,PACKAGE_ROOT:Ii,PRE_4_0_0_VERSION:CV,DATABASES_PARAM_CONFIG:rV,METADATA_PROPERTY:_V,AUTH_AUDIT_STATUS:LV,AUTH_AUDIT_TYPES:DV,HDB_PID_FILE:kk,DEFAULT_DATABASE_NAME:$k,LEGACY_CONFIG_PARAMS:tV};wN()});var ho=T((Pde,YN)=>{"use strict";var $N=require("minimist");YN.exports=PV;function PV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=VN(process.env),s=VN($N(process.argv))):(r=process.env,s=$N(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(PV,"assignCMDENVVariables");function VN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(VN,"objKeysToLowerCase")});var U=T((Ude,Ym)=>{"use strict";var mo=require("fs-extra"),{workerData:MV,threadId:UV}=require("worker_threads"),qn=require("path"),QN=require("yaml"),jN=require("properties-reader"),St=R(),KN=ho(),vV=require("os"),{PACKAGE_ROOT:Fm}=R(),{_assignPackageExport:BV}=require("../index"),Zc={};for(let e in console)Zc[e]||(Zc[e]=console[e]);var nr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},zN={STDOUT:"stdOut",STDERR:"stdErr"},HV=qn.join(Fm,"logs"),qV=qn.join(Fm,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),GV=1e4,Hn,sn,sr,j_,z_,eu,Ta,Xc;Xc===void 0&&JN();Ym.exports={notify:eb,fatal:tb,error:tu,warn:Vm,info:J_,debug:$m,trace:km,setLogLevel:KV,log_level:sr,loggerWithTag:FV,suppressLogging:xV,initLogSettings:JN,setupConsoleLogging:XN,logCustomLevel:VV,closeLogFile:xm,getLogFilePath:()=>eu,OUTPUTS:zN,AuthAuditLog:jV};BV("logger",Ym.exports);function JN(e=!1){try{if(Xc===void 0||e){xm();let t=YV(),r=KN(["ROOTPATH"]);try{Xc=jN(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!mo.pathExistsSync(qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw s}({level:sr,config_log_path:z_,to_file:Hn,to_stream:sn}=WV(r.ROOTPATH?qn.join(r.ROOTPATH,St.HDB_CONFIG_FILE):Xc.get("settings_path"))),j_=St.LOG_NAMES.HDB,eu=qn.join(z_,j_)}}catch(t){if(Xc=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=KN(Object.keys(St.CONFIG_PARAM_MAP),!0);for(let o in r){let c=St.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===St.CONFIG_PARAMS.LOGGING_LEVEL){sr=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){sn=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(Hn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=QV();Hn=Hn===void 0?n:Hn,Hn=WN(Hn),sn=sn===void 0?i:sn,sn=WN(sn),sr=sr===void 0?s:sr,z_=HV,j_=St.LOG_NAMES.INSTALL,eu=qn.join(z_,j_);return}throw tu("Error initializing log settings"),tu(t),t}process.env.DEV_MODE&&(sn=!0),XN()}a(JN,"initLogSettings");var Gm=!0;function XN(){Sa("error",tu),Sa("warn",Vm),Sa("log",J_),Sa("info",J_),Sa("debug",$m),Sa("trace",km)}a(XN,"setupConsoleLogging");function Sa(e,t){console[e]=function(...r){if(Gm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Zc[e](...r)}}a(Sa,"logConsole");function FV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(eb),fatal:r(tb),error:r(tu),warn:r(Vm),info:r(J_),debug:r($m),trace:r(km)};function r(s){return function(...n){return s(t,...n)}}}a(FV,"loggerWithTag");function xV(e){try{Gm=!1,e()}finally{Gm=!0}}a(xV,"suppressLogging");var kV=MV?.name?.replace(/ /g,"-")||"main";function Gn(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-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||kV+"/"+UV);c<n;c++){let _=t[c];_ instanceof Error&&_.stack?s+=_.stack:typeof _=="object"?s+=JSON.stringify(_):s+=_,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
4
+ `}a(Gn,"createLogRecord");function ru(e){Hn&&ZN(e),sn&&process.stdout.write(e)}a(ru,"logStdOut");function X_(e){Hn&&ZN(e),sn&&process.stderr.write(e)}a(X_,"logStdErr");function ZN(e){$V(),Ta?mo.appendFileSync(Ta,e):Zc.log(e)}a(ZN,"logToFile");function xm(){try{mo.closeSync(Ta)}catch{}Ta=null}a(xm,"closeLogFile");function $V(){if(!Ta){try{if(!eu)debugger;Ta=mo.openSync(eu,"a")}catch(e){Zc.error(e)}setTimeout(()=>{xm()},GV).unref()}}a($V,"openLogFile");function J_(...e){nr[sr]<=nr.info&&ru(Gn("info",e))}a(J_,"info");function km(...e){nr[sr]<=nr.trace&&ru(Gn("trace",e))}a(km,"trace");function tu(...e){nr[sr]<=nr.error&&X_(Gn("error",e))}a(tu,"error");function $m(...e){nr[sr]<=nr.debug&&ru(Gn("debug",e))}a($m,"debug");function eb(...e){nr[sr]<=nr.notify&&ru(Gn("notify",e))}a(eb,"notify");function tb(...e){nr[sr]<=nr.fatal&&X_(Gn("fatal",e))}a(tb,"fatal");function Vm(...e){nr[sr]<=nr.warn&&X_(Gn("warn",e))}a(Vm,"warn");function VV(e,t,...r){t===zN.STDERR?X_(Gn(e,r)):ru(Gn(e,r))}a(VV,"logCustomLevel");function YV(){let e;try{e=vV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=qn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return mo.existsSync(t)||(t=qn.join(Fm,"utility/hdb_boot_properties.file")),t}a(YV,"getPropsFilePath");function KV(e){sr=e}a(KV,"setLogLevel");function WN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(WN,"autoCastBoolean");function WV(e){try{if(e.includes("config/settings.js")){let o=jN(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:qn.dirname(o.get(St.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(St.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=QN.parseDocument(mo.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===St.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(WV,"getLogConfig");function QV(){try{let e=QN.parseDocument(mo.readFileSync(qV,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(QV,"getDefaultConfig");function jV(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(jV,"AuthAuditLog")});var po=T((Bde,zV)=>{zV.exports={name:"harperdb",version:"4.2.6",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{"minimum-node":"16.0.0","go-lang":"1.21.1","nats-server":"2.10.1"},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: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: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:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","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/abort-controller":"3.374.0","@aws-sdk/client-s3":"3.441.0","@aws-sdk/lib-storage":"3.441.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.2","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.1","@fastify/static":"~6.11.2","@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:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2","fast-glob":"3.3.1",fastify:"~4.24.3","fastify-plugin":"~4.5.1","fs-extra":"11.1.1",graphql:"^16.8.1","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.11.0",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.1",lodash:"4.17.21",mathjs:"11.11.2",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.1",msgpackr:"1.9.9",nats:"2.17.0",needle:"3.2.0","node-stream-zip":"1.15.0","node-unix-socket":"^0.2.5","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.6",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.3.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.21.10","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.2",yaml:"2.3.4"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",esbuild:"^0.19.1",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.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",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.2.2","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var So=T((Hde,rb)=>{"use strict";rb.exports={version:JV,printVersion:XV};var Z_=po();function JV(){if(Z_)return Z_.version}a(JV,"version");function XV(){Z_&&console.log(`HarperDB Version ${Z_.version}`)}a(XV,"printVersion")});var ib=T((Gde,nb)=>{"use strict";var sb=require("semver/functions/major"),ZV=po(),Km=process.versions&&process.versions.node?process.versions.node:void 0;nb.exports=eY;function eY(){let e=ZV.engines["minimum-node"];if(Km&&sb(Km)<sb(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Km}. Please install a version of Node.js that is withing the defined range.`}}a(eY,"checkNodeVersion")});var To={};Fe(To,{server:()=>Tt});var ob,Tt,Pr=Re(()=>{ob=require("../index"),Tt={};(0,ob._assignPackageExport)("server",Tt)});var Wm=T((xde,ab)=>{"use strict";var tY=require("util"),rY=require("path"),sY=require("child_process"),nY=tY.promisify(sY.execFile),iY=1e3*1e3*10;ab.exports={findPs:oY};async function oY(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await nY("ps",["wwxo",`pid,${r}`],{maxBuffer:iY});for(let n of s.trim().split(`
5
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.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,s])=>({pid:Number.parseInt(r,10),name:rY.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(oY,"findPs")});var Ke=T(($de,ub)=>{"use strict";var aY="__dbis__",cY="__txns__",uY="__environment_name__",lY="__dbi_defintion__",_Y={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"},dY=["__createdtime__","__updatedtime__"],fY="\uFFFF",cb={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},EY=Object.values(cb);ub.exports={AUDIT_STORE_NAME:cY,INTERNAL_DBIS_NAME:aY,DBI_DEFINITION_NAME:lY,SEARCH_TYPES:_Y,TIMESTAMP_NAMES:dY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:uY,TRANSACTIONS_DBI_NAMES_ENUM:cb,TRANSACTIONS_DBIS:EY,OVERFLOW_MARKER:fY}});var Mr=T((Vde,Sb)=>{"use strict";var lb=R(),_b=Ke(),db={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},fb=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),Eb={500:fb("There was an error processing your request."),400:"Invalid request"},hY=Eb[db.INTERNAL_SERVER_ERROR],mY={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.`},pY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},SY={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"},TY={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 ${_b.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${_b.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"},gY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${lb.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 ${lb.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"},hb={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"},RY={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."},AY={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`},OY={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"},NY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},bY={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`},mb={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.`},pb={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}`},yY={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."},IY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},wY={...hb,...SY,...mY,...RY,...AY,...OY,...NY,...bY,...gY,...mb,...pb,...yY,...IY,...pY};Sb.exports={CHECK_LOGS_WRAPPER:fb,HDB_ERROR_MSGS:wY,DEFAULT_ERROR_MSGS:Eb,DEFAULT_ERROR_RESP:hY,HTTP_STATUS_CODES:db,LMDB_ERRORS_ENUM:TY,AUTHENTICATION_ERROR_MSGS:hb,VALIDATION_ERROR_MSGS:mb,ITC_ERRORS:pb}});var Z=T((Kde,Rb)=>{"use strict";var ga=Mr(),CY=U(),LY=R(),ed=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Tb),this.statusCode=s||ga.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(ga.DEFAULT_ERROR_MSGS[s]?ga.DEFAULT_ERROR_MSGS[s]:ga.DEFAULT_ERROR_MSGS[ga.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&CY[n](i)}},Qm=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}},jm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Tb(e,t,r,s=LY.LOG_LEVELS.ERROR,n=null,i=!1){if(gb(e))return e;let o=new ed(e,t,r,s,n);return i&&delete o.stack,o}a(Tb,"handleHDBError");function gb(e){return e.__proto__.constructor.name===ed.name}a(gb,"isHDBError");Rb.exports={isHDBError:gb,handleHDBError:Tb,ClientError:Qm,ServerError:jm,hdb_errors:ga}});var He=T((Qde,wb)=>{"use strict";var au=R(),DY=G(),ir=j(),cu=require("path"),PY=require("minimist"),Ab=require("fs-extra"),Ob=require("lodash");ir.initSync();var{CONFIG_PARAMS:wi,DATABASES_PARAM_CONFIG:su,SYSTEM_SCHEMA_NAME:td}=au,nu,iu,ou;function Nb(){if(nu!==void 0)return nu;if(ir.getHdbBasePath()!==void 0)return nu=ir.get(wi.STORAGE_PATH)||cu.join(ir.getHdbBasePath(),au.DATABASES_DIR_NAME),nu}a(Nb,"getBaseSchemaPath");function bb(){if(iu!==void 0)return iu;if(ir.getHdbBasePath()!==void 0)return iu=Ib(td),iu}a(bb,"getSystemSchemaPath");function yb(){if(ou!==void 0)return ou;if(ir.getHdbBasePath()!==void 0)return ou=ir.get(au.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||cu.join(ir.getHdbBasePath(),au.TRANSACTIONS_DIR_NAME),ou}a(yb,"getTransactionAuditStoreBasePath");function MY(e,t){let r=ir.get(wi.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||cu.join(yb(),e.toString())}a(MY,"getTransactionAuditStorePath");function Ib(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(au.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||cu.join(Nb(),e)}a(Ib,"getSchemaPath");function UY(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,PY(process.argv));let s=r[wi.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!DY.isObject(s))throw o;i=s}for(let o of i){let c=o[td];if(!c)continue;let u=ir.get(wi.DATABASES);u=u??{};let _=c?.tables?.[t]?.[su.PATH];if(_)return Ob.set(u,[td,su.TABLES,t,su.PATH],_),ir.setProperty(wi.DATABASES,u),_;let l=c?.[su.PATH];if(l)return Ob.set(u,[td,su.PATH],l),ir.setProperty(wi.DATABASES,u),l}}let n=r[wi.STORAGE_PATH.toUpperCase()];if(n){if(!Ab.pathExistsSync(n))throw new Error(n+" does not exist");let i=cu.join(n,e);return Ab.mkdirsSync(i),ir.setProperty(wi.STORAGE_PATH,n),i}return bb()}a(UY,"initSystemSchemaPaths");function vY(){nu=void 0,iu=void 0,ou=void 0}a(vY,"resetPaths");wb.exports={getBaseSchemaPath:Nb,getSystemSchemaPath:bb,getTransactionAuditStorePath:MY,getTransactionAuditStoreBasePath:yb,getSchemaPath:Ib,initSystemSchemaPaths:UY,resetPaths:vY}});var or=T((Xde,Mb)=>{"use strict";var BY=Mr().LMDB_ERRORS_ENUM,zde=require("lmdb"),HY=Ke(),Jde=require("buffer").Buffer,{OVERFLOW_MARKER:Cb,MAX_SEARCH_KEY_LENGTH:rd}=HY,Lb=["number","string","symbol","boolean","bigint"];function qY(e){if(e=e?.primaryStore||e,!e)throw new Error(BY.ENV_REQUIRED)}a(qY,"validateEnv");function GY(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(GY,"stringifyData");function FY(e){return e instanceof Date?e.valueOf():e}a(FY,"convertKeyValueToWrite");function xY(e){if(e==null)return;if(Lb.includes(typeof e))return e.length>rd?[e.slice(0,rd)+Cb]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Lb.includes(typeof n))n.length>rd?t.push(n.slice(0,rd)+Cb):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(xY,"getIndexedValues");var sd=0,Db=0;function Pb(){Db=Date.now()-performance.now()}a(Pb,"adjustStartTime");Pb();var kY=6e4;setInterval(Pb,kY).unref();function $Y(){let e=performance.now()+Db;return e>sd?(sd=e,e):(sd+=488e-6,sd)}a($Y,"getNextMonotonicTime");Mb.exports={validateEnv:qY,stringifyData:GY,convertKeyValueToWrite:FY,getNextMonotonicTime:$Y,getIndexedValues:xY}});var Ub,ws,zm,uu=Re(()=>{Ub=require("events"),ws=class extends Ub.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new zm;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(){return this.queue?.shift()}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)}},zm=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function rs(e){return e[Kt]||(e[Kt]=Object.create(null))}function ad(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u;switch(o.type){case"String":u=a(function(l){if(!(typeof l=="string"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(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 Cs.ClientError(`${c} must be a string, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Float":u=a(function(l){if(!(typeof l=="number"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a number, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Int":u=a(function(l){if(!(l>>0===l||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs((l>>0)-l)<=1)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Long":u=a(function(l){if(!(Math.round(l)===l&&Math.abs(l)<=9007199254740992||l==null&&o.nullable!==!1))if(typeof l=="number"&&Math.abs(l)<=9007199254740992)l=Math.round(l);else throw new Cs.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Boolean":u=a(function(l){if(!(typeof l=="boolean"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a boolean, attempt to assign ${l}`);rs(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 Cs.ClientError(`${c} must be a Date, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Bytes":u=a(function(l){if(!(l instanceof Uint8Array||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${l}`);rs(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){rs(this)[c]=l},"set");break;default:u=a(function(l){if(!(typeof l=="object"||l==null&&o.nullable!==!1))throw new Cs.ClientError(`${c} must be an object, attempt to assign ${l}`);rs(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Kt];if(l&&c in l)return l[c];let d=this[Ae]?.[c];if(d&&typeof d=="object"){let f=vb(d,o);if(f)return l||(l=this[Kt]=Object.create(null)),l[c]=f}return d},set:u,enumerable:!0,configurable:!0};_.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,_)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Kt];return u?.[o]!==void 0?u[o]:this[Ae]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cs.ClientError("Can not add a property to a sealed table schema");rs(this)[o]=c}),i("deleteProperty",function(o){rs(this)[o]=void 0}),i("toJSON",function(){let o=this[Kt],c;for(let _ in o)c||(c=Object.assign({},this[Ae])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Ae])),Object.assign(c,this)),c||this[Ae]}),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 vb(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[Ae]=n}},ad(r,t)),new r(e)):new nd(e);case Array:let s=new od(e.length);s[Ae]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=vb(o,t?.elements)),s[n]=o}return s}}function cd(e){let t=e[Kt],r;for(let n in t){r||(r=Object.assign({},e[Ae]));let i=t[n];i&&typeof i=="object"&&(i=cd(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Ae])),Object.assign(r,e)),r||e[Ae]}function lu(e){let t;if(e[Ae]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=lu(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Kt];for(let s in r){t||(t=Object.assign({},e[Ae]));let n=r[s];n&&typeof n=="object"&&(n=lu(n)),t[s]=n}return t?Object.freeze(t):e[Ae]||(e.buffer?e:Object.freeze(e))}function id(e){let t=e[Ae];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[go]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[Ae]===n){if(id(i))return!0}else return!0}}else{let r=e[Kt];if(r&&!t)return!0;for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[Ae]===i){if(id(n))return!0}else return!0}else return!0}}return!1}var Cs,Kt,nd,go,od,ud=Re(()=>{Ls();Cs=D(Z()),Kt=Symbol("own-data");a(rs,"getChanges");a(ad,"assignTrackedAccessors");a(vb,"trackObject");nd=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Ae]=t}};ad(nd,{});a(cd,"collapseData");a(lu,"deepFreeze");a(id,"hasChanges");go=Symbol.for("has-array-changes"),od=class extends Array{static{a(this,"TrackedArray")}[go];constructor(t){super(t)}splice(...t){return this[go]=!0,super.splice(...t)}push(...t){return this[go]=!0,super.push(...t)}pop(){return this[go]=!0,super.pop()}unshift(...t){return this[go]=!0,super.unshift(...t)}shift(){return this[go]=!0,super.shift()}};od.prototype.constructor=Array});function WY(){KY=setInterval(function(){for(let e of Jm)if(e.stale){let t=e[Se]?.url;Bb.error(`Transaction was open too long and has been aborted, from table: ${e.lmdbDb?.name+(t?" path: "+t:"")}`),e.resetReadSnapshot()}else e.stale=!0},YY).unref()}var Xm,Bb,VY,Jm,Ro,ld,YY,KY,Zm=Re(()=>{Xm=D(or()),Bb=D(U());Ls();VY=100,Jm=new Set,Ro=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.stale&&(this.stale=!1),this.readTxn?this.readTxn:(this.readTxn=this.lmdbDb.useReadTransaction(),Jm.add(this),this.readTxn)}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(Jm.delete(this),this.readTxn.done(),this.readTxn=null)}addWrite(t){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,Xm.getNextMonotonicTime)());let s=t.retries||0;if(this.resetReadSnapshot(),this.validated<this.writes.length){let l=this.validated;this.validated=this.writes.length;for(let f=l;f<this.validated;f++)this.writes[f]?.validate?.(this.timestamp);let d;for(let f=l;f<this.validated;f++){let E=this.writes[f];E&&(E.before||E.beforeIntermediate)&&(d=!0)}if(d)return(async()=>{for(let f=0;f<2;f++){let E;for(let h=l;h<this.validated;h++){let m=this.writes[h];if(!m)continue;let S=m[f===0?"before":"beforeIntermediate"];if(S){let A=S();E?E.push?E.push(A):E=[E,A]:E=A}}E&&await(E.push?Promise.all(E):E)}return this.commit(t)})()}t?.close&&(this.open=!1);let n,i=[],o=0;this.writes=this.writes.filter(l=>l);let c=a(l=>{l.commit(r,l.entry,s)},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let d=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||d}else u();else for(let d of this.writes)c(d)},"nextCondition");if(this.writes.length<VY>>s?u():n=this.writes[0].store.transaction(()=>{for(let l of this.writes)l.entry=l.store.getEntry(l.key),c(l);return!0}),n)return n.then(l=>l?(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}))):(t?t.retries=s+1:t={retries:1},this.commit(t)));let _={txnTime:r};if(this.next){let l=this.next?.commit(t);if(l?.then)return l?.then(d=>({txnTime:r,next:d}));_.next=l}return _}abort(){this.resetReadSnapshot(),this.writes=[]}},ld=class extends Ro{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Xm.getNextMonotonicTime)())}getReadTxn(){}},YY=3e4;a(WY,"startMonitoringTxns");WY()});function We(e,t,r){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let s=e.transaction=new Ro;e.timestamp&&(s.timestamp=e.timestamp),s[Se]=e,e.resourceCache||(e.resourceCache=[]);let n;try{if(n=t(s),n?.then)return n.then(i,o)}catch(c){o(c)}return i(n);function i(c){let u=s.commit({close:!0});return u.then?u.then(()=>(r?.resetTransaction&&(e.transaction=null),c)):(r?.resetTransaction&&(e.transaction=null),c)}function o(c){throw s.abort(),r?.resetTransaction&&(e.transaction=null),c}}var Hb,Ao=Re(()=>{Hb=require("../index");Ls();Zm();a(We,"transaction");(0,Hb._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.abort=function(e){let t=(e[Se]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function tp(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;if(l==null)throw new Ra.ClientError("Invalid value provided for query, must be non-null value");l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(Fb[d]||d){case"lt":o=!0,c=l;break;case"le":o=!0,c=l,u=!0;break;case"gt":o=l,_=!0;break;case"ge":o=l;break;case"prefix":o=l,c=l.slice(0),c[c.length-1]=on.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+"\uFFFF";break;case"between":o=l[0],o instanceof Date&&(o=o.getTime()),c=l[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case It.SEARCH_TYPES.EQUALS:case void 0:o=l,c=l,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break;default:throw new Ra.ClientError(`Unknown query comparator "${d}"`)}if(r){let S=o;o=c,c=S,S=!_,_=!u,u=S}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new Ra.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=rp(e);if(!S)throw new Ra.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise((N,V)=>setImmediate(()=>{try{N(g&&S(g)?A:Gb.SKIP)}catch($){V($)}})))}let m={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(m):h.getRange(m).map(({value:S})=>S)}function rp(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),Fb[t]||t){case It.SEARCH_TYPES.EQUALS:case void 0:return nn(r,n=>n===s);case It.SEARCH_TYPES.CONTAINS:return nn(r,n=>n?.toString().includes(s));case It.SEARCH_TYPES.ENDS_WITH:case It.SEARCH_TYPES._ENDS_WITH:return nn(r,n=>n?.toString().endsWith(s));case It.SEARCH_TYPES.STARTS_WITH:case It.SEARCH_TYPES._STARTS_WITH:return nn(r,n=>typeof n=="string"&&n.startsWith(s));case It.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),nn(r,n=>(0,on.compareKeys)(n,s[0])>=0&&(0,on.compareKeys)(n,s[1])<=0);case"gt":case It.SEARCH_TYPES.GREATER_THAN:case It.SEARCH_TYPES._GREATER_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)>0);case"ge":case It.SEARCH_TYPES.GREATER_THAN_EQUAL:case It.SEARCH_TYPES._GREATER_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)>=0);case It.SEARCH_TYPES.LESS_THAN:case"lt":case It.SEARCH_TYPES._LESS_THAN:return nn(r,n=>(0,on.compareKeys)(n,s)<0);case"le":case It.SEARCH_TYPES.LESS_THAN_EQUAL:case It.SEARCH_TYPES._LESS_THAN_EQUAL:return nn(r,n=>(0,on.compareKeys)(n,s)<=0);case"ne":return nn(r,n=>(0,on.compareKeys)(n,s)!==0);default:throw new Ra.ClientError(`Unknown query comparator "${t}"`)}}function nn(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function _d(e){if(!e)return;let t=new ep,r,s,n,i,o,c=qb;for(;r=c.exec(e);){i=c.lastIndex;let[,u,_]=r;switch(_){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[l,d]=u.split(",");t.offset=+l,t.limit=d-t.offset}else t.limit=+u;break;case"select":if(u[0]==="["){if(u[u.length-1]!=="]")throw new Error("Unmatched brackets");t.select=u.slice(1,-1).split(","),t.select.asArray=!0}else u.indexOf(",")>-1?t.select=(u.endsWith(",")?u.slice(0,-1):u).split(","):t.select=u;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=u.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}s=void 0;break;case"(":o=u;break;case"=":s?u.length<=2&&(n=u):(n="equals",s=decodeURIComponent(u));break;case"!=":case"<":case"<=":case">":case">=":n=QY[_],s=decodeURIComponent(u);break;case"=*":n="ends_with",s=decodeURIComponent(u);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(u)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${_} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${_} in query ${e}`)}c=s?jY:qb,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Ra,It,on,Gb,QY,Fb,qb,jY,ep,dd=Re(()=>{Ra=D(Z()),It=D(Ke()),on=require("ordered-binary"),Gb=require("lmdb"),QY={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(tp,"idsForCondition");Fb={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(rp,"filterByType");a(nn,"attributeComparator");qb=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,jY=/([^&|*=]+)([&|*=]*)/g;a(_d,"parseQuery");ep=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 s=this.conditions[r];if(s.attribute===t)return s.value}}}});var ip={};Fe(ip,{CONTEXT:()=>Se,ID_PROPERTY:()=>Le,IS_COLLECTION:()=>Ds,RECORD_PROPERTY:()=>Ae,Resource:()=>Ut,SAVE_UPDATES_PROPERTY:()=>Kb,snake_case:()=>JY});function JY(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function xb(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new np(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function ss(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,_;if(r?o?(_=i,o=o[Se]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Se]||i):_=i:(_=n,c=_[Le]??_[this.primaryKey]??null):i?o=i[Se]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let f of n){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)))}else{if(typeof(c=n.url)=="string"){let f=c.indexOf("?");if(f>-1){let h=this.parseQuery(c.slice(f+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,f)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let l;if(u?.ensureLoaded!=null||u?.async?(l=Object.assign({},t),u?.ensureLoaded!=null&&(l.ensureLoaded=u.ensureLoaded),u.async&&(l.async=u.async)):l=t,o.transaction){let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)}else return We(o,()=>{let f=this.getResource(c,o,l);return f.then?f.then(d):d(f)},l);function d(f){if(t.type==="read"&&(f[Kb]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,u,o):t.type==="update"?f.doesExist?.()===!1?f.allowCreate(o.user,_,o):f.allowUpdate(o.user,_,o):t.type==="create"?f.allowCreate(o.user,_,o):f.allowDelete(o.user,u,o);if(E?.then)return E.then(h=>{if(!h)throw new fd(o.user);return typeof _?.then=="function"?_.then(m=>e(f,u,o,m)):e(f,u,o,_)});if(!E)throw new fd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ns(e,t){let r=new Yb.ClientError(`The ${e.constructor.name} does not have a ${t} method implemented`,405);r.allow=[],r.method=t;for(let s of["get","put","post","delete","query","move","copy"])typeof e[s]=="function"&&r.allow.push(s);throw r}function sp(e){let t=e[Ae];if(t){let r=e[Kt];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function kb(e){if(typeof e=="string")return t=>sp(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=sp(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=sp(r);for(let i of e){let o=n(i);o===void 0&&t&&(o=null),s[i]=o}return s}}else throw new Error("Invalid select argument type "+typeof e)}var $b,Vb,Yb,Se,Le,Ds,Kb,Ae,zY,Ut,fd,np,Ls=Re(()=>{$b=require("crypto");uu();Vb=require("../index"),Yb=D(Z());ud();Ao();dd();Se=Symbol.for("context"),Le=Symbol.for("primary-key"),Ds=Symbol("is-collection"),Kb=Symbol("save-updates"),Ae=Symbol("stored-record"),zY={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},Ut=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Le]=t;let s=r?.[Se];this[Se]=s!==void 0?s:r||null}static get=ss(function(t,r,s,n){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){let _=kb(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=ss(function(t,r,s,n){if(Array.isArray(n)&&t[Ds]){let i=[],o=s.authorize;for(let c of n){let u=t.constructor,_=u.getResource(c[u.primaryKey],s,{async:!0});_.then?i.push(_.then(l=>l.put(c,s))):i.push(_.put(c,s))}return Promise.all(i)}return t.put?t.put(n,r):ns(t,"put")},{hasContent:!0,type:"update"});static delete=ss(function(t,r,s,n){return t.delete?t.delete(r):ns(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,$b.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ns(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=ss(function(t,r,s,n){return t.invalidate?t.invalidate(r):ns(t,"delete")},{hasContent:!1,type:"update"});static post=ss(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=ss(function(t,r,s,n){return t.connect?t.connect(n,r):ns(t,"connect")},{hasContent:!0,type:"read"});static subscribe=ss(function(t,r,s,n){return t.subscribe?t.subscribe(r):ns(t,"subscribe")},{type:"read"});static publish=ss(function(t,r,s,n){return t[Le]!=null&&t.update?.(),t.publish?t.publish(n,r):ns(t,"publish")},{hasContent:!0,type:"create"});static search=ss(function(t,r,s,n){let i=t.search?t.search(r):ns(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=kb(o);return i.map(c)}return i},{type:"read"});static query=ss(function(t,r,s,n){return t.search?t.search(n,r):ns(t,"search")},{hasContent:!0,type:"read"});static copy=ss(function(t,r,s,n){return t.copy?t.copy(n,r):ns(t,"copy")},{type:"create"});static move=ss(function(t,r,s,n){return t.move?t.move(n,r):ns(t,"move")},{type:"delete"});post(t){if(this[Ds])return this.constructor.create(this[Le],t,this[Se]);ns(this,"post")}static isCollection(t){return t?.[Ds]}static coerceId(t){return t}static parseQuery(t){return _d(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&zY[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:xb(t,this)}}return xb(t,this)}static getResource(t,r,s){let n,i=r[Se],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;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(n=_?.find(l=>l.constructor===c),n)return n;_||u.asMap.set(t,_=[]),_.push(n=new c(t,i))}else{if(n=u.find(_=>_[Le]===t&&_.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let _=new Map;for(let l of u){let d=l[Le],f=_.get(d);f?f.push(l):_.set(d,[l])}i.resourceCache.length=0,i.resourceCache.asMap=_}}}else n=new c(t,i);return o&&(n[Ds]=!0),n}subscribe(t){return new ws}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new ws}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[Le]}getContext(){return this[Se]}};Ut.prototype[Se]=null;(0,Vb._assignPackageExport)("Resource",Ut);a(JY,"snake_case");fd=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(xb,"pathToId");np=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(ss,"transactional");a(ns,"missingMethod");a(sp,"selectFromObject");a(kb,"transformForSelect")});var Wb={};Fe(Wb,{Resources:()=>Ed,keyArrayToString:()=>Aa,resetResources:()=>XY,resources:()=>Ci});function XY(){return Ci=new Ed}function Aa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Ed,Ci,_u=Re(()=>{Ao();Ed=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)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 s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(t[0]!=="/"&&(t="/"+t),n.relativeURL=t)),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(XY,"resetResources");a(Aa,"keyArrayToString")});var Zb={};Fe(Zb,{HAS_EXPIRATION:()=>dp,LAST_TIMESTAMP_PLACEHOLDER:()=>fu,LOCAL_TIMESTAMP:()=>ZY,METADATA:()=>du,NO_TIMESTAMP:()=>op,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>_p,RecordEncoder:()=>lp,TIMESTAMP_ASSIGN_LAST:()=>t1,TIMESTAMP_ASSIGN_NEW:()=>zb,TIMESTAMP_ASSIGN_PREVIOUS:()=>Jb,TIMESTAMP_PLACEHOLDER:()=>hd,TIMESTAMP_RECORD_PREVIOUS:()=>ap,getUpdateRecord:()=>fp,handleLocalTimeForGets:()=>Td});function Xb(){return Na[0]=Na[0]^64,e1.getFloat64(0)}function Td(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[du];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c};let r=e.get;e.get=function(i,o){let c=r.call(this,i,o);return c?.[du]>=0?c.value:c};let s=e.getRange;e.getRange=function(i){let o=s.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[du];return _>=0&&(c.metadataFlags=_,c.localTime=u.localTime,c.value=u.value,u.expiresAt>0&&(c.expiresAt=u.expiresAt)),c})},e.env.metadataRetriever||(e.env.metadataRetriever=!0,e.on("aftercommit",({next:i,last:o})=>{do{let c=i.meta,u=c&&c.store;if(u&&!(i.flag&67108864)){let _=u.cache;if(c.key){let l=r1.call(_,c.key);if(l&&l.timestampBytes){let d=l.timestampOffset;l.timestampBytes[d]===2&&(l.timestampBytes.copy(Na,0,d),l.timestampBytes=null,l.localTime=Xb())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,Oo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<Oo.length;u++){let _=Oo[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&Oo.splice(u--,1)}},i.prototype.done.isTracked=!0}return e}function fp(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Oa=i?.localTime?ap|Jb:op:Oa=u?i?.localTime?ap|16384:zb|16384:op,l>0&&(c|=dp),pd=c,up=l,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Oa>0},m;try{f&&(h.ifVersion=m=i?.version??null);let S=e.put(s,n,h);if(e.cache&&S.result!==!1){let A=e.cache.get(s);A&&(c>=0?A.metadataFlags=c:A.metadataFlags>=0&&(A.metadataFlags=void 0),(l||!A.expiresAt)&&(A.expiresAt=l),h.instructedWrite&&(A.localTime||(A.localTime=1),A.timestampBytes=cp,A.timestampOffset=cp.start||0))}if(u){let A=_?.user?.username;if(E&&(md=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,N=r.get(g);if(N){let V=Ur(N).previousLocalTime;return r.put(g,Sd(o,t,s,V,A,d,md),{ifVersion:m}),S}}r.put(fu,Sd(o,t,s,i?.localTime?1:0,A,d,md),{append:d!=="invalidate",instructedWrite:!0,ifVersion:m})}return S}catch(S){throw S.message+=" id: "+s+" options: "+h,S}}}var Qb,jb,hd,fu,_p,ZY,du,Na,e1,op,zb,t1,Jb,ap,dp,cp,md,Oa,pd,up,lp,r1,Oo,Eu=Re(()=>{Qb=require("msgpackr");ba();jb=D(U()),hd=new Uint8Array([1,1,1,1,4,64,0,0]),fu=new Uint8Array([1,1,1,1,1,0,0,0]),_p=new Uint8Array([1,1,1,1,3,64,0,0]),ZY=Symbol("local-timestamp"),du=Symbol("metadata"),Na=new Uint8Array(8),e1=new DataView(Na.buffer,0,8),op=0,zb=0,t1=1,Jb=3,ap=4,dp=16,Oa=0,pd=-1,up=0,lp=class extends Qb.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(Oa||pd>=0){let i=0,o=Oa;o&&(i+=8,Oa=0);let c=pd,u=up;c>=0&&(i+=2,pd=-1,u&&(i+=8,up=0));let _=cp=r.call(this,s,n|2048|i);md=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(hd[4]=o,hd[5]=o>>8,_.set(hd,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,s,n)}}decode(t,r){let s=r?.start||0,n=r>-1?r:r?.end||t.length,i=t[s],o=0;try{if(i<32&&n>2){let c=s,u;if(i===2){if(t.copy)t.copy(Na,0,c),c+=8;else for(let d=0;d<8;d++)Na[d]=t[c++];u=Xb(),i=t[c]}let _;i<32&&(o=i,c+=2,o&dp&&(_=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let l=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:l,[du]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Xb,"getTimestamp");r1=Map.prototype.get;a(Td,"handleLocalTimeForGets");Oo=[];setInterval(()=>{for(let e=0;e<Oo.length;e++){let t=Oo[e].deref();!t||t.isDone||t.isCommitted?Oo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&jb.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(fp,"getUpdateRecord")});var _y={};Fe(_y,{AUDIT_STORE_OPTIONS:()=>uy,createAuditEntry:()=>Sd,openAuditStore:()=>Rd,readAuditEntry:()=>Ur,setAuditRetention:()=>s1,transactionKeyEncoder:()=>cy});function Rd(e){let t=e.auditStore=e.openDB(ny.AUDIT_STORE_NAME,uy);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,oy.getWorkerIndex)()===0&&e.on("aftercommit",()=>{hu||(hu=setTimeout(()=>{if(hu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-Ep})){if((n[0]&15)===mp){let i=Ur(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},Ep/10).unref())}),t}function s1(e){clearTimeout(hu),hu=null,Ep=e}function Sd(e,t,r,s,n,i,o){let c=ly[i],u=1;s&&(s>1?ya.setFloat64(0,s):is.set(_p),u=9),f(0),f(t),d(r),ya.setFloat64(u,e),u+=8,n?d(n):is[u++]=0,is[s?8:0]=c;let l=is.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,Ia.writeKey)(E,is,u);let m=u-h-1;m>127?m>16383?(Sp.error("Key or username was too large for audit entry",E),u=h+1,is[h]=0):(is.copyWithin(h+2,h+1,u),ya.setUint16(h,m|32768),u++):is[h]=m}function f(E){E<128?is[u++]=E:E<16384?(ya.setUint16(u,E|32768),u+=2):E<1056964608?(ya.setUint32(u,E|3221225472),u+=4):(is[u]=255,ya.setUint32(u+1,E),u+=5)}}function Ur(e){try{let t=e.dataView||(e.dataView=new pp(e.buffer,e.byteOffset,e.byteLength)),r;e[0]==66&&(r=t.readFloat64());let s=t.readInt(),n=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:ly[s&7],tableId:i,get recordId(){return sy(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?sy(e,l,d):void 0},getValue(f){return s&hp?f.decoder.decode(e.subarray(t.position)):void 0}}}catch{return Sp.error("Reading audit entry error",e),{}}}function sy(e,t,r){let s=e.subarray(t,r);return(0,Ia.readKey)(s,0,r-t)}var Ia,gd,ny,iy,oy,ay,Sp,is,ya,cy,uy,Ep,hu,hp,ey,mp,ty,ry,ly,pp,ba=Re(()=>{Ia=require("ordered-binary"),gd=D(j()),ny=D(Ke()),iy=D(R()),oy=D(Qe()),ay=D(G());Eu();Sp=D(U());(0,gd.initSync)();is=Buffer.alloc(1024),ya=new DataView(is.buffer,is.byteOffset,1024),cy={writeKey(e,t,r){return e===fu?(t.set(fu,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,Ia.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,Ia.readKey)(e,t,r)}},uy={encoding:"binary",keyEncoder:cy},Ep=(0,ay.convertToMS)((0,gd.get)(iy.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,hu=null;a(Rd,"openAuditStore");a(s1,"setAuditRetention");hp=16,ey=1,mp=2,ty=3,ry=4,ly={put:ey|hp,[ey]:"put",delete:mp,[mp]:"delete",message:ty|hp,[ty]:"message",invalidate:ry,[ry]:"invalidate"};a(Sd,"createAuditEntry");a(Ur,"readAuditEntry");pp=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(sy,"readKeySafely")});function fy(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;wa||((0,pu.onMessageByType)(dy,d=>{Ey(d.path)}),(0,pu.onMessageByType)(n1,d=>{(0,mu.trace)("confirming to proceed with txn",d.txnId)}),wa=Object.create(null));let c=wa[i]||(wa[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=Aa(t);let _=new gp(r);_.startTime=s,n&&(_.includeDescendants=n);let l=u.get(t);return l?l.push(_):(u.set(t,l=[_]),l.tables=u,l.key=t),_.subscriptions=l,_}function Ey(e,t){if(!wa)return;let r=wa[e];if(!r)return;try{r.auditStore.resetReadTxn()}catch(n){throw n.message+=" in "+e,n}let s;for(let{key:n,value:i}of r.auditStore.getRange({start:Tp,exclusiveStart:!0})){Tp=n;let o=Ur(i),c=r[o.tableId];if(!c)continue;let u=o.recordId,_,l=Aa(o.recordId),d;do{let f=c.get(l);if(f){for(let h of f)if(!(d&&!h.includeDescendants)){if(h.startTime>=n){(0,mu.info)("omitting",u,h.startTime,n);continue}try{if(h.crossThreads===!1&&!t)continue;let m;h.supportsTransactions&&h.txnInProgress!==o.version&&(m=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,m)}catch(m){console.error(m),(0,mu.info)(m)}}}if(l==null)break;let E=l.lastIndexOf?.("/",l.length-2);E>-1?l=l.slice(0,E+1):l=null,d=!0}while(!0)}if(s)for(let n of s)n.txnInProgress=null,n.listener(null,{type:"end_txn"},Tp,!0)}function hy(e,t){let r=t||e,s=r.env;if(t&&!t.cache&&(t.cache=new Map),!s.hasBroadcastListener){s.hasBroadcastListener=!0;let n=s.path;r.on("aftercommit",()=>{(0,pu.broadcast)({type:dy,path:n}),Ey(n,!0)})}}var mu,pu,dy,n1,wa,Lfe,gp,Tp,my=Re(()=>{mu=D(U()),pu=D(Qe());uu();_u();ba();dy="transaction",n1="transaction-await",Lfe=Buffer.alloc(4096);a(fy,"addSubscription");gp=class extends ws{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 s=t.envs,n=t.dbi;delete s[n]}}this.subscriptions=null}}toJSON(){return{name:"subscription"}}},Tp=Date.now();a(Ey,"notifyFromTransactionData");a(hy,"listenToCommits")});var Sy=T((Mfe,py)=>{"use strict";var Rp=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};py.exports=Rp});var gy=T((vfe,Ty)=>{"use strict";var Ap=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};Ty.exports=Ap});var Ad=T((Hfe,Ry)=>{"use strict";var Np=j(),bp=R(),{RecordEncoder:i1}=(Eu(),te(Zb));Np.initSync();var o1=Np.get(bp.CONFIG_PARAMS.STORAGE_COMPRESSION),a1=Np.get(bp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,c1=bp.UPDATES_PROPERTY,Op=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=o1&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=a1&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:i1},this.alwaysLazyProperty=s=>s===c1)}};Ry.exports=Op});var Nd=T((Gfe,Oy)=>{"use strict";var Ca=j(),Su=R();Ca.initSync();var u1=Ca.get(Su.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ca.get(Su.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ca.get(Su.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ay=Ca.get(Su.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),l1=Ca.get(Su.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Od=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=u1,this.noFSAccess=!0,Ay!==void 0&&(this.overlappingSync=Ay),this.noReadAhead=l1}};Oy.exports=Od;Od.MAX_DBS=1e4});var Me=T((xfe,My)=>{"use strict";var Ip=require("lmdb"),Ps=require("fs-extra"),vr=require("path"),bd=or(),yy=U(),ar=Mr().LMDB_ERRORS_ENUM,yd=gy(),wp=Ad(),Iy=Nd(),Li=Ke(),Ny=R(),{table:_1,resetDatabases:d1}=(Ee(),te(De)),by=j(),Ms=Li.INTERNAL_DBIS_NAME,wy=Li.DBI_DEFINITION_NAME,f1="data.mdb",E1="lock.mdb",Tu=".mdb",h1="-lock",yp=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=os(t,r),this.key_type=this.dbi[Li.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Li.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Ip.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Id(e,t){if(e===void 0)throw new Error(ar.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(ar.ENV_NAME_REQUIRED)}a(Id,"pathEnvNameValidation");async function Cp(e,t,r=!0){try{await Ps.access(e)}catch(s){throw s.code==="ENOENT"?new Error(ar.INVALID_BASE_PATH):s}try{let s=vr.join(e,t+Tu);return await Ps.access(s,Ps.constants.R_OK|Ps.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ps.access(vr.join(e,t,f1),Ps.constants.R_OK|Ps.constants.F_OK),vr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(ar.INVALID_ENVIRONMENT)}else throw new Error(ar.INVALID_ENVIRONMENT);throw s}}a(Cp,"validateEnvironmentPath");function wd(e,t){if(bd.validateEnv(e),t===void 0)throw new Error(ar.DBI_NAME_REQUIRED)}a(wd,"validateEnvDBIName");async function m1(e,t,r=!1,s=!1){Id(e,t);let n=vr.basename(e);t=t.toString();let i=by.get(Ny.CONFIG_PARAMS.DATABASES);i||by.setProperty(Ny.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Cp(e,t,s),Cy(e,t,r)}catch(o){if(o.message===ar.INVALID_ENVIRONMENT){let c=vr.join(e,t);await Ps.mkdirp(s?c:e);let u=new Iy(s?c:c+Tu,!1),_=Ip.open(u);_.dbis=Object.create(null);let l=new wp(!1);_.openDB(Ms,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Lp(e,t,r);return _[Li.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(m1,"createEnvironment");async function p1(e,t,r,s=!0){Id(e,t),t=t.toString();let n=vr.join(e,t);return _1({table:t,database:vr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(p1,"copyEnvironment");async function Cy(e,t,r=!1){Id(e,t),t=t.toString();let s=Lp(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await Cp(e,t),i=vr.join(e,t+Tu),o=n!=i,c=new Iy(n,o),u=Ip.open(c);u.dbis=Object.create(null);let _=Dy(u);for(let l=0;l<_.length;l++)os(u,_[l]);return u[Li.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Cy,"openEnvironment");async function S1(e,t,r=!1){Id(e,t),t=t.toString();let s=vr.join(e,t+Tu),n=await Cp(e,t);if(global.lmdb_map!==void 0){let i=Lp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Ly(o),delete global.lmdb_map[i]}}await Ps.remove(n),await Ps.remove(n===s?n+h1:vr.join(vr.dirname(n),E1))}a(S1,"deleteEnvironment");async function Ly(e){bd.validateEnv(e);let t=e[Li.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Ly,"closeEnvironment");function Lp(e,t,r=!1){let n=`${vr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Lp,"getCachedEnvironmentName");function T1(e){bd.validateEnv(e);let t=Object.create(null),r=os(e,Ms);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ms)try{t[s]=Object.assign(new yd,n)}catch{yy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(T1,"listDBIDefinitions");function Dy(e){bd.validateEnv(e);let t=[],r=os(e,Ms);for(let{key:s}of r.getRange({start:!1}))s!==Ms&&t.push(s);return t}a(Dy,"listDBIs");function g1(e,t){let s=os(e,Ms).getEntry(t),n=new yd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{yy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(g1,"getDBIDefinition");function Py(e,t,r,s=!r){if(wd(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return os(e,t)}catch(n){if(n.message===ar.DBI_DOES_NOT_EXIST){let i=new wp(r,s===!0),o=e.openDB(t,i),c=new yd(r===!0,s);return o[wy]=c,os(e,Ms).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Py,"createDBI");function os(e,t){if(wd(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ms?r=g1(e,t):r=new yd,r===void 0)throw new Error(ar.DBI_DOES_NOT_EXIST);let s;try{let n=new wp(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(ar.DBI_DOES_NOT_EXIST):n}return s[wy]=r,e.dbis[t]=s,s}a(os,"openDBI");function R1(e,t){wd(e,t),t=t.toString();let r=os(e,t),s=r.getStats();return r[Li.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(R1,"statDBI");async function A1(e,t){try{let r=vr.join(e,t+Tu);return(await Ps.stat(r)).size}catch{throw new Error(ar.INVALID_ENVIRONMENT)}}a(A1,"environmentDataSize");function O1(e,t){if(wd(e,t),t=t.toString(),t===Ms)throw new Error(ar.CANNOT_DROP_INTERNAL_DBIS_NAME);os(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],os(e,Ms).removeSync(t)}a(O1,"dropDBI");function N1(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{os(e,i)}catch(o){if(o.message===ar.DBI_DOES_NOT_EXIST)Py(e,i,i!==t,i===t),s=!0;else throw o}}s&&d1()}a(N1,"initializeDBIs");My.exports={openDBI:os,openEnvironment:Cy,createEnvironment:m1,listDBIs:Dy,listDBIDefinitions:T1,createDBI:Py,dropDBI:O1,statDBI:R1,deleteEnvironment:S1,initializeDBIs:N1,TransactionCursor:yp,environmentDataSize:A1,copyEnvironment:p1,closeEnvironment:Ly}});var By=T(($fe,vy)=>{"use strict";var Dp=Me(),b1=U(),Uy=Mr().LMDB_ERRORS_ENUM;vy.exports=y1;async function y1(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 Dp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==Uy.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Dp.closeEnvironment(global.lmdb_map[s]),await Dp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==Uy.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){b1.error(t)}}a(y1,"cleanLMDBMap")});var Fn=T((Yfe,I1)=>{I1.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"},{attribute:"time"},{attribute:"metric"}]},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"}]}}});var jy=T((Wfe,Qy)=>{"use strict";var Pp=require("recursive-iterator"),w1=require("alasql"),Mp=require("clone"),Hy=G(),{handleHDBError:qy,hdb_errors:C1}=Z(),{HDB_ERROR_MSGS:Gy,HTTP_STATUS_CODES:Fy}=C1,{getDatabases:L1}=(Ee(),te(De)),D1=["DISTINCT_ARRAY"],xy=Symbol("validateTables"),Up=Symbol("validateTable"),Kfe=Symbol("getAllColumns"),ky=Symbol("validateAllColumns"),Cd=Symbol("findColumn"),$y=Symbol("validateOrderBy"),gu=Symbol("validateSegment"),vp=Symbol("validateColumn"),Vy=Symbol("setColumnsForTable"),Yy=Symbol("checkColumnsForAsterisk"),Ky=Symbol("validateGroupBy"),Wy=Symbol("hasColumns"),Bp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[xy](),this[Yy](),this[ky]()}[xy](){if(this[Wy]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Up](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Up](t.table)})}}[Wy](){let t=!1,r=new Pp(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Up](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=L1();if(!r[t.databaseid])throw qy(new Error,Gy.SCHEMA_NOT_FOUND(t.databaseid),Fy.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw qy(new Error,Gy.TABLE_NOT_FOUND(t.databaseid,t.tableid),Fy.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Mp(n);i.table=Mp(t),this.attributes.push(i)})}[Cd](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)}[Yy](){let t=new Pp(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Vy](r.tableid)}[Vy](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new w1.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ky](){this[gu](this.statement.columns,!1),this[gu](this.statement.joins,!1),this[gu](this.statement.where,!1),this[Ky](this.statement.group,!1),this[gu](this.statement.order,!0)}[gu](t,r){if(!t)return;let s=new Pp(t),n=[];for(let{node:i,path:o}of s)!Hy.isEmpty(i)&&!Hy.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[$y](i):n.push(this[vp](i)));return n}[Ky](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&D1.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Mp(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Cd](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,o)=>{if(i.toString()===s.toString()){n=i,r.splice(o,1);return}});else{let i=this[Cd](s);if(!i||i.length===0)throw`unknown column '${s.toString()}' in group by`;if(i.length>1)throw`ambiguously defined column '${s.toString()}' in group by`;r.forEach((o,c)=>{if(o.attribute===i[0].attribute&&o.table.tableid===i[0].table.tableid){n=o,r.splice(c,1);return}})}if(!n)throw`group by column '${s.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`}[$y](t){let r=this.statement.columns.filter(s=>s.as===t.columnid);if(r.length>1)throw`ambiguous column reference ${(t.tableid?t.tableid+".":"")+t.columnid} in order by`;r.length===0&&this[vp](t)}[vp](t){let r=this[Cd](t),s=(t.tableid?t.tableid+".":"")+t.columnid;if(r.length===0)throw`unknown column ${s}`;if(r.length>1)throw`ambiguous column reference ${s}`;return r[0]}};Qy.exports=Bp});var Jy=T((jfe,zy)=>{"use strict";var Hp=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")}};zy.exports=Hp});var Zy=T((Jfe,Xy)=>{"use strict";var qp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Xy.exports=qp});var tI=T((Zfe,eI)=>{"use strict";var Gp=class{static{a(this,"UpdateRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s,this.original_records=n}};eI.exports=Gp});var sI=T((tEe,rI)=>{"use strict";var Fp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};rI.exports=Fp});var bo=T((oEe,oI)=>{"use strict";var P1=Me(),M1=Zy(),U1=tI(),v1=sI(),an=or(),Ru=Mr().LMDB_ERRORS_ENUM,B1=Ke(),xn=R(),H1=G(),q1=require("uuid"),sEe=require("lmdb"),{handleHDBError:G1,hdb_errors:F1}=Z(),{OVERFLOW_MARKER:nEe,MAX_SEARCH_KEY_LENGTH:iEe}=B1,nI=j();nI.initSync();var Ld=nI.get(xn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),xp=xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,No=xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function x1(e,t,r,s,n=an.getNextMonotonicTime()){Yp(e,t,r,s),kp(e,t,r);let i=new M1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];iI(_,!0,n);let l=k1(e,t,r,_),d=_[t];o.push(l),c.push(d)}return $p(o,c,s,i,n)}a(x1,"insertRecords");function k1(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let l=c([[{}]]);Array.isArray(l)&&(c=l[0][xn.FUNC_VAL],s[o]=c)}let u=an.getIndexedValues(c),_=e.dbis[o];if(u){Ld&&_.prefetch(u.map(l=>({key:l,value:n})),Dd);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}Ld&&e.dbis[t].prefetch([n],Dd),e.dbis[t].put(n,s,s[No])})}a(k1,"insertRecord");function $1(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a($1,"removeSkippedRecords");function iI(e,t,r){let s=r>0;(s||!Number.isInteger(e[No]))&&(e[No]=r||(r=an.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[xp]))&&(e[xp]=r||an.getNextMonotonicTime()):delete e[xp]}a(iI,"setTimestamps");function kp(e,t,r){r.indexOf(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(xn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),P1.initializeDBIs(e,t,r)}a(kp,"initializeTransaction");async function V1(e,t,r,s,n=an.getNextMonotonicTime()){Yp(e,t,r,s),kp(e,t,r);let i=new U1,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Vp(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return $p(c,u,s,i,n,o)}a(V1,"updateRecords");async function Y1(e,t,r,s,n=an.getNextMonotonicTime()){try{Yp(e,t,r,s)}catch(u){throw G1(u,u.message,F1.HTTP_STATUS_CODES.BAD_REQUEST)}kp(e,t,r);let i=new v1,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;H1.isEmpty(_[t])?(l=q1.v4(),_[t]=l):l=_[t];let d=Vp(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return $p(o,c,s,i,n)}a(Y1,"upsertRecords");async function $p(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||an.getNextMonotonicTime(),$1(r,i),s}a($p,"finalizeWrite");function Vp(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),_=u?.value,l=_;if(!_){if(i)return!1;_={}}if(iI(r,!l,o),Number.isInteger(r[No])&&_[No]>r[No])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let m=r[h],S=e.dbis[h];if(S===void 0)continue;let A=_[h];if(typeof m=="function"){let N=m([[_]]);Array.isArray(N)&&(m=N[0][xn.FUNC_VAL],r[h]=m)}if(m===A)continue;let g=an.getIndexedValues(A);if(g){Ld&&S.prefetch(g.map(N=>({key:N,value:s})),Dd);for(let N=0,V=g.length;N<V;N++)S.remove(g[N],s)}if(g=an.getIndexedValues(m),g){Ld&&S.prefetch(g.map(N=>({key:N,value:s})),Dd);for(let N=0,V=g.length;N<V;N++)S.put(g[N],s)}}let E=Object.assign({},_,r);c.put(s,E,E[No])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Vp(e,t,r,s,n,i,o))}a(Vp,"updateUpsertRecord");function K1(e,t,r){if(an.validateEnv(e),t===void 0)throw new Error(Ru.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ru.WRITE_ATTRIBUTES_REQUIRED):new Error(Ru.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(K1,"validateBasic");function Yp(e,t,r,s){if(K1(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ru.RECORDS_REQUIRED):new Error(Ru.RECORDS_MUST_BE_ARRAY)}a(Yp,"validateWrite");function Dd(){}a(Dd,"noop");oI.exports={insertRecords:x1,updateRecords:V1,upsertRecords:Y1}});var cn=T((cEe,uI)=>{"use strict";var cI=G(),aI=R(),La=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,kn=require("joi"),Di={schema_format:{pattern:La,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},W1=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(La).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()).required(),Q1=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(La).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()),j1=kn.alternatives(kn.string().min(1).max(Di.schema_length.maximum).pattern(La).messages({"string.pattern.base":"{:#label} "+Di.schema_format.message}),kn.number()).required();function z1(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Di.schema_length.maximum?`'${e}' maximum of 250 characters`:La.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(z1,"checkValidTable");function J1(e,t){return cI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(J1,"validateSchemaExists");function X1(e,t){let r=t.state.ancestors[0].schema;return cI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(X1,"validateTableExists");function Z1(e,t){return e.toLowerCase()===aI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${aI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Z1,"validateSchemaName");uI.exports={common_validators:Di,schema_regex:La,hdb_schema_table:W1,validateSchemaExists:J1,validateTableExists:X1,validateSchemaName:Z1,checkValidTable:z1,hdb_database:Q1,hdb_table:j1}});var Ve=T((lEe,lI)=>{"use strict";var cr=require("validate.js");cr.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||cr.validators.type.checks[t](e)?null:` must be a '${t}' value`};cr.validators.type.checks={Object:function(e){return cr.isObject(e)&&!cr.isArray(e)},Array:cr.isArray,Integer:cr.isInteger,Number:cr.isNumber,String:cr.isString,Date:cr.isDate,Boolean:function(e){return typeof e=="boolean"}};cr.validators.hasValidFileExt=function(e,t){return cr.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};lI.exports={validateObject:eK,validateObjectAsync:tK,validateBySchema:rK};function eK(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=cr(e,t,{format:"flat"});return r?new Error(r):null}a(eK,"validateObject");async function tK(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await cr.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(tK,"validateObjectAsync");function rK(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(rK,"validateBySchema")});var Pd=T((dEe,_I)=>{var{common_validators:un}=cn(),Ou=Ve(),Au="is required",ct={database:{presence:!1,format:un.schema_format,length:un.schema_length},schema:{presence:!1,format:un.schema_format,length:un.schema_length},table:{presence:!0,format:un.schema_format,length:un.schema_length},attribute:{presence:!0,format:un.schema_format,length:un.schema_length},hash_attribute:{presence:!0,format:un.schema_format,length:un.schema_length}};function Nu(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(Nu,"makeAttributesStrings");function sK(e){return e=Nu(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ou.validateObject(e,ct)}a(sK,"schema_object");function nK(e){return e=Nu(e),ct.table.presence={message:Au},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ou.validateObject(e,ct)}a(nK,"table_object");function iK(e){return e=Nu(e),ct.table.presence={message:Au},ct.attribute.presence=!1,Ou.validateObject(e,ct)}a(iK,"create_table_object");function oK(e){return e=Nu(e),ct.table.presence={message:Au},ct.attribute.presence={message:Au},ct.hash_attribute.presence=!1,Ou.validateObject(e,ct)}a(oK,"attribute_object");function aK(e){return e=Nu(e),ct.table.presence={message:Au},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Ou.validateObject(e,ct)}a(aK,"describe_table");function cK(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(cK,"validateTableResidence");_I.exports={schema_object:sK,create_table_object:iK,table_object:nK,attribute_object:oK,describe_table:aK,validateTableResidence:cK}});var fI=T((EEe,dI)=>{"use strict";var uK=require("uuid"),Kp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||uK.v4(),this.schema_table=`${this.schema}.${this.table}`}};dI.exports=Kp});var Md=T((mEe,EI)=>{"use strict";var lK=fI(),Wp=class extends lK{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};EI.exports=Wp});var mI=T((SEe,hI)=>{"use strict";hI.exports=dK;var _K="inserted";function dK(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===_K?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(dK,"returnObject")});var Ud=T((gEe,RI)=>{"use strict";var fK=R(),Qp=Me(),EK=bo(),{getSystemSchemaPath:hK,getSchemaPath:mK}=He(),pK=Fn(),SK=Pd(),TK=Md(),gK=mI(),{handleHDBError:pI,hdb_errors:TI}=Z(),SI=G(),{HTTP_STATUS_CODES:RK}=TI,jp=pK.hdb_attribute,gI=[];for(let e=0;e<jp.attributes.length;e++)gI.push(jp.attributes[e].attribute);var AK="inserted";RI.exports=OK;async function OK(e){let t=SK.attribute_object(e);if(t)throw pI(new Error,t.message,TI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&SI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw pI(new Error,r,RK.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=SI.isEmpty(e.dup_sort)||e.dup_sort=="true";let s=[];if(global.hdb_schema[e.schema]&&global.hdb_schema[e.schema][e.table]&&(s=global.hdb_schema[e.schema][e.table].attributes),Array.isArray(s)&&s.length>0){for(let i of s)if(i.attribute===e.attribute)throw new Error(`attribute '${i.attribute}' already exists in ${e.schema}.${e.table}`)}let n=new TK(e.schema,e.table,e.attribute,e.id);try{let i=await Qp.openEnvironment(mK(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}`);Qp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Qp.openEnvironment(hK(),fK.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await EK.insertRecords(o,jp.hash_attribute,gI,[n]);return gK(AK,c,{records:[n]},u)}catch(i){throw i}}a(OK,"lmdbCreateAttribute")});var Jp=T((AEe,OI)=>{var{hdb_table:NK,hdb_database:AI}=cn(),bK=Ve(),zp=require("joi"),yK={undefined:"undefined",null:"null"},IK=a((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let o=r[i];(!o||o.length===0||yK[o]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${o}'`:n+=`. Invalid attribute name: '${o}'`)}return n?t.message(n):e},"custom_records_val"),wK=zp.object({database:AI,schema:AI,table:NK,records:zp.array().items(zp.object().custom(IK)).required()});OI.exports=function(e){return bK.validateBySchema(e,wK)}});var bu=T((bEe,bI)=>{"use strict";var $n=G(),NI=U(),NEe=Jp(),{getDatabases:CK}=(Ee(),te(De)),{ClientError:yo}=Z();bI.exports=LK;function LK(e){if($n.isEmpty(e))throw new yo("invalid update parameters defined.");if($n.isEmptyOrZeroLength(e.schema))throw new yo("invalid schema specified.");if($n.isEmptyOrZeroLength(e.table))throw new yo("invalid table specified.");if(!Array.isArray(e.records))throw new yo("records must be an array");let t=CK()[e.schema]?.[e.table];if($n.isEmpty(t))throw new yo(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&$n.isEmptyOrZeroLength(o[r]))throw NI.error("a valid hash attribute must be provided with update record:",o),new yo("a valid hash attribute must be provided with update record, check log for more info");if(!$n.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw NI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new yo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!$n.isEmpty(o[r])&&o[r]!==""&&s.has($n.autoCast(o[r]))&&(o.skip=!0),s.add($n.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(LK,"insertUpdateValidate")});var yu=T((IEe,yI)=>{"use strict";var DK=R().OPERATIONS_ENUM,Xp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=DK.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};yI.exports=Xp});var Lu=T((LEe,II)=>{"use strict";var CEe=yu(),vd=R(),eS=G(),Zp=U(),PK=require("uuid"),{handleHDBError:Iu,hdb_errors:MK}=Z(),{HDB_ERROR_MSGS:wu,HTTP_STATUS_CODES:Cu}=MK;II.exports=UK;function UK(e,t,r){for(let n=0;n<t.length;n++)vK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];BK(i,r,e.operation)}}a(UK,"processRows");function vK(e){if(Buffer.byteLength(String(e))>vd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Iu(new Error,wu.ATTR_NAME_LENGTH_ERR(e),Cu.BAD_REQUEST,void 0,void 0,!0);if(eS.isEmptyOrZeroLength(e)||eS.isEmpty(e.trim()))throw Iu(new Error,wu.ATTR_NAME_NULLISH_ERR,Cu.BAD_REQUEST,void 0,void 0,!0)}a(vK,"validateAttribute");function BK(e,t,r){if(!e.hasOwnProperty(t)||eS.isEmptyOrZeroLength(e[t])){if(r===vd.OPERATIONS_ENUM.INSERT||r===vd.OPERATIONS_ENUM.UPSERT){e[t]=PK.v4();return}throw Zp.error("Update transaction aborted due to record with no hash value:",e),Iu(new Error,wu.RECORD_MISSING_HASH_ERR,Cu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>vd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Zp.error(e),Iu(new Error,wu.HASH_VAL_LENGTH_ERR,Cu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Zp.error(e),Iu(new Error,wu.INVALID_FORWARD_SLASH_IN_HASH_ERR,Cu.BAD_REQUEST,void 0,void 0,!0)}a(BK,"validateHash")});var Bd=T((PEe,CI)=>{"use strict";var wI=G(),HK=R(),qK=U(),GK=Ud(),FK=Md(),xK=Vn(),{SchemaEventMsg:kK}=Us(),$K="already exists in";CI.exports=VK;async function VK(e,t,r){if(wI.isEmptyOrZeroLength(r))return r;let s=[];wI.isEmptyOrZeroLength(t.attributes)||t.attributes.forEach(i=>{s.push(i.attribute)});let n=r.filter(i=>s.indexOf(i)<0);return n.length===0||await Promise.all(n.map(async i=>{await YK(e,t.schema,t.name,i)})),n}a(VK,"lmdbCheckForNewAttributes");async function YK(e,t,r,s){let n=new FK(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await KK(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes($K))qK.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(YK,"createNewAttribute");async function KK(e){let t;return t=await GK(e),xK.signalSchemaChange(new kK(process.pid,HK.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(KK,"createAttribute")});var Da=T((UEe,LI)=>{"use strict";var tS=class{static{a(this,"LMDBTransactionObject")}constructor(t,r,s,n,i=void 0){this.operation=t,this.user_name=r,this.timestamp=s,this.hash_values=n,this.origin=i}};LI.exports=tS});var PI=T((BEe,DI)=>{"use strict";var WK=Da(),QK=R().OPERATIONS_ENUM,rS=class extends WK{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(QK.INSERT,r,s,n,i),this.records=t}};DI.exports=rS});var UI=T((qEe,MI)=>{"use strict";var jK=Da(),zK=R().OPERATIONS_ENUM,sS=class extends jK{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(zK.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};MI.exports=sS});var BI=T((FEe,vI)=>{"use strict";var JK=Da(),XK=R().OPERATIONS_ENUM,nS=class extends JK{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(XK.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};vI.exports=nS});var qI=T((kEe,HI)=>{"use strict";var ZK=Da(),eW=R().OPERATIONS_ENUM,iS=class extends ZK{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(eW.DELETE,s,n,t,i),this.original_records=r}};HI.exports=iS});var Du=T((YEe,kI)=>{"use strict";var VEe=require("path"),GI=Me(),tW=PI(),rW=UI(),sW=BI(),nW=qI(),Pa=Ke(),FI=G(),{CONFIG_PARAMS:iW}=R(),xI=j();xI.initSync();var Hd=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:oW}=He();kI.exports=aW;async function aW(e,t){if(xI.get(iW.LOGGING_AUDITLOG)===!1)return;let r=oW(e.schema,e.table),s=await GI.openEnvironment(r,e.table,!0),n=cW(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){GI.initializeDBIs(s,Pa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Pa.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Pa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Pa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),FI.isEmpty(n.user_name)||s.dbis[Pa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Pa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(aW,"writeTransaction");function cW(e,t){let r=FI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Hd.INSERT)return new tW(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hd.UPDATE)return new rW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hd.UPSERT)return new sW(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Hd.DELETE)return new nW(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(cW,"createTransactionObject")});var oS=T((QEe,$I)=>{"use strict";var uW=bu(),WEe=yu(),Pu=R(),lW=Lu(),_W=bo().insertRecords,dW=Me(),fW=U(),EW=Bd(),{getSchemaPath:hW}=He(),mW=Du();$I.exports=pW;async function pW(e){try{let{schema_table:t,attributes:r}=uW(e);lW(e,r,t.hash_attribute),e.schema!==Pu.SYSTEM_SCHEMA_NAME&&(r.includes(Pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await EW(e.hdb_auth_header,t,r),n=hW(e.schema,e.table),i=await dW.openEnvironment(n,e.table),o=await _W(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await mW(e,o)}catch(c){fW.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(pW,"lmdbCreateRecords")});var KI=T((zEe,YI)=>{"use strict";var VI=R(),SW=oS(),TW=yu(),gW=require("fs-extra"),{getSchemaPath:RW}=He();YI.exports=AW;async function AW(e){let t=[{name:e.schema,createddate:Date.now()}],r=new TW(VI.SYSTEM_SCHEMA_NAME,VI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await SW(r),await gW.mkdirp(RW(e.schema))}a(AW,"lmdbCreateSchema")});var QI=T((XEe,WI)=>{"use strict";var aS=class{static{a(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};WI.exports=aS});var XI=T((she,JI)=>{"use strict";var jI=Me(),cS=or(),uS=Mr().LMDB_ERRORS_ENUM,OW=Ke(),zI=U(),ehe=G(),NW=require("lmdb"),bW=QI(),yW=R(),{OVERFLOW_MARKER:the,MAX_SEARCH_KEY_LENGTH:rhe}=OW,IW=yW.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wW(e,t,r,s){if(cS.validateEnv(e),t===void 0)throw new Error(uS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uS.IDS_REQUIRED):new Error(uS.IDS_MUST_BE_ITERABLE);try{let n=jI.listDBIs(e);jI.initializeDBIs(e,t,n);let i=new bW,o,c=[],u=[];for(let f=0,E=r.length;f<E;f++)try{o=r[f];let h=e.dbis[t].get(o);if(!h||s&&h[IW]>s){i.skipped.push(o);continue}let m=e.dbis[t].ifVersion(o,NW.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let A=n[S];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],N=h[A];if(N!=null)try{let V=cS.getIndexedValues(N);if(V)for(let $=0,F=V.length;$<F;$++)g.remove(V[$],o)}catch{zI.warn(`cannot delete from attribute: ${A}, ${N}:${o}`)}}});c.push(m),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 f=0,E=l.length;f<E;f++)l[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),_.push(f));let d=0;for(let f=0;f<_.length;f++){let E=_[f];i.original_records.splice(E-d,1),d++}return i.txn_time=cS.getNextMonotonicTime(),i}catch(n){throw n}}a(wW,"deleteRecords");JI.exports={deleteRecords:wW}});var Mu=T((ihe,ew)=>{"use strict";var Ma=G(),CW=XI(),LW=Me(),{getSchemaPath:DW}=He(),PW=Du(),MW=U();ew.exports=UW;async function UW(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ma.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ma.isEmptyOrZeroLength(e.hash_values)&&!Ma.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ma.isEmpty(u)||e.hash_values.push(u)}}if(Ma.isEmptyOrZeroLength(e.hash_values))return ZI([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ma.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=DW(e.schema,e.table),i=await LW.openEnvironment(n,e.table),o=await CW.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await PW(e,o)}catch(c){MW.error(`unable to write transaction due to ${c.message}`)}return ZI(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(UW,"lmdbDeleteRecords");function ZI(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}a(ZI,"createDeleteResponse")});var _S=T((che,tw)=>{"use strict";var vW=R(),ahe=or();function lS(e,t){let r=Object.create(null);if(t.length===1&&vW.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(lS,"parseRow");function BW(e,t,r,s){let n=lS(r,e);s.push(n)}a(BW,"searchAll");function HW(e,t,r,s){let n=lS(r,e);s[t]=n}a(HW,"searchAllToMap");function qW(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(qW,"iterateDBI");function Io(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(Io,"pushResults");function GW(e,t,r,s,n,i){t.toString().endsWith(e)&&Io(t,r,s,n,i)}a(GW,"endsWith");function FW(e,t,r,s,n,i){t.toString().includes(e)&&Io(t,r,s,n,i)}a(FW,"contains");function xW(e,t,r,s,n,i){t>e&&Io(t,r,s,n,i)}a(xW,"greaterThanCompare");function kW(e,t,r,s,n,i){t>=e&&Io(t,r,s,n,i)}a(kW,"greaterThanEqualCompare");function $W(e,t,r,s,n,i){t<e&&Io(t,r,s,n,i)}a($W,"lessThanCompare");function VW(e,t,r,s,n,i){t<=e&&Io(t,r,s,n,i)}a(VW,"lessThanEqualCompare");tw.exports={parseRow:lS,searchAll:BW,searchAllToMap:HW,iterateDBI:qW,endsWith:GW,contains:FW,greaterThanCompare:xW,greaterThanEqualCompare:kW,lessThanCompare:$W,lessThanEqualCompare:VW,pushResults:Io}});var Ua=T((fhe,cw)=>{"use strict";var Pi=Me(),lhe=U(),Br=or(),qd=Ke(),tt=Mr().LMDB_ERRORS_ENUM,_he=G(),YW=R(),Gd=_S(),{parseRow:KW}=Gd,dhe=require("lmdb"),{OVERFLOW_MARKER:rw,MAX_SEARCH_KEY_LENGTH:WW}=qd;function sw(e,t,r,s=!1,n=void 0,i=void 0){return wo(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(sw,"iterateFullIndex");function Uu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return wo(e,t,r,(l,d,f,E)=>{let g={transaction:l,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!_,exclusiveStart:i===!0?_:u};return E===r?(g.values=!1,d.getRange(g).map(N=>({value:N}))):d.getRange(g)})}a(Uu,"iterateRangeBetween");function wo(e,t,r,s){let n=e.database||e,i=Pi.openDBI(n,r);i[qd.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Pi.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(wo,"setupTransaction");function nw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(rw)){if(!n)if(r)n=Pi.openDBI(e,r);else{let u=Pi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Pi.openDBI(e,u[_]),!n[qd.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(nw,"getOverflowCheck");function QW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return wo(e,t,t,(o,c,u)=>(Fd(r),r=vu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(_=>KW(_.value,r))))}a(QW,"searchAll");function jW(e,t,r,s=!1,n=void 0,i=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);Fd(r),r=vu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of sw(e,t,t,s,n,i))o.set(c,Gd.parseRow(u,r));return o}a(jW,"searchAllToMap");function zW(e,t,r=!1,s=void 0,n=void 0){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=sw(e,void 0,t,r,s,n),c=o.transaction,u=nw(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(zW,"iterateDBI");function JW(e,t){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);return Pi.statDBI(e,t).entryCount}a(JW,"countAll");function XW(e,t,r,s,n=!1,i=void 0,o=void 0){return Mi(e,r,s),wo(e,t,r,(c,u,_,l)=>(s=Br.convertKeyValueToWrite(s),l===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(XW,"equals");function ZW(e,t,r){return Mi(e,t,r),Pi.openDBI(e,t).getValuesCount(r)}a(ZW,"count");function eQ(e,t,r,s,n=!1,i=void 0,o=void 0){return Mi(e,r,s),wo(e,null,r,(c,u)=>{s=Br.convertKeyValueToWrite(s);let _=!0;typeof s=="number"&&(_=!1);let l;if(n===!0){let d;for(let f of u.getKeys({transaction:c,start:s}))if(!f.startsWith(s)){d=f;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),l=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(f=>{let{key:E}=f;if(E!==d){if(E.toString().startsWith(s))return f;if(_===!0)return l.DONE}}),l.filter(f=>f)}else return l=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(_===!0)return l.DONE}),_?l:l.filter(d=>d)})}a(eQ,"startsWith");function tQ(e,t,r,s,n=!1,i=void 0,o=void 0){return iw(e,t,r,s,n,i,o,!0)}a(tQ,"endsWith");function iw(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Mi(e,r,s),wo(e,null,r,(u,_,l,d)=>{let f=nw(l,u,d,r);return o=Number.isInteger(o)?o:0,_.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(rw)?_.getValues(E,{transaction:u}).map(m=>{let S=f(E,m);if(c?S.endsWith(s):S.includes(s))return{key:S,value:m}}).filter(m=>m):(c?h.endsWith(s):h.includes(s))?_[qd.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(m=>({key:E,value:m})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(iw,"contains");function rQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Uu(e,t,r,s,u,n,i,o,!0,!1)}a(rQ,"greaterThan");function sQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Uu(e,t,r,s,u,n,i,o,!1,!1)}a(sQ,"greaterThanEqual");function nQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Uu(e,t,r,u,s,n,i,o,!1,!0)}a(nQ,"lessThan");function iQ(e,t,r,s,n=!1,i=void 0,o=void 0){Mi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Uu(e,t,r,u,s,n,i,o,!1,!1)}a(iQ,"lessThanEqual");function oQ(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Br.validateEnv(e),r===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(tt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(tt.END_VALUE_REQUIRED);if(s=Br.convertKeyValueToWrite(s),n=Br.convertKeyValueToWrite(n),s>n)throw new Error(tt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Uu(e,t,r,s,n,i,o,c)}a(oQ,"between");function aQ(e,t,r,s){Br.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(Fd(r),r=vu(n,r),s===void 0)throw new Error(tt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Gd.parseRow(c,r)),o}a(aQ,"searchByHash");function cQ(e,t,r){Br.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(cQ,"checkHashExists");function uQ(e,t,r,s,n=[]){return aw(e,t,r,s,n),ow(e,t,r,s,n).map(i=>i[1])}a(uQ,"batchSearchByHash");function lQ(e,t,r,s,n=[]){aw(e,t,r,s,n);let i=new Map;for(let[o,c]of ow(e,t,r,s,n))i.set(o,c);return i}a(lQ,"batchSearchByHashToMap");function ow(e,t,r,s,n=[]){return wo(e,t,t,(i,o,c)=>{r=vu(c,r);let u=r.length<3;return s.map(_=>{let l=c.dbis[t].get(_,{transaction:i,lazy:u});if(l)return[_,Gd.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(ow,"batchHashSearch");function aw(e,t,r,s,n){if(Br.validateEnv(e),t===void 0)throw new Error(tt.HASH_ATTRIBUTE_REQUIRED);if(Fd(r),s==null)throw new Error(tt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(tt.IDS_MUST_BE_ITERABLE)}a(aw,"initializeBatchSearchByHash");function Fd(e){if(!Array.isArray(e))throw e===void 0?new Error(tt.FETCH_ATTRIBUTES_REQUIRED):new Error(tt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Fd,"validateFetchAttributes");function Mi(e,t,r){if(Br.validateEnv(e),t===void 0)throw new Error(tt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(tt.SEARCH_VALUE_REQUIRED);if(r?.length>WW)throw new Error(tt.SEARCH_VALUE_TOO_LARGE)}a(Mi,"validateComparisonFunctions");function vu(e,t){return t.length===1&&YW.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Pi.listDBIs(e)),t}a(vu,"setGetWholeRowAttributes");cw.exports={searchAll:QW,searchAllToMap:jW,count:ZW,countAll:JW,equals:XW,startsWith:eQ,endsWith:tQ,contains:iw,searchByHash:aQ,setGetWholeRowAttributes:vu,batchSearchByHash:uQ,batchSearchByHashToMap:lQ,checkHashExists:cQ,iterateDBI:zW,greaterThan:rQ,greaterThanEqual:sQ,lessThan:nQ,lessThanEqual:iQ,between:oQ}});var va=T((hhe,fw)=>{var uw=require("lodash"),lw=Ve(),xe=require("joi"),_Q=G(),{hdb_schema_table:xd,checkValidTable:_w,hdb_table:dw,hdb_database:kd}=cn(),{handleHDBError:dQ,hdb_errors:fQ}=Z(),{getDatabases:EQ}=(Ee(),te(De)),{HTTP_STATUS_CODES:hQ}=fQ,mQ=xe.object({database:kd,schema:kd,table:dw,search_attribute:xd,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(xd).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),pQ=xe.object({database:kd,schema:kd,table:dw,operator:xe.string().valid("and","or").default("and").lowercase(),offset:xe.number().integer().min(0),limit:xe.number().integer().min(1),get_attributes:xe.array().min(1).items(xd).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:xd,search_type:xe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:xe.when("search_type",{switch:[{is:"equals",then:xe.any()},{is:"between",then:xe.array().items(xe.alternatives([xe.string(),xe.number()])).length(2)}],otherwise:xe.alternatives(xe.string(),xe.number())}).required()})).required()});fw.exports=function(e,t){let r=null;switch(t){case"value":r=lw.validateBySchema(e,mQ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(_w("database",e.schema)),i(_w("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"),n&&(r=new Error(n.trim()));break;case"conditions":r=lw.validateBySchema(e,pQ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=_Q.checkGlobalSchemaTable(e.schema,e.table);if(n)return dQ(new Error,n,hQ.NOT_FOUND);let o=EQ()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let _=0,l=e.conditions.length;_<l;_++){let d=e.conditions[_];c.push(d.search_attribute)}let u=uw.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!uw.some(o,l=>l===_||l.attribute===_||l.attribute===_.attribute));if(u&&u.length>0){let _=u.join(", ");return _=_.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${_}'`)}}return r}});var dS=T((phe,Ew)=>{"use strict";var SQ=Me(),TQ=va(),{getSchemaPath:gQ}=He();Ew.exports=RQ;function RQ(e){let t=TQ(e,"hashes");if(t)throw t;let r=gQ(e.schema,e.table);return SQ.openEnvironment(r,e.table)}a(RQ,"initialize")});var fS=T((The,hw)=>{"use strict";var AQ=Ua(),OQ=dS();hw.exports=NQ;async function NQ(e){let t=await OQ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return AQ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(NQ,"lmdbGetDataByHash")});var Ba=T((Rhe,mw)=>{"use strict";var ES=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};mw.exports=ES});var Sw=T((Nhe,pw)=>{"use strict";var Ohe=Ba(),bQ=Ua(),yQ=dS();pw.exports=IQ;async function IQ(e){let t=await yQ(e),r=global.hdb_schema[e.schema][e.table];return bQ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(IQ,"lmdbSearchByHash")});var vs=T((yhe,Tw)=>{"use strict";var hS=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,_=void 0,l=void 0){this.schema=t,this.table=r,this.search_attribute=s,this.search_value=n,this.hash_attribute=i,this.get_attributes=o,this.end_value=c,this.reverse=u,this.limit=_,this.offset=l}};Tw.exports=hS});var $d=T((whe,bw)=>{"use strict";var Wt=Ua(),wQ=Me(),CQ=G(),ce=Ke(),Co=R(),LQ=Fn(),gw=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:DQ}=He(),Yn=Co.SEARCH_WILDCARDS;async function PQ(e,t,r){let s;e.schema===Co.SYSTEM_SCHEMA_NAME?s=LQ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Nw(e,s.hash_attribute,r,t);return Aw(e,n,s.hash_attribute,r)}a(PQ,"prepSearch");async function Aw(e,t,r,s){let n=DQ(e.schema,e.table),i=await wQ.openEnvironment(n,e.table),o=Ow(i,e,t,r),c=o.transaction||i;if([ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ce.SEARCH_TYPES.SEARCH_ALL,ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(MQ(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Rw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Rw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Wt.batchSearchByHashToMap(c,r,e.get_attributes,_):Wt.batchSearchByHash(c,r,e.get_attributes,_)}a(Aw,"executeSearch");function Ow(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<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 ce.SEARCH_TYPES.EQUALS:n=Wt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.CONTAINS:n=Wt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.ENDS_WITH:case ce.SEARCH_TYPES._ENDS_WITH:n=Wt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.STARTS_WITH:case ce.SEARCH_TYPES._STARTS_WITH:n=Wt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Wt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Wt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.SEARCH_ALL:return Wt.searchAll(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Wt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.BETWEEN:n=Wt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN:case ce.SEARCH_TYPES._GREATER_THAN:n=Wt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN_EQUAL:case ce.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Wt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN:case ce.SEARCH_TYPES._LESS_THAN:n=Wt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN_EQUAL:case ce.SEARCH_TYPES._LESS_THAN_EQUAL:n=Wt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Ow,"searchByType");function Rw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Rw,"createMapFromIterable");function MQ(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 s=!1;for(let n=0;n<e.get_attributes.length;n++)if(r.indexOf(e.get_attributes[n])<0){s=!0;break}return s}a(MQ,"checkToFetchMore");function Nw(e,t,r,s){if(CQ.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),Yn.indexOf(n)>-1)return r===!0?ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ce.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Yn[0])<0&&n.indexOf(Yn[1])<0)return c===!0?r===!0?ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ce.SEARCH_TYPES.EQUALS;if(Yn.indexOf(i)>=0&&Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ce.SEARCH_TYPES.CONTAINS;if(Yn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ce.SEARCH_TYPES.ENDS_WITH;if(Yn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ce.SEARCH_TYPES.STARTS_WITH;if(n.includes(Yn[0])||n.includes(Yn[1]))return ce.SEARCH_TYPES.EQUALS;throw new Error(gw.UNKNOWN_SEARCH_TYPE)}else switch(s){case Co.VALUE_SEARCH_COMPARATORS.BETWEEN:return ce.SEARCH_TYPES.BETWEEN;case Co.VALUE_SEARCH_COMPARATORS.GREATER:return ce.SEARCH_TYPES.GREATER_THAN;case Co.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ce.SEARCH_TYPES.GREATER_THAN_EQUAL;case Co.VALUE_SEARCH_COMPARATORS.LESS:return ce.SEARCH_TYPES.LESS_THAN;case Co.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ce.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(gw.UNKNOWN_SEARCH_TYPE)}}a(Nw,"createSearchTypeFromSearchObject");bw.exports={executeSearch:Aw,createSearchTypeFromSearchObject:Nw,prepSearch:PQ,searchByType:Ow}});var Iw=T((Dhe,yw)=>{"use strict";var Lhe=vs(),UQ=va(),vQ=G(),BQ=R(),HQ=$d();yw.exports=qQ;function qQ(e,t){if(!vQ.isEmpty(t)&&BQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=UQ(e,"value");if(s)throw s;let n=!0;return HQ.prepSearch(e,t,n)}a(qQ,"lmdbGetDataByValue")});var Bu=T((Uhe,ww)=>{"use strict";var Mhe=vs(),GQ=va(),FQ=G(),xQ=R(),kQ=$d();ww.exports=$Q;async function $Q(e,t){if(!FQ.isEmpty(t)&&xQ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=GQ(e,"value");if(s)throw s;return kQ.prepSearch(e,t,!1)}a($Q,"lmdbSearchByValue")});var Lw=T((Hhe,Cw)=>{"use strict";var Bhe=Ke(),mS=class{static{a(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,o=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=o,this.conditions=n,this.operator=c}},pS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},SS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Cw.exports={SearchByConditionsObject:mS,SearchCondition:pS,SortAttribute:SS}});var vw=T((xhe,Uw)=>{"use strict";var Ghe=Lw().SearchByConditionsObject,VQ=vs(),YQ=va(),TS=Ua(),Vd=Ke(),{Resource:Fhe}=(Ls(),te(ip)),Mw=$d(),KQ=_S(),WQ=require("lodash"),{getSchemaPath:QQ}=He(),Dw=Me(),{handleHDBError:jQ,hdb_errors:zQ}=Z(),{HTTP_STATUS_CODES:JQ}=zQ,XQ=1e8;Uw.exports=ZQ;async function ZQ(e){let t=YQ(e,"conditions");if(t)throw jQ(t,t.message,JQ.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=QQ(e.schema,e.table),s=await Dw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)Dw.openDBI(s,_.search_attribute);let i=WQ.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===Vd.SEARCH_TYPES.EQUALS?_.estimated_count=TS.count(s,_.search_attribute,_.search_value):l===Vd.SEARCH_TYPES.CONTAINS||l===Vd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=XQ}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Pw(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let _=s.dbis[n.hash_attribute],l=i.slice(1).map(Mw.filterByType),d=l.length,f=TS.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>_.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!l[h](E))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(E=>KQ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await Pw(o,e,f,n.hash_attribute);c=c.concat(E)}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=TS.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(ZQ,"lmdbSearchByConditions");async function Pw(e,t,r,s){let n=new VQ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Vd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Mw.searchByType(e,n,i,s).map(o=>o.value)}a(Pw,"executeConditionSearch")});var Hu=T(($he,Bw)=>{"use strict";var ej=R().OPERATIONS_ENUM,gS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=ej.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Bw.exports=gS});var RS=T((Yhe,Vw)=>{"use strict";var Fw=vs(),xw=Hu(),kw=Bu(),$w=Mu(),ur=R(),Hw=G(),qw=Me(),{getTransactionAuditStorePath:tj,getSchemaPath:rj}=He(),Gw=U();Vw.exports=sj;async function sj(e){try{if(Hw.isEmpty(global.hdb_schema[e.schema])||Hw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await nj(e),await ij(e);let t=rj(e.schema,e.table);try{await qw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Gw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tj(e.schema,e.table);await qw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Gw.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(sj,"lmdbDropTable");async function nj(e){let t=new Fw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await kw(t)),s=[];for(let i=0;i<r.length;i++){let o=r[i];s.push(o.id)}if(s.length===0)return;let n=new xw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await $w(n)}a(nj,"deleteAttributesFromSystem");async function ij(e){let t=new Fw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,ur.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await kw(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&&(s=o)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new xw(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await $w(n)}catch(i){throw i}}a(ij,"dropTableFromSystem")});var Kw=T((Whe,Yw)=>{"use strict";var oj=require("fs-extra"),aj=vs(),cj=Ba(),uj=Hu(),lj=RS(),_j=Mu(),dj=fS(),fj=Bu(),Kn=R(),{getSchemaPath:Ej}=He(),{handleHDBError:hj,hdb_errors:mj}=Z(),{HDB_ERROR_MSGS:pj,HTTP_STATUS_CODES:Sj}=mj;Yw.exports=Tj;async function Tj(e){let t;try{t=await gj(e.schema);let r=new aj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await fj(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await lj(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new uj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _j(n);let i=Ej(t);await oj.remove(i)}catch(r){throw r}}a(Tj,"lmdbDropSchema");async function gj(e){let t=new cj(Kn.SYSTEM_SCHEMA_NAME,Kn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Kn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await dj(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw hj(new Error,pj.SCHEMA_NOT_FOUND(e),Sj.NOT_FOUND,void 0,void 0,!0);return s}a(gj,"validateDropSchema")});var qu=T((jhe,Ww)=>{"use strict";var AS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Ww.exports=AS});var NS=T((Xhe,Qw)=>{"use strict";var Rj=require("fs-extra"),Yd=Me(),{getTransactionAuditStorePath:Aj}=He(),OS=Ke(),Jhe=qu();Qw.exports=Oj;async function Oj(e){let t;try{let r=Aj(e.schema,e.table);await Rj.mkdirp(r),t=await Yd.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{Yd.createDBI(t,OS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Yd.createDBI(t,OS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Yd.createDBI(t,OS.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(Oj,"createTransactionsAuditEnvironment")});var Xw=T((eme,Jw)=>{"use strict";var bS=R(),jw=Me(),Nj=bo(),{getSystemSchemaPath:bj,getSchemaPath:yj}=He(),Ij=Fn(),wj=Ud(),yS=Md(),Cj=U(),Lj=NS(),wS=Ij.hdb_table,zw=[];for(let e=0;e<wS.attributes.length;e++)zw.push(wS.attributes[e].attribute);Jw.exports=Dj;async function Dj(e,t){let r=yj(t.schema,t.table),s=new yS(t.schema,t.table,bS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new yS(t.schema,t.table,bS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new yS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await jw.createEnvironment(r,t.table),e!==void 0){let o=await jw.openEnvironment(bj(),bS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await Nj.insertRecords(o,wS.hash_attribute,zw,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await IS(s),await IS(n),await IS(i)}await Lj(t)}catch(o){throw o}}a(Dj,"lmdbCreateTable");async function IS(e){try{await wj(e)}catch(t){Cj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(IS,"createAttribute")});var eC=T((rme,Zw)=>{"use strict";var Pj=bu(),Mj=Lu(),Uj=Bd(),Gu=R(),vj=bo().updateRecords,Bj=Me(),{getSchemaPath:Hj}=He(),qj=Du(),Gj=U();Zw.exports=Fj;async function Fj(e){try{let{schema_table:t,attributes:r}=Pj(e);Mj(e,r,t.hash_attribute),e.schema!==Gu.SYSTEM_SCHEMA_NAME&&(r.includes(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Gu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Gu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Uj(e.hdb_auth_header,t,r),n=Hj(e.schema,e.table),i=await Bj.openEnvironment(n,e.table),o=await vj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await qj(e,o)}catch(c){Gj.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:s,txn_time:o.txn_time}}catch(t){throw t}}a(Fj,"lmdbUpdateRecords")});var rC=T((nme,tC)=>{"use strict";var xj=R().OPERATIONS_ENUM,CS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=xj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tC.exports=CS});var nC=T((ame,sC)=>{"use strict";var ome=rC(),kj=bu(),$j=Lu(),Vj=Bd(),Fu=R(),Yj=bo().upsertRecords,Kj=Me(),{getSchemaPath:Wj}=He(),Qj=Du(),jj=U(),{handleHDBError:zj,hdb_errors:Jj}=Z();sC.exports=Xj;async function Xj(e){let t;try{t=kj(e)}catch(u){throw zj(u,u.message,Jj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;$j(e,s,r.hash_attribute),e.schema!==Fu.SYSTEM_SCHEMA_NAME&&(s.includes(Fu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Fu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Fu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Fu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await Vj(e.hdb_auth_header,r,s),i=Wj(e.schema,e.table),o=await Kj.openEnvironment(i,e.table),c=await Yj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Qj(e,c)}catch(u){jj.error(`unable to write transaction due to ${u.message}`)}return{written_hashes:c.written_hashes,schema_table:r,new_attributes:n,txn_time:c.txn_time}}a(Xj,"lmdbUpsertRecords")});var oC=T((ume,iC)=>{"use strict";var LS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};iC.exports=LS});var cC=T((_me,aC)=>{"use strict";var DS=class{static{a(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};aC.exports=DS});var _C=T((Eme,lC)=>{"use strict";var PS=Me(),{getTransactionAuditStorePath:Zj}=He(),fme=oC(),xu=Ke(),ez=G(),uC=cC(),tz=require("util").promisify,rz=tz(setTimeout),sz=1e4,nz=100;lC.exports=iz;async function iz(e){let t=Zj(e.schema,e.table),r=await PS.openEnvironment(t,e.table,!0),s=PS.listDBIs(r);PS.initializeDBIs(r,xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new uC;do n=await oz(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await rz(nz);while(n.transactions_deleted>0);return i}a(iz,"deleteAuditLogsBefore");async function oz(e,t){let r=new uC;try{let s=e.dbis[xu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[xu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];ez.isEmpty(c)||(n=e.dbis[xu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[xu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>sz)break}return await n,r}catch(s){throw s}}a(oz,"deleteTransactions")});var fC=T((mme,dC)=>{"use strict";var MS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};dC.exports=MS});var hC=T((Tme,EC)=>{"use strict";var az=vs(),cz=Hu(),Sme=fC(),ln=R(),uz=G(),US=Me(),lz=Fn(),_z=Bu(),dz=Mu(),{getSchemaPath:fz}=He();EC.exports=Ez;async function Ez(e,t=!0){let r;e.schema===ln.SYSTEM_SCHEMA_NAME?r=lz[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await mz(e),n=fz(e.schema,e.table),i=await US.openEnvironment(n,e.table);return t===!0&&await hz(e,i,r.hash_attribute),US.dropDBI(i,e.attribute),s}a(Ez,"lmdbDropAttribute");async function hz(e,t,r){let s=US.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let _={};for(let l in c)l!==i&&(_[l]=c[l]);n=t.dbis[r].put(o,_,u)}await n}a(hz,"removeAttributeFromAllObjects");async function mz(e){let t=new az(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await _z(t)).filter(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(uz.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new cz(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return dz(i)}a(mz,"dropAttributeFromSystem")});var RC=T((Ame,gC)=>{"use strict";var vS=Me(),Ha=Ke(),Rme=or(),BS=R(),mC=G(),{getTransactionAuditStorePath:pz}=He(),Sz=Ua(),Kd=Da(),Tz=U();gC.exports=gz;async function gz(e){let t=pz(e.schema,e.table),r=await vS.openEnvironment(t,e.table,!0),s=vS.listDBIs(r);vS.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case BS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return pC(r,e.search_values);case BS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,Az(r,e.search_values,n);case BS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Rz(r,e.search_values);default:return pC(r)}}a(gz,"readAuditLog");function pC(e,t=[0,Date.now()]){mC.isEmpty(t[0])&&(t[0]=0),mC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new Kd,n))}a(pC,"searchTransactionsByTimestamp");function Rz(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,TC(e,i))}return Object.fromEntries(r)}a(Rz,"searchTransactionsByUsername");function Az(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=Sz.equals(e,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,_);for(let{value:d}of l){let f=Number(d);s.has(f)?s.get(f).push(_.toString()):s.set(f,[_.toString()])}}let n=Array.from(s.keys()),i=TC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);SC(u,"records",r,l,o),SC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(Az,"searchTransactionsByHashValues");function SC(e,t,r,s,n){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(s.indexOf(u)>=0)if(n.has(u)){let _=n.get(u),l=_[_.length-1];if(l.timestamp===i)l[t]=[c];else{let d=new Kd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Kd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(SC,"loopRecords");function TC(e,t){let r=[];try{let s=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new Kd,i);r.push(o)}}catch(i){Tz.warn(i)}return r}catch(s){throw s}}a(TC,"batchSearchTransactions")});var OC=T((yme,AC)=>{"use strict";var{getSchemaPath:Nme}=He(),bme=Me(),{database:Oz}=(Ee(),te(De));AC.exports={writeTransaction:Nz};async function Nz(e,t,r){return Oz({database:e,table:t}).transaction(r)}a(Nz,"writeTransaction")});var IC=T((wme,yC)=>{"use strict";var{getSchemaPath:NC}=He(),bC=Me();yC.exports={flush:bz,resetReadTxn:yz};async function bz(e,t){return(await bC.openEnvironment(NC(e,t),t.toString())).flushed}a(bz,"flush");async function yz(e,t){try{(await bC.openEnvironment(NC(e,t),t.toString())).resetReadTxn()}catch{}}a(yz,"resetReadTxn")});var DC=T((Lme,LC)=>{"use strict";var{Readable:Iz}=require("stream"),{getDatabases:wz}=(Ee(),te(De)),{readSync:Cz,openSync:Lz,createReadStream:wC}=require("fs"),{open:Dz}=require("lmdb"),CC=Ad(),Pz=Nd(),{AUDIT_STORE_OPTIONS:Mz}=(ba(),te(_y)),{INTERNAL_DBIS_NAME:Uz,AUDIT_STORE_NAME:vz}=Ke();LC.exports=Hz;var HS=32768,Bz=100;async function Hz(e){let t=e.database||e.schema||"data",r=wz()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let _=r[n[0]];if(!_)throw new Error(`Can not find table ${n[0]}`);let l=_.dbisDB,d=Dz({noSync:!0,maxDbs:Pz.MAX_DBS}),f,E=d.openDB(Uz,new CC(!1)),h=l.useReadTransaction(),m=0,S=a(async function(g,N){N.encoding="binary",N.encoder=void 0;let V=d.openDB(g,N),$=l.openDB(g,N);for(let{key:F,version:w,value:K}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,K,w),m++%Bz===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:N}of l.getRange({transaction:h,start:!1}))if(n.some(V=>g.startsWith?.(V+"/"))){E.put(g,N);let[,V]=g.split("/"),$=!V,F=new CC(!$,$);await S(g,F)}e.include_audit&&await S(vz,Object.assign({},Mz)),await f;let A=wC(d.path);return A.headers=u(),A.on("close",()=>{h.done(),d.close()}),A}let o=r[Object.keys(r)[0]].primaryStore,c=Lz(o.path);return o.transaction(()=>{let _=Buffer.alloc(HS);Cz(c,_,0,HS),o.resetReadTxn();let l=o.useReadTransaction();l.renew();let d=wC(null,{fd:c,start:HS}),f=new Iz.from(async function*(){yield _;for await(let E of d)l.openTimer&&(l.openTimer=0),yield E;l.done()}());return f.headers=u(),f});function u(){let _=new Map;return _.set("content-type","application/octet-stream"),_.set("content-disposition",`attachment; filename="${t}"`),_.set("date",s),_}}a(Hz,"getBackup")});var UC=T((Pme,MC)=>{"use strict";var qz=U(),{handleHDBError:Gz}=Z(),Fz=Jy(),xz=Ud(),kz=oS(),$z=KI(),Vz=Mu(),Yz=fS(),Kz=Sw(),Wz=Iw(),Qz=Bu(),jz=vw(),zz=Kw(),Jz=Xw(),Xz=eC(),Zz=nC(),eJ=_C(),tJ=RS(),rJ=hC(),sJ=RC(),nJ=OC(),PC=IC(),iJ=DC(),qS=class extends Fz{static{a(this,"LMDBBridge")}async searchByConditions(t){return jz(t)}async getDataByHash(t){return await Yz(t)}async searchByHash(t){return await Kz(t)}async getDataByValue(t,r){return await Wz(t,r)}async searchByValue(t){return await Qz(t)}async createSchema(t){return await $z(t)}async dropSchema(t){return await zz(t)}async createTable(t,r){return await Jz(t,r)}async dropTable(t){return await tJ(t)}async createAttribute(t){return await xz(t)}async createRecords(t){return await kz(t)}async updateRecords(t){return await Xz(t)}async upsertRecords(t){try{return await Zz(t)}catch(r){throw Gz(r,null,null,qz.ERR,r)}}async deleteRecords(t){return await Vz(t)}async dropAttribute(t){return await rJ(t)}async deleteAuditLogsBefore(t){return await eJ(t)}async readAuditLog(t){return await sJ(t)}writeTransaction(t,r,s){return nJ.writeTransaction(t,r,s)}flush(t,r){return PC.flush(t,r)}resetReadTxn(t,r){return PC.resetReadTxn(t,r)}getBackup(t){return iJ(t)}};MC.exports=qS});var $C={};Fe($C,{ResourceBridge:()=>xS});function kS({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 BC(e,t){let r=_n(e),s=kS(e,r);if(!r)throw new Bs.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user},o;We(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:n,select:s},i);return l=l&&cd(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 _n(e){let t=e.database||e.schema||aJ,r=Hs()[t];if(!r)throw(0,Bs.handleHDBError)(new Error,oJ.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function HC(e,t,r){let s=e.length+t.length,n=s===1?"record":"records";return{message:`${e.length} of ${s} ${n} successfully deleted`,deleted_hashes:e,skipped_hashes:t,txn_time:r}}async function*qC(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:o,version:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(o),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[o],records:[u]})}s&&(yield s)}var GC,Wd,Bs,FC,xC,qs,GS,FS,kC,oJ,aJ,cJ,uJ,vC,xS,VC=Re(()=>{"use strict";GC=D(UC()),Wd=D(va()),Bs=D(Z());Ee();FC=D(bu()),xC=D(Lu()),qs=D(R()),GS=D(Vn()),FS=D(Us()),kC=D(G());Ao();ud();({HDB_ERROR_MSGS:oJ}=Bs.hdb_errors),aJ="data",cJ=1e4,uJ=10,xS=class extends GC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),vC=this}async searchByConditions(t){let r=(0,Wd.default)(t,"conditions");if(r)throw(0,Bs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_n(t);if(!s)throw new Bs.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:kS(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Bs.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}ut({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await _n(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=_n(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],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}))n=i(o,c,u),await new Promise(_=>setImmediate(_));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){_n(t).dropTable()}createSchema(t){return ku({database:t.schema,table:null}),GS.signalSchemaChange(new FS.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $S(t.schema),GS.signalSchemaChange(new FS.SchemaEventMsg(process.pid,qs.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,vC.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,FC.default)(t);(0,xC.default)(t,s,r.primaryKey);let n,i=Hs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return We(o,async c=>{if(!i.schemaDefined){n=[];for(let l of s)i.attributes.find(f=>f.name==l)||n.push(l);n.length>0&&await i.addAttributes(n.map(l=>({name:l,indexed:!0})))}let u=[],_=[];for(let l of t.records){let d=await i.get(l[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){_.push(l[i.primaryKey]);continue}d&&(d=cd(d));for(let f in l)if(Object.prototype.hasOwnProperty.call(l,f)){let E=l[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,l[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(l),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(l,f)||(l[f]=d[f]);await i.put(l,o),u.push(l[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:_}})}async deleteRecords(t){let r=Hs()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return HC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Hs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Bs.ClientError("Table must have a '__createdtime__' attribute or @createdTime timestamp defined to perform this operation");let s=await r.search({conditions:[{attribute:r.createdTimeProperty.name,value:Date.parse(t.date),comparator:qs.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!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,kC.async_set_timeout)(uJ),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%cJ===0&&await _();return u.length>0&&await _(),n?HC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Wd.default)(t,"hashes");if(r)throw r;return BC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of BC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&qs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Wd.default)(t,"value");if(s)throw s;let n=_n(t);if(!n)throw new Bs.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===qs.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:kS(t,n)})}async getDataByValue(t,r){let s=new Map,n=_n(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){_n({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return _n(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=_n(t),s={};switch(t.search_type){case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[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 s;case qs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of qC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return qC(r,t.search_values?.[0],t.search_values?.[1])}}};a(kS,"getSelect");a(BC,"getRecords");a(_n,"getTable");a(HC,"createDeleteResponse");a(qC,"groupRecordsInHistory")});var as=T((qme,YC)=>{"use strict";var{ResourceBridge:lJ}=(VC(),te($C)),_J=j();_J.initSync();var Qd;function dJ(){return Qd||(Qd=new lJ,Qd)}a(dJ,"getBridge");YC.exports=dJ()});var jC=T((Fme,QC)=>{"use strict";var KC=require("lodash"),$u=require("mathjs"),fJ=require("jsonata"),WC=G();QC.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?KC.uniqWith(e,KC.isEqual):e,searchJSON:EJ,mad:Vu.bind(null,$u.mad),mean:Vu.bind(null,$u.mean),mode:Vu.bind(null,$u.mode),prod:Vu.bind(null,$u.prod),median:Vu.bind(null,$u.median)};function Vu(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Vu,"aggregateFunction");function EJ(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(WC.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),WC.isEmpty(this.__ala__.res[r])){let s=fJ(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(EJ,"searchJSON")});var JC=T((kme,zC)=>{"use strict";var lt=require("moment"),VS="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;zC.exports={current_date:()=>lt().utc().format("YYYY-MM-DD"),current_time:()=>lt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return lt(e).utc().format("YYYY");case"month":return lt(e).utc().format("MM");case"day":return lt(e).utc().format("DD");case"hour":return lt(e).utc().format("HH");case"minute":return lt(e).utc().format("mm");case"second":return lt(e).utc().format("ss");case"millisecond":return lt(e).utc().format("SSS");default:break}},date:e=>lt(e).utc().format(VS),date_format:(e,t)=>lt(e).utc().format(t),date_add:(e,t,r)=>lt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>lt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=lt(e).utc(),n=lt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>lt().utc().valueOf(),get_server_time:()=>lt().format(VS),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format(VS)}});var tL=T(($me,eL)=>{"use strict";var hJ=require("@turf/area"),mJ=require("@turf/length"),pJ=require("@turf/circle"),SJ=require("@turf/difference"),TJ=require("@turf/distance"),gJ=require("@turf/boolean-contains"),RJ=require("@turf/boolean-equal"),AJ=require("@turf/boolean-disjoint"),OJ=require("@turf/helpers"),XC=R(),le=G(),Wn=U();eL.exports={geoArea:NJ,geoLength:bJ,geoCircle:yJ,geoDifference:IJ,geoDistance:ZC,geoNear:wJ,geoContains:CJ,geoEqual:LJ,geoCrosses:DJ,geoConvert:PJ};function NJ(e){if(le.isEmpty(e))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return hJ.default(e)}catch(t){return Wn.trace(t,e),NaN}}a(NJ,"geoArea");function bJ(e,t){if(le.isEmpty(e))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return mJ.default(e,{units:t||"kilometers"})}catch(r){return Wn.trace(r,e),NaN}}a(bJ,"geoLength");function yJ(e,t,r){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e));try{return pJ.default(e,t,{units:r||"kilometers"})}catch(s){return Wn.trace(s,e,t),NaN}}a(yJ,"geoCircle");function IJ(e,t){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return SJ(e,t)}catch(r){return Wn.trace(r,e,t),NaN}}a(IJ,"geoDifference");function ZC(e,t,r){if(le.isEmpty(e))return NaN;if(le.isEmpty(t))return NaN;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return TJ.default(e,t,{units:r||"kilometers"})}catch(s){return Wn.trace(s,e,t),NaN}}a(ZC,"geoDistance");function wJ(e,t,r,s){if(le.isEmpty(e)||le.isEmpty(t))return!1;if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");try{return ZC(e,t,s)<=r}catch(n){return Wn.trace(n,e,t),!1}}a(wJ,"geoNear");function CJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return gJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(CJ,"geoContains");function LJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return RJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(LJ,"geoEqual");function DJ(e,t){if(le.isEmpty(e)||le.isEmpty(t)||e.coordinates&&e.coordinates.includes?.(null)||t.coordinates&&t.coordinates.includes?.(null))return!1;typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t));try{return!AJ.default(e,t)}catch(r){return Wn.trace(r,e,t),!1}}a(DJ,"geoCrosses");function PJ(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(XC.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(XC.GEO_CONVERSION_ENUM).join(",")}`);return typeof e=="string"&&(e=le.autoCastJSON(e)),OJ[t](e,r)}a(PJ,"geoConvert")});var jd=T((Yme,rL)=>{var Lo=jC(),Hr=JC(),dn=tL();rL.exports=e=>{e.aggr.mad=e.aggr.MAD=Lo.mad,e.aggr.mean=e.aggr.MEAN=Lo.mean,e.aggr.mode=e.aggr.MODE=Lo.mode,e.aggr.prod=e.aggr.PROD=Lo.prod,e.aggr.median=e.aggr.MEDIAN=Lo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Lo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Lo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Hr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Hr.current_time,e.fn.extract=e.fn.EXTRACT=Hr.extract,e.fn.date=e.fn.DATE=Hr.date,e.fn.date_format=e.fn.DATE_FORMAT=Hr.date_format,e.fn.date_add=e.fn.DATE_ADD=Hr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Hr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Hr.date_diff,e.fn.now=e.fn.NOW=Hr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Hr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Hr.get_server_time,e.fn.getdate=e.fn.GETDATE=Hr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Hr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=dn.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=dn.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=dn.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=dn.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=dn.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=dn.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=dn.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=dn.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=dn.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=dn.geoNear}});var oL=T((Kme,iL)=>{"use strict";var Yu=require("lodash"),lr=require("alasql");lr.options.cache=!1;var MJ=jd(),sL=require("clone"),zd=require("recursive-iterator"),ne=U(),_e=G(),qa=as(),UJ=R(),{hdb_errors:vJ}=Z(),{getDatabases:nL}=(Ee(),te(De)),BJ="IS NULL",Gs="There was a problem performing this search. Please check the logs and try again.";MJ(lr);var YS=class{static{a(this,"SQLSearch")}constructor(t,r){if(_e.isEmpty(t))throw ne.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(),_e.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!_e.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Gs)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Gs)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Gs)}}_getColumns(){let t=new zd(this.statement);for(let{node:r,path:s}of t)r&&r.columnid&&(this.columns[s[0]]||(this.columns[s[0]]=[]),this.columns[s[0]].push(sL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Yu.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=nL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(_e.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new zd(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!_e.isEmpty(r)&&r.right)if(_e.isNotEmptyAndHasValue(r.right.value)){let s=_e.autoCast(r.right.value);[!0,!1].indexOf(s)>=0&&(r.right=new lr.yy.LogicValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=_e.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new lr.yy.LogicValue({value:i}):s instanceof lr.yy.StringValue&&_e.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new lr.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new zd(this.statement.where))if(r&&r.left&&r.right&&(r.left.columnid||r.right.value)&&r.op){let s=new Set,n=r.left.columnid?r.left:r.right,i=this._findColumn(n);if(!i)continue;let o=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!_e.isEmpty(UJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(_e.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(_e.isEmptyOrZeroLength(r.left.columnid)||_e.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(_e.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"=":!_e.isEmpty(r.right.value)||!_e.isEmpty(r.left.value)?s.add(_e.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)s.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,...s])}}}_setAliasesForColumns(){if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&_e.isEmptyOrZeroLength(this.statement.from)&&_e.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Yu.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(_e.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);_e.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&!_e.isEmptyOrZeroLength(this.columns.columns))return t;if(_e.isEmptyOrZeroLength(this.all_table_attributes)&&_e.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await lr.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(sL(s))})}_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,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(_e.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(BJ)>-1&&this.tables.forEach(n=>{let i={columnid:nL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Yu.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,_=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!_e.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!_e.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await qa.getDataByHash(c);for(let d of c.hash_values)l.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(l){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[_].values).map(async l=>{let d=Object.assign({},c);d.search_value=l;let f=await qa.getDataByValue(d);for(let[E,h]of f)this.data[i].__merged_data[E]?this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]):(this.data[i].__merged_data[E]=[...s[i]],this._updateMergedAttribute(i,E,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Gs)}else if(!_e.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!_e.isEmptyOrZeroLength(this.comparator_search_values[_].comparators))try{let l=this.comparator_search_values[_].comparators;for(let d=0,f=l.length;d<f;d++){let E=l[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await qa.getDataByValue(c,E.operation);if(u)for(let[m]of h)this.data[i].__merged_data[m]||(this.data[i].__merged_data[m]=[...s[i]],this._setMergedHashAttribute(i,_e.autoCast(m)));else for(let[m,S]of h)this.data[i].__merged_data[m]?this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]):(this.data[i].__merged_data[m]=[...s[i]],this._updateMergedAttribute(i,m,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(m)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(Gs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await qa.getDataByValue(c);if(u)for(let[d]of l)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,_e.autoCast(d)));else for(let[d,f]of l)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,f[n.attribute]),this._setMergedHashAttribute(i,_e.autoCast(d)))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(l),new Error(Gs)}}}_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 lr.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(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.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 s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new lr.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new lr.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 n=t.is_func?new lr.yy.FuncValue:new lr.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(E=>{E.joinmode&&E.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(E.table);let h=E.joinmode+" JOIN ? AS "+(E.as?E.as:E.table.tableid);E.on&&(h+=" ON "+E.on.toString()),i.push(h),t.push(Object.values(this.data[`${E.table.databaseid_orig}_${E.table.as?E.table.as_orig:E.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(E=>{let h=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__hash_name,m=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${m}.${h}'`,schema:E.databaseid_orig,table:E.as?E.as_orig:E.tableid_orig,keys:new Set}),r.push(`${E.as?E.as:E.tableid}.\`${h}\` AS "${m}.${h}"`),c[E.as?E.as_orig:E.tableid_orig]=this.data[`${E.databaseid_orig}_${E.as?E.as_orig:E.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",_="";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(E=>{E.is_func?r.push(E.initial_select_column.toString()):E.initial_select_column.tableid?r.push(`${E.initial_select_column.tableid}.${E.initial_select_column.columnid} AS ${E.expression.columnid}`):r.push(`${E.initial_select_column.columnid} AS ${E.expression.columnid}`)}));let l="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(l=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let f=[];try{let E=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${_} ${l} ${d}`,h=this._convertColumnsToIndexes(E,n);f=await lr.promise(h,t),t=null}catch(E){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(E),new Error("There was a problem processing the data.")}if(f&&f.length>0){for(let E=0,h=f.length;E<h;E++){let m=f[E];o.forEach(S=>{m[S.key]!==null&&m[S.key]!==void 0&&S.keys.add(m[S.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),m=Yu.difference(h,[...E.keys].map(S=>S.toString()));for(let S=0,A=m.length;S<A;S++){let g=m[S];delete this.data[`${E.schema}_${E.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new zd(this.columns);for(let{node:i}of n)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)&&s.push(o)}}s=Yu.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Gs)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let l in i)o.push(i[l][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await qa.getDataByHash(c),_=n.columns.length;for(let l=0,d=o.length;l<d;l++){let f=o[l],E=u.get(f);for(let h=0;h<_;h++){let m=n.columns[h],S=E[m]===void 0?null:E[m];this.data[s].__merged_data[f].push(S)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.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(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.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 n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await lr.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(vJ.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${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=n[i],_=new RegExp(`${u}.\`${o}\``,"g"),l=`${u}.[${c}]`;s=s.replace(_,l)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),_=`[${c}]`;s=s.replace(u,_)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await qa.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Gs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};iL.exports=YS});var _r=T((Qme,aL)=>{"use strict";var HJ=jy();aL.exports={searchByConditions:GJ,searchByHash:FJ,searchByValue:xJ,search:kJ};var KS=as(),{transformReq:WS}=G(),qJ=oL();async function GJ(e){return WS(e),KS.searchByConditions(e)}a(GJ,"searchByConditions");async function FJ(e){WS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of KS.searchByHash(e))r&&t.push(r);return t}a(FJ,"searchByHash");async function xJ(e){WS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of KS.searchByValue(e))t.push(r);return t}a(xJ,"searchByValue");function kJ(e,t){try{let r=new HJ(e);r.validate(),new qJ(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(kJ,"search")});var Qn=T((zme,_L)=>{"use strict";var Ku=require("crypto"),$J=j(),{CONFIG_PARAMS:VJ}=R(),uL="aes-256-cbc",YJ=32,KJ=16,QS=64,lL=32,WJ=QS+lL,cL=new Map;_L.exports={encrypt:QJ,decrypt:jJ,createNatsTableStreamName:zJ};function QJ(e){let t=Ku.randomBytes(YJ),r=Ku.randomBytes(KJ),s=Ku.createCipheriv(uL,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),o=r.toString("hex"),c=n.toString("hex");return i+o+c}a(QJ,"encrypt");function jJ(e){let t=e.substr(0,QS),r=e.substr(QS,lL),s=e.substr(WJ,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ku.createDecipheriv(uL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(jJ,"decrypt");function zJ(e,t){let r=$J.get(VJ.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=cL.get(r);return s||(s=Ku.createHash("md5").update(r).digest("hex"),cL.set(r,s)),s}a(zJ,"createNatsTableStreamName")});var Ui=T((Zme,fL)=>{"use strict";var Xme=_r(),Jd=U(),dL=Pd(),JJ=Qn(),Xd=G(),{handleHDBError:Zd,hdb_errors:XJ}=Z(),{HDB_ERROR_MSGS:ef,HTTP_STATUS_CODES:jS}=XJ,ZJ=j();ZJ.initSync();var{getDatabases:zS}=(Ee(),te(De));fL.exports={describeAll:e2,describeTable:tf,describeSchema:t2};async function e2(e){try{let t=Xd.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=zS(),i={},o={},c=[],u=e?.exact_count;for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let d=n[l];for(let f in d)try{let E;if(t||s)E=await tf({schema:l,table:f,exact_count:u});else if(r&&r[l].describe&&r[l].tables[f].describe){let h=r[l].tables[f].attribute_permissions;E=await tf({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){Jd.error(E)}}let _={};for(let l in c)t||s?(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(_[c[l].schema]==null&&(_[c[l].schema]={}),_[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?_[l]={}:o[l]&&(_[l]={});return _}catch(t){return Jd.error("Got an error in describeAll"),Jd.error(t),Zd(new Error,ef.DESCRIBE_ALL_ERR)}}a(e2,"describeAll");async function tf(e,t){Xd.transformReq(e);let{schema:r,table:s}=e;r=r?.toString(),s=s?.toString();let n=t;e.hdb_user&&!e.hdb_user.role.permission.super_user&&(n=e.hdb_user.role.permission[r].tables[s].attribute_permissions);let i=dL.describe_table(e);if(i)throw i;let c=zS()[r];if(!c)throw Zd(new Error,ef.SCHEMA_NOT_FOUND(e.schema),jS.NOT_FOUND);let u=c[s];if(!u)throw Zd(new Error,ef.TABLE_NOT_FOUND(e.schema,e.table),jS.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(E=>({type:E.type,name:E.name})):void 0}))}a(_,"pushAtt");let l=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&_(E)})}else u.attributes?.forEach(f=>_(f));let d={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};d.clustering_stream_name=JJ.createNatsTableStreamName(d.schema,d.name);try{let f=u.getRecordCount({exactCount:e.exact_count==="true"});d.record_count=f.recordCount,d.estimated_record_range=f.estimatedRange;let E=u.auditStore;if(E)for(let h of E.getKeys({reverse:!0,limit:1}))d.last_updated_record=h[0];if(!d.last_updated_record&&u.indices.__updatedtime__)for(let h of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))d.last_updated_record=h}catch(f){Jd.warn(`unable to stat table dbi due to ${f}`)}return d}a(tf,"descTable");async function t2(e){Xd.transformReq(e);let t=dL.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 s=e.schema.toString(),i=zS()[s];if(!i)throw Zd(new Error,ef.SCHEMA_NOT_FOUND(e.schema),jS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Xd.isEmpty(u)||u.describe){let _=await tf({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(t2,"describeSchema")});var cs=T((spe,SL)=>{var r2=Fn(),{callbackify:hL,promisify:s2}=require("util"),{getDatabases:mL}=(Ee(),te(De));SL.exports={setSchemaDataToGlobal:EL,getTableSchema:n2,getSystemSchema:i2,setSchemaDataToGlobalAsync:s2(EL)};var pL=Ui(),tpe=hL(pL.describeAll),rpe=hL(pL.describeTable);function EL(e){global.hdb_schema=mL(),e&&e()}a(EL,"setSchemaDataToGlobal");function n2(e,t,r){let s=mL()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(n2,"getTableSchema");function i2(){return r2}a(i2,"getSystemSchema")});var dr=T((ipe,AL)=>{"use strict";var sf=Jp(),vt=G(),o2=require("util"),nf=as(),a2=cs(),TL=U(),{handleHDBError:Do,hdb_errors:c2}=Z(),{HTTP_STATUS_CODES:Po}=c2,u2=o2.promisify(a2.getTableSchema),l2="updated",gL="inserted",RL="upserted";AL.exports={insert:d2,update:f2,upsert:E2,validation:_2,flush:h2};async function _2(e){if(vt.isEmpty(e))throw new Error("invalid update parameters defined.");if(vt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(vt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await u2(e.schema,e.table),r=sf(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&vt.isEmptyOrZeroLength(c[s]))throw TL.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(!vt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw TL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!vt.isEmpty(c[s])&&c[s]!==""&&n.has(vt.autoCast(c[s]))&&(c.skip=!0),n.add(vt.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(_2,"validation");async function d2(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sf(e);if(t)throw Do(new Error,t.message,Po.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Do(new Error,r,Po.BAD_REQUEST);let s=await nf.createRecords(e);return rf(gL,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(d2,"insertData");async function f2(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sf(e);if(t)throw Do(new Error,t.message,Po.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Do(new Error,r,Po.BAD_REQUEST);let s=await nf.updateRecords(e);return vt.isEmpty(s.existing_rows)?rf(l2,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):rf(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(f2,"updateData");async function E2(e){if(e.operation!=="upsert")throw Do(new Error,"invalid operation, must be upsert",Po.INTERNAL_SERVER_ERROR);let t=sf(e);if(t)throw Do(new Error,t.message,Po.BAD_REQUEST);vt.transformReq(e);let r=vt.checkSchemaTableExist(e.schema,e.table);if(r)throw Do(new Error,r,Po.BAD_REQUEST);let s=await nf.upsertRecords(e);return rf(RL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(E2,"upsertData");function rf(e,t,r,s,n,i){let o={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===gL?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===RL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(rf,"returnObject");function h2(e){return vt.transformReq(e),nf.flush(e.schema,e.table)}a(h2,"flush")});var XS=T((ape,bL)=>{var m2=Ve(),JS=require("joi"),{hdb_table:p2,hdb_database:OL}=cn(),NL={schema:OL,database:OL,table:p2},S2={date:JS.date().iso().required()},T2={timestamp:JS.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};bL.exports=function(e,t){let r=t==="timestamp"?{...NL,...T2}:{...NL,...S2},s=JS.object(r);return m2.validateBySchema(e,s)}});var wL=T((cpe,IL)=>{var g2=Ve(),ZS=require("joi"),{hdb_table:R2,hdb_database:yL}=cn(),A2=ZS.object({schema:yL,database:yL,table:R2,hash_values:ZS.array().required(),ids:ZS.array()});IL.exports=function(e){return g2.validateBySchema(e,A2)}});var sT=T((upe,CL)=>{"use strict";var eT=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},tT=class{static{a(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,o){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=o}},rT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};CL.exports={InsertObject:eT,NoSQLSeachObject:tT,DeleteResponseObject:rT}});var vo=T((_pe,UL)=>{"use strict";var DL=XS(),O2=wL(),Mo=G(),LL=require("moment"),PL=U(),{promisify:N2,callbackify:b2}=require("util"),Uo=R(),y2=cs(),nT=N2(y2.getTableSchema),iT=as(),{DeleteResponseObject:I2}=sT(),{handleHDBError:vi,hdb_errors:w2}=Z(),{HDB_ERROR_MSGS:of,HTTP_STATUS_CODES:Bi}=w2,C2="records successfully deleted",L2=b2(ML);UL.exports={delete:L2,deleteRecord:ML,deleteFilesBefore:D2,deleteAuditLogsBefore:P2};async function D2(e){let t=DL(e,"date");if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);if(Mo.transformReq(e),!LL(e.date,LL.ISO_8601).isValid())throw vi(new Error,of.INVALID_DATE,Bi.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,of.INVALID_DATE,!0);let s=Mo.checkSchemaTableExist(e.schema,e.table);if(s)throw vi(new Error,s,Bi.NOT_FOUND,Uo.LOG_LEVELS.ERROR,s,!0);let n=await iT.deleteRecordsBefore(e);if(await nT(e.schema,e.table),PL.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(D2,"deleteFilesBefore");async function P2(e){let t=DL(e,"timestamp");if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);if(Mo.transformReq(e),isNaN(e.timestamp))throw vi(new Error,of.INVALID_VALUE("Timestamp"),Bi.BAD_REQUEST,Uo.LOG_LEVELS.ERROR,of.INVALID_VALUE("Timestamp"),!0);let r=Mo.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);let s=await iT.deleteAuditLogsBefore(e);return await nT(e.schema,e.table),PL.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(P2,"deleteAuditLogsBefore");async function ML(e){e.ids&&(e.hash_values=e.ids);let t=O2(e);if(t)throw vi(t,t.message,Bi.BAD_REQUEST,void 0,void 0,!0);Mo.transformReq(e);let r=Mo.checkSchemaTableExist(e.schema,e.table);if(r)throw vi(new Error,r,Bi.NOT_FOUND,Uo.LOG_LEVELS.ERROR,r,!0);try{await nT(e.schema,e.table);let s=await iT.deleteRecords(e);return Mo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${C2}`),s}catch(s){if(s.message===Uo.SEARCH_NOT_FOUND_MESSAGE){let n=new I2;return n.message=Uo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(ML,"deleteRecord")});var af=T((fpe,HL)=>{var M2=require("crypto"),vL=9;function U2(e){let t=B2(vL),r=BL(e+t);return t+r}a(U2,"createHash");function v2(e,t){let r=e.substr(0,vL),s=r+BL(t+r);return e===s}a(v2,"validateHash");function B2(e){let t="0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ",r=t.length,s="";for(let n=0;n<e;n++){let i=Math.floor(Math.random()*r);s+=t[i]}return s}a(B2,"generateSalt");function BL(e){return M2.createHash("md5").update(e).digest("hex")}a(BL,"md5");HL.exports={hash:U2,validate:v2}});var GL=T((hpe,qL)=>{var oT=Ve(),Qt={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 H2(e){return Qt.password.presence=!0,Qt.username.presence=!0,Qt.role.presence=!0,Qt.active.presence=!0,oT.validateObject(e,Qt)}a(H2,"addUserValidation");function q2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,oT.validateObject(e,Qt)}a(q2,"alterUserValidation");function G2(e){return Qt.password.presence=!1,Qt.username.presence=!0,Qt.role.presence=!1,Qt.active.presence=!1,oT.validateObject(e,Qt)}a(G2,"dropUserValidation");qL.exports={addUserValidation:H2,alterUserValidation:q2,dropUserValidation:G2}});var ke=T((Spe,xL)=>{"use strict";var{platform:ppe}=require("os"),F2="nats-server.zip",aT="nats-server",x2=process.platform==="win32"?`${aT}.exe`:aT,cT="HDB",k2=/^[^\s.,*>]+$/,FL="__request__",$2=a(e=>`${e}.${FL}`,"REQUEST_SUBJECT"),V2={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},Y2={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},K2={HUB:"hub.pid",LEAF:"leaf.pid"},W2={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Q2={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:cT,deliver_subject:"__HDB__.WORKQUEUE"},j2={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:cT,deliver_subject:"HDB.SCHEMAQUEUE"},z2={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:cT,deliver_subject:"HDB.USERQUEUE"},J2={SUCCESS:"success",ERROR:"error"},X2={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Z2={TXN:"txn",MSGID:"msgid"},Ga={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},e4={[Ga.ERR]:1,[Ga.WRN]:2,[Ga.INF]:3,[Ga.DBG]:4,[Ga.TRC]:5},t4={debug:"-D",trace:"-DVV"};xL.exports={NATS_SERVER_ZIP:F2,NATS_SERVER_NAME:aT,NATS_BINARY_NAME:x2,PID_FILES:K2,NATS_CONFIG_FILES:Y2,SERVER_SUFFIX:W2,WORK_QUEUE_CONSUMER_NAMES:Q2,SCHEMA_QUEUE_CONSUMER_NAMES:j2,USER_QUEUE_CONSUMER_NAMES:z2,NATS_TERM_CONSTRAINTS_RX:k2,REQUEST_SUFFIX:FL,UPDATE_REMOTE_RESPONSE_STATUSES:J2,CLUSTER_STATUS_STATUSES:X2,REQUEST_SUBJECT:$2,SUBJECT_PREFIXES:Z2,MSG_HEADERS:V2,LOG_LEVELS:Ga,LOG_LEVEL_FLAGS:t4,LOG_LEVEL_HIERARCHY:e4}});var uT=T((gpe,kL)=>{"use strict";var r4={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
6
6
  `),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
7
- `)},n4="certificate.pem",i4="privateKey.pem",o4="ca.pem";$L.exports={CERTIFICATE_VALUES:s4,CERTIFICATE_PEM_NAME:n4,PRIVATEKEY_PEM_NAME:i4,CA_PEM_NAME:o4}});var dT=T((Ope,QL)=>{"use strict";var WL=require("fs-extra"),_e=require("joi"),a4=require("os"),{boolean:Pe,string:fn,number:Bt,array:_T}=_e.types(),{totalmem:VL}=require("os"),Ga=require("path"),c4=v(),cf=G(),Ape=lT(),YL=R(),u4=Ve(),KL="log",l4="components",_4="Invalid logging.rotation.maxSize unit. Available units are G, M or K",d4="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",f4="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",E4="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",h4="rootPath config parameter is undefined",m4="clustering.enabled config parameter is undefined",vo=Bt.min(0).required(),uf=_T.items({host:fn.required(),port:vo}).empty(null),Qn;QL.exports={configValidator:p4,routesValidator:O4,route_constraints:uf};function p4(e){if(Qn=e.rootPath,cf.isEmpty(Qn))throw h4;let t=Pe.required(),r=Bt.min(0).max(1e3).empty(null).default(A4),s=fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(af),n=fn.optional().empty(null),i=fn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(af),c=_e.custom(T4).empty(null).default(af),u=e.clustering?.enabled;if(cf.isEmpty(u))throw m4;let _;return u===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:vo,routes:uf}).required()}).required(),leafNodes:_e.object({network:_e.object({port:vo}).required()}).required(),network:_e.object({port:vo}).required()}).required(),leafServer:_e.object({network:_e.object({port:vo,routes:uf}).required(),streams:_e.object({maxAge:Bt.min(120).allow(null).optional(),maxBytes:Bt.min(1).allow(null).optional(),maxMsgs:Bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Pe.optional(),databaseLevel:Pe.optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required(),verify:Pe.optional()}),user:fn.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:Pe,cacheTTL:Bt.required(),enableSessions:Pe}),analytics:_e.object({aggregatePeriod:Bt}),componentsRoot:s.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:Pe,logSuccessful:Pe}),file:Pe.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:Pe.optional(),compress:Pe.optional(),interval:fn.custom(R4).optional().empty(null),maxSize:fn.custom(g4).optional().empty(null),path:fn.optional().empty(null).default(af)}).required(),root:s,stdStreams:Pe.required(),auditLog:Pe.required()}).required(),operationsApi:_e.object({network:_e.object({cors:Pe.optional(),corsAccessList:_T.optional(),headersTimeout:Bt.min(1).optional(),keepAliveTimeout:Bt.min(1).optional(),port:Bt.optional().empty(null),securePort:Bt.optional().empty(null),timeout:Bt.min(1).optional()}).optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:vo,securePort:vo}).required(),webSocket:Pe.optional(),requireAuthentication:Pe.optional()}),http:_e.object({compressionThreshold:Bt.optional(),cors:Pe.optional(),corsAccessList:_T.optional(),headersTimeout:Bt.min(1).optional(),port:Bt.min(0).optional().empty(null),securePort:Bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:_e.object({writeAsync:Pe.required(),overlappingSync:Pe.optional(),caching:Pe.optional(),compression:Pe.optional(),noReadAhead:Pe.optional(),path:c,prefetchWrites:Pe.optional()}).required(),ignoreScripts:Pe.optional(),tls:_e.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(p4,"configValidator");function S4(e){return WL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(S4,"doesPathExist");function T4(e,t){_e.assert(e,fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=S4(e);if(r)return t.message(r)}a(T4,"validatePath");function g4(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(_4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(f4):e}a(g4,"validateRotationMaxSize");function R4(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(d4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(E4):e}a(R4,"validateRotationInterval");function A4(e,t){let r=t.state.path.join("."),s=a4.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||VL();return i=Math.round(Math.min(i,VL())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),c4.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(A4,"setDefaultThreads");function af(e,t){if(!cf.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(cf.isEmpty(Qn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ga.join(Qn,l4);case"logging.root":return Ga.join(Qn,KL);case"clustering.leafServer.streams.path":return Ga.join(Qn,"clustering","leaf");case"storage.path":let s=Ga.join(Qn,YL.LEGACY_DATABASES_DIR_NAME);return WL.existsSync(s)?s:Ga.join(Qn,YL.DATABASES_DIR_NAME);case"logging.rotation.path":return Ga.join(Qn,KL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(af,"setDefaultRoot");function O4(e){let t=_e.object({routes:uf});return u4.validateBySchema({routes:e},t)}a(O4,"routesValidator")});var rt=T((ype,sD)=>{"use strict";var Gr=R(),It=G(),gt=v(),{configValidator:N4,routesValidator:jL}=dT(),fr=require("fs-extra"),b4=require("yaml"),Fs=require("path"),y4=require("is-number"),JL=require("properties-reader"),I4=require("lodash"),{handleHDBError:w4}=Z(),{HTTP_STATUS_CODES:C4,HDB_ERROR_MSGS:lf}=Mr(),bpe=require("minimist"),{server:L4}=(Pr(),te(So)),{DATABASES_PARAM_CONFIG:Ku,CONFIG_PARAMS:qr,CONFIG_PARAM_MAP:xs}=Gr,D4="Unable to get config value because config is uninitialized",P4="Config successfully initialized",M4="Error backing up config file",U4="Empty parameter sent to getConfigValue",XL=Fs.join(Gr.PACKAGE_ROOT,"config","yaml",Gr.HDB_DEFAULT_CONFIG_FILE),v4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",zL={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"},_f,Rt,df;sD.exports={createConfigFile:B4,getDefaultConfig:H4,getConfigValue:eD,initConfig:ET,flattenConfig:Fa,updateConfigValue:tD,updateConfigObject:G4,getConfiguration:k4,setConfiguration:$4,readConfigFile:mT,getClusteringRoutes:V4,initOldConfig:rD,getConfigFromFile:Y4,getConfigFilePath:Bo,addConfig:K4,deleteConfigFromFile:W4,getConfigObj:Q4};function B4(e){let t=Bi(XL);_f=Fa(t.toJSON());let r;for(let o in e){let c=xs[o.toLowerCase()];if(c===qr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=fT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&ZL(t,r),hT(t);let s=t.toJSON();Rt=Fa(s);let n=t.getIn(["rootPath"]),i=Fs.join(n,Gr.HDB_CONFIG_FILE);fr.createFileSync(i),fr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(B4,"createConfigFile");function ZL(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!It.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Ku.TABLES))for(let i in s[n][Ku.TABLES])for(let o in s[n][Ku.TABLES][i]){let c=s[n][Ku.TABLES][i][o],u=[qr.DATABASES,n,Ku.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[qr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){gt.error("Error parsing schemas CLI/env config arguments",s)}}a(ZL,"setSchemasConfig");function H4(e){if(_f===void 0){let r=Bi(XL);_f=Fa(r.toJSON())}let t=xs[e.toLowerCase()];if(t!==void 0)return _f[t.toLowerCase()]}a(H4,"getDefaultConfig");function eD(e){if(e==null){gt.error(U4);return}if(Rt===void 0){gt.trace(D4);return}let t=xs[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(eD,"getConfigValue");function Bo(e=It.getPropsFilePath()){let t=It.getEnvCliRootPath();return t?Fs.join(t,Gr.HDB_CONFIG_FILE):JL(e).get(Gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Bo,"getConfigFilePath");function ET(e=!1){if(Rt===void 0||e){let t;if(!It.noBootFile()){t=It.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Bo(t),s;if(r.includes("config/settings.js"))try{rD(r);return}catch(i){if(i.code!==Gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Bi(r)}catch(i){if(i.code===Gr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
8
- This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}q4(s,r),hT(s);let n=s.toJSON();if(L4.config=n,Rt=Fa(n),Rt.logging_rotation_rotate)for(let i in zL)Rt[i]&&gt.error(`Config ${zL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(P4)}}a(ET,"initConfig");function q4(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Fs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Fs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Fs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(gt.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(q4,"checkForUpdatedConfig");function hT(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=N4(t);if(r.error)throw lf.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(hT,"validateConfig");function G4(e,t){Rt===void 0&&(Rt={});let r=xs[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a(G4,"updateConfigObject");function tD(e,t,r=void 0,s=!1,n=!1,i=!1){Rt===void 0&&ET();let o=eD(xs.hdb_root),c=Fs.join(o,Gr.HDB_CONFIG_FILE),u=Bi(c),_;if(r===void 0&&e.toLowerCase()===qr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=xs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=fT(f,t);u.setIn([...E],h)}else for(let f in r){let E=xs[f.toLowerCase()];if(E===qr.HTTP_SECUREPORT&&r[f]===Rt[qr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===qr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[qr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===qr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=Gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&u.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=fT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){gt.error(A)}}}_&&ZL(u,_),hT(u);let l=u.getIn(["rootPath"]),d=Fs.join(l,Gr.HDB_CONFIG_FILE);s===!0&&F4(c,l),fr.writeFileSync(d,String(u)),n&&(Rt=Fa(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(tD,"updateConfigValue");function F4(e,t){try{let r=Fs.join(t,"backup",`${Gr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(M4),gt.error(r)}}a(F4,"backupConfigFile");var x4=["databases"];function Fa(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)),df=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!x4.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!qr[u.toUpperCase()]&&xs[u]&&(n[xs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Fa,"flattenConfig");function fT(e,t){if(e===qr.CLUSTERING_NODENAME||e===qr.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(y4(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||It.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 It.autoCast(t)}a(fT,"castConfigValue");function k4(){let e=It.getPropsFilePath(),t=Bo(e);return Bi(t).toJSON()}a(k4,"getConfiguration");async function $4(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return tD(void 0,void 0,n,!0),v4}catch(i){throw typeof i=="string"||i instanceof String?w4(i,i,C4.BAD_REQUEST,void 0,void 0,!0):i}}a($4,"setConfiguration");function mT(){let e=It.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(s){if(!It.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Bo(e);return Bi(t).toJSON()}a(mT,"readConfigFile");function Bi(e){return b4.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Bi,"parseYamlDoc");function V4(){let e=mT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=It.isEmptyOrZeroLength(t)?[]:t;let r=jL(t);if(r)throw lf.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=It.isEmptyOrZeroLength(s)?[]:s;let n=jL(s);if(n)throw lf.CONFIG_VALIDATION(n.message);if(!It.isEmptyOrZeroLength(s)&&!It.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!It.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw lf.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(V4,"getClusteringRoutes");function rD(e){let t=JL(e);Rt={};for(let r in xs){let s=t.get(r.toUpperCase());if(It.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=xs[r].toLowerCase();n===qr.LOGGING_ROOT?Rt[n]=Fs.dirname(s):Rt[n]=s}return Rt}a(rD,"initOldConfig");function Y4(e){let t=mT();return I4.get(t,e.replaceAll("_","."))}a(Y4,"getConfigFromFile");async function K4(e,t){let r=Bi(Bo());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Bo(),String(r))}a(K4,"addConfig");function W4(e){let t=Bo(It.getPropsFilePath()),r=Bi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Fs.join(s,Gr.HDB_CONFIG_FILE);fr.writeFileSync(n,String(r))}a(W4,"deleteConfigFromFile");function Q4(){return df||(ET(),df)}a(Q4,"getConfigObj")});var iD=T((wpe,nD)=>{"use strict";var ff=R(),Ef=class{static{a(this,"BaseLicense")}constructor(t=0,r=ff.RAM_ALLOCATION_ENUM.DEFAULT,s=ff.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},pT=class extends Ef{static{a(this,"ExtendedLicense")}constructor(t=0,r=ff.RAM_ALLOCATION_ENUM.DEFAULT,s=ff.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};nD.exports={BaseLicense:Ef,ExtendedLicense:pT}});var Wu=T((Lpe,_D)=>{"use strict";var ka=require("fs-extra"),oD=of(),aD=require("crypto"),j4=require("moment"),z4=require("uuid").v4,jt=v(),TT=require("path"),J4=G(),Hi=R(),X4=iD().ExtendedLicense,xa="invalid license key format",Z4="061183",e3="mofi25",t3="aes-256-cbc",r3=16,s3=32,cD=j();cD.initSync();var ST;_D.exports={validateLicense:uD,generateFingerPrint:i3,licenseSearch:lD,getLicense:c3};function gT(){return TT.join(cD.getHdbBasePath(),Hi.LICENSE_KEY_DIR_NAME,Hi.LICENSE_FILE_NAME)}a(gT,"getLicenseDirPath");function n3(){let e=gT();return TT.join(e,Hi.LICENSE_FILE_NAME)}a(n3,"getLicenseFilePath");function RT(){let e=gT();return TT.join(e,Hi.REG_KEY_FILE_NAME)}a(RT,"getFingerPrintFilePath");async function i3(){let e=RT();try{return await ka.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await o3();throw jt.error(`Error writing fingerprint file to ${e}`),jt.error(t),new Error("There was an error generating the fingerprint")}}a(i3,"generateFingerPrint");async function o3(){let e=z4(),t=oD.hash(e),r=RT();try{await ka.mkdirp(gT()),await ka.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw jt.error(`Error writing fingerprint file to ${r}`),jt.error(s),new Error("There was an error generating the fingerprint")}return t}a(o3,"writeFingerprint");function uD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Hi.RAM_ALLOCATION_ENUM.DEFAULT,version:Hi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jt.error("empty license key passed to validate."),r;let s=RT(),n=!1;try{n=ka.statSync(s)}catch(i){jt.error(i)}if(n){let i;try{i=ka.readFileSync(s,"utf8")}catch{jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(e3),c=o[1];c=Buffer.concat([Buffer.from(c)],r3);let u=Buffer.concat([Buffer.from(i)],s3),_=aD.createDecipheriv(t3,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 E=a3(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xa),jt.error(xa),new Error(xa)}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(xa),jt.error(xa),new Error(xa)}else r.exp_date=l;r.exp_date<j4().valueOf()&&(r.valid_date=!1),oD.validate(o[1],`${Z4}${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||jt.error("Invalid licence"),r}a(uD,"validateLicense");function a3(e,t){try{let r=aD.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{jt.warn("Check old license failed")}}a(a3,"checkOldLicense");function lD(){let e=new X4,t=[];try{t=ka.readFileSync(n3(),"utf-8").split(Hi.NEW_LINE)}catch(r){r.code==="ENOENT"?jt.info("no license file found"):jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(J4.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=uD(n.license_key,n.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(n){jt.error("There was an error parsing the license string."),jt.error(n),e.ram_allocation=Hi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return ST=e,e}a(lD,"licenseSearch");async function c3(){return ST||await lD(),ST}a(c3,"getLicense")});var Er=T((vpe,ID)=>{"use strict";var hD="username is required",mD="nothing to update, must supply active, role or password to update",pD="password cannot be an empty string",SD="If role is specified, it cannot be empty.",TD="active must be true or false";ID.exports={addUser:p3,alterUser:S3,dropUser:g3,getSuperUser:N3,userInfo:R3,listUsers:mf,listUsersExternal:A3,setUsersToGlobal:Va,findAndValidateUser:bD,getClusterUser:b3,USERNAME_REQUIRED:hD,ALTERUSER_NOTHING_TO_UPDATE:mD,EMPTY_PASSWORD:pD,EMPTY_ROLE:SD,ACTIVE_BOOLEAN:TD};var gD=dr(),u3=Uo(),NT=of(),RD=FL(),AD=_r(),bT=Vn(),Fr=G(),OD=require("validate.js"),he=v(),{promisify:l3}=require("util"),yT=Wn(),dD=R(),fD=ke(),_3=rt(),Ppe=j(),Mpe=Wu(),d3=Fn(),{table:Upe}=(fe(),te(De)),{handleHDBError:En,hdb_errors:f3}=Z(),{HTTP_STATUS_CODES:hn,AUTHENTICATION_ERROR_MSGS:AT,HDB_ERROR_MSGS:$a}=f3,{UserEventMsg:IT}=Us(),OT=require("lodash"),{server:wT}=(Pr(),te(So)),E3=v();wT.getUser=bD;var ND={username:!0,active:!0,role:!0,password:!0},ED=new Map,hf=AD.searchByValue,h3=AD.searchByHash,m3=l3(u3.delete);async function p3(e){let t=OD.cleanAttributes(e,ND),r=RD.addUserValidation(t);if(r)throw En(new Error,r.message,hn.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await hf(s),n=n&&Array.from(n)}catch(u){throw he.error("There was an error searching for a role in add user"),he.error(u),u}if(!n||n.length<1)throw En(new Error,$a.ROLE_NAME_NOT_FOUND(t.role),hn.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw En(new Error,$a.DUP_ROLES_FOUND(t.role),hn.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=yT.encrypt(t.password)),t.password=NT.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await gD.insert(i)}catch(u){throw he.error("There was an error searching for a user."),he.error(u),u}he.debug(o);try{await Va()}catch(u){throw he.error("Got an error setting users to global"),he.error(u),u}if(o.skipped_hashes.length===1)throw En(new Error,$a.USER_ALREADY_EXISTS(t.username),hn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],bT.signalUserChange(new IT(process.pid)),`${c.username} successfully added`}a(p3,"addUser");async function S3(e){let t=OD.cleanAttributes(e,ND);if(Fr.isEmptyOrZeroLength(t.username))throw new Error(hD);if(Fr.isEmptyOrZeroLength(t.password)&&Fr.isEmptyOrZeroLength(t.role)&&Fr.isEmptyOrZeroLength(t.active))throw new Error(mD);if(!Fr.isEmpty(t.password)&&Fr.isEmptyOrZeroLength(t.password.trim()))throw new Error(pD);if(!Fr.isEmpty(t.active)&&!Fr.isBoolean(t.active))throw new Error(TD);let r=T3(t.username);if(!Fr.isEmpty(t.password)&&!Fr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=yT.encrypt(t.password)),t.password=NT.hash(t.password)),t.role==="")throw new Error(SD);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 hf(i)||[])}catch(c){throw he.error("Got an error searching for a role."),he.error(c),c}if(!o||o.length===0){let c=$a.ALTER_USER_ROLE_NOT_FOUND(t.role);throw he.error(c),En(new Error,c,hn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$a.ALTER_USER_DUP_ROLES(t.role);throw he.error(c),En(new Error,c,hn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await gD.update(s)}catch(i){throw he.error("Error during update."),he.error(i),i}try{await Va()}catch(i){throw he.error("Got an error setting users to global"),he.error(i),i}return bT.signalUserChange(new IT(process.pid)),n}a(S3,"alterUser");function T3(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(T3,"isClusterUser");async function g3(e){try{let t=RD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Fr.isEmpty(global.hdb_users.get(e.username)))throw En(new Error,$a.USER_NOT_EXIST(e.username),hn.NOT_FOUND,void 0,void 0,!0);let s;try{s=await m3(r)}catch(n){throw he.error("Got an error deleting a user."),he.error(n),n}he.debug(s);try{await Va()}catch(n){throw he.error("Got an error setting users to global."),he.error(n),n}return bT.signalUserChange(new IT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(g3,"dropUser");async function R3(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=OT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await h3(r)}catch(n){throw he.error("Got an error searching for a role."),he.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw he.error(r),r}return t}a(R3,"userInfo");async function A3(){let e;try{e=await mf()}catch(t){throw he.error("Got an error listing users."),he.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(A3,"listUsersExternal");async function mf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await hf(e)}catch(o){throw he.error("Got an error searching for roles."),he.error(o),o}let r={};for(let o of t)r[o.id]=OT.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await hf(s)}catch(o){throw he.error("Got an error searching for users."),he.error(o),o}let i=new Map;for(let o of n)o=OT.cloneDeep(o),o.role=r[o.role],O3(o.role),i.set(o.username,o);return i}catch(e){throw he.error("got an error listing users"),he.error(e),Fr.errorizeMessage(e)}return null}a(mf,"listUsers");function O3(e){try{if(!e){he.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(d3)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){he.error("Got an error trying to set system permissions."),he.error(t)}}a(O3,"appendSystemTablesToRole");async function Va(){try{let e=await mf();global.hdb_users=e}catch(e){throw he.error(e),e}}a(Va,"setUsersToGlobal");async function bD(e,t,r=!0){global.hdb_users||await Va();let s=global.hdb_users.get(e);if(!s)throw En(new Error,AT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw En(new Error,AT.USER_INACTIVE,hn.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(ED.get(t)===s.password)return n;if(NT.validate(s.password,t))ED.set(t,s.password);else throw En(new Error,AT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0)}return n}a(bD,"findAndValidateUser");async function N3(){global.hdb_users||await Va();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(N3,"getSuperUser");async function b3(){let e=await mf(),t=_3.getConfigFromFile(dD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Fr.isEmpty(r)&&r?.role?.role===dD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=yT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+fD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+fD.SERVER_SUFFIX.ADMIN,r}a(b3,"getClusterUser");var yD=[];wT.invalidateUser=function(e){for(let t of yD)try{t(e)}catch(r){E3.error("Error invalidating user",r)}};wT.onInvalidatedUser=function(e){yD.push(e)}});var ju=T((Gpe,DD)=>{"use strict";var Ho=v(),xr=R(),y3=Hy(),Hpe=cs(),qpe=Mi(),I3=Er(),{validateEvent:wD}=Us(),Qu=as(),w3=require("process"),{resetDatabases:C3}=(fe(),te(De)),L3={[xr.ITC_EVENT_TYPES.SCHEMA]:D3,[xr.ITC_EVENT_TYPES.USER]:LD};async function D3(e){let t=wD(e);if(t){Ho.error(t);return}Ho.trace("ITC schemaHandler received schema event:",e),await y3(e.message),await P3(e.message)}a(D3,"schemaHandler");async function P3(e){try{Qu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Qu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Qu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=C3();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ho.error(t)}}a(P3,"syncSchemaMetadata");var CD=[];async function LD(e){try{try{Qu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Qu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ho.warn(r)}let t=wD(e);if(t){Ho.error(t);return}Ho.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${w3.pid} received user event:`,e),await I3.setUsersToGlobal();for(let r of CD)r()}catch(t){Ho.error(t)}}a(LD,"userHandler");LD.addListener=function(e){CD.push(e)};DD.exports=L3});var Us=T((Ype,MD)=>{"use strict";var xpe=v(),CT=G(),M3=R(),{ITC_ERRORS:zu}=Mr(),{parentPort:kpe,threadId:U3,isMainThread:v3,workerData:$pe}=require("worker_threads"),{onMessageFromWorkers:B3,broadcast:Vpe,broadcastWithAcknowledgement:H3}=Qe();MD.exports={sendItcEvent:q3,validateEvent:PD,SchemaEventMsg:G3,UserEventMsg:F3};var pf;B3(async(e,t)=>{pf=pf||ju(),PD(e),pf[e.type]&&await pf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function q3(e){return!v3&&e.message&&(e.message.originator=U3),H3(e)}a(q3,"sendItcEvent");function PD(e){if(typeof e!="object")return zu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||CT.isEmpty(e.type))return zu.MISSING_TYPE;if(!e.hasOwnProperty("message")||CT.isEmpty(e.message))return zu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||CT.isEmpty(e.message.originator))return zu.MISSING_ORIGIN;if(M3.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return zu.INVALID_EVENT(e.type)}a(PD,"validateEvent");function G3(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(G3,"SchemaEventMsg");function F3(e){this.originator=e}a(F3,"UserEventMsg")});var Vn=T((Qpe,HD)=>{"use strict";var UD=R(),Wpe=G(),Sf=v(),vD=Ty(),Ya,{sendItcEvent:BD}=Us();function x3(e){try{Sf.trace("signalSchemaChange called with message:",e),Ya=Ya||ju();let t=new vD(UD.ITC_EVENT_TYPES.SCHEMA,e);return Ya.schema(t),BD(t)}catch(t){Sf.error(t)}}a(x3,"signalSchemaChange");function k3(e){try{Sf.trace("signalUserChange called with message:",e),Ya=Ya||ju();let t=new vD(UD.ITC_EVENT_TYPES.USER,e);return Ya.user(t),BD(t)}catch(t){Sf.error(t)}}a(k3,"signalUserChange");HD.exports={signalSchemaChange:x3,signalUserChange:k3}});var el={};Fe(el,{addAnalyticsListener:()=>Zu,recordAction:()=>kr,recordActionBinary:()=>us,setAnalyticsEnabled:()=>$3});function $3(e){WD=e}function kr(e,t,r,s,n){if(!WD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=Rf.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:s,type:n},Rf.set(i,o)}Tf||V3()}function us(e,t,r,s,n){kr(!!e,t,r,s,n)}function Zu(e){zD.push(e)}function V3(){Tf=performance.now(),setTimeout(async()=>{let e=performance.now()-Tf;Tf=0;let t=[],r={time:Date.now(),period:e,threadId:qo.threadId,metrics:t};for(let[n,i]of Rf){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 JD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}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 XD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:qo.threadId,byThread:!0,...s});for(let n of zD)n(t);Rf=new Map,qo.parentPort?qo.parentPort.postMessage({type:jD,report:r}):tP({report:r})},QD).unref()}async function Y3(e,t=6e4){let r=PT(),s=ZD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:m}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=m;for(let g of S||[]){let{path:N,method:V,type:$,metric:F,count:w,total:K,distribution:B,threads:k,...se}=g;w||(w=1);let Ie=F+(N?"-"+N:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let Ge=ie.threads[A];if(Ge)ie=Ge;else{ie.threads[A]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Vt=ie.count;for(let Ge in se){let Mt=se[Ge];typeof Mt=="number"&&(ie[Ge]=(ie[Ge]*Vt+Mt*w)/(Vt+w))}ie.count+=w,K>=0&&(ie.total+=K,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},g),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[A]=Object.assign({},se),u.push(ie));if(B){B=B.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Vt=c.get(Ie);Vt?Vt.push(...B):c.set(Ie,B)}}await XD()}for(let h of u){let{path:m,method:S,type:A,metric:g,count:N,total:V,distribution:$,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let k of F){let se=k[K];typeof se=="number"&&(B+=se)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,m]of c){let S=o.get(h);m.sort((Ge,Mt)=>Ge.value>Mt.value?1:-1);let A=S.count-1,g=[],N=0,V=0,$;for(let Ge of JD){let Mt=A*Ge;for(;N<Mt;)$=m[V++],N+=$.count,V===1&&N--;let ys=m[V>1?V-2:0];$||($=m[0]),g.push($.value-($.value-ys.value)*(N-Mt)/$.count)}let[F,w,K,B,k,se,Ie,ie,Vt]=g;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Vt})}let l;for(let[h,m]of o)m.id=(0,gf.getNextMonotonicTime)(),m.time=_,s.primaryStore.put(m.id,m,{append:!0}).then(S=>{S||s.primaryStore.put(m.id,m)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,gf.getNextMonotonicTime)(),m={id:h,metric:"main-thread-utilization",idle:f-qD,active:E-GD,time:d,...process.memoryUsage()};s.primaryStore.put(h,m,{append:!0}).then(S=>{S||s.primaryStore.put(h,m)})}qD=f,GD=E}async function FD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function PT(){return xD||(xD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function ZD(){return kD||(kD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function Q3(){eP=!0;let e=(0,Xu.get)(DT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Y3(QD,e),await FD(PT(),K3),await FD(ZD(),W3)},Math.min(e/2,2147483647)).unref()}function tP(e,t){let r=e.report;r.threadId=t?.threadId||qo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&($D+=s.mean*s.count);r.totalBytesProcessed=$D,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(VD.get(t))}),VD.set(t,t.performance.eventLoopUtilization())),r.id=(0,gf.getNextMonotonicTime)(),PT().primaryStore.put(r.id,r),eP||Q3(),j3&&(rP=J3(r))}async function J3(e){if(await rP,!qi){let r=(0,Ju.dirname)((0,KD.getLogFilePath)());try{qi=await(0,LT.open)((0,Ju.join)(r,"analytics.log"),"r+")}catch{qi=await(0,LT.open)((0,Ju.join)(r,"analytics.log"),"w+")}}let t=(await qi.stat()).size;if(t>z3){let r=Buffer.alloc(t);await qi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await qi.write(r,{position:0}),await qi.truncate(r.length),t=r.length}await qi.write(JSON.stringify(e)+`
9
- `,t)}var qo,YD,KD,Ju,LT,gf,Xu,DT,Rf,WD,Tf,QD,jD,zD,JD,qD,GD,XD,K3,W3,xD,kD,eP,$D,VD,j3,rP,qi,z3,jn=Re(()=>{qo=require("worker_threads"),YD=D(Qe());fe();KD=D(v()),Ju=require("path"),LT=require("fs/promises"),gf=D(or()),Xu=D(j()),DT=D(R());Pr();(0,Xu.initSync)();Rf=new Map,WD=(0,Xu.get)(DT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a($3,"setAnalyticsEnabled");a(kr,"recordAction");Tt.recordAnalytics=kr;a(us,"recordActionBinary");Tf=0,QD=1e3,jD="analytics-report",zD=[];a(Zu,"addAnalyticsListener");JD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(V3,"sendAnalytics");a(Y3,"aggregation");qD=0,GD=0,XD=a(()=>new Promise(setImmediate),"rest");a(FD,"cleanup");K3=36e5,W3=31536e6;a(PT,"getRawAnalyticsTable");a(ZD,"getAnalyticsTable");(0,YD.setChildListenerByType)(jD,tP);a(Q3,"startScheduledTasks");$D=0,VD=new Map,j3=!1;a(tP,"recordAnalytics");z3=1e6;a(J3,"logAnalytics")});var HT={};Fe(HT,{coerceType:()=>yf,makeTable:()=>Cf,setServerUtilities:()=>oX,updateResource:()=>nl});function Cf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),my(i,u);let S=dp(i,s,u),A=0,g,N,V,$={},F=Promise.resolve(),w,K,B;for(let Q of m)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(w=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(K=Q),Q.expiresAt&&(B=Q),Q.isPrimaryKey&&($=Q);let k,se=[],Ie=[],ie=1,Vt=2,Ge={},Mt={},ys=864e5,AN,x_,fk=10,Ek=6;E&&bN();class pt extends Ut{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(p,b){b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let C=a(I=>{let P=this.sources.slice(0,-1);if(P=P.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),P.length>0)if(P.length===1){let M=P[0];return(W,z,ae)=>{if(W?.source!==M)return M[I](z,ae,W)}}else return(M,W,z)=>{let ae=[];for(let Y of P){if(M?.source===Y)break;ae.push(Y[I](W,z,M))}return Promise.all(ae)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],L=a(I=>{if(O[I]&&(!O[I].reliesOnPrototype||O.prototype[I]))return(P,M,W)=>{if(!P?.source)return O[I](M,W,P)}},"getApplyToCanonicalSource");return Ge={put:L("put"),delete:L("delete"),publish:L("publish")},Mt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,P=a(async(M,W)=>{let z=M.value,ae=M.table?ze[c][M.table]:pt;if(c===ks.SYSTEM_SCHEMA_NAME&&(M.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[ae.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let Y=await ae.getResource(M.id,W,tl);switch(M.type){case"put":return Y._writeUpdate(z,tl);case"delete":return Y._writeDelete(tl);case"publish":return Y._writePublish(z,tl);case"invalidate":return Y.invalidate(tl);default:je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let W=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Go.getWorkerIndex)()):(0,Go.getWorkerIndex)()===0,z=M&&W&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ae;for await(let Y of z)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){je.error("Bad subscription event",Y);continue}if(Y.source=p,ae)if(Y.beginTxn)ae.resolve();else{P(Y,ae);continue}if(Y.type==="end_txn")continue;let ye=We(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Yt of Y.writes)try{oe.push(P(Yt,Y))}catch(rr){throw rr.message+=" writing "+JSON.stringify(Yt)+" of event "+JSON.stringify(Y),rr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Yt;for(let rr of Y.attributes)oe.find(fo=>fo.name===rr.name)||(oe.push(rr),Yt=!0);Yt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),ol.signalSchemaChange(new al.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ae=Y,P(Y,Y),new Promise(oe=>{ae.resolve=oe})):P(Y,Y)});I&&(await ye,ol.signalUserChange(new al.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){je.error("error in subscription handler",me)}}}catch(M){je.error(M)}})(),this}static getResource(p,b,C){let O=super.getResource(p,b,C);if(p!=null){Wc(p);try{if(O.hasOwnProperty(Ae))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let L=!C?.async||i.cache?.get(p),I=Ni(b),P=I.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return ON(p,b,{transaction:P},L,M=>{if(M?nl(O,M):O[Ae]=null,b.onlyIfCached&&b.noCacheStore){if(!O.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let W=Dm(p,M,b,O);if(W)return I?.disregardReadTxn(),O[UT]=!0,BT(W,z=>(nl(O,z),O))}return O})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(p)),L}}return O}ensureLoaded(){let p=Dm(this[Le],this[mn],this[Se]);if(p)return this[UT]=!0,BT(p,b=>{this[mn]=b,this[Ae]=b.value,this[bf]=b.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,ys=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ys=ys||(d+f)/4,Pm()}static enableAuditing(p=!0){E=p,p&&bN(),pt.audit=p}static coerceId(p){return p===""?null:yf(p,$)}static async dropTable(){if(delete ze[c][n],c===o){for(let p of m)l.remove(pt.tableName+"/"+p.name),r[p.name]?.drop();l.remove(pt.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));ol.signalSchemaChange(new al.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(p,b){if(p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:m}}return super.get(p,b)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ds])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Se]?.returnNonexistent)return this}allowRead(p,b){let C=$_(p);if(C?.read){let O=C.attribute_permissions;if(O){b||(b={});let L=b.select;if(L){let I=vT(O,"read");b.select=L.filter(P=>I[P])}else b.select=O.filter(I=>I.read).map(I=>I.attribute_name);return b}else return!0}}allowUpdate(p,b){let C=$_(p);if(C?.update){let O=C.attribute_permissions;if(O){let L=vT(O,"update");for(let I in b)if(!L[I])return!1;for(let I of O){let P=I.attribute_name;!I.update&&!(P in b)&&(b[P]=this.getProperty(P))}}return!0}}allowCreate(p,b){if(this[Ds]){let C=$_(p);if(C?.insert){let O=C.attribute_permissions;if(O){let L=vT(O,"insert");for(let I in b)if(!L[I])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return $_(p)?.delete}update(p,b){if(!Ni(this[Se]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;if(typeof p=="object"&&p)if(b){Object.isFrozen(p)&&(p=Object.assign({},p));for(let L in this[Ae])p[L]===void 0&&(p[L]=void 0);this[Kt]=p}else O=this[Kt],O&&(p=Object.assign(O,p)),this[Kt]=O=p;return this._writeUpdate(this),this}invalidate(p){let b=this[Se],C=this[Le];Wc(C),Ni(this[Se]).addWrite({key:C,store:i,invalidated:!0,entry:this[mn],nodeName:this[Se]?.nodeName,before:Ge.invalidate?.bind(this,b,C),beforeIntermediate:Mt.invalidate?.bind(this,b,C),commit:(L,I)=>{if(I?.version>L)return;let P=null;for(let M in r)P||(P={}),P[M]=this.getProperty(M);S(C,P,this[mn],L,Af,E,this[Se],0,"invalidate")}})}static evict(p,b,C){let O=this.Source,L;if(!((N||E)&&(!b||(L=i.getEntry(p),!L||!b)||L.version!==C))){if(N){if(i.hasLock(p,L.version))return;let I;for(let P in r)I||(I={}),I[P]=b[P];if(I){S(p,I,L,C,Of,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{k_(p,b,null)}),E)S(p,null,L,C,Of,null,null,0,null,!0);else return i.remove(p,C)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=n,p.schema||=c,uP.operation(p,b)}async put(p){this.update(p,!0)}_writeUpdate(p,b){let C=this[Se],O=Ni(C),L=this[Le];Wc(L);let I=this[mn];this[MT]=!0;let P={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!p[nP]||nd(p)){if(this.validate(p),C?.source?p=uu(p):(t&&p[t]!==L&&(p[t]=L),K&&(p[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?p[w.name]=I?.value[w.name]:p[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),p=uu(p)),p[Ae])throw new Error("Can not assign a record with a record property");this[Ae]=p}else O.removeWrite(P)},before:Ge.put&&(()=>Ge.put(C,L,p)),beforeIntermediate:Mt.put&&(()=>Mt.put(C,L,p)),commit:(M,W,z)=>{z&&(C&&W?.version>(C.lastModified||0)&&(C.lastModified=W.version),nl(this,W));let ae=W?.value;this[MT]=!1,je.trace("Checking timestamp for put",L,W?.version>M,W?.version,M),!(W?.version>M)&&(k_(L,ae,p),S(L,p,W,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};O.addWrite(P)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ds]){for await(let b of this.search(p))(await pt.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ae]?this._writeDelete(p):!1}_writeDelete(p){let b=Ni(this[Se]),C=this[Le];Wc(C);let O=this[Se];return b.addWrite({key:C,store:i,resource:this,nodeName:O?.nodeName,before:Ge.delete?.bind(this,O,C),beforeIntermediate:Mt.delete?.bind(this,O,C),commit:(L,I,P)=>{let M=I?.value;P&&(O&&I?.version>(O.lastModified||0)&&(O.lastModified=I.version),nl(this,I)),!(I?.version>L)&&(k_(this[Le],M),je.trace("Write delete entry",C,L),E||h?(S(C,null,this[mn],L,0,E,this[Se],0,"delete"),E||Pm()):i.remove(this[Le]))}}),!0}search(p){let b=Ni(this[Se]);if(!p)throw new Error("No query provided");let C=p.reverse===!0,O=p.conditions;O?O.length===void 0&&(O=Array.from(O)):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Le]&&(O=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(O));for(let Y of O){let me=Y[0]??Y.attribute,ye=me==null?$:m.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=L(Y.value,ye):Y[1]=L(Y[1],ye));else if(me!=null)throw(0,pn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function L(Y,me){return Array.isArray(Y)?Y.map(ye=>yf(ye,me)):yf(Y,me)}a(L,"coerceTypedValues"),O.length>1&&(O=(0,cP.sortBy)(O,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===sl.SEARCH_TYPES.EQUALS){let ye=Y[0]??Y.attribute;if(ye==null||ye===t)Y.estimated_count=1;else{let oe=r[ye];Y.estimated_count=oe?oe.getValuesCount(Y[1]??Y.value):1/0}}else me===sl.SEARCH_TYPES.CONTAINS||me===sl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===sl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=eX:Y.estimated_count=Z3}return Y.estimated_count}));let I=b.getReadTxn();I.use();let P=p.select,M=O[0],W;if(!M)W=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:P?.length<4}:{start:!1,transaction:I,lazy:P?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):Nf.SKIP);else{let Y=ep(M,I,C,pt,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let me=O.slice(1).map(tp);W=ae(Y,me)}else{for(let ye=1;ye<O.length;ye++){let oe=O[ye],Yt=ep(oe,I,C,pt,p.allowFullScan);Y=Y.concat(Yt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),W=ae(Y)}}(p.offset||p.limit!==void 0)&&(W=W.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),W.onDone=()=>{W.onDone=null,I.done()};let z=this[Se];function ae(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||P?.length<4,alwaysPrefetch:!0},Yt=p.ensureLoaded!==!1;function rr(fo,$e){if(Yt&&$e!==void 0){let Lr=!z.onlyIfCached&&Dm($e,fo,z,this);if(Lr)return Lr.then(pk=>rr(pk))}let rn=fo?.value;if(!rn)return Nf.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](rn))return Nf.SKIP;return rn}return a(rr,"processEntry"),Y.map(fo=>ON(fo,z,oe,!1,rr))}return a(ae,"idsToRecords"),W}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let b=Ey(pt,this[Le]??null,function(I,P,M,W){try{let z=P.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:P.version,type:P.type,beginTxn:W})}catch(z){je.error(z)}},p.startTime,this[Ds]);p.crossThreads===!1&&(b.crossThreads=!1),p.supportsTransactions&&(b.supportsTransactions=!0);let C=this[Le],O=p.previousCount;O>1e3&&(O=1e3);let L=p.startTime;if(this[Ds]){if(L){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:P}of u.getRange({start:L,exclusiveStart:!0})){let M=Ur(P,i);if(M.tableId!==s)continue;let W=M.recordId;(C==null||aP(C,W))&&b.send({id:W,timestamp:I,...M}),b.startTime=I}}else if(O){let I=[];for(let{key:P,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let W=Ur(M);if(W.tableId!==s)continue;let z=W.recordId;if(C==null||aP(C,z)){let ae=W.getValue(i);if(I.push({id:z,timestamp:P,value:ae,version:W.version,type:W.type}),--O<=0)break}}catch(W){je.error("Error getting history entry",P,W)}for(let P=I.length;P>0;)b.send(I[--P]);I[0]&&(b.startTime=I[0].timestamp)}else if(!p.omitCurrent)for(let{key:I,value:P,version:M,localTime:W}of i.getRange({start:C??!1,end:C==null?void 0:[C,If.MAXIMUM_KEY],versions:!0}))P&&b.send({id:I,version:M,timestamp:W,value:P})}else{O&&!L&&(L=0);let I=this[mn]?.localTime;if(je.trace("Subscription from",L,"from",C),L<I){let P=[],M=I;do{let W=u.get(M);if(W){p.omitCurrent=!0;let z=Ur(W),ae=z.getValue(i);P.push({id:C,value:ae,timestamp:M,...z}),M=z.previousLocalTime}else break;O&&O--}while(M>L&&O!==0);for(let W=P.length;W>0;)b.send(P[--W]);b.startTime=I}!p.omitCurrent&&this.doesExist()&&b.send({id:C,version:this[bf],timestamp:this[mn]?.localTime,value:this})}return p.listener&&b.on("data",p.listener),b}doesExist(){return!!(this[Ae]||this[MT])}async publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let C=Ni(this[Se]),O=this[Le]||null;Wc(O);let L=this[Se];C.addWrite({key:O,store:i,entry:this[mn],nodeName:L?.nodeName,validate:()=>{this.validate(p)},before:Ge.publish?.bind(this,L,O,p),beforeIntermediate:Mt.publish?.bind(this,L,O,p),commit:(I,P,M)=>{P===void 0&&h&&!E&&Pm(),S(O,P?.value??null,P,P?.version||I,0,!0,L,P?.expiresAt,"message",!1,p)}})}validate(p){let b,C=a((O,L,I)=>{if(L.type&&O!=null)if(L.properties){typeof O!="object"&&(b||(b=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let P=L.properties;for(let M=0,W=P.length;M<W;M++){let z=P[M],ae=C(O[z.name],z,I+"."+z.name);ae&&(O[z.name]=ae)}}else switch(L.type){case"Int":(typeof O!="number"||O>>0!==O)&&(b||(b=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(b||(b=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(b||(b=[])).push(`Property ${I} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(P=>typeof P=="string")||(b||(b=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(b||(b=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof O!="boolean"&&(b||(b=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(b||(b=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":O instanceof Uint8Array||(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(L.elements)for(let P=0,M=O.length;P<M;P++){let W=O[P],z=C(W,L.elements,I+"[*]");z&&(O[P]=z)}}else(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&O==null&&(b||(b=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let O=0,L=m.length;O<L;O++){let I=m[O],P=C(p[I.name],I,I.name);P&&(p[I.name]=P)}if(b)throw new pn.ClientError(b.join(". "))}getUpdatedTime(){return this[bf]}wasLoadedFromSource(){return N?!!this[UT]:void 0}static async addAttributes(p){let b=m.slice(0);for(let C of p){if(!C.name)throw new pn.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");b.push(C)}return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static async removeAttributes(p){let b=m.filter(C=>!p.includes(C.name));return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static getRecordCount(p){let b=i.getStats().entryCount,C=5e3,O=1e3,L;b>C&&!p?.exactCount&&(L=O);let I=0;for(let{value:P}of i.getRange({start:!0,lazy:!0,limit:L}))P!=null&&I++;if(L){let P=I;I=0;for(let{value:Yt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Yt!=null&&I++;let M=L*2,W=(I+P)/M,z=Math.pow((I-P+1)/L/2,2)+W*(1-W)/M,ae=Math.max(Math.sqrt(z)*b,1),Y=Math.round(W*b),me=Math.max(Y-1.96*ae,0),ye=Math.min(Y+1.96*ae,b),oe=Math.pow(10,Math.round(Math.log10(ae)));return oe>Y&&(oe=oe/10),I=Math.round(Y/oe)*oe,{recordCount:I,estimatedRange:[Math.round(me),Math.round(ye)]}}return{recordCount:I}}static updatedAttributes(){od(this,this)}static async deleteHistory(p=0){let b;for(let{key:C,value:O}of u.getRange({start:0,end:p}))await rl(),Ur(O).tableId===s&&(b=u.remove(C));await b}static async*getHistory(p=0,b=1/0){for(let{key:C,value:O}of u.getRange({start:p,end:b})){await rl();let L=Ur(O);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(p){let b=[],C=i.getEntry(p);if(!C)return b;let O=C.localTime,L=0;do{await rl();let I=u.get(O);if(I){let P=Ur(I);b.push({id:P.recordId,localTime:O,version:P.version,type:P.type,value:P.getValue(i),user:P.user}),O=P.previousLocalTime}else break}while(L<1e3&&O);return b.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let hk=pt.prototype;return hk[nP]=!0,d&&pt.setTTLExpiration(d/1e3),B&&mk(),pt;function k_(Q,p,b){let C;for(let O in r){let L=r[O],I=L.isIndexing,P=b?.[O],M=p?.[O];if(P===M&&!I)continue;C=!0;let W=(0,il.getIndexedValues)(M);if(W){sP&&L.prefetch(W.map(z=>({key:z,value:Q})),oP);for(let z=0,ae=W.length;z<ae;z++)L.remove(W[z],Q)}if(W=(0,il.getIndexedValues)(P),W){sP&&L.prefetch(W.map(z=>({key:z,value:Q})),oP);for(let z=0,ae=W.length;z<ae;z++)L.put(W[z],Q)}}return C}a(k_,"updateIndices");function Wc(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>iP)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,If.writeKey)(Q,nX,0)>iP)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Wc,"checkValidId");function ON(Q,p,b,C,O){let L=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return O(null,Q);let I=i.getEntry(Q,b);return I&&p&&(I?.version>(p.lastModified||0)&&(p.lastModified=I.version),I?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=I.localTime)),O(I,Q)},"whenPrefetched");return C?L():ie>0?(ie--,L()):new Promise((I,P)=>{ie===0?(ie--,i.prefetch([Q],()=>{M(),W()})):(se.push(Q),Ie.push(W),se.length>Ek&&(ie--,M()));function M(){if(se.length>0){let z=Ie;i.prefetch(se,()=>{ie===-1?M():ie++;for(let ae of z)ae()}),se=[],Ie=[],Vt>2&&Vt--}else ie=Vt,Vt<fk&&Vt++}a(M,"prefetch");function W(){try{I(L())}catch(z){P(z)}}a(W,"load")})}a(ON,"loadLocalRecord");function $_(Q){if(!Q)return;let p=Q.role.permission;if(p.super_user)return iX;let b=p[c],C,O=b?.tables;if(O)return O[n];if(c==="data"&&(C=p[n])&&!C.tables)return C}a($_,"getTablePermissions");function Dm(Q,p,b,C){if(N){let O;if(b.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Af|Of)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,us(!O,"cache-hit",n)),O){let L=NN(Q,p,b).then(I=>(I?.value?.[Ae]&&je.error("Can not assign a record with a record property"),b&&(I?.version>(b.lastModified||0)&&(b.lastModified=I.version),b.lastRefreshed=Date.now()),I));if(b?.onlyIfCached||p?.value&&C?.allowStaleWhileRevalidate?.(p,Q)){if(L.catch(I=>je.warn(I)),b?.onlyIfCached&&!C.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return L}}}a(Dm,"ensureLoadedFromSource");function Ni(Q){let p=Q?.transaction;if(p){if(!p.open)throw new Error("Can not use a transaction that is not open");if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let b=p.next;if(!b)return p=p.next=new go,p.lmdbDb=i,p;p=b}while(!0)}else return new ud}a(Ni,"txnForContext");async function NN(Q,p,b){let C=p?.metadataFlags,O=p?.version,L,I;if(!i.attemptLock(Q,O,()=>{clearTimeout(I);let z=i.getEntry(Q);!z||!z.value||z.metadataFlags&(Af|Of)?L(NN(Q,i.getEntry(Q),b)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(Q,O)},sX)});let P=p?.value,M={requestContext:b,replacingRecord:P,replacingVersion:O,source:null,resourceCache:b?.resourceCache},W=b?.responseHeaders;return new Promise((z,ae)=>{let Y;BT(We(M,async me=>{let ye=performance.now(),oe,Yt,rr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(M.source=Lr,oe=await Lr.get(Q,M),oe))break;rr=C&Af;let $e=M.lastModified||rr&&O;Yt=rr||$e>O||!P,$e||($e=(0,il.getNextMonotonicTime)());let rn=performance.now()-ye;if(kr(rn,"cache-resolution",n),W&&W.append("Server-Timing",`cache-resolve;dur=${rn.toFixed(2)}`),me.timestamp=$e,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),oe){if(typeof oe!="object")throw new Error("Only objects can be cached and stored in tables");typeof oe.toJSON=="function"&&(oe=oe.toJSON()),t&&oe[t]!==Q&&(oe[t]=Q)}Y=!0,z({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${Q} for ${n}`,P&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(z({version:O,value:P}),je.trace($e.message,"(returned stale record)")):ae($e),M.transaction.abort();return}if(b?.noCacheStore){M.transaction.abort();return}Ni(M).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:($e,rn)=>{if(rn?.version!==O)return;let Lr=k_(Q,P,oe);oe?(Mt.put?.(M,Q,oe),S(Q,oe,rn,$e,0,E&&Yt||null,M,M.expiresAt,"put",!!rr)):(Mt.delete?.(M,Q),E||h?S(Q,null,rn,$e,0,E&&Yt||null,M,0,"delete",!!rr):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},me=>{i.unlock(Q,O),Y&&je.error("Error committing cache update",me)})})}a(NN,"getFromSource");function Pm(){if(ys!==AN&&(AN=ys,(0,Go.getWorkerIndex)()===(0,Go.getWorkerCount)()-1)){if(x_&&clearTimeout(x_),!ys)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/ys)*ys+Q.getTime(),b=a(C=>{je.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),x_=setTimeout(()=>F=F.then(async()=>{if(b(Math.max(C+ys,Date.now())),i.rootStore.status!=="open"){clearTimeout(x_);return}je.trace(`Starting cleanup scan for ${n}`);try{let O=0;for(let{key:L,value:I,version:P,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&P+rX<Date.now()?i.remove(L,P):M&&M+f<Date.now()&&(pt.evict(L,I,P),O++),await rl();je.trace(`Finished cleanup scan for ${n}, evicted ${O} entries`)}catch(O){je.trace(`Error in cleanup scan for ${n}:`,O)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a(Pm,"scheduleCleanup");function bN(){k=u?.addDeleteRemovalCallback(s,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(bN,"addDeleteRemoval");function mk(){(0,Go.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=B.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:b}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(b);C?.value?.[Q]<Date.now()&&pt.evict(b,C.value,C.version),await rl()}}catch(Q){je.error("Error in evicting old records",Q)}},tX).unref()}a(mk,"runRecordExpirationEviction")}function vT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function oP(){}function oX(e){uP=e}function yf(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!aX.test(e)&&(e+="Z"),new Date(e)):r?e:(0,wf.autoCast)(e)}function aP(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function BT(e,t,r){return e?.then?e.then(t,r):t(e)}function nl(e,t){e[mn]=t,e[Ae]=t?.value??null,e[bf]=t?.version}var ks,Nf,il,cP,sl,cl,pn,ol,al,je,If,Go,wf,X3,uP,Z3,eX,tX,rX,sP,sX,bf,nP,mn,MT,UT,tl,Af,Of,nX,iP,iX,TSe,aX,rl,Lf=Re(()=>{ks=D(R()),Nf=require("lmdb"),il=D(or()),cP=require("lodash");Ls();Xm();sl=D(Ke()),cl=D(j());py();pn=D(Z()),ol=D(Vn()),al=D(Us());fe();_d();je=D(v());cd();Ro();If=require("ordered-binary"),Go=D(Qe());Na();wf=D(G());fu();jn();X3=new Uint8Array(9);X3[8]=192;Z3=1e8,eX=1e7,tX=6e4,rX=864e5;cl.initSync();sP=cl.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),sX=1e4,bf=Symbol.for("version"),nP=Symbol.for("incremental-update"),mn=Symbol("entry"),MT=Symbol("is-saving"),UT=Symbol("loaded-from-source"),tl={isNotification:!0,ensureLoaded:!1},Af=1,Of=8,nX=Buffer.allocUnsafeSlow(8192),iP=1978,iX={read:!0,insert:!0,update:!0,delete:!0},TSe=(0,wf.convertToMS)(cl.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Cf,"makeTable");a(vT,"attributesAsObject");a(oP,"noop");a(oX,"setServerUtilities");aX=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(yf,"coerceType");a(aP,"isDescendantId");rl=a(()=>new Promise(setImmediate),"rest");a(BT,"when");a(nl,"updateResource")});var De={};Fe(De,{database:()=>xu,databases:()=>ze,dropDatabase:()=>kS,dropTableMeta:()=>fX,getDatabases:()=>Hs,getTables:()=>cX,onUpdatedTable:()=>kT,readMetaDb:()=>ul,resetDatabases:()=>uX,table:()=>ut,tables:()=>Vr});function cX(){return vf||Hs(),Vr||{}}function Hs(){if(vf)return ze;vf=!0,Qa=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,$r.existsSync)(e))for(let r of(0,$r.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ye.basename)(r.name,".mdb");r.isFile()&&(0,Ye.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ul((0,Ye.join)(e,r.name),null,s)}if((0,$r.existsSync)((0,Wa.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,Wa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,Wa.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,Wa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,$r.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ye.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ye.join)(n,i.name);ul((0,Ye.join)(s,i.name),(0,Ye.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,$r.existsSync)(n))for(let o of(0,$r.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ye.extname)(o.name).toLowerCase()===".mdb"&&ul((0,Ye.join)(n,o.name),(0,Ye.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ye.join)(c.path,(0,Ye.basename)(o+".mdb"));(0,$r.existsSync)(u)&&ul(u,o,r,null,!0)}}for(let r in ze){let s=Qa.get(r);if(s){let n=ze[r];r.includes("delete")&&ls.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(ls.trace(`delete table class ${i}`),delete n[i])}else if(delete ze[r],r==="data"){for(let n in Vr)delete Vr[n];delete Vr[Bf]}}return Qa=null,ze}}function uX(){vf=!1;for(let[,e]of Gi)e.needsDeletion=!0;Hs();for(let[e,t]of Gi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Gi.delete(e));return ze}function ul(e,t,r=FT,s,n){let i=new qT.default(e,!1);try{let o=Gi.get(e);o?o.needsDeletion=!1:(o=(0,Pf.open)(i),Gi.set(e,o));let c=new Fo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Df.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,$r.existsSync)(s)&&(i.path=s,_=(0,Pf.open)(i),_.isLegacy=!0):_=gd(o));let l=fP(r),d=l[Bf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let k of m)if(k.is_hash_attribute||k.isPrimaryKey){S=k;break}if(!S){ls.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=l[E],g={},N=[],V,$,F=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)g=A.indices,N=A.attributes,A.schemaVersion++;else{V=S.tableId,V?V>=(u.get(Ka)||0)&&u.putSync(Ka,V+1):(S.tableId=V=u.get(Ka),V||(V=1),u.putSync(Ka,V+1),u.putSync(S.key,S));let k=new Fo.default(!S.is_hash_attribute,S.is_hash_attribute);$=Sd(o.openDB(S.key,k)),$.rootStore=o,$.tableId=V}for(let k of m){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!g[k.name]){let Ie=new Fo.default(!k.is_hash_attribute,k.is_hash_attribute);g[k.name]=o.openDB(k.key,Ie)}let se=N.find(Ie=>Ie.name===k.name);se?N.splice(N.indexOf(se),1,k):N.push(k)}}catch(se){ls.error("Error trying to update attribute",k,N,g,se)}}if(!A){A=EP(l,E,Cf({primaryStore:$,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let k of xT)k(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function fP(e){let t=ze[e];if(t||(e==="data"?t=ze[e]=Vr:e==="system"?Object.defineProperty(ze,"system",{value:t=Object.create(null),configurable:!0}):t=ze[e]=Object.create(null)),Qa&&!Qa.has(e)){let r=new Set;t[Bf]=r,Qa.set(e,r)}return t}function EP(e,t,r){return e[t]=r,r}function xu({database:e,table:t}){e||(e=FT),Hs();let r=fP(e),s=(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),n=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(s)?s:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ye.join)(s,(i?t:e)+".mdb"),c=Gi.get(o);if(!c){let u=new qT.default(o,!1);c=(0,Pf.open)(u),Gi.set(o,c)}return c}async function kS(e){if(!ze[e])throw new Error("Schema does not exist");let t=ze[e];for(let r in t){let n=t[r].primaryStore.rootStore;Gi.delete(n.path),n.status==="open"&&(await n.close(),await lP.remove(n.path))}if(e==="data"){for(let r in Vr)delete Vr[r];delete Vr[Bf]}delete ze[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=FT);let l=xu({database:t,table:e}),d=ze[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;u==null&&(u=!0);let A=new Fo.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let g,N;if(f){if(E=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 w=l.auditStore;w||(w=gd(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),ls.trace(`${e} table loading, opening primary store`);let K=new Fo.default(!1,!0),B=e+"/",k=Sd(l.openDB(B,K));k.rootStore=l,S=l.dbisDb=l.openDB(Df.INTERNAL_DBIS_NAME,A),k.tableId=S.get(Ka),k.tableId||(k.tableId=1),S.putSync(Ka,k.tableId+1),h.tableId=k.tableId,f=EP(d,e,Cf({primaryStore:k,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,F(),S.put(B,h)}m=f.indices,S=S||(l.dbisDb=l.openDB(Df.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let V=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=K.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),g=!0,S.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let se=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),s&&(se.eviction=+s),g=!0,F(),S.put(K,se)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let se=new Fo.default(!0,!1),Ie=l.openDB(K,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ll.workerData?.restartNumber)&&(g=!0,F(),B=S.get(K),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ll.workerData?.restartNumber)&&(g=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),S.put(K,w)),m[w.name]=Ie}else k&&(g=!0,F(),S.put(K,w))}}finally{N&&N()}if(g&&(f.schemaVersion++,f.updatedAttributes()),ls.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=dX(f,$,V):g&&Mf.signalSchemaChange(new Uf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let w of xT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),ls.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function dX(e,t,r){try{let s=e.schemaVersion;await Mf.signalSchemaChange(new Uf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,_P.getIndexedValues)(l[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),n.then(()=>u--,f=>{u--,ls.error(f)}),ll.workerData&&ll.workerData.restartNumber!==dP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>lX?await n:u>_X&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Mf.signalSchemaChange(new Uf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){ls.error("Error in indexing",s)}}function fX({table:e,database:t}){let r=xu({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function kT(e){xT.push(e)}var zt,Df,Pf,Ye,$r,Wa,Fo,qT,Yr,lP,GT,_P,Mf,Uf,ll,ls,dP,FT,Bf,Vr,ze,Ka,xT,vf,Gi,Qa,lX,_X,fe=Re(()=>{zt=D(j()),Df=D(Ke()),Pf=require("lmdb"),Ye=require("path"),$r=require("fs"),Wa=D(He());Lf();Fo=D(Rd()),qT=D(Od()),Yr=D(R()),lP=D(require("fs-extra")),GT=require("../index"),_P=D(or()),Mf=D(Vn()),Uf=D(Us()),ll=require("worker_threads"),ls=D(v()),dP=D(Qe());Na();fu();FT="data",Bf=Symbol("defined-tables");(0,zt.initSync)();Vr=Object.create(null),ze=Object.create(null);(0,GT._assignPackageExport)("databases",ze);(0,GT._assignPackageExport)("tables",Vr);Ka=Symbol.for("next-table-id"),xT=[],Gi=new Map;a(cX,"getTables");a(Hs,"getDatabases");a(uX,"resetDatabases");a(ul,"readMetaDb");a(fP,"ensureDB");a(EP,"setTable");a(xu,"database");a(kS,"dropDatabase");a(ut,"table");lX=1e3,_X=10;a(dX,"runIndexing");a(fX,"dropTableMeta");a(kT,"onUpdatedTable")});var G=T((wSe,wP)=>{"use strict";var Fi=require("path"),TP=require("fs-extra"),hr=v(),hP=require("fs-extra"),Hf=require("os"),EX=require("net"),hX=require("recursive-iterator"),Je=R(),mX=Km(),mP=require("papaparse"),qf=require("moment"),{inspect:pX}=require("util"),pP=require("is-number"),ISe=require("lodash"),SX=require("minimist"),TX=require("https"),gX=require("http"),{hdb_errors:Gf}=Z(),RX=/^((\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)))$/,gP=require("util").promisify(setTimeout),AX=100,OX=5,NX="",bX=4,SP={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wP.exports={isEmpty:Kr,isEmptyOrZeroLength:Sn,arrayHasEmptyValues:wX,arrayHasEmptyOrZeroLengthValues:CX,buildFolderPath:LX,isBoolean:RP,errorizeMessage:yX,stripFileExtension:PX,autoCast:MX,autoCastJSON:AP,autoCastJSONDeep:VT,removeDir:UX,compareVersions:vX,isCompatibleDataVersion:BX,escapeRawValue:HX,unescapeValue:qX,stringifyProps:GX,timeoutPromise:xX,isClusterOperation:$X,getClusterUser:YX,checkGlobalSchemaTable:VX,getHomeDir:NP,getPropsFilePath:FX,promisifyPapaParse:KX,removeBOM:bP,createEventPromise:WX,checkProcessRunning:QX,checkSchemaTableExist:jX,checkSchemaExists:yP,checkTableExists:IP,getStartOfTomorrowInSeconds:zX,getLimitKey:JX,isObject:DX,isNotEmptyAndHasValue:IX,autoCasterIsNumberCheck:OP,backtickASTSchemaItems:XX,isPortTaken:kX,createForkArgs:ZX,autoCastBoolean:eZ,async_set_timeout:gP,getTableHashAttribute:tZ,doesSchemaExist:rZ,doesTableExist:sZ,stringifyObj:nZ,ms_to_time:iZ,changeExtension:oZ,getEnvCliRootPath:YT,noBootFile:aZ,httpRequest:cZ,transformReq:uZ,convertToMS:lZ,PACKAGE_ROOT:Je.PACKAGE_ROOT};function yX(e){return e instanceof Error?e:new Error(e)}a(yX,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function IX(e){return!Kr(e)&&(e||e===0||e===""||RP(e))}a(IX,"isNotEmptyAndHasValue");function Sn(e){return Kr(e)||e.length===0||e.size===0}a(Sn,"isEmptyOrZeroLength");function wX(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(wX,"arrayHasEmptyValues");function CX(e){if(Sn(e))return!0;for(let t=0;t<e.length;t++)if(Sn(e[t]))return!0;return!1}a(CX,"arrayHasEmptyOrZeroLengthValues");function LX(...e){try{return e.join(Fi.sep)}catch{console.error(e)}}a(LX,"buildFolderPath");function RP(e){return Kr(e)?!1:e===!0||e===!1}a(RP,"isBoolean");function DX(e){return Kr(e)?!1:typeof e=="object"}a(DX,"isObject");function PX(e){return Sn(e)?NX:e.slice(0,-bX)}a(PX,"stripFileExtension");function MX(e){return Kr(e)||e===""||typeof e!="string"?e:SP[e]!==void 0?SP[e]:OP(e)===!0?Number(e):RX.test(e)?new Date(e):e}a(MX,"autoCast");function AP(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AP,"autoCastJSON");function VT(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=VT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=VT(r);s!==r&&(e[t]=s)}return e}else return AP(e)}a(VT,"autoCastJSONDeep");function OP(e){if(e.startsWith("0.")&&pP(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pP(e))}a(OP,"autoCasterIsNumberCheck");async function UX(e){if(Sn(e))throw new Error(`Directory path: ${e} does not exist`);try{await hP.emptyDir(e),await hP.remove(e)}catch(t){throw hr.error(`Error removing files in ${e} -- ${t}`),t}}a(UX,"removeDir");function vX(e,t){if(Sn(e)){hr.info("Invalid current version sent as parameter.");return}if(Sn(t)){hr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(vX,"compareVersions");function BX(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(BX,"isCompatibleDataVersion");function HX(e){if(Kr(e))return e;let t=String(e);return t==="."?Je.UNICODE_PERIOD:t===".."?Je.UNICODE_PERIOD+Je.UNICODE_PERIOD:t.replace(Je.FORWARD_SLASH_REGEX,Je.UNICODE_FORWARD_SLASH)}a(HX,"escapeRawValue");function qX(e){if(Kr(e))return e;let t=String(e);return t===Je.UNICODE_PERIOD?".":t===Je.UNICODE_PERIOD+Je.UNICODE_PERIOD?"..":String(e).replace(Je.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(qX,"unescapeValue");function GX(e,t){if(Kr(e))return hr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Hf.EOL}!Sn(s)&&s[0]===";"?r+=" "+s+n+Hf.EOL:Sn(s)||(r+=s+"="+n+Hf.EOL)}catch{hr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(GX,"stringifyProps");function NP(){let e;try{e=Hf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NP,"getHomeDir");function FX(){let e=Fi.join(NP(),Je.HDB_HOME_DIR_NAME,Je.BOOT_PROPS_FILE_NAME);return TP.existsSync(e)||(e=Fi.join(__dirname,"../","hdb_boot_properties.file")),e}a(FX,"getPropsFilePath");function xX(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(xX,"timeoutPromise");async function kX(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=EX.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(kX,"isPortTaken");function $X(e){try{return Je.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){hr.error(`Error checking operation against cluster ops ${t}`)}return!1}a($X,"isClusterOperation");function VX(e,t){let r=(fe(),te(De)).getDatabases();if(!r[e])return Gf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Gf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VX,"checkGlobalSchemaTable");function YX(e,t){if(Kr(t)){hr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||Sn(e)){hr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){hr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){hr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(YX,"getClusterUser");function KX(){mP.parsePromise=function(e,t,r){return new Promise(function(s,n){mP.parse(e,{header:!0,transformHeader:bP,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(KX,"promisifyPapaParse");function bP(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bP,"removeBOM");function WX(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;hr.info(`Got cluster status event response: ${pX(n)}`);try{i.cancel()}catch{hr.error("Error trying to cancel timeout.")}s(n)})})}a(WX,"createEventPromise");async function QX(e){let t=!0,r=0;do await gP(AX*r++),(await mX.findPs(e)).length>0&&(t=!1);while(t&&r<OX);if(t)throw new Error(`process ${e} was not started`)}a(QX,"checkProcessRunning");function jX(e,t){let r=yP(e);if(r)return r;let s=IP(e,t);if(s)return s}a(jX,"checkSchemaTableExist");function yP(e){let{getDatabases:t}=(fe(),te(De));if(!t()[e])return Gf.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yP,"checkSchemaExists");function IP(e,t){let{getDatabases:r}=(fe(),te(De));if(!r()[e][t])return Gf.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IP,"checkTableExists");function zX(){let e=qf().utc().add(1,Je.MOMENT_DAYS_TAG).startOf(Je.MOMENT_DAYS_TAG).unix(),t=qf().utc().unix();return e-t}a(zX,"getStartOfTomorrowInSeconds");function JX(){return qf().utc().format("DD-MM-YYYY")}a(JX,"getLimitKey");function XX(e){try{let t=new hX(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){hr.error("Got an error back ticking items."),hr.error(t)}}a(XX,"backtickASTSchemaItems");function ZX(e){return[e]}a(ZX,"createForkArgs");function eZ(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(eZ,"autoCastBoolean");function tZ(e,t){let{getDatabases:r}=(fe(),te(De)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(tZ,"getTableHashAttribute");function rZ(e){let{getDatabases:t}=(fe(),te(De));return t()[e]!==void 0}a(rZ,"doesSchemaExist");function sZ(e,t){let{getDatabases:r}=(fe(),te(De));return r()[e]?.[t]!==void 0}a(sZ,"doesTableExist");function nZ(e){try{return JSON.stringify(e)}catch{return e}}a(nZ,"stringifyObj");function iZ(e){let t=qf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(iZ,"ms_to_time");function oZ(e,t){let r=Fi.basename(e,Fi.extname(e));return Fi.join(Fi.dirname(e),r+t)}a(oZ,"changeExtension");function YT(){if(process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SX(process.argv);if(e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(YT,"getEnvCliRootPath");var $T;function aZ(){if($T)return $T;let e=YT();YT()&&TP.pathExistsSync(Fi.join(e,Je.HDB_CONFIG_FILE))&&($T=!0)}a(aZ,"noBootFile");function cZ(e,t){let r;return e.protocol==="http:"?r=gX:r=TX,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(cZ,"httpRequest");function uZ(e){if(!e.schema&&!e.database){e.schema=Je.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(uZ,"transformReq");function lZ(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(lZ,"convertToMS")});var j=T((LSe,DP)=>{"use strict";var KT=require("fs-extra"),$s=require("path"),CP=require("os"),_Z=require("properties-reader"),_l=v(),xo=G(),re=R(),Ff=rt(),dZ="Error initializing environment manager",xf="BOOT_PROPS_FILE_PATH",LP=!1,fZ={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},zn={};DP.exports={BOOT_PROPS_FILE_PATH:xf,getHdbBasePath:EZ,setHdbBasePath:hZ,get:mZ,initSync:SZ,setProperty:pe,initTestEnvironment:TZ};function EZ(){return zn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(EZ,"getHdbBasePath");function hZ(e){zn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hZ,"setHdbBasePath");function mZ(e){let t=Ff.getConfigValue(e);return t===void 0?zn[e]:t}a(mZ,"get");function pe(e,t){fZ[e]&&(zn[e]=t),Ff.updateConfigObject(e,t)}a(pe,"setProperty");function pZ(){let e;try{e=xo.getPropsFilePath(),KT.accessSync(e,KT.constants.F_OK|KT.constants.R_OK),LP=!0;let t=_Z(e);return zn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),zn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),zn[xf]=e,!0}catch{return _l.trace(`Environment manager found no properties file at ${e}`),!1}}a(pZ,"doesPropFileExist");function SZ(e=!1){try{(LP||pZ()||xo.noBootFile())&&(Ff.initConfig(e),zn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ff.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){_l.error(dZ),_l.error(t),console.error(t),process.exit(1)}}a(SZ,"initSync");function TZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=$s.join(__dirname,"../../","unitTests");zn[xf]=$s.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$s.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,CP.userInfo()?CP.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$s.join(u,"envDir","log")),pe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$s.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,$s.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xo.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xo.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xo.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,xo.isEmpty(i)?!1:i),pe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$s.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xo.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(re.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(re.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(re.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(re.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${xf}. Please check your boot props and settings files`;_l.fatal(r),_l.error(t)}}a(TZ,"initTestEnvironment")});var QT={};Fe(QT,{loadGQLSchema:()=>AZ,start:()=>WT,startOnMainThread:()=>RZ});function WT({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(F){if(F.kind==="NonNullType"){let B=$(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:$(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a($,"getProperty");let A=S.name.value,g=[],N={table:null,database:null,properties:g};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let V=!1;for(let F of S.fields){let w=$(F.type);w.name=F.name.value,g.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of K.arguments)k.name.value==="role"&&B.push(k.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function m(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?m(S.elements):gZ.includes(S.type)||(0,PP.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,kf.dirname)(s),S.tableClass):i.set((0,kf.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,kf.dirname)(s)+"/"+S.name,A.tableClass)}}}var kf,PP,gZ,RZ,AZ,MP=Re(()=>{kf=require("path");fe();PP=D(Qe()),gZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(WT,"start");RZ=WT,AZ=WT({ensureTable:ut}).handleFile});async function $f(e){return OZ?(dl||(dl=NZ(yZ)),(await(await dl).import(e)).namespace):import(e)}async function NZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),dl=new Compartment({console,Math,Date,fetch:bZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,vP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ut,tables:Vr,databases:ze})}};let s=await(0,UP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),dl}function bZ(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 yZ(){return{Resource:Ut,tables:Vr}}var UP,vP,OZ,dl,jT=Re(()=>{Ls();fe();UP=require("fs/promises"),vP=require("path"),OZ=!1;a($f,"secureImport");a(NZ,"getCompartment");a(bZ,"secureOnlyFetch");a(yZ,"getGlobalVars")});var JT={};Fe(JT,{handleFile:()=>IZ});async function IZ(e,t,r,s){let n=new Map,i=(0,BP.pathToFileURL)(r).toString(),o=await $f(i);u(o.default)&&s.set((0,zT.dirname)(t),o.default),c(o,(0,zT.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var BP,zT,HP=Re(()=>{BP=require("url");jT();zT=require("path");a(IZ,"handleFile")});var ZT={};Fe(ZT,{start:()=>wZ});function wZ({resources:e}){e.set("login",XT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var XT,qP=Re(()=>{Ls();a(wZ,"start");XT=class extends Ut{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var tg=T((kSe,xP)=>{"use strict";var{Readable:CZ}=require("stream"),LZ=1e4;xP.exports={streamAsJSON(e){return new eg({value:e})}};var eg=class extends CZ{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),GP)}catch(n){yield GP(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);FP(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>LZ?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 FP(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function GP(e){return console.error(e),JSON.stringify(e.toString())}a(GP,"handleError");function FP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(FP,"when")});var Vf=T((VSe,kP)=>{"use strict";var DZ=as();kP.exports={writeTransaction:PZ};function PZ(e,t,r){return DZ.writeTransaction(e,t,r)}a(PZ,"writeTransaction")});var KP=T((WSe,YP)=>{"use strict";var MZ=_r(),UZ=cs(),$P=v(),vZ=dr(),KSe=Vf(),BZ=require("clone"),sg=require("alasql"),HZ=Qd(),VP=require("util"),qZ=VP.promisify(UZ.getTableSchema),GZ=VP.promisify(MZ.search),FZ=R(),rg=G();HZ(sg);YP.exports={update:kZ};var xZ="There was a problem performing this update. Please check the logs and try again.";async function kZ({statement:e,hdb_user:t}){let r=await qZ(e.table.databaseid,e.table.tableid),s=$Z(e.columns);rg.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=BZ(n),c=rg.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=sg.parse(u).statements[0],l=await GZ(_),d=VZ(s,l);return YZ(o,d,t)}a(kZ,"update");function $Z(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=sg.compile(`SELECT ${r.expression.toString()} AS [${FZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw $P.error(t),new Error(xZ)}}a($Z,"createUpdateRecord");function VZ(e,t){return rg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(VZ,"buildUpdateRecords");async function YZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await vZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){$P.error(`Error delete new_attributes from update response: ${i}`)}return n}a(YZ,"updateRecords")});var QP=T((JSe,WP)=>{var KZ=require("alasql"),WZ=_r(),QZ=v(),jZ=as(),ig=require("util"),ng=G(),zZ=R(),JZ=cs(),jSe=Vf(),zSe=dr(),XZ="record",ZZ="successfully deleted",e5=ig.callbackify(n5),t5=ig.promisify(WZ.search),r5=ig.promisify(JZ.getTableSchema);WP.exports={convertDelete:e5};function s5(e){return`${e.deleted_hashes.length} ${XZ}${e.deleted_hashes.length===1?"":"s"} ${ZZ}`}a(s5,"generateReturnMessage");async function n5({statement:e,hdb_user:t}){let r=await r5(e.table.databaseid,e.table.tableid);ng.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=ng.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=KZ.parse(o).statements[0],u={operation:zZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await t5(c);let _=await jZ.deleteRecords(u);return ng.isEmptyOrZeroLength(_.message)&&(_.message=s5(_)),delete _.txn_time,_}catch(_){throw QZ.error(_),_.hdb_code?_.message:_}}a(n5,"convertDelete")});var ZP=T((ZSe,XP)=>{"use strict";var i5=Mi(),{hdb_errors:jP}=Z(),{getDatabases:zP}=(fe(),te(De));XP.exports={checkSchemaExists:JP,checkSchemaTableExists:o5,schema_describe:i5};async function JP(e){if(!zP()[e])return jP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(JP,"checkSchemaExists");async function o5(e,t){let r=await JP(e);if(r)return r;if(!zP()[e][t])return jP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(o5,"checkSchemaTableExists")});var st=T((iTe,SM)=>{"use strict";var Ht=j();Ht.initSync();var a5=require("fs-extra"),c5=require("semver"),hl=require("path"),{monotonicFactory:u5}=require("ulidx"),tM=u5(),l5=require("util"),rM=require("child_process"),_5=l5.promisify(rM.exec),d5=rM.spawn,Oe=ke(),be=R(),ug=G(),_s=v(),Yf=Wn(),f5=Vf(),fl=rt(),{onMessageByType:E5}=Qe(),{isMainThread:h5}=require("worker_threads"),{Encoder:m5,decode:lg}=require("msgpackr"),sM=new m5,{isEmpty:ko}=ug,nM=Er(),p5=48*36e11,S5=5e9;h5&&E5(be.ITC_EVENT_TYPES.RESTART,()=>{Vs=void 0,Ja=void 0});var{connect:T5,StorageType:iM,RetentionPolicy:oM,AckPolicy:Kf,DeliverPolicy:Wf,DiscardPolicy:g5,NatsConnection:tTe,JetStreamManager:rTe,JetStreamClient:sTe,StringCodec:nTe,JSONCodec:R5,createInbox:_g,headers:A5,ErrorCode:eM}=require("nats"),{PACKAGE_ROOT:O5}=R(),N5=mo(),{recordAction:b5}=(jn(),te(el)),aM=R5(),y5="clustering",I5=N5.engines[Oe.NATS_SERVER_NAME],w5=hl.join(O5,"dependencies"),cg=hl.join(w5,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),og,ag,El,ja,za;SM.exports={runCommand:cM,checkNATSServerInstalled:C5,createConnection:dg,getConnection:Qf,getJetStreamManager:ml,getJetStream:uM,getNATSReferences:mr,getServerList:D5,createLocalStream:fg,listStreams:lM,deleteLocalStream:P5,getServerConfig:pl,listRemoteStreams:M5,viewStream:U5,viewStreamIterator:v5,publishToStream:B5,createWorkQueueStream:H5,addSourceToWorkStream:dM,request:G5,removeSourceFromWorkStream:EM,reloadNATS:Eg,reloadNATSHub:F5,reloadNATSLeaf:x5,extractServerName:fM,requestErrorHandler:k5,updateWorkStream:$5,createLocalTableStream:mM,createTableStreams:V5,purgeTableStream:pM,purgeSchemaTableStreams:Y5,getStreamInfo:K5,updateLocalStreams:Q5,closeConnection:L5,getJsmServerName:Sl,addNatsMsgHeader:_M,updateIngestStreamConsumer:q5};async function cM(e,t=void 0){let{stdout:r,stderr:s}=await _5(e,{cwd:t});if(s)throw new Error(s.replace(`
7
+ `)},s4="certificate.pem",n4="privateKey.pem",i4="ca.pem";kL.exports={CERTIFICATE_VALUES:r4,CERTIFICATE_PEM_NAME:s4,PRIVATEKEY_PEM_NAME:n4,CA_PEM_NAME:i4}});var _T=T((Ape,WL)=>{"use strict";var KL=require("fs-extra"),de=require("joi"),o4=require("os"),{boolean:Pe,string:fn,number:Bt,array:lT}=de.types(),{totalmem:$L}=require("os"),Fa=require("path"),a4=U(),uf=G(),Rpe=uT(),VL=R(),c4=Ve(),YL="log",u4="components",l4="Invalid logging.rotation.maxSize unit. Available units are G, M or K",_4="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",d4="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",f4="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",E4="rootPath config parameter is undefined",h4="clustering.enabled config parameter is undefined",Bo=Bt.min(0).required(),lf=lT.items({host:fn.required(),port:Bo}).empty(null),jn;WL.exports={configValidator:m4,routesValidator:A4,route_constraints:lf};function m4(e){if(jn=e.rootPath,uf.isEmpty(jn))throw E4;let t=Pe.required(),r=Bt.min(0).max(1e3).empty(null).default(R4),s=fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(cf),n=fn.optional().empty(null),i=fn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=de.string().empty(null).default(cf),c=de.custom(S4).empty(null).default(cf),u=e.clustering?.enabled;if(uf.isEmpty(u))throw h4;let _;return u===!0?_=de.object({enabled:t,hubServer:de.object({cluster:de.object({name:de.required().empty(null),network:de.object({port:Bo,routes:lf}).required()}).required(),leafNodes:de.object({network:de.object({port:Bo}).required()}).required(),network:de.object({port:Bo}).required()}).required(),leafServer:de.object({network:de.object({port:Bo,routes:lf}).required(),streams:de.object({maxAge:Bt.min(120).allow(null).optional(),maxBytes:Bt.min(1).allow(null).optional(),maxMsgs:Bt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:de.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Pe.optional(),databaseLevel:Pe.optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required(),verify:Pe.optional()}),user:fn.optional().empty(null)}).required():_=de.object({enabled:t,tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Pe.required()})}).required(),de.object({authentication:de.object({authorizeLocal:Pe,cacheTTL:Bt.required(),enableSessions:Pe}),analytics:de.object({aggregatePeriod:Bt}),componentsRoot:s.optional(),clustering:_,localStudio:de.object({enabled:t}).required(),logging:de.object({auditAuthEvents:de.object({logFailed:Pe,logSuccessful:Pe}),file:Pe.required(),level:de.valid("notify","fatal","error","warn","info","debug","trace"),rotation:de.object({enabled:Pe.optional(),compress:Pe.optional(),interval:fn.custom(g4).optional().empty(null),maxSize:fn.custom(T4).optional().empty(null),path:fn.optional().empty(null).default(cf)}).required(),root:s,stdStreams:Pe.required(),auditLog:Pe.required()}).required(),operationsApi:de.object({network:de.object({cors:Pe.optional(),corsAccessList:lT.optional(),headersTimeout:Bt.min(1).optional(),keepAliveTimeout:Bt.min(1).optional(),port:Bt.optional().empty(null),securePort:Bt.optional().empty(null),timeout:Bt.min(1).optional()}).optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:de.object({network:de.object({port:Bo,securePort:Bo}).required(),webSocket:Pe.optional(),requireAuthentication:Pe.optional()}),http:de.object({compressionThreshold:Bt.optional(),cors:Pe.optional(),corsAccessList:lT.optional(),headersTimeout:Bt.min(1).optional(),port:Bt.min(0).optional().empty(null),securePort:Bt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:de.object({writeAsync:Pe.required(),overlappingSync:Pe.optional(),caching:Pe.optional(),compression:Pe.optional(),noReadAhead:Pe.optional(),path:c,prefetchWrites:Pe.optional()}).required(),ignoreScripts:Pe.optional(),tls:de.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(m4,"configValidator");function p4(e){return KL.existsSync(e)?null:`Specified path ${e} does not exist.`}a(p4,"doesPathExist");function S4(e,t){de.assert(e,fn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=p4(e);if(r)return t.message(r)}a(S4,"validatePath");function T4(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(l4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(d4):e}a(T4,"validateRotationMaxSize");function g4(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(_4);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(f4):e}a(g4,"validateRotationInterval");function R4(e,t){let r=t.state.path.join("."),s=o4.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||$L();return i=Math.round(Math.min(i,$L())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),a4.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(R4,"setDefaultThreads");function cf(e,t){if(!uf.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(uf.isEmpty(jn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Fa.join(jn,u4);case"logging.root":return Fa.join(jn,YL);case"clustering.leafServer.streams.path":return Fa.join(jn,"clustering","leaf");case"storage.path":let s=Fa.join(jn,VL.LEGACY_DATABASES_DIR_NAME);return KL.existsSync(s)?s:Fa.join(jn,VL.DATABASES_DIR_NAME);case"logging.rotation.path":return Fa.join(jn,YL);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(cf,"setDefaultRoot");function A4(e){let t=de.object({routes:lf});return c4.validateBySchema({routes:e},t)}a(A4,"routesValidator")});var rt=T((bpe,rD)=>{"use strict";var Gr=R(),wt=G(),gt=U(),{configValidator:O4,routesValidator:QL}=_T(),fr=require("fs-extra"),N4=require("yaml"),Fs=require("path"),b4=require("is-number"),zL=require("properties-reader"),y4=require("lodash"),{handleHDBError:I4}=Z(),{HTTP_STATUS_CODES:w4,HDB_ERROR_MSGS:_f}=Mr(),Npe=require("minimist"),{server:C4}=(Pr(),te(To)),{DATABASES_PARAM_CONFIG:Wu,CONFIG_PARAMS:qr,CONFIG_PARAM_MAP:xs}=Gr,L4="Unable to get config value because config is uninitialized",D4="Config successfully initialized",P4="Error backing up config file",M4="Empty parameter sent to getConfigValue",JL=Fs.join(Gr.PACKAGE_ROOT,"config","yaml",Gr.HDB_DEFAULT_CONFIG_FILE),U4="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jL={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"},df,Rt,ff;rD.exports={createConfigFile:v4,getDefaultConfig:B4,getConfigValue:ZL,initConfig:fT,flattenConfig:xa,updateConfigValue:eD,updateConfigObject:q4,getConfiguration:x4,setConfiguration:k4,readConfigFile:hT,getClusteringRoutes:$4,initOldConfig:tD,getConfigFromFile:V4,getConfigFilePath:Ho,addConfig:Y4,deleteConfigFromFile:K4,getConfigObj:W4};function v4(e){let t=Hi(JL);df=xa(t.toJSON());let r;for(let o in e){let c=xs[o.toLowerCase()];if(c===qr.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=dT(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&XL(t,r),ET(t);let s=t.toJSON();Rt=xa(s);let n=t.getIn(["rootPath"]),i=Fs.join(n,Gr.HDB_CONFIG_FILE);fr.createFileSync(i),fr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(v4,"createConfigFile");function XL(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!wt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Wu.TABLES))for(let i in s[n][Wu.TABLES])for(let o in s[n][Wu.TABLES][i]){let c=s[n][Wu.TABLES][i][o],u=[qr.DATABASES,n,Wu.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[qr.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){gt.error("Error parsing schemas CLI/env config arguments",s)}}a(XL,"setSchemasConfig");function B4(e){if(df===void 0){let r=Hi(JL);df=xa(r.toJSON())}let t=xs[e.toLowerCase()];if(t!==void 0)return df[t.toLowerCase()]}a(B4,"getDefaultConfig");function ZL(e){if(e==null){gt.error(M4);return}if(Rt===void 0){gt.trace(L4);return}let t=xs[e.toLowerCase()];if(t!==void 0)return Rt[t.toLowerCase()]}a(ZL,"getConfigValue");function Ho(e=wt.getPropsFilePath()){let t=wt.getEnvCliRootPath();return t?Fs.join(t,Gr.HDB_CONFIG_FILE):zL(e).get(Gr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Ho,"getConfigFilePath");function fT(e=!1){if(Rt===void 0||e){let t;if(!wt.noBootFile()){t=wt.getPropsFilePath();try{fr.accessSync(t,fr.constants.F_OK|fr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Ho(t),s;if(r.includes("config/settings.js"))try{tD(r);return}catch(i){if(i.code!==Gr.NODE_ERROR_CODES.ENOENT)throw i}try{s=Hi(r)}catch(i){if(i.code===Gr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
8
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw gt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}H4(s,r),ET(s);let n=s.toJSON();if(C4.config=n,Rt=xa(n),Rt.logging_rotation_rotate)for(let i in jL)Rt[i]&&gt.error(`Config ${jL[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(D4)}}a(fT,"initConfig");function H4(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Fs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Fs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Fs.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(gt.trace("Updating config file with missing config params"),fr.writeFileSync(t,String(e)))}a(H4,"checkForUpdatedConfig");function ET(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=O4(t);if(r.error)throw _f.CONFIG_VALIDATION(r.error.message);e.setIn(["threads"],r.value.threads),e.setIn(["componentsRoot"],r.value.componentsRoot),e.setIn(["logging","root"],r.value.logging.root),e.setIn(["storage","path"],r.value.storage.path),e.setIn(["logging","rotation","path"],r.value.logging.rotation.path),e.setIn(["clustering","leafServer","streams","path"],r.value.clustering.leafServer.streams?.path)}a(ET,"validateConfig");function q4(e,t){Rt===void 0&&(Rt={});let r=xs[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Rt[r.toLowerCase()]=t}a(q4,"updateConfigObject");function eD(e,t,r=void 0,s=!1,n=!1,i=!1){Rt===void 0&&fT();let o=ZL(xs.hdb_root),c=Fs.join(o,Gr.HDB_CONFIG_FILE),u=Hi(c),_;if(r===void 0&&e.toLowerCase()===qr.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=xs[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=dT(f,t);u.setIn([...E],h)}else for(let f in r){let E=xs[f.toLowerCase()];if(E===qr.HTTP_SECUREPORT&&r[f]===Rt[qr.HTTP_PORT]?.toString()&&u.setIn(["http","port"],null),E===qr.OPERATIONSAPI_NETWORK_SECUREPORT&&r[f]===Rt[qr.OPERATIONSAPI_NETWORK_PORT.toLowerCase()]?.toString()&&u.setIn(["operationsApi","network","port"],null),E===qr.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),m=Gr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];m&&m.startsWith("customFunctions")&&u.hasIn(m.split("_"))&&(E=m,h=m.split("_"));let S=dT(E,r[f]);E==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(A){gt.error(A)}}}_&&XL(u,_),ET(u);let l=u.getIn(["rootPath"]),d=Fs.join(l,Gr.HDB_CONFIG_FILE);s===!0&&G4(c,l),fr.writeFileSync(d,String(u)),n&&(Rt=xa(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(eD,"updateConfigValue");function G4(e,t){try{let r=Fs.join(t,"backup",`${Gr.HDB_CONFIG_FILE}.bak`);fr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(P4),gt.error(r)}}a(G4,"backupConfigFile");var F4=["databases"];function xa(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)),ff=e,r(e);function r(s){let n={};for(let i in s)if(s.hasOwnProperty(i))if(typeof s[i]=="object"&&s[i]!==null&&!Array.isArray(s[i])&&!F4.includes(i)){let o=r(s[i]);for(let c in o){if(!o.hasOwnProperty(c))continue;c!=="package"&&(i=i.toLowerCase());let u=i+"_"+c;!qr[u.toUpperCase()]&&xs[u]&&(n[xs[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(xa,"flattenConfig");function dT(e,t){if(e===qr.CLUSTERING_NODENAME||e===qr.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(b4(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||wt.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 wt.autoCast(t)}a(dT,"castConfigValue");function x4(){let e=wt.getPropsFilePath(),t=Ho(e);return Hi(t).toJSON()}a(x4,"getConfiguration");async function k4(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return eD(void 0,void 0,n,!0),U4}catch(i){throw typeof i=="string"||i instanceof String?I4(i,i,w4.BAD_REQUEST,void 0,void 0,!0):i}}a(k4,"setConfiguration");function hT(){let e=wt.getPropsFilePath();try{fr.accessSync(e,fr.constants.F_OK|fr.constants.R_OK)}catch(s){if(!wt.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Ho(e);return Hi(t).toJSON()}a(hT,"readConfigFile");function Hi(e){return N4.parseDocument(fr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Hi,"parseYamlDoc");function $4(){let e=hT(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=wt.isEmptyOrZeroLength(t)?[]:t;let r=QL(t);if(r)throw _f.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=wt.isEmptyOrZeroLength(s)?[]:s;let n=QL(s);if(n)throw _f.CONFIG_VALIDATION(n.message);if(!wt.isEmptyOrZeroLength(s)&&!wt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!wt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw _f.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a($4,"getClusteringRoutes");function tD(e){let t=zL(e);Rt={};for(let r in xs){let s=t.get(r.toUpperCase());if(wt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=xs[r].toLowerCase();n===qr.LOGGING_ROOT?Rt[n]=Fs.dirname(s):Rt[n]=s}return Rt}a(tD,"initOldConfig");function V4(e){let t=hT();return y4.get(t,e.replaceAll("_","."))}a(V4,"getConfigFromFile");async function Y4(e,t){let r=Hi(Ho());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await fr.writeFile(Ho(),String(r))}a(Y4,"addConfig");function K4(e){let t=Ho(wt.getPropsFilePath()),r=Hi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Fs.join(s,Gr.HDB_CONFIG_FILE);fr.writeFileSync(n,String(r))}a(K4,"deleteConfigFromFile");function W4(){return ff||(fT(),ff)}a(W4,"getConfigObj")});var nD=T((Ipe,sD)=>{"use strict";var Ef=R(),hf=class{static{a(this,"BaseLicense")}constructor(t=0,r=Ef.RAM_ALLOCATION_ENUM.DEFAULT,s=Ef.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},mT=class extends hf{static{a(this,"ExtendedLicense")}constructor(t=0,r=Ef.RAM_ALLOCATION_ENUM.DEFAULT,s=Ef.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};sD.exports={BaseLicense:hf,ExtendedLicense:mT}});var Qu=T((Cpe,lD)=>{"use strict";var $a=require("fs-extra"),iD=af(),oD=require("crypto"),Q4=require("moment"),j4=require("uuid").v4,jt=U(),ST=require("path"),z4=G(),qi=R(),J4=nD().ExtendedLicense,ka="invalid license key format",X4="061183",Z4="mofi25",e3="aes-256-cbc",t3=16,r3=32,aD=j();aD.initSync();var pT;lD.exports={validateLicense:cD,generateFingerPrint:n3,licenseSearch:uD,getLicense:a3};function TT(){return ST.join(aD.getHdbBasePath(),qi.LICENSE_KEY_DIR_NAME,qi.LICENSE_FILE_NAME)}a(TT,"getLicenseDirPath");function s3(){let e=TT();return ST.join(e,qi.LICENSE_FILE_NAME)}a(s3,"getLicenseFilePath");function gT(){let e=TT();return ST.join(e,qi.REG_KEY_FILE_NAME)}a(gT,"getFingerPrintFilePath");async function n3(){let e=gT();try{return await $a.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await i3();throw jt.error(`Error writing fingerprint file to ${e}`),jt.error(t),new Error("There was an error generating the fingerprint")}}a(n3,"generateFingerPrint");async function i3(){let e=j4(),t=iD.hash(e),r=gT();try{await $a.mkdirp(TT()),await $a.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw jt.error(`Error writing fingerprint file to ${r}`),jt.error(s),new Error("There was an error generating the fingerprint")}return t}a(i3,"writeFingerprint");function cD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:qi.RAM_ALLOCATION_ENUM.DEFAULT,version:qi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return jt.error("empty license key passed to validate."),r;let s=gT(),n=!1;try{n=$a.statSync(s)}catch(i){jt.error(i)}if(n){let i;try{i=$a.readFileSync(s,"utf8")}catch{jt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Z4),c=o[1];c=Buffer.concat([Buffer.from(c)],t3);let u=Buffer.concat([Buffer.from(i)],r3),_=oD.createDecipheriv(e3,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 E=o3(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ka),jt.error(ka),new Error(ka)}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(ka),jt.error(ka),new Error(ka)}else r.exp_date=l;r.exp_date<Q4().valueOf()&&(r.valid_date=!1),iD.validate(o[1],`${X4}${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||jt.error("Invalid licence"),r}a(cD,"validateLicense");function o3(e,t){try{let r=oD.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{jt.warn("Check old license failed")}}a(o3,"checkOldLicense");function uD(){let e=new J4,t=[];try{t=$a.readFileSync(s3(),"utf-8").split(qi.NEW_LINE)}catch(r){r.code==="ENOENT"?jt.info("no license file found"):jt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(z4.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=cD(n.license_key,n.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(n){jt.error("There was an error parsing the license string."),jt.error(n),e.ram_allocation=qi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return pT=e,e}a(uD,"licenseSearch");async function a3(){return pT||await uD(),pT}a(a3,"getLicense")});var Er=T((Upe,yD)=>{"use strict";var ED="username is required",hD="nothing to update, must supply active, role or password to update",mD="password cannot be an empty string",pD="If role is specified, it cannot be empty.",SD="active must be true or false";yD.exports={addUser:m3,alterUser:p3,dropUser:T3,getSuperUser:O3,userInfo:g3,listUsers:pf,listUsersExternal:R3,setUsersToGlobal:Ya,findAndValidateUser:ND,getClusterUser:N3,USERNAME_REQUIRED:ED,ALTERUSER_NOTHING_TO_UPDATE:hD,EMPTY_PASSWORD:mD,EMPTY_ROLE:pD,ACTIVE_BOOLEAN:SD};var TD=dr(),c3=vo(),OT=af(),gD=GL(),RD=_r(),NT=Vn(),Fr=G(),AD=require("validate.js"),he=U(),{promisify:u3}=require("util"),bT=Qn(),_D=R(),dD=ke(),l3=rt(),Dpe=j(),Ppe=Qu(),_3=Fn(),{table:Mpe}=(Ee(),te(De)),{handleHDBError:En,hdb_errors:d3}=Z(),{HTTP_STATUS_CODES:hn,AUTHENTICATION_ERROR_MSGS:RT,HDB_ERROR_MSGS:Va}=d3,{UserEventMsg:yT}=Us(),AT=require("lodash"),{server:IT}=(Pr(),te(To)),f3=U();IT.getUser=ND;var OD={username:!0,active:!0,role:!0,password:!0},fD=new Map,mf=RD.searchByValue,E3=RD.searchByHash,h3=u3(c3.delete);async function m3(e){let t=AD.cleanAttributes(e,OD),r=gD.addUserValidation(t);if(r)throw En(new Error,r.message,hn.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await mf(s),n=n&&Array.from(n)}catch(u){throw he.error("There was an error searching for a role in add user"),he.error(u),u}if(!n||n.length<1)throw En(new Error,Va.ROLE_NAME_NOT_FOUND(t.role),hn.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw En(new Error,Va.DUP_ROLES_FOUND(t.role),hn.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bT.encrypt(t.password)),t.password=OT.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await TD.insert(i)}catch(u){throw he.error("There was an error searching for a user."),he.error(u),u}he.debug(o);try{await Ya()}catch(u){throw he.error("Got an error setting users to global"),he.error(u),u}if(o.skipped_hashes.length===1)throw En(new Error,Va.USER_ALREADY_EXISTS(t.username),hn.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],NT.signalUserChange(new yT(process.pid)),`${c.username} successfully added`}a(m3,"addUser");async function p3(e){let t=AD.cleanAttributes(e,OD);if(Fr.isEmptyOrZeroLength(t.username))throw new Error(ED);if(Fr.isEmptyOrZeroLength(t.password)&&Fr.isEmptyOrZeroLength(t.role)&&Fr.isEmptyOrZeroLength(t.active))throw new Error(hD);if(!Fr.isEmpty(t.password)&&Fr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mD);if(!Fr.isEmpty(t.active)&&!Fr.isBoolean(t.active))throw new Error(SD);let r=S3(t.username);if(!Fr.isEmpty(t.password)&&!Fr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bT.encrypt(t.password)),t.password=OT.hash(t.password)),t.role==="")throw new Error(pD);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 mf(i)||[])}catch(c){throw he.error("Got an error searching for a role."),he.error(c),c}if(!o||o.length===0){let c=Va.ALTER_USER_ROLE_NOT_FOUND(t.role);throw he.error(c),En(new Error,c,hn.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Va.ALTER_USER_DUP_ROLES(t.role);throw he.error(c),En(new Error,c,hn.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await TD.update(s)}catch(i){throw he.error("Error during update."),he.error(i),i}try{await Ya()}catch(i){throw he.error("Got an error setting users to global"),he.error(i),i}return NT.signalUserChange(new yT(process.pid)),n}a(p3,"alterUser");function S3(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(S3,"isClusterUser");async function T3(e){try{let t=gD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Fr.isEmpty(global.hdb_users.get(e.username)))throw En(new Error,Va.USER_NOT_EXIST(e.username),hn.NOT_FOUND,void 0,void 0,!0);let s;try{s=await h3(r)}catch(n){throw he.error("Got an error deleting a user."),he.error(n),n}he.debug(s);try{await Ya()}catch(n){throw he.error("Got an error setting users to global."),he.error(n),n}return NT.signalUserChange(new yT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(T3,"dropUser");async function g3(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=AT.cloneDeep(e.hdb_user);let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await E3(r)}catch(n){throw he.error("Got an error searching for a role."),he.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw he.error(r),r}return t}a(g3,"userInfo");async function R3(){let e;try{e=await pf()}catch(t){throw he.error("Got an error listing users."),he.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(R3,"listUsersExternal");async function pf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await mf(e)}catch(o){throw he.error("Got an error searching for roles."),he.error(o),o}let r={};for(let o of t)r[o.id]=AT.cloneDeep(o);if(Object.keys(r).length===0)return null;let s={schema:"system",table:"hdb_user",search_value:"*",search_attribute:"username",get_attributes:["*"]},n;try{n=await mf(s)}catch(o){throw he.error("Got an error searching for users."),he.error(o),o}let i=new Map;for(let o of n)o=AT.cloneDeep(o),o.role=r[o.role],A3(o.role),i.set(o.username,o);return i}catch(e){throw he.error("got an error listing users"),he.error(e),Fr.errorizeMessage(e)}return null}a(pf,"listUsers");function A3(e){try{if(!e){he.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(_3)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){he.error("Got an error trying to set system permissions."),he.error(t)}}a(A3,"appendSystemTablesToRole");async function Ya(){try{let e=await pf();global.hdb_users=e}catch(e){throw he.error(e),e}}a(Ya,"setUsersToGlobal");async function ND(e,t,r=!0){global.hdb_users||await Ya();let s=global.hdb_users.get(e);if(!s)throw En(new Error,RT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw En(new Error,RT.USER_INACTIVE,hn.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(fD.get(t)===s.password)return n;if(OT.validate(s.password,t))fD.set(t,s.password);else throw En(new Error,RT.GENERIC_AUTH_FAIL,hn.UNAUTHORIZED,void 0,void 0,!0)}return n}a(ND,"findAndValidateUser");async function O3(){global.hdb_users||await Ya();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(O3,"getSuperUser");async function N3(){let e=await pf(),t=l3.getConfigFromFile(_D.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Fr.isEmpty(r)&&r?.role?.role===_D.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=bT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+dD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+dD.SERVER_SUFFIX.ADMIN,r}a(N3,"getClusterUser");var bD=[];IT.invalidateUser=function(e){for(let t of bD)try{t(e)}catch(r){f3.error("Error invalidating user",r)}};IT.onInvalidatedUser=function(e){bD.push(e)}});var zu=T((qpe,LD)=>{"use strict";var qo=U(),xr=R(),b3=By(),Bpe=cs(),Hpe=Ui(),y3=Er(),{validateEvent:ID}=Us(),ju=as(),I3=require("process"),{resetDatabases:w3}=(Ee(),te(De)),C3={[xr.ITC_EVENT_TYPES.SCHEMA]:L3,[xr.ITC_EVENT_TYPES.USER]:CD};async function L3(e){let t=ID(e);if(t){qo.error(t);return}qo.trace("ITC schemaHandler received schema event:",e),await b3(e.message),await D3(e.message)}a(L3,"schemaHandler");async function D3(e){try{ju.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ju.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ju.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=w3();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){qo.error(t)}}a(D3,"syncSchemaMetadata");var wD=[];async function CD(e){try{try{ju.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ju.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){qo.warn(r)}let t=ID(e);if(t){qo.error(t);return}qo.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${I3.pid} received user event:`,e),await y3.setUsersToGlobal();for(let r of wD)r()}catch(t){qo.error(t)}}a(CD,"userHandler");CD.addListener=function(e){wD.push(e)};LD.exports=C3});var Us=T((Vpe,PD)=>{"use strict";var Fpe=U(),wT=G(),P3=R(),{ITC_ERRORS:Ju}=Mr(),{parentPort:xpe,threadId:M3,isMainThread:U3,workerData:kpe}=require("worker_threads"),{onMessageFromWorkers:v3,broadcast:$pe,broadcastWithAcknowledgement:B3}=Qe();PD.exports={sendItcEvent:H3,validateEvent:DD,SchemaEventMsg:q3,UserEventMsg:G3};var Sf;v3(async(e,t)=>{Sf=Sf||zu(),DD(e),Sf[e.type]&&await Sf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function H3(e){return!U3&&e.message&&(e.message.originator=M3),B3(e)}a(H3,"sendItcEvent");function DD(e){if(typeof e!="object")return Ju.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||wT.isEmpty(e.type))return Ju.MISSING_TYPE;if(!e.hasOwnProperty("message")||wT.isEmpty(e.message))return Ju.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||wT.isEmpty(e.message.originator))return Ju.MISSING_ORIGIN;if(P3.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ju.INVALID_EVENT(e.type)}a(DD,"validateEvent");function q3(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}a(q3,"SchemaEventMsg");function G3(e){this.originator=e}a(G3,"UserEventMsg")});var Vn=T((Wpe,BD)=>{"use strict";var MD=R(),Kpe=G(),Tf=U(),UD=Sy(),Ka,{sendItcEvent:vD}=Us();function F3(e){try{Tf.trace("signalSchemaChange called with message:",e),Ka=Ka||zu();let t=new UD(MD.ITC_EVENT_TYPES.SCHEMA,e);return Ka.schema(t),vD(t)}catch(t){Tf.error(t)}}a(F3,"signalSchemaChange");function x3(e){try{Tf.trace("signalUserChange called with message:",e),Ka=Ka||zu();let t=new UD(MD.ITC_EVENT_TYPES.USER,e);return Ka.user(t),vD(t)}catch(t){Tf.error(t)}}a(x3,"signalUserChange");BD.exports={signalSchemaChange:F3,signalUserChange:x3}});var tl={};Fe(tl,{addAnalyticsListener:()=>el,recordAction:()=>kr,recordActionBinary:()=>us,setAnalyticsEnabled:()=>k3});function k3(e){KD=e}function kr(e,t,r,s,n){if(!KD)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=Af.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:s,type:n},Af.set(i,o)}gf||$3()}function us(e,t,r,s,n){kr(!!e,t,r,s,n)}function el(e){jD.push(e)}function $3(){gf=performance.now(),setTimeout(async()=>{let e=performance.now()-gf;gf=0;let t=[],r={time:Date.now(),period:e,threadId:Go.threadId,metrics:t};for(let[n,i]of Af){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 zD){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let m=_[_.length-1];typeof m=="number"?_[_.length-1]={value:m,count:1+h}:m.count+=h}else _.push(h>1?{value:E,count:h}:E),l=E;u=f}}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 JD()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Go.threadId,byThread:!0,...s});for(let n of jD)n(t);Af=new Map,Go.parentPort?Go.parentPort.postMessage({type:QD,report:r}):eP({report:r})},WD).unref()}async function V3(e,t=6e4){let r=DT(),s=XD(),n;for(let h of s.primaryStore.getRange({start:1/0,end:!1,reverse:!0}))if(h.value?.time){n=h.value.time;break}if(Date.now()-t<n)return;let i,o=new Map,c=new Map,u=[],_;for(let{key:h,value:m}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!m)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:S,threadId:A}=m;for(let g of S||[]){let{path:N,method:V,type:$,metric:F,count:w,total:K,distribution:B,threads:k,...se}=g;w||(w=1);let Ie=F+(N?"-"+N:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let Ge=ie.threads[A];if(Ge)ie=Ge;else{ie.threads[A]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Vt=ie.count;for(let Ge in se){let Mt=se[Ge];typeof Mt=="number"&&(ie[Ge]=(ie[Ge]*Vt+Mt*w)/(Vt+w))}ie.count+=w,K>=0&&(ie.total+=K,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},g),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[A]=Object.assign({},se),u.push(ie));if(B){B=B.map(Ge=>typeof Ge=="number"?{value:Ge,count:1}:Ge);let Vt=c.get(Ie);Vt?Vt.push(...B):c.set(Ie,B)}}await JD()}for(let h of u){let{path:m,method:S,type:A,metric:g,count:N,total:V,distribution:$,threads:F,...w}=h;F=F.filter(K=>K);for(let K in w){if(typeof h[K]!="number")continue;let B=0;for(let k of F){let se=k[K];typeof se=="number"&&(B+=se)}h[K]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,m]of c){let S=o.get(h);m.sort((Ge,Mt)=>Ge.value>Mt.value?1:-1);let A=S.count-1,g=[],N=0,V=0,$;for(let Ge of zD){let Mt=A*Ge;for(;N<Mt;)$=m[V++],N+=$.count,V===1&&N--;let ys=m[V>1?V-2:0];$||($=m[0]),g.push($.value-($.value-ys.value)*(N-Mt)/$.count)}let[F,w,K,B,k,se,Ie,ie,Vt]=g;Object.assign(S,{p1:F,p10:w,p25:K,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Vt})}let l;for(let[h,m]of o)m.id=(0,Rf.getNextMonotonicTime)(),m.time=_,s.primaryStore.put(m.id,m,{append:!0}).then(S=>{S||s.primaryStore.put(m.id,m)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,Rf.getNextMonotonicTime)(),m={id:h,metric:"main-thread-utilization",idle:f-HD,active:E-qD,time:d,...process.memoryUsage()};s.primaryStore.put(h,m,{append:!0}).then(S=>{S||s.primaryStore.put(h,m)})}HD=f,qD=E}async function GD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function DT(){return FD||(FD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function XD(){return xD||(xD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function W3(){ZD=!0;let e=(0,Zu.get)(LT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await V3(WD,e),await GD(DT(),Y3),await GD(XD(),K3)},Math.min(e/2,2147483647)).unref()}function eP(e,t){let r=e.report;r.threadId=t?.threadId||Go.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(kD+=s.mean*s.count);r.totalBytesProcessed=kD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization($D.get(t))}),$D.set(t,t.performance.eventLoopUtilization())),r.id=(0,Rf.getNextMonotonicTime)(),DT().primaryStore.put(r.id,r),ZD||W3(),Q3&&(tP=z3(r))}async function z3(e){if(await tP,!Gi){let r=(0,Xu.dirname)((0,YD.getLogFilePath)());try{Gi=await(0,CT.open)((0,Xu.join)(r,"analytics.log"),"r+")}catch{Gi=await(0,CT.open)((0,Xu.join)(r,"analytics.log"),"w+")}}let t=(await Gi.stat()).size;if(t>j3){let r=Buffer.alloc(t);await Gi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Gi.write(r,{position:0}),await Gi.truncate(r.length),t=r.length}await Gi.write(JSON.stringify(e)+`
9
+ `,t)}var Go,VD,YD,Xu,CT,Rf,Zu,LT,Af,KD,gf,WD,QD,jD,zD,HD,qD,JD,Y3,K3,FD,xD,ZD,kD,$D,Q3,tP,Gi,j3,zn=Re(()=>{Go=require("worker_threads"),VD=D(Qe());Ee();YD=D(U()),Xu=require("path"),CT=require("fs/promises"),Rf=D(or()),Zu=D(j()),LT=D(R());Pr();(0,Zu.initSync)();Af=new Map,KD=(0,Zu.get)(LT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(k3,"setAnalyticsEnabled");a(kr,"recordAction");Tt.recordAnalytics=kr;a(us,"recordActionBinary");gf=0,WD=1e3,QD="analytics-report",jD=[];a(el,"addAnalyticsListener");zD=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a($3,"sendAnalytics");a(V3,"aggregation");HD=0,qD=0,JD=a(()=>new Promise(setImmediate),"rest");a(GD,"cleanup");Y3=36e5,K3=31536e6;a(DT,"getRawAnalyticsTable");a(XD,"getAnalyticsTable");(0,VD.setChildListenerByType)(QD,eP);a(W3,"startScheduledTasks");kD=0,$D=new Map,Q3=!1;a(eP,"recordAnalytics");j3=1e6;a(z3,"logAnalytics")});var BT={};Fe(BT,{coerceType:()=>If,makeTable:()=>Lf,setServerUtilities:()=>iX,updateResource:()=>il});function Lf(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:_,dbisDB:l}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:m}=e;m||(m=[]),hy(i,u);let S=fp(i,s,u),A=0,g,N,V,$={},F=Promise.resolve(),w,K,B;for(let Q of m)(Q.assignCreatedTime||Q.name==="__createdtime__")&&(w=Q),(Q.assignUpdatedTime||Q.name==="__updatedtime__")&&(K=Q),Q.expiresAt&&(B=Q),Q.isPrimaryKey&&($=Q);let k,se=[],Ie=[],ie=1,Vt=2,Ge={},Mt={},ys=864e5,RN,k_,dk=10,fk=6;E&&NN();class pt extends Ut{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=m;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=K;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(p,b){b&&(this.sourceOptions=b,(b.expiration||b.eviction||b.scanInterval)&&this.setTTLExpiration(b)),b?.intermediateSource?(p.intermediateSource=!0,this.sources.unshift(p)):this.sources.push(p),N=p.get&&(!p.get.reliesOnPrototype||p.prototype.get);let C=a(I=>{let P=this.sources.slice(0,-1);if(P=P.filter(M=>M[I]&&(!M[I].reliesOnPrototype||M.prototype[I])),P.length>0)if(P.length===1){let M=P[0];return(W,z,ae)=>{if(W?.source!==M)return M[I](z,ae,W)}}else return(M,W,z)=>{let ae=[];for(let Y of P){if(M?.source===Y)break;ae.push(Y[I](W,z,M))}return Promise.all(ae)}},"getApplyToIntermediateSource"),O=this.sources[this.sources.length-1],L=a(I=>{if(O[I]&&(!O[I].reliesOnPrototype||O.prototype[I]))return(P,M,W)=>{if(!P?.source)return O[I](M,W,P)}},"getApplyToCanonicalSource");return Ge={put:L("put"),delete:L("delete"),publish:L("publish")},Mt={put:C("put"),delete:C("delete"),publish:C("publish"),invalidate:C("invalidate")},(async()=>{let I=!1,P=a(async(M,W)=>{let z=M.value,ae=M.table?ze[c][M.table]:pt;if(c===ks.SYSTEM_SCHEMA_NAME&&(M.table===ks.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||M.table===ks.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),M.id===void 0&&(M.id=z[ae.primaryKey],M.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(M));M.source=p;let Y=await ae.getResource(M.id,W,rl);switch(M.type){case"put":return Y._writeUpdate(z,rl);case"delete":return Y._writeDelete(rl);case"publish":return Y._writePublish(z,rl);case"invalidate":return Y.invalidate(rl);default:je.error("Unknown operation",M.type,M.id)}},"writeUpdate");try{let M=p.subscribe;M&&h==null&&(h=!0);let W=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Fo.getWorkerIndex)()):(0,Fo.getWorkerIndex)()===0,z=M&&W&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(z){let ae;for await(let Y of z)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){je.error("Bad subscription event",Y);continue}if(Y.source=p,ae)if(Y.beginTxn)ae.resolve();else{P(Y,ae);continue}if(Y.type==="end_txn")continue;let ye=We(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Yt of Y.writes)try{oe.push(P(Yt,Y))}catch(rr){throw rr.message+=" writing "+JSON.stringify(Yt)+" of event "+JSON.stringify(Y),rr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Yt;for(let rr of Y.attributes)oe.find(Eo=>Eo.name===rr.name)||(oe.push(rr),Yt=!0);Yt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),al.signalSchemaChange(new cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ae=Y,P(Y,Y),new Promise(oe=>{ae.resolve=oe})):P(Y,Y)});I&&(await ye,al.signalUserChange(new cl.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){je.error("error in subscription handler",me)}}}catch(M){je.error(M)}})(),this}static getResource(p,b,C){let O=super.getResource(p,b,C);if(p!=null){Qc(p);try{if(O.hasOwnProperty(Ae))return O;if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let L=!C?.async||i.cache?.get(p),I=bi(b),P=I.getReadTxn();if(P?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return AN(p,b,{transaction:P},L,M=>{if(M?il(O,M):O[Ae]=null,b.onlyIfCached&&b.noCacheStore){if(!O.doesExist())throw new pn.ServerError("Entry is not cached",504)}else if(C?.ensureLoaded){let W=Pm(p,M,b,O);if(W)return I?.disregardReadTxn(),O[MT]=!0,vT(W,z=>(il(O,z),O))}return O})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(p)),L}}return O}ensureLoaded(){let p=Pm(this[Le],this[mn],this[Se]);if(p)return this[MT]=!0,vT(p,b=>{this[mn]=b,this[Ae]=b.value,this[yf]=b.version})}static setTTLExpiration(p){if(typeof p=="number")d=p*1e3,f||(f=0);else if(p&&typeof p=="object")d=p.expiration*1e3,f=(p.eviction||0)*1e3,ys=p.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");ys=ys||(d+f)/4,Mm()}static enableAuditing(p=!0){E=p,p&&NN(),pt.audit=p}static coerceId(p){return p===""?null:If(p,$)}static async dropTable(){if(delete ze[c][n],c===o){for(let p of m)l.remove(pt.tableName+"/"+p.name),r[p.name]?.drop();l.remove(pt.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));al.signalSchemaChange(new cl.SchemaEventMsg(process.pid,ks.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(p,b){if(p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""){let C=this.getRecordCount();return{recordCount:C.recordCount,estimatedRecordRange:C.estimatedRange,records:"./",name:n,database:c,attributes:m}}return super.get(p,b)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ds])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||p?.ensureLoaded===!1||this[Se]?.returnNonexistent)return this}allowRead(p,b){let C=V_(p);if(C?.read){let O=C.attribute_permissions;if(O){b||(b={});let L=b.select;if(L){let I=UT(O,"read");b.select=L.filter(P=>I[P])}else b.select=O.filter(I=>I.read).map(I=>I.attribute_name);return b}else return!0}}allowUpdate(p,b){let C=V_(p);if(C?.update){let O=C.attribute_permissions;if(O){let L=UT(O,"update");for(let I in b)if(!L[I])return!1;for(let I of O){let P=I.attribute_name;!I.update&&!(P in b)&&(b[P]=this.getProperty(P))}}return!0}}allowCreate(p,b){if(this[Ds]){let C=V_(p);if(C?.insert){let O=C.attribute_permissions;if(O){let L=UT(O,"insert");for(let I in b)if(!L[I])return!1}else return!0}}else return this.allowUpdate(p,{})}allowDelete(p){return V_(p)?.delete}update(p,b){if(!bi(this[Se]))throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let O;if(typeof p=="object"&&p)if(b){Object.isFrozen(p)&&(p=Object.assign({},p));for(let L in this[Ae])p[L]===void 0&&(p[L]=void 0);this[Kt]=p}else O=this[Kt],O&&(p=Object.assign(O,p)),this[Kt]=O=p;return this._writeUpdate(this),this}invalidate(p){let b=this[Se],C=this[Le];Qc(C),bi(this[Se]).addWrite({key:C,store:i,invalidated:!0,entry:this[mn],nodeName:this[Se]?.nodeName,before:Ge.invalidate?.bind(this,b,C),beforeIntermediate:Mt.invalidate?.bind(this,b,C),commit:(L,I)=>{if(I?.version>L)return;let P=null;for(let M in r)P||(P={}),P[M]=this.getProperty(M);S(C,P,this[mn],L,Of,E,this[Se],0,"invalidate")}})}static evict(p,b,C){let O=this.Source,L;if(!((N||E)&&(!b||(L=i.getEntry(p),!L||!b)||L.version!==C))){if(N){if(i.hasLock(p,L.version))return;let I;for(let P in r)I||(I={}),I[P]=b[P];if(I){S(p,I,L,C,Nf,null,null,0,null,!0);return}}if(i.ifVersion(C,()=>{$_(p,b,null)}),E)S(p,null,L,C,Nf,null,null,0,null,!0);else return i.remove(p,C)}}lock(){throw new Error("Not yet implemented")}static operation(p,b){return p.table||=n,p.schema||=c,cP.operation(p,b)}async put(p){this.update(p,!0)}_writeUpdate(p,b){let C=this[Se],O=bi(C),L=this[Le];Qc(L);let I=this[mn];this[PT]=!0;let P={key:L,store:i,entry:I,nodeName:C?.nodeName,validate:M=>{if(!p[sP]||id(p)){if(this.validate(p),C?.source?p=lu(p):(t&&p[t]!==L&&(p[t]=L),K&&(p[K.name]=K.type==="Date"?new Date(M):K.type==="String"?new Date(M).toISOString():M),w&&(I?.value?p[w.name]=I?.value[w.name]:p[w.name]=w.type==="Date"?new Date(M):w.type==="String"?new Date(M).toISOString():M),p=lu(p)),p[Ae])throw new Error("Can not assign a record with a record property");this[Ae]=p}else O.removeWrite(P)},before:Ge.put&&(()=>Ge.put(C,L,p)),beforeIntermediate:Mt.put&&(()=>Mt.put(C,L,p)),commit:(M,W,z)=>{z&&(C&&W?.version>(C.lastModified||0)&&(C.lastModified=W.version),il(this,W));let ae=W?.value;this[PT]=!1,je.trace("Checking timestamp for put",L,W?.version>M,W?.version,M),!(W?.version>M)&&($_(L,ae,p),S(L,p,W,M,0,E,C,C.expiresAt||(d?d+Date.now():0)))}};O.addWrite(P)}async delete(p){if(typeof p=="string")return this.deleteProperty(p);if(this[Ds]){for await(let b of this.search(p))(await pt.getResource(b[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(p);return}return this[Ae]?this._writeDelete(p):!1}_writeDelete(p){let b=bi(this[Se]),C=this[Le];Qc(C);let O=this[Se];return b.addWrite({key:C,store:i,resource:this,nodeName:O?.nodeName,before:Ge.delete?.bind(this,O,C),beforeIntermediate:Mt.delete?.bind(this,O,C),commit:(L,I,P)=>{let M=I?.value;P&&(O&&I?.version>(O.lastModified||0)&&(O.lastModified=I.version),il(this,I)),!(I?.version>L)&&($_(this[Le],M),je.trace("Write delete entry",C,L),E||h?(S(C,null,this[mn],L,0,E,this[Se],0,"delete"),E||Mm()):i.remove(this[Le]))}}),!0}search(p){let b=bi(this[Se]);if(!p)throw new Error("No query provided");let C=p.reverse===!0,O=p.conditions;O?O.length===void 0&&(O=Array.from(O)):O=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[Le]&&(O=[{attribute:null,comparator:"prefix",value:this[Le]}].concat(O));for(let Y of O){let me=Y[0]??Y.attribute,ye=me==null?$:m.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=L(Y.value,ye):Y[1]=L(Y[1],ye));else if(me!=null)throw(0,pn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function L(Y,me){return Array.isArray(Y)?Y.map(ye=>If(ye,me)):If(Y,me)}a(L,"coerceTypedValues"),O.length>1&&(O=(0,aP.sortBy)(O,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===nl.SEARCH_TYPES.EQUALS){let ye=Y[0]??Y.attribute;if(ye==null||ye===t)Y.estimated_count=1;else{let oe=r[ye];Y.estimated_count=oe?oe.getValuesCount(Y[1]??Y.value):1/0}}else me===nl.SEARCH_TYPES.CONTAINS||me===nl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===nl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=Z3:Y.estimated_count=X3}return Y.estimated_count}));let I=b.getReadTxn();I.use();let P=p.select,M=O[0],W;if(!M)W=i.getRange(C?{end:!1,reverse:!0,transaction:I,lazy:P?.length<4}:{start:!1,transaction:I,lazy:P?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):bf.SKIP);else{let Y=tp(M,I,C,pt,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let me=O.slice(1).map(rp);W=ae(Y,me)}else{for(let ye=1;ye<O.length;ye++){let oe=O[ye],Yt=tp(oe,I,C,pt,p.allowFullScan);Y=Y.concat(Yt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),W=ae(Y)}}(p.offset||p.limit!==void 0)&&(W=W.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),W.onDone=()=>{W.onDone=null,I.done()};let z=this[Se];function ae(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||P?.length<4,alwaysPrefetch:!0},Yt=p.ensureLoaded!==!1;function rr(Eo,$e){if(Yt&&$e!==void 0){let Lr=!z.onlyIfCached&&Pm($e,Eo,z,this);if(Lr)return Lr.then(mk=>rr(mk))}let rn=Eo?.value;if(!rn)return bf.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](rn))return bf.SKIP;return rn}return a(rr,"processEntry"),Y.map(Eo=>AN(Eo,z,oe,!1,rr))}return a(ae,"idsToRecords"),W}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:m,audit:!0}),p||(p={});let b=fy(pt,this[Le]??null,function(I,P,M,W){try{let z=P.getValue?.(i);this.send({id:I,timestamp:M,value:z,version:P.version,type:P.type,beginTxn:W})}catch(z){je.error(z)}},p.startTime,this[Ds]);p.crossThreads===!1&&(b.crossThreads=!1),p.supportsTransactions&&(b.supportsTransactions=!0);let C=this[Le],O=p.previousCount;O>1e3&&(O=1e3);let L=p.startTime;if(this[Ds]){if(L){if(O)throw new pn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:P}of u.getRange({start:L,exclusiveStart:!0})){let M=Ur(P,i);if(M.tableId!==s)continue;let W=M.recordId;(C==null||oP(C,W))&&b.send({id:W,timestamp:I,...M}),b.startTime=I}}else if(O){let I=[];for(let{key:P,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let W=Ur(M);if(W.tableId!==s)continue;let z=W.recordId;if(C==null||oP(C,z)){let ae=W.getValue(i);if(I.push({id:z,timestamp:P,value:ae,version:W.version,type:W.type}),--O<=0)break}}catch(W){je.error("Error getting history entry",P,W)}for(let P=I.length;P>0;)b.send(I[--P]);I[0]&&(b.startTime=I[0].timestamp)}else if(!p.omitCurrent)for(let{key:I,value:P,version:M,localTime:W}of i.getRange({start:C??!1,end:C==null?void 0:[C,wf.MAXIMUM_KEY],versions:!0}))P&&b.send({id:I,version:M,timestamp:W,value:P})}else{O&&!L&&(L=0);let I=this[mn]?.localTime;if(je.trace("Subscription from",L,"from",C),L<I){let P=[],M=I;do{let W=u.get(M);if(W){p.omitCurrent=!0;let z=Ur(W),ae=z.getValue(i);P.push({id:C,value:ae,timestamp:M,...z}),M=z.previousLocalTime}else break;O&&O--}while(M>L&&O!==0);for(let W=P.length;W>0;)b.send(P[--W]);b.startTime=I}!p.omitCurrent&&this.doesExist()&&b.send({id:C,version:this[yf],timestamp:this[mn]?.localTime,value:this})}return p.listener&&b.on("data",p.listener),b}doesExist(){return!!(this[Ae]||this[PT])}async publish(p,b){this._writePublish(p,b)}_writePublish(p,b){let C=bi(this[Se]),O=this[Le]||null;Qc(O);let L=this[Se];C.addWrite({key:O,store:i,entry:this[mn],nodeName:L?.nodeName,validate:()=>{this.validate(p)},before:Ge.publish?.bind(this,L,O,p),beforeIntermediate:Mt.publish?.bind(this,L,O,p),commit:(I,P,M)=>{P===void 0&&h&&!E&&Mm(),S(O,P?.value??null,P,P?.version||I,0,!0,L,P?.expiresAt,"message",!1,p)}})}validate(p){let b,C=a((O,L,I)=>{if(L.type&&O!=null)if(L.properties){typeof O!="object"&&(b||(b=[])).push(`Property ${I} must be an object${L.type?" ("+L.type+")":""}`);let P=L.properties;for(let M=0,W=P.length;M<W;M++){let z=P[M],ae=C(O[z.name],z,I+"."+z.name);ae&&(O[z.name]=ae)}}else switch(L.type){case"Int":(typeof O!="number"||O>>0!==O)&&(b||(b=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof O!="number"||!(Math.floor(O)===O&&Math.abs(O)<=9007199254740992))&&(b||(b=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof O!="number"&&(b||(b=[])).push(`Property ${I} must be a number`);break;case"ID":typeof O=="string"||O?.length>0&&O.every?.(P=>typeof P=="string")||(b||(b=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof O!="string"&&(b||(b=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof O!="boolean"&&(b||(b=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(O instanceof Date)){if(typeof O=="string"||typeof O=="number")return new Date(O);(b||(b=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":O instanceof Uint8Array||(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(O)){if(L.elements)for(let P=0,M=O.length;P<M;P++){let W=O[P],z=C(W,L.elements,I+"[*]");z&&(O[P]=z)}}else(b||(b=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}L.nullable===!1&&O==null&&(b||(b=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let O=0,L=m.length;O<L;O++){let I=m[O],P=C(p[I.name],I,I.name);P&&(p[I.name]=P)}if(b)throw new pn.ClientError(b.join(". "))}getUpdatedTime(){return this[yf]}wasLoadedFromSource(){return N?!!this[MT]:void 0}static async addAttributes(p){let b=m.slice(0);for(let C of p){if(!C.name)throw new pn.ClientError("Attribute name is required");if(C.name.match(/[`/]/))throw new pn.ClientError("Attribute names cannot include backticks or forward slashes");b.push(C)}return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static async removeAttributes(p){let b=m.filter(C=>!p.includes(C.name));return ut({table:n,database:c,schemaDefined:_,attributes:b}),pt.indexingOperation}static getRecordCount(p){let b=i.getStats().entryCount,C=5e3,O=1e3,L;b>C&&!p?.exactCount&&(L=O);let I=0;for(let{value:P}of i.getRange({start:!0,lazy:!0,limit:L}))P!=null&&I++;if(L){let P=I;I=0;for(let{value:Yt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:L}))Yt!=null&&I++;let M=L*2,W=(I+P)/M,z=Math.pow((I-P+1)/L/2,2)+W*(1-W)/M,ae=Math.max(Math.sqrt(z)*b,1),Y=Math.round(W*b),me=Math.max(Y-1.96*ae,0),ye=Math.min(Y+1.96*ae,b),oe=Math.pow(10,Math.round(Math.log10(ae)));return oe>Y&&(oe=oe/10),I=Math.round(Y/oe)*oe,{recordCount:I,estimatedRange:[Math.round(me),Math.round(ye)]}}return{recordCount:I}}static updatedAttributes(){ad(this,this)}static async deleteHistory(p=0){let b;for(let{key:C,value:O}of u.getRange({start:0,end:p}))await sl(),Ur(O).tableId===s&&(b=u.remove(C));await b}static async*getHistory(p=0,b=1/0){for(let{key:C,value:O}of u.getRange({start:p,end:b})){await sl();let L=Ur(O);L.tableId===s&&(yield{id:L.recordId,localTime:C,version:L.version,type:L.type,value:L.getValue(i),user:L.user})}}static async getHistoryOfRecord(p){let b=[],C=i.getEntry(p);if(!C)return b;let O=C.localTime,L=0;do{await sl();let I=u.get(O);if(I){let P=Ur(I);b.push({id:P.recordId,localTime:O,version:P.version,type:P.type,value:P.getValue(i),user:P.user}),O=P.previousLocalTime}else break}while(L<1e3&&O);return b.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let Ek=pt.prototype;return Ek[sP]=!0,d&&pt.setTTLExpiration(d/1e3),B&&hk(),pt;function $_(Q,p,b){let C;for(let O in r){let L=r[O],I=L.isIndexing,P=b?.[O],M=p?.[O];if(P===M&&!I)continue;C=!0;let W=(0,ol.getIndexedValues)(M);if(W){rP&&L.prefetch(W.map(z=>({key:z,value:Q})),iP);for(let z=0,ae=W.length;z<ae;z++)L.remove(W[z],Q)}if(W=(0,ol.getIndexedValues)(P),W){rP&&L.prefetch(W.map(z=>({key:z,value:Q})),iP);for(let z=0,ae=W.length;z<ae;z++)L.put(W[z],Q)}}return C}a($_,"updateIndices");function Qc(Q){switch(typeof Q){case"number":return!0;case"string":if(Q.length<659)return!0;if(Q.length>nP)throw new Error("Primary key size is too large: "+Q.length);break;case"object":if(Q===null)return!0;break;default:throw new Error("Invalid primary key type: "+typeof Q)}if((0,wf.writeKey)(Q,sX,0)>nP)throw new Error("Primary key size is too large: "+Q.length);return!0}a(Qc,"checkValidId");function AN(Q,p,b,C,O){let L=a(()=>{if(p?.transaction?.stale&&(p.transaction.stale=!1),b.transaction?.isDone)return O(null,Q);let I=i.getEntry(Q,b);return I&&p&&(I?.version>(p.lastModified||0)&&(p.lastModified=I.version),I?.localTime&&!p.lastRefreshed&&(p.lastRefreshed=I.localTime)),O(I,Q)},"whenPrefetched");return C?L():ie>0?(ie--,L()):new Promise((I,P)=>{ie===0?(ie--,i.prefetch([Q],()=>{M(),W()})):(se.push(Q),Ie.push(W),se.length>fk&&(ie--,M()));function M(){if(se.length>0){let z=Ie;i.prefetch(se,()=>{ie===-1?M():ie++;for(let ae of z)ae()}),se=[],Ie=[],Vt>2&&Vt--}else ie=Vt,Vt<dk&&Vt++}a(M,"prefetch");function W(){try{I(L())}catch(z){P(z)}}a(W,"load")})}a(AN,"loadLocalRecord");function V_(Q){if(!Q)return;let p=Q.role.permission;if(p.super_user)return nX;let b=p[c],C,O=b?.tables;if(O)return O[n];if(c==="data"&&(C=p[n])&&!C.tables)return C}a(V_,"getTablePermissions");function Pm(Q,p,b,C){if(N){let O;if(b.noCache?O=!0:(p?(!p.value||p.metadataFlags&(Of|Nf)||p.expiresAt&&p.expiresAt<Date.now())&&(O=!0):O=!0,us(!O,"cache-hit",n)),O){let L=ON(Q,p,b).then(I=>(I?.value?.[Ae]&&je.error("Can not assign a record with a record property"),b&&(I?.version>(b.lastModified||0)&&(b.lastModified=I.version),b.lastRefreshed=Date.now()),I));if(b?.onlyIfCached||p?.value&&C?.allowStaleWhileRevalidate?.(p,Q)){if(L.catch(I=>je.warn(I)),b?.onlyIfCached&&!C.doesExist())throw new pn.ServerError("Entry is not cached",504);return}else return L}}}a(Pm,"ensureLoadedFromSource");function bi(Q){let p=Q?.transaction;if(p){if(!p.open)throw new Error("Can not use a transaction that is not open");if(!p.lmdbDb)return p.lmdbDb=i,p;do{if(p.lmdbDb?.path===i.path)return p;let b=p.next;if(!b)return p=p.next=new Ro,p.lmdbDb=i,p;p=b}while(!0)}else return new ld}a(bi,"txnForContext");async function ON(Q,p,b){let C=p?.metadataFlags,O=p?.version,L,I;if(!i.attemptLock(Q,O,()=>{clearTimeout(I);let z=i.getEntry(Q);!z||!z.value||z.metadataFlags&(Of|Nf)?L(ON(Q,i.getEntry(Q),b)):L(z)}))return new Promise(z=>{L=z,I=setTimeout(()=>{i.unlock(Q,O)},rX)});let P=p?.value,M={requestContext:b,replacingRecord:P,replacingVersion:O,source:null,resourceCache:b?.resourceCache},W=b?.responseHeaders;return new Promise((z,ae)=>{let Y;vT(We(M,async me=>{let ye=performance.now(),oe,Yt,rr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(M.source=Lr,oe=await Lr.get(Q,M),oe))break;rr=C&Of;let $e=M.lastModified||rr&&O;Yt=rr||$e>O||!P,$e||($e=(0,ol.getNextMonotonicTime)());let rn=performance.now()-ye;if(kr(rn,"cache-resolution",n),W&&W.append("Server-Timing",`cache-resolve;dur=${rn.toFixed(2)}`),me.timestamp=$e,d&&!M.expiresAt&&(M.expiresAt=Date.now()+d),oe){if(typeof oe!="object")throw new Error("Only objects can be cached and stored in tables");typeof oe.toJSON=="function"&&(oe=oe.toJSON()),t&&oe[t]!==Q&&(oe[t]=Q)}Y=!0,z({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${Q} for ${n}`,P&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!b?.mustRevalidate||b?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(z({version:O,value:P}),je.trace($e.message,"(returned stale record)")):ae($e),M.transaction.abort();return}if(b?.noCacheStore){M.transaction.abort();return}bi(M).addWrite({key:Q,store:i,entry:p,nodeName:"source",commit:($e,rn)=>{if(rn?.version!==O)return;let Lr=$_(Q,P,oe);oe?(Mt.put?.(M,Q,oe),S(Q,oe,rn,$e,0,E&&Yt||null,M,M.expiresAt,"put",!!rr)):(Mt.delete?.(M,Q),E||h?S(Q,null,rn,$e,0,E&&Yt||null,M,0,"delete",!!rr):i.remove(Q,O))}})}),()=>{i.unlock(Q,O)},me=>{i.unlock(Q,O),Y&&je.error("Error committing cache update",me)})})}a(ON,"getFromSource");function Mm(){if(ys!==RN&&(RN=ys,(0,Fo.getWorkerIndex)()===(0,Fo.getWorkerCount)()-1)){if(k_&&clearTimeout(k_),!ys)return;let Q=new Date;Q.setMonth(0),Q.setDate(1),Q.setHours(0),Q.setMinutes(0),Q.setSeconds(0);let p=Math.ceil((Date.now()-Q.getTime())/ys)*ys+Q.getTime(),b=a(C=>{je.trace(`Scheduled next cleanup scan at ${new Date(C)}ms`),k_=setTimeout(()=>F=F.then(async()=>{if(b(Math.max(C+ys,Date.now())),i.rootStore.status!=="open"){clearTimeout(k_);return}je.trace(`Starting cleanup scan for ${n}`);try{let O=0;for(let{key:L,value:I,version:P,expiresAt:M}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&P+tX<Date.now()?i.remove(L,P):M&&M+f<Date.now()&&(pt.evict(L,I,P),O++),await sl();je.trace(`Finished cleanup scan for ${n}, evicted ${O} entries`)}catch(O){je.trace(`Error in cleanup scan for ${n}:`,O)}}),Math.min(C-Date.now(),2147483647)).unref()},"startNextTimer");b(p)}}a(Mm,"scheduleCleanup");function NN(){k=u?.addDeleteRemovalCallback(s,Q=>{let p=i.getEntry(Q);p?.value===null&&i.remove(Q,p.version)})}a(NN,"addDeleteRemoval");function hk(){(0,Fo.getWorkerIndex)()===0&&setInterval(async()=>{try{let Q=B.name,p=r[Q];if(!p)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:b}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let C=i.getEntry(b);C?.value?.[Q]<Date.now()&&pt.evict(b,C.value,C.version),await sl()}}catch(Q){je.error("Error in evicting old records",Q)}},eX).unref()}a(hk,"runRecordExpirationEviction")}function UT(e,t){let r=e.attr_object||(e.attr_object={}),s=r[t];if(s)return s;s=r[t]=Object.create(null);for(let n of e)s[n.attribute_name]=n[t];return s}function iP(){}function iX(e){cP=e}function If(e,t){let r=t?.type;return e===null?e:r==="Int"||r==="Long"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!oX.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Cf.autoCast)(e)}function oP(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 s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}function vT(e,t,r){return e?.then?e.then(t,r):t(e)}function il(e,t){e[mn]=t,e[Ae]=t?.value??null,e[yf]=t?.version}var ks,bf,ol,aP,nl,ul,pn,al,cl,je,wf,Fo,Cf,J3,cP,X3,Z3,eX,tX,rP,rX,yf,sP,mn,PT,MT,rl,Of,Nf,sX,nP,nX,SSe,oX,sl,Df=Re(()=>{ks=D(R()),bf=require("lmdb"),ol=D(or()),aP=require("lodash");Ls();Zm();nl=D(Ke()),ul=D(j());my();pn=D(Z()),al=D(Vn()),cl=D(Us());Ee();dd();je=D(U());ud();Ao();wf=require("ordered-binary"),Fo=D(Qe());ba();Cf=D(G());Eu();zn();J3=new Uint8Array(9);J3[8]=192;X3=1e8,Z3=1e7,eX=6e4,tX=864e5;ul.initSync();rP=ul.get(ks.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rX=1e4,yf=Symbol.for("version"),sP=Symbol.for("incremental-update"),mn=Symbol("entry"),PT=Symbol("is-saving"),MT=Symbol("loaded-from-source"),rl={isNotification:!0,ensureLoaded:!1},Of=1,Nf=8,sX=Buffer.allocUnsafeSlow(8192),nP=1978,nX={read:!0,insert:!0,update:!0,delete:!0},SSe=(0,Cf.convertToMS)(ul.get(ks.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Lf,"makeTable");a(UT,"attributesAsObject");a(iP,"noop");a(iX,"setServerUtilities");oX=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(If,"coerceType");a(oP,"isDescendantId");sl=a(()=>new Promise(setImmediate),"rest");a(vT,"when");a(il,"updateResource")});var De={};Fe(De,{database:()=>ku,databases:()=>ze,dropDatabase:()=>$S,dropTableMeta:()=>dX,getDatabases:()=>Hs,getTables:()=>aX,onUpdatedTable:()=>xT,readMetaDb:()=>ll,resetDatabases:()=>cX,table:()=>ut,tables:()=>Vr});function aX(){return Bf||Hs(),Vr||{}}function Hs(){if(Bf)return ze;Bf=!0,ja=new Map;let e=(0,zt.getHdbBasePath)()&&(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,$r.existsSync)(e))for(let r of(0,$r.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ye.basename)(r.name,".mdb");r.isFile()&&(0,Ye.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ll((0,Ye.join)(e,r.name),null,s)}if((0,$r.existsSync)((0,Qa.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,Qa.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,Qa.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,Qa.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,$r.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ye.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ye.join)(n,i.name);ll((0,Ye.join)(s,i.name),(0,Ye.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,$r.existsSync)(n))for(let o of(0,$r.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ye.extname)(o.name).toLowerCase()===".mdb"&&ll((0,Ye.join)(n,o.name),(0,Ye.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ye.join)(c.path,(0,Ye.basename)(o+".mdb"));(0,$r.existsSync)(u)&&ll(u,o,r,null,!0)}}for(let r in ze){let s=ja.get(r);if(s){let n=ze[r];r.includes("delete")&&ls.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(ls.trace(`delete table class ${i}`),delete n[i])}else if(delete ze[r],r==="data"){for(let n in Vr)delete Vr[n];delete Vr[Hf]}}return ja=null,ze}}function cX(){Bf=!1;for(let[,e]of Fi)e.needsDeletion=!0;Hs();for(let[e,t]of Fi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fi.delete(e));return ze}function ll(e,t,r=GT,s,n){let i=new HT.default(e,!1);try{let o=Fi.get(e);o?o.needsDeletion=!1:(o=(0,Mf.open)(i),Fi.set(e,o));let c=new xo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Pf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,$r.existsSync)(s)&&(i.path=s,_=(0,Mf.open)(i),_.isLegacy=!0):_=Rd(o));let l=dP(r),d=l[Hf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[m,S]=E.toString().split("/");S===""?S=h.name:S||(S=m,m=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(m);let A=f.get(m);A||f.set(m,A={attributes:[]}),(S==null||h.is_hash_attribute)&&(A.primary=h),S!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:m,primary:S}=h;if(!S){for(let k of m)if(k.is_hash_attribute||k.isPrimaryKey){S=k;break}if(!S){ls.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(m)}`);continue}}let A=l[E],g={},N=[],V,$,F=typeof S.audit=="boolean"?S.audit:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=S.trackDeletes,K=S.expiration,B=S.eviction;if(A)g=A.indices,N=A.attributes,A.schemaVersion++;else{V=S.tableId,V?V>=(u.get(Wa)||0)&&u.putSync(Wa,V+1):(S.tableId=V=u.get(Wa),V||(V=1),u.putSync(Wa,V+1),u.putSync(S.key,S));let k=new xo.default(!S.is_hash_attribute,S.is_hash_attribute);$=Td(o.openDB(S.key,k)),$.rootStore=o,$.tableId=V}for(let k of m){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!g[k.name]){let Ie=new xo.default(!k.is_hash_attribute,k.is_hash_attribute);g[k.name]=o.openDB(k.key,Ie)}let se=N.find(Ie=>Ie.name===k.name);se?N.splice(N.indexOf(se),1,k):N.push(k)}}catch(se){ls.error("Error trying to update attribute",k,N,g,se)}}if(!A){A=fP(l,E,Lf({primaryStore:$,auditStore:_,audit:F,expirationMS:K&&K*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:S.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:g,attributes:m,schemaDefined:S.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let k of FT)k(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function dP(e){let t=ze[e];if(t||(e==="data"?t=ze[e]=Vr:e==="system"?Object.defineProperty(ze,"system",{value:t=Object.create(null),configurable:!0}):t=ze[e]=Object.create(null)),ja&&!ja.has(e)){let r=new Set;t[Hf]=r,ja.set(e,r)}return t}function fP(e,t,r){return e[t]=r,r}function ku({database:e,table:t}){e||(e=GT),Hs();let r=dP(e),s=(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),n=(0,zt.get)(Yr.CONFIG_PARAMS.DATABASES)||{};process.env.SCHEMAS_DATA_PATH&&(n.data={path:process.env.SCHEMAS_DATA_PATH});let i=t&&n[e]?.tables?.[t]?.path;s=i||n[e]?.path||process.env.STORAGE_PATH||(0,zt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(s)?s:(0,Ye.join)((0,zt.getHdbBasePath)(),Yr.LEGACY_DATABASES_DIR_NAME));let o=(0,Ye.join)(s,(i?t:e)+".mdb"),c=Fi.get(o);if(!c){let u=new HT.default(o,!1);c=(0,Mf.open)(u),Fi.set(o,c)}return c}async function $S(e){if(!ze[e])throw new Error("Schema does not exist");let t=ze[e];for(let r in t){let n=t[r].primaryStore.rootStore;Fi.delete(n.path),n.status==="open"&&(await n.close(),await uP.remove(n.path))}if(e==="data"){for(let r in Vr)delete Vr[r];delete Vr[Hf]}delete ze[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=GT);let l=ku({database:t,table:e}),d=ze[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,m,S;u==null&&(u=!0);let A=new xo.default(!1);for(let w of i)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let g,N;if(f){if(E=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 w=l.auditStore;w||(w=Rd(l)),h=i.find(se=>se.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,zt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),ls.trace(`${e} table loading, opening primary store`);let K=new xo.default(!1,!0),B=e+"/",k=Td(l.openDB(B,K));k.rootStore=l,S=l.dbisDb=l.openDB(Pf.INTERNAL_DBIS_NAME,A),k.tableId=S.get(Wa),k.tableId||(k.tableId=1),S.putSync(Wa,k.tableId+1),h.tableId=k.tableId,f=fP(d,e,Lf({primaryStore:k,auditStore:w,audit:o,trackDeletes:c,expirationMS:r&&r*1e3,evictionMS:s&&s*1e3,primaryKey:E,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:i,schemaDefined:u,dbisDB:S})),f.schemaVersion=1,g=!0,F(),S.put(B,h)}m=f.indices,S=S||(l.dbisDb=l.openDB(Pf.INTERNAL_DBIS_NAME,A)),f.dbisDB=S;let V=[];for(let{key:w,value:K}of S.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=K.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&K.indexed&&!K.isPrimaryKey){F(),g=!0,S.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let K=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:K,configurable:!0});let B=S.get(K);if(w.isPrimaryKey){if(B=B||S.get(K=e+"/")||{},o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let se=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),se.audit=o),r&&(se.expiration=+r),s&&(se.eviction=+s),g=!0,F(),S.put(K,se)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==w.type||B.indexed!==w.indexed||JSON.stringify(B.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(B.elements)!==JSON.stringify(w.elements);if(w.indexed){let se=new xo.default(!0,!1),Ie=l.openDB(K,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<_l.workerData?.restartNumber)&&(g=!0,F(),B=S.get(K),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<_l.workerData?.restartNumber)&&(g=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),S.put(K,w)),m[w.name]=Ie}else k&&(g=!0,F(),S.put(K,w))}}finally{N&&N()}if(g&&(f.schemaVersion++,f.updatedAttributes()),ls.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=_X(f,$,V):g&&Uf.signalSchemaChange(new vf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,g)for(let w of FT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),ls.trace(`${e} table loaded`),f;function F(){N||l.transactionSync(()=>({then(w){N=w}}))}a(F,"startTxn")}async function _X(e,t,r){try{let s=e.schemaVersion;await Uf.signalSchemaChange(new vf.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=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++,n=e.primaryStore.ifVersion(_,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,m=(0,lP.getIndexedValues)(l[h]);if(m)for(let S=0,A=m.length;S<A;S++)E.dbi.put(m[S],_)}}),n.then(()=>u--,f=>{u--,ls.error(f)}),_l.workerData&&_l.workerData.restartNumber!==_P.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>uX?await n:u>lX&&await new Promise(f=>setImmediate(f))}for(let _ of t)delete _.lastIndexedKey,delete _.indexingPID,_.dbi.isIndexing=!1,n=e.dbisDB.put(_.key,_)}await n,await Uf.signalSchemaChange(new vf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){ls.error("Error in indexing",s)}}function dX({table:e,database:t}){let r=ku({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function xT(e){FT.push(e)}var zt,Pf,Mf,Ye,$r,Qa,xo,HT,Yr,uP,qT,lP,Uf,vf,_l,ls,_P,GT,Hf,Vr,ze,Wa,FT,Bf,Fi,ja,uX,lX,Ee=Re(()=>{zt=D(j()),Pf=D(Ke()),Mf=require("lmdb"),Ye=require("path"),$r=require("fs"),Qa=D(He());Df();xo=D(Ad()),HT=D(Nd()),Yr=D(R()),uP=D(require("fs-extra")),qT=require("../index"),lP=D(or()),Uf=D(Vn()),vf=D(Us()),_l=require("worker_threads"),ls=D(U()),_P=D(Qe());ba();Eu();GT="data",Hf=Symbol("defined-tables");(0,zt.initSync)();Vr=Object.create(null),ze=Object.create(null);(0,qT._assignPackageExport)("databases",ze);(0,qT._assignPackageExport)("tables",Vr);Wa=Symbol.for("next-table-id"),FT=[],Fi=new Map;a(aX,"getTables");a(Hs,"getDatabases");a(cX,"resetDatabases");a(ll,"readMetaDb");a(dP,"ensureDB");a(fP,"setTable");a(ku,"database");a($S,"dropDatabase");a(ut,"table");uX=1e3,lX=10;a(_X,"runIndexing");a(dX,"dropTableMeta");a(xT,"onUpdatedTable")});var G=T((ISe,IP)=>{"use strict";var xi=require("path"),SP=require("fs-extra"),hr=U(),EP=require("fs-extra"),qf=require("os"),fX=require("net"),EX=require("recursive-iterator"),Je=R(),hX=Wm(),hP=require("papaparse"),Gf=require("moment"),{inspect:mX}=require("util"),mP=require("is-number"),ySe=require("lodash"),pX=require("minimist"),SX=require("https"),TX=require("http"),{hdb_errors:Ff}=Z(),gX=/^((\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)))$/,TP=require("util").promisify(setTimeout),RX=100,AX=5,OX="",NX=4,pP={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};IP.exports={isEmpty:Kr,isEmptyOrZeroLength:Sn,arrayHasEmptyValues:IX,arrayHasEmptyOrZeroLengthValues:wX,buildFolderPath:CX,isBoolean:gP,errorizeMessage:bX,stripFileExtension:DX,autoCast:PX,autoCastJSON:RP,autoCastJSONDeep:$T,removeDir:MX,compareVersions:UX,isCompatibleDataVersion:vX,escapeRawValue:BX,unescapeValue:HX,stringifyProps:qX,timeoutPromise:FX,isClusterOperation:kX,getClusterUser:VX,checkGlobalSchemaTable:$X,getHomeDir:OP,getPropsFilePath:GX,promisifyPapaParse:YX,removeBOM:NP,createEventPromise:KX,checkProcessRunning:WX,checkSchemaTableExist:QX,checkSchemaExists:bP,checkTableExists:yP,getStartOfTomorrowInSeconds:jX,getLimitKey:zX,isObject:LX,isNotEmptyAndHasValue:yX,autoCasterIsNumberCheck:AP,backtickASTSchemaItems:JX,isPortTaken:xX,createForkArgs:XX,autoCastBoolean:ZX,async_set_timeout:TP,getTableHashAttribute:eZ,doesSchemaExist:tZ,doesTableExist:rZ,stringifyObj:sZ,ms_to_time:nZ,changeExtension:iZ,getEnvCliRootPath:VT,noBootFile:oZ,httpRequest:aZ,transformReq:cZ,convertToMS:uZ,PACKAGE_ROOT:Je.PACKAGE_ROOT};function bX(e){return e instanceof Error?e:new Error(e)}a(bX,"errorizeMessage");function Kr(e){return e==null}a(Kr,"isEmpty");function yX(e){return!Kr(e)&&(e||e===0||e===""||gP(e))}a(yX,"isNotEmptyAndHasValue");function Sn(e){return Kr(e)||e.length===0||e.size===0}a(Sn,"isEmptyOrZeroLength");function IX(e){if(Kr(e))return!0;for(let t=0;t<e.length;t++)if(Kr(e[t]))return!0;return!1}a(IX,"arrayHasEmptyValues");function wX(e){if(Sn(e))return!0;for(let t=0;t<e.length;t++)if(Sn(e[t]))return!0;return!1}a(wX,"arrayHasEmptyOrZeroLengthValues");function CX(...e){try{return e.join(xi.sep)}catch{console.error(e)}}a(CX,"buildFolderPath");function gP(e){return Kr(e)?!1:e===!0||e===!1}a(gP,"isBoolean");function LX(e){return Kr(e)?!1:typeof e=="object"}a(LX,"isObject");function DX(e){return Sn(e)?OX:e.slice(0,-NX)}a(DX,"stripFileExtension");function PX(e){return Kr(e)||e===""||typeof e!="string"?e:pP[e]!==void 0?pP[e]:AP(e)===!0?Number(e):gX.test(e)?new Date(e):e}a(PX,"autoCast");function RP(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(RP,"autoCastJSON");function $T(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=$T(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=$T(r);s!==r&&(e[t]=s)}return e}else return RP(e)}a($T,"autoCastJSONDeep");function AP(e){if(e.startsWith("0.")&&mP(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mP(e))}a(AP,"autoCasterIsNumberCheck");async function MX(e){if(Sn(e))throw new Error(`Directory path: ${e} does not exist`);try{await EP.emptyDir(e),await EP.remove(e)}catch(t){throw hr.error(`Error removing files in ${e} -- ${t}`),t}}a(MX,"removeDir");function UX(e,t){if(Sn(e)){hr.info("Invalid current version sent as parameter.");return}if(Sn(t)){hr.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").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(UX,"compareVersions");function vX(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(vX,"isCompatibleDataVersion");function BX(e){if(Kr(e))return e;let t=String(e);return t==="."?Je.UNICODE_PERIOD:t===".."?Je.UNICODE_PERIOD+Je.UNICODE_PERIOD:t.replace(Je.FORWARD_SLASH_REGEX,Je.UNICODE_FORWARD_SLASH)}a(BX,"escapeRawValue");function HX(e){if(Kr(e))return e;let t=String(e);return t===Je.UNICODE_PERIOD?".":t===Je.UNICODE_PERIOD+Je.UNICODE_PERIOD?"..":String(e).replace(Je.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(HX,"unescapeValue");function qX(e,t){if(Kr(e))return hr.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+qf.EOL}!Sn(s)&&s[0]===";"?r+=" "+s+n+qf.EOL:Sn(s)||(r+=s+"="+n+qf.EOL)}catch{hr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(qX,"stringifyProps");function OP(){let e;try{e=qf.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(OP,"getHomeDir");function GX(){let e=xi.join(OP(),Je.HDB_HOME_DIR_NAME,Je.BOOT_PROPS_FILE_NAME);return SP.existsSync(e)||(e=xi.join(__dirname,"../","hdb_boot_properties.file")),e}a(GX,"getPropsFilePath");function FX(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(FX,"timeoutPromise");async function xX(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=fX.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xX,"isPortTaken");function kX(e){try{return Je.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){hr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kX,"isClusterOperation");function $X(e,t){let r=(Ee(),te(De)).getDatabases();if(!r[e])return Ff.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Ff.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($X,"checkGlobalSchemaTable");function VX(e,t){if(Kr(t)){hr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Kr(e)||Sn(e)){hr.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){hr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){hr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(VX,"getClusterUser");function YX(){hP.parsePromise=function(e,t,r){return new Promise(function(s,n){hP.parse(e,{header:!0,transformHeader:NP,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(YX,"promisifyPapaParse");function NP(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(NP,"removeBOM");function KX(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;hr.info(`Got cluster status event response: ${mX(n)}`);try{i.cancel()}catch{hr.error("Error trying to cancel timeout.")}s(n)})})}a(KX,"createEventPromise");async function WX(e){let t=!0,r=0;do await TP(RX*r++),(await hX.findPs(e)).length>0&&(t=!1);while(t&&r<AX);if(t)throw new Error(`process ${e} was not started`)}a(WX,"checkProcessRunning");function QX(e,t){let r=bP(e);if(r)return r;let s=yP(e,t);if(s)return s}a(QX,"checkSchemaTableExist");function bP(e){let{getDatabases:t}=(Ee(),te(De));if(!t()[e])return Ff.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bP,"checkSchemaExists");function yP(e,t){let{getDatabases:r}=(Ee(),te(De));if(!r()[e][t])return Ff.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yP,"checkTableExists");function jX(){let e=Gf().utc().add(1,Je.MOMENT_DAYS_TAG).startOf(Je.MOMENT_DAYS_TAG).unix(),t=Gf().utc().unix();return e-t}a(jX,"getStartOfTomorrowInSeconds");function zX(){return Gf().utc().format("DD-MM-YYYY")}a(zX,"getLimitKey");function JX(e){try{let t=new EX(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){hr.error("Got an error back ticking items."),hr.error(t)}}a(JX,"backtickASTSchemaItems");function XX(e){return[e]}a(XX,"createForkArgs");function ZX(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ZX,"autoCastBoolean");function eZ(e,t){let{getDatabases:r}=(Ee(),te(De)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(eZ,"getTableHashAttribute");function tZ(e){let{getDatabases:t}=(Ee(),te(De));return t()[e]!==void 0}a(tZ,"doesSchemaExist");function rZ(e,t){let{getDatabases:r}=(Ee(),te(De));return r()[e]?.[t]!==void 0}a(rZ,"doesTableExist");function sZ(e){try{return JSON.stringify(e)}catch{return e}}a(sZ,"stringifyObj");function nZ(e){let t=Gf.duration(e),r=t.seconds()>0?t.seconds()+"s":"",s=t.minutes()>0?t.minutes()+"m ":"",n=t.hours()>0?t.hours()+"h ":"",i=t.days()>0?t.days()+"d ":"";return(t.years()>0?t.years()+"y ":"")+i+n+s+r}a(nZ,"ms_to_time");function iZ(e,t){let r=xi.basename(e,xi.extname(e));return xi.join(xi.dirname(e),r+t)}a(iZ,"changeExtension");function VT(){if(process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=pX(process.argv);if(e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Je.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(VT,"getEnvCliRootPath");var kT;function oZ(){if(kT)return kT;let e=VT();VT()&&SP.pathExistsSync(xi.join(e,Je.HDB_CONFIG_FILE))&&(kT=!0)}a(oZ,"noBootFile");function aZ(e,t){let r;return e.protocol==="http:"?r=TX:r=SX,new Promise((s,n)=>{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",()=>{s(c)})});i.on("error",o=>{n(o)}),i.write(JSON.stringify(t)),i.end()})}a(aZ,"httpRequest");function cZ(e){if(!e.schema&&!e.database){e.schema=Je.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(cZ,"transformReq");function uZ(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(uZ,"convertToMS")});var j=T((CSe,LP)=>{"use strict";var YT=require("fs-extra"),$s=require("path"),wP=require("os"),lZ=require("properties-reader"),dl=U(),ko=G(),re=R(),xf=rt(),_Z="Error initializing environment manager",kf="BOOT_PROPS_FILE_PATH",CP=!1,dZ={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Jn={};LP.exports={BOOT_PROPS_FILE_PATH:kf,getHdbBasePath:fZ,setHdbBasePath:EZ,get:hZ,initSync:pZ,setProperty:pe,initTestEnvironment:SZ};function fZ(){return Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(fZ,"getHdbBasePath");function EZ(e){Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(EZ,"setHdbBasePath");function hZ(e){let t=xf.getConfigValue(e);return t===void 0?Jn[e]:t}a(hZ,"get");function pe(e,t){dZ[e]&&(Jn[e]=t),xf.updateConfigObject(e,t)}a(pe,"setProperty");function mZ(){let e;try{e=ko.getPropsFilePath(),YT.accessSync(e,YT.constants.F_OK|YT.constants.R_OK),CP=!0;let t=lZ(e);return Jn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),Jn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Jn[kf]=e,!0}catch{return dl.trace(`Environment manager found no properties file at ${e}`),!1}}a(mZ,"doesPropFileExist");function pZ(e=!1){try{(CP||mZ()||ko.noBootFile())&&(xf.initConfig(e),Jn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=xf.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){dl.error(_Z),dl.error(t),console.error(t),process.exit(1)}}a(pZ,"initSync");function SZ(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=$s.join(__dirname,"../../","unitTests");Jn[kf]=$s.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,$s.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,wP.userInfo()?wP.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,$s.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,$s.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,$s.join(u,"envDir","log")),pe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,$s.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,$s.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,ko.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,ko.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,ko.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,ko.isEmpty(i)?!1:i),pe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,$s.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,ko.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(re.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(re.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(re.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(re.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${kf}. Please check your boot props and settings files`;dl.fatal(r),dl.error(t)}}a(SZ,"initTestEnvironment")});var WT={};Fe(WT,{loadGQLSchema:()=>RZ,start:()=>KT,startOnMainThread:()=>gZ});function KT({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:_,StringValueNode:l}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(F){if(F.kind==="NonNullType"){let B=$(F.type);return B.nullable=!1,B}if(F.kind==="ListType")return{type:"array",elements:$(F.type)};let K={type:F.name?.value};return Object.defineProperty(K,"location",{value:F.loc.startToken}),K};a($,"getProperty");let A=S.name.value,g=[],N={table:null,database:null,properties:g};f.set(A,N);for(let F of S.directives){if(F.name.value==="table"){for(let w of F.arguments)N[w.name.value]=w.value.value;N.schema&&(N.database=N.schema),N.table||(N.table=A),N.audit&&(N.audit=N.audit!=="false"),N.attributes=N.properties,E.push(N)}if(F.name.value==="sealed"&&(N.sealed=!0),F.name.value==="export"){N.export=!0;for(let w of F.arguments)w.name.value==="name"&&(N.export={name:w.value.value})}}let V=!1;for(let F of S.fields){let w=$(F.type);w.name=F.name.value,g.push(w);for(let K of F.directives)if(K.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(K.name.value==="indexed")w.indexed=!0;else if(K.name.value==="createdTime")w.assignCreatedTime=!0;else if(K.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(K.name.value==="expiresAt")w.expiresAt=!0;else if(K.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of K.arguments)k.name.value==="role"&&B.push(k.value.value)}}N.typeName=A,A==="Query"&&(h=N)}function m(S){let A=f.get(S.type);A?S.properties=A.properties:S.type==="array"?m(S.elements):TZ.includes(S.type)||(0,DP.getWorkerIndex)()===0&&console.error(`The type ${S.type} is unknown at line ${S.location.line}, column ${S.location.column}, in ${n}`)}a(m,"connectPropertyType");for(let S of f.values())for(let A of S.properties)m(A);for(let S of E)S.tableClass=e(S),S.export&&(S.export.name===""?i.set((0,$f.dirname)(s),S.tableClass):i.set((0,$f.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass));if(h)for(let S of h.properties){let A=f.get(S.type);if(!A)throw new Error(`${S.type} was not found as a Query export`);i.set((0,$f.dirname)(s)+"/"+S.name,A.tableClass)}}}var $f,DP,TZ,gZ,RZ,PP=Re(()=>{$f=require("path");Ee();DP=D(Qe()),TZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(KT,"start");gZ=KT,RZ=KT({ensureTable:ut}).handleFile});async function Vf(e){return AZ?(fl||(fl=OZ(bZ)),(await(await fl).import(e)).namespace):import(e)}async function OZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),fl=new Compartment({console,Math,Date,fetch:NZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,UP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:Ut,tables:Vr,databases:ze})}};let s=await(0,MP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),fl}function NZ(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 bZ(){return{Resource:Ut,tables:Vr}}var MP,UP,AZ,fl,QT=Re(()=>{Ls();Ee();MP=require("fs/promises"),UP=require("path"),AZ=!1;a(Vf,"secureImport");a(OZ,"getCompartment");a(NZ,"secureOnlyFetch");a(bZ,"getGlobalVars")});var zT={};Fe(zT,{handleFile:()=>yZ});async function yZ(e,t,r,s){let n=new Map,i=(0,vP.pathToFileURL)(r).toString(),o=await Vf(i);u(o.default)&&s.set((0,jT.dirname)(t),o.default),c(o,(0,jT.dirname)(t));function c(_,l){for(let d in _){let f=_[d];u(f)?s.set(l+"/"+d,f):typeof f=="object"&&c(f,l+"/"+d)}}a(c,"recurseForResources");function u(_){return typeof _=="function"&&(_.get||_.put||_.post||_.delete)}return a(u,"isResource"),n}var vP,jT,BP=Re(()=>{vP=require("url");QT();jT=require("path");a(yZ,"handleFile")});var XT={};Fe(XT,{start:()=>IZ});function IZ({resources:e}){e.set("login",JT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var JT,HP=Re(()=>{Ls();a(IZ,"start");JT=class extends Ut{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var eg=T((xSe,FP)=>{"use strict";var{Readable:wZ}=require("stream"),CZ=1e4;FP.exports={streamAsJSON(e){return new ZT({value:e})}};var ZT=class extends wZ{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],s=t[Symbol.iterator];if((s||r)&&!t.then){yield"[";let n=!0;if((r||s)&&!(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 n?n=!1:yield",",yield*this.serialize(o.value)}for(let i of t)n?n=!1:yield",",yield*this.serialize(i);yield"]";return}if(t.then)try{yield t.then(n=>this.serialize(n),qP)}catch(n){yield qP(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);GP(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>CZ?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 GP(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))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 s of this.activeIterators)t?s.throw(t):s.return();r()}};function qP(e){return console.error(e),JSON.stringify(e.toString())}a(qP,"handleError");function GP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(GP,"when")});var Yf=T(($Se,xP)=>{"use strict";var LZ=as();xP.exports={writeTransaction:DZ};function DZ(e,t,r){return LZ.writeTransaction(e,t,r)}a(DZ,"writeTransaction")});var YP=T((KSe,VP)=>{"use strict";var PZ=_r(),MZ=cs(),kP=U(),UZ=dr(),YSe=Yf(),vZ=require("clone"),rg=require("alasql"),BZ=jd(),$P=require("util"),HZ=$P.promisify(MZ.getTableSchema),qZ=$P.promisify(PZ.search),GZ=R(),tg=G();BZ(rg);VP.exports={update:xZ};var FZ="There was a problem performing this update. Please check the logs and try again.";async function xZ({statement:e,hdb_user:t}){let r=await HZ(e.table.databaseid,e.table.tableid),s=kZ(e.columns);tg.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=vZ(n),c=tg.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=rg.parse(u).statements[0],l=await qZ(_),d=$Z(s,l);return VZ(o,d,t)}a(xZ,"update");function kZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=rg.compile(`SELECT ${r.expression.toString()} AS [${GZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw kP.error(t),new Error(FZ)}}a(kZ,"createUpdateRecord");function $Z(e,t){return tg.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a($Z,"buildUpdateRecords");async function VZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await UZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){kP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(VZ,"updateRecords")});var WP=T((zSe,KP)=>{var YZ=require("alasql"),KZ=_r(),WZ=U(),QZ=as(),ng=require("util"),sg=G(),jZ=R(),zZ=cs(),QSe=Yf(),jSe=dr(),JZ="record",XZ="successfully deleted",ZZ=ng.callbackify(s5),e5=ng.promisify(KZ.search),t5=ng.promisify(zZ.getTableSchema);KP.exports={convertDelete:ZZ};function r5(e){return`${e.deleted_hashes.length} ${JZ}${e.deleted_hashes.length===1?"":"s"} ${XZ}`}a(r5,"generateReturnMessage");async function s5({statement:e,hdb_user:t}){let r=await t5(e.table.databaseid,e.table.tableid);sg.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=sg.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=YZ.parse(o).statements[0],u={operation:jZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await e5(c);let _=await QZ.deleteRecords(u);return sg.isEmptyOrZeroLength(_.message)&&(_.message=r5(_)),delete _.txn_time,_}catch(_){throw WZ.error(_),_.hdb_code?_.message:_}}a(s5,"convertDelete")});var XP=T((XSe,JP)=>{"use strict";var n5=Ui(),{hdb_errors:QP}=Z(),{getDatabases:jP}=(Ee(),te(De));JP.exports={checkSchemaExists:zP,checkSchemaTableExists:i5,schema_describe:n5};async function zP(e){if(!jP()[e])return QP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(zP,"checkSchemaExists");async function i5(e,t){let r=await zP(e);if(r)return r;if(!jP()[e][t])return QP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(i5,"checkSchemaTableExists")});var st=T((nTe,pM)=>{"use strict";var Ht=j();Ht.initSync();var o5=require("fs-extra"),a5=require("semver"),ml=require("path"),{monotonicFactory:c5}=require("ulidx"),eM=c5(),u5=require("util"),tM=require("child_process"),l5=u5.promisify(tM.exec),_5=tM.spawn,Oe=ke(),be=R(),cg=G(),_s=U(),Kf=Qn(),d5=Yf(),El=rt(),{onMessageByType:f5}=Qe(),{isMainThread:E5}=require("worker_threads"),{Encoder:h5,decode:ug}=require("msgpackr"),rM=new h5,{isEmpty:$o}=cg,sM=Er(),m5=48*36e11,p5=5e9;E5&&f5(be.ITC_EVENT_TYPES.RESTART,()=>{Vs=void 0,Xa=void 0});var{connect:S5,StorageType:nM,RetentionPolicy:iM,AckPolicy:Wf,DeliverPolicy:Qf,DiscardPolicy:T5,NatsConnection:eTe,JetStreamManager:tTe,JetStreamClient:rTe,StringCodec:sTe,JSONCodec:g5,createInbox:lg,headers:R5,ErrorCode:ZP}=require("nats"),{PACKAGE_ROOT:A5}=R(),O5=po(),{recordAction:N5}=(zn(),te(tl)),oM=g5(),b5="clustering",y5=O5.engines[Oe.NATS_SERVER_NAME],I5=ml.join(A5,"dependencies"),ag=ml.join(I5,`${process.platform}-${process.arch}`,Oe.NATS_BINARY_NAME),ig,og,hl,za,Ja;pM.exports={runCommand:aM,checkNATSServerInstalled:w5,createConnection:_g,getConnection:jf,getJetStreamManager:pl,getJetStream:cM,getNATSReferences:mr,getServerList:L5,createLocalStream:dg,listStreams:uM,deleteLocalStream:D5,getServerConfig:Sl,listRemoteStreams:P5,viewStream:M5,viewStreamIterator:U5,publishToStream:v5,createWorkQueueStream:B5,addSourceToWorkStream:_M,request:q5,removeSourceFromWorkStream:fM,reloadNATS:fg,reloadNATSHub:G5,reloadNATSLeaf:F5,extractServerName:dM,requestErrorHandler:x5,updateWorkStream:k5,createLocalTableStream:hM,createTableStreams:$5,purgeTableStream:mM,purgeSchemaTableStreams:V5,getStreamInfo:Y5,updateLocalStreams:W5,closeConnection:C5,getJsmServerName:Tl,addNatsMsgHeader:lM,updateIngestStreamConsumer:H5};async function aM(e,t=void 0){let{stdout:r,stderr:s}=await l5(e,{cwd:t});if(s)throw new Error(s.replace(`
10
10
  `,""));return r.replace(`
11
- `,"")}a(cM,"runCommand");async function C5(){try{await a5.access(cg)}catch{return!1}let e=await cM(`${cg} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return c5.eq(t,I5)}a(C5,"checkNATSServerInstalled");async function dg(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await nM.getClusterUser();if(ko(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await T5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(dg,"createConnection");async function L5(){Vs&&(await Vs.drain(),Vs=void 0,ja=void 0,za=void 0,Ja=void 0)}a(L5,"closeConnection");var Vs,Ja;async function Qf(){return Ja||(Ja=dg(Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Vs=await Ja),Vs||Ja}a(Qf,"getConnection");async function ml(){if(ja)return ja;ko(Vs)&&await Qf();let{domain:e}=pl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ja=await Vs.jetstreamManager({domain:e,timeout:6e4}),ja}a(ml,"getJetStreamManager");async function uM(){if(za)return za;ko(Vs)&&await Qf();let{domain:e}=pl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return za=Vs.jetstream({domain:e,timeout:6e4}),za}a(uM,"getJetStream");async function mr(){let e=Vs||await Qf(),t=ja||await ml(),r=za||await uM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function D5(e){let t=Ht.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await nM.getClusterUser(),n=await dg(t,r,s),i=_g(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=aM.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await ug.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(D5,"getServerList");async function fg(e,t){let{jsm:r}=await mr(),s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:iM.File,retention:oM.Limits,subjects:t,discard:g5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(fg,"createLocalStream");async function lM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(lM,"listStreams");async function P5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(P5,"deleteLocalStream");async function M5(e){let{connection:t}=await mr(),r=[],s=_g(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(aM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(M5,"listRemoteStreams");async function U5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=tM(),o={durable_name:i,ack_policy:Kf.Explicit};t&&(o.deliver_policy=Wf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=lg(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(U5,"viewStream");async function*v5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=tM(),o={durable_name:i,ack_policy:Kf.Explicit};t&&(o.deliver_policy=Wf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=lg(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(v5,"viewStreamIterator");async function B5(e,t,r,s){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=_M(s,r);let{js:n}=await mr(),i=await Sl(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:sM.encode(s);try{_s.trace(`publishToStream publishing to subject: ${o}`),b5(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return hM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await fg(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(B5,"publishToStream");function _M(e,t){t===void 0&&(t=A5());let r=Ht.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(_M,"addNatsMsgHeader");function pl(e){e=e.toLowerCase();let t=hl.join(Ht.get(be.CONFIG_PARAMS.ROOTPATH),y5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ko(ag)&&(ag={port:fl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:fl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:hl.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),ag;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ko(og)&&(og={port:fl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:fl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:fl.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:hl.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),og;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(pl,"getServerConfig");async function H5(e){let{jsm:t}=await mr(),r=await Sl();try{await t.streams.add({name:e.stream_name,storage:iM.File,retention:oM.Limits,max_age:p5,max_bytes:S5,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Kf.Explicit,durable_name:e.durable_name,deliver_policy:Wf.All,max_ack_pending:1e4});else throw s}}a(H5,"createWorkQueueStream");async function q5(){let{jsm:e}=await mr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(_s.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),_s.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Kf.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Wf.All,max_ack_pending:1e4}))}a(q5,"updateIngestStreamConsumer");async function dM(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=fM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Yf.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,S=n.config.sources.length;m<S;m++)if(d=n.config.sources[m],f=m,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:m}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(dM,"addSourceToWorkStream");function fM(e){return e.split(".")[1]}a(fM,"extractServerName");async function EM(e,t,r){let{jsm:s}=await mr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Yf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(EM,"removeSourceFromWorkStream");async function G5(e,t,r=6e4,s=_g()){if(!ug.isObject(t))throw new Error("data param must be an object");let n=sM.encode(t),{connection:i}=await mr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return lg(c.data)}a(G5,"request");function Eg(e){return new Promise(async(t,r)=>{let s=d5(cg,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(Eg,"reloadNATS");async function F5(){let{pid_file_path:e}=pl(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Eg(e)}a(F5,"reloadNATSHub");async function x5(){let{pid_file_path:e}=pl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Eg(e)}a(x5,"reloadNATSLeaf");function k5(e,t,r){let s;switch(e.code){case eM.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case eM.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(k5,"requestErrorHandler");async function $5(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await hM(async()=>{e.subscribe===!0?await dM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await EM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($5,"updateWorkStream");function hM(e){return f5.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(hM,"exclusiveLock");async function mM(e,t){let r=Yf.createNatsTableStreamName(e,t),s=await Sl(),n=W5(e,t,s);await fg(r,[n])}a(mM,"createLocalTableStream");async function V5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await mM(s,n)}}a(V5,"createTableStreams");async function pM(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Yf.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")_s.warn(r);else throw r}}a(pM,"purgeTableStream");async function Y5(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await pM(e,t[r])}a(Y5,"purgeSchemaTableStreams");async function K5(e){return(await ml()).streams.info(e)}a(K5,"getStreamInfo");function W5(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(W5,"createSubjectName");async function Sl(){if(El)return El;if(El=(await ml())?.nc?.info?.server_name,El===void 0)throw new Error("Unable to get jetstream manager server name");return El}a(Sl,"getJsmServerName");async function Q5(){let e=await ml(),t=await Sl(),r=await lM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=j5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(Q5,"updateLocalStreams");function j5(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(j5,"updateStreamLimits")});var Xf=T((cTe,AM)=>{"use strict";var Xa=Dd(),Za=ZP(),z5=v(),J5=require("uuid").v4,aTe=require("clone"),zf=Vn(),ec=R(),X5=require("util"),xi=as(),{handleHDBError:pr,hdb_errors:Z5}=Z(),{HDB_ERROR_MSGS:jf,HTTP_STATUS_CODES:Sr}=Z5,{SchemaEventMsg:Jf}=Us(),TM=st(),{getDatabases:e8}=(fe(),te(De)),{transformReq:tc}=G();AM.exports={createSchema:t8,createSchemaStructure:gM,createTable:r8,createTableStructure:RM,createAttribute:a8,dropSchema:s8,dropTable:n8,dropAttribute:i8,getBackup:c8};async function t8(e){let t=await gM(e);return zf.signalSchemaChange(new Jf(process.pid,e.operation,e.schema)),t}a(t8,"createSchema");async function gM(e){let t=Xa.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(tc(e),!await Za.checkSchemaExists(e.schema))throw pr(new Error,jf.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,ec.LOG_LEVELS.ERROR,jf.SCHEMA_EXISTS_ERR(e.schema),!0);return await xi.createSchema(e),`database '${e.schema}' successfully created`}a(gM,"createSchemaStructure");async function r8(e){return tc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await RM(e)}a(r8,"createTable");async function RM(e){let t=Xa.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(Xa.validateTableResidence(e.residence),!await Za.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,jf.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,ec.LOG_LEVELS.ERROR,jf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:J5(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await xi.createTable(s,e);else throw pr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sr.BAD_REQUEST);else await xi.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(RM,"createTableStructure");async function s8(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Xa.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);tc(e);let n=await Za.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,ec.LOG_LEVELS.ERROR,n,!0);let i=await Za.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await xi.dropSchema(e),zf.signalSchemaChange(new Jf(process.pid,e.operation,e.schema)),await TM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(s8,"dropSchema");async function n8(e){let t=Xa.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);tc(e);let r=await Za.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,ec.LOG_LEVELS.ERROR,r,!0);return await xi.dropTable(e),await TM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(n8,"dropTable");async function i8(e){let t=Xa.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);tc(e);let r=await Za.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,ec.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw pr(new Error,"You cannot drop a hash attribute",Sr.BAD_REQUEST,void 0,void 0,!0);if(ec.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw pr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sr.BAD_REQUEST,void 0,void 0,!0);try{return await xi.dropAttribute(e),o8(e),zf.signalSchemaChange(new Jf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw z5.error(`Got an error deleting attribute ${X5.inspect(e)}.`),s}}a(i8,"dropAttribute");function o8(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(o8,"dropAttributeFromGlobal");async function a8(e){tc(e);let t=e8()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw pr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sr.BAD_REQUEST,void 0,void 0,!0);return await xi.createAttribute(e),zf.signalSchemaChange(new Jf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(a8,"createAttribute");function c8(e){return xi.getBackup(e)}a(c8,"getBackup")});var NM=T((lTe,OM)=>{"use strict";var{OPERATIONS_ENUM:u8}=R(),hg=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=u8.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};OM.exports=hg});var mg=T((fTe,CM)=>{"use strict";var l8=as(),dTe=NM(),Zf=G(),eE=R(),_8=j(),{handleHDBError:bM,hdb_errors:d8}=Z(),{HDB_ERROR_MSGS:yM,HTTP_STATUS_CODES:IM}=d8,f8=Object.values(eE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),wM="To use this operation audit log must be enabled in harperdb-config.yaml";CM.exports=E8;async function E8(e){if(Zf.isEmpty(e.schema))throw new Error(yM.SCHEMA_REQUIRED_ERR);if(Zf.isEmpty(e.table))throw new Error(yM.TABLE_REQUIRED_ERR);if(!_8.get(eE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw bM(new Error,wM,IM.BAD_REQUEST,eE.LOG_LEVELS.ERROR,wM,!0);let t=Zf.checkSchemaTableExist(e.schema,e.table);if(t)throw bM(new Error,t,IM.NOT_FOUND,eE.LOG_LEVELS.ERROR,t,!0);if(!Zf.isEmpty(e.search_type)&&f8.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await l8.readAuditLog(e)}a(E8,"readAuditLog")});var DM=T((hTe,LM)=>{"use strict";var{OPERATIONS_ENUM:h8}=R(),pg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=h8.GET_BACKUP,this.schema=t,this.table=r}};LM.exports=pg});var UM=T((TTe,MM)=>{"use strict";var m8=as(),pTe=DM(),Sg=G(),p8=R(),STe=j(),{handleHDBError:S8,hdb_errors:T8}=Z(),{HDB_ERROR_MSGS:PM,HTTP_STATUS_CODES:g8}=T8;MM.exports=R8;async function R8(e){if(Sg.isEmpty(e.schema))throw new Error(PM.SCHEMA_REQUIRED_ERR);if(Sg.isEmpty(e.table))throw new Error(PM.TABLE_REQUIRED_ERR);let t=Sg.checkSchemaTableExist(e.schema,e.table);if(t)throw S8(new Error,t,g8.NOT_FOUND,p8.LOG_LEVELS.ERROR,t,!0);return await m8.getBackup(read_audit_log_object)}a(R8,"getBackup")});var FM=T((RTe,GM)=>{var ki=require("validate.js"),BM=Ve(),rc=R(),{handleHDBError:A8,hdb_errors:O8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:N8}=O8,Tg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),b8={STRUCTURE_USER:"structure_user"},vM=Object.values(rc.ROLE_TYPES_ENUM),y8="attribute_permissions",I8="attribute_name",{PERMS_CRUD_ENUM:sc}=rc,w8=[y8,...Object.values(sc)],HM=[sc.READ,sc.INSERT,sc.UPDATE],C8=[I8,...HM];function L8(e){let t=Tg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,qM(e,t)}a(L8,"addRoleValidation");function D8(e){let t=Tg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,qM(e,t)}a(D8,"alterRoleValidation");function P8(e){let t=Tg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,BM.validateObject(e,t)}a(P8,"dropRoleValidation");var M8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function qM(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)M8.includes(s[o])||n.push(s[o]);n.length>0&&_t(nt.INVALID_ROLE_JSON_KEYS(n),r);let i=BM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=U8(e);o&&_t(o,r),vM.forEach(c=>{e.permission[c]&&!ki.isBoolean(e.permission[c])&&_t(nt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(vM.indexOf(o)<0){if(o===b8.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]||_t(nt.SCHEMA_NOT_FOUND(d),r)}continue}_t(nt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_t(nt.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]){_t(nt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{w8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(sc).forEach(l=>{ki.isDefined(_[l])?ki.isBoolean(_[l])||_t(nt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):_t(nt.TABLE_PERM_MISSING(l),r,o,u)}),ki.isDefined(_.attribute_permissions)){if(!ki.isArray(_.attribute_permissions)){_t(nt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{_t(nt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!C8.includes(m)&&m!==sc.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(m),r,o,u)}),!ki.isDefined(E.attribute_name)){_t(nt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){_t(nt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}HM.forEach(m=>{ki.isDefined(E[m])?ki.isBoolean(E[m])||_t(nt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,u):_t(nt.ATTR_PERM_MISSING(m,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;_t(nt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return v8(r)}a(qM,"customValidate");GM.exports={addRoleValidation:L8,alterRoleValidation:D8,dropRoleValidation:P8};function U8(e){let{operation:t,permission:r}=e;if(t===rc.OPERATIONS_ENUM.ADD_ROLE||t===rc.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return nt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?rc.ROLE_TYPES_ENUM.SUPER_USER:rc.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(U8,"validateNoSUPerms");function v8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:nt.ROLE_PERMS_ERROR,...e};return A8(new Error,s,N8.BAD_REQUEST)}else return null}a(v8,"generateRolePermResponse");function _t(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(_t,"addPermError")});var sE=T((OTe,VM)=>{"use strict";var xM=dr(),kM=_r(),B8=Uo(),Rg=FM(),Ag=Vn(),H8=require("uuid").v4,q8=require("util"),tE=R(),G8=G(),Og=kM.searchByValue,F8=kM.searchByHash,x8=q8.promisify(B8.delete),k8=vs(),$8=va(),{hdb_errors:V8,handleHDBError:nc}=Z(),{HDB_ERROR_MSGS:$M,HTTP_STATUS_CODES:rE}=V8,{UserEventMsg:Ng}=Us();VM.exports={addRole:Y8,alterRole:K8,dropRole:W8,listRoles:Q8};function gg(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(gg,"scrubRoleDetails");async function Y8(e){let t=Rg.addRoleValidation(e);if(t)throw t;e=gg(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Og(r)||[])}catch(i){throw nc(i)}if(s&&s.length>0)throw nc(new Error,$M.ROLE_ALREADY_EXISTS(e.role),rE.CONFLICT,void 0,void 0,!0);e.id||(e.id=H8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await xM.insert(n),Ag.signalUserChange(new Ng(process.pid)),e=gg(e),e}a(Y8,"addRole");async function K8(e){let t=Rg.alterRoleValidation(e);if(t)throw t;e=gg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await xM.update(r)}catch(n){throw nc(n)}if(s&&s?.message==="updated 0 of 1 records")throw nc(new Error,"Invalid role id",rE.BAD_REQUEST,void 0,void 0,!0);return await Ag.signalUserChange(new Ng(process.pid)),e}a(K8,"alterRole");async function W8(e){let t=Rg.dropRoleValidation(e);if(t)throw nc(new Error,t,rE.BAD_REQUEST,void 0,void 0,!0);let r=new $8(tE.SYSTEM_SCHEMA_NAME,tE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await F8(r));if(s.length===0)throw nc(new Error,$M.ROLE_NOT_FOUND,rE.NOT_FOUND,void 0,void 0,!0);let n=new k8(tE.SYSTEM_SCHEMA_NAME,tE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Og(n)),o=!1;if(G8.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await x8(c),Ag.signalUserChange(new Ng(process.pid)),`${s[0].role} successfully deleted`}a(W8,"dropRole");async function Q8(){return Og({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Q8,"listRoles")});var QM=T((bTe,WM)=>{"use strict";var j8=j(),$i=require("joi"),z8=Ve(),YM=require("moment"),J8=require("fs-extra"),bg=require("path"),X8=require("lodash"),Tl=R(),{LOG_LEVELS:$o}=R(),Z8="YYYY-MM-DD hh:mm:ss",e6=bg.resolve(__dirname,"../logs");WM.exports=function(e){return z8.validateBySchema(e,t6)};var t6=$i.object({from:$i.custom(KM),until:$i.custom(KM),level:$i.valid($o.NOTIFY,$o.FATAL,$o.ERROR,$o.WARN,$o.INFO,$o.DEBUG,$o.TRACE),order:$i.valid("asc","desc"),limit:$i.number().min(1),start:$i.number().min(0),log_name:$i.custom(r6)});function KM(e,t){if(YM(e,YM.ISO_8601).format(Z8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(KM,"validateDatetime");function r6(e,t){if(X8.invert(Tl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=j8.get(Tl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Tl.LOG_NAMES.HDB:e,i=n===Tl.LOG_NAMES.INSTALL?bg.join(e6,Tl.LOG_NAMES.INSTALL):bg.join(s,n);return J8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(r6,"validateReadLogPath")});var Ig=T((ITe,zM)=>{"use strict";var nE=R(),s6=v(),n6=j(),i6=QM(),yg=require("path"),jM=require("fs-extra"),{once:o6}=require("events"),{handleHDBError:a6,hdb_errors:c6}=Z(),{PACKAGE_ROOT:u6}=R(),l6=yg.join(u6,"logs"),_6=1e3,d6=200;zM.exports=f6;async function f6(e){let t=i6(e);if(t)throw a6(t,t.message,c6.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=n6.get(nE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?nE.LOG_NAMES.HDB:e.log_name,n=s===nE.LOG_NAMES.INSTALL?yg.join(l6,nE.LOG_NAMES.INSTALL):yg.join(r,s),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?_6:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!u&&!l&&(m=Math.max(jM.statSync(n).size-(h+5)*d6,0));let S=jM.createReadStream(n,{start:m});S.on("error",F=>{s6.error(F)});let A=0,g=[],N="",V;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){V&&(V.message=F.slice(K,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Vt=ie[0],Ge=ie[1];ie.splice(0,2),V={timestamp:se,thread:Vt,level:Ge,tags:ie,message:""},K=B.index+k.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||V&&(V.message=N.trim(),$(V))}),S.resume();function $(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Vi(F,f,g),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Vi(F,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(Vi(F,f,g),A++,A===h&&S.destroy())}}return a($,"onLogMessage"),await o6(S,"close"),g}a(f6,"readLog");function Vi(e,t,r){t==="desc"?E6(e,r):t==="asc"?h6(e,r):r.push(e)}a(Vi,"pushLineToResult");function E6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(E6,"insertDescending");function h6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(h6,"insertAscending")});var oE=T((PTe,eU)=>{"use strict";var wg=require("joi"),{string:iE,boolean:JM,date:m6}=wg.types(),p6=Ve(),{validateSchemaExists:CTe,validateTableExists:LTe,validateSchemaName:DTe}=cn(),S6=R(),T6=ke(),XM=j();XM.initSync();var g6=iE.invalid(XM.get(S6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(T6.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(),ZM={operation:iE.valid("add_node","update_node"),node_name:g6,subscriptions:wg.array().items({table:iE.optional(),schema:iE.required(),subscribe:JM.required(),publish:JM.required().custom(A6),start_time:m6.iso()}).min(1).required()};function R6(e){return p6.validateBySchema(e,wg.object(ZM))}a(R6,"addUpdateNodeValidator");function A6(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(A6,"checkForFalsy");eU.exports={addUpdateNodeValidator:R6,validation_schema:ZM}});var rU=T((UTe,tU)=>{var O6=Ve(),N6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};tU.exports=function(e){return O6.validateObject(e,N6)}});var aE=T((vTe,sU)=>{"use strict";var b6=R().OPERATIONS_ENUM,Cg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=b6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};sU.exports=Cg});var iU=T((HTe,nU)=>{"use strict";var y6={OPERATION:"operation",REFRESH:"refresh"},Lg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Dg=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};nU.exports={JWTTokens:Lg,TOKEN_TYPE_ENUM:y6,JWTRSAKeys:Dg}});var Al=T((GTe,uU)=>{"use strict";var Rl=require("jsonwebtoken"),Pg=require("fs-extra"),Mg=G(),ds=R(),{handleHDBError:Tr,hdb_errors:I6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=I6,gl=v(),oU=of(),Bg=Er(),w6=dr().update,C6=aE(),L6=Vn(),{UserEventMsg:D6}=Us(),Yi=j();Yi.initSync();var Ug=require("path"),{JWTTokens:P6,JWTRSAKeys:M6,TOKEN_TYPE_ENUM:cE}=iU(),U6=Yi.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Yi.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",v6=Yi.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Yi.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",uE="RS256",vg;uU.exports={createTokens:B6,validateOperationToken:q6,refreshOperationToken:H6,validateRefreshToken:cU};async function B6(e){if(Mg.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(Mg.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(Mg.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Bg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw gl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await lE(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await aU(i,r.private_key,r.passphrase),c=await Rl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:v6,algorithm:uE,subject:cE.REFRESH}),u=oU.hash(c),_=new C6(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await w6(_)}catch(f){gl.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Tr(new Error,Rr.REFRESH_TOKEN_SAVE_FAILED,gr.INTERNAL_SERVER_ERROR);return L6.signalUserChange(new D6(process.pid)),new P6(o,c)}a(B6,"createTokens");async function aU(e,t,r){return await Rl.sign(e,{key:t,passphrase:r},{expiresIn:U6,algorithm:uE,subject:cE.OPERATION})}a(aU,"signOperationToken");async function lE(){if(vg===void 0)try{let e=Ug.join(Yi.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ug.join(Yi.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ug.join(Yi.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pg.readFile(e)).toString(),n=(await Pg.readFile(t)).toString(),i=(await Pg.readFile(r)).toString();vg=new M6(i,n,s)}catch(e){throw gl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return vg}a(lE,"getJWTRSAKeys");async function H6(e){if(!e)throw Tr(new Error,Rr.INVALID_BODY,gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Tr(new Error,Rr.REFRESH_TOKEN_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);await cU(e.refresh_token);let t=await lE(),r=await Rl.decode(e.refresh_token);return{operation_token:await aU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(H6,"refreshOperationToken");async function q6(e){try{let t=await lE(),r=await Rl.verify(e,t.public_key,{algorithms:uE,subject:cE.OPERATION});return await Bg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw gl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(q6,"validateOperationToken");async function cU(e){let t;try{let r=await lE(),s=await Rl.verify(e,r.public_key,{algorithms:uE,subject:cE.REFRESH});t=await Bg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw gl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!oU.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(cU,"validateRefreshToken")});var Hg=T((kTe,dU)=>{"use strict";var G6=rU(),ic=require("passport"),F6=require("passport-local").Strategy,x6=require("passport-http").BasicStrategy,k6=require("util"),$6=Er(),_U=k6.callbackify($6.findAndValidateUser),xTe=Mr(),V6=R(),lU=Al();ic.use(new F6(function(e,t,r){_U(e,t,r)}));ic.use(new x6(function(e,t,r){_U(e,t,r)}));ic.serializeUser(function(e,t){t(null,e)});ic.deserializeUser(function(e,t){t(null,e)});function Y6(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":ic.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===V6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?lU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):lU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ic.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(Y6,"authorize");function K6(e,t){let r=G6(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(K6,"checkPermissions");dU.exports={authorize:Y6,checkPermissions:K6}});var oc=T((VTe,fU)=>{"use strict";var qg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Gg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};fU.exports={Node:qg,NodeSubscription:Gg}});var hU=T((KTe,EU)=>{"use strict";var W6=R().OPERATIONS_ENUM,Fg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=W6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};EU.exports=Fg});var Ol=T((QTe,mU)=>{"use strict";var xg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},kg=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};mU.exports={RemotePayloadObject:xg,RemotePayloadSubscription:kg}});var SU=T((zTe,pU)=>{"use strict";var $g=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};pU.exports=$g});var RU=T((tge,gU)=>{"use strict";var Q6=SU(),XTe=Ke(),TU=Me(),j6=v(),{getSchemaPath:ZTe,getTransactionAuditStorePath:ege}=He(),{getDatabases:z6}=(fe(),te(De));gU.exports=J6;async function J6(e){let t=new Q6;try{let r=z6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await TU.environmentDataSize(schema_path,e.name),o=await TU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){j6.warn(`unable to stat table dbi due to ${r}`)}return t}a(J6,"lmdbGetTableSize")});var OU=T((sge,AU)=>{"use strict";var Vg=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};AU.exports=Vg});var Jn=T((age,IU)=>{"use strict";var X6=require("fs-extra"),Z6=require("path"),Jt=require("systeminformation"),Ki=v(),e9=st(),Yg=ke(),dE=R(),t9=RU(),yU=Mi(),{getThreadInfo:NU}=Qe(),tR=j();tR.initSync();var r9=OU(),{openEnvironment:ige}=Me(),{getSchemaPath:oge}=He(),{database:s9}=(fe(),te(De)),_E;IU.exports={getHDBProcessInfo:jg,getNetworkInfo:Jg,getDiskInfo:zg,getMemoryInfo:Qg,getCPUInfo:Wg,getTimeInfo:Kg,getSystemInformation:Xg,systemInformation:n9,getTableSize:Zg,getMetrics:eR};function Kg(){return Jt.time()}a(Kg,"getTimeInfo");async function Wg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...g}=await Jt.currentLoad();return g.cpus=[],A.forEach(N=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...k}=N;g.cpus.push(k)}),l.current_load=g,l}catch(e){return Ki.error(`error in getCPUInfo: ${e}`),{}}}a(Wg,"getCPUInfo");async function Qg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ki.error(`error in getMemoryInfo: ${e}`),{}}}a(Qg,"getMemoryInfo");async function jg(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await X6.readFile(Z6.join(tR.get(dE.CONFIG_PARAMS.ROOTPATH),dE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===dE.NODE_ERROR_CODES.ENOENT)Ki.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Ki.error(`error in getHDBProcessInfo: ${t}`),e}}a(jg,"getHDBProcessInfo");async function zg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Ki.error(`error in getDiskInfo: ${t}`),e}}a(zg,"getDiskInfo");async function Jg(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Ki.error(`error in getNetworkInfo: ${t}`),e}}a(Jg,"getNetworkInfo");async function Xg(){if(_E!==void 0)return _E;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,_E=e,_E}catch(t){return Ki.error(`error in getSystemInformation: ${t}`),e}}a(Xg,"getSystemInformation");async function Zg(){let e=[],t=await yU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await t9(s));return e}a(Zg,"getTableSize");async function eR(){let e=await yU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=s9({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Ki.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(eR,"getMetrics");async function bU(){if(tR.get(dE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await e9.getNATSReferences(),r=await t.streams.info(Yg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Yg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Yg.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(bU,"getNatsStreamInfo");async function n9(e){let t=new r9;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Xg(),t.time=Kg(),t.cpu=await Wg(),t.memory=await Qg(),t.disk=await zg(),t.network=await Jg(),t.harperdb_processes=await jg(),t.table_size=await Zg(),t.metrics=await eR(),t.threads=await NU(),t.replication=await bU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Xg();break;case"time":t.time=Kg();break;case"cpu":t.cpu=await Wg();break;case"memory":t.memory=await Qg();break;case"disk":t.disk=await zg();break;case"network":t.network=await Jg();break;case"harperdb_processes":t.harperdb_processes=await jg();break;case"table_size":t.table_size=await Zg();break;case"database_metrics":case"metrics":t.metrics=await eR();break;case"threads":t.threads=await NU();break;case"replication":t.replication=await bU();break;default:break}return t}a(n9,"systemInformation")});var Xn=T((_ge,DU)=>{"use strict";var i9=dr(),rR=G(),o9=require("util"),Vo=R(),wU=j();wU.initSync();var a9=Hg(),CU=_r(),{Node:uge,NodeSubscription:lge}=oc(),c9=va(),u9=hU(),{RemotePayloadObject:l9,RemotePayloadSubscription:_9}=Ol(),{handleHDBError:d9,hdb_errors:f9}=Z(),{HTTP_STATUS_CODES:E9,HDB_ERROR_MSGS:h9}=f9,m9=vs(),p9=Jn(),S9=po(),{getDatabases:T9}=(fe(),te(De)),g9=o9.promisify(a9.authorize),R9=CU.searchByHash,A9=CU.searchByValue;DU.exports={authHeaderToUser:O9,isEmpty:N9,getNodeRecord:b9,upsertNodeRecord:y9,buildNodePayloads:I9,checkClusteringEnabled:w9,getAllNodeRecords:C9,getSystemInfo:L9,reverseSubscription:LU};async function O9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await g9(t,null),e}a(O9,"authHeaderToUser");function N9(e){return e==null}a(N9,"isEmpty");async function b9(e){let t=new c9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return R9(t)}a(b9,"getNodeRecord");async function y9(e){let t=new u9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return i9.upsert(t)}a(y9,"upsertNodeRecord");function LU(e){if(rR.isEmpty(e.subscribe)||rR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(LU,"reverseSubscription");function I9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=rR.getTableHashAttribute(u,_),{subscribe:d,publish:f}=LU(c),E=T9()[u]?.[_],h=new _9(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new l9(r,t,n,s)}a(I9,"buildNodePayloads");function w9(){if(!wU.get(Vo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw d9(new Error,h9.CLUSTERING_NOT_ENABLED,E9.BAD_REQUEST,void 0,void 0,!0)}a(w9,"checkClusteringEnabled");async function C9(){let e=new m9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await A9(e))}a(C9,"getAllNodeRecords");async function L9(){let e=await p9.getSystemInformation();return{hdb_version:S9.version(),node_version:e.node_version,platform:e.platform}}a(L9,"getSystemInfo")});var sR=T((fge,GU)=>{"use strict";var fE=st(),PU=G(),MU=ke(),UU=R(),EE=v(),vU=Xf(),D9=Hu(),{RemotePayloadObject:P9}=Ol(),{handleHDBError:BU,hdb_errors:M9}=Z(),{HTTP_STATUS_CODES:HU}=M9,{NodeSubscription:qU}=oc();GU.exports=U9;async function U9(e,t){let r;try{r=await fE.request(`${t}.${MU.REQUEST_SUFFIX}`,new P9(UU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),EE.trace("Response from remote describe all request:",r)}catch(o){EE.error(`addNode received error from describe all request to remote node: ${o}`);let c=fE.requestErrorHandler(o,"add_node",t);throw BU(new Error,c,HU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===MU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw BU(new Error,o,HU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===UU.SYSTEM_SCHEMA_NAME){await fE.createLocalTableStream(c,u);let h=new qU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=PU.doesSchemaExist(c),l=s[c]!==void 0,d=u?PU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(EE.trace(`addNode creating schema: ${c}`),await vU.createSchema({operation:"create_schema",schema:c})),!d&&f){EE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new D9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await vU.createTable(h)}await fE.createLocalTableStream(c,u);let E=new qU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(U9,"reviewSubscriptions")});var yl=T((hge,kU)=>{"use strict";var{handleHDBError:hE,hdb_errors:v9}=Z(),{HTTP_STATUS_CODES:mE}=v9,{addUpdateNodeValidator:B9}=oE(),Nl=v(),xU=R(),FU=ke(),H9=G(),nR=st(),bl=Xn(),q9=j(),G9=sR(),{Node:F9,NodeSubscription:x9}=oc(),{broadcast:k9}=Qe(),$9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",V9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",Y9=q9.get(xU.CONFIG_PARAMS.CLUSTERING_NODENAME);kU.exports=K9;async function K9(e,t=!1){Nl.trace("addNode called with:",e),bl.checkClusteringEnabled();let r=B9(e);if(r)throw hE(r,r.message,mE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await bl.getNodeRecord(s);if(!H9.isEmptyOrZeroLength(d))throw hE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,mE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await G9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=$9,o;let c=bl.buildNodePayloads(n,Y9,xU.OPERATIONS_ENUM.ADD_NODE,await bl.getSystemInfo());Nl.trace("addNode sending remote payload:",c);let u;try{u=await nR.request(`${s}.${FU.REQUEST_SUFFIX}`,c)}catch(d){Nl.error(`addNode received error from request: ${d}`);let f=nR.requestErrorHandler(d,"add_node",s);throw hE(new Error,f,mE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===FU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw hE(new Error,d,mE.INTERNAL_SERVER_ERROR,"error",d)}Nl.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Nl.trace("Add node updating work stream for node:",s,"subscriptions:",E),await nR.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new x9(E.schema,E.table,E.publish,E.subscribe))}let l=new F9(s,_,u.system_info);return await bl.upsertNodeRecord(l),k9({type:"nats_update"}),i.length>0?o.message=V9:o.message=`Successfully added '${s}' to manifest`,o}a(K9,"addNode")});var oR=T((pge,YU)=>{"use strict";var{handleHDBError:pE,hdb_errors:W9}=Z(),{HTTP_STATUS_CODES:SE}=W9,{addUpdateNodeValidator:Q9}=oE(),Il=v(),VU=R(),$U=ke(),j9=G(),iR=st(),wl=Xn(),z9=j(),{cloneDeep:J9}=require("lodash"),X9=sR(),{NodeSubscription:Z9}=oc(),{broadcast:e7}=Qe(),t7="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",r7="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",s7=z9.get(VU.CONFIG_PARAMS.CLUSTERING_NODENAME);YU.exports=n7;async function n7(e){Il.trace("updateNode called with:",e),wl.checkClusteringEnabled();let t=Q9(e);if(t)throw pE(t,t.message,SE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=J9(await wl.getNodeRecord(r));if(j9.isEmptyOrZeroLength(s))throw pE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,SE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await X9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=t7,o;let c=wl.buildNodePayloads(n,s7,VU.OPERATIONS_ENUM.UPDATE_NODE,await wl.getSystemInfo());Il.trace("updateNode sending remote payload:",c);let u;try{u=await iR.request(`${r}.${$U.REQUEST_SUFFIX}`,c)}catch(_){Il.error(`updateNode received error from request: ${_}`);let l=iR.requestErrorHandler(_,"update_node",r);throw pE(new Error,l,SE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===$U.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw pE(new Error,_,SE.INTERNAL_SERVER_ERROR,"error",_)}Il.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];Il.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await iR.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await i7(s[0],n,u.system_info),i.length>0?o.message=r7:o.message=`Successfully updated '${r}'`,o}a(n7,"updateNode");async function i7(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new Z9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await wl.upsertNodeRecord(s),e7({type:"nats_update"})}a(i7,"updateNodeTable")});var zU=T((Tge,jU)=>{"use strict";var QU=require("joi"),{string:KU}=QU.types(),o7=Ve(),WU=R(),a7=j(),c7=ke();jU.exports=u7;function u7(e){let t=KU.invalid(a7.get(WU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(c7.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=QU.object({operation:KU.valid(WU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return o7.validateBySchema(e,r)}a(u7,"removeNodeValidator")});var gE=T((Rge,rv)=>{"use strict";var{handleHDBError:JU,hdb_errors:l7}=Z(),{HTTP_STATUS_CODES:XU}=l7,_7=zU(),Cl=v(),ZU=Xn(),d7=G(),TE=R(),ev=ke(),tv=st(),f7=j(),{RemotePayloadObject:E7}=Ol(),{NodeSubscription:h7}=oc(),m7=Bu(),p7=Uo(),{broadcast:S7}=Qe(),T7=f7.get(TE.CONFIG_PARAMS.CLUSTERING_NODENAME);rv.exports=g7;async function g7(e){Cl.trace("removeNode called with:",e),ZU.checkClusteringEnabled();let t=_7(e);if(t)throw JU(t,t.message,XU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await ZU.getNodeRecord(r);if(d7.isEmptyOrZeroLength(s))throw JU(new Error,`Node '${r}' was not found.`,XU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new E7(TE.OPERATIONS_ENUM.REMOVE_NODE,T7,[]),i,o=!1;try{i=await tv.request(`${r}.${ev.REQUEST_SUFFIX}`,n),Cl.trace("Remove node reply from remote node:",r,i)}catch(u){Cl.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Cl.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new h7(l.schema,l.table,!1,!1);await tv.updateWorkStream(d,r)}let c=new m7(TE.SYSTEM_SCHEMA_NAME,TE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await p7.deleteRecord(c),S7({type:"nats_update"}),i?.status===ev.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Cl.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(g7,"removeNode")});var iv=T((Oge,nv)=>{"use strict";var sv=require("joi"),{string:R7,array:A7}=sv.types(),O7=Ve(),N7=oE();nv.exports=b7;function b7(e){let t=sv.object({operation:R7.valid("configure_cluster").required(),connections:A7.items(N7.validation_schema).required()});return O7.validateBySchema(e,t)}a(b7,"configureClusterValidator")});var AE=T((bge,lv)=>{"use strict";var y7=R(),RE=v(),I7=G(),w7=gE(),C7=yl(),ov=Xn(),L7=iv(),{handleHDBError:av,hdb_errors:D7}=Z(),{HTTP_STATUS_CODES:cv}=D7,P7="Configure cluster complete.",M7="Failed to configure the cluster. Check the logs for more details.",U7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";lv.exports=v7;async function v7(e){RE.trace("configure cluster called with:",e),ov.checkClusteringEnabled();let t=L7(e);if(t)throw av(t,t.message,cv.BAD_REQUEST,void 0,void 0,!0);let r=await ov.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(uv(w7,{operation:y7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);RE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(uv(C7,E,E.node_name))}let c=await Promise.allSettled(i);RE.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(RE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(I7.isEmptyOrZeroLength(u))return{message:P7,connections:_};if(l)return{message:U7,failed_nodes:u,connections:_};throw av(new Error,M7,cv.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(v7,"configureCluster");async function uv(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(uv,"functionWrapper")});var dv=T((Ige,_v)=>{"use strict";var OE=require("joi"),B7=Ve(),{validateSchemaExists:H7,validateTableExists:q7,validateSchemaName:G7}=cn(),F7=OE.object({operation:OE.string().valid("purge_stream"),schema:OE.string().custom(H7).custom(G7).required(),table:OE.string().custom(q7).required()});function x7(e){return B7.validateBySchema(e,F7)}a(x7,"purgeStreamValidator");_v.exports=x7});var aR=T((Cge,fv)=>{"use strict";var{handleHDBError:k7,hdb_errors:$7}=Z(),{HTTP_STATUS_CODES:V7}=$7,Y7=dv(),K7=st(),W7=Xn();fv.exports=Q7;async function Q7(e){let t=Y7(e);if(t)throw k7(t,t.message,V7.BAD_REQUEST,void 0,void 0,!0);W7.checkClusteringEnabled();let{schema:r,table:s}=e;return await K7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(Q7,"purgeStream")});var bE=T((Dge,Tv)=>{"use strict";var uR=Xn(),j7=st(),mv=j(),NE=R(),Yo=ke(),z7=G(),cR=v(),{RemotePayloadObject:J7}=Ol(),{ErrorCode:Ev}=require("nats"),hv=mv.get(NE.CONFIG_PARAMS.CLUSTERING_ENABLED),pv=mv.get(NE.CONFIG_PARAMS.CLUSTERING_NODENAME);Tv.exports={clusterStatus:X7,buildNodeStatus:Sv};async function X7(){let e={node_name:pv,is_enabled:hv,connections:[]};if(!hv)return e;let t=await uR.getAllNodeRecords();if(z7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(Sv(t[s],e.connections));return await Promise.allSettled(r),e}a(X7,"clusterStatus");async function Sv(e,t){let r=e.name,s=new J7(NE.OPERATIONS_ENUM.CLUSTER_STATUS,pv,void 0,await uR.getSystemInfo()),n,i,o=Yo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await j7.request(Yo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Yo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Yo.CLUSTER_STATUS_STATUSES.CLOSED,cR.error(`Error getting node status from ${r} `,n))}catch(u){cR.warn(`Error getting node status from ${r}`,u),u.code===Ev.NoResponders?o=Yo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===Ev.Timeout?o=Yo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Yo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new Z7(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==NE.PRE_4_0_0_VERSION&&await uR.upsertNodeRecord(u)}catch(u){cR.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(Sv,"buildNodeStatus");function Z7(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(Z7,"NodeStatusObject")});var IE=T((Mge,gv)=>{"use strict";var{handleHDBError:eee,hdb_errors:tee}=Z(),{HTTP_STATUS_CODES:ree}=tee,see=st(),nee=Xn(),lR=G(),yE=require("joi"),iee=Ve(),oee=2e3,aee=yE.object({timeout:yE.number().min(1),connected_nodes:yE.boolean(),routes:yE.boolean()});gv.exports=cee;async function cee(e){nee.checkClusteringEnabled();let t=iee.validateBySchema(e,aee);if(t)throw eee(t,t.message,ree.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||lR.autoCastBoolean(s),o=n===void 0||lR.autoCastBoolean(n),c={nodes:[]},u=await see.getServerList(r??oee),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:lR.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(cee,"clusterNetwork")});var Nv=T((vge,Ov)=>{"use strict";var _R=require("joi"),Rv=Ve(),{route_constraints:Av}=dT();Ov.exports={setRoutesValidator:uee,deleteRoutesValidator:lee};function uee(e){let t=_R.object({server:_R.valid("hub","leaf").required(),routes:Av.required()});return Rv.validateBySchema(e,t)}a(uee,"setRoutesValidator");function lee(e){let t=_R.object({routes:Av.required()});return Rv.validateBySchema(e,t)}a(lee,"deleteRoutesValidator")});var CE=T((Hge,wv)=>{"use strict";var Ko=rt(),dR=G(),wE=R(),bv=Nv(),{handleHDBError:yv,hdb_errors:_ee}=Z(),{HTTP_STATUS_CODES:Iv}=_ee,dee="cluster routes successfully set",fee="cluster routes successfully deleted";wv.exports={setRoutes:Eee,getRoutes:hee,deleteRoutes:mee};function Eee(e){let t=bv.setRoutesValidator(e);if(t)throw yv(t,t.message,Iv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=dR.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Ko.updateConfigValue(wE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ko.updateConfigValue(wE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:dee,set:o,skipped:i}}a(Eee,"setRoutes");function hee(){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(hee,"getRoutes");function mee(e){let t=bv.deleteRoutesValidator(e);if(t)throw yv(t,t.message,Iv.BAD_REQUEST,void 0,void 0,!0);let r=Ko.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let m=s[E];if(d.host===m.host&&d.port===m.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=n.length;h<m;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=dR.isEmptyOrZeroLength(s)?null:s,Ko.updateConfigValue(wE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=dR.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(wE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:fee,deleted:i,skipped:o}}a(mee,"deleteRoutes")});var Lv=T((Gge,Cv)=>{"use strict";var Ll=require("alasql"),Wo=require("recursive-iterator"),Ys=v(),pee=G(),Dl=R(),fR=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,Tee(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(n=>Dl.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Dl.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Dl.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=See(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(_=>!Dl.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Ll.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function See(e){return e.filter(t=>t[Dl.PERMS_CRUD_ENUM.READ])}a(See,"filterReadRestrictedAttrs");function Tee(e,t,r,s,n){gee(e,t,r,s,n)}a(Tee,"interpretAST");function Pl(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Pl,"addSchemaTableToMap");function gee(e,t,r,s,n){if(!e){Ys.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Ll.yy.Insert?Nee(e,t,r):e instanceof Ll.yy.Select?Ree(e,t,r,s,n):e instanceof Ll.yy.Update?Aee(e,t,r):e instanceof Ll.yy.Delete?Oee(e,t,r):Ys.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(gee,"getRecordAttributesAST");function Ree(e,t,r,s,n){if(!e){Ys.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(pee.isEmptyOrZeroLength(i)){Ys.error("No schema specified");return}e.from.forEach(c=>{Pl(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Pl(c.table,t,r,s,n)});let o=new Wo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ys.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 Wo(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{Ys.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 Wo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ys.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 Wo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ys.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(Ree,"getSelectAttributes");function Aee(e,t,r){if(!e){Ys.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.table.databaseid;Pl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.table.tableid,n,i.columnid,t,r)}a(Aee,"getUpdateAttributes");function Oee(e,t,r){if(!e){Ys.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Wo(e.where),n=e.table.databaseid;Pl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.table.tableid,n,i.columnid,t,r)}a(Oee,"getDeleteAttributes");function Nee(e,t,r){if(!e){Ys.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.into.databaseid;Pl(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&ER(e.into.tableid,n,i.columnid,t,r)}a(Nee,"getInsertAttributes");function ER(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(ER,"pushAttribute");Cv.exports=fR});var DE=T((xge,Uv)=>{var LE=Wu(),Dv=require("chalk"),Wr=v(),Pv=require("prompt"),{promisify:bee}=require("util"),hR=R(),yee=require("fs-extra"),Iee=require("path"),wee=G(),Cee=po(),Mv=j();Mv.initSync();var Lee=require("moment"),Dee=bee(Pv.get),Pee=Iee.join(Mv.getHdbBasePath(),hR.LICENSE_KEY_DIR_NAME,hR.LICENSE_FILE_NAME,hR.LICENSE_FILE_NAME);Uv.exports={getFingerprint:Uee,setLicense:Mee,parseLicense:mR,register:vee,getRegistrationInfo:Hee};async function Mee(e){if(e&&e.key&&e.company){try{Wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await mR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Wr.error(r),Wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Mee,"setLicense");async function Uee(){let e={};try{e=await LE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wr.error(r),Wr.error(t),new Error(r)}return e}a(Uee,"getFingerprint");async function mR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wr.info("Validating license input...");let r=LE.validateLicense(e,t);if(Wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Wr.info("writing license to disk"),await yee.writeFile(Pee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Wr.error("Failed to write License"),s}return"Registration successful."}a(mR,"parseLicense");async function vee(){let e=await Bee();return mR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(vee,"register");async function Bee(){let e=await LE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Dv.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Dv.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Pv.start()}catch(s){Wr.error(s)}let r;try{r=await Dee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Bee,"promptForRegistration");async function Hee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await LE.getLicense()}catch(r){throw Wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(wee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=Cee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Lee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Hee,"getRegistrationInfo")});var Bv=T(($ge,vv)=>{"use strict";var qee=ke(),pR=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+qee.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};vv.exports=pR});var Gv=T((Yge,qv)=>{"use strict";var Hv=ke(),SR=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+Hv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+Hv.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"}};qv.exports=SR});var xv=T((Wge,Fv)=>{"use strict";var TR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Fv.exports=TR});var $v=T((jge,kv)=>{"use strict";var Gee=ke(),gR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Gee.SERVER_SUFFIX.ADMIN,this.password=r}};kv.exports=gR});var BE=T((Jge,Kv)=>{"use strict";var ac=require("path"),UE=require("fs-extra"),Fee=Bv(),xee=Gv(),kee=xv(),$ee=$v(),RR=Er(),uc=G(),Ar=rt(),ME=R(),Ml=ke(),{CONFIG_PARAMS:it}=ME,Ul=v(),vl=j(),Vv=Wn(),AR=st(),cc="clustering",Vee=1e4,Yv=5;Kv.exports={generateNatsConfig:Kee,removeNatsConfig:Wee,getHubConfigPath:Yee};function Yee(){let e=vl.get(it.ROOTPATH);return ac.join(e,cc,Ml.NATS_CONFIG_FILES.HUB_SERVER)}a(Yee,"getHubConfigPath");async function Kee(e=!1,t=void 0){vl.initSync();let r=vl.get(it.ROOTPATH),s=ac.join(r,cc,Ml.PID_FILES.HUB),n=ac.join(r,cc,Ml.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ac.join(r,cc,Ml.NATS_CONFIG_FILES.HUB_SERVER),c=ac.join(r,cc,Ml.NATS_CONFIG_FILES.LEAF_SERVER),u=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),_=Ar.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),l=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=Ar.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),f=Ar.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),E=Ar.getConfigFromFile(it.CLUSTERING_NODENAME),h=Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await AR.checkNATSServerInstalled()||vE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await RR.listUsers(),S=Ar.getConfigFromFile(it.CLUSTERING_USER),A=await RR.getClusterUser();(uc.isEmpty(A)||A.active!==!0)&&vE(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await PE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await PE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await PE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await PE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],N=[];for(let[k,se]of m.entries())se.role.role===ME.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new $ee(se.username,Vv.decrypt(se.hash))),N.push(new kee(se.username,Vv.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!uc.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Fee(Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=uc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===ME.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await UE.writeJson(o,F),Ul.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new xee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],g,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===ME.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await UE.writeJson(c,B),Ul.trace(`Leaf server config written to ${c}`))}a(Kee,"generateNatsConfig");async function PE(e){let t=vl.get(e);return uc.isEmpty(t)&&vE(`port undefined for '${e}'`),await uc.isPortTaken(t)&&vE(`'${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(PE,"isPortAvailable");function vE(e){let t=`Error generating clustering config: ${e}`;Ul.error(t),console.error(t),process.exit(1)}a(vE,"generateNatsConfigError");async function Wee(e){let{port:t,config_file:r}=AR.getServerConfig(e),{username:s,decrypt_hash:n}=await RR.getClusterUser(),i=0,o=2e3;for(;i<Yv;){try{let _=await AR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Ul.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=Yv)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.`);await uc.async_set_timeout(o*(i*2))}let c="0".repeat(Vee),u=ac.join(vl.get(it.ROOTPATH),cc,r);await UE.writeFile(u,c),await UE.remove(u),Ul.notify(e,"started.")}a(Wee,"removeNatsConfig")});var Xv=T((Zge,Jv)=>{"use strict";var Qr=j(),Qee=Wu(),ue=R(),Bl=ke(),Zn=require("path"),{PACKAGE_ROOT:qE}=R(),Wv=j(),HE=G(),lc="/dev/null",jee=Zn.join(qE,"launchServiceScripts"),Qv=Zn.join(qE,"utility/scripts"),zee=Zn.join(Qv,ue.HDB_RESTART_SCRIPT),jv=Zn.resolve(qE,"dependencies",`${process.platform}-${process.arch}`,Bl.NATS_BINARY_NAME);function zv(){let t=Qee.licenseSearch().ram_allocation||ue.RAM_ALLOCATION_ENUM.DEFAULT,r=ue.MEM_SETTING_KEY+t,s={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return HE.noBootFile()&&(s[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=HE.getEnvCliRootPath()),{name:ue.PROCESS_DESCRIPTORS.HDB,script:ue.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:qE}}a(zv,"generateMainServerConfig");var Jee=9930;function Xee(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Bl.NATS_CONFIG_FILES.HUB_SERVER),r=Zn.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Wv.get(ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Bl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Jee?"-"+s:""),script:jv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lc,i.error_file=lc),i}a(Xee,"generateNatsHubServerConfig");var Zee=9940;function ete(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Bl.NATS_CONFIG_FILES.LEAF_SERVER),r=Zn.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Wv.get(ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Bl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Zee?"-"+s:""),script:jv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=lc,i.error_file=lc),i}a(ete,"generateNatsLeafServerConfig");function tte(){Qr.initSync();let e=Zn.join(Qr.get(ue.CONFIG_PARAMS.LOGGING_ROOT),ue.LOG_NAMES.HDB),t={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:jee,autorestart:!1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=lc,t.error_file=lc),t}a(tte,"generateClusteringUpgradeV4ServiceConfig");function rte(){let e={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.RESTART_HDB};return HE.noBootFile()&&(e[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=HE.getEnvCliRootPath()),{...{name:ue.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Qv},script:zee}}a(rte,"generateRestart");function ste(){return{apps:[zv()]}}a(ste,"generateAllServiceConfigs");Jv.exports={generateAllServiceConfigs:ste,generateMainServerConfig:zv,generateRestart:rte,generateNatsHubServerConfig:Xee,generateNatsLeafServerConfig:ete,generateClusteringUpgradeV4ServiceConfig:tte}});var _c=T((rRe,_B)=>{"use strict";var Ne=R(),nte=G(),ei=BE(),Hl=st(),Tn=ke(),Wi=Xv(),GE=j(),Qi=v(),ite=Xn(),{startWorker:Zv,onMessageFromWorkers:ote}=Qe(),ate=Jn(),tRe=require("util"),cte=require("child_process"),ute=require("fs"),{execFile:lte}=cte,Te;_B.exports={enterPM2Mode:_te,start:ji,stop:OR,reload:tB,restart:rB,list:NR,describe:nB,connect:ti,kill:mte,startAllServices:pte,startService:bR,getUniqueServicesList:iB,restartAllServices:Ste,isServiceRegistered:oB,reloadStopStart:aB,restartHdb:sB,deleteProcess:Ete,startClusteringProcesses:uB,startClusteringThreads:lB,isHdbRestartRunning:hte,isClusteringRunning:gte,stopClustering:Tte,reloadClustering:Rte};var ql=!1;ote(e=>{e.type==="restart"&&GE.initSync(!0)});function _te(){ql=!0}a(_te,"enterPM2Mode");function ti(){return Te||(Te=require("pm2")),new Promise((e,t)=>{Te.connect((r,s)=>{Qi.setupConsoleLogging(),r&&t(r),e(s)})})}a(ti,"connect");var Or,dte=10,eB;function ji(e,t=!1){if(ql)return fte(e);let r=lte(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!eB&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<dte&&(ute.existsSync(ei.getHubConfigPath())?ji(e):(await ei.generateNatsConfig(!0),ji(e),await new Promise(c=>setTimeout(c,3e3)),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=GE.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Tn.LOG_LEVELS[f]}if(Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?Qi.OUTPUTS.STDERR:Qi.OUTPUTS.STDOUT;Qi.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Or=[],!Or&&!t){let i=a(()=>{eB=!0,Or&&(Or.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)}Or.push(r)}a(ji,"start");function fte(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.start(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(fte,"startWithPM2");function OR(e){if(!ql){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.stop(e,async(s,n)=>{s&&(Te.disconnect(),r(s)),Te.delete(e,(i,o)=>{i&&(Te.disconnect(),r(s)),Te.disconnect(),t(o)})})})}a(OR,"stop");function tB(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.reload(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(tB,"reload");function rB(e){if(!ql)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.restart(e,(s,n)=>{Te.disconnect(),t(n)})})}a(rB,"restart");function Ete(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.delete(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(Ete,"deleteProcess");async function sB(){await ji(Wi.generateRestart())}a(sB,"restartHdb");async function hte(){let e=await NR();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(hte,"isHdbRestartRunning");function NR(){return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Te.list((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(NR,"list");function nB(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Te.describe(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(nB,"describe");function mte(){if(!ql){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Te.killDaemon((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(mte,"kill");async function pte(){try{await uB(),await lB(),await ji(Wi.generateAllServiceConfigs())}catch(e){throw Te?.disconnect(),e}}a(pte,"startAllServices");async function bR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ne.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Wi.generateMainServerConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Wi.generateNatsIngestServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Wi.generateNatsReplyServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Wi.generateNatsHubServerConfig(),await ji(r,t),await ei.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Wi.generateNatsLeafServerConfig(),await ji(r,t),await ei.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Wi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ji(r)}catch(r){throw Te?.disconnect(),r}}a(bR,"startService");async function iB(){try{let e=await NR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Te?.disconnect(),e}}a(iB,"getUniqueServicesList");async function Ste(e=[]){try{let t=!1,r=await iB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ne.PROCESS_DESCRIPTORS.HDB?t=!0:await rB(o))}t&&await aB(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Te?.disconnect(),t}}a(Ste,"restartAllServices");async function oB(e){if(Or?.find(r=>r.name===e))return!0;let t=await ate.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(oB,"isServiceRegistered");async function aB(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?GE.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):GE.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await nB(e),s=nte.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await OR(e),await bR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await sB():await tB(e)}a(aB,"reloadStopStart");var cB;async function uB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await bR(r,e)}}a(uB,"startClusteringProcesses");async function lB(){cB=Zv(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Hl.createWorkQueueStream(Tn.WORK_QUEUE_CONSUMER_NAMES),await Hl.updateIngestStreamConsumer(),await Hl.updateLocalStreams();let e=await ite.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ne.PRE_4_0_0_VERSION){Qi.info("Starting clustering upgrade 4.0.0 process"),Zv(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(lB,"startClusteringThreads");async function Tte(){for(let e in Ne.CLUSTERING_PROCESSES)if(e!==Ne.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ne.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await cB.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await OR(t)}}a(Tte,"stopClustering");async function gte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await oB(t)===!1)return!1}return!0}a(gte,"isClusteringRunning");async function Rte(){await ei.generateNatsConfig(!0),await Hl.reloadNATSHub(),await Hl.reloadNATSLeaf(),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Rte,"reloadClustering")});var Qo=T((nRe,SB)=>{"use strict";var Ate=require("minimist"),{isMainThread:wR,parentPort:EB}=require("worker_threads"),Xe=R(),{PROCESS_DESCRIPTORS_VALIDATE:Gl}=Xe,gn=v(),CR=G(),FE=BE(),dc=st(),yR=ke(),hB=rt(),Rn=_c(),dB=Jn(),Ote=Eo(),{restartWorkers:xE,onMessageByType:Nte}=Qe(),{handleHDBError:bte,hdb_errors:yte}=Z(),{HTTP_STATUS_CODES:Ite}=yte,kE=j();kE.initSync();var Fl=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,wte="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",fB="Clustering is not enabled so cannot be restarted",Cte="Invalid service",fc,Es;SB.exports={restart:mB,restartService:LR};wR&&Nte(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?LR({service:e.workerType}):mB({operation:"restart"})});async function mB(e){Es=Object.keys(e).length===0,fc=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=Ate(process.argv);if(t.service){await LR(t);return}if(Es&&!fc){console.error(wte);return}if(Es&&console.log(Fl),fc){Rn.enterPM2Mode(),gn.notify(Fl);let r=Ote(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return CR.isEmptyOrZeroLength(Object.keys(r))||hB.updateConfigValue(void 0,void 0,r,!0,!0),Dte(),Fl}return wR?(gn.notify(Fl),setTimeout(()=>{xE()},50)):EB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),Fl}a(mB,"restart");async function LR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw bte(new Error,Cte,Ite.BAD_REQUEST,void 0,void 0,!0);if(fc=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!wR)return EB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Gl.clustering:if(!kE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fB;break}Es&&console.log("Restarting clustering"),gn.notify("Restarting clustering"),await pB();break;case Gl.clustering_config:case Gl["clustering config"]:if(!kE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=fB;break}Es&&console.log("Restarting clustering_config"),gn.notify("Restarting clustering_config"),await Rn.reloadClustering();break;case"custom_functions":case"custom functions":case Gl.harperdb:case Gl.http_workers:if(Es&&!fc){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}Es&&console.log("Restarting http_workers"),gn.notify("Restarting http_workers"),Es?await Rn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{xE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(gn.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(LR,"restartService");async function Lte(){await dc.publishToStream(`${yR.SUBJECT_PREFIXES.TXN}.${yR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,yR.WORK_QUEUE_CONSUMER_NAMES.stream_name,dc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Lte,"postDummyNatsMsg");async function Dte(){await pB(),await Rn.restart(Xe.HDB_PROC_DESCRIPTOR),await CR.async_set_timeout(2e3),kE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await IR(),Es&&(await dc.closeConnection(),process.exit(0))}a(Dte,"restartPM2Mode");async function pB(){if(!hB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await dB.getHDBProcessInfo()).clustering.length===0)gn.trace("Clustering not running, restart will start clustering services"),await FE.generateNatsConfig(!0),await Rn.startClusteringProcesses(),await Rn.startClusteringThreads(),await IR(),Es&&await dc.closeConnection();else{await Lte(),await FE.generateNatsConfig(!0),fc?(gn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await dB.getHDBProcessInfo()).clustering.forEach(n=>{gn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await CR.async_set_timeout(3e3),await IR(),await dc.updateLocalStreams(),Es&&await dc.closeConnection(),gn.trace("Restart clustering restarting ingest and reply service threads");let t=xE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=xE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pB,"restartClustering");async function IR(){await FE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await FE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(IR,"removeNatsConfig")});var CB=T((aRe,wB)=>{"use strict";var oRe=require("lodash"),Nr=R(),{handleHDBError:TB,hdb_errors:Pte}=Z(),{HDB_ERROR_MSGS:Mte,HTTP_STATUS_CODES:Ute}=Pte,DR=v();wB.exports={getRolePermissions:Bte};var jo=Object.create(null),vte=a(e=>({key:e,perms:{}}),"perms_template_obj"),OB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),NB=a((e=!1,t=!1,r=!1,s=!1)=>({[Nr.PERMS_CRUD_ENUM.READ]:e,[Nr.PERMS_CRUD_ENUM.INSERT]:t,[Nr.PERMS_CRUD_ENUM.UPDATE]:r,[Nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),PR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...NB(t,r,s,n)}),"table_perms_template"),gB=a((e,t=NB())=>({attribute_name:e,describe:IB(t),[xl]:t[xl],[MR]:t[MR],[UR]:t[UR]}),"attr_perms_template"),RB=a((e,t=!1)=>({attribute_name:e,describe:t,[xl]:t}),"timestamp_attr_perms_template"),{READ:xl,INSERT:MR,UPDATE:UR}=Nr.PERMS_CRUD_ENUM,bB=Object.values(Nr.PERMS_CRUD_ENUM),yB=[xl,MR,UR];function Bte(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[Nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(jo[t]&&jo[t].key===s)return jo[t].perms;let n=Hte(e,r);return jo[t]?jo[t].key=s:jo[t]=vte(s),jo[t].perms=n,n}catch(r){if(!e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw DR.error(s),DR.debug(r),TB(new Error,Mte.OUTDATED_PERMS_TRANSLATION_ERROR,Ute.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
12
- ${r.stack}`;throw DR.error(s),TB(new Error)}}}a(Bte,"getRolePermissions");function Hte(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Nr.SYSTEM_SCHEMA_NAME]=s[Nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=qte(t[i]);return}r[i]=OB(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=Gte(c,u);r[i].describe||bB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=PR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=PR()})}),r}a(Hte,"translateRolePermissions");function qte(e){let t=OB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=PR(!0,!0,!0,!0,!0)}),t}a(qte,"createStructureUserPermissions");function Gte(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Nr.TIME_STAMP_NAMES.includes(d)&&(f=RB(d,l[xl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=gB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=IB(l),n.attribute_permissions.push(l),c||Fte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=RB(_):l=gB(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=AB(n),n}else return e.describe=AB(e),e}a(Gte,"getTableAttrPerms");function AB(e){return bB.filter(t=>e[t]).length>0}a(AB,"getSchemaTableDescribePerm");function IB(e){return yB.filter(t=>e[t]).length>0}a(IB,"getAttributeDescribePerm");function Fte(e,t){yB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Fte,"checkForHashPerms")});var LB={};Fe(LB,{Headers:()=>zi});var zi,$E=Re(()=>{zi=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var kl={};Fe(kl,{authentication:()=>qB,bypassAuth:()=>Wte,login:()=>jte,logout:()=>zte,start:()=>Qte});function Wte(){HB=!0}async function qB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?Vte?$te:[]:kte?xte:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new zi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return VE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),VE&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(VE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let m=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,m===-1?n.length:m),_=await PB.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,m)=>{let S=new KE.AuthAuditLog(E,h,qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===qt.AUTH_AUDIT_STATUS.SUCCESS?DB.notify(S):DB.error(S)},"authAuditLog"),d;if(s){if(d=zo.get(s),!d){let[E,h]=s.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await Tt.getUser(m,S):null;break;case"Bearer":try{d=await(0,YE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,YE.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return Kte&&(zo.get(h)||(zo.set(h,h),l(m,qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Ji({error:A.message},e)})}zo.set(s,d),Yte&&l(d.username,qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Tt.getUser(_.user,null,!1):HB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,UB.getSuperUser)());VE&&(e.session.update=function(E){if(!u){u=(0,vB.v4)();let m=`${(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",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,PB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),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 f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&wi.loginPath?(f.status=302,f.headers.set("Location",wi.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new zi);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function Qte({server:e,port:t}){e.request(qB,{port:t||"all"}),MB||(MB=!0,setInterval(()=>{zo=new Map},hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),BB.user.addListener(()=>{zo=new Map}))}async function jte(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 zte(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var UB,YE,vB,hs,qt,KE,BB,DB,xte,kte,$te,Vte,PB,VE,HB,Yte,Kte,zo,MB,WE=Re(()=>{UB=D(Er());Pr();lu();YE=D(Al());fe();vB=require("uuid"),hs=D(j()),qt=D(R()),KE=D(v()),BB=D(ju());$E();Ec();DB=(0,KE.loggerWithTag)("auth-event");hs.initSync();xte=hs.get(qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),kte=hs.get(qt.CONFIG_PARAMS.HTTP_CORS),$te=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),Vte=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),PB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),VE=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,HB=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Yte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Kte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,zo=new Map;Tt.onInvalidatedUser(()=>{zo=new Map});a(Wte,"bypassAuth");a(qB,"authentication");a(Qte,"start");a(jte,"login");a(zte,"logout")});var YB=T((mRe,VB)=>{"use strict";var ge=require("joi"),GB=require("fs-extra"),FB=require("path"),si=Ve(),xB=j(),kB=R(),$B=v(),{hdb_errors:Jte}=Z(),{HDB_ERROR_MSGS:Xt}=Jte,ri=/^[a-zA-Z0-9-_]+$/;VB.exports={getDropCustomFunctionValidator:Zte,setCustomFunctionValidator:ere,addComponentValidator:nre,dropCustomFunctionProjectValidator:ire,packageComponentValidator:ore,deployComponentValidator:are,setComponentFileValidator:tre,getComponentFileValidator:sre,dropComponentFileValidator:rre};function QE(e,t,r){try{let s=xB.get(kB.CONFIG_PARAMS.COMPONENTSROOT),n=FB.join(s,t);return GB.existsSync(n)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(s){return $B.error(s),r.message(Xt.VALIDATION_ERR)}}a(QE,"checkProjectExists");function $l(e,t){return e.includes("..")?t.message("Invalid file path"):e}a($l,"checkFilePath");function Xte(e,t,r,s){try{let n=xB.get(kB.CONFIG_PARAMS.COMPONENTSROOT),i=FB.join(n,e,t,r+".js");return GB.existsSync(i)?r:s.message(Xt.NO_FILE)}catch(n){return $B.error(n),s.message(Xt.VALIDATION_ERR)}}a(Xte,"checkFileExists");function Zte(e){let t=ge.object({project:ge.string().pattern(ri).custom(QE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().pattern(ri).custom(Xte.bind(null,e.project,e.type)).custom($l).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return si.validateBySchema(e,t)}a(Zte,"getDropCustomFunctionValidator");function ere(e){let t=ge.object({project:ge.string().pattern(ri).custom(QE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().custom($l).required(),function_content:ge.string().required()});return si.validateBySchema(e,t)}a(ere,"setCustomFunctionValidator");function tre(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom($l).required(),payload:ge.string().allow("").optional(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(tre,"setComponentFileValidator");function rre(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom($l).optional()});return si.validateBySchema(e,t)}a(rre,"dropComponentFileValidator");function sre(e){let t=ge.object({project:ge.string().required(),file:ge.string().custom($l).required(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(sre,"getComponentFileValidator");function nre(e){let t=ge.object({project:ge.string().pattern(ri).custom(QE.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(nre,"addComponentValidator");function ire(e){let t=ge.object({project:ge.string().pattern(ri).custom(QE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(ire,"dropCustomFunctionProjectValidator");function ore(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:ge.boolean()});return si.validateBySchema(e,t)}a(ore,"packageComponentValidator");function are(e){let t=ge.object({project:ge.string().pattern(ri).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:ge.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:ge.string().optional()});return si.validateBySchema(e,t)}a(are,"deployComponentValidator")});var XE=T((SRe,XB)=>{"use strict";var jE=require("joi"),zE=require("path"),KB=require("fs-extra"),{exec:cre}=require("child_process"),ure=require("util"),WB=ure.promisify(cre),Vl=R(),{handleHDBError:hc,hdb_errors:lre}=Z(),{HTTP_STATUS_CODES:mc}=lre,Yl=j(),_re=Ve(),pc=v();Yl.initSync();var vR=Yl.get(Vl.CONFIG_PARAMS.COMPONENTSROOT),QB="npm install --omit=dev --json",dre=`${QB} --dry-run`;XB.exports={installModules:mre,auditModules:pre,installAllRootModules:fre,uninstallRootModule:Ere,linkHarperdb:hre};async function fre(e=!1){await JE(),await Kl(e?"npm install --ignore-scripts":"npm install",Yl.get(Vl.CONFIG_PARAMS.ROOTPATH))}a(fre,"installAllRootModules");async function Ere(e){await Kl(`npm uninstall ${e}`,Yl.get(Vl.CONFIG_PARAMS.ROOTPATH))}a(Ere,"uninstallRootModule");async function hre(){await JE(),await Kl(`npm link ${Vl.PACKAGE_ROOT}`,Yl.get(Vl.CONFIG_PARAMS.ROOTPATH))}a(hre,"linkHarperdb");async function Kl(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await WB(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
13
- `,""))}return s&&!s.includes("Debugger listening")&&pc.error("Error running NPM command:",e,s),pc.trace(r,s),r.replace(`
14
- `,"")}a(Kl,"runCommand");async function mre(e){pc.info(`starting installModules for request: ${e}`);let t=JB(e);if(t)throw hc(t,t.message,mc.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?dre:QB;await JE(),await zB(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=zE.join(vR,u),l,d=null;try{let{stdout:f,stderr:E}=await WB(n,{cwd:_});l=f?f.replace(`
11
+ `,"")}a(aM,"runCommand");async function w5(){try{await o5.access(ag)}catch{return!1}let e=await aM(`${ag} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return a5.eq(t,y5)}a(w5,"checkNATSServerInstalled");async function _g(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await sM.getClusterUser();if($o(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}_s.trace("create nats connection called");let i=await S5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ht.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return i.protocol.transport.socket.unref(),_s.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(_g,"createConnection");async function C5(){Vs&&(await Vs.drain(),Vs=void 0,za=void 0,Ja=void 0,Xa=void 0)}a(C5,"closeConnection");var Vs,Xa;async function jf(){return Xa||(Xa=_g(Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Vs=await Xa),Vs||Xa}a(jf,"getConnection");async function pl(){if(za)return za;$o(Vs)&&await jf();let{domain:e}=Sl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if($o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return za=await Vs.jetstreamManager({domain:e,timeout:6e4}),za}a(pl,"getJetStreamManager");async function cM(){if(Ja)return Ja;$o(Vs)&&await jf();let{domain:e}=Sl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if($o(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ja=Vs.jetstream({domain:e,timeout:6e4}),Ja}a(cM,"getJetStream");async function mr(){let e=Vs||await jf(),t=za||await pl(),r=Ja||await cM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function L5(e){let t=Ht.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await sM.getClusterUser(),n=await _g(t,r,s),i=lg(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=oM.decode(l.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await cg.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(L5,"getServerList");async function dg(e,t){let{jsm:r}=await mr(),s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:nM.File,retention:iM.Limits,subjects:t,discard:T5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(dg,"createLocalStream");async function uM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(uM,"listStreams");async function D5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(D5,"deleteLocalStream");async function P5(e){let{connection:t}=await mr(),r=[],s=lg(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(oM.decode(o.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}a(P5,"listRemoteStreams");async function M5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=eM(),o={durable_name:i,ack_policy:Wf.Explicit};t&&(o.deliver_policy=Qf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=ug(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Oe.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(M5,"viewStream");async function*U5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=eM(),o={durable_name:i,ack_policy:Wf.Explicit};t&&(o.deliver_policy=Qf.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.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=ug(_.data);l[0]||(l=[l]);for(let d of l){let f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};_.headers&&(f.origin=_.headers.get(Oe.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(U5,"viewStreamIterator");async function v5(e,t,r,s){_s.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=lM(s,r);let{js:n}=await mr(),i=await Tl(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:rM.encode(s);try{_s.trace(`publishToStream publishing to subject: ${o}`),N5(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(o,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return EM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){_s.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await dg(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(v5,"publishToStream");function lM(e,t){t===void 0&&(t=R5());let r=Ht.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Oe.MSG_HEADERS.ORIGIN)&&r&&t.append(Oe.MSG_HEADERS.ORIGIN,r),t}a(lM,"addNatsMsgHeader");function Sl(e){e=e.toLowerCase();let t=ml.join(Ht.get(be.CONFIG_PARAMS.ROOTPATH),b5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return $o(og)&&(og={port:El.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:El.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.HUB,config_file:Oe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:ml.join(t,Oe.PID_FILES.HUB),hdb_nats_path:t}),og;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return $o(ig)&&(ig={port:El.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:El.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,config_file:Oe.NATS_CONFIG_FILES.LEAF_SERVER,domain:El.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Oe.SERVER_SUFFIX.LEAF,pid_file_path:ml.join(t,Oe.PID_FILES.LEAF),hdb_nats_path:t}),ig;_s.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Sl,"getServerConfig");async function B5(e){let{jsm:t}=await mr(),r=await Tl();try{await t.streams.add({name:e.stream_name,storage:nM.File,retention:iM.Limits,max_age:m5,max_bytes:p5,subjects:[`${Oe.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Wf.Explicit,durable_name:e.durable_name,deliver_policy:Qf.All,max_ack_pending:1e4});else throw s}}a(B5,"createWorkQueueStream");async function H5(){let{jsm:e}=await mr();(await e.consumers.info(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(_s.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name),_s.info("Adding pull consumer to ingest stream"),await e.consumers.add(Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Wf.Explicit,durable_name:Oe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Qf.All,max_ack_pending:1e4}))}a(H5,"updateIngestStreamConsumer");async function _M(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=dM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Kf.createNatsTableStreamName(c,u),l=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let m=0,S=n.config.sources.length;m<S;m++)if(d=n.config.sources[m],f=m,l&&d.name===_||!l&&d.name===_&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let m=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:m}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Oe.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(_M,"addSourceToWorkStream");function dM(e){return e.split(".")[1]}a(dM,"extractServerName");async function fM(e,t,r){let{jsm:s}=await mr(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Kf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let _=u.config.sources.length,l;for(;_--;)if(l=u.config.sources[_],l.name===c&&l.external.api===`$JS.${e}.API`){u.config.sources.splice(_,1);break}await s.streams.update(t,u.config)}a(fM,"removeSourceFromWorkStream");async function q5(e,t,r=6e4,s=lg()){if(!cg.isObject(t))throw new Error("data param must be an object");let n=rM.encode(t),{connection:i}=await mr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return ug(c.data)}a(q5,"request");function fg(e){return new Promise(async(t,r)=>{let s=_5(ag,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",o=>{r(o)}),s.stdout.on("data",o=>{i+=o.toString()}),s.stderr.on("data",o=>{n+=o.toString()}),s.stderr.on("close",o=>{n&&r(n),t(i)})})}a(fg,"reloadNATS");async function G5(){let{pid_file_path:e}=Sl(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fg(e)}a(G5,"reloadNATSHub");async function F5(){let{pid_file_path:e}=Sl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fg(e)}a(F5,"reloadNATSLeaf");function x5(e,t,r){let s;switch(e.code){case ZP.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case ZP.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(x5,"requestErrorHandler");async function k5(e,t){let r=t+Oe.SERVER_SUFFIX.LEAF;await EM(async()=>{e.subscribe===!0?await _M(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await fM(r,Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(k5,"updateWorkStream");function EM(e){return d5.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(EM,"exclusiveLock");async function hM(e,t){let r=Kf.createNatsTableStreamName(e,t),s=await Tl(),n=K5(e,t,s);await dg(r,[n])}a(hM,"createLocalTableStream");async function $5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await hM(s,n)}}a($5,"createTableStreams");async function mM(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Kf.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")_s.warn(r);else throw r}}a(mM,"purgeTableStream");async function V5(e,t){if(Ht.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await mM(e,t[r])}a(V5,"purgeSchemaTableStreams");async function Y5(e){return(await pl()).streams.info(e)}a(Y5,"getStreamInfo");function K5(e,t,r){return`${Oe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(K5,"createSubjectName");async function Tl(){if(hl)return hl;if(hl=(await pl())?.nc?.info?.server_name,hl===void 0)throw new Error("Unable to get jetstream manager server name");return hl}a(Tl,"getJsmServerName");async function W5(){let e=await pl(),t=await Tl(),r=await uM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Q5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;_s.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");_s.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(W5,"updateLocalStreams");function Q5(e){let{config:t}=e,r=!1;if(t.name===Oe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Oe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ht.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(Q5,"updateStreamLimits")});var Zf=T((aTe,RM)=>{"use strict";var Za=Pd(),ec=XP(),j5=U(),z5=require("uuid").v4,oTe=require("clone"),Jf=Vn(),tc=R(),J5=require("util"),ki=as(),{handleHDBError:pr,hdb_errors:X5}=Z(),{HDB_ERROR_MSGS:zf,HTTP_STATUS_CODES:Sr}=X5,{SchemaEventMsg:Xf}=Us(),SM=st(),{getDatabases:Z5}=(Ee(),te(De)),{transformReq:rc}=G();RM.exports={createSchema:e8,createSchemaStructure:TM,createTable:t8,createTableStructure:gM,createAttribute:o8,dropSchema:r8,dropTable:s8,dropAttribute:n8,getBackup:a8};async function e8(e){let t=await TM(e);return Jf.signalSchemaChange(new Xf(process.pid,e.operation,e.schema)),t}a(e8,"createSchema");async function TM(e){let t=Za.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(rc(e),!await ec.checkSchemaExists(e.schema))throw pr(new Error,zf.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,tc.LOG_LEVELS.ERROR,zf.SCHEMA_EXISTS_ERR(e.schema),!0);return await ki.createSchema(e),`database '${e.schema}' successfully created`}a(TM,"createSchemaStructure");async function t8(e){return rc(e),e.hash_attribute=e.primary_key??e.hash_attribute,await gM(e)}a(t8,"createTable");async function gM(e){let t=Za.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(Za.validateTableResidence(e.residence),!await ec.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,zf.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,tc.LOG_LEVELS.ERROR,zf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:z5(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ki.createTable(s,e);else throw pr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Sr.BAD_REQUEST);else await ki.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(gM,"createTableStructure");async function r8(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Za.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);rc(e);let n=await ec.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,tc.LOG_LEVELS.ERROR,n,!0);let i=await ec.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ki.dropSchema(e),Jf.signalSchemaChange(new Xf(process.pid,e.operation,e.schema)),await SM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(r8,"dropSchema");async function s8(e){let t=Za.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);rc(e);let r=await ec.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,tc.LOG_LEVELS.ERROR,r,!0);return await ki.dropTable(e),await SM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(s8,"dropTable");async function n8(e){let t=Za.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);rc(e);let r=await ec.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,tc.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw pr(new Error,"You cannot drop a hash attribute",Sr.BAD_REQUEST,void 0,void 0,!0);if(tc.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw pr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Sr.BAD_REQUEST,void 0,void 0,!0);try{return await ki.dropAttribute(e),i8(e),Jf.signalSchemaChange(new Xf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw j5.error(`Got an error deleting attribute ${J5.inspect(e)}.`),s}}a(n8,"dropAttribute");function i8(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(i8,"dropAttributeFromGlobal");async function o8(e){rc(e);let t=Z5()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw pr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Sr.BAD_REQUEST,void 0,void 0,!0);return await ki.createAttribute(e),Jf.signalSchemaChange(new Xf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(o8,"createAttribute");function a8(e){return ki.getBackup(e)}a(a8,"getBackup")});var OM=T((uTe,AM)=>{"use strict";var{OPERATIONS_ENUM:c8}=R(),Eg=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=c8.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};AM.exports=Eg});var hg=T((dTe,wM)=>{"use strict";var u8=as(),_Te=OM(),eE=G(),tE=R(),l8=j(),{handleHDBError:NM,hdb_errors:_8}=Z(),{HDB_ERROR_MSGS:bM,HTTP_STATUS_CODES:yM}=_8,d8=Object.values(tE.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),IM="To use this operation audit log must be enabled in harperdb-config.yaml";wM.exports=f8;async function f8(e){if(eE.isEmpty(e.schema))throw new Error(bM.SCHEMA_REQUIRED_ERR);if(eE.isEmpty(e.table))throw new Error(bM.TABLE_REQUIRED_ERR);if(!l8.get(tE.CONFIG_PARAMS.LOGGING_AUDITLOG))throw NM(new Error,IM,yM.BAD_REQUEST,tE.LOG_LEVELS.ERROR,IM,!0);let t=eE.checkSchemaTableExist(e.schema,e.table);if(t)throw NM(new Error,t,yM.NOT_FOUND,tE.LOG_LEVELS.ERROR,t,!0);if(!eE.isEmpty(e.search_type)&&d8.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await u8.readAuditLog(e)}a(f8,"readAuditLog")});var LM=T((ETe,CM)=>{"use strict";var{OPERATIONS_ENUM:E8}=R(),mg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=E8.GET_BACKUP,this.schema=t,this.table=r}};CM.exports=mg});var MM=T((STe,PM)=>{"use strict";var h8=as(),mTe=LM(),pg=G(),m8=R(),pTe=j(),{handleHDBError:p8,hdb_errors:S8}=Z(),{HDB_ERROR_MSGS:DM,HTTP_STATUS_CODES:T8}=S8;PM.exports=g8;async function g8(e){if(pg.isEmpty(e.schema))throw new Error(DM.SCHEMA_REQUIRED_ERR);if(pg.isEmpty(e.table))throw new Error(DM.TABLE_REQUIRED_ERR);let t=pg.checkSchemaTableExist(e.schema,e.table);if(t)throw p8(new Error,t,T8.NOT_FOUND,m8.LOG_LEVELS.ERROR,t,!0);return await h8.getBackup(read_audit_log_object)}a(g8,"getBackup")});var GM=T((gTe,qM)=>{var $i=require("validate.js"),vM=Ve(),sc=R(),{handleHDBError:R8,hdb_errors:A8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:O8}=A8,Sg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),N8={STRUCTURE_USER:"structure_user"},UM=Object.values(sc.ROLE_TYPES_ENUM),b8="attribute_permissions",y8="attribute_name",{PERMS_CRUD_ENUM:nc}=sc,I8=[b8,...Object.values(nc)],BM=[nc.READ,nc.INSERT,nc.UPDATE],w8=[y8,...BM];function C8(e){let t=Sg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,HM(e,t)}a(C8,"addRoleValidation");function L8(e){let t=Sg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,HM(e,t)}a(L8,"alterRoleValidation");function D8(e){let t=Sg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,vM.validateObject(e,t)}a(D8,"dropRoleValidation");var P8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function HM(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)P8.includes(s[o])||n.push(s[o]);n.length>0&&_t(nt.INVALID_ROLE_JSON_KEYS(n),r);let i=vM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=M8(e);o&&_t(o,r),UM.forEach(c=>{e.permission[c]&&!$i.isBoolean(e.permission[c])&&_t(nt.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(UM.indexOf(o)<0){if(o===N8.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]||_t(nt.SCHEMA_NOT_FOUND(d),r)}continue}_t(nt.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){_t(nt.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]){_t(nt.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(_).forEach(l=>{I8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(nc).forEach(l=>{$i.isDefined(_[l])?$i.isBoolean(_[l])||_t(nt.TABLE_PERM_NOT_BOOLEAN(l),r,o,u):_t(nt.TABLE_PERM_MISSING(l),r,o,u)}),$i.isDefined(_.attribute_permissions)){if(!$i.isArray(_.attribute_permissions)){_t(nt.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{_t(nt.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(_.attribute_permissions){let l=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in _.attribute_permissions){let E=_.attribute_permissions[f];if(Object.keys(E).forEach(m=>{!w8.includes(m)&&m!==nc.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(m),r,o,u)}),!$i.isDefined(E.attribute_name)){_t(nt.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!l.includes(h)){_t(nt.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}BM.forEach(m=>{$i.isDefined(E[m])?$i.isBoolean(E[m])||_t(nt.ATTR_PERM_NOT_BOOLEAN(m,h),r,o,u):_t(nt.ATTR_PERM_MISSING(m,h),r,o,u)}),!d.read&&E.read===!0&&(d.read=!0),!d.insert&&E.insert===!0&&(d.insert=!0),!d.update&&E.update===!0&&(d.update=!0)}if(_.read===!1&&d.read===!0||_.insert===!1&&d.insert===!0||_.update===!1&&d.update===!0){let f=`${o}.${u}`;_t(nt.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return U8(r)}a(HM,"customValidate");qM.exports={addRoleValidation:C8,alterRoleValidation:L8,dropRoleValidation:D8};function M8(e){let{operation:t,permission:r}=e;if(t===sc.OPERATIONS_ENUM.ADD_ROLE||t===sc.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return nt.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?sc.ROLE_TYPES_ENUM.SUPER_USER:sc.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(M8,"validateNoSUPerms");function U8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:nt.ROLE_PERMS_ERROR,...e};return R8(new Error,s,O8.BAD_REQUEST)}else return null}a(U8,"generateRolePermResponse");function _t(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(_t,"addPermError")});var nE=T((ATe,$M)=>{"use strict";var FM=dr(),xM=_r(),v8=vo(),gg=GM(),Rg=Vn(),B8=require("uuid").v4,H8=require("util"),rE=R(),q8=G(),Ag=xM.searchByValue,G8=xM.searchByHash,F8=H8.promisify(v8.delete),x8=vs(),k8=Ba(),{hdb_errors:$8,handleHDBError:ic}=Z(),{HDB_ERROR_MSGS:kM,HTTP_STATUS_CODES:sE}=$8,{UserEventMsg:Og}=Us();$M.exports={addRole:V8,alterRole:Y8,dropRole:K8,listRoles:W8};function Tg(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(Tg,"scrubRoleDetails");async function V8(e){let t=gg.addRoleValidation(e);if(t)throw t;e=Tg(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await Ag(r)||[])}catch(i){throw ic(i)}if(s&&s.length>0)throw ic(new Error,kM.ROLE_ALREADY_EXISTS(e.role),sE.CONFLICT,void 0,void 0,!0);e.id||(e.id=B8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await FM.insert(n),Rg.signalUserChange(new Og(process.pid)),e=Tg(e),e}a(V8,"addRole");async function Y8(e){let t=gg.alterRoleValidation(e);if(t)throw t;e=Tg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await FM.update(r)}catch(n){throw ic(n)}if(s&&s?.message==="updated 0 of 1 records")throw ic(new Error,"Invalid role id",sE.BAD_REQUEST,void 0,void 0,!0);return await Rg.signalUserChange(new Og(process.pid)),e}a(Y8,"alterRole");async function K8(e){let t=gg.dropRoleValidation(e);if(t)throw ic(new Error,t,sE.BAD_REQUEST,void 0,void 0,!0);let r=new k8(rE.SYSTEM_SCHEMA_NAME,rE.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await G8(r));if(s.length===0)throw ic(new Error,kM.ROLE_NOT_FOUND,sE.NOT_FOUND,void 0,void 0,!0);let n=new x8(rE.SYSTEM_SCHEMA_NAME,rE.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Ag(n)),o=!1;if(q8.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){o=!0;break}}if(o===!0)throw new Error(`Cannot drop role ${s[0].role} as it has active user(s) tied to this role`);let c={table:"hdb_role",schema:"system",hash_values:[e.id]};return await F8(c),Rg.signalUserChange(new Og(process.pid)),`${s[0].role} successfully deleted`}a(K8,"dropRole");async function W8(){return Ag({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(W8,"listRoles")});var WM=T((NTe,KM)=>{"use strict";var Q8=j(),Vi=require("joi"),j8=Ve(),VM=require("moment"),z8=require("fs-extra"),Ng=require("path"),J8=require("lodash"),gl=R(),{LOG_LEVELS:Vo}=R(),X8="YYYY-MM-DD hh:mm:ss",Z8=Ng.resolve(__dirname,"../logs");KM.exports=function(e){return j8.validateBySchema(e,e6)};var e6=Vi.object({from:Vi.custom(YM),until:Vi.custom(YM),level:Vi.valid(Vo.NOTIFY,Vo.FATAL,Vo.ERROR,Vo.WARN,Vo.INFO,Vo.DEBUG,Vo.TRACE),order:Vi.valid("asc","desc"),limit:Vi.number().min(1),start:Vi.number().min(0),log_name:Vi.custom(t6)});function YM(e,t){if(VM(e,VM.ISO_8601).format(X8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(YM,"validateDatetime");function t6(e,t){if(J8.invert(gl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=Q8.get(gl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?gl.LOG_NAMES.HDB:e,i=n===gl.LOG_NAMES.INSTALL?Ng.join(Z8,gl.LOG_NAMES.INSTALL):Ng.join(s,n);return z8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(t6,"validateReadLogPath")});var yg=T((yTe,jM)=>{"use strict";var iE=R(),r6=U(),s6=j(),n6=WM(),bg=require("path"),QM=require("fs-extra"),{once:i6}=require("events"),{handleHDBError:o6,hdb_errors:a6}=Z(),{PACKAGE_ROOT:c6}=R(),u6=bg.join(c6,"logs"),l6=1e3,_6=200;jM.exports=d6;async function d6(e){let t=n6(e);if(t)throw o6(t,t.message,a6.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=s6.get(iE.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?iE.LOG_NAMES.HDB:e.log_name,n=s===iE.LOG_NAMES.INSTALL?bg.join(u6,iE.LOG_NAMES.INSTALL):bg.join(r,s),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?l6:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,m=0;f==="desc"&&!u&&!l&&(m=Math.max(QM.statSync(n).size-(h+5)*_6,0));let S=QM.createReadStream(n,{start:m});S.on("error",F=>{r6.error(F)});let A=0,g=[],N="",V;S.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=N+F;let K=0,B;for(;(B=w.exec(F))&&!S.destroyed;){V&&(V.message=F.slice(K,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Vt=ie[0],Ge=ie[1];ie.splice(0,2),V={timestamp:se,thread:Vt,level:Ge,tags:ie,message:""},K=B.index+k.length}N=F.slice(K)}),S.on("end",F=>{S.destroyed||V&&(V.message=N.trim(),$(V))}),S.resume();function $(F){let w,K,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),F.level===o&&w>=K&&w<=B&&A<E?A++:F.level===o&&w>=K&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(i&&c):w=new Date(F.timestamp),K=new Date(u),F.level===o&&w>=K&&A<E?A++:F.level===o&&w>=K&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&A<E?A++:F.level===o&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case(c&&_):w=new Date(F.timestamp),K=new Date(u),B=new Date(l),w>=K&&w<=B&&A<E?A++:w>=K&&w<=B&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case i:F.level===o&&A<E?A++:F.level===o&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case c:w=new Date(F.timestamp),K=new Date(u),w>=K&&A<E?A++:w>=K&&A>=E&&(Yi(F,f,g),A++,A===h&&S.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&A<E?A++:w<=B&&A>=E&&(Yi(F,f,g),A++,A===h&&S.destroy());break;default:A<E?A++:(Yi(F,f,g),A++,A===h&&S.destroy())}}return a($,"onLogMessage"),await i6(S,"close"),g}a(d6,"readLog");function Yi(e,t,r){t==="desc"?f6(e,r):t==="asc"?E6(e,r):r.push(e)}a(Yi,"pushLineToResult");function f6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)>r?s=i+1:n=i}t.splice(s,0,e)}a(f6,"insertDescending");function E6(e,t){let r=new Date(e.timestamp),s=0,n=t.length;for(;s<n;){let i=s+n>>>1;new Date(t[i].timestamp)<r?s=i+1:n=i}t.splice(s,0,e)}a(E6,"insertAscending")});var aE=T((DTe,ZM)=>{"use strict";var Ig=require("joi"),{string:oE,boolean:zM,date:h6}=Ig.types(),m6=Ve(),{validateSchemaExists:wTe,validateTableExists:CTe,validateSchemaName:LTe}=cn(),p6=R(),S6=ke(),JM=j();JM.initSync();var T6=oE.invalid(JM.get(p6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(S6.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(),XM={operation:oE.valid("add_node","update_node"),node_name:T6,subscriptions:Ig.array().items({table:oE.optional(),schema:oE.required(),subscribe:zM.required(),publish:zM.required().custom(R6),start_time:h6.iso()}).min(1).required()};function g6(e){return m6.validateBySchema(e,Ig.object(XM))}a(g6,"addUpdateNodeValidator");function R6(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(R6,"checkForFalsy");ZM.exports={addUpdateNodeValidator:g6,validation_schema:XM}});var tU=T((MTe,eU)=>{var A6=Ve(),O6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};eU.exports=function(e){return A6.validateObject(e,O6)}});var cE=T((UTe,rU)=>{"use strict";var N6=R().OPERATIONS_ENUM,wg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=N6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rU.exports=wg});var nU=T((BTe,sU)=>{"use strict";var b6={OPERATION:"operation",REFRESH:"refresh"},Cg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Lg=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};sU.exports={JWTTokens:Cg,TOKEN_TYPE_ENUM:b6,JWTRSAKeys:Lg}});var Ol=T((qTe,cU)=>{"use strict";var Al=require("jsonwebtoken"),Dg=require("fs-extra"),Pg=G(),ds=R(),{handleHDBError:Tr,hdb_errors:y6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=y6,Rl=U(),iU=af(),vg=Er(),I6=dr().update,w6=cE(),C6=Vn(),{UserEventMsg:L6}=Us(),Ki=j();Ki.initSync();var Mg=require("path"),{JWTTokens:D6,JWTRSAKeys:P6,TOKEN_TYPE_ENUM:uE}=nU(),M6=Ki.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ki.get(ds.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",U6=Ki.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ki.get(ds.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",lE="RS256",Ug;cU.exports={createTokens:v6,validateOperationToken:H6,refreshOperationToken:B6,validateRefreshToken:aU};async function v6(e){if(Pg.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(Pg.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(Pg.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Rl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await _E(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await oU(i,r.private_key,r.passphrase),c=await Al.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:U6,algorithm:lE,subject:uE.REFRESH}),u=iU.hash(c),_=new w6(ds.SYSTEM_SCHEMA_NAME,ds.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await I6(_)}catch(f){Rl.error(f),d=f}if(d!==void 0||l.skipped_hashes.length>0)throw Tr(new Error,Rr.REFRESH_TOKEN_SAVE_FAILED,gr.INTERNAL_SERVER_ERROR);return C6.signalUserChange(new L6(process.pid)),new D6(o,c)}a(v6,"createTokens");async function oU(e,t,r){return await Al.sign(e,{key:t,passphrase:r},{expiresIn:M6,algorithm:lE,subject:uE.OPERATION})}a(oU,"signOperationToken");async function _E(){if(Ug===void 0)try{let e=Mg.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Mg.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Mg.join(Ki.getHdbBasePath(),ds.LICENSE_KEY_DIR_NAME,ds.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Dg.readFile(e)).toString(),n=(await Dg.readFile(t)).toString(),i=(await Dg.readFile(r)).toString();Ug=new P6(i,n,s)}catch(e){throw Rl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return Ug}a(_E,"getJWTRSAKeys");async function B6(e){if(!e)throw Tr(new Error,Rr.INVALID_BODY,gr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Tr(new Error,Rr.REFRESH_TOKEN_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);await aU(e.refresh_token);let t=await _E(),r=await Al.decode(e.refresh_token);return{operation_token:await oU({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(B6,"refreshOperationToken");async function H6(e){try{let t=await _E(),r=await Al.verify(e,t.public_key,{algorithms:lE,subject:uE.OPERATION});return await vg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Rl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(H6,"validateOperationToken");async function aU(e){let t;try{let r=await _E(),s=await Al.verify(e,r.public_key,{algorithms:lE,subject:uE.REFRESH});t=await vg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Rl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!iU.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(aU,"validateRefreshToken")});var Bg=T((xTe,_U)=>{"use strict";var q6=tU(),oc=require("passport"),G6=require("passport-local").Strategy,F6=require("passport-http").BasicStrategy,x6=require("util"),k6=Er(),lU=x6.callbackify(k6.findAndValidateUser),FTe=Mr(),$6=R(),uU=Ol();oc.use(new G6(function(e,t,r){lU(e,t,r)}));oc.use(new F6(function(e,t,r){lU(e,t,r)}));oc.serializeUser(function(e,t){t(null,e)});oc.deserializeUser(function(e,t){t(null,e)});function V6(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":oc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===$6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?uU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):uU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:oc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(V6,"authorize");function Y6(e,t){let r=q6(e);if(r){t(r);return}let s={authorized:!0,messages:[]},n=e.user.role;if(!n?.permission)return t("Invalid role");let i=JSON.parse(n.permission);if(i.super_user)return t(null,s);if(!i[e.schema])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.schema} schema`),t(null,s);if(!i[e.schema].tables[e.table])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.table} table`),t(null,s);if(!i[e.schema].tables[e.table][e.operation])return s.authorized=!1,s.messages.push(`Not authorized to access ${e.operation} on ${e.table} table`),t(null,s);if(i[e.schema].tables[e.table].attribute_permissions&&!e.attributes)return s.authorized=!1,s.messages.push(`${e.schema}.${e.table} has attribute permissions. Missing attributes to validate`),t(null,s);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]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${o[c].attribute_name} `))}return t(null,s)}a(Y6,"checkPermissions");_U.exports={authorize:V6,checkPermissions:Y6}});var ac=T(($Te,dU)=>{"use strict";var Hg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},qg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};dU.exports={Node:Hg,NodeSubscription:qg}});var EU=T((YTe,fU)=>{"use strict";var K6=R().OPERATIONS_ENUM,Gg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=K6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};fU.exports=Gg});var Nl=T((WTe,hU)=>{"use strict";var Fg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},xg=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,c!==void 0&&(this.attributes=c)}};hU.exports={RemotePayloadObject:Fg,RemotePayloadSubscription:xg}});var pU=T((jTe,mU)=>{"use strict";var kg=class{static{a(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,o=0){this.schema=t,this.table=r,this.table_size=s,this.record_count=n,this.transaction_log_size=i,this.transaction_log_record_count=o}};mU.exports=kg});var gU=T((ege,TU)=>{"use strict";var W6=pU(),JTe=Ke(),SU=Me(),Q6=U(),{getSchemaPath:XTe,getTransactionAuditStorePath:ZTe}=He(),{getDatabases:j6}=(Ee(),te(De));TU.exports=z6;async function z6(e){let t=new W6;try{let r=j6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await SU.environmentDataSize(schema_path,e.name),o=await SU.environmentDataSize(txn_path,e.name);t.schema=e.schema,t.table=e.name,t.table_size=i,t.record_count=s.entryCount,t.transaction_log_size=o,t.transaction_log_record_count=n.entryCount}catch(r){Q6.warn(`unable to stat table dbi due to ${r}`)}return t}a(z6,"lmdbGetTableSize")});var AU=T((rge,RU)=>{"use strict";var $g=class{static{a(this,"SystemInformationObject")}constructor(t,r,s,n,i,o,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=o,this.harperdb_processes=c}};RU.exports=$g});var Xn=T((oge,yU)=>{"use strict";var J6=require("fs-extra"),X6=require("path"),Jt=require("systeminformation"),Wi=U(),Z6=st(),Vg=ke(),fE=R(),e9=gU(),bU=Ui(),{getThreadInfo:OU}=Qe(),eR=j();eR.initSync();var t9=AU(),{openEnvironment:nge}=Me(),{getSchemaPath:ige}=He(),{database:r9}=(Ee(),te(De)),dE;yU.exports={getHDBProcessInfo:Qg,getNetworkInfo:zg,getDiskInfo:jg,getMemoryInfo:Wg,getCPUInfo:Kg,getTimeInfo:Yg,getSystemInformation:Jg,systemInformation:s9,getTableSize:Xg,getMetrics:Zg};function Yg(){return Jt.time()}a(Yg,"getTimeInfo");async function Kg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Jt.cpu();l.cpu_speed=await Jt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:m,raw_currentload_user:S,cpus:A,...g}=await Jt.currentLoad();return g.cpus=[],A.forEach(N=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:K,raw_load_user:B,...k}=N;g.cpus.push(k)}),l.current_load=g,l}catch(e){return Wi.error(`error in getCPUInfo: ${e}`),{}}}a(Kg,"getCPUInfo");async function Wg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Jt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wi.error(`error in getMemoryInfo: ${e}`),{}}}a(Wg,"getMemoryInfo");async function Qg(){let e={core:[],clustering:[]};try{let t=await Jt.processes(),r;try{r=Number.parseInt(await J6.readFile(X6.join(eR.get(fE.CONFIG_PARAMS.ROOTPATH),fE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===fE.NODE_ERROR_CODES.ENOENT)Wi.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return Wi.error(`error in getHDBProcessInfo: ${t}`),e}}a(Qg,"getHDBProcessInfo");async function jg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Jt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Jt.fsStats();return e.read_write=_,e.size=await Jt.fsSize(),e}catch(t){return Wi.error(`error in getDiskInfo: ${t}`),e}}a(jg,"getDiskInfo");async function zg(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Jt.networkInterfaceDefault(),e.latency=await Jt.inetChecksite("google.com"),(await Jt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:_,ieee8021xState:l,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await Jt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return Wi.error(`error in getNetworkInfo: ${t}`),e}}a(zg,"getNetworkInfo");async function Jg(){if(dE!==void 0)return dE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Jt.osInfo();e=c;let u=await Jt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,dE=e,dE}catch(t){return Wi.error(`error in getSystemInformation: ${t}`),e}}a(Jg,"getSystemInformation");async function Xg(){let e=[],t=await bU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await e9(s));return e}a(Xg,"getTableSize");async function Zg(){let e=await bU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=r9({database:r,table:n}),o=i.getStats();o.readers=i.readerList().split(/\n\s+/).slice(1).map(c=>{let[u,_,l]=c.trim().split(" ");return{pid:u,thread:_,txnid:l}}),s[n]=o}catch(i){Wi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Zg,"getMetrics");async function NU(){if(eR.get(fE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await Z6.getNATSReferences(),r=await t.streams.info(Vg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Vg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Vg.WORK_QUEUE_CONSUMER_NAMES.durable_name),n={ingest:{stream:{...r.state},consumer:{num_ack_pending:s._info.num_ack_pending,num_redelivered:s._info.num_redelivered,num_waiting:s._info.num_waiting,num_pending:s._info.num_pending}}};return r.config?.sources&&(n.ingest.stream.sources=r.config.sources),n}}a(NU,"getNatsStreamInfo");async function s9(e){let t=new t9;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Jg(),t.time=Yg(),t.cpu=await Kg(),t.memory=await Wg(),t.disk=await jg(),t.network=await zg(),t.harperdb_processes=await Qg(),t.table_size=await Xg(),t.metrics=await Zg(),t.threads=await OU(),t.replication=await NU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Jg();break;case"time":t.time=Yg();break;case"cpu":t.cpu=await Kg();break;case"memory":t.memory=await Wg();break;case"disk":t.disk=await jg();break;case"network":t.network=await zg();break;case"harperdb_processes":t.harperdb_processes=await Qg();break;case"table_size":t.table_size=await Xg();break;case"database_metrics":case"metrics":t.metrics=await Zg();break;case"threads":t.threads=await OU();break;case"replication":t.replication=await NU();break;default:break}return t}a(s9,"systemInformation")});var Zn=T((lge,LU)=>{"use strict";var n9=dr(),tR=G(),i9=require("util"),Yo=R(),IU=j();IU.initSync();var o9=Bg(),wU=_r(),{Node:cge,NodeSubscription:uge}=ac(),a9=Ba(),c9=EU(),{RemotePayloadObject:u9,RemotePayloadSubscription:l9}=Nl(),{handleHDBError:_9,hdb_errors:d9}=Z(),{HTTP_STATUS_CODES:f9,HDB_ERROR_MSGS:E9}=d9,h9=vs(),m9=Xn(),p9=So(),{getDatabases:S9}=(Ee(),te(De)),T9=i9.promisify(o9.authorize),g9=wU.searchByHash,R9=wU.searchByValue;LU.exports={authHeaderToUser:A9,isEmpty:O9,getNodeRecord:N9,upsertNodeRecord:b9,buildNodePayloads:y9,checkClusteringEnabled:I9,getAllNodeRecords:w9,getSystemInfo:C9,reverseSubscription:CU};async function A9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await T9(t,null),e}a(A9,"authHeaderToUser");function O9(e){return e==null}a(O9,"isEmpty");async function N9(e){let t=new a9(Yo.SYSTEM_SCHEMA_NAME,Yo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return g9(t)}a(N9,"getNodeRecord");async function b9(e){let t=new c9(Yo.SYSTEM_SCHEMA_NAME,Yo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return n9.upsert(t)}a(b9,"upsertNodeRecord");function CU(e){if(tR.isEmpty(e.subscribe)||tR.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(CU,"reverseSubscription");function y9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:_}=c,l=tR.getTableHashAttribute(u,_),{subscribe:d,publish:f}=CU(c),E=S9()[u]?.[_],h=new l9(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new u9(r,t,n,s)}a(y9,"buildNodePayloads");function I9(){if(!IU.get(Yo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw _9(new Error,E9.CLUSTERING_NOT_ENABLED,f9.BAD_REQUEST,void 0,void 0,!0)}a(I9,"checkClusteringEnabled");async function w9(){let e=new h9(Yo.SYSTEM_SCHEMA_NAME,Yo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await R9(e))}a(w9,"getAllNodeRecords");async function C9(){let e=await m9.getSystemInformation();return{hdb_version:p9.version(),node_version:e.node_version,platform:e.platform}}a(C9,"getSystemInfo")});var rR=T((dge,qU)=>{"use strict";var EE=st(),DU=G(),PU=ke(),MU=R(),hE=U(),UU=Zf(),L9=qu(),{RemotePayloadObject:D9}=Nl(),{handleHDBError:vU,hdb_errors:P9}=Z(),{HTTP_STATUS_CODES:BU}=P9,{NodeSubscription:HU}=ac();qU.exports=M9;async function M9(e,t){let r;try{r=await EE.request(`${t}.${PU.REQUEST_SUFFIX}`,new D9(MU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),hE.trace("Response from remote describe all request:",r)}catch(o){hE.error(`addNode received error from describe all request to remote node: ${o}`);let c=EE.requestErrorHandler(o,"add_node",t);throw vU(new Error,c,BU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===PU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw vU(new Error,o,BU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===MU.SYSTEM_SCHEMA_NAME){await EE.createLocalTableStream(c,u);let h=new HU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=DU.doesSchemaExist(c),l=s[c]!==void 0,d=u?DU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(hE.trace(`addNode creating schema: ${c}`),await UU.createSchema({operation:"create_schema",schema:c})),!d&&f){hE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new L9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await UU.createTable(h)}await EE.createLocalTableStream(c,u);let E=new HU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(M9,"reviewSubscriptions")});var Il=T((Ege,xU)=>{"use strict";var{handleHDBError:mE,hdb_errors:U9}=Z(),{HTTP_STATUS_CODES:pE}=U9,{addUpdateNodeValidator:v9}=aE(),bl=U(),FU=R(),GU=ke(),B9=G(),sR=st(),yl=Zn(),H9=j(),q9=rR(),{Node:G9,NodeSubscription:F9}=ac(),{broadcast:x9}=Qe(),k9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",$9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",V9=H9.get(FU.CONFIG_PARAMS.CLUSTERING_NODENAME);xU.exports=Y9;async function Y9(e,t=!1){bl.trace("addNode called with:",e),yl.checkClusteringEnabled();let r=v9(e);if(r)throw mE(r,r.message,pE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await yl.getNodeRecord(s);if(!B9.isEmptyOrZeroLength(d))throw mE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,pE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await q9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=k9,o;let c=yl.buildNodePayloads(n,V9,FU.OPERATIONS_ENUM.ADD_NODE,await yl.getSystemInfo());bl.trace("addNode sending remote payload:",c);let u;try{u=await sR.request(`${s}.${GU.REQUEST_SUFFIX}`,c)}catch(d){bl.error(`addNode received error from request: ${d}`);let f=sR.requestErrorHandler(d,"add_node",s);throw mE(new Error,f,pE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===GU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw mE(new Error,d,pE.INTERNAL_SERVER_ERROR,"error",d)}bl.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];bl.trace("Add node updating work stream for node:",s,"subscriptions:",E),await sR.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new F9(E.schema,E.table,E.publish,E.subscribe))}let l=new G9(s,_,u.system_info);return await yl.upsertNodeRecord(l),x9({type:"nats_update"}),i.length>0?o.message=$9:o.message=`Successfully added '${s}' to manifest`,o}a(Y9,"addNode")});var iR=T((mge,VU)=>{"use strict";var{handleHDBError:SE,hdb_errors:K9}=Z(),{HTTP_STATUS_CODES:TE}=K9,{addUpdateNodeValidator:W9}=aE(),wl=U(),$U=R(),kU=ke(),Q9=G(),nR=st(),Cl=Zn(),j9=j(),{cloneDeep:z9}=require("lodash"),J9=rR(),{NodeSubscription:X9}=ac(),{broadcast:Z9}=Qe(),e7="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",t7="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",r7=j9.get($U.CONFIG_PARAMS.CLUSTERING_NODENAME);VU.exports=s7;async function s7(e){wl.trace("updateNode called with:",e),Cl.checkClusteringEnabled();let t=W9(e);if(t)throw SE(t,t.message,TE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=z9(await Cl.getNodeRecord(r));if(Q9.isEmptyOrZeroLength(s))throw SE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,TE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await J9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=e7,o;let c=Cl.buildNodePayloads(n,r7,$U.OPERATIONS_ENUM.UPDATE_NODE,await Cl.getSystemInfo());wl.trace("updateNode sending remote payload:",c);let u;try{u=await nR.request(`${r}.${kU.REQUEST_SUFFIX}`,c)}catch(_){wl.error(`updateNode received error from request: ${_}`);let l=nR.requestErrorHandler(_,"update_node",r);throw SE(new Error,l,TE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw SE(new Error,_,TE.INTERNAL_SERVER_ERROR,"error",_)}wl.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];wl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await nR.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await n7(s[0],n,u.system_info),i.length>0?o.message=t7:o.message=`Successfully updated '${r}'`,o}a(s7,"updateNode");async function n7(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let o=t[n],c=!1;for(let u=0,_=e.subscriptions.length;u<_;u++){let l=s.subscriptions[u];if(l.schema===o.schema&&l.table===o.table){l.publish=o.publish,l.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new X9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Cl.upsertNodeRecord(s),Z9({type:"nats_update"})}a(n7,"updateNodeTable")});var jU=T((Sge,QU)=>{"use strict";var WU=require("joi"),{string:YU}=WU.types(),i7=Ve(),KU=R(),o7=j(),a7=ke();QU.exports=c7;function c7(e){let t=YU.invalid(o7.get(KU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(a7.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=WU.object({operation:YU.valid(KU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return i7.validateBySchema(e,r)}a(c7,"removeNodeValidator")});var RE=T((gge,tv)=>{"use strict";var{handleHDBError:zU,hdb_errors:u7}=Z(),{HTTP_STATUS_CODES:JU}=u7,l7=jU(),Ll=U(),XU=Zn(),_7=G(),gE=R(),ZU=ke(),ev=st(),d7=j(),{RemotePayloadObject:f7}=Nl(),{NodeSubscription:E7}=ac(),h7=Hu(),m7=vo(),{broadcast:p7}=Qe(),S7=d7.get(gE.CONFIG_PARAMS.CLUSTERING_NODENAME);tv.exports=T7;async function T7(e){Ll.trace("removeNode called with:",e),XU.checkClusteringEnabled();let t=l7(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await XU.getNodeRecord(r);if(_7.isEmptyOrZeroLength(s))throw zU(new Error,`Node '${r}' was not found.`,JU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new f7(gE.OPERATIONS_ENUM.REMOVE_NODE,S7,[]),i,o=!1;try{i=await ev.request(`${r}.${ZU.REQUEST_SUFFIX}`,n),Ll.trace("Remove node reply from remote node:",r,i)}catch(u){Ll.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Ll.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new E7(l.schema,l.table,!1,!1);await ev.updateWorkStream(d,r)}let c=new h7(gE.SYSTEM_SCHEMA_NAME,gE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await m7.deleteRecord(c),p7({type:"nats_update"}),i?.status===ZU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ll.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(T7,"removeNode")});var nv=T((Age,sv)=>{"use strict";var rv=require("joi"),{string:g7,array:R7}=rv.types(),A7=Ve(),O7=aE();sv.exports=N7;function N7(e){let t=rv.object({operation:g7.valid("configure_cluster").required(),connections:R7.items(O7.validation_schema).required()});return A7.validateBySchema(e,t)}a(N7,"configureClusterValidator")});var OE=T((Nge,uv)=>{"use strict";var b7=R(),AE=U(),y7=G(),I7=RE(),w7=Il(),iv=Zn(),C7=nv(),{handleHDBError:ov,hdb_errors:L7}=Z(),{HTTP_STATUS_CODES:av}=L7,D7="Configure cluster complete.",P7="Failed to configure the cluster. Check the logs for more details.",M7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";uv.exports=U7;async function U7(e){AE.trace("configure cluster called with:",e),iv.checkClusteringEnabled();let t=C7(e);if(t)throw ov(t,t.message,av.BAD_REQUEST,void 0,void 0,!0);let r=await iv.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(cv(I7,{operation:b7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);AE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let f=0;f<o;f++){let E=e.connections[f];i.push(cv(w7,E,E.node_name))}let c=await Promise.allSettled(i);AE.trace("All results from configure_cluster add node:",c);let u=[],_=[],l=!1,d=n.concat(c);for(let f=0,E=d.length;f<E;f++){let h=d[f];h.status==="rejected"&&(AE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let m=h?.value?.result;typeof m=="string"&&m.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(y7.isEmptyOrZeroLength(u))return{message:D7,connections:_};if(l)return{message:M7,failed_nodes:u,connections:_};throw ov(new Error,P7,av.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(U7,"configureCluster");async function cv(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(cv,"functionWrapper")});var _v=T((yge,lv)=>{"use strict";var NE=require("joi"),v7=Ve(),{validateSchemaExists:B7,validateTableExists:H7,validateSchemaName:q7}=cn(),G7=NE.object({operation:NE.string().valid("purge_stream"),schema:NE.string().custom(B7).custom(q7).required(),table:NE.string().custom(H7).required()});function F7(e){return v7.validateBySchema(e,G7)}a(F7,"purgeStreamValidator");lv.exports=F7});var oR=T((wge,dv)=>{"use strict";var{handleHDBError:x7,hdb_errors:k7}=Z(),{HTTP_STATUS_CODES:$7}=k7,V7=_v(),Y7=st(),K7=Zn();dv.exports=W7;async function W7(e){let t=V7(e);if(t)throw x7(t,t.message,$7.BAD_REQUEST,void 0,void 0,!0);K7.checkClusteringEnabled();let{schema:r,table:s}=e;return await Y7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(W7,"purgeStream")});var yE=T((Lge,Sv)=>{"use strict";var cR=Zn(),Q7=st(),hv=j(),bE=R(),Ko=ke(),j7=G(),aR=U(),{RemotePayloadObject:z7}=Nl(),{ErrorCode:fv}=require("nats"),Ev=hv.get(bE.CONFIG_PARAMS.CLUSTERING_ENABLED),mv=hv.get(bE.CONFIG_PARAMS.CLUSTERING_NODENAME);Sv.exports={clusterStatus:J7,buildNodeStatus:pv};async function J7(){let e={node_name:mv,is_enabled:Ev,connections:[]};if(!Ev)return e;let t=await cR.getAllNodeRecords();if(j7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(pv(t[s],e.connections));return await Promise.allSettled(r),e}a(J7,"clusterStatus");async function pv(e,t){let r=e.name,s=new z7(bE.OPERATIONS_ENUM.CLUSTER_STATUS,mv,void 0,await cR.getSystemInfo()),n,i,o=Ko.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await Q7.request(Ko.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ko.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ko.CLUSTER_STATUS_STATUSES.CLOSED,aR.error(`Error getting node status from ${r} `,n))}catch(u){aR.warn(`Error getting node status from ${r}`,u),u.code===fv.NoResponders?o=Ko.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===fv.Timeout?o=Ko.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ko.CLUSTER_STATUS_STATUSES.CLOSED}let c=new X7(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==bE.PRE_4_0_0_VERSION&&await cR.upsertNodeRecord(u)}catch(u){aR.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(pv,"buildNodeStatus");function X7(e,t,r,s,n,i,o,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=o,this.system_info=c}a(X7,"NodeStatusObject")});var wE=T((Pge,Tv)=>{"use strict";var{handleHDBError:Z7,hdb_errors:eee}=Z(),{HTTP_STATUS_CODES:tee}=eee,ree=st(),see=Zn(),uR=G(),IE=require("joi"),nee=Ve(),iee=2e3,oee=IE.object({timeout:IE.number().min(1),connected_nodes:IE.boolean(),routes:IE.boolean()});Tv.exports=aee;async function aee(e){see.checkClusteringEnabled();let t=nee.validateBySchema(e,oee);if(t)throw Z7(t,t.message,tee.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||uR.autoCastBoolean(s),o=n===void 0||uR.autoCastBoolean(n),c={nodes:[]},u=await ree.getServerList(r??iee),_={};if(i)for(let l=0,d=u.length;l<d;l++){let f=u[l].statsz;f&&(_[u[l].server.name]=f.routes)}for(let l=0,d=u.length;l<d;l++){if(u[l].statsz)continue;let f=u[l].server,E=u[l].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[l].response_time};i&&(h.connected_nodes=[],_[f.name]&&_[f.name].forEach(m=>{h.connected_nodes.includes(m.name.slice(0,-4))||h.connected_nodes.push(m.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(m=>({host:m.split(":")[0],port:uR.autoCast(m.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(aee,"clusterNetwork")});var Ov=T((Uge,Av)=>{"use strict";var lR=require("joi"),gv=Ve(),{route_constraints:Rv}=_T();Av.exports={setRoutesValidator:cee,deleteRoutesValidator:uee};function cee(e){let t=lR.object({server:lR.valid("hub","leaf").required(),routes:Rv.required()});return gv.validateBySchema(e,t)}a(cee,"setRoutesValidator");function uee(e){let t=lR.object({routes:Rv.required()});return gv.validateBySchema(e,t)}a(uee,"deleteRoutesValidator")});var LE=T((Bge,Iv)=>{"use strict";var Wo=rt(),_R=G(),CE=R(),Nv=Ov(),{handleHDBError:bv,hdb_errors:lee}=Z(),{HTTP_STATUS_CODES:yv}=lee,_ee="cluster routes successfully set",dee="cluster routes successfully deleted";Iv.exports={setRoutes:fee,getRoutes:Eee,deleteRoutes:hee};function fee(e){let t=Nv.setRoutesValidator(e);if(t)throw bv(t,t.message,yv.BAD_REQUEST,void 0,void 0,!0);let r=Wo.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=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=_R.autoCast(_.port);let l=s.some(f=>f.host===_.host&&f.port===_.port),d=n.some(f=>f.host===_.host&&f.port===_.port);l||d?i.push(_):(s.push(_),o.push(_))}return e.server==="hub"?Wo.updateConfigValue(CE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Wo.updateConfigValue(CE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:_ee,set:o,skipped:i}}a(fee,"setRoutes");function Eee(){let e=Wo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Eee,"getRoutes");function hee(e){let t=Nv.deleteRoutesValidator(e);if(t)throw bv(t,t.message,yv.BAD_REQUEST,void 0,void 0,!0);let r=Wo.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let _=0,l=e.routes.length;_<l;_++){let d=e.routes[_],f=!1;for(let E=0,h=s.length;E<h;E++){let m=s[E];if(d.host===m.host&&d.port===m.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,m=n.length;h<m;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=_R.isEmptyOrZeroLength(s)?null:s,Wo.updateConfigValue(CE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=_R.isEmptyOrZeroLength(n)?null:n,Wo.updateConfigValue(CE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:dee,deleted:i,skipped:o}}a(hee,"deleteRoutes")});var Cv=T((qge,wv)=>{"use strict";var Dl=require("alasql"),Qo=require("recursive-iterator"),Ys=U(),mee=G(),Pl=R(),dR=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,See(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(n=>Pl.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!Pl.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][Pl.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=pee(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(_=>!Pl.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new Dl.yy.Column({columnid:_});n.tableid&&(l.tableid=n.tableid),this.ast.columns.push(l),u.includes(_)||u.push(_)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function pee(e){return e.filter(t=>t[Pl.PERMS_CRUD_ENUM.READ])}a(pee,"filterReadRestrictedAttrs");function See(e,t,r,s,n){Tee(e,t,r,s,n)}a(See,"interpretAST");function Ml(e,t,r,s,n){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),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(Ml,"addSchemaTableToMap");function Tee(e,t,r,s,n){if(!e){Ys.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Dl.yy.Insert?Oee(e,t,r):e instanceof Dl.yy.Select?gee(e,t,r,s,n):e instanceof Dl.yy.Update?Ree(e,t,r):e instanceof Dl.yy.Delete?Aee(e,t,r):Ys.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Tee,"getRecordAttributesAST");function gee(e,t,r,s,n){if(!e){Ys.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(mee.isEmptyOrZeroLength(i)){Ys.error("No schema specified");return}e.from.forEach(c=>{Ml(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ml(c.table,t,r,s,n)});let o=new Qo(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,_=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(_).has(u))if(r.has(u))u=r.get(u);else{Ys.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 Qo(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{Ys.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 Qo(c.on);for(let{node:_}of u)if(_&&_.columnid){let l=_.tableid,d=n.get(l);if(!t.get(d).has(l))if(r.has(l))l=r.get(l);else{Ys.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 Qo(e.order);for(let{node:u}of c)if(u&&u.columnid){let _=u.tableid,l=s.has(_)?s.get(_):i;if(_||(_=e.from[0].tableid),!t.get(l).has(_))if(r.has(_))_=r.get(_);else{Ys.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(gee,"getSelectAttributes");function Ree(e,t,r){if(!e){Ys.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Qo(e.columns),n=e.table.databaseid;Ml(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&fR(e.table.tableid,n,i.columnid,t,r)}a(Ree,"getUpdateAttributes");function Aee(e,t,r){if(!e){Ys.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Qo(e.where),n=e.table.databaseid;Ml(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&fR(e.table.tableid,n,i.columnid,t,r)}a(Aee,"getDeleteAttributes");function Oee(e,t,r){if(!e){Ys.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Qo(e.columns),n=e.into.databaseid;Ml(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&fR(e.into.tableid,n,i.columnid,t,r)}a(Oee,"getInsertAttributes");function fR(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(fR,"pushAttribute");wv.exports=dR});var PE=T((Fge,Mv)=>{var DE=Qu(),Lv=require("chalk"),Wr=U(),Dv=require("prompt"),{promisify:Nee}=require("util"),ER=R(),bee=require("fs-extra"),yee=require("path"),Iee=G(),wee=So(),Pv=j();Pv.initSync();var Cee=require("moment"),Lee=Nee(Dv.get),Dee=yee.join(Pv.getHdbBasePath(),ER.LICENSE_KEY_DIR_NAME,ER.LICENSE_FILE_NAME,ER.LICENSE_FILE_NAME);Mv.exports={getFingerprint:Mee,setLicense:Pee,parseLicense:hR,register:Uee,getRegistrationInfo:Bee};async function Pee(e){if(e&&e.key&&e.company){try{Wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await hR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Wr.error(r),Wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(Pee,"setLicense");async function Mee(){let e={};try{e=await DE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Wr.error(r),Wr.error(t),new Error(r)}return e}a(Mee,"getFingerprint");async function hR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Wr.info("Validating license input...");let r=DE.validateLicense(e,t);if(Wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Wr.info("writing license to disk"),await bee.writeFile(Dee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Wr.error("Failed to write License"),s}return"Registration successful."}a(hR,"parseLicense");async function Uee(){let e=await vee();return hR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Uee,"register");async function vee(){let e=await DE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Lv.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Lv.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Dv.start()}catch(s){Wr.error(s)}let r;try{r=await Lee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(vee,"promptForRegistration");async function Bee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await DE.getLicense()}catch(r){throw Wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(Iee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=wee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Cee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Bee,"getRegistrationInfo")});var vv=T((kge,Uv)=>{"use strict";var Hee=ke(),mR=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d,f,E,h){this.port=t,o===null&&(o=void 0),this.server_name=r+Hee.SERVER_SUFFIX.HUB,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!1},this.tls={cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u},this.leafnodes={port:_,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:l,port:d,routes:f,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:E},HDB:{users:h}},this.system_account="SYS"}};Uv.exports=mR});var qv=T((Vge,Hv)=>{"use strict";var Bv=ke(),pR=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,_,l,d){this.port=t,d===null&&(d=void 0),this.server_name=r+Bv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+Bv.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"}};Hv.exports=pR});var Fv=T((Kge,Gv)=>{"use strict";var SR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Gv.exports=SR});var kv=T((Qge,xv)=>{"use strict";var qee=ke(),TR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+qee.SERVER_SUFFIX.ADMIN,this.password=r}};xv.exports=TR});var HE=T((zge,Yv)=>{"use strict";var cc=require("path"),vE=require("fs-extra"),Gee=vv(),Fee=qv(),xee=Fv(),kee=kv(),gR=Er(),lc=G(),Ar=rt(),UE=R(),Ul=ke(),{CONFIG_PARAMS:it}=UE,vl=U(),Bl=j(),$v=Qn(),RR=st(),uc="clustering",$ee=1e4,Vv=5;Yv.exports={generateNatsConfig:Yee,removeNatsConfig:Kee,getHubConfigPath:Vee};function Vee(){let e=Bl.get(it.ROOTPATH);return cc.join(e,uc,Ul.NATS_CONFIG_FILES.HUB_SERVER)}a(Vee,"getHubConfigPath");async function Yee(e=!1,t=void 0){Bl.initSync();let r=Bl.get(it.ROOTPATH),s=cc.join(r,uc,Ul.PID_FILES.HUB),n=cc.join(r,uc,Ul.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=cc.join(r,uc,Ul.NATS_CONFIG_FILES.HUB_SERVER),c=cc.join(r,uc,Ul.NATS_CONFIG_FILES.LEAF_SERVER),u=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),_=Ar.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),l=Ar.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=Ar.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),f=Ar.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),E=Ar.getConfigFromFile(it.CLUSTERING_NODENAME),h=Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await RR.checkNATSServerInstalled()||BE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let m=await gR.listUsers(),S=Ar.getConfigFromFile(it.CLUSTERING_USER),A=await gR.getClusterUser();(lc.isEmpty(A)||A.active!==!0)&&BE(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await ME(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await ME(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await ME(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await ME(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],N=[];for(let[k,se]of m.entries())se.role.role===UE.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(g.push(new kee(se.username,$v.decrypt(se.hash))),N.push(new xee(se.username,$v.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!lc.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Gee(Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,_,l,d,f,h,Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),Ar.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,N);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=lc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===UE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await vE.writeJson(o,F),vl.trace(`Hub server config written to ${o}`));let w=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,K=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Fee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[K],g,N,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===UE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await vE.writeJson(c,B),vl.trace(`Leaf server config written to ${c}`))}a(Yee,"generateNatsConfig");async function ME(e){let t=Bl.get(e);return lc.isEmpty(t)&&BE(`port undefined for '${e}'`),await lc.isPortTaken(t)&&BE(`'${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(ME,"isPortAvailable");function BE(e){let t=`Error generating clustering config: ${e}`;vl.error(t),console.error(t),process.exit(1)}a(BE,"generateNatsConfigError");async function Kee(e){let{port:t,config_file:r}=RR.getServerConfig(e),{username:s,decrypt_hash:n}=await gR.getClusterUser(),i=0,o=2e3;for(;i<Vv;){try{let _=await RR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){vl.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=Vv)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.`);await lc.async_set_timeout(o*(i*2))}let c="0".repeat($ee),u=cc.join(Bl.get(it.ROOTPATH),uc,r);await vE.writeFile(u,c),await vE.remove(u),vl.notify(e,"started.")}a(Kee,"removeNatsConfig")});var Jv=T((Xge,zv)=>{"use strict";var Qr=j(),Wee=Qu(),ue=R(),Hl=ke(),ei=require("path"),{PACKAGE_ROOT:GE}=R(),Kv=j(),qE=G(),_c="/dev/null",Qee=ei.join(GE,"launchServiceScripts"),Wv=ei.join(GE,"utility/scripts"),jee=ei.join(Wv,ue.HDB_RESTART_SCRIPT),Qv=ei.resolve(GE,"dependencies",`${process.platform}-${process.arch}`,Hl.NATS_BINARY_NAME);function jv(){let t=Wee.licenseSearch().ram_allocation||ue.RAM_ALLOCATION_ENUM.DEFAULT,r=ue.MEM_SETTING_KEY+t,s={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return qE.noBootFile()&&(s[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{name:ue.PROCESS_DESCRIPTORS.HDB,script:ue.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:GE}}a(jv,"generateMainServerConfig");var zee=9930;function Jee(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=ei.join(e,"clustering",Hl.NATS_CONFIG_FILES.HUB_SERVER),r=ei.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Kv.get(ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Hl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==zee?"-"+s:""),script:Qv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_c,i.error_file=_c),i}a(Jee,"generateNatsHubServerConfig");var Xee=9940;function Zee(){Qr.initSync(!0);let e=Qr.get(ue.CONFIG_PARAMS.ROOTPATH),t=ei.join(e,"clustering",Hl.NATS_CONFIG_FILES.LEAF_SERVER),r=ei.join(Qr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=Kv.get(ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Hl.LOG_LEVEL_FLAGS[Qr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Xee?"-"+s:""),script:Qv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=_c,i.error_file=_c),i}a(Zee,"generateNatsLeafServerConfig");function ete(){Qr.initSync();let e=ei.join(Qr.get(ue.CONFIG_PARAMS.LOGGING_ROOT),ue.LOG_NAMES.HDB),t={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Qee,autorestart:!1};return Qr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=_c,t.error_file=_c),t}a(ete,"generateClusteringUpgradeV4ServiceConfig");function tte(){let e={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.RESTART_HDB};return qE.noBootFile()&&(e[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=qE.getEnvCliRootPath()),{...{name:ue.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Wv},script:jee}}a(tte,"generateRestart");function rte(){return{apps:[jv()]}}a(rte,"generateAllServiceConfigs");zv.exports={generateAllServiceConfigs:rte,generateMainServerConfig:jv,generateRestart:tte,generateNatsHubServerConfig:Jee,generateNatsLeafServerConfig:Zee,generateClusteringUpgradeV4ServiceConfig:ete}});var dc=T((tRe,lB)=>{"use strict";var Ne=R(),ste=G(),ti=HE(),ql=st(),Tn=ke(),Qi=Jv(),FE=j(),ji=U(),nte=Zn(),{startWorker:Xv,onMessageFromWorkers:ite}=Qe(),ote=Xn(),eRe=require("util"),ate=require("child_process"),cte=require("fs"),{execFile:ute}=ate,Te;lB.exports={enterPM2Mode:lte,start:zi,stop:AR,reload:eB,restart:tB,list:OR,describe:sB,connect:ri,kill:hte,startAllServices:mte,startService:NR,getUniqueServicesList:nB,restartAllServices:pte,isServiceRegistered:iB,reloadStopStart:oB,restartHdb:rB,deleteProcess:fte,startClusteringProcesses:cB,startClusteringThreads:uB,isHdbRestartRunning:Ete,isClusteringRunning:Tte,stopClustering:Ste,reloadClustering:gte};var Gl=!1;ite(e=>{e.type==="restart"&&FE.initSync(!0)});function lte(){Gl=!0}a(lte,"enterPM2Mode");function ri(){return Te||(Te=require("pm2")),new Promise((e,t)=>{Te.connect((r,s)=>{ji.setupConsoleLogging(),r&&t(r),e(s)})})}a(ri,"connect");var Or,_te=10,Zv;function zi(e,t=!1){if(Gl)return dte(e);let r=ute(e.script,e.args.split(" "),e);r.name=e.name,r.on("exit",async i=>{let o=Or.indexOf(r);o>-1&&Or.splice(o,1),!Zv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<_te&&(cte.existsSync(ti.getHubConfigPath())?zi(e):(await ti.generateNatsConfig(!0),zi(e),await new Promise(c=>setTimeout(c,3e3)),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF))))});let s={serviceName:e.name.replace(/ /g,"-")};function n(i){let o=FE.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?ji.OUTPUTS.STDERR:ji.OUTPUTS.STDOUT;ji.logCustomLevel(l||"info",E,s,i.slice(_,u.index).trim())}let[d,f]=u;_=u.index+d.length,l=Tn.LOG_LEVELS[f]}if(Tn.LOG_LEVEL_HIERARCHY[o]>=Tn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===Tn.LOG_LEVELS.ERR||l===Tn.LOG_LEVELS.WRN?ji.OUTPUTS.STDERR:ji.OUTPUTS.STDOUT;ji.logCustomLevel(l||"info",d,s,i.slice(_).trim())}}if(a(n,"extractMessages"),r.stdout.on("data",n),r.stderr.on("data",n),r.unref(),Or=[],!Or&&!t){let i=a(()=>{Zv=!0,Or&&(Or.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)}Or.push(r)}a(zi,"start");function dte(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.start(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(dte,"startWithPM2");function AR(e){if(!Gl){for(let t of Or||[])t.name===e&&(Or.splice(Or.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.stop(e,async(s,n)=>{s&&(Te.disconnect(),r(s)),Te.delete(e,(i,o)=>{i&&(Te.disconnect(),r(s)),Te.disconnect(),t(o)})})})}a(AR,"stop");function eB(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.reload(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(eB,"reload");function tB(e){if(!Gl)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.restart(e,(s,n)=>{Te.disconnect(),t(n)})})}a(tB,"restart");function fte(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.delete(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(fte,"deleteProcess");async function rB(){await zi(Qi.generateRestart())}a(rB,"restartHdb");async function Ete(){let e=await OR();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Ete,"isHdbRestartRunning");function OR(){return new Promise(async(e,t)=>{try{await ri()}catch(r){t(r)}Te.list((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(OR,"list");function sB(e){return new Promise(async(t,r)=>{try{await ri()}catch(s){r(s)}Te.describe(e,(s,n)=>{s&&(Te.disconnect(),r(s)),Te.disconnect(),t(n)})})}a(sB,"describe");function hte(){if(!Gl){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ri()}catch(r){t(r)}Te.killDaemon((r,s)=>{r&&(Te.disconnect(),t(r)),Te.disconnect(),e(s)})})}a(hte,"kill");async function mte(){try{await cB(),await uB(),await zi(Qi.generateAllServiceConfigs())}catch(e){throw Te?.disconnect(),e}}a(mte,"startAllServices");async function NR(e,t=!1){try{let r;switch(e=e.toLowerCase(),e){case Ne.PROCESS_DESCRIPTORS.HDB.toLowerCase():r=Qi.generateMainServerConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():r=Qi.generateNatsIngestServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():r=Qi.generateNatsReplyServiceConfig();break;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():r=Qi.generateNatsHubServerConfig(),await zi(r,t),await ti.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():r=Qi.generateNatsLeafServerConfig(),await zi(r,t),await ti.removeNatsConfig(e);return;case Ne.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():r=Qi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await zi(r)}catch(r){throw Te?.disconnect(),r}}a(NR,"startService");async function nB(){try{let e=await OR(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw Te?.disconnect(),e}}a(nB,"getUniqueServicesList");async function pte(e=[]){try{let t=!1,r=await nB();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ne.PROCESS_DESCRIPTORS.HDB?t=!0:await tB(o))}t&&await oB(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Te?.disconnect(),t}}a(pte,"restartAllServices");async function iB(e){if(Or?.find(r=>r.name===e))return!0;let t=await ote.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(iB,"isServiceRegistered");async function oB(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?FE.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):FE.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await sB(e),s=ste.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await AR(e),await NR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await rB():await eB(e)}a(oB,"reloadStopStart");var aB;async function cB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await NR(r,e)}}a(cB,"startClusteringProcesses");async function uB(){aB=Xv(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await ql.createWorkQueueStream(Tn.WORK_QUEUE_CONSUMER_NAMES),await ql.updateIngestStreamConsumer(),await ql.updateLocalStreams();let e=await nte.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ne.PRE_4_0_0_VERSION){ji.info("Starting clustering upgrade 4.0.0 process"),Xv(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(uB,"startClusteringThreads");async function Ste(){for(let e in Ne.CLUSTERING_PROCESSES)if(e!==Ne.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ne.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await aB.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await AR(t)}}a(Ste,"stopClustering");async function Tte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await iB(t)===!1)return!1}return!0}a(Tte,"isClusteringRunning");async function gte(){await ti.generateNatsConfig(!0),await ql.reloadNATSHub(),await ql.reloadNATSLeaf(),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ti.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(gte,"reloadClustering")});var jo=T((sRe,pB)=>{"use strict";var Rte=require("minimist"),{isMainThread:IR,parentPort:fB}=require("worker_threads"),Xe=R(),{PROCESS_DESCRIPTORS_VALIDATE:Fl}=Xe,gn=U(),wR=G(),xE=HE(),fc=st(),bR=ke(),EB=rt(),Rn=dc(),_B=Xn(),Ate=ho(),{restartWorkers:kE,onMessageByType:Ote}=Qe(),{handleHDBError:Nte,hdb_errors:bte}=Z(),{HTTP_STATUS_CODES:yte}=bte,$E=j();$E.initSync();var xl=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,Ite="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",dB="Clustering is not enabled so cannot be restarted",wte="Invalid service",Ec,Es;pB.exports={restart:hB,restartService:CR};IR&&Ote(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?CR({service:e.workerType}):hB({operation:"restart"})});async function hB(e){Es=Object.keys(e).length===0,Ec=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=Rte(process.argv);if(t.service){await CR(t);return}if(Es&&!Ec){console.error(Ite);return}if(Es&&console.log(xl),Ec){Rn.enterPM2Mode(),gn.notify(xl);let r=Ate(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return wR.isEmptyOrZeroLength(Object.keys(r))||EB.updateConfigValue(void 0,void 0,r,!0,!0),Lte(),xl}return IR?(gn.notify(xl),setTimeout(()=>{kE()},50)):fB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),xl}a(hB,"restart");async function CR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Nte(new Error,wte,yte.BAD_REQUEST,void 0,void 0,!0);if(Ec=await Rn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!IR)return fB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Fl.clustering:if(!$E.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dB;break}Es&&console.log("Restarting clustering"),gn.notify("Restarting clustering"),await mB();break;case Fl.clustering_config:case Fl["clustering config"]:if(!$E.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=dB;break}Es&&console.log("Restarting clustering_config"),gn.notify("Restarting clustering_config"),await Rn.reloadClustering();break;case"custom_functions":case"custom functions":case Fl.harperdb:case Fl.http_workers:if(Es&&!Ec){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}Es&&console.log("Restarting http_workers"),gn.notify("Restarting http_workers"),Es?await Rn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{kE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(gn.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(CR,"restartService");async function Cte(){await fc.publishToStream(`${bR.SUBJECT_PREFIXES.TXN}.${bR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,bR.WORK_QUEUE_CONSUMER_NAMES.stream_name,fc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Cte,"postDummyNatsMsg");async function Lte(){await mB(),await Rn.restart(Xe.HDB_PROC_DESCRIPTOR),await wR.async_set_timeout(2e3),$E.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await yR(),Es&&(await fc.closeConnection(),process.exit(0))}a(Lte,"restartPM2Mode");async function mB(){if(!EB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await _B.getHDBProcessInfo()).clustering.length===0)gn.trace("Clustering not running, restart will start clustering services"),await xE.generateNatsConfig(!0),await Rn.startClusteringProcesses(),await Rn.startClusteringThreads(),await yR(),Es&&await fc.closeConnection();else{await Cte(),await xE.generateNatsConfig(!0),Ec?(gn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await _B.getHDBProcessInfo()).clustering.forEach(n=>{gn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await wR.async_set_timeout(3e3),await yR(),await fc.updateLocalStreams(),Es&&await fc.closeConnection(),gn.trace("Restart clustering restarting ingest and reply service threads");let t=kE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=kE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(mB,"restartClustering");async function yR(){await xE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(yR,"removeNatsConfig")});var wB=T((oRe,IB)=>{"use strict";var iRe=require("lodash"),Nr=R(),{handleHDBError:SB,hdb_errors:Dte}=Z(),{HDB_ERROR_MSGS:Pte,HTTP_STATUS_CODES:Mte}=Dte,LR=U();IB.exports={getRolePermissions:vte};var zo=Object.create(null),Ute=a(e=>({key:e,perms:{}}),"perms_template_obj"),AB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),OB=a((e=!1,t=!1,r=!1,s=!1)=>({[Nr.PERMS_CRUD_ENUM.READ]:e,[Nr.PERMS_CRUD_ENUM.INSERT]:t,[Nr.PERMS_CRUD_ENUM.UPDATE]:r,[Nr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),DR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...OB(t,r,s,n)}),"table_perms_template"),TB=a((e,t=OB())=>({attribute_name:e,describe:yB(t),[kl]:t[kl],[PR]:t[PR],[MR]:t[MR]}),"attr_perms_template"),gB=a((e,t=!1)=>({attribute_name:e,describe:t,[kl]:t}),"timestamp_attr_perms_template"),{READ:kl,INSERT:PR,UPDATE:MR}=Nr.PERMS_CRUD_ENUM,NB=Object.values(Nr.PERMS_CRUD_ENUM),bB=[kl,PR,MR];function vte(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[Nr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(zo[t]&&zo[t].key===s)return zo[t].perms;let n=Bte(e,r);return zo[t]?zo[t].key=s:zo[t]=Ute(s),zo[t].perms=n,n}catch(r){if(!e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Nr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Nr.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw LR.error(s),LR.debug(r),SB(new Error,Pte.OUTDATED_PERMS_TRANSLATION_ERROR,Mte.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
12
+ ${r.stack}`;throw LR.error(s),SB(new Error)}}}a(vte,"getRolePermissions");function Bte(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Nr.SYSTEM_SCHEMA_NAME]=s[Nr.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=Hte(t[i]);return}r[i]=AB(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(o=>{if(s[i].tables[o]){let c=s[i].tables[o],u=t[i][o],_=qte(c,u);r[i].describe||NB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=DR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=DR()})}),r}a(Bte,"translateRolePermissions");function Hte(e){let t=AB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=DR(!0,!0,!0,!0,!0)}),t}a(Hte,"createStructureUserPermissions");function qte(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((_,l)=>{let{attribute_name:d}=l,f=l;return Nr.TIME_STAMP_NAMES.includes(d)&&(f=gB(d,l[kl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=TB(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=yB(l),n.attribute_permissions.push(l),c||Gte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=gB(_):l=TB(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=RB(n),n}else return e.describe=RB(e),e}a(qte,"getTableAttrPerms");function RB(e){return NB.filter(t=>e[t]).length>0}a(RB,"getSchemaTableDescribePerm");function yB(e){return bB.filter(t=>e[t]).length>0}a(yB,"getAttributeDescribePerm");function Gte(e,t){bB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Gte,"checkForHashPerms")});var CB={};Fe(CB,{Headers:()=>Ji});var Ji,VE=Re(()=>{Ji=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 s=t.toLowerCase();if(!super.has(s))return super.set(s,[t,r])}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var $l={};Fe($l,{authentication:()=>HB,bypassAuth:()=>Kte,login:()=>Qte,logout:()=>jte,start:()=>Wte});function Kte(){BB=!0}async function HB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];try{if(i){let E=e.isOperationsServer?$te?kte:[]:xte?Fte:[];if(E.includes(i)||E.includes("*")){if(e.method==="OPTIONS"){let h=new Ji([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return YE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),YE&&o.push("Access-Control-Allow-Credentials","true")}}let u,_;if(YE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let m=n.indexOf(";",h),S=n.indexOf("=",h);u=n.slice(S+1,m===-1?n.length:m),_=await DB.get(u)}e.session=_||(_={})}e.user=null;let l=a((E,h,m)=>{let S=new WE.AuthAuditLog(E,h,qt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=m,u&&(S.session_id=u),r.referer&&(S.referer=r.referer),r.origin&&(S.origin=r.origin),h===qt.AUTH_AUDIT_STATUS.SUCCESS?LB.notify(S):LB.error(S)},"authAuditLog"),d;if(s){if(d=Jo.get(s),!d){let[E,h]=s.split(" "),m,S;try{switch(E){case"Basic":[m,S]=atob(h).split(":"),d=m||S?await Tt.getUser(m,S):null;break;case"Bearer":try{d=await(0,KE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,KE.validateRefreshToken)(h),c({status:-1})}catch{throw A}}break}}catch(A){return Yte&&(Jo.get(h)||(Jo.set(h,h),l(m,qt.AUTH_AUDIT_STATUS.FAILURE,E))),c({status:401,body:Xi({error:A.message},e)})}Jo.set(s,d),Vte&&l(d.username,qt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=d}else _?.user?e.user=await Tt.getUser(_.user,null,!1):BB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,MB.getSuperUser)());YE&&(e.session.update=function(E){if(!u){u=(0,UB.v4)();let m=`${(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",m):f?.headers?.set&&f.headers.set("Set-Cookie",m)}return e.protocol==="https"&&(o?(i&&o.push("Access-Control-Expose-Headers","X-Hdb-Session"),o.push("X-Hdb-Session","Secure")):f?.headers?.set&&(i&&f.headers.set("Access-Control-Expose-Headers","X-Hdb-Session"),f.headers.set("X-Hdb-Session","Secure"))),E.id=u,DB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),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 f=await t(e);return f&&(f.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Ci.loginPath?(f.status=302,f.headers.set("Location",Ci.loginPath(e))):f.headers.set("WWW-Authenticate","Basic")),c(f))}catch(u){throw c(u)}function c(u){let _=o.length;if(_>0){let l=u.headers;l||(u.headers=l=new Ji);for(let d=0;d<_;){let f=o[d++];l.set(f,o[d++])}}return o=null,u}a(c,"applyResponseHeaders")}function Wte({server:e,port:t}){e.request(HB,{port:t||"all"}),PB||(PB=!0,setInterval(()=>{Jo=new Map},hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),vB.user.addListener(()=>{Jo=new Map}))}async function Qte(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 jte(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var MB,KE,UB,hs,qt,WE,vB,LB,Fte,xte,kte,$te,DB,YE,BB,Vte,Yte,Jo,PB,QE=Re(()=>{MB=D(Er());Pr();_u();KE=D(Ol());Ee();UB=require("uuid"),hs=D(j()),qt=D(R()),WE=D(U()),vB=D(zu());VE();hc();LB=(0,WE.loggerWithTag)("auth-event");hs.initSync();Fte=hs.get(qt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),xte=hs.get(qt.CONFIG_PARAMS.HTTP_CORS),kte=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$te=hs.get(qt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),DB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),YE=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,BB=hs.get(qt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Vte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Yte=hs.get(qt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Jo=new Map;Tt.onInvalidatedUser(()=>{Jo=new Map});a(Kte,"bypassAuth");a(HB,"authentication");a(Wte,"start");a(Qte,"login");a(jte,"logout")});var VB=T((hRe,$B)=>{"use strict";var ge=require("joi"),qB=require("fs-extra"),GB=require("path"),ni=Ve(),FB=j(),xB=R(),kB=U(),{hdb_errors:zte}=Z(),{HDB_ERROR_MSGS:Xt}=zte,si=/^[a-zA-Z0-9-_]+$/;$B.exports={getDropCustomFunctionValidator:Xte,setCustomFunctionValidator:Zte,addComponentValidator:sre,dropCustomFunctionProjectValidator:nre,packageComponentValidator:ire,deployComponentValidator:ore,setComponentFileValidator:ere,getComponentFileValidator:rre,dropComponentFileValidator:tre};function jE(e,t,r){try{let s=FB.get(xB.CONFIG_PARAMS.COMPONENTSROOT),n=GB.join(s,t);return qB.existsSync(n)?e?t:r.message(Xt.PROJECT_EXISTS):e?r.message(Xt.NO_PROJECT):t}catch(s){return kB.error(s),r.message(Xt.VALIDATION_ERR)}}a(jE,"checkProjectExists");function Vl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Vl,"checkFilePath");function Jte(e,t,r,s){try{let n=FB.get(xB.CONFIG_PARAMS.COMPONENTSROOT),i=GB.join(n,e,t,r+".js");return qB.existsSync(i)?r:s.message(Xt.NO_FILE)}catch(n){return kB.error(n),s.message(Xt.VALIDATION_ERR)}}a(Jte,"checkFileExists");function Xte(e){let t=ge.object({project:ge.string().pattern(si).custom(jE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().pattern(si).custom(Jte.bind(null,e.project,e.type)).custom(Vl).required().messages({"string.pattern.base":Xt.BAD_FILE_NAME})});return ni.validateBySchema(e,t)}a(Xte,"getDropCustomFunctionValidator");function Zte(e){let t=ge.object({project:ge.string().pattern(si).custom(jE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),type:ge.string().valid("helpers","routes").required(),file:ge.string().custom(Vl).required(),function_content:ge.string().required()});return ni.validateBySchema(e,t)}a(Zte,"setCustomFunctionValidator");function ere(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom(Vl).required(),payload:ge.string().allow("").optional(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ni.validateBySchema(e,t)}a(ere,"setComponentFileValidator");function tre(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),file:ge.string().custom(Vl).optional()});return ni.validateBySchema(e,t)}a(tre,"dropComponentFileValidator");function rre(e){let t=ge.object({project:ge.string().required(),file:ge.string().custom(Vl).required(),encoding:ge.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return ni.validateBySchema(e,t)}a(rre,"getComponentFileValidator");function sre(e){let t=ge.object({project:ge.string().pattern(si).custom(jE.bind(null,!1)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return ni.validateBySchema(e,t)}a(sre,"addComponentValidator");function nre(e){let t=ge.object({project:ge.string().pattern(si).custom(jE.bind(null,!0)).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME})});return ni.validateBySchema(e,t)}a(nre,"dropCustomFunctionProjectValidator");function ire(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),skip_node_modules:ge.boolean()});return ni.validateBySchema(e,t)}a(ire,"packageComponentValidator");function ore(e){let t=ge.object({project:ge.string().pattern(si).required().messages({"string.pattern.base":Xt.BAD_PROJECT_NAME}),payload:ge.string().optional().messages({"string.pattern.base":Xt.BAD_PACKAGE}),package:ge.string().optional()});return ni.validateBySchema(e,t)}a(ore,"deployComponentValidator")});var ZE=T((pRe,JB)=>{"use strict";var zE=require("joi"),JE=require("path"),YB=require("fs-extra"),{exec:are}=require("child_process"),cre=require("util"),KB=cre.promisify(are),Yl=R(),{handleHDBError:mc,hdb_errors:ure}=Z(),{HTTP_STATUS_CODES:pc}=ure,Kl=j(),lre=Ve(),Sc=U();Kl.initSync();var UR=Kl.get(Yl.CONFIG_PARAMS.COMPONENTSROOT),WB="npm install --omit=dev --json",_re=`${WB} --dry-run`;JB.exports={installModules:hre,auditModules:mre,installAllRootModules:dre,uninstallRootModule:fre,linkHarperdb:Ere};async function dre(e=!1){await XE(),await Wl(e?"npm install --ignore-scripts":"npm install",Kl.get(Yl.CONFIG_PARAMS.ROOTPATH))}a(dre,"installAllRootModules");async function fre(e){await Wl(`npm uninstall ${e}`,Kl.get(Yl.CONFIG_PARAMS.ROOTPATH))}a(fre,"uninstallRootModule");async function Ere(){await XE(),await Wl(`npm link ${Yl.PACKAGE_ROOT}`,Kl.get(Yl.CONFIG_PARAMS.ROOTPATH))}a(Ere,"linkHarperdb");async function Wl(e,t=void 0){let r,s;try{({stdout:r,stderr:s}=await KB(e,{cwd:t}))}catch(n){throw new Error(n.stderr.replace(`
13
+ `,""))}return s&&!s.includes("Debugger listening")&&Sc.error("Error running NPM command:",e,s),Sc.trace(r,s),r.replace(`
14
+ `,"")}a(Wl,"runCommand");async function hre(e){Sc.info(`starting installModules for request: ${e}`);let t=zB(e);if(t)throw mc(t,t.message,pc.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?_re:WB;await XE(),await jB(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let _=JE.join(UR,u),l,d=null;try{let{stdout:f,stderr:E}=await KB(n,{cwd:_});l=f?f.replace(`
15
15
  `,""):null,d=E?E.replace(`
16
- `,""):null}catch(f){f.stderr?i[u].npm_error=jB(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return pc.info(`finished installModules with response ${i}`),i}a(mre,"installModules");function jB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
17
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(jB,"parseNPMStdErr");async function pre(e){pc.info(`starting auditModules for request: ${e}`);let t=JB(e);if(t)throw hc(t,t.message,mc.BAD_REQUEST);let{projects:r}=e;await JE(),await zB(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=zE.join(vR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Kl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=jB(u.stderr)}}return pc.info(`finished auditModules with response ${s}`),s}a(pre,"auditModules");async function JE(){try{return await Kl("npm -v"),!0}catch{throw hc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",mc.BAD_REQUEST,void 0,void 0,!0)}}a(JE,"checkNPMInstalled");async function zB(e){if(!Array.isArray(e)||e.length===0)throw hc(new Error,"projects argument must be an array with at least 1 element",mc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=zE.join(vR,i.toString());if(!await KB.pathExists(o)){t.push(i);continue}let u=zE.join(o,"package.json");await KB.pathExists(u)||r.push(i)}if(t.length>0)throw hc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,mc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw hc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,mc.BAD_REQUEST,void 0,void 0,!0)}a(zB,"checkProjectPaths");function JB(e){let t=jE.object({projects:jE.array().min(1).items(jE.string()).required(),dry_run:jE.boolean().default(!1)});return _re.validateBySchema(e,t)}a(JB,"modulesValidator")});var HR=T((gRe,sH)=>{"use strict";var Sc=require("fs-extra"),BR=require("path"),ZE=v(),ZB=G(),eh=R(),rH=j(),Sre=rt();sH.exports=Tre;async function Tre(){let e=gre(),t=rH.get(eh.CONFIG_PARAMS.ROOTPATH),r=BR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+eh.PACKAGE_ROOT}},n=BR.join(t,"node_modules");await Sc.ensureDir(n);let i,o=!0,c=!1;try{i=await Sc.readJson(r)}catch(u){if(ZB.isEmptyOrZeroLength(e))return;if(u.code!==eh.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!ZB.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await eH(_);s.dependencies[u]=l+_}if(!o){ZE.notify("Installing components"),await tH(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await eH(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(ZE.notify("Removing component",u),c=!0);c&&(ZE.notify("Updating components."),await tH(r,s,i))}a(Tre,"installComponents");function gre(){let e=Sre.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(gre,"getComponentsConfig");async function eH(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":BR.extname(e)||await Sc.pathExists(e)?"file:":"github:"}a(eH,"getPkgPrefix");async function tH(e,t,r){ZE.trace("npm installing components package.json",t),await Sc.writeFile(e,JSON.stringify(t,null," "));try{await XE().installAllRootModules(rH.get(eh.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Sc.writeFile(e,JSON.stringify(r,null," ")):await Sc.unlink(e),s}}a(tH,"installPackages")});var th=T((ORe,aH)=>{"use strict";var Ue=require("fs-extra"),qR=require("fast-glob"),de=require("path"),iH=require("tar-fs"),ARe=require("uuid").v4,GR=require("normalize-path"),An=YB(),wt=v(),qe=R(),dt=j(),Wl=rt(),Rre=G(),{PACKAGE_ROOT:Are}=R(),{handleHDBError:Ct,hdb_errors:Ore}=Z(),{basename:Nre}=require("path"),bre=HR(),oH=j(),yre=R(),{Readable:Ire}=require("stream"),{isMainThread:wre}=require("worker_threads"),{HDB_ERROR_MSGS:Jo,HTTP_STATUS_CODES:Lt}=Ore,Cre=de.join(Are,"application-template"),nH=de.join(dt.get(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Lre(){wt.trace("getting custom api status");let e={};try{e={port:dt.get(qe.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ct(new Error,Jo.FUNCTION_STATUS,Lt.INTERNAL_SERVER_ERROR,wt.ERR,t)}return e}a(Lre,"customFunctionsStatus");function Dre(){wt.trace("getting custom api endpoints");let e={},t=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT);try{qR.sync(GR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:qR.sync(GR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qR.sync(GR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ct(new Error,Jo.GET_FUNCTIONS,Lt.INTERNAL_SERVER_ERROR,wt.ERR,r)}return e}a(Dre,"getCustomFunctions");function Pre(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);wt.trace("getting custom api endpoint file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=de.join(r,s,n,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ct(new Error,Jo.GET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(Pre,"getCustomFunction");function Mre(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=An.setCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);wt.trace("setting custom function file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Ue.outputFileSync(de.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ct(new Error,Jo.SET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,wt.ERR,c)}}a(Mre,"setCustomFunction");function Ure(e){e.project&&(e.project=de.parse(e.project).name),e.file&&(e.file=de.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);wt.trace("dropping custom function file");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Ue.unlinkSync(de.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ct(new Error,Jo.DROP_FUNCTION,Lt.INTERNAL_SERVER_ERROR,wt.ERR,o)}}a(Ure,"dropCustomFunction");function vre(e){e.project&&(e.project=de.parse(e.project).name);let t=An.addComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);wt.trace("adding component");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=de.join(r,s);return Ue.mkdirSync(n,{recursive:!0}),Ue.copySync(Cre,n),`Successfully added project: ${s}`}catch(n){throw Ct(new Error,Jo.ADD_FUNCTION,Lt.INTERNAL_SERVER_ERROR,wt.ERR,n)}}a(vre,"addComponent");function Bre(e){e.project&&(e.project=de.parse(e.project).name);let t=An.dropCustomFunctionProjectValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);wt.trace("dropping custom function project");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(qe.CONFIG_PARAMS.APPS);if(!Rre.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Wl.updateConfigValue(qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=de.join(r,s);return Ue.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Ct(new Error,Jo.DROP_FUNCTION_PROJECT,Lt.INTERNAL_SERVER_ERROR,wt.ERR,i)}}a(Bre,"dropCustomFunctionProject");async function Hre(e){e.project&&(e.project=de.parse(e.project).name);let t=An.packageComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;wt.trace("packaging component",s);let n;try{n=await Ue.realpath(de.join(r,s))}catch(u){if(u.code!==qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ue.realpath(de.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ue.ensureDir(nH);let i=de.join(nH,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(de.join(n,"node_modules"))}),iH.pack(n,o).pipe(Ue.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ue.readFileSync(i,{encoding:"base64"});return await Ue.remove(i),{project:s,payload:c}}a(Hre,"packageComponent");async function qre(e){e.project&&(e.project=de.parse(e.project).name);let t=An.deployComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(wt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=de.join(r,s),i="file:"+o,await Ue.ensureDir(o);let f=Ire.from(Buffer.from(n,"base64"));await new Promise((h,m)=>{f.pipe(iH.extract(o,{finish:h})).on("error",m)});let E=await Ue.readdir(o);E.length===1&&E[0]==="package"&&(await Ue.copy(de.join(o,"package"),o),await Ue.remove(de.join(o,"package")))}if(await Wl.addConfig(s,{package:i}),!n){await bre();let f=oH.get(yre.CONFIG_PARAMS.ROOTPATH);o=de.join(f,"node_modules",s)}if(wre)return;let c=new Map;c.isWorker=!0;let u=(sh(),te(rh)),_;u.setErrorReporter(f=>_=f);let l=Nre(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return wt.info("Installed component"),`Successfully deployed: ${s}`}a(qre,"deployComponent");async function Gre(){let e=Wl.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{let u=await Ue.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=de.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ue.stat(d),E={name:de.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT).split(de.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(de.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(sh(),te(rh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(Gre,"getComponents");async function Fre(e){let t=An.getComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let s=Wl.getConfigObj()[e.project]||e.project==="harperdb"?de.join(oH.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ue.stat(de.join(s,e.project,e.file));return{message:await Ue.readFile(de.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${de.join(e.project,e.file)}'`):i}}a(Fre,"getComponentFile");async function xre(e){let t=An.setComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=de.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ue.ensureFile(s),await Ue.outputFile(s,e.payload,r)):await Ue.ensureDir(s),"Successfully set component: "+e.file}a(xre,"setComponentFile");async function kre(e){let t=An.dropComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.file?de.join(e.project,e.file):e.project,s=de.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ue.pathExists(s)&&await Ue.remove(s),Wl.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(kre,"dropComponent");aH.exports={customFunctionsStatus:Lre,getCustomFunctions:Dre,getCustomFunction:Pre,setCustomFunction:Mre,dropCustomFunction:Ure,addComponent:vre,dropCustomFunctionProject:Bre,packageComponent:Hre,deployComponent:qre,getComponents:Gre,getComponentFile:Fre,setComponentFile:xre,dropComponent:kre}});var FR=T((bRe,uH)=>{"use strict";var On=require("joi"),cH=Ve();uH.exports={readTransactionLogValidator:$re,deleteTransactionLogsBeforeValidator:Vre};function $re(e){let t=On.object({schema:On.string().required(),table:On.string().required(),from:On.date().timestamp(),to:On.date().timestamp(),limit:On.number().min(1)});return cH.validateBySchema(e,t)}a($re,"readTransactionLogValidator");function Vre(e){let t=On.object({schema:On.string().required(),table:On.string().required(),timestamp:On.date().timestamp().required()});return cH.validateBySchema(e,t)}a(Vre,"deleteTransactionLogsBeforeValidator")});var ih=T((IRe,EH)=>{"use strict";var xR=R(),nh=st(),lH=G(),_H=j(),dH=Wn(),{handleHDBError:Tc,hdb_errors:Yre}=Z(),{HTTP_STATUS_CODES:gc}=Yre,{readTransactionLogValidator:Kre,deleteTransactionLogsBeforeValidator:Wre}=FR(),fH="This operation relies on clustering and cannot run with it disable.",Qre="Logs successfully deleted from transaction log.",jre="All logs successfully deleted from transaction log.";EH.exports={readTransactionLog:zre,deleteTransactionLogsBefore:Jre};async function*zre(e){let t=Kre(e);if(t)throw Tc(t,t.message,gc.BAD_REQUEST,void 0,void 0,!0);if(!_H.get(xR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Tc(new Error,fH,gc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=lH.checkSchemaTableExist(r,s);if(n)throw Tc(new Error,n,gc.NOT_FOUND,void 0,void 0,!0);let i=dH.createNatsTableStreamName(r,s),o=await nh.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===xR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(zre,"readTransactionLog");async function Jre(e){let t=Wre(e);if(t)throw Tc(t,t.message,gc.BAD_REQUEST,void 0,void 0,!0);if(!_H.get(xR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Tc(new Error,fH,gc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=lH.checkSchemaTableExist(r,s);if(i)throw Tc(new Error,i,gc.NOT_FOUND,void 0,void 0,!0);let o=dH.createNatsTableStreamName(r,s),{jsm:c}=await nh.getNATSReferences(),u=await nh.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=Qre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=jre):d=(await nh.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(Jre,"deleteTransactionLogsBefore")});var mH=T((CRe,hH)=>{"use strict";var kR=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};hH.exports=kR});var SH=T((DRe,pH)=>{"use strict";var $R=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};pH.exports=$R});var YR=T((MRe,gH)=>{"use strict";var TH=mH(),Xre=SH(),{HDB_ERROR_MSGS:Zre}=Mr(),VR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Zre.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new TH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Xre(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new TH(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};gH.exports=VR});var uh=T((vRe,BH)=>{"use strict";var KR=dr(),oh=_r(),ps=Xf(),zl=Mi(),WR=Uo(),ese=mg(),tse=UM(),Jl=Er(),ah=sE(),At=v(),rse=Ig(),sse=yl(),nse=oR(),ise=gE(),ose=AE(),ase=aR(),cse=bE(),use=IE(),QR=CE(),ni=G(),lse=Lv(),jR=DE(),OH=Qo(),ms=R(),NH=CB(),_se=Jn(),bH=Al(),yH=(WE(),te(kl)),IH=rt(),jr=th(),dse=require("alasql"),wH=ih(),CH=XE(),LH=YR(),{handleHDBError:br,hdb_errors:DH}=Z(),{HDB_ERROR_MSGS:Gt,HTTP_STATUS_CODES:Ql}=DH,H=new Map,PH="delete",Xi="insert",ii="read",Xo="update",jl="describe",RH=zl.describeSchema.name,AH=zl.describeTable.name,MH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},fse="catchup",Ese="handleGetJob",hse="handleGetJobsByStartDate",ch={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},mse=[ps.createTable.name,ps.createAttribute.name,ps.dropTable.name,ps.dropAttribute.name],UH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},x=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};H.set(KR.insert.name,new x(!1,[Xi]));H.set(KR.update.name,new x(!1,[Xo]));H.set(KR.upsert.name,new x(!1,[Xi,Xo]));H.set(oh.searchByConditions.name,new x(!1,[ii]));H.set(oh.searchByHash.name,new x(!1,[ii]));H.set(oh.searchByValue.name,new x(!1,[ii]));H.set(oh.search.name,new x(!1,[ii]));H.set(ps.createSchema.name,new x(!0,[]));H.set(ps.createTable.name,new x(!0,[]));H.set(ps.createAttribute.name,new x(!1,[Xi]));H.set(ps.dropSchema.name,new x(!0,[]));H.set(ps.dropTable.name,new x(!0,[]));H.set(ps.dropAttribute.name,new x(!0,[]));H.set(zl.describeSchema.name,new x(!1,[ii]));H.set(zl.describeTable.name,new x(!1,[ii]));H.set(WR.deleteRecord.name,new x(!1,[PH]));H.set(Jl.addUser.name,new x(!0,[]));H.set(Jl.alterUser.name,new x(!0,[]));H.set(Jl.dropUser.name,new x(!0,[]));H.set(Jl.listUsersExternal.name,new x(!0,[]));H.set(ah.listRoles.name,new x(!0,[]));H.set(ah.addRole.name,new x(!0,[]));H.set(ah.alterRole.name,new x(!0,[]));H.set(ah.dropRole.name,new x(!0,[]));H.set(rse.name,new x(!0,[]));H.set(sse.name,new x(!0,[]));H.set(nse.name,new x(!0,[]));H.set(ise.name,new x(!0,[]));H.set(ose.name,new x(!0,[]));H.set(ase.name,new x(!0,[]));H.set(QR.setRoutes.name,new x(!0,[]));H.set(QR.getRoutes.name,new x(!0,[]));H.set(QR.deleteRoutes.name,new x(!0,[]));H.set(IH.setConfiguration.name,new x(!0,[]));H.set(cse.clusterStatus.name,new x(!0,[]));H.set(use.name,new x(!0,[]));H.set(jR.getFingerprint.name,new x(!0,[]));H.set(jR.setLicense.name,new x(!0,[]));H.set(WR.deleteFilesBefore.name,new x(!0,[]));H.set(WR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(OH.restart.name,new x(!0,[]));H.set(OH.restartService.name,new x(!0,[]));H.set(ese.name,new x(!0,[]));H.set(tse.name,new x(!0,[ii]));H.set(_se.systemInformation.name,new x(!0,[]));H.set(IH.getConfiguration.name,new x(!0,[]));H.set(wH.readTransactionLog.name,new x(!0,[]));H.set(wH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(CH.installModules.name,new x(!0,[]));H.set(CH.auditModules.name,new x(!0,[]));H.set(bH.createTokens.name,new x(!1,[]));H.set(bH.refreshOperationToken.name,new x(!1,[]));H.set(yH.login.name,new x(!1,[]));H.set(yH.logout.name,new x(!1,[]));H.set(jr.customFunctionsStatus.name,new x(!0,[]));H.set(jr.getCustomFunctions.name,new x(!0,[]));H.set(jr.getComponents.name,new x(!0,[]));H.set(jr.getComponentFile.name,new x(!0,[]));H.set(jr.setComponentFile.name,new x(!0,[]));H.set(jr.dropComponent.name,new x(!0,[]));H.set(jr.getCustomFunction.name,new x(!0,[]));H.set(jr.setCustomFunction.name,new x(!0,[]));H.set(jr.dropCustomFunction.name,new x(!0,[]));H.set(jr.addComponent.name,new x(!0,[]));H.set(jr.dropCustomFunctionProject.name,new x(!0,[]));H.set(jr.packageComponent.name,new x(!0,[]));H.set(jr.deployComponent.name,new x(!0,[]));H.set(jR.getRegistrationInfo.name,new x(!1,[]));H.set(Jl.userInfo.name,new x(!1,[]));H.set(zl.describeAll.name,new x(!1,[]));H.set(Ese,new x(!1,[]));H.set(hse,new x(!0,[]));H.set(fse,new x(!0,[]));H.set(ch.CSV_DATA_LOAD,new x(!1,[Xi,Xo]));H.set(ch.CSV_URL_LOAD,new x(!1,[Xi,Xo]));H.set(ch.CSV_FILE_LOAD,new x(!1,[Xi,Xo]));H.set(ch.IMPORT_FROM_S3,new x(!1,[Xi,Xo]));H.set(UH.EXPORT_TO_S3,new x(!0,[]));H.set(UH.EXPORT_LOCAL,new x(!0,[]));H.set(ms.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[PH]));H.set(ms.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[ii]));H.set(ms.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Xi]));H.set(ms.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Xo]));BH.exports={verifyPerms:Sse,verifyPermsAst:pse,verifyBulkLoadAttributePerms:gse};function pse(e,t,r){if(ni.isEmptyOrZeroLength(e))throw At.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(t))throw At.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(r))throw At.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new LH,n=new lse(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw At.info("No schemas defined in verifyPermsAst(), will not continue."),br(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&MH[r])throw br(new Error,Gt.DROP_SYSTEM,Ql.FORBIDDEN);if(c&&!u)return null;let _=NH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof dse.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=vH(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),m=JR(t.role.permission,f,d[E]);zR(h,m,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(pse,"verifyPermsAst");function Sse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw At.info("null required parameter in verifyPerms"),br(new Error,Gt.DEFAULT_INVALID_REQUEST,Ql.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new LH;if(ni.isEmptyOrZeroLength(e.hdb_user.role)||ni.isEmptyOrZeroLength(e.hdb_user.role.permission))return At.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Gt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(ms.SYSTEM_SCHEMA_NAME)||n===ms.SYSTEM_SCHEMA_NAME;if(l&&MH[r])throw br(new Error,Gt.DROP_SYSTEM,Ql.FORBIDDEN);if(u&&!l||_===!0&&(r===ps.createSchema.name||r===ps.dropSchema.name))return null;if(mse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=NH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RH||r===AH){if(n===ms.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Gt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RH&&(!d[n]||!d[n][jl]))return c.handleInvalidItem(Gt.SCHEMA_NOT_FOUND(n));if(r===AH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][jl]))return c.handleInvalidItem(Gt.TABLE_NOT_FOUND(n,i))}}let f=vH(e.hdb_user,r,o,c,s);if(f)return f;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&ms.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[n].tables[i];S[ms.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[ms.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=Tse(e),h=JR(e.hdb_user.role.permission,n,i);return zR(E,h,r,i,n,c,s),c.getPermsResponse()}a(Sse,"verifyPerms");function vH(e,t,r,s,n){if(ni.arrayHasEmptyValues([e,t,r]))throw At.info("hasPermissions has an invalid parameter"),br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||H.get(t).requires_su))return null;if(!H.get(t))throw At.info(`operation ${t} not found.`),br(new Error,Gt.OP_NOT_FOUND(t),Ql.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return At.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][jl]===!1){s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[jl]===!1)s.addInvalidItem(Gt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=H.get(t).perms;!ni.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(At.info(`Required ${m} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Gt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw At.error(E),At.error(f),br(DH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(vH,"hasPermissions");function zR(e,t,r,s,n,i,o){if(!e||!t)throw At.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw At.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(ni.isEmptyOrZeroLength(t))return At.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[jl]===!1){i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(ms.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ii)throw br(new Error,Gt.SYSTEM_TIMESTAMP_PERMS_ERR,Ql.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(zR,"checkAttributePerms");function Tse(e){let t=new Set;try{if(e.action)return t;if(e.operation===ms.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){At.info(r)}return t}a(Tse,"getRecordAttributes");function JR(e,t,r){let s=new Map;if(ni.isEmpty(e))return At.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{At.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(JR,"getAttributePermissions");function gse(e,t,r,s,n,i,o){let c=new Set(i),u=JR(e,s,n);zR(c,u,t,n,s,o,r)}a(gse,"verifyBulkLoadAttributePerms")});var _h=T((HRe,xH)=>{"use strict";xH.exports={evaluateSQL:Mse,processAST:FH,convertSQLToAST:GH,checkASTPermissions:qH};var Rse=dr(),HH=require("util"),Ase=HH.callbackify(Rse.insert),Ose=_r().search,Nse=KP().update,bse=HH.callbackify(Nse),yse=QP().convertDelete,Zi=require("alasql"),Ise=uh(),lh=v(),wse=Qd(),Cse=G(),Xl=R(),{hdb_errors:Lse,handleHDBError:XR}=Z(),{HTTP_STATUS_CODES:ZR}=Lse;wse(Zi);var Dse=403,Pse="There was a problem performing this insert. Please check the logs and try again.",eA=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Mse(e,t){let r=e.parsed_sql_object;if(!r){r=GH(e.sql);let s,n=r.ast.statements[0];if(n instanceof Zi.yy.Insert?s=n.into.databaseid:n instanceof Zi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Zi.yy.Update||n instanceof Zi.yy.Delete?s=n.table.databaseid:lh.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Zi.yy.Select)&&Cse.isEmptyOrZeroLength(s))return t("No schema specified",null)}FH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Mse,"evaluateSQL");function qH(e,t){let r;try{r=Ise.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(qH,"checkASTPermissions");function GH(e){let t=new eA;if(!e)throw XR(new Error,"The 'sql' parameter is missing from the request body",ZR.BAD_REQUEST);try{let r=e.trim(),s=Zi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
18
- `);throw s[1]?XR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ZR.BAD_REQUEST):XR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ZR.BAD_REQUEST)}return t}a(GH,"convertSQLToAST");function FH(e,t,r){try{let s=Use;if(!e.bypass_auth&&!t.permissions_checked){let i=qH(e,t);if(i&&i.length>0)return r(Dse,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Xl.VALID_SQL_OPS_ENUM.SELECT:s=Ose,n=t.ast.statements[0];break;case Xl.VALID_SQL_OPS_ENUM.INSERT:s=vse;break;case Xl.VALID_SQL_OPS_ENUM.UPDATE:s=bse;break;case Xl.VALID_SQL_OPS_ENUM.DELETE:s=yse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(FH,"processAST");function Use(e,t){lh.info(e),t("unknown sql statement")}a(Use,"nullFunction");function vse({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=Bse(i,e.values)}catch(o){return r(o)}Ase(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){lh.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(vse,"convertInsert");function Bse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Zi.compile(`SELECT ${n.toString()} AS [${Xl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw lh.error(r),new Error(Pse)}}a(Bse,"createDataObjects")});var tA=T((GRe,$H)=>{"use strict";var{S3:Hse,GetObjectCommand:qse}=require("@aws-sdk/client-s3");$H.exports={getFileStreamFromS3:Gse,getS3AuthObj:kH};async function Gse(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await kH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new qse(r))).Body}a(Gse,"getFileStreamFromS3");function kH(e,t,r){return new Hse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(kH,"getS3AuthObj")});var dh=T((xRe,ZH)=>{"use strict";var KH=_r(),Fse=_h(),xse=tA(),{AsyncParser:kse,Transform:$se}=require("json2csv"),e_=require("stream"),zr=G(),rA=require("fs-extra"),Vse=require("path"),Ss=v(),{promisify:WH}=require("util"),Zl=G(),{handleHDBError:ft,hdb_errors:Yse}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=Yse,{streamAsJSON:Kse}=tg(),{Upload:Wse}=require("@aws-sdk/lib-storage"),VH=["search_by_value","search_by_hash","sql"],YH=["json","csv"],QH="json",jH="csv",Qse="Successfully exported JSON locally.",jse="Successfully exported CSV locally.",zse=1e3,Jse=KH.searchByHash,Xse=KH.searchByValue,Zse=WH(Fse.evaluateSQL),ene=WH(e_.finished);ZH.exports={export_to_s3:nne,export_local:tne,toCsvStream:zH};async function tne(e){Ss.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=JH(e);if(!zr.isEmpty(t))throw Ss.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(zr.isEmpty(e.path))throw Ss.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(zr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Vse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=zr.buildFolderPath(e.path,r);await rne(e.path);let n=await XH(e);return await sne(s,e.format,n)}a(tne,"export_local");async function rne(e){if(Ss.trace("in confirmPath"),zr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await rA.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Ss.error(s),ft(new Error,s,Et.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Ss.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(rne,"confirmPath");async function sne(e,t,r){if(Ss.trace("in saveToLocal"),Zl.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(Zl.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(Zl.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===QH){let s=rA.createWriteStream(e);return Kse(r).pipe(s),await ene(s),{message:Qse,path:e}}else if(t===jH){let s=rA.createWriteStream(e),n=e_.Readable.from(r),i={},o={objectMode:!0};return await new kse(i,o).fromInput(n).toOutput(s).promise(!1),{message:jse,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(sne,"saveToLocal");async function nne(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=JH(e);if(!zr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);Ss.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XH(e)}catch(u){throw Ss.error(u),u}let s,n=await xse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new e_.PassThrough;if(e.format===jH){i=e.s3.key+".csv";let u=zH(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===QH){i=e.s3.key+".json";let u=new e_.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%zse===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST);return new Wse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(nne,"export_to_s3");function zH(e){let t=e_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new $se(r,s);return t.pipe(n)}a(zH,"toCsvStream");function JH(e){if(Ss.trace("in exportCoreValidation"),zr.isEmpty(e.format))return"format missing";if(YH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${YH.join(", ")}`;let t=e.search_operation.operation;if(zr.isEmpty(t))return"search_operation.operation missing";if(VH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${VH.join(", ")}`}a(JH,"exportCoreValidation");async function XH(e){Ss.trace("in getRecords");let t,r;if(Zl.isEmpty(e.search_operation)||Zl.isEmptyOrZeroLength(e.search_operation.operation))throw ft(new Error,yr.INVALID_VALUE("Search operation"),Et.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Xse;break;case"search_by_hash":t=Jse;break;case"sql":t=Zse;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ss.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XH,"getRecords")});var a0={};Fe(a0,{contentTypes:()=>nA,findBestSerializer:()=>hh,getDeserializer:()=>Rc,registerContentHandlers:()=>iA,serialize:()=>mh,serializeMessage:()=>Ji});function ine(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function iA(e){e.register(ane,{serializers:[{regex:/^application\/json$/,serializer:fh.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Zo.EncoderStream(t_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Eh.Readable.from((0,Nn.encodeIter)(t,t_)):(0,Nn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sA.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Nn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Zo.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function hh(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Ft.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "))}};s=Ft.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function mh(e,t,r){let s=t0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=hh(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,oi.createBrotliCompress)({params:{[oi.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?oi.constants.BROTLI_MODE_TEXT:oi.constants.BROTLI_MODE_GENERIC,[oi.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>t0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,oi.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ji(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=hh(t);return r=t.serialize=s.serializer.serialize,r(e)}function cne(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Rc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ft.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ft.get(e)?.deserialize||r0(e,s);return o=>cne(o).then(i)}return e&&Ft.get(e)?.deserialize||r0(e,s)}function r0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function une(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var fh,sA,Nn,Zo,oi,Eh,s0,n0,i0,t_,Ft,nA,e0,o0,one,ane,t0,Ec=Re(()=>{fh=D(tg()),sA=D(dh()),Nn=require("msgpackr"),Zo=require("cbor-x"),oi=require("zlib"),Eh=require("stream");Pr();s0=require("../index"),n0=D(j()),i0=D(R()),t_={useRecords:!1,useToJSON:!0},Ft=new Map,nA=Ft;Tt.contentTypes=nA;(0,s0._assignPackageExport)("contentTypes",nA);Ft.set("application/json",{serializeStream:fh.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});e0=new Zo.Encoder(t_);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zo.EncoderStream(t_).end(e)},serialize:e0.encode,deserialize:e0.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Eh.Readable.from((0,Nn.encodeIter)(e,t_)):(0,Nn.pack)(e)},serialize:Nn.pack,deserialize:Nn.unpack,q:.9});Ft.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,sA.toCsvStream)(e)},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ft.set("text/event-stream",{serializeStream:function(e){return Eh.Readable.from(une(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
16
+ `,""):null}catch(f){f.stderr?i[u].npm_error=QB(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(l)}catch{i[u].npm_output=l}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return Sc.info(`finished installModules with response ${i}`),i}a(hre,"installModules");function QB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
17
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(QB,"parseNPMStdErr");async function mre(e){Sc.info(`starting auditModules for request: ${e}`);let t=zB(e);if(t)throw mc(t,t.message,pc.BAD_REQUEST);let{projects:r}=e;await XE(),await jB(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=JE.join(UR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Wl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=QB(u.stderr)}}return Sc.info(`finished auditModules with response ${s}`),s}a(mre,"auditModules");async function XE(){try{return await Wl("npm -v"),!0}catch{throw mc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",pc.BAD_REQUEST,void 0,void 0,!0)}}a(XE,"checkNPMInstalled");async function jB(e){if(!Array.isArray(e)||e.length===0)throw mc(new Error,"projects argument must be an array with at least 1 element",pc.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=JE.join(UR,i.toString());if(!await YB.pathExists(o)){t.push(i);continue}let u=JE.join(o,"package.json");await YB.pathExists(u)||r.push(i)}if(t.length>0)throw mc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,pc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw mc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,pc.BAD_REQUEST,void 0,void 0,!0)}a(jB,"checkProjectPaths");function zB(e){let t=zE.object({projects:zE.array().min(1).items(zE.string()).required(),dry_run:zE.boolean().default(!1)});return lre.validateBySchema(e,t)}a(zB,"modulesValidator")});var BR=T((TRe,rH)=>{"use strict";var Tc=require("fs-extra"),vR=require("path"),eh=U(),XB=G(),th=R(),tH=j(),pre=rt();rH.exports=Sre;async function Sre(){let e=Tre(),t=tH.get(th.CONFIG_PARAMS.ROOTPATH),r=vR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+th.PACKAGE_ROOT}},n=vR.join(t,"node_modules");await Tc.ensureDir(n);let i,o=!0,c=!1;try{i=await Tc.readJson(r)}catch(u){if(XB.isEmptyOrZeroLength(e))return;if(u.code!==th.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!XB.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await ZB(_);s.dependencies[u]=l+_}if(!o){eh.notify("Installing components"),await eH(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await ZB(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(eh.notify("Removing component",u),c=!0);c&&(eh.notify("Updating components."),await eH(r,s,i))}a(Sre,"installComponents");function Tre(){let e=pre.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Tre,"getComponentsConfig");async function ZB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":vR.extname(e)||await Tc.pathExists(e)?"file:":"github:"}a(ZB,"getPkgPrefix");async function eH(e,t,r){eh.trace("npm installing components package.json",t),await Tc.writeFile(e,JSON.stringify(t,null," "));try{await ZE().installAllRootModules(tH.get(th.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Tc.writeFile(e,JSON.stringify(r,null," ")):await Tc.unlink(e),s}}a(eH,"installPackages")});var rh=T((ARe,oH)=>{"use strict";var Ue=require("fs-extra"),HR=require("fast-glob"),fe=require("path"),nH=require("tar-fs"),RRe=require("uuid").v4,qR=require("normalize-path"),An=VB(),At=U(),qe=R(),dt=j(),Ql=rt(),gre=G(),{PACKAGE_ROOT:Rre}=R(),{handleHDBError:Ct,hdb_errors:Are}=Z(),{basename:Ore}=require("path"),Nre=BR(),iH=j(),bre=R(),{Readable:yre}=require("stream"),{isMainThread:Ire}=require("worker_threads"),{HDB_ERROR_MSGS:Xo,HTTP_STATUS_CODES:Lt}=Are,wre=fe.join(Rre,"application-template"),sH=fe.join(dt.get(qe.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Cre(){At.trace("getting custom api status");let e={};try{e={port:dt.get(qe.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw Ct(new Error,Xo.FUNCTION_STATUS,Lt.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(Cre,"customFunctionsStatus");function Lre(){At.trace("getting custom api endpoints");let e={},t=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT);try{HR.sync(qR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:HR.sync(qR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:HR.sync(qR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw Ct(new Error,Xo.GET_FUNCTIONS,Lt.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(Lre,"getCustomFunctions");function Dre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=fe.join(r,s,n,i+".js");try{return Ue.readFileSync(o,{encoding:"utf8"})}catch(c){throw Ct(new Error,Xo.GET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(Dre,"getCustomFunction");function Pre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.setCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("setting custom function file content");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Ue.outputFileSync(fe.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw Ct(new Error,Xo.SET_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(Pre,"setCustomFunction");function Mre(e){e.project&&(e.project=fe.parse(e.project).name),e.file&&(e.file=fe.parse(e.file).name);let t=An.getDropCustomFunctionValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("dropping custom function file");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Ue.unlinkSync(fe.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw Ct(new Error,Xo.DROP_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(Mre,"dropCustomFunction");function Ure(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.addComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("adding component");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=fe.join(r,s);return Ue.mkdirSync(n,{recursive:!0}),Ue.copySync(wre,n),`Successfully added project: ${s}`}catch(n){throw Ct(new Error,Xo.ADD_FUNCTION,Lt.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(Ure,"addComponent");function vre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.dropCustomFunctionProjectValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);At.trace("dropping custom function project");let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(qe.CONFIG_PARAMS.APPS);if(!gre.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return Ql.updateConfigValue(qe.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=fe.join(r,s);return Ue.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw Ct(new Error,Xo.DROP_FUNCTION_PROJECT,Lt.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(vre,"dropCustomFunctionProject");async function Bre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.packageComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;At.trace("packaging component",s);let n;try{n=await Ue.realpath(fe.join(r,s))}catch(u){if(u.code!==qe.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ue.realpath(fe.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===qe.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ue.ensureDir(sH);let i=fe.join(sH,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(fe.join(n,"node_modules"))}),nH.pack(n,o).pipe(Ue.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ue.readFileSync(i,{encoding:"base64"});return await Ue.remove(i),{project:s,payload:c}}a(Bre,"packageComponent");async function Hre(e){e.project&&(e.project=fe.parse(e.project).name);let t=An.deployComponentValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=fe.join(r,s),i="file:"+o,await Ue.ensureDir(o);let f=yre.from(Buffer.from(n,"base64"));await new Promise((h,m)=>{f.pipe(nH.extract(o,{finish:h})).on("error",m)});let E=await Ue.readdir(o);E.length===1&&E[0]==="package"&&(await Ue.copy(fe.join(o,"package"),o),await Ue.remove(fe.join(o,"package")))}if(await Ql.addConfig(s,{package:i}),!n){await Nre();let f=iH.get(bre.CONFIG_PARAMS.ROOTPATH);o=fe.join(f,"node_modules",s)}if(Ire)return;let c=new Map;c.isWorker=!0;let u=(nh(),te(sh)),_;u.setErrorReporter(f=>_=f);let l=Ore(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return At.info("Installed component"),`Successfully deployed: ${s}`}a(Hre,"deployComponent");async function qre(){let e=Ql.getConfiguration(),t=[];for(let o in e)if(e[o]?.package){if(e[o].package.startsWith("file:"))continue;t.push(Object.assign({},e[o],{name:o}))}let r=a(async(o,c)=>{try{let u=await Ue.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=fe.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ue.stat(d),E={name:fe.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c}catch(u){return At.warn("Error loading package",u),{error:u.toString(),entries:[]}}},"walk_dir"),s=await r(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT).split(fe.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(fe.join(dt.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(nh(),te(sh)).component_errors;for(let o of t){let c=i.get(o.name);c?o.error=i.get(o.name):c===void 0&&(o.error="The component has not been loaded yet (may need a restart)")}return s}a(qre,"getComponents");async function Gre(e){let t=An.getComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let s=Ql.getConfigObj()[e.project]||e.project==="harperdb"?fe.join(iH.get(qe.CONFIG_PARAMS.ROOTPATH),"node_modules"):dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),n=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{let i=await Ue.stat(fe.join(s,e.project,e.file));return{message:await Ue.readFile(fe.join(s,e.project,e.file),n),size:i.size,birthtime:i.birthtime,mtime:i.mtime}}catch(i){throw i.code===qe.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${fe.join(e.project,e.file)}'`):i}}a(Gre,"getComponentFile");async function Fre(e){let t=An.setComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=fe.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ue.ensureFile(s),await Ue.outputFile(s,e.payload,r)):await Ue.ensureDir(s),"Successfully set component: "+e.file}a(Fre,"setComponentFile");async function xre(e){let t=An.dropComponentFileValidator(e);if(t)throw Ct(t,t.message,Lt.BAD_REQUEST);let r=e.file?fe.join(e.project,e.file):e.project,s=fe.join(dt.get(qe.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ue.pathExists(s)&&await Ue.remove(s),Ql.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(xre,"dropComponent");oH.exports={customFunctionsStatus:Cre,getCustomFunctions:Lre,getCustomFunction:Dre,setCustomFunction:Pre,dropCustomFunction:Mre,addComponent:Ure,dropCustomFunctionProject:vre,packageComponent:Bre,deployComponent:Hre,getComponents:qre,getComponentFile:Gre,setComponentFile:Fre,dropComponent:xre}});var GR=T((NRe,cH)=>{"use strict";var On=require("joi"),aH=Ve();cH.exports={readTransactionLogValidator:kre,deleteTransactionLogsBeforeValidator:$re};function kre(e){let t=On.object({schema:On.string().required(),table:On.string().required(),from:On.date().timestamp(),to:On.date().timestamp(),limit:On.number().min(1)});return aH.validateBySchema(e,t)}a(kre,"readTransactionLogValidator");function $re(e){let t=On.object({schema:On.string().required(),table:On.string().required(),timestamp:On.date().timestamp().required()});return aH.validateBySchema(e,t)}a($re,"deleteTransactionLogsBeforeValidator")});var oh=T((yRe,fH)=>{"use strict";var FR=R(),ih=st(),uH=G(),lH=j(),_H=Qn(),{handleHDBError:gc,hdb_errors:Vre}=Z(),{HTTP_STATUS_CODES:Rc}=Vre,{readTransactionLogValidator:Yre,deleteTransactionLogsBeforeValidator:Kre}=GR(),dH="This operation relies on clustering and cannot run with it disable.",Wre="Logs successfully deleted from transaction log.",Qre="All logs successfully deleted from transaction log.";fH.exports={readTransactionLog:jre,deleteTransactionLogsBefore:zre};async function*jre(e){let t=Yre(e);if(t)throw gc(t,t.message,Rc.BAD_REQUEST,void 0,void 0,!0);if(!lH.get(FR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw gc(new Error,dH,Rc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=uH.checkSchemaTableExist(r,s);if(n)throw gc(new Error,n,Rc.NOT_FOUND,void 0,void 0,!0);let i=_H.createNatsTableStreamName(r,s),o=await ih.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let _={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===FR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(jre,"readTransactionLog");async function zre(e){let t=Kre(e);if(t)throw gc(t,t.message,Rc.BAD_REQUEST,void 0,void 0,!0);if(!lH.get(FR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw gc(new Error,dH,Rc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=uH.checkSchemaTableExist(r,s);if(i)throw gc(new Error,i,Rc.NOT_FOUND,void 0,void 0,!0);let o=_H.createNatsTableStreamName(r,s),{jsm:c}=await ih.getNATSReferences(),u=await ih.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=Wre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=Qre):d=(await ih.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(zre,"deleteTransactionLogsBefore")});var hH=T((wRe,EH)=>{"use strict";var xR=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};EH.exports=xR});var pH=T((LRe,mH)=>{"use strict";var kR=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mH.exports=kR});var VR=T((PRe,TH)=>{"use strict";var SH=hH(),Jre=pH(),{HDB_ERROR_MSGS:Xre}=Mr(),$R=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Xre.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new SH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Jre(c,n[c]);i.push(u)});let o=`${r}_${s}`;if(this.unauthorized_access[o])this.unauthorized_access[o].required_attribute_permissions=i;else{let c=new SH(r,s,[],i);this.unauthorized_access[o]=c}}getPermsResponse(){let t=Object.values(this.unauthorized_access);return t.length>0||this.invalid_schema_items.length>0?(this.unauthorized_access=t,this):null}};TH.exports=$R});var lh=T((URe,vH)=>{"use strict";var YR=dr(),ah=_r(),ps=Zf(),Jl=Ui(),KR=vo(),Zre=hg(),ese=MM(),Xl=Er(),ch=nE(),Ot=U(),tse=yg(),rse=Il(),sse=iR(),nse=RE(),ise=OE(),ose=oR(),ase=yE(),cse=wE(),WR=LE(),ii=G(),use=Cv(),QR=PE(),AH=jo(),ms=R(),OH=wB(),lse=Xn(),NH=Ol(),bH=(QE(),te($l)),yH=rt(),jr=rh(),_se=require("alasql"),IH=oh(),wH=ZE(),CH=VR(),{handleHDBError:br,hdb_errors:LH}=Z(),{HDB_ERROR_MSGS:Gt,HTTP_STATUS_CODES:jl}=LH,H=new Map,DH="delete",Zi="insert",oi="read",Zo="update",zl="describe",gH=Jl.describeSchema.name,RH=Jl.describeTable.name,PH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},dse="catchup",fse="handleGetJob",Ese="handleGetJobsByStartDate",uh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},hse=[ps.createTable.name,ps.createAttribute.name,ps.dropTable.name,ps.dropAttribute.name],MH={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},x=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};H.set(YR.insert.name,new x(!1,[Zi]));H.set(YR.update.name,new x(!1,[Zo]));H.set(YR.upsert.name,new x(!1,[Zi,Zo]));H.set(ah.searchByConditions.name,new x(!1,[oi]));H.set(ah.searchByHash.name,new x(!1,[oi]));H.set(ah.searchByValue.name,new x(!1,[oi]));H.set(ah.search.name,new x(!1,[oi]));H.set(ps.createSchema.name,new x(!0,[]));H.set(ps.createTable.name,new x(!0,[]));H.set(ps.createAttribute.name,new x(!1,[Zi]));H.set(ps.dropSchema.name,new x(!0,[]));H.set(ps.dropTable.name,new x(!0,[]));H.set(ps.dropAttribute.name,new x(!0,[]));H.set(Jl.describeSchema.name,new x(!1,[oi]));H.set(Jl.describeTable.name,new x(!1,[oi]));H.set(KR.deleteRecord.name,new x(!1,[DH]));H.set(Xl.addUser.name,new x(!0,[]));H.set(Xl.alterUser.name,new x(!0,[]));H.set(Xl.dropUser.name,new x(!0,[]));H.set(Xl.listUsersExternal.name,new x(!0,[]));H.set(ch.listRoles.name,new x(!0,[]));H.set(ch.addRole.name,new x(!0,[]));H.set(ch.alterRole.name,new x(!0,[]));H.set(ch.dropRole.name,new x(!0,[]));H.set(tse.name,new x(!0,[]));H.set(rse.name,new x(!0,[]));H.set(sse.name,new x(!0,[]));H.set(nse.name,new x(!0,[]));H.set(ise.name,new x(!0,[]));H.set(ose.name,new x(!0,[]));H.set(WR.setRoutes.name,new x(!0,[]));H.set(WR.getRoutes.name,new x(!0,[]));H.set(WR.deleteRoutes.name,new x(!0,[]));H.set(yH.setConfiguration.name,new x(!0,[]));H.set(ase.clusterStatus.name,new x(!0,[]));H.set(cse.name,new x(!0,[]));H.set(QR.getFingerprint.name,new x(!0,[]));H.set(QR.setLicense.name,new x(!0,[]));H.set(KR.deleteFilesBefore.name,new x(!0,[]));H.set(KR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(AH.restart.name,new x(!0,[]));H.set(AH.restartService.name,new x(!0,[]));H.set(Zre.name,new x(!0,[]));H.set(ese.name,new x(!0,[oi]));H.set(lse.systemInformation.name,new x(!0,[]));H.set(yH.getConfiguration.name,new x(!0,[]));H.set(IH.readTransactionLog.name,new x(!0,[]));H.set(IH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(wH.installModules.name,new x(!0,[]));H.set(wH.auditModules.name,new x(!0,[]));H.set(NH.createTokens.name,new x(!1,[]));H.set(NH.refreshOperationToken.name,new x(!1,[]));H.set(bH.login.name,new x(!1,[]));H.set(bH.logout.name,new x(!1,[]));H.set(jr.customFunctionsStatus.name,new x(!0,[]));H.set(jr.getCustomFunctions.name,new x(!0,[]));H.set(jr.getComponents.name,new x(!0,[]));H.set(jr.getComponentFile.name,new x(!0,[]));H.set(jr.setComponentFile.name,new x(!0,[]));H.set(jr.dropComponent.name,new x(!0,[]));H.set(jr.getCustomFunction.name,new x(!0,[]));H.set(jr.setCustomFunction.name,new x(!0,[]));H.set(jr.dropCustomFunction.name,new x(!0,[]));H.set(jr.addComponent.name,new x(!0,[]));H.set(jr.dropCustomFunctionProject.name,new x(!0,[]));H.set(jr.packageComponent.name,new x(!0,[]));H.set(jr.deployComponent.name,new x(!0,[]));H.set(QR.getRegistrationInfo.name,new x(!1,[]));H.set(Xl.userInfo.name,new x(!1,[]));H.set(Jl.describeAll.name,new x(!1,[]));H.set(fse,new x(!1,[]));H.set(Ese,new x(!0,[]));H.set(dse,new x(!0,[]));H.set(uh.CSV_DATA_LOAD,new x(!1,[Zi,Zo]));H.set(uh.CSV_URL_LOAD,new x(!1,[Zi,Zo]));H.set(uh.CSV_FILE_LOAD,new x(!1,[Zi,Zo]));H.set(uh.IMPORT_FROM_S3,new x(!1,[Zi,Zo]));H.set(MH.EXPORT_TO_S3,new x(!0,[]));H.set(MH.EXPORT_LOCAL,new x(!0,[]));H.set(ms.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[DH]));H.set(ms.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[oi]));H.set(ms.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Zi]));H.set(ms.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Zo]));vH.exports={verifyPerms:pse,verifyPermsAst:mse,verifyBulkLoadAttributePerms:Tse};function mse(e,t,r){if(ii.isEmptyOrZeroLength(e))throw Ot.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ii.isEmptyOrZeroLength(t))throw Ot.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ii.isEmptyOrZeroLength(r))throw Ot.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new CH,n=new use(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Ot.info("No schemas defined in verifyPermsAst(), will not continue."),br(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&PH[r])throw br(new Error,Gt.DROP_SYSTEM,jl.FORBIDDEN);if(c&&!u)return null;let _=OH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof _se.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(_));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let l=UH(t,r,o,s);return l||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),m=zR(t.role.permission,f,d[E]);jR(h,m,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(mse,"verifyPermsAst");function pse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Ot.info("null required parameter in verifyPerms"),br(new Error,Gt.DEFAULT_INVALID_REQUEST,jl.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new CH;if(ii.isEmptyOrZeroLength(e.hdb_user.role)||ii.isEmptyOrZeroLength(e.hdb_user.role.permission))return Ot.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Gt.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,_=e.hdb_user.role.permission.structure_user,l=o.has(ms.SYSTEM_SCHEMA_NAME)||n===ms.SYSTEM_SCHEMA_NAME;if(l&&PH[r])throw br(new Error,Gt.DROP_SYSTEM,jl.FORBIDDEN);if(u&&!l||_===!0&&(r===ps.createSchema.name||r===ps.dropSchema.name))return null;if(hse.indexOf(r)>=0&&(_===!0||Array.isArray(_)))return _===!0||_.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=OH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===gH||r===RH){if(n===ms.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Gt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===gH&&(!d[n]||!d[n][zl]))return c.handleInvalidItem(Gt.SCHEMA_NOT_FOUND(n));if(r===RH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][zl]))return c.handleInvalidItem(Gt.TABLE_NOT_FOUND(n,i))}}let f=UH(e.hdb_user,r,o,c,s);if(f)return f;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&ms.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let m=[],S=d[n].tables[i];S[ms.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(g=>g[ms.PERMS_CRUD_ENUM.READ]).forEach(g=>{m.push(g.attribute_name)}):m=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=m)}let E=Sse(e),h=zR(e.hdb_user.role.permission,n,i);return jR(E,h,r,i,n,c,s),c.getPermsResponse()}a(pse,"verifyPerms");function UH(e,t,r,s,n){if(ii.arrayHasEmptyValues([e,t,r]))throw Ot.info("hasPermissions has an invalid parameter"),br(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||H.get(t).requires_su))return null;if(!H.get(t))throw Ot.info(`operation ${t} not found.`),br(new Error,Gt.OP_NOT_FOUND(t),jl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return Ot.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][zl]===!1){s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Gt.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[zl]===!1)s.addInvalidItem(Gt.TABLE_NOT_FOUND(u,l));else try{let f=[],E=H.get(t).perms;!ii.isEmpty(n)&&E.includes(n)&&(E=[n]);for(let h=0;h<E.length;h++){let m=E[h],S=d[m];(S==null||S===!1)&&(Ot.info(`Required ${m} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(m))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Gt.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Ot.error(E),Ot.error(f),br(LH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(UH,"hasPermissions");function jR(e,t,r,s,n,i,o){if(!e||!t)throw Ot.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw Ot.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(ii.isEmptyOrZeroLength(t))return Ot.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let l of e){let d=t.get(l);if(d){if(d[zl]===!1){i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(ms.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==oi)throw br(new Error,Gt.SYSTEM_TIMESTAMP_PERMS_ERR,jl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Gt.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(jR,"checkAttributePerms");function Sse(e){let t=new Set;try{if(e.action)return t;if(e.operation===ms.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){Ot.info(r)}return t}a(Sse,"getRecordAttributes");function zR(e,t,r){let s=new Map;if(ii.isEmpty(e))return Ot.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{Ot.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(zR,"getAttributePermissions");function Tse(e,t,r,s,n,i,o){let c=new Set(i),u=zR(e,s,n);jR(c,u,t,n,s,o,r)}a(Tse,"verifyBulkLoadAttributePerms")});var dh=T((BRe,FH)=>{"use strict";FH.exports={evaluateSQL:Pse,processAST:GH,convertSQLToAST:qH,checkASTPermissions:HH};var gse=dr(),BH=require("util"),Rse=BH.callbackify(gse.insert),Ase=_r().search,Ose=YP().update,Nse=BH.callbackify(Ose),bse=WP().convertDelete,eo=require("alasql"),yse=lh(),_h=U(),Ise=jd(),wse=G(),Zl=R(),{hdb_errors:Cse,handleHDBError:JR}=Z(),{HTTP_STATUS_CODES:XR}=Cse;Ise(eo);var Lse=403,Dse="There was a problem performing this insert. Please check the logs and try again.",ZR=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Pse(e,t){let r=e.parsed_sql_object;if(!r){r=qH(e.sql);let s,n=r.ast.statements[0];if(n instanceof eo.yy.Insert?s=n.into.databaseid:n instanceof eo.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof eo.yy.Update||n instanceof eo.yy.Delete?s=n.table.databaseid:_h.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof eo.yy.Select)&&wse.isEmptyOrZeroLength(s))return t("No schema specified",null)}GH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Pse,"evaluateSQL");function HH(e,t){let r;try{r=yse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(HH,"checkASTPermissions");function qH(e){let t=new ZR;if(!e)throw JR(new Error,"The 'sql' parameter is missing from the request body",XR.BAD_REQUEST);try{let r=e.trim(),s=eo.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
18
+ `);throw s[1]?JR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,XR.BAD_REQUEST):JR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",XR.BAD_REQUEST)}return t}a(qH,"convertSQLToAST");function GH(e,t,r){try{let s=Mse;if(!e.bypass_auth&&!t.permissions_checked){let i=HH(e,t);if(i&&i.length>0)return r(Lse,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Zl.VALID_SQL_OPS_ENUM.SELECT:s=Ase,n=t.ast.statements[0];break;case Zl.VALID_SQL_OPS_ENUM.INSERT:s=Use;break;case Zl.VALID_SQL_OPS_ENUM.UPDATE:s=Nse;break;case Zl.VALID_SQL_OPS_ENUM.DELETE:s=bse;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(GH,"processAST");function Mse(e,t){_h.info(e),t("unknown sql statement")}a(Mse,"nullFunction");function Use({statement:e,hdb_user:t},r){let s=e.into,n={schema:s.databaseid,table:s.tableid,operation:"insert",hdb_user:t},i=e.columns.map(o=>o.columnid);try{n.records=vse(i,e.values)}catch(o){return r(o)}Rse(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){_h.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Use,"convertInsert");function vse(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=eo.compile(`SELECT ${n.toString()} AS [${Zl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw _h.error(r),new Error(Dse)}}a(vse,"createDataObjects")});var eA=T((qRe,kH)=>{"use strict";var{S3:Bse,GetObjectCommand:Hse}=require("@aws-sdk/client-s3");kH.exports={getFileStreamFromS3:qse,getS3AuthObj:xH};async function qse(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Hse(r))).Body}a(qse,"getFileStreamFromS3");function xH(e,t,r){return new Bse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(xH,"getS3AuthObj")});var fh=T((FRe,XH)=>{"use strict";var YH=_r(),Gse=dh(),Fse=eA(),{AsyncParser:xse,Transform:kse}=require("json2csv"),t_=require("stream"),zr=G(),tA=require("fs-extra"),$se=require("path"),Ss=U(),{promisify:KH}=require("util"),e_=G(),{handleHDBError:ft,hdb_errors:Vse}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=Vse,{streamAsJSON:Yse}=eg(),{Upload:Kse}=require("@aws-sdk/lib-storage"),$H=["search_by_value","search_by_hash","sql"],VH=["json","csv"],WH="json",QH="csv",Wse="Successfully exported JSON locally.",Qse="Successfully exported CSV locally.",jse=1e3,zse=YH.searchByHash,Jse=YH.searchByValue,Xse=KH(Gse.evaluateSQL),Zse=KH(t_.finished);XH.exports={export_to_s3:sne,export_local:ene,toCsvStream:jH};async function ene(e){Ss.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=zH(e);if(!zr.isEmpty(t))throw Ss.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(zr.isEmpty(e.path))throw Ss.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(zr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith($se.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=zr.buildFolderPath(e.path,r);await tne(e.path);let n=await JH(e);return await rne(s,e.format,n)}a(ene,"export_local");async function tne(e){if(Ss.trace("in confirmPath"),zr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await tA.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Ss.error(s),ft(new Error,s,Et.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Ss.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(tne,"confirmPath");async function rne(e,t,r){if(Ss.trace("in saveToLocal"),e_.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(e_.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(e_.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===WH){let s=tA.createWriteStream(e);return Yse(r).pipe(s),await Zse(s),{message:Wse,path:e}}else if(t===QH){let s=tA.createWriteStream(e),n=t_.Readable.from(r),i={},o={objectMode:!0};return await new xse(i,o).fromInput(n).toOutput(s).promise(!1),{message:Qse,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(rne,"saveToLocal");async function sne(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(zr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=zH(e);if(!zr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);Ss.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await JH(e)}catch(u){throw Ss.error(u),u}let s,n=await Fse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new t_.PassThrough;if(e.format===QH){i=e.s3.key+".csv";let u=jH(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===WH){i=e.s3.key+".json";let u=new t_.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let _=r.length,l="";for(let[d,f]of r.entries()){let E=d===_-1?JSON.stringify(f):JSON.stringify(f)+",";l+=E,d!==0&&d%jse===0&&(u.push(l),l="")}l.length!==0&&u.push(l),u.push("]"),u.push(null)}else throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST);return new Kse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(sne,"export_to_s3");function jH(e){let t=t_.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new kse(r,s);return t.pipe(n)}a(jH,"toCsvStream");function zH(e){if(Ss.trace("in exportCoreValidation"),zr.isEmpty(e.format))return"format missing";if(VH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${VH.join(", ")}`;let t=e.search_operation.operation;if(zr.isEmpty(t))return"search_operation.operation missing";if($H.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${$H.join(", ")}`}a(zH,"exportCoreValidation");async function JH(e){Ss.trace("in getRecords");let t,r;if(e_.isEmpty(e.search_operation)||e_.isEmptyOrZeroLength(e.search_operation.operation))throw ft(new Error,yr.INVALID_VALUE("Search operation"),Et.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Jse;break;case"search_by_hash":t=zse;break;case"sql":t=Xse;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ss.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(JH,"getRecords")});var o0={};Fe(o0,{contentTypes:()=>sA,findBestSerializer:()=>mh,getDeserializer:()=>Ac,registerContentHandlers:()=>nA,serialize:()=>ph,serializeMessage:()=>Xi});function nne(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function nA(e){e.register(one,{serializers:[{regex:/^application\/json$/,serializer:Eh.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new ea.EncoderStream(r_).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?hh.Readable.from((0,Nn.encodeIter)(t,r_)):(0,Nn.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rA.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Nn.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ea.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function mh(e){let r=(e.headers.asObject||e.headers).accept,s,n=0,i,o,c=r?r.toLowerCase().split(/\s*,\s*/):[];for(let u of c){let[_,...l]=u.split(/\s*;\s*/),d=1,f={q:1};for(let h of l){let m=h.indexOf("=");f[h.substring(0,m)]=h.substring(m+1)}d=+f.q;let E=Ft.get(_);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||_,n=h,o=f)}}if(!s){if(r)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ft.keys()).join(", "))}};s=Ft.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function ph(e,t,r){let s=e0&&t.headers.asObject?.["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null)r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data;else if(e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=mh(t);if(i.serializer.compressible===!1&&(s=!1),r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),typeof e=="object"&&(e[Symbol.iterator]||e[Symbol.asyncIterator])&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,ai.createBrotliCompress)({params:{[ai.constants.BROTLI_PARAM_MODE]:i.type.includes("json")||i.type.includes("text")?ai.constants.BROTLI_MODE_TEXT:ai.constants.BROTLI_MODE_GENERIC,[ai.constants.BROTLI_PARAM_QUALITY]:2}}))),o}n=i.serializer.serialize(e)}return s&&n?.length>e0?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,ai.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Xi(e,t){if(e?.contentType!=null&&e.data!=null)return e.data;if(!t)return JSON.stringify(e);let r=t.serialize;if(r)return r(e);let s=mh(t);return r=t.serialize=s.serializer.serialize,r(e)}function ane(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function Ac(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ft.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ft.get(e)?.deserialize||t0(e,s);return o=>ane(o).then(i)}return e&&Ft.get(e)?.deserialize||t0(e,s)}function t0(e,t){if(e.startsWith("text/")){let r=t?.match(/charset=(.+)/)?.[1]||"utf-8";return s=>({contentType:e,data:s.toString(r)})}else return e==="application/octet-stream"?r=>r:r=>{if(!e)try{if(r?.[0]===123)return JSON.parse(r)}catch{}return{contentType:e||"application/octet-stream",data:r}}}function cne(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Eh,rA,Nn,ea,ai,hh,r0,s0,n0,r_,Ft,sA,ZH,i0,ine,one,e0,hc=Re(()=>{Eh=D(eg()),rA=D(fh()),Nn=require("msgpackr"),ea=require("cbor-x"),ai=require("zlib"),hh=require("stream");Pr();r0=require("../index"),s0=D(j()),n0=D(R()),r_={useRecords:!1,useToJSON:!0},Ft=new Map,sA=Ft;Tt.contentTypes=sA;(0,r0._assignPackageExport)("contentTypes",sA);Ft.set("application/json",{serializeStream:Eh.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});ZH=new ea.Encoder(r_);Ft.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new ea.EncoderStream(r_).end(e)},serialize:ZH.encode,deserialize:ZH.decode,q:1});Ft.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?hh.Readable.from((0,Nn.encodeIter)(e,r_)):(0,Nn.pack)(e)},serialize:Nn.pack,deserialize:Nn.unpack,q:.9});Ft.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,rA.toCsvStream)(e)},q:.1});Ft.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ft.set("text/event-stream",{serializeStream:function(e){return hh.Readable.from(cne(e,this.serialize))},serialize:function(e){if(e.acknowledge&&e.acknowledge(),typeof e=="object"&&"value"in e&&e.timestamp&&(e={data:e.value,event:e.type,id:e.timestamp}),e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
19
19
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
20
20
  `}return e.id&&(t+="id: "+e.id+`
21
21
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -24,16 +24,16 @@
24
24
 
25
25
  `:`data: ${e}
26
26
 
27
- `},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});o0={type:"application/json",serializeStream:fh.streamAsJSON,serialize:JSON.stringify,deserialize:ine,q:.8};Ft.set("*/*",o0);Ft.set("",o0);a(ine,"tryJSONParse");a(iA,"registerContentHandlers");one=require("fastify-plugin"),ane=one(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=hh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(hh,"findBestSerializer");t0=n0.default.get(i0.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(mh,"serialize");a(Ji,"serializeMessage");a(cne,"streamToBuffer");a(Rc,"getDeserializer");a(r0,"deserializerUnknownType");a(une,"transformIterable")});var ph={};Fe(ph,{start:()=>dne});async function _ne(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&ld(e);let n=new zi;try{e.responseHeaders=n;let i=e.url.slice(1),o=aA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let m=_.match(/max-age=(\d+)/)?.[1];m&&(e.expiresAt=m*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Rc(r["content-type"],!0)(e.body)}catch(m){throw new s_.ClientError(m,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new s_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new s_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,oA.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){lne[0]=f;let m=String.fromCharCode(34,(xt[0]&63)+62,(xt[0]>>6)+(xt[1]<<2&63)+62,(xt[1]>>4)+(xt[2]<<4&63)+62,(xt[2]>>2)+62,(xt[3]&63)+62,(xt[3]>>6)+(xt[4]<<2&63)+62,(xt[4]>>4)+(xt[5]<<4&63)+62,(xt[5]>>2)+62,(xt[6]&63)+62,(xt[6]>>6)+(xt[7]<<2&63)+62,34),S=r["if-none-match"];S&&m==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",m),oA.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=mh(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ea.warn(i):ea.info(i):ea.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=mh(i.contentType?i:i.toString(),e,o),o}}function dne(e){oA=e,!c0&&(c0=!0,aA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return _ne(t,r)}),e.server.ws(async(t,r,s)=>{r_++;let n=new ws;u0||(u0=!0,Zu(l=>{r_>0&&l.push({metric:"ws-connections",connections:r_,byThread:!0})}));let i;t.on("error",l=>{i=!0,ea.warn(l)});let o;t.on("message",a(function(d){o||(o=Rc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{r_--,us(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=aA.getMatch(u);if(us(!!_,"connection","ws","connect"),!_)t.send(Ji(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,kr(h=>({count:h.count,total:r_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ji(E.value,r);t.send(h),kr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ea,s_,xt,lne,oA,c0,aA,u0,r_,l0=Re(()=>{Ec();jn();ea=D(v()),s_=D(Z());_d();cu();Ro();$E();xt=new Uint8Array(8),lne=new Float64Array(xt.buffer,0,1),oA={};a(_ne,"http");r_=0;a(dne,"start")});var cA=T((XRe,_0)=>{var{recordAction:Sh,recordActionBinary:fne}=(jn(),te(el)),Ene=require("fastify-plugin"),hne=200;_0.exports=Ene(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Sh(o,"duration",_,d,l),fne(n.raw.statusCode<400,"success",_,d,l);let f=hne;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Sh(performance.now()-c,"transfer",_,d,l),Sh(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Sh(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var dA=T((ZRe,m0)=>{var Oh=require("clone"),Nh=Ve(),mne=G(),Rh=R(),pne=v(),Th=require("fs"),uA=require("joi"),{string:Ah}=uA.types(),{hdb_errors:Sne,handleHDBError:n_}=Z(),{HDB_ERROR_MSGS:Tne,HTTP_STATUS_CODES:gh}=Sne,{common_validators:Ac}=cn(),d0=1e9,f0=" is required",gne=["insert","update","upsert"],lA={database:{presence:!1,format:Ac.schema_format,length:Ac.schema_length},schema:{presence:!1,format:Ac.schema_format,length:Ac.schema_length},table:{presence:!0,format:Ac.schema_format,length:Ac.schema_length},action:{inclusion:{within:gne,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Rne={schema:Ah.required(),table:Ah.required(),action:Ah.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Ane,AWS_SECRET:One,AWS_BUCKET:Nne,AWS_FILE_KEY:bne,REGION:yne}=Rh.S3_BUCKET_AUTH_KEYS,Ine={s3:{presence:!0},[`s3.${Ane}`]:{presence:!0,type:"String"},[`s3.${One}`]:{presence:!0,type:"String"},[`s3.${Nne}`]:{presence:!0,type:"String"},[`s3.${bne}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${yne}`]:{presence:!0,type:"String"}},E0=Oh(lA);E0.data.presence={message:f0};var h0=Oh(lA);h0.file_path.presence={message:f0};var wne=Object.assign(Oh(lA),Ine),_A=Oh(Rne);_A.csv_url=Ah.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();_A.passthrough_headers=uA.object();function Cne(e){let t=Nh.validateObject(e,E0);return bh(e,t)}a(Cne,"dataObject");function Lne(e){let t=Nh.validateBySchema(e,uA.object(_A));return bh(e,t)}a(Lne,"urlObject");function Dne(e){let t=Nh.validateObject(e,h0);return bh(e,t)}a(Dne,"fileObject");function Pne(e){let t=Nh.validateObject(e,wne);return bh(e,t)}a(Pne,"s3FileObject");function bh(e,t){if(!t){let r=mne.checkGlobalSchemaTable(e.schema,e.table);if(r)return n_(new Error,r,gh.BAD_REQUEST);if(e.operation===Rh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Th.accessSync(e.file_path,Th.constants.R_OK|Th.constants.F_OK)}catch(s){return s.code===Rh.NODE_ERROR_CODES.ENOENT?n_(s,`No such file or directory ${s.path}`,gh.BAD_REQUEST):s.code===Rh.NODE_ERROR_CODES.EACCES?n_(s,`Permission denied ${s.path}`,gh.BAD_REQUEST):n_(s)}try{let s=Th.statSync(e.file_path).size;if(s>d0)return n_(new Error,Tne.MAX_FILE_SIZE_ERR(s,d0),gh.BAD_REQUEST)}catch(s){pne.error(s),console.error(s)}}}return t}a(bh,"postValidateChecks");m0.exports={dataObject:Cne,urlObject:Lne,fileObject:Dne,s3FileObject:Pne}});var fA=T((tAe,p0)=>{"use strict";var i_=v(),yh=R();async function Mne(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===yh.OPERATIONS_ENUM.INSERT||t.operation===yh.OPERATIONS_ENUM.UPDATE||t.operation===yh.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===yh.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(i_.info(i.message),i):i.http_resp_msg?(i_.error(`Error calling operation: ${e.name}`),i_.error(i.http_resp_msg),i):(i_.error(`Error calling operation: ${e.name}`),i_.error(i),i)}}a(Mne,"callOperationFunctionAsAwait");p0.exports={callOperationFunctionAsAwait:Mne}});var T0=T((sAe,S0)=>{"use strict";var EA=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},hA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};S0.exports={BulkLoadFileObject:EA,BulkLoadDataObject:hA}});var R0=T((iAe,g0)=>{"use strict";var mA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};g0.exports=mA});var AA=T((_Ae,q0)=>{"use strict";var Ih=dr(),Ch=dA(),Une=require("needle"),Ks=R(),aAe=ke(),Oc=G(),{handleHDBError:Ze,hdb_errors:L0}=Z(),{HTTP_STATUS_CODES:kt,HDB_ERROR_MSGS:Ot,CHECK_LOGS_WRAPPER:ra}=L0,Nc=v(),pA=require("papaparse");Oc.promisifyPapaParse();var Ws=require("fs-extra"),vne=require("path"),{chain:A0}=require("stream-chain"),O0=require("stream-json/streamers/StreamArray"),N0=require("stream-json/utils/Batch"),b0=require("stream-chain/utils/comp"),{finished:y0}=require("stream"),Bne=j(),D0=fA(),Hne=tA(),{BulkLoadFileObject:TA,BulkLoadDataObject:qne}=T0(),gA=YR(),{verifyBulkLoadAttributePerms:P0}=uh(),cAe=R0(),uAe=st(),lAe=Wn(),{databases:Gne}=(fe(),te(De)),{coerceType:Fne}=(Lf(),te(HT)),I0="No records parsed from csv file.",ta=`${Bne.get("HDB_ROOT")}/tmp`,{schema_regex:xne}=cn(),w0=1024*1024*2,C0=5e3,kne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};q0.exports={csvDataLoad:$ne,csvURLLoad:Vne,csvFileLoad:Yne,importFromS3:Kne};async function $ne(e,t){let r=Ch.dataObject(e);if(r)throw Ze(r,r.message,kt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=v0(e.schema,e.table),i=pA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:SA.bind(null,n),dynamicTyping:!1}),o=new gA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&P0(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 Ze(new Error,c,kt.BAD_REQUEST,void 0,void 0,!0);let u=new qne(e.action,e.schema,e.table,i.data);return s=await D0.callOperationFunctionAsAwait(B0,u,null),s.message===I0?I0:H0(s.records,s.number_written)}catch(n){throw sa(n)}}a($ne,"csvDataLoad");async function Vne(e){let t=Ch.urlObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ta}/${r}`;try{await Wne(e,r)}catch(n){throw Nc.error(Ot.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,ra(Ot.DOWNLOAD_FILE_ERR(r)))}try{let n=new TA(this.job_operation_function.name,e.action,e.schema,e.table,s,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await RA(n);return await wh(s),i}catch(n){throw await wh(s),sa(n)}}a(Vne,"csvURLLoad");async function Yne(e){let t=Ch.fileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=new TA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await RA(r)}catch(s){throw sa(s)}}a(Yne,"csvFileLoad");async function Kne(e){let t=Ch.s3FileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=vne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ta}/${n}`;let i=new TA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Qne(n,e);let o=await RA(i);return await wh(r),o}catch(s){throw await wh(r),sa(s)}}a(Kne,"importFromS3");async function Wne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Une("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ze(s,n,s.statusCode,Ks.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}zne(r,e.csv_url),await jne(t,r.raw)}a(Wne,"downloadCSVFile");async function Qne(e,t){try{let r=`${ta}/${e}`;await Ws.mkdirp(ta),await Ws.writeFile(`${ta}/${e}`,"",{flag:"a+"});let s=await Ws.createWriteStream(r),n=await Hne.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Nc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Nc.error(Ot.S3_DOWNLOAD_ERR+" - "+r),Ze(r,ra(Ot.S3_DOWNLOAD_ERR))}}a(Qne,"downloadFileFromS3");async function jne(e,t){try{await Ws.mkdirp(ta),await Ws.writeFile(`${ta}/${e}`,t)}catch(r){throw Nc.error(Ot.WRITE_TEMP_FILE_ERR),Ze(r,ra(Ot.DEFAULT_BULK_LOAD_ERR))}}a(jne,"writeFileToTempFolder");async function wh(e){if(e)try{await Ws.access(e),await Ws.unlink(e)}catch{Nc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(wh,"deleteTempFile");function zne(e,t){if(e.statusCode!==L0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,kt.BAD_REQUEST);if(!kne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,kt.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,kt.BAD_REQUEST)}a(zne,"validateURLResponse");async function RA(e){try{let t;switch(e.file_type){case Ks.VALID_S3_FILE_TYPES.CSV:t=await Jne(e);break;case Ks.VALID_S3_FILE_TYPES.JSON:t=await Xne(e);break;default:throw Ze(new Error,Ot.DEFAULT_BULK_LOAD_ERR,kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Ot.INVALID_FILE_EXT_ERR(e))}return H0(t.records,t.number_written)}catch(t){throw sa(t)}}a(RA,"fileLoad");async function M0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await Ih.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&P0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ze(c);r(u)}}a(M0,"validateChunk");async function U0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Oc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Oc.isEmpty(c)&&!Oc.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 D0.callOperationFunctionAsAwait(B0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,ra(Ot.INSERT_CSV_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Ot.INSERT_CSV_ERR+" - "+c);r(u)}}a(U0,"insertChunk");async function Jne(e){let t={records:0,number_written:0},r=v0(e.schema,e.table);try{let s=new gA,n=Ws.createReadStream(e.file_path,{highWaterMark:w0});n.setEncoding("utf8"),await pA.parsePromise(n,M0.bind(null,e,s),SA.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);return n=Ws.createReadStream(e.file_path,{highWaterMark:w0}),n.setEncoding("utf8"),await pA.parsePromise(n,U0.bind(null,e,t),SA.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,ra(Ot.PAPA_PARSE_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Ot.PAPA_PARSE_ERR+s)}}a(Jne,"callPapaParse");function v0(e,t){let r=Gne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Fne(i,n));return s}a(v0,"createTransformMap");function SA(e,t,r){let s=e.get(r);return s?s(t):Oc.autoCast(t)}a(SA,"typeFunction");async function Xne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new gA,n=A0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),O0.withParser(),c=>c.value,new N0({batchSize:C0}),b0(async c=>{await M0(e,s,r,c)})]);await new Promise((c,u)=>{y0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);let o=A0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),O0.withParser(),c=>c.value,new N0({batchSize:C0}),b0(async c=>{await U0(e,t,r,c)})]);return await new Promise((c,u)=>{y0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,ra(Ot.INSERT_JSON_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Ot.INSERT_JSON_ERR+s)}}a(Xne,"insertJson");async function B0(e){let t={};try{e.data&&e.data.length>0&&Zne(e.data[0])?t=await eie(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Nc.info(t.message))}catch(r){throw sa(r)}return t}a(B0,"callBulkFileLoad");function Zne(e){let t=Object.keys(e);for(let r of t)if(!xne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Zne,"validateColumnNames");async function eie(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ih.insert;break;case"update":i=Ih.update;break;case"upsert":i=Ih.upsert;break;default:throw Ze(new Error,Ot.INVALID_ACTION_PARAM_ERR(s),kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Ot.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=Oc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw sa(o)}}a(eie,"bulkFileLoad");function H0(e,t){return`successfully loaded ${t} of ${e} records`}a(H0,"buildResponseMsg");function sa(e){return Ze(e,ra(Ot.DEFAULT_BULK_LOAD_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Ot.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(sa,"buildTopLevelErrMsg")});var F0=T((fAe,G0)=>{"use strict";var OA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};G0.exports=OA});var $0=T((hAe,k0)=>{"use strict";var tie=R(),x0=require("moment"),rie=require("uuid").v4,NA=class{static{a(this,"JobObject")}constructor(){this.id=rie(),this.type=void 0,this.start_datetime=x0().valueOf(),this.created_datetime=x0().valueOf(),this.end_datetime=void 0,this.status=tie.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};k0.exports=NA});var bA=T((pAe,j0)=>{"use strict";var sie=require("uuid").v4,K0=dr(),W0=_r(),nie=vs(),iie=va(),oie=F0(),et=R(),aie=$0(),cie=aE(),Ts=v(),uie=bu(),bc=G(),{promisify:lie}=require("util"),na=require("moment"),_ie=_h(),Lh=dA(),V0=ZS(),{deleteTransactionLogsBeforeValidator:die}=FR(),{handleHDBError:fie,hdb_errors:Eie}=Z(),{HTTP_STATUS_CODES:hie}=Eie,Y0=W0.searchByValue,mie=W0.searchByHash,pie=K0.insert,Sie=lie(_ie.evaluateSQL),Tie=K0.update;j0.exports={addJob:Aie,updateJob:Nie,handleGetJob:gie,handleGetJobsByStartDate:Rie,getJobById:Q0};async function gie(e){try{let t=await Q0(e.id);return bc.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 Ts.error("There was an error getting job",t),new Error(r)}}a(gie,"handleGetJob");async function Rie(e){try{let t=await Oie(e);if(Ts.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=na(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=na(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 Ts.error(r),new Error(r)}}a(Rie,"handleGetJobsByStartDate");async function Aie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||bc.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ts.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return Ts.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Lh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=Lh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Lh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Lh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=V0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=V0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=die(e);break;default:break}if(s)throw fie(s,s.message,hie.BAD_REQUEST,void 0,void 0,!0);let n=new aie;n.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new nie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await Y0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=sie();try{o=await Y0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ts.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new uie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await pie(u)}catch(l){return Ts.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ts.trace(l)}return t}a(Aie,"addJob");async function Oie(e){let t=na(e.from_date,na.ISO_8601),r=na(e.to_date,na.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new oie(s,e.hdb_user);try{return await Sie(n)}catch(i){throw Ts.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(Oie,"getJobsInDateRange");async function Q0(e){if(bc.isEmptyOrZeroLength(e))return bc.errorizeMessage("Invalid job ID specified.");let t=new iie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await mie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ts.error(s),bc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(Q0,"getJobById");async function Nie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(bc.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=na().valueOf());let t=new cie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Tie(t),r}a(Nie,"updateJob")});var tq=T((TAe,eq)=>{"use strict";var z0=G(),Ir=R(),bie=require("moment"),Dh=AA(),Ph=v(),J0=bA(),X0=dh(),Z0=Uo(),yie=Qe(),Iie=ih(),yA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function wie(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(z0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(z0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await ai(e,Dh.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await ai(e,Dh.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await ai(e,Dh.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await ai(e,Dh.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await ai(e,X0.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await ai(e,X0.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await ai(e,Z0.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await ai(e,Z0.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await ai(e,Iie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(wie,"parseMessage");async function ai(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=bie().valueOf(),await J0.updateJob(e.job),await Cie(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Ph.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ph.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await J0.updateJob(e.job)}catch(n){throw Ph.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ai,"runJob");async function Cie(e){Ph.trace("launching job thread:",e),yie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Cie,"launchJobThread");eq.exports={parseMessage:wie,RunnerMessage:yA}});var sq=T((RAe,rq)=>{"use strict";var IA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};rq.exports=IA});var Tq=T((OAe,MA)=>{"use strict";var Bh=_r(),LA=_h(),Mh=AA(),ci=Xf(),Uh=Mi(),a_=Uo(),Lie=mg(),o_=Er(),vh=sE(),$t=th(),Nt=v(),Die=Ig(),Pie=yl(),Mie=oR(),Uie=gE(),vie=AE(),Bie=aR(),Hie=bE(),qie=IE(),wA=CE(),nq=dh(),Gie=uh(),DA=bA(),U=R(),{hdb_errors:u_,handleHDBError:c_}=Z(),{HTTP_STATUS_CODES:iq}=u_,CA=DE(),oq=Qo(),hq=require("util"),yc=dr(),Fie=cs(),xie=Jn(),aq=tq(),cq=Al(),uq=(WE(),te(kl)),lq=rt(),_q=ih(),dq=XE(),{setServerUtilities:kie}=(Lf(),te(HT)),{CONTEXT:$ie}=(Ls(),te(np)),{_assignPackageExport:Vie}=require("../index"),{transformReq:Yie}=G(),{server:Kie}=(Pr(),te(So)),Wie=fA(),fq=Bh.searchByHash,Qie=Bh.searchByValue,jie=hq.promisify(Bh.search),zie=hq.promisify(LA.evaluateSQL),Jie={[U.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[U.OPERATIONS_ENUM.CREATE_TABLE]:!0,[U.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[U.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[U.OPERATIONS_ENUM.DROP_TABLE]:!0,[U.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=sq();async function mq(e,t){try{if(e.body.operation!=="read_log"&&(Nt.log_level===U.LOG_LEVELS.INFO||Nt.log_level===U.LOG_LEVELS.DEBUG||Nt.log_level===U.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Nt.info(o)}}catch(s){Nt.error(s)}let r=await Wie.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Jie[e.body.operation]&&Fie.setSchemaDataToGlobal(s=>{s&&Nt.error(s)}),r}a(mq,"processLocalTransaction");var Eq=Zie();MA.exports={chooseOperation:pq,getOperationFunction:Sq,operation:PA,processLocalTransaction:mq};kie(MA.exports);Kie.operation=PA;function pq(e){let t;try{t=Sq(e)}catch(n){throw Nt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=LA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=LA.checkASTPermissions(e,i);if(o)throw Nt.error(`${iq.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),c_(new Error,o,u_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==U.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==U.OPERATIONS_ENUM.LOGIN&&e.operation!==U.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=Gie.verifyPerms(i,n);if(o)throw Nt.error(`${iq.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),c_(new Error,o,u_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw c_(n,"There was an error when trying to choose an operation path")}return r}a(pq,"chooseOperation");function Sq(e){if(Nt.trace(`getOperationFunction with operation: ${e.operation}`),Eq.has(e.operation))return Eq.get(e.operation);throw c_(new Error,u_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),u_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(Sq,"getOperationFunction");Vie("operation",PA);function PA(e,t){e.hdb_user=this[$ie]?.user,e.bypass_auth=!t;let r=pq(e);return mq({body:e},r)}a(PA,"operation");async function Xie(e){Nt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[U.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case U.OPERATIONS_ENUM.INSERT:o=await yc.insert(i);break;case U.OPERATIONS_ENUM.UPDATE:o=await yc.update(i);break;case U.OPERATIONS_ENUM.UPSERT:o=await yc.upsert(i);break;case U.OPERATIONS_ENUM.DELETE:o=await a_.deleteRecord(i);break;default:Nt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Nt.info("Invalid operation in transaction"),Nt.error(o)}}a(Xie,"catchup");async function bn(e){Yie(e);let t,r;try{r=await DA.addJob(e),t=r.createdJob,Nt.info("addJob result",r);let s=new aq.RunnerMessage(t,e);return await aq.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw Nt.error(n),c_(s,n)}}a(bn,"executeJob");function Zie(){let e=new Map;return e.set(U.OPERATIONS_ENUM.INSERT,new q(yc.insert)),e.set(U.OPERATIONS_ENUM.UPDATE,new q(yc.update)),e.set(U.OPERATIONS_ENUM.UPSERT,new q(yc.upsert)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Bh.searchByConditions)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(fq)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_ID,new q(fq)),e.set(U.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Qie)),e.set(U.OPERATIONS_ENUM.SEARCH,new q(jie)),e.set(U.OPERATIONS_ENUM.SQL,new q(zie)),e.set(U.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(bn,Mh.csvDataLoad)),e.set(U.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(bn,Mh.csvFileLoad)),e.set(U.OPERATIONS_ENUM.CSV_URL_LOAD,new q(bn,Mh.csvURLLoad)),e.set(U.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(bn,Mh.importFromS3)),e.set(U.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ci.createSchema)),e.set(U.OPERATIONS_ENUM.CREATE_DATABASE,new q(ci.createSchema)),e.set(U.OPERATIONS_ENUM.CREATE_TABLE,new q(ci.createTable)),e.set(U.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ci.createAttribute)),e.set(U.OPERATIONS_ENUM.DROP_SCHEMA,new q(ci.dropSchema)),e.set(U.OPERATIONS_ENUM.DROP_DATABASE,new q(ci.dropSchema)),e.set(U.OPERATIONS_ENUM.DROP_TABLE,new q(ci.dropTable)),e.set(U.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ci.dropAttribute)),e.set(U.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Uh.describeSchema)),e.set(U.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Uh.describeSchema)),e.set(U.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Uh.describeTable)),e.set(U.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Uh.describeAll)),e.set(U.OPERATIONS_ENUM.DELETE,new q(a_.deleteRecord)),e.set(U.OPERATIONS_ENUM.ADD_USER,new q(o_.addUser)),e.set(U.OPERATIONS_ENUM.ALTER_USER,new q(o_.alterUser)),e.set(U.OPERATIONS_ENUM.DROP_USER,new q(o_.dropUser)),e.set(U.OPERATIONS_ENUM.LIST_USERS,new q(o_.listUsersExternal)),e.set(U.OPERATIONS_ENUM.LIST_ROLES,new q(vh.listRoles)),e.set(U.OPERATIONS_ENUM.ADD_ROLE,new q(vh.addRole)),e.set(U.OPERATIONS_ENUM.ALTER_ROLE,new q(vh.alterRole)),e.set(U.OPERATIONS_ENUM.DROP_ROLE,new q(vh.dropRole)),e.set(U.OPERATIONS_ENUM.USER_INFO,new q(o_.userInfo)),e.set(U.OPERATIONS_ENUM.READ_LOG,new q(Die)),e.set(U.OPERATIONS_ENUM.ADD_NODE,new q(Pie)),e.set(U.OPERATIONS_ENUM.UPDATE_NODE,new q(Mie)),e.set(U.OPERATIONS_ENUM.REMOVE_NODE,new q(Uie)),e.set(U.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(vie)),e.set(U.OPERATIONS_ENUM.PURGE_STREAM,new q(Bie)),e.set(U.OPERATIONS_ENUM.SET_CONFIGURATION,new q(lq.setConfiguration)),e.set(U.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Hie.clusterStatus)),e.set(U.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(qie)),e.set(U.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(wA.setRoutes)),e.set(U.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(wA.getRoutes)),e.set(U.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(wA.deleteRoutes)),e.set(U.OPERATIONS_ENUM.EXPORT_TO_S3,new q(bn,nq.export_to_s3)),e.set(U.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(bn,a_.deleteFilesBefore)),e.set(U.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(bn,a_.deleteFilesBefore)),e.set(U.OPERATIONS_ENUM.EXPORT_LOCAL,new q(bn,nq.export_local)),e.set(U.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(DA.handleGetJobsByStartDate)),e.set(U.OPERATIONS_ENUM.GET_JOB,new q(DA.handleGetJob)),e.set(U.OPERATIONS_ENUM.GET_FINGERPRINT,new q(CA.getFingerprint)),e.set(U.OPERATIONS_ENUM.SET_LICENSE,new q(CA.setLicense)),e.set(U.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(CA.getRegistrationInfo)),e.set(U.OPERATIONS_ENUM.RESTART,new q(oq.restart)),e.set(U.OPERATIONS_ENUM.RESTART_SERVICE,new q(oq.restartService)),e.set(U.OPERATIONS_ENUM.CATCHUP,new q(Xie)),e.set(U.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(xie.systemInformation)),e.set(U.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(bn,a_.deleteAuditLogsBefore)),e.set(U.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Lie)),e.set(U.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(cq.createTokens)),e.set(U.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(cq.refreshOperationToken)),e.set(U.OPERATIONS_ENUM.LOGIN,new q(uq.login)),e.set(U.OPERATIONS_ENUM.LOGOUT,new q(uq.logout)),e.set(U.OPERATIONS_ENUM.GET_CONFIGURATION,new q(lq.getConfiguration)),e.set(U.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q($t.customFunctionsStatus)),e.set(U.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q($t.getCustomFunctions)),e.set(U.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q($t.getComponentFile)),e.set(U.OPERATIONS_ENUM.GET_COMPONENTS,new q($t.getComponents)),e.set(U.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q($t.setComponentFile)),e.set(U.OPERATIONS_ENUM.DROP_COMPONENT,new q($t.dropComponent)),e.set(U.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q($t.getCustomFunction)),e.set(U.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q($t.setCustomFunction)),e.set(U.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q($t.dropCustomFunction)),e.set(U.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q($t.addComponent)),e.set(U.OPERATIONS_ENUM.ADD_COMPONENT,new q($t.addComponent)),e.set(U.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q($t.dropCustomFunctionProject)),e.set(U.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q($t.packageComponent)),e.set(U.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q($t.packageComponent)),e.set(U.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q($t.deployComponent)),e.set(U.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q($t.deployComponent)),e.set(U.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(_q.readTransactionLog)),e.set(U.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(bn,_q.deleteTransactionLogsBefore)),e.set(U.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(dq.installModules)),e.set(U.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(dq.auditModules)),e.set(U.OPERATIONS_ENUM.GET_BACKUP,new q(ci.getBackup)),e}a(Zie,"initializeOperationFunctionMap")});var qh=T((bAe,Aq)=>{"use strict";var UA=R(),eoe=G(),l_=v(),{handleHDBError:vA,hdb_errors:Hh}=Z(),{isMainThread:toe}=require("worker_threads"),{Readable:roe}=require("stream"),gq=require("os"),soe=require("util"),noe=Hg(),ioe=soe.promisify(noe.authorize),Rq=Tq(),{createGzip:ooe,constants:aoe}=require("zlib");function coe(e){let t=`Found an uncaught exception with message: ${e.message}. ${gq.EOL}Stack: ${e.stack} ${gq.EOL}Terminating ${toe?"HDB":"thread"}.`;console.error(t),l_.fatal(t),process.exit(1)}a(coe,"handleServerUncaughtException");function uoe(e,t,r){if(l_[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 s=e.statusCode?e.statusCode:Hh.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(uoe,"serverErrorHandler");function loe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=vA(new Error,"Invalid JSON.",Hh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(eoe.isEmpty(e.body.operation)){let s=vA(new Error,"Request body must include an 'operation' property.",Hh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(loe,"reqBodyValidationHandler");function _oe(e,t,r){let s;e.body.operation!==UA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==UA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==UA.OPERATIONS_ENUM.LOGOUT?ioe(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{l_.warn(n),l_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(vA(n,i,Hh.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(_oe,"authHandler");async function doe(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=Rq.chooseOperation(e.body);let n=await Rq.processLocalTransaction(e,s);if(n instanceof roe&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(ooe({level:aoe.Z_BEST_SPEED})))}return n}catch(n){throw l_.error(n),n}}a(doe,"handlePostRequest");Aq.exports={authHandler:_oe,handlePostRequest:doe,handleServerUncaughtException:coe,serverErrorHandler:uoe,reqBodyValidationHandler:loe}});var yq=T((IAe,bq)=>{"use strict";var foe=require("fastify-plugin"),{handlePostRequest:Oq,authHandler:Eoe,reqBodyValidationHandler:hoe}=qh();async function moe(e){e.decorate("hdbCore",{preValidation:[hoe,Eoe],request:t=>Nq(Oq(t,response)),requestWithoutAuthentication:(t,r)=>Nq(Oq(t,r,!0))})}a(moe,"hdbCore");async function Nq(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(Nq,"convertAsyncIterators");bq.exports=foe(moe)});var wq=T((CAe,Iq)=>{"use strict";var BA=require("fs"),Ic=j();Ic.initSync();var{CONFIG_PARAMS:__}=R(),poe=1024*1024*1024;function Soe(e){let t=Ic.get(__.HTTP_TIMEOUT),r=Ic.get(__.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:poe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ic.get(__.TLS_PRIVATEKEY),i=Ic.get(__.TLS_CERTIFICATE),o=Ic.get(__.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:BA.readFileSync(`${n}`),cert:BA.readFileSync(i)+(o?`
27
+ `},compressible:!1,q:.8});Ft.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});i0={type:"application/json",serializeStream:Eh.streamAsJSON,serialize:JSON.stringify,deserialize:nne,q:.8};Ft.set("*/*",i0);Ft.set("",i0);a(nne,"tryJSONParse");a(nA,"registerContentHandlers");ine=require("fastify-plugin"),one=ine(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=mh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(mh,"findBestSerializer");e0=s0.default.get(n0.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(ph,"serialize");a(Xi,"serializeMessage");a(ane,"streamToBuffer");a(Ac,"getDeserializer");a(t0,"deserializerUnknownType");a(cne,"transformIterable")});var Sh={};Fe(Sh,{start:()=>_ne});async function lne(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&_d(e);let n=new Ji;try{e.responseHeaders=n;let i=e.url.slice(1),o=oA.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,_=r["cache-control"];if(_){_=_.toLowerCase();let m=_.match(/max-age=(\d+)/)?.[1];m&&(e.expiresAt=m*1e3+Date.now()),_.includes("only-if-cached")&&(e.onlyIfCached=!0),_.includes("no-cache")&&(e.noCache=!0),_.includes("no-store")&&(e.noCacheStore=!0),_.includes("stale-if-error")&&(e.staleIfError=!0),_.includes("must-revalidate")&&(e.mustRevalidate=!0)}let l=await We(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=Ac(r["content-type"],!0)(e.body)}catch(m){throw new n_.ClientError(m,400)}switch(e.authorize=!0,s){case"GET":case"HEAD":return u.get(c,e);case"POST":return u.post(c,e.data,e);case"PUT":return u.put(c,e.data,e);case"DELETE":return u.delete(c,e);case"PATCH":return u.patch(c,e.data,e);case"OPTIONS":n.setIfNone("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return u.connect(c,null,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return u.query(c,e.data,e);case"COPY":return u.copy(c,r.destination,e);case"MOVE":return u.move(c,r.destination,e);case"BREW":throw new n_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new n_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,iA.lastModified&&e.lastModified&&n.setIfNone("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){une[0]=f;let m=String.fromCharCode(34,(xt[0]&63)+62,(xt[0]>>6)+(xt[1]<<2&63)+62,(xt[1]>>4)+(xt[2]<<4&63)+62,(xt[2]>>2)+62,(xt[3]&63)+62,(xt[3]>>6)+(xt[4]<<2&63)+62,(xt[4]>>4)+(xt[5]<<4&63)+62,(xt[5]>>2)+62,(xt[6]&63)+62,(xt[6]>>6)+(xt[7]<<2&63)+62,34),S=r["if-none-match"];S&&m==S?(l?.onDone&&l.onDone(),d=304,l=void 0):n.setIfNone("ETag",m),iA.lastModified&&n.setIfNone("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.setIfNone("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=l?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.setIfNone("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=ph(l,e,E),s==="HEAD"&&(E.body=void 0)),E}catch(i){i.statusCode?i.statusCode===500?ta.warn(i):ta.info(i):ta.error(i),i.statusCode===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),n.setIfNone("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=ph(i.contentType?i:i.toString(),e,o),o}}function _ne(e){iA=e,!a0&&(a0=!0,oA=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return lne(t,r)}),e.server.ws(async(t,r,s)=>{s_++;let n=new ws;c0||(c0=!0,el(l=>{s_>0&&l.push({metric:"ws-connections",connections:s_,byThread:!0})}));let i;t.on("error",l=>{i=!0,ta.warn(l)});let o;t.on("message",a(function(d){o||(o=Ac(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{s_--,us(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=oA.getMatch(u);if(us(!!_,"connection","ws","connect"),!_)t.send(Xi(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=_.path,kr(h=>({count:h.count,total:s_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await We(r,()=>d.connect(l,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Xi(E.value,r);t.send(h),kr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ta,n_,xt,une,iA,a0,oA,c0,s_,u0=Re(()=>{hc();zn();ta=D(U()),n_=D(Z());dd();uu();Ao();VE();xt=new Uint8Array(8),une=new Float64Array(xt.buffer,0,1),iA={};a(lne,"http");s_=0;a(_ne,"start")});var aA=T((JRe,l0)=>{var{recordAction:Th,recordActionBinary:dne}=(zn(),te(tl)),fne=require("fastify-plugin"),Ene=200;l0.exports=fne(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.request.routeOptions,_,l,d;u.config?.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),Th(o,"duration",_,d,l),dne(n.raw.statusCode<400,"success",_,d,l);let f=Ene;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{Th(performance.now()-c,"transfer",_,d,l),Th(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,Th(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var _A=T((XRe,h0)=>{var Nh=require("clone"),bh=Ve(),hne=G(),Ah=R(),mne=U(),gh=require("fs"),cA=require("joi"),{string:Oh}=cA.types(),{hdb_errors:pne,handleHDBError:i_}=Z(),{HDB_ERROR_MSGS:Sne,HTTP_STATUS_CODES:Rh}=pne,{common_validators:Oc}=cn(),_0=1e9,d0=" is required",Tne=["insert","update","upsert"],uA={database:{presence:!1,format:Oc.schema_format,length:Oc.schema_length},schema:{presence:!1,format:Oc.schema_format,length:Oc.schema_length},table:{presence:!0,format:Oc.schema_format,length:Oc.schema_length},action:{inclusion:{within:Tne,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},gne={schema:Oh.required(),table:Oh.required(),action:Oh.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Rne,AWS_SECRET:Ane,AWS_BUCKET:One,AWS_FILE_KEY:Nne,REGION:bne}=Ah.S3_BUCKET_AUTH_KEYS,yne={s3:{presence:!0},[`s3.${Rne}`]:{presence:!0,type:"String"},[`s3.${Ane}`]:{presence:!0,type:"String"},[`s3.${One}`]:{presence:!0,type:"String"},[`s3.${Nne}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${bne}`]:{presence:!0,type:"String"}},f0=Nh(uA);f0.data.presence={message:d0};var E0=Nh(uA);E0.file_path.presence={message:d0};var Ine=Object.assign(Nh(uA),yne),lA=Nh(gne);lA.csv_url=Oh.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();lA.passthrough_headers=cA.object();function wne(e){let t=bh.validateObject(e,f0);return yh(e,t)}a(wne,"dataObject");function Cne(e){let t=bh.validateBySchema(e,cA.object(lA));return yh(e,t)}a(Cne,"urlObject");function Lne(e){let t=bh.validateObject(e,E0);return yh(e,t)}a(Lne,"fileObject");function Dne(e){let t=bh.validateObject(e,Ine);return yh(e,t)}a(Dne,"s3FileObject");function yh(e,t){if(!t){let r=hne.checkGlobalSchemaTable(e.schema,e.table);if(r)return i_(new Error,r,Rh.BAD_REQUEST);if(e.operation===Ah.OPERATIONS_ENUM.CSV_FILE_LOAD){try{gh.accessSync(e.file_path,gh.constants.R_OK|gh.constants.F_OK)}catch(s){return s.code===Ah.NODE_ERROR_CODES.ENOENT?i_(s,`No such file or directory ${s.path}`,Rh.BAD_REQUEST):s.code===Ah.NODE_ERROR_CODES.EACCES?i_(s,`Permission denied ${s.path}`,Rh.BAD_REQUEST):i_(s)}try{let s=gh.statSync(e.file_path).size;if(s>_0)return i_(new Error,Sne.MAX_FILE_SIZE_ERR(s,_0),Rh.BAD_REQUEST)}catch(s){mne.error(s),console.error(s)}}}return t}a(yh,"postValidateChecks");h0.exports={dataObject:wne,urlObject:Cne,fileObject:Lne,s3FileObject:Dne}});var dA=T((eAe,m0)=>{"use strict";var o_=U(),Ih=R();async function Pne(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===Ih.OPERATIONS_ENUM.INSERT||t.operation===Ih.OPERATIONS_ENUM.UPDATE||t.operation===Ih.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Ih.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(o_.info(i.message),i):i.http_resp_msg?(o_.error(`Error calling operation: ${e.name}`),o_.error(i.http_resp_msg),i):(o_.error(`Error calling operation: ${e.name}`),o_.error(i),i)}}a(Pne,"callOperationFunctionAsAwait");m0.exports={callOperationFunctionAsAwait:Pne}});var S0=T((rAe,p0)=>{"use strict";var fA=class{static{a(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,o,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=o,this.role_perms=c}},EA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};p0.exports={BulkLoadFileObject:fA,BulkLoadDataObject:EA}});var g0=T((nAe,T0)=>{"use strict";var hA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};T0.exports=hA});var RA=T((lAe,H0)=>{"use strict";var wh=dr(),Lh=_A(),Mne=require("needle"),Ks=R(),oAe=ke(),Nc=G(),{handleHDBError:Ze,hdb_errors:C0}=Z(),{HTTP_STATUS_CODES:kt,HDB_ERROR_MSGS:Nt,CHECK_LOGS_WRAPPER:sa}=C0,bc=U(),mA=require("papaparse");Nc.promisifyPapaParse();var Ws=require("fs-extra"),Une=require("path"),{chain:R0}=require("stream-chain"),A0=require("stream-json/streamers/StreamArray"),O0=require("stream-json/utils/Batch"),N0=require("stream-chain/utils/comp"),{finished:b0}=require("stream"),vne=j(),L0=dA(),Bne=eA(),{BulkLoadFileObject:SA,BulkLoadDataObject:Hne}=S0(),TA=VR(),{verifyBulkLoadAttributePerms:D0}=lh(),aAe=g0(),cAe=st(),uAe=Qn(),{databases:qne}=(Ee(),te(De)),{coerceType:Gne}=(Df(),te(BT)),y0="No records parsed from csv file.",ra=`${vne.get("HDB_ROOT")}/tmp`,{schema_regex:Fne}=cn(),I0=1024*1024*2,w0=5e3,xne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};H0.exports={csvDataLoad:kne,csvURLLoad:$ne,csvFileLoad:Vne,importFromS3:Yne};async function kne(e,t){let r=Lh.dataObject(e);if(r)throw Ze(r,r.message,kt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=U0(e.schema,e.table),i=mA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:pA.bind(null,n),dynamicTyping:!1}),o=new TA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&D0(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 Ze(new Error,c,kt.BAD_REQUEST,void 0,void 0,!0);let u=new Hne(e.action,e.schema,e.table,i.data);return s=await L0.callOperationFunctionAsAwait(v0,u,null),s.message===y0?y0:B0(s.records,s.number_written)}catch(n){throw na(n)}}a(kne,"csvDataLoad");async function $ne(e){let t=Lh.urlObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ra}/${r}`;try{await Kne(e,r)}catch(n){throw bc.error(Nt.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,sa(Nt.DOWNLOAD_FILE_ERR(r)))}try{let n=new SA(this.job_operation_function.name,e.action,e.schema,e.table,s,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await gA(n);return await Ch(s),i}catch(n){throw await Ch(s),na(n)}}a($ne,"csvURLLoad");async function Vne(e){let t=Lh.fileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r=new SA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Ks.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await gA(r)}catch(s){throw na(s)}}a(Vne,"csvFileLoad");async function Yne(e){let t=Lh.s3FileObject(e);if(t)throw Ze(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Une.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ra}/${n}`;let i=new SA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Wne(n,e);let o=await gA(i);return await Ch(r),o}catch(s){throw await Ch(r),na(s)}}a(Yne,"importFromS3");async function Kne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Mne("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Ze(s,n,s.statusCode,Ks.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}jne(r,e.csv_url),await Qne(t,r.raw)}a(Kne,"downloadCSVFile");async function Wne(e,t){try{let r=`${ra}/${e}`;await Ws.mkdirp(ra),await Ws.writeFile(`${ra}/${e}`,"",{flag:"a+"});let s=await Ws.createWriteStream(r),n=await Bne.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){bc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw bc.error(Nt.S3_DOWNLOAD_ERR+" - "+r),Ze(r,sa(Nt.S3_DOWNLOAD_ERR))}}a(Wne,"downloadFileFromS3");async function Qne(e,t){try{await Ws.mkdirp(ra),await Ws.writeFile(`${ra}/${e}`,t)}catch(r){throw bc.error(Nt.WRITE_TEMP_FILE_ERR),Ze(r,sa(Nt.DEFAULT_BULK_LOAD_ERR))}}a(Qne,"writeFileToTempFolder");async function Ch(e){if(e)try{await Ws.access(e),await Ws.unlink(e)}catch{bc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Ch,"deleteTempFile");function jne(e,t){if(e.statusCode!==C0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,kt.BAD_REQUEST);if(!xne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,kt.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,kt.BAD_REQUEST)}a(jne,"validateURLResponse");async function gA(e){try{let t;switch(e.file_type){case Ks.VALID_S3_FILE_TYPES.CSV:t=await zne(e);break;case Ks.VALID_S3_FILE_TYPES.JSON:t=await Jne(e);break;default:throw Ze(new Error,Nt.DEFAULT_BULK_LOAD_ERR,kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Nt.INVALID_FILE_EXT_ERR(e))}return B0(t.records,t.number_written)}catch(t){throw na(t)}}a(gA,"fileLoad");async function P0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await wh.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&D0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ze(c);r(u)}}a(P0,"validateChunk");async function M0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Nc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Nc.isEmpty(c)&&!Nc.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 L0.callOperationFunctionAsAwait(v0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,sa(Nt.INSERT_CSV_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.INSERT_CSV_ERR+" - "+c);r(u)}}a(M0,"insertChunk");async function zne(e){let t={records:0,number_written:0},r=U0(e.schema,e.table);try{let s=new TA,n=Ws.createReadStream(e.file_path,{highWaterMark:I0});n.setEncoding("utf8"),await mA.parsePromise(n,P0.bind(null,e,s),pA.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);return n=Ws.createReadStream(e.file_path,{highWaterMark:I0}),n.setEncoding("utf8"),await mA.parsePromise(n,M0.bind(null,e,t),pA.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,sa(Nt.PAPA_PARSE_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.PAPA_PARSE_ERR+s)}}a(zne,"callPapaParse");function U0(e,t){let r=qne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Gne(i,n));return s}a(U0,"createTransformMap");function pA(e,t,r){let s=e.get(r);return s?s(t):Nc.autoCast(t)}a(pA,"typeFunction");async function Jne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new TA,n=R0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),A0.withParser(),c=>c.value,new O0({batchSize:w0}),N0(async c=>{await P0(e,s,r,c)})]);await new Promise((c,u)=>{b0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,kt.BAD_REQUEST);let o=R0([Ws.createReadStream(e.file_path,{encoding:"utf-8"}),A0.withParser(),c=>c.value,new O0({batchSize:w0}),N0(async c=>{await M0(e,t,r,c)})]);return await new Promise((c,u)=>{b0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,sa(Nt.INSERT_JSON_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.INSERT_JSON_ERR+s)}}a(Jne,"insertJson");async function v0(e){let t={};try{e.data&&e.data.length>0&&Xne(e.data[0])?t=await Zne(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",bc.info(t.message))}catch(r){throw na(r)}return t}a(v0,"callBulkFileLoad");function Xne(e){let t=Object.keys(e);for(let r of t)if(!Fne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Xne,"validateColumnNames");async function Zne(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=wh.insert;break;case"update":i=wh.update;break;case"upsert":i=wh.upsert;break;default:throw Ze(new Error,Nt.INVALID_ACTION_PARAM_ERR(s),kt.BAD_REQUEST,Ks.LOG_LEVELS.ERROR,Nt.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){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=Nc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw na(o)}}a(Zne,"bulkFileLoad");function B0(e,t){return`successfully loaded ${t} of ${e} records`}a(B0,"buildResponseMsg");function na(e){return Ze(e,sa(Nt.DEFAULT_BULK_LOAD_ERR),kt.INTERNAL_SERVER_ERROR,Ks.LOG_LEVELS.ERROR,Nt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(na,"buildTopLevelErrMsg")});var G0=T((dAe,q0)=>{"use strict";var AA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};q0.exports=AA});var k0=T((EAe,x0)=>{"use strict";var eie=R(),F0=require("moment"),tie=require("uuid").v4,OA=class{static{a(this,"JobObject")}constructor(){this.id=tie(),this.type=void 0,this.start_datetime=F0().valueOf(),this.created_datetime=F0().valueOf(),this.end_datetime=void 0,this.status=eie.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};x0.exports=OA});var NA=T((mAe,Q0)=>{"use strict";var rie=require("uuid").v4,Y0=dr(),K0=_r(),sie=vs(),nie=Ba(),iie=G0(),et=R(),oie=k0(),aie=cE(),Ts=U(),cie=yu(),yc=G(),{promisify:uie}=require("util"),ia=require("moment"),lie=dh(),Dh=_A(),$0=XS(),{deleteTransactionLogsBeforeValidator:_ie}=GR(),{handleHDBError:die,hdb_errors:fie}=Z(),{HTTP_STATUS_CODES:Eie}=fie,V0=K0.searchByValue,hie=K0.searchByHash,mie=Y0.insert,pie=uie(lie.evaluateSQL),Sie=Y0.update;Q0.exports={addJob:Rie,updateJob:Oie,handleGetJob:Tie,handleGetJobsByStartDate:gie,getJobById:W0};async function Tie(e){try{let t=await W0(e.id);return yc.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 Ts.error("There was an error getting job",t),new Error(r)}}a(Tie,"handleGetJob");async function gie(e){try{let t=await Aie(e);if(Ts.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=ia(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=ia(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 Ts.error(r),new Error(r)}}a(gie,"handleGetJobsByStartDate");async function Rie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||yc.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return Ts.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return Ts.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=Dh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=Dh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=Dh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=Dh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=$0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=$0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=_ie(e);break;default:break}if(s)throw die(s,s.message,Eie.BAD_REQUEST,void 0,void 0,!0);let n=new oie;n.type=e.operation===et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new sie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await V0(i))}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=rie();try{o=await V0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return Ts.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ts.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new cie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await mie(u)}catch(l){return Ts.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 ${n.operation} and id ${n.id}`;else{let l=`Created a job with type ${n.type} and id ${n.id}`;t.message=l,t.createdJob=n,t.success=!0,Ts.trace(l)}return t}a(Rie,"addJob");async function Aie(e){let t=ia(e.from_date,ia.ISO_8601),r=ia(e.to_date,ia.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 s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new iie(s,e.hdb_user);try{return await pie(n)}catch(i){throw Ts.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(Aie,"getJobsInDateRange");async function W0(e){if(yc.isEmptyOrZeroLength(e))return yc.errorizeMessage("Invalid job ID specified.");let t=new nie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await hie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ts.error(s),yc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(W0,"getJobById");async function Oie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(yc.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===et.JOB_STATUS_ENUM.COMPLETE||e.status===et.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=ia().valueOf());let t=new aie(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Sie(t),r}a(Oie,"updateJob")});var eq=T((SAe,Z0)=>{"use strict";var j0=G(),Ir=R(),Nie=require("moment"),Ph=RA(),Mh=U(),z0=NA(),J0=fh(),X0=vo(),bie=Qe(),yie=oh(),bA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Iie(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(j0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(j0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Ir.JOB_TYPE_ENUM.csv_file_load:await ci(e,Ph.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await ci(e,Ph.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await ci(e,Ph.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await ci(e,Ph.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await ci(e,J0.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await ci(e,J0.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await ci(e,X0.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await ci(e,X0.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await ci(e,yie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Iie,"parseMessage");async function ci(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Nie().valueOf(),await z0.updateJob(e.job),await wie(e.job.id)}catch(r){let s=r.message!==void 0?r.message:r;typeof s=="string"?(s=`There was an error running ${t.name} job with id ${e.job.id} - ${s}`,r.message=s):Mh.error(`There was an error running ${t.name} job with id ${e.job.id}`),Mh.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await z0.updateJob(e.job)}catch(n){throw Mh.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ci,"runJob");async function wie(e){Mh.trace("launching job thread:",e),bie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(wie,"launchJobThread");Z0.exports={parseMessage:Iie,RunnerMessage:bA}});var rq=T((gAe,tq)=>{"use strict";var yA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};tq.exports=yA});var Sq=T((AAe,PA)=>{"use strict";var Hh=_r(),CA=dh(),Uh=RA(),ui=Zf(),vh=Ui(),c_=vo(),Cie=hg(),a_=Er(),Bh=nE(),$t=rh(),bt=U(),Lie=yg(),Die=Il(),Pie=iR(),Mie=RE(),Uie=OE(),vie=oR(),Bie=yE(),Hie=wE(),IA=LE(),sq=fh(),qie=lh(),LA=NA(),v=R(),{hdb_errors:l_,handleHDBError:u_}=Z(),{HTTP_STATUS_CODES:nq}=l_,wA=PE(),iq=jo(),Eq=require("util"),Ic=dr(),Gie=cs(),Fie=Xn(),oq=eq(),aq=Ol(),cq=(QE(),te($l)),uq=rt(),lq=oh(),_q=ZE(),{setServerUtilities:xie}=(Df(),te(BT)),{CONTEXT:kie}=(Ls(),te(ip)),{_assignPackageExport:$ie}=require("../index"),{transformReq:Vie}=G(),{server:Yie}=(Pr(),te(To)),Kie=dA(),dq=Hh.searchByHash,Wie=Hh.searchByValue,Qie=Eq.promisify(Hh.search),jie=Eq.promisify(CA.evaluateSQL),zie={[v.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[v.OPERATIONS_ENUM.CREATE_TABLE]:!0,[v.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[v.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[v.OPERATIONS_ENUM.DROP_TABLE]:!0,[v.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=rq();async function hq(e,t){try{if(e.body.operation!=="read_log"&&(bt.log_level===v.LOG_LEVELS.INFO||bt.log_level===v.LOG_LEVELS.DEBUG||bt.log_level===v.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;bt.info(o)}}catch(s){bt.error(s)}let r=await Kie.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return zie[e.body.operation]&&Gie.setSchemaDataToGlobal(s=>{s&&bt.error(s)}),r}a(hq,"processLocalTransaction");var fq=Xie();PA.exports={chooseOperation:mq,getOperationFunction:pq,operation:DA,processLocalTransaction:hq};xie(PA.exports);Yie.operation=DA;function mq(e){let t;try{t=pq(e)}catch(n){throw bt.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=CA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=CA.checkASTPermissions(e,i);if(o)throw bt.error(`${nq.FORBIDDEN} from operation ${e.operation}`),bt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),u_(new Error,o,l_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==v.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==v.OPERATIONS_ENUM.LOGIN&&e.operation!==v.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=qie.verifyPerms(i,n);if(o)throw bt.error(`${nq.FORBIDDEN} from operation ${e.operation}`),bt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),u_(new Error,o,l_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw u_(n,"There was an error when trying to choose an operation path")}return r}a(mq,"chooseOperation");function pq(e){if(bt.trace(`getOperationFunction with operation: ${e.operation}`),fq.has(e.operation))return fq.get(e.operation);throw u_(new Error,l_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),l_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(pq,"getOperationFunction");$ie("operation",DA);function DA(e,t){e.hdb_user=this[kie]?.user,e.bypass_auth=!t;let r=mq(e);return hq({body:e},r)}a(DA,"operation");async function Jie(e){bt.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[v.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case v.OPERATIONS_ENUM.INSERT:o=await Ic.insert(i);break;case v.OPERATIONS_ENUM.UPDATE:o=await Ic.update(i);break;case v.OPERATIONS_ENUM.UPSERT:o=await Ic.upsert(i);break;case v.OPERATIONS_ENUM.DELETE:o=await c_.deleteRecord(i);break;default:bt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){bt.info("Invalid operation in transaction"),bt.error(o)}}a(Jie,"catchup");async function bn(e){Vie(e);let t,r;try{r=await LA.addJob(e),t=r.createdJob,bt.info("addJob result",r);let s=new oq.RunnerMessage(t,e);return await oq.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw bt.error(n),u_(s,n)}}a(bn,"executeJob");function Xie(){let e=new Map;return e.set(v.OPERATIONS_ENUM.INSERT,new q(Ic.insert)),e.set(v.OPERATIONS_ENUM.UPDATE,new q(Ic.update)),e.set(v.OPERATIONS_ENUM.UPSERT,new q(Ic.upsert)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Hh.searchByConditions)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(dq)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_ID,new q(dq)),e.set(v.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Wie)),e.set(v.OPERATIONS_ENUM.SEARCH,new q(Qie)),e.set(v.OPERATIONS_ENUM.SQL,new q(jie)),e.set(v.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(bn,Uh.csvDataLoad)),e.set(v.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(bn,Uh.csvFileLoad)),e.set(v.OPERATIONS_ENUM.CSV_URL_LOAD,new q(bn,Uh.csvURLLoad)),e.set(v.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(bn,Uh.importFromS3)),e.set(v.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ui.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_DATABASE,new q(ui.createSchema)),e.set(v.OPERATIONS_ENUM.CREATE_TABLE,new q(ui.createTable)),e.set(v.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ui.createAttribute)),e.set(v.OPERATIONS_ENUM.DROP_SCHEMA,new q(ui.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_DATABASE,new q(ui.dropSchema)),e.set(v.OPERATIONS_ENUM.DROP_TABLE,new q(ui.dropTable)),e.set(v.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ui.dropAttribute)),e.set(v.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(vh.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(vh.describeSchema)),e.set(v.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(vh.describeTable)),e.set(v.OPERATIONS_ENUM.DESCRIBE_ALL,new q(vh.describeAll)),e.set(v.OPERATIONS_ENUM.DELETE,new q(c_.deleteRecord)),e.set(v.OPERATIONS_ENUM.ADD_USER,new q(a_.addUser)),e.set(v.OPERATIONS_ENUM.ALTER_USER,new q(a_.alterUser)),e.set(v.OPERATIONS_ENUM.DROP_USER,new q(a_.dropUser)),e.set(v.OPERATIONS_ENUM.LIST_USERS,new q(a_.listUsersExternal)),e.set(v.OPERATIONS_ENUM.LIST_ROLES,new q(Bh.listRoles)),e.set(v.OPERATIONS_ENUM.ADD_ROLE,new q(Bh.addRole)),e.set(v.OPERATIONS_ENUM.ALTER_ROLE,new q(Bh.alterRole)),e.set(v.OPERATIONS_ENUM.DROP_ROLE,new q(Bh.dropRole)),e.set(v.OPERATIONS_ENUM.USER_INFO,new q(a_.userInfo)),e.set(v.OPERATIONS_ENUM.READ_LOG,new q(Lie)),e.set(v.OPERATIONS_ENUM.ADD_NODE,new q(Die)),e.set(v.OPERATIONS_ENUM.UPDATE_NODE,new q(Pie)),e.set(v.OPERATIONS_ENUM.REMOVE_NODE,new q(Mie)),e.set(v.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(Uie)),e.set(v.OPERATIONS_ENUM.PURGE_STREAM,new q(vie)),e.set(v.OPERATIONS_ENUM.SET_CONFIGURATION,new q(uq.setConfiguration)),e.set(v.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Bie.clusterStatus)),e.set(v.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Hie)),e.set(v.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(IA.setRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(IA.getRoutes)),e.set(v.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(IA.deleteRoutes)),e.set(v.OPERATIONS_ENUM.EXPORT_TO_S3,new q(bn,sq.export_to_s3)),e.set(v.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(bn,c_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(bn,c_.deleteFilesBefore)),e.set(v.OPERATIONS_ENUM.EXPORT_LOCAL,new q(bn,sq.export_local)),e.set(v.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(LA.handleGetJobsByStartDate)),e.set(v.OPERATIONS_ENUM.GET_JOB,new q(LA.handleGetJob)),e.set(v.OPERATIONS_ENUM.GET_FINGERPRINT,new q(wA.getFingerprint)),e.set(v.OPERATIONS_ENUM.SET_LICENSE,new q(wA.setLicense)),e.set(v.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(wA.getRegistrationInfo)),e.set(v.OPERATIONS_ENUM.RESTART,new q(iq.restart)),e.set(v.OPERATIONS_ENUM.RESTART_SERVICE,new q(iq.restartService)),e.set(v.OPERATIONS_ENUM.CATCHUP,new q(Jie)),e.set(v.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(Fie.systemInformation)),e.set(v.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(bn,c_.deleteAuditLogsBefore)),e.set(v.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Cie)),e.set(v.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(aq.createTokens)),e.set(v.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(aq.refreshOperationToken)),e.set(v.OPERATIONS_ENUM.LOGIN,new q(cq.login)),e.set(v.OPERATIONS_ENUM.LOGOUT,new q(cq.logout)),e.set(v.OPERATIONS_ENUM.GET_CONFIGURATION,new q(uq.getConfiguration)),e.set(v.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q($t.customFunctionsStatus)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q($t.getCustomFunctions)),e.set(v.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q($t.getComponentFile)),e.set(v.OPERATIONS_ENUM.GET_COMPONENTS,new q($t.getComponents)),e.set(v.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q($t.setComponentFile)),e.set(v.OPERATIONS_ENUM.DROP_COMPONENT,new q($t.dropComponent)),e.set(v.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q($t.getCustomFunction)),e.set(v.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q($t.setCustomFunction)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q($t.dropCustomFunction)),e.set(v.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q($t.addComponent)),e.set(v.OPERATIONS_ENUM.ADD_COMPONENT,new q($t.addComponent)),e.set(v.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q($t.dropCustomFunctionProject)),e.set(v.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q($t.packageComponent)),e.set(v.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q($t.packageComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q($t.deployComponent)),e.set(v.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q($t.deployComponent)),e.set(v.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(lq.readTransactionLog)),e.set(v.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(bn,lq.deleteTransactionLogsBefore)),e.set(v.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(_q.installModules)),e.set(v.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(_q.auditModules)),e.set(v.OPERATIONS_ENUM.GET_BACKUP,new q(ui.getBackup)),e}a(Xie,"initializeOperationFunctionMap")});var Gh=T((NAe,Rq)=>{"use strict";var MA=R(),Zie=G(),__=U(),{handleHDBError:UA,hdb_errors:qh}=Z(),{isMainThread:eoe}=require("worker_threads"),{Readable:toe}=require("stream"),Tq=require("os"),roe=require("util"),soe=Bg(),noe=roe.promisify(soe.authorize),gq=Sq(),{createGzip:ioe,constants:ooe}=require("zlib");function aoe(e){let t=`Found an uncaught exception with message: ${e.message}. ${Tq.EOL}Stack: ${e.stack} ${Tq.EOL}Terminating ${eoe?"HDB":"thread"}.`;console.error(t),__.fatal(t),process.exit(1)}a(aoe,"handleServerUncaughtException");function coe(e,t,r){if(__[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 s=e.statusCode?e.statusCode:qh.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR;return typeof e=="string"?r.code(s).send({error:e}):r.code(s).send(e.message?{error:e.message}:e)}a(coe,"serverErrorHandler");function uoe(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=UA(new Error,"Invalid JSON.",qh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Zie.isEmpty(e.body.operation)){let s=UA(new Error,"Request body must include an 'operation' property.",qh.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(uoe,"reqBodyValidationHandler");function loe(e,t,r){let s;e.body.operation!==MA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==MA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==MA.OPERATIONS_ENUM.LOGOUT?noe(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{__.warn(n),__.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(UA(n,i,qh.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(loe,"authHandler");async function _oe(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=gq.chooseOperation(e.body);let n=await gq.processLocalTransaction(e,s);if(n instanceof toe&&n.headers){for(let[i,o]of n.headers)t.header(i,o);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(ioe({level:ooe.Z_BEST_SPEED})))}return n}catch(n){throw __.error(n),n}}a(_oe,"handlePostRequest");Rq.exports={authHandler:loe,handlePostRequest:_oe,handleServerUncaughtException:aoe,serverErrorHandler:coe,reqBodyValidationHandler:uoe}});var bq=T((yAe,Nq)=>{"use strict";var doe=require("fastify-plugin"),{handlePostRequest:Aq,authHandler:foe,reqBodyValidationHandler:Eoe}=Gh();async function hoe(e){e.decorate("hdbCore",{preValidation:[Eoe,foe],request:t=>Oq(Aq(t,response)),requestWithoutAuthentication:(t,r)=>Oq(Aq(t,r,!0))})}a(hoe,"hdbCore");async function Oq(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(Oq,"convertAsyncIterators");Nq.exports=doe(hoe)});var Iq=T((wAe,yq)=>{"use strict";var vA=require("fs"),wc=j();wc.initSync();var{CONFIG_PARAMS:d_}=R(),moe=1024*1024*1024;function poe(e){let t=wc.get(d_.HTTP_TIMEOUT),r=wc.get(d_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:moe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=wc.get(d_.TLS_PRIVATEKEY),i=wc.get(d_.TLS_CERTIFICATE),o=wc.get(d_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:vA.readFileSync(`${n}`),cert:vA.readFileSync(i)+(o?`
28
28
 
29
- `+BA.readFileSync(o):"")},s.http2=!0}return s}a(Soe,"getServerOptions");Iq.exports=Soe});var Dq=T((DAe,Lq)=>{"use strict";var HA=j();HA.initSync();var{CONFIG_PARAMS:Cq}=R();function Toe(){let e=HA.get(Cq.HTTP_CORSACCESSLIST),t=HA.get(Cq.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Toe,"getCORSOptions");Lq.exports=Toe});var Uq=T((MAe,Mq)=>{"use strict";var Pq=j();Pq.initSync();var goe=R();function Roe(){return Pq.get(goe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(Roe,"getHeaderTimeoutConfig");Mq.exports=Roe});var FA={};Fe(FA,{customFunctionsServer:()=>Noe,handleFile:()=>Ooe,ready:()=>Ioe});async function Ooe(e,t,r,s){if(!ui){let c=qA.get(GA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);ui=Wq(c),Tt.http((await ui).server)}let n=await ui,i=(0,Bq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!vq.has(i)){vq.add(i);try{n.register(yoe(i,o))}catch(c){if(c.message==="Root plugin has already booted")ve.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Noe(){try{ve.info("In Custom Functions Fastify server"+process.cwd()),ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ve.debug(`Custom Functions server process ${process.pid} starting up.`),await boe();let e=qA.get(GA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=ui=await Wq(t)}catch(s){throw ve.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw ve.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){ve.error(`Custom Functions ${process.pid} Error: ${e}`),ve.error(e),process.exit(1)}}async function boe(){try{ve.info("Custom Functions starting configuration."),await kq.setUsersToGlobal(),ve.info("Custom Functions completed configuration.")}catch(e){ve.error(e)}}function yoe(e,t){return async function(r){try{ve.info("Custom Functions starting buildRoutes"),ve.trace("Loading fastify routes folder "+e),(0,Hq.existsSync)(e)&&r.register(xq.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?ve.error(n.message):n&&ve.error(n),o()})}catch(s){ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Wq(e){ve.info("Custom Functions starting buildServer.");let t=(0,$q.default)(e),r=(0,qq.default)(t);r.server.headersTimeout=(0,Yq.default)(),r.setErrorHandler(Kq.serverErrorHandler);let s=(0,Vq.default)();return s&&r.register(Gq.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Fq.default),await r.register(Aoe),await r.after(),iA(r),ve.info("Custom Functions completed buildServer."),r}function Ioe(){if(ui)return ui.then?ui.then(e=>e.ready()):ui.ready()}var Bq,Hq,qq,Gq,Fq,xq,qA,GA,ve,Aoe,kq,$q,Vq,Yq,Kq,ui,vq,Qq=Re(()=>{Bq=require("path"),Hq=require("fs"),qq=D(require("fastify")),Gq=D(require("@fastify/cors")),Fq=D(cA()),xq=D(require("@fastify/autoload")),qA=D(j()),GA=D(R()),ve=D(v()),Aoe=D(yq()),kq=D(Er()),$q=D(wq()),Vq=D(Dq()),Yq=D(Uq()),Kq=D(qh());Ec();Pr();vq=new Set;a(Ooe,"handleFile");a(Noe,"customFunctionsServer");a(boe,"setUp");a(yoe,"buildRouteFolder");a(Wq,"buildServer");a(Ioe,"ready")});var xA={};Fe(xA,{start:()=>woe});function woe(e){return{handleFile(t,r,s){zq||(zq=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=jq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,Jq.default)(n,(0,Xq.realpathSync)(o))}}return i(n)},{runFirst:!0})),jq.set(r,s)}}}var Jq,Xq,jq,zq,Zq=Re(()=>{Jq=D(require("send")),Xq=require("fs"),jq=new Map;a(woe,"start")});var sG=T((kAe,rG)=>{"use strict";var Coe=require("cluster"),Qs=j();Qs.initSync();var tG=R(),GAe=require("util"),li=v(),kA=require("fs"),Loe=require("fastify"),FAe=mo(),Doe=require("@fastify/cors"),Poe=require("@fastify/compress"),Moe=require("@fastify/static"),Uoe=cA(),voe=require("path"),{PACKAGE_ROOT:Boe}=R(),Hoe=cs(),qoe=G(),Goe=Er(),Foe=Wu(),{server:xoe}=(Pr(),te(So)),{authHandler:koe,handlePostRequest:$oe,serverErrorHandler:Voe,reqBodyValidationHandler:Yoe}=qh(),xAe=require("net"),{registerContentHandlers:Koe}=(Ec(),te(a0)),Woe=6e4,Qoe=1024*1024*1024,joe="TRUE",{CONFIG_PARAMS:_i}=tG,ia;rG.exports={hdbServer:eG,start:eG};async function eG(e){try{li.info("In Fastify server"+process.cwd()),li.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),li.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Coe.isMaster,await zoe();let t=Qs.get(_i.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;ia=Joe(t),await ia.ready(),e||(e={}),e.isOperationsServer=!0,ia.server.cantCleanupProperly=!0;try{xoe.http(ia.server,e),ia.server.closeIdleConnections||await ia.listen({port:0,host:"::"})}catch(r){throw ia.close(),li.error(r),li.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),li.fatal(t),process.exit(1)}}a(eG,"operationsServer");async function zoe(){li.trace("Configuring HarperDB process."),Hoe.setSchemaDataToGlobal(),await Goe.setUsersToGlobal(),await Foe.getLicense()}a(zoe,"setUp");function Joe(e){li.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Xoe(e),r=Loe(t);r.server.headersTimeout=eae(),r.setErrorHandler(Voe);let s=Zoe();s&&r.register(Doe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Uoe),r.register(Poe),r.register(Moe,{root:voe.join(Boe,"studio")}),Koe(r);let n=Qs.get(tG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qoe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Yoe,koe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),$oe(i,o)}),r.get("/health",()=>"HarperDB is running."),li.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Joe,"buildServer");function Xoe(e){let t=Qs.get(_i.OPERATIONSAPI_NETWORK_TIMEOUT),r=Qs.get(_i.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Qoe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qs.get(_i.OPERATIONSAPI_TLS_PRIVATEKEY),i=Qs.get(_i.OPERATIONSAPI_TLS_CERTIFICATE),o=Qs.get(_i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:kA.readFileSync(n),cert:kA.readFileSync(i)+(o?`
29
+ `+vA.readFileSync(o):"")},s.http2=!0}return s}a(poe,"getServerOptions");yq.exports=poe});var Lq=T((LAe,Cq)=>{"use strict";var BA=j();BA.initSync();var{CONFIG_PARAMS:wq}=R();function Soe(){let e=BA.get(wq.HTTP_CORSACCESSLIST),t=BA.get(wq.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=(s,n)=>n(null,e.indexOf(s)!==-1))),r}a(Soe,"getCORSOptions");Cq.exports=Soe});var Mq=T((PAe,Pq)=>{"use strict";var Dq=j();Dq.initSync();var Toe=R();function goe(){return Dq.get(Toe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(goe,"getHeaderTimeoutConfig");Pq.exports=goe});var GA={};Fe(GA,{customFunctionsServer:()=>Ooe,handleFile:()=>Aoe,ready:()=>yoe});async function Aoe(e,t,r,s){if(!li){let c=HA.get(qA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);li=Kq(c),Tt.http((await li).server)}let n=await li,i=(0,vq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!Uq.has(i)){Uq.add(i);try{n.register(boe(i,o))}catch(c){if(c.message==="Root plugin has already booted")ve.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function Ooe(){try{ve.info("In Custom Functions Fastify server"+process.cwd()),ve.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),ve.debug(`Custom Functions server process ${process.pid} starting up.`),await Noe();let e=HA.get(qA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=li=await Kq(t)}catch(s){throw ve.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw ve.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){ve.error(`Custom Functions ${process.pid} Error: ${e}`),ve.error(e),process.exit(1)}}async function Noe(){try{ve.info("Custom Functions starting configuration."),await xq.setUsersToGlobal(),ve.info("Custom Functions completed configuration.")}catch(e){ve.error(e)}}function boe(e,t){return async function(r){try{ve.info("Custom Functions starting buildRoutes"),ve.trace("Loading fastify routes folder "+e),(0,Bq.existsSync)(e)&&r.register(Fq.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:ve.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?ve.error(n.message):n&&ve.error(n),o()})}catch(s){ve.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Kq(e){ve.info("Custom Functions starting buildServer.");let t=(0,kq.default)(e),r=(0,Hq.default)(t);r.server.headersTimeout=(0,Vq.default)(),r.setErrorHandler(Yq.serverErrorHandler);let s=(0,$q.default)();return s&&r.register(qq.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Gq.default),await r.register(Roe),await r.after(),nA(r),ve.info("Custom Functions completed buildServer."),r}function yoe(){if(li)return li.then?li.then(e=>e.ready()):li.ready()}var vq,Bq,Hq,qq,Gq,Fq,HA,qA,ve,Roe,xq,kq,$q,Vq,Yq,li,Uq,Wq=Re(()=>{vq=require("path"),Bq=require("fs"),Hq=D(require("fastify")),qq=D(require("@fastify/cors")),Gq=D(aA()),Fq=D(require("@fastify/autoload")),HA=D(j()),qA=D(R()),ve=D(U()),Roe=D(bq()),xq=D(Er()),kq=D(Iq()),$q=D(Lq()),Vq=D(Mq()),Yq=D(Gh());hc();Pr();Uq=new Set;a(Aoe,"handleFile");a(Ooe,"customFunctionsServer");a(Noe,"setUp");a(boe,"buildRouteFolder");a(Kq,"buildServer");a(yoe,"ready")});var FA={};Fe(FA,{start:()=>Ioe});function Ioe(e){return{handleFile(t,r,s){jq||(jq=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Qq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,zq.default)(n,(0,Jq.realpathSync)(o))}}return i(n)},{runFirst:!0})),Qq.set(r,s)}}}var zq,Jq,Qq,jq,Xq=Re(()=>{zq=D(require("send")),Jq=require("fs"),Qq=new Map;a(Ioe,"start")});var rG=T((xAe,tG)=>{"use strict";var woe=require("cluster"),Qs=j();Qs.initSync();var eG=R(),qAe=require("util"),_i=U(),xA=require("fs"),Coe=require("fastify"),GAe=po(),Loe=require("@fastify/cors"),Doe=require("@fastify/compress"),Poe=require("@fastify/static"),Moe=aA(),Uoe=require("path"),{PACKAGE_ROOT:voe}=R(),Boe=cs(),Hoe=G(),qoe=Er(),Goe=Qu(),{server:Foe}=(Pr(),te(To)),{authHandler:xoe,handlePostRequest:koe,serverErrorHandler:$oe,reqBodyValidationHandler:Voe}=Gh(),FAe=require("net"),{registerContentHandlers:Yoe}=(hc(),te(o0)),Koe=6e4,Woe=1024*1024*1024,Qoe="TRUE",{CONFIG_PARAMS:di}=eG,oa;tG.exports={hdbServer:Zq,start:Zq};async function Zq(e){try{_i.info("In Fastify server"+process.cwd()),_i.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),_i.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=woe.isMaster,await joe();let t=Qs.get(di.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;oa=zoe(t),await oa.ready(),e||(e={}),e.isOperationsServer=!0,oa.server.cantCleanupProperly=!0;try{Foe.http(oa.server,e),oa.server.closeIdleConnections||await oa.listen({port:0,host:"::"})}catch(r){throw oa.close(),_i.error(r),_i.error("Error configuring operations server"),r}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),_i.fatal(t),process.exit(1)}}a(Zq,"operationsServer");async function joe(){_i.trace("Configuring HarperDB process."),Boe.setSchemaDataToGlobal(),await qoe.setUsersToGlobal(),await Goe.getLicense()}a(joe,"setUp");function zoe(e){_i.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Joe(e),r=Coe(t);r.server.headersTimeout=Zoe(),r.setErrorHandler($oe);let s=Xoe();s&&r.register(Loe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Moe),r.register(Doe),r.register(Poe,{root:Uoe.join(voe,"studio")}),Yoe(r);let n=Qs.get(eG.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Hoe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Voe,xoe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),koe(i,o)}),r.get("/health",()=>"HarperDB is running."),_i.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(zoe,"buildServer");function Joe(e){let t=Qs.get(di.OPERATIONSAPI_NETWORK_TIMEOUT),r=Qs.get(di.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Woe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qs.get(di.OPERATIONSAPI_TLS_PRIVATEKEY),i=Qs.get(di.OPERATIONSAPI_TLS_CERTIFICATE),o=Qs.get(di.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:xA.readFileSync(n),cert:xA.readFileSync(i)+(o?`
30
30
 
31
- `+kA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Xoe,"getServerOptions");function Zoe(){let e=Qs.get(_i.OPERATIONSAPI_NETWORK_CORS),t=Qs.get(_i.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===joe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Zoe,"getCORSOpts");function eae(){return Qs.get(_i.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Woe}a(eae,"getHeaderTimeoutConfig")});var hG=T((WAe,EG)=>{"use strict";var{decode:tae}=require("msgpackr"),{isMainThread:VAe,parentPort:rae,threadId:YAe}=require("worker_threads"),oG=st(),di=ke(),sae=R(),d_=v(),nG=j(),aG=R();Qe();var nae=Wn(),{recordAction:iae,recordActionBinary:oae}=(jn(),te(el)),{publishToStream:aae}=oG,KAe={durable:di.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:di.WORK_QUEUE_CONSUMER_NAMES.deliver_group},cae,uae,lae,cG,uG;EG.exports={initialize:lG,workQueueListener:fG,setSubscription:_ae,setIgnoreOrigin:fae,getDatabaseSubscriptions:dae};async function lG(){uG=!0,d_.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await oG.getNATSReferences();cae=e,uae=e.info.server_name,lae=t,cG=r}a(lG,"initialize");var Fh=new Map;function _ae(e,t,r){let s=Fh.get(e);s||Fh.set(e,s=new Map),s.set(t,r),uG||lG().then(fG)}a(_ae,"setSubscription");function dae(){return Fh}a(dae,"getDatabaseSubscriptions");var _G;function fae(e){_G=e}a(fae,"setIgnoreOrigin");var dG=100,iG=new Array(dG),Gh=0;async function fG(){let t=await(await cG.consumers.get(di.WORK_QUEUE_CONSUMER_NAMES.stream_name,di.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();rae?.on("message",async r=>{let{type:s}=r;s===aG.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await iG[Gh],iG[Gh]=Eae(r).catch(s=>{d_.error(s)}),++Gh>=dG&&(Gh=0)}a(fG,"workQueueListener");async function Eae(e){let t=tae(e.data);iae(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=nG.get(sae.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(di.MSG_HEADERS.TRANSACTED_NODES)&&r.values(di.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(di.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!_G),oae(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(di.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;d_.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),d_.trace(`messageProcessor nats msg id: ${e.headers.get(di.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:m,user:S,node_name:A}=f||{},g=Fh.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(l.length===1&&!u)g.send({type:$A(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((V,$)=>({type:$A(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)N.push({type:$A(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:N,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}nG.get(aG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&aae(e.subject.split(".").slice(0,-1).join("."),nae.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){d_.error(o)}e.ack()}a(Eae,"messageProcessor");function $A(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a($A,"convertOperation")});var jA={};Fe(jA,{disableNATS:()=>mae,publishToStream:()=>Yh,setNATSReplicator:()=>VA,setPublishToStream:()=>pae,setSubscription:()=>QA,start:()=>hae});function hae(){kh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Tae()}function mae(e=!0){gG=e}function pae(e,t){Yh=e,QA=t}function Tae(){if(gG||process.env._DISABLE_NATS)return;let e=Hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];VA(n,r,i)}}kT((r,s)=>{VA(r.tableName,r.databaseName,r),s&&AG(r)}),!mG&&(mG=!0)}function VA(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ut{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){AG(i)}static subscribe(){let i=new ws;return QA(t,e,i),i}static subscribeOnThisThread(i){return i<Sae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new xh(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=RG;return i}a(s,"getNATSTransaction")}function AG(e){let t=kh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Yh(`${KA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,WA.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 pG,KA,WA,SG,TG,kh,$h,Vh,gG,Yh,QA,Sae,RG,mG,xh,YA,OG=Re(()=>{fe();Ls();pG=D(st()),KA=D(ke()),WA=D(Wn());cu();SG=D(hG()),TG=D(or()),kh=D(j()),$h=D(R()),Vh=D(v());a(hae,"start");a(mae,"disableNATS");Yh=pG.publishToStream,QA=SG.setSubscription;a(pae,"setPublishToStream");Sae=2;a(Tae,"assignReplicationSource");a(VA,"setNATSReplicator");a(AG,"publishSchema");xh=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=kh.default.get($h.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Vh.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Yh(`${KA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,WA.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Vh.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},YA=class extends xh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};RG=new YA});async function bG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await zA.getResource(e,{});n=new XA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await zA.get(e);i&&i.delete()}n=new Wh(e,t)}return n}function JA(){return Kh++,Kh>65500&&(Kh=1),Kh}var NG,wc,zA,Kh,Wh,XA,yG=Re(()=>{fe();lu();NG=D(or()),wc=D(v());Ro();zA=ut({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(bG,"getSession");Kh=1;a(JA,"getNextMessageId");Wh=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(g=>g.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,wc.trace)("Resuming subscription from",n,"from",o);let h=wi.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let m=h.path,S=h.Resource,A=await We(E,async()=>{let g=await S.subscribe(E);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of g)try{let V;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,V=this.needsAcknowledge(N)):(N.acknowledge?.(),V=JA());let $=N.id;Array.isArray($)&&($=Ra($)),$==null&&($=""),this.listener(m+"/"+$,N.value,V,t)}catch(V){(0,wc.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=JA();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=wi.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},XA=class extends Wh{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=JA(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,wc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,NG.getNextMonotonicTime)()),(0,wc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),zA.put(this.sessionRecord)),t.qos}}});var eO={};Fe(eO,{start:()=>Rae});async function Rae({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=CG(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,gs.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;gae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,LG.getSuperUser)());let{onMessage:u,onClose:_}=CG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,gs.info)("Socket error",l)})},{port:t,securePort:s})}function CG(e,t,r,s,n){wG||(wG=!0,Zu(d=>{Qh>0&&d.push({metric:"mqtt-connections",connections:Qh,byThread:!0})}));let i;Qh++;let o,c={protocolVersion:4},u=(0,jh.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){Qh--,i||(i=!0,o?.disconnect(),us(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Tt.getUser(d.username,d.password.toString()),(0,ZA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&IG.notify({username:s.username,status:fi.AUTH_AUDIT_STATUS.SUCCESS,type:fi.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ZA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&IG.error({username:s.username,status:fi.AUTH_AUDIT_STATUS.FAILURE,type:fi.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=bG({user:s,...d}),o=await o}catch(N){return(0,gs.error)(N),us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}us(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,V,$,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,gs.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let V;try{V=(await o.addSubscription(N,N.qos>=1)).qos||0}catch($){(0,gs.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Rc(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(N){(0,gs.warn)(N),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),us(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,gs.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,jh.generate)(h,c);t(S),kr(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Ji(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var jh,LG,ZA,fi,gs,IG,gae,wG,Qh,DG=Re(()=>{jh=require("mqtt-packet");yG();LG=D(Er());Ec();jn();Pr();ZA=D(j()),fi=D(R()),gs=D(v()),IG=(0,gs.loggerWithTag)("auth-event"),gae=!0;a(Rae,"start");Qh=0;a(CG,"onSocket")});var MG={};Fe(MG,{Request:()=>tO,createReuseportFd:()=>zh});var PG,tO,rO,sO,zh,nO=Re(()=>{PG=require("os"),tO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new sO(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 body(){return this.#e||(this.#e=new rO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},rO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},sO=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,s]of this)t(s,r,this)}};(0,PG.platform)()!="win32"&&(zh=require("node-unix-socket").createReuseportFd)});var rh={};Fe(rh,{component_errors:()=>Cc,loadComponent:()=>Jh,loadComponentDirectories:()=>kG,setErrorReporter:()=>bae});function kG(e,t){t&&(oO=t),e&&(aO=e);let r=[];if((0,js.existsSync)(iO)){let n=(0,js.readdirSync)(iO,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dt.join)(iO,o);r.push(Jh(c,oO,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Jh(s,oO,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{xG=!0})}function bae(e){h_=e}async function Jh(e,t,r,s,n,i){if(!vG.has(e)){vG.set(e,!0),n&&(aO=n);try{let o;s&&(Cc=new Map);let c=(0,Dt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,js.existsSync)(c)?o=s?(0,FG.getConfigObj)():(0,BG.parseDocument)((0,js.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=cO;let u=[],_=s;for(let l in o){let d=o[l];if(Cc.set(s?l:(0,Dt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,N;for(;!(0,js.existsSync)(N=(0,Dt.join)(g,"node_modules",l));)if(g=(0,Dt.dirname)(g),g.length<(0,GG.getHdbBasePath)().length){N=null;break}if(N)f=await Jh(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Nae[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ut(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(f_.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&m))for(let g of[A,S])try{if(+g&&!UG.includes(g)){let N=uO.get(lO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&E_.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!zh)&&(UG.push(g),_O(g,N))}}catch(N){console.error("Error listening on socket",g,N,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),aO.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,qG.handleHDBError)("Can not reference parent directories");let g=(0,Dt.join)(e,d.files).replace(/\\/g,"/"),N=g.indexOf("/*");if(N>-1&&d.files!==cO[l]?.files&&!(0,js.existsSync)(g.slice(0,N)))throw new Error(`The path '${g.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,HG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Dt.relative)(e,$).replace(/\\/g,"/");if(d.root){let k=d.root;if(k.startsWith("/")&&(k=k.slice(1)),k.endsWith("/")&&(k=k.slice(0,-1)),k+="/",w.startsWith(k))w=w.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Dt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await Oae($);f_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else f_.isMainThread&&await f.setupDirectory?.(B,$,t),t.isWorker&&await f.handleDirectory?.(B,$,t)}catch(k){k.message=`Could not load ${F.isFile()?"file":"directory"} '${$}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${k.message}`,h_?.(k),((0,Lc.getWorkerIndex)()===0?console:E_.default).error(k),t.set(d.path||"/",new m_(k)),Cc.set(s?l:(0,Dt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Dt.basename)(e)}' due to: ${h.message}`,h_?.(h),((0,Lc.getWorkerIndex)()===0?console:E_.default).error(h),t.set(d.path||"/",new m_(h),null,!0),Cc.set(s?l:(0,Dt.basename)(e),h.message)}}if(f_.isMainThread&&!xG&&i&&(0,Lc.watchDir)(e,async()=>kG()),o.extensionModule)return await $f((0,Dt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;h_?.(new Error(l)),((0,Lc.getWorkerIndex)()===0?console:E_.default).error(l),Cc.set((0,Dt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,h_?.(o),t.set("",new m_(o))}}}var js,Dt,f_,BG,uO,lO,HG,Lc,E_,qG,GG,Aae,FG,Oae,iO,aO,xG,oO,Cc,Nae,cO,UG,vG,h_,m_,sh=Re(()=>{js=require("fs"),Dt=require("path"),f_=require("worker_threads"),BG=require("yaml"),uO=D(j()),lO=D(R());MP();HP();qP();l0();Qq();Zq();HG=D(require("fast-glob")),Lc=D(Qe()),E_=D(v());jT();Pr();qG=D(Z());Ls();fe();Xh();GG=D(j()),Aae=D(sG());WE();OG();DG();FG=D(rt());nO();({readFile:Oae}=js.promises),iO=uO.get(lO.CONFIG_PARAMS.COMPONENTSROOT),aO=new Map,Cc=new Map;a(kG,"loadComponentDirectories");Nae={REST:ph,rest:ph,graphqlSchema:QT,jsResource:JT,fastifyRoutes:FA,login:ZT,static:xA,operationsApi:Aae,customFunctions:{},http:{},clustering:jA,authentication:kl,mqtt:eO},cO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(cO,"static",{value:{files:"web/**"}});UG=[],vG=new Map;a(bae,"setErrorReporter");a(Jh,"loadComponent");m_=class extends Ut{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 Zh=T((OOe,VG)=>{var{isMainThread:$G}=require("worker_threads"),{getTables:yae}=(fe(),te(De)),{loadComponentDirectories:Iae,loadComponent:wae}=(sh(),te(rh)),{resetResources:Cae}=(lu(),te(Qb)),Lae=HR(),Dae=rt(),{dirname:Pae}=require("path"),{getConnection:Mae}=st(),Uae=j(),vae=R(),dO=new Map;async function Bae(e=!1){!$G&&Uae.get(vae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Mae();try{$G&&await Lae()}catch(s){console.error(s)}let t=Cae();yae(),t.isWorker=e,await wae(Pae(Dae.getConfigFilePath()),t,"hdb",!0,dO),await Iae(dO,t);let r=[];for(let[s]of dO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Bae,"loadRootComponents");VG.exports.loadRootComponents=Bae});var Qe=T((bOe,to)=>{"use strict";var{Worker:Hae,MessageChannel:qae,parentPort:yn,isMainThread:pO,threadId:Gae,workerData:Ei}=require("worker_threads"),{PACKAGE_ROOT:Fae}=R(),{join:QG,isAbsolute:xae,extname:kae}=require("path"),{server:jG}=(Pr(),te(So)),{watch:$ae,readdir:Vae}=require("fs/promises"),{totalmem:YG}=require("os"),rm=R(),Yae=j(),hi=v(),{randomBytes:Kae}=require("crypto"),{_assignPackageExport:Wae}=require("../index"),Qae=R(),KG=1024*1024,eo=[],Rs=[],jae=50,SO=1e4,zae="restart",zG="request_thread_info",JG="resource_report",XG="thread_info",ZG="added-port",Jae="ack",fO;Wae("threads",Rs);to.exports={startWorker:EO,restartWorkers:gO,shutdownWorkers:rce,workers:eo,setMonitorListener:lce,onMessageFromWorkers:sce,onMessageByType:iF,broadcast:ice,broadcastWithAcknowledgement:ace,setChildListenerByType:tce,getWorkerIndex:eF,getWorkerCount:tF,getTicketKeys:rF,setMainIsWorker:Zae,setTerminateTimeout:Xae,restartNumber:Ei?.restartNumber||1};Rs.onMessageByType=iF;Rs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rs.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var TO;function Xae(e){SO=e}a(Xae,"setTerminateTimeout");function eF(){return Ei?Ei.workerIndex:TO?0:void 0}a(eF,"getWorkerIndex");function tF(){return Ei?Ei.workerCount:TO?1:void 0}a(tF,"getWorkerCount");function Zae(e){TO=e}a(Zae,"setMainIsWorker");var em;function rF(){return em||(em=pO?Kae(48):Ei.ticketKeys,em)}a(rF,"getTicketKeys");Object.defineProperty(jG,"workerIndex",{get(){return eF()}});Object.defineProperty(jG,"workerCount",{get(){return tF()}});var sF={[zG](e,t){cce(t)},[JG](e,t){uce(t,e)}};function EO(e,t={}){let r=process.constrainedMemory?.()||YG();r=Math.min(r,YG(),2e4*KG);let s=Math.max(Math.floor(r/KG/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Rs){let _=new qae;_.existingPort=u,i.push(_),o.push(_.port2)}kae(e)||(e+=".js");let c=new Hae(xae(e)?e:QG(Fae,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:to.exports.restartNumber,ticketKeys:rF()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:ZG,port:u,threadId:c.threadId},[u]);return sm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>EO(e,t),c.on("error",u=>{console.error("Worker error:",u),hi.error("Worker error:",u)}),c.on("exit",u=>{eo.splice(eo.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<jae?(t.unexpectedRestarts=c.unexpectedRestarts+1,EO(e,t)):hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{sF[u.type]?.(u,c)}),eo.push(c),dce(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(EO,"startWorker");var ece=[rm.THREAD_TYPES.HTTP];async function gO(e=null,t=2,r=!0){if(pO){if(r){let{loadRootComponents:o}=Zh();await o()}to.exports.restartNumber++,t<1&&(t=t*eo.length);let s=[],n=[];for(let o of eo.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;hi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:to.exports.restartNumber,type:rm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=ece.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),SO*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Qae.ITC_EVENT_TYPES.CHILD_STARTED&&(hi.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");hi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=Qo();r&&(e==="http"||!e)&&Yae.get(rm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else yn.postMessage({type:zae,workerType:e})}a(gO,"restartWorkers");function tce(e,t){sF[e]=t}a(tce,"setChildListenerByType");function rce(e){return gO(e,1/0,!1)}a(rce,"shutdownWorkers");var nF=[];function sce(e){nF.push(e)}a(sce,"onMessageFromWorkers");var hO=new Map;function iF(e,t){let r=hO.get(e);r||hO.set(e,r=[]),r.push(t)}a(iF,"onMessageByType");var nce=10;async function ice(e){let t=0;for(let r of Rs)try{r.postMessage(e),t++>nce&&(t=0,await new Promise(setImmediate))}catch(s){hi.error("Unable to send message to worker",s)}}a(ice,"broadcast");var tm=new Map,oce=1;function ace(e){return new Promise(t=>{let r=0;for(let s of Rs)try{let n=oce++,i=a(()=>{tm.delete(n),--r===0&&t(),s!==yn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,tm.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of tm)o.port===s&&o()})),s.postMessage(e),r++}catch(n){hi.error("Unable to send message to worker",n)}r===0&&t()})}a(ace,"broadcastWithAcknowledgement");function cce(e){e.postMessage({type:XG,workers:oF()})}a(cce,"sendThreadInfo");function oF(){let e=Date.now();return eo.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(oF,"getChildWorkerInfo");function uce(e,t){e.resources=t,e.resources.updated=Date.now()}a(uce,"recordResourceReport");var mO;function lce(e){mO=e}a(lce,"setMonitorListener");var _ce=1e3,WG=!1;function dce(){WG||(WG=!0,setInterval(()=>{for(let e of eo){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}mO&&mO()},_ce).unref())}a(dce,"startMonitoring");var fce=1e3;if(yn){sm(yn);for(let e=0,t=Ei.addPorts.length;e<t;e++){let r=Ei.addPorts[e];r.threadId=Ei.addThreadIds[e],sm(r)}setInterval(()=>{let e=process.memoryUsage();yn.postMessage({type:JG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},fce).unref(),fO=a(()=>new Promise((e,t)=>{yn.on("message",r),yn.postMessage({type:zG});function r(s){s.type===XG&&(yn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fO=oF;to.exports.getThreadInfo=fO;function sm(e,t){Rs.push(e),e.on("message",r=>{if(r.type===ZG)r.port.threadId=r.threadId,sm(r.port);else if(r.type===Jae){let s=tm.get(r.id);s&&s()}else{for(let n of nF)n(r,e);let s=hO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){hi.error(i)}}}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(sm,"addPort");if(pO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Vae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(QG(s,i.name));try{for await(let{filename:i}of $ae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await gO(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");to.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else yn.on("message",async e=>{let{type:t}=e;t===rm.ITC_EVENT_TYPES.SHUTDOWN&&(to.exports.restartNumber=e.restartNumber,yn.unref(),setTimeout(()=>{hi.warn("Thread did not voluntarily terminate",Gae),process.exit(0)},SO).unref())})});var mF=T(g_=>{"use strict";var{isMainThread:Ece,parentPort:T_,threadId:p_}=require("worker_threads"),{Socket:hce,createServer:mce}=require("net"),{createServer:pce,IncomingMessage:Sce}=require("http"),{createServer:Tce}=require("https"),{readFileSync:Dc}=require("fs"),In=v(),Pt=j(),mi=R(),{server:im}=(Pr(),te(So)),{WebSocketServer:gce}=require("ws"),{createServer:Rce}=require("tls"),{getTicketKeys:Ace,restartNumber:Oce}=Qe(),{Headers:lF}=($E(),te(LB)),{recordAction:S_,recordActionBinary:Nce}=(jn(),te(el)),{Request:_F,node_request_key:IOe,createReuseportFd:aF}=(nO(),te(MG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Oce<=1&&In.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:wOe,CONFIG_PARAMS:bce}=mi;Pt.initSync();var yce=Pt.get(bce.HTTP_SESSIONAFFINITY),wn={};g_.registerServer=yO;g_.httpServer=IO;g_.deliverSocket=bO;g_.startServers=dF;im.http=IO;im.request=Lce;im.socket=Dce;im.ws=Pce;var RO=[],AO=[],Ice,oa={},nm={},wce=[],OO=[];function dF(){return Zh().loadRootComponents(!0).then(()=>{T_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)bO(s,r,n);else if(t.requestId)Cce(t);else if(t.type===mi.ITC_EVENT_TYPES.SHUTDOWN){In.trace("received shutdown request",p_);for(let i in wn){let o=wn[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),In.info("Closed all http connections",i,p_)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,p_),o.cantCleanupProperly||In.warn("Had to forcefully exit the thread",p_),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(aF&&!yce)for(let t in wn){let r=wn[t],s;try{s=aF(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),In.trace("Listening on port "+t,p_)}).on("error",i)}))}Promise.all(e).then(()=>{T_?.postMessage({type:mi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(dF,"startServers");Ece||dF();function bO(e,t,r){let s=e?.read?e:new hce({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=wn[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=wn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(In.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(bO,"deliverSocket");var cF=new Map;function Cce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=cF.get(n),r){case"connection":i=bO(void 0,t),cF.set(n,i),i.write=(c,u,_)=>(T_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(T_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),T_.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(Cce,"proxyRequest");function yO(e,t){+t||(t=parseInt(Pt.get(mi.CONFIG_PARAMS.HTTP_PORT),10));let r=wn[t];if(r){let s=r.lastServer||r;s.off("unhandled",uF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else wn[t]=e;e.on("unhandled",uF)}a(yO,"registerServer");function fF(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=[],Pt.get(mi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pt.get(mi.CONFIG_PARAMS.HTTP_PORT),secure:Pt.get(mi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(fF,"getPorts");function IO(e,t){for(let{port:r,secure:s}of fF(t))EF(r,s,t?.isOperationsServer),typeof e=="function"?OO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):yO(e,r),nm[r]=NO(OO,r),Ice=NO(wce,r)}a(IO,"httpServer");function EF(e,t,r){if(!oa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Pt.get(s+"_keepAliveTimeout"),headersTimeout:Pt.get(s+"_headersTimeout"),requestTimeout:Pt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Pt.get(s+"tls_privateKey"),o=Pt.get(s+"tls_certificate"),c=Pt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Dc(i),cert:Dc(o)+(c?`
31
+ `+xA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Joe,"getServerOptions");function Xoe(){let e=Qs.get(di.OPERATIONSAPI_NETWORK_CORS),t=Qs.get(di.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Qoe)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(Xoe,"getCORSOpts");function Zoe(){return Qs.get(di.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Koe}a(Zoe,"getHeaderTimeoutConfig")});var EG=T((KAe,fG)=>{"use strict";var{decode:eae}=require("msgpackr"),{isMainThread:$Ae,parentPort:tae,threadId:VAe}=require("worker_threads"),iG=st(),fi=ke(),rae=R(),f_=U(),sG=j(),oG=R();Qe();var sae=Qn(),{recordAction:nae,recordActionBinary:iae}=(zn(),te(tl)),{publishToStream:oae}=iG,YAe={durable:fi.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:fi.WORK_QUEUE_CONSUMER_NAMES.deliver_group},aae,cae,uae,aG,cG;fG.exports={initialize:uG,workQueueListener:dG,setSubscription:lae,setIgnoreOrigin:dae,getDatabaseSubscriptions:_ae};async function uG(){cG=!0,f_.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iG.getNATSReferences();aae=e,cae=e.info.server_name,uae=t,aG=r}a(uG,"initialize");var xh=new Map;function lae(e,t,r){let s=xh.get(e);s||xh.set(e,s=new Map),s.set(t,r),cG||uG().then(dG)}a(lae,"setSubscription");function _ae(){return xh}a(_ae,"getDatabaseSubscriptions");var lG;function dae(e){lG=e}a(dae,"setIgnoreOrigin");var _G=100,nG=new Array(_G),Fh=0;async function dG(){let t=await(await aG.consumers.get(fi.WORK_QUEUE_CONSUMER_NAMES.stream_name,fi.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();tae?.on("message",async r=>{let{type:s}=r;s===oG.ITC_EVENT_TYPES.SHUTDOWN&&t.close()});for await(let r of t)await nG[Fh],nG[Fh]=fae(r).catch(s=>{f_.error(s)}),++Fh>=_G&&(Fh=0)}a(dG,"workQueueListener");async function fae(e){let t=eae(e.data);nae(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=sG.get(rae.CONFIG_PARAMS.CLUSTERING_NODENAME);r.has(fi.MSG_HEADERS.TRANSACTED_NODES)&&r.values(fi.MSG_HEADERS.TRANSACTED_NODES).indexOf(n)>-1&&(s=!0);let i=r.get(fi.MSG_HEADERS.ORIGIN);if(s||(s=i===n&&!lG),iae(s,"echo",e.subject,t.operation,"ingest"),s){e.ack();return}r.append(fi.MSG_HEADERS.TRANSACTED_NODES,n);try{let{operation:o,schema:c,next:u,table:_,records:l,hash_values:d,__origin:f,expiresAt:E}=t;f_.trace("processing message:",o,c,_,(l?"records: "+l.map(N=>N?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),f_.trace(`messageProcessor nats msg id: ${e.headers.get(fi.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:m,user:S,node_name:A}=f||{},g=xh.get(c)?.get(_);if(!g)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,g.send(t);else if(l.length===1&&!u)g.send({type:kA(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:m,table:_,onCommit:h,user:S,nodeName:A});else{let N=l.map((V,$)=>({type:kA(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)N.push({type:kA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:N,table:_,timestamp:m,onCommit:h,user:S,nodeName:A})}sG.get(oG.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&oae(e.subject.split(".").slice(0,-1).join("."),sae.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){f_.error(o)}e.ack()}a(fae,"messageProcessor");function kA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(kA,"convertOperation")});var QA={};Fe(QA,{disableNATS:()=>hae,publishToStream:()=>Kh,setNATSReplicator:()=>$A,setPublishToStream:()=>mae,setSubscription:()=>WA,start:()=>Eae});function Eae(){$h.default.get(Vh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Sae()}function hae(e=!0){TG=e}function mae(e,t){Kh=e,WA=t}function Sae(){if(TG||process.env._DISABLE_NATS)return;let e=Hs(),t=Object.keys(e);t.push("system");for(let r of t){let s=e[r];for(let n in s){let i=s[n];$A(n,r,i)}}xT((r,s)=>{$A(r.tableName,r.databaseName,r),s&&RG(r)}),!hG&&(hG=!0)}function $A(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.sources.some(n=>n?.isNATSReplicator))return;r.sourcedFrom(class extends Ut{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Le],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Le]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Le],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Le]})}static defineSchema(i){RG(i)}static subscribe(){let i=new ws;return WA(t,e,i),i}static subscribeOnThisThread(i){return i<pae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{intermediateSource:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new kh(n.transaction,n);let o=n.transaction;for(;o.next;)o=o.next;o.next=n.transaction.nats,i.user=n.user,i.context=n}else i=gG;return i}a(s,"getNATSTransaction")}function RG(e){let t=$h.default.get(Vh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Kh(`${YA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,KA.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 mG,YA,KA,pG,SG,$h,Vh,Yh,TG,Kh,WA,pae,gG,hG,kh,VA,AG=Re(()=>{Ee();Ls();mG=D(st()),YA=D(ke()),KA=D(Qn());uu();pG=D(EG()),SG=D(or()),$h=D(j()),Vh=D(R()),Yh=D(U());a(Eae,"start");a(hae,"disableNATS");Kh=mG.publishToStream,WA=pG.setSubscription;a(mae,"setPublishToStream");pae=2;a(Sae,"assignReplicationSource");a($A,"setNATSReplicator");a(RG,"publishSchema");kh=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 s=this.writes_by_db.get(t);s||this.writes_by_db.set(t,s=[]),s.push(r)}commit({timestamp:t}){let r=$h.default.get(Vh.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,_;for(let l of i){let d=l.table,f=l.operation=="put"?"upsert":l.operation;u||(Yh.trace(`Sending transaction event ${f}`),_=u={operation:f,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,f!=="delete"&&f!=="invalidate"&&(u.records=o)),u.table===d&&u.operation===f?(o.push(l.record),c.push(l.id)):_=_.next={operation:f,table:d,id:l.id,record:l.record},l.expiresAt&&(_.expiresAt=l.expiresAt)}u&&s.push(Kh(`${YA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,KA.createNatsTableStreamName)(n,u.table),void 0,u)?.catch(l=>{throw Yh.error("An error has occurred trying to replicate transaction",u,l),l.statusCode=504,l}))}return Promise.all(s)}},VA=class extends kh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,SG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};gG=new VA});async function NG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await jA.getResource(e,{});n=new JA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await jA.get(e);i&&i.delete()}n=new Qh(e,t)}return n}function zA(){return Wh++,Wh>65500&&(Wh=1),Wh}var OG,Cc,jA,Wh,Qh,JA,bG=Re(()=>{Ee();_u();OG=D(or()),Cc=D(U());Ao();jA=ut({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(NG,"getSession");Wh=1;a(zA,"getNextMessageId");Qh=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,_;if(c>-1?(u=n.slice(c),_=n.slice(0,c)):_=n,!_)throw new Error("No topic provided");let l=!1,d;if((_.endsWith("+")||_.endsWith("#"))&&(l=!0,_.endsWith("+")&&(d=!0),_=_.slice(0,_.length-1)),_.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(_.indexOf("#")>-1||_.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let f=this.subscriptions.find(g=>g.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,authorize:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,Cc.trace)("Resuming subscription from",n,"from",o);let h=Ci.getMatch(_);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);E.url=h.relativeURL;let m=h.path,S=h.Resource,A=await We(E,async()=>{let g=await S.subscribe(E);if(!g)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!g[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let N of g)try{let V;if(N.type&&N.type!=="put"&&N.type!=="delete"&&N.type!=="message"||s&&!s(N))continue;r?(N.topic=n,V=this.needsAcknowledge(N)):(N.acknowledge?.(),V=zA());let $=N.id;Array.isArray($)&&($=Aa($)),$==null&&($=""),this.listener(m+"/"+$,N.value,V,t)}catch(V){(0,Cc.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){let r=zA();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(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user,t.async=!0,t.authorize=!0;let i=Ci.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},JA=class extends Qh{static{a(this,"DurableSubscriptionsSession")}sessionRecord;constructor(t,r,s){super(t,r),this.sessionRecord=s||{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,s){return super.addSubscription(t,r,s)}needsAcknowledge(t){this.awaitingAcks||(this.awaitingAcks=new Map);let r=zA(),s={topic:t.topic,timestamp:t.timestamp};return t.acknowledge&&(s.acknowledge=t.acknowledge),this.awaitingAcks.set(r,s),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t),r.acknowledge?.();let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Cc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,OG.getNextMonotonicTime)()),(0,Cc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),jA.put(this.sessionRecord)),t.qos}}});var ZA={};Fe(ZA,{start:()=>gae});async function gae({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((o,c,u)=>{if(o.protocol==="mqtt"){let{onMessage:_,onClose:l}=wG(o,(d,f)=>{if(o.send(d),f&&o._socket.writableNeedDrain)return new Promise(E=>this._socket.once("drain",E))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",_),o.on("close",l),o.on("error",d=>{(0,gs.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Tae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,CG.getSuperUser)());let{onMessage:u,onClose:_}=wG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,gs.info)("Socket error",l)})},{port:t,securePort:s})}function wG(e,t,r,s,n){IG||(IG=!0,el(d=>{jh>0&&d.push({metric:"mqtt-connections",connections:jh,byThread:!0})}));let i;jh++;let o,c={protocolVersion:4},u=(0,zh.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){jh--,i||(i=!0,o?.disconnect(),us(!1,"connection","mqtt","disconnect"))}return a(l,"onClose"),u.on("packet",async d=>{s?.then&&(s=await s),o?.then&&await o;try{switch(d.cmd){case"connect":if(c.protocolVersion=d.protocolVersion,d.username)try{s=await Tt.getUser(d.username,d.password.toString()),(0,XA.get)(Ei.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&yG.notify({username:s.username,status:Ei.AUTH_AUDIT_STATUS.SUCCESS,type:Ei.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,XA.get)(Ei.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&yG.error({username:s.username,status:Ei.AUTH_AUDIT_STATUS.FAILURE,type:Ei.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),f({cmd:"connack",reasonCode:4,returnCode:134})}if(!s&&n.requireAuthentication)return us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=NG({user:s,...d}),o=await o}catch(N){return(0,gs.error)(N),us(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:N.code||5,returnCode:N.code||128})}us(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((N,V,$,F)=>{try{let w=N.indexOf("/",1),K=w>0?N.slice(0,w):N;f({cmd:"publish",topic:N,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},K)}catch(w){(0,gs.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let N of d.subscriptions){let V;try{V=(await o.addSubscription(N,N.qos>=1)).qos||0}catch($){(0,gs.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let N of d.unsubscriptions)o.removeSubscription(N);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let m=d.qos===2?"pubrec":"puback",S=e.deserialize||(e.deserialize=Ac(r?.headers.get?.("content-type"))),A=d.payload?.length>0?S(d.payload):void 0,g;try{g=await o.publish(d,A)}catch(N){(0,gs.warn)(N),d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:128},d.topic);break}d.qos>0&&f({cmd:m,messageId:d.messageId,reasonCode:g===!1?144:0},d.topic);break;case"pubrec":f({cmd:"pubrel",messageId:d.messageId,reasonCode:0});break;case"pubcomp":case"puback":o.acknowledge(d.messageId);break;case"pingreq":f({cmd:"pingresp"});break;case"disconnect":i=!0,o?.disconnect(),us(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,gs.error)(h),f({cmd:"disconnect"})}function f(h,m){let S=(0,zh.generate)(h,c);t(S),kr(S.length,"bytes-sent",m,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return Xi(h,r)}a(E,"serialize")}),{onMessage:_,onClose:l}}var zh,CG,XA,Ei,gs,yG,Tae,IG,jh,LG=Re(()=>{zh=require("mqtt-packet");bG();CG=D(Er());hc();zn();Pr();XA=D(j()),Ei=D(R()),gs=D(U()),yG=(0,gs.loggerWithTag)("auth-event"),Tae=!0;a(gae,"start");jh=0;a(wG,"onSocket")});var PG={};Fe(PG,{Request:()=>eO,createReuseportFd:()=>Jh});var DG,eO,tO,rO,Jh,sO=Re(()=>{DG=require("os"),eO=class{static{a(this,"Request")}#e;constructor(t,r){this.method=t.method;let s=t.url;this._nodeRequest=t,this._nodeResponse=r,this.url=s,this.headers=new rO(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 body(){return this.#e||(this.#e=new tO(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},tO=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},rO=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,s]of this)t(s,r,this)}};(0,DG.platform)()!="win32"&&(Jh=require("node-unix-socket").createReuseportFd)});var sh={};Fe(sh,{component_errors:()=>Lc,loadComponent:()=>Xh,loadComponentDirectories:()=>xG,setErrorReporter:()=>Nae});function xG(e,t){t&&(iO=t),e&&(oO=e);let r=[];if((0,js.existsSync)(nO)){let n=(0,js.readdirSync)(nO,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dt.join)(nO,o);r.push(Xh(c,iO,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Xh(s,iO,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{FG=!0})}function Nae(e){m_=e}async function Xh(e,t,r,s,n,i){if(!UG.has(e)){UG.set(e,!0),n&&(oO=n);try{let o;s&&(Lc=new Map);let c=(0,Dt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,js.existsSync)(c)?o=s?(0,GG.getConfigObj)():(0,vG.parseDocument)((0,js.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=aO;let u=[],_=s;for(let l in o){let d=o[l];if(Lc.set(s?l:(0,Dt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,N;for(;!(0,js.existsSync)(N=(0,Dt.join)(g,"node_modules",l));)if(g=(0,Dt.dirname)(g),g.length<(0,qG.getHdbBasePath)().length){N=null;break}if(N)f=await Xh(N,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=Oae[l];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,ut(g)),"ensureTable"),m=d.network||(d.port||d.securePort)&&d,S=m?.securePort||m?.https&&m.port,A=!m?.https&&m?.port;if(E_.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f,s&&m))for(let g of[A,S])try{if(+g&&!MG.includes(g)){let N=cO.get(uO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);N&&h_.default.warn("Session affinity is not recommended and may cause memory leaks"),(N||!Jh)&&(MG.push(g),lO(g,N))}}catch(N){console.error("Error listening on socket",g,N,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:A,securePort:S,resources:t,...d})||f),oO.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,HG.handleHDBError)("Can not reference parent directories");let g=(0,Dt.join)(e,d.files).replace(/\\/g,"/"),N=g.indexOf("/*");if(N>-1&&d.files!==aO[l]?.files&&!(0,js.existsSync)(g.slice(0,N)))throw new Error(`The path '${g.slice(0,N)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,BG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Dt.relative)(e,$).replace(/\\/g,"/");if(d.root){let k=d.root;if(k.startsWith("/")&&(k=k.slice(1)),k.endsWith("/")&&(k=k.slice(0,-1)),k+="/",w.startsWith(k))w=w.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${w}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let K=(0,Dt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+K+B.slice(2):B==="."?"/"+K:"/"+K+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await Aae($);E_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else E_.isMainThread&&await f.setupDirectory?.(B,$,t),t.isWorker&&await f.handleDirectory?.(B,$,t)}catch(k){k.message=`Could not load ${F.isFile()?"file":"directory"} '${$}'${d.module?" using '"+d.module+"'":""} for application '${e}' due to: ${k.message}`,m_?.(k),((0,Dc.getWorkerIndex)()===0?console:h_.default).error(k),t.set(d.path||"/",new p_(k)),Lc.set(s?l:(0,Dt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Dt.basename)(e)}' due to: ${h.message}`,m_?.(h),((0,Dc.getWorkerIndex)()===0?console:h_.default).error(h),t.set(d.path||"/",new p_(h),null,!0),Lc.set(s?l:(0,Dt.basename)(e),h.message)}}if(E_.isMainThread&&!FG&&i&&(0,Dc.watchDir)(e,async()=>xG()),o.extensionModule)return await Vf((0,Dt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;m_?.(new Error(l)),((0,Dc.getWorkerIndex)()===0?console:h_.default).error(l),Lc.set((0,Dt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,m_?.(o),t.set("",new p_(o))}}}var js,Dt,E_,vG,cO,uO,BG,Dc,h_,HG,qG,Rae,GG,Aae,nO,oO,FG,iO,Lc,Oae,aO,MG,UG,m_,p_,nh=Re(()=>{js=require("fs"),Dt=require("path"),E_=require("worker_threads"),vG=require("yaml"),cO=D(j()),uO=D(R());PP();BP();HP();u0();Wq();Xq();BG=D(require("fast-glob")),Dc=D(Qe()),h_=D(U());QT();Pr();HG=D(Z());Ls();Ee();Zh();qG=D(j()),Rae=D(rG());QE();AG();LG();GG=D(rt());sO();({readFile:Aae}=js.promises),nO=cO.get(uO.CONFIG_PARAMS.COMPONENTSROOT),oO=new Map,Lc=new Map;a(xG,"loadComponentDirectories");Oae={REST:Sh,rest:Sh,graphqlSchema:WT,jsResource:zT,fastifyRoutes:GA,login:XT,static:FA,operationsApi:Rae,customFunctions:{},http:{},clustering:QA,authentication:$l,mqtt:ZA},aO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(aO,"static",{value:{files:"web/**"}});MG=[],UG=new Map;a(Nae,"setErrorReporter");a(Xh,"loadComponent");p_=class extends Ut{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 em=T((AOe,$G)=>{var{isMainThread:kG}=require("worker_threads"),{getTables:bae}=(Ee(),te(De)),{loadComponentDirectories:yae,loadComponent:Iae}=(nh(),te(sh)),{resetResources:wae}=(_u(),te(Wb)),Cae=BR(),Lae=rt(),{dirname:Dae}=require("path"),{getConnection:Pae}=st(),Mae=j(),Uae=R(),_O=new Map;async function vae(e=!1){!kG&&Mae.get(Uae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Pae();try{kG&&await Cae()}catch(s){console.error(s)}let t=wae();bae(),t.isWorker=e,await Iae(Dae(Lae.getConfigFilePath()),t,"hdb",!0,_O),await yae(_O,t);let r=[];for(let[s]of _O)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(vae,"loadRootComponents");$G.exports.loadRootComponents=vae});var Qe=T((NOe,ro)=>{"use strict";var{Worker:Bae,MessageChannel:Hae,parentPort:yn,isMainThread:mO,threadId:qae,workerData:hi}=require("worker_threads"),{PACKAGE_ROOT:Gae}=R(),{join:WG,isAbsolute:Fae,extname:xae}=require("path"),{server:QG}=(Pr(),te(To)),{watch:kae,readdir:$ae}=require("fs/promises"),{totalmem:VG}=require("os"),sm=R(),Vae=j(),mi=U(),{randomBytes:Yae}=require("crypto"),{_assignPackageExport:Kae}=require("../index"),Wae=R(),YG=1024*1024,to=[],Rs=[],Qae=50,pO=1e4,jae="restart",jG="request_thread_info",zG="resource_report",JG="thread_info",XG="added-port",zae="ack",dO;Kae("threads",Rs);ro.exports={startWorker:fO,restartWorkers:TO,shutdownWorkers:tce,workers:to,setMonitorListener:uce,onMessageFromWorkers:rce,onMessageByType:nF,broadcast:nce,broadcastWithAcknowledgement:oce,setChildListenerByType:ece,getWorkerIndex:ZG,getWorkerCount:eF,getTicketKeys:tF,setMainIsWorker:Xae,setTerminateTimeout:Jae,restartNumber:hi?.restartNumber||1};Rs.onMessageByType=nF;Rs.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Rs.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var SO;function Jae(e){pO=e}a(Jae,"setTerminateTimeout");function ZG(){return hi?hi.workerIndex:SO?0:void 0}a(ZG,"getWorkerIndex");function eF(){return hi?hi.workerCount:SO?1:void 0}a(eF,"getWorkerCount");function Xae(e){SO=e}a(Xae,"setMainIsWorker");var tm;function tF(){return tm||(tm=mO?Yae(48):hi.ticketKeys,tm)}a(tF,"getTicketKeys");Object.defineProperty(QG,"workerIndex",{get(){return ZG()}});Object.defineProperty(QG,"workerCount",{get(){return eF()}});var rF={[jG](e,t){ace(t)},[zG](e,t){cce(t,e)}};function fO(e,t={}){let r=process.constrainedMemory?.()||VG();r=Math.min(r,VG(),2e4*YG);let s=Math.max(Math.floor(r/YG/(10+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>6,16),64),i=[],o=[];for(let u of Rs){let _=new Hae;_.existingPort=u,i.push(_),o.push(_.port2)}xae(e)||(e+=".js");let c=new Bae(Fae(e)?e:WG(Gae,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:o,addThreadIds:i.map(u=>u.existingPort.threadId),workerIndex:t.workerIndex,workerCount:t.threadCount,name:t.name,restartNumber:ro.exports.restartNumber,ticketKeys:tF()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:XG,port:u,threadId:c.threadId},[u]);return nm(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>fO(e,t),c.on("error",u=>{console.error("Worker error:",u),mi.error("Worker error:",u)}),c.on("exit",u=>{to.splice(to.indexOf(c),1),!c.wasShutdown&&t.autoRestart!==!1&&(c.unexpectedRestarts<Qae?(t.unexpectedRestarts=c.unexpectedRestarts+1,fO(e,t)):mi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{rF[u.type]?.(u,c)}),to.push(c),_ce(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(fO,"startWorker");var Zae=[sm.THREAD_TYPES.HTTP];async function TO(e=null,t=2,r=!0){if(mO){if(r){let{loadRootComponents:o}=em();await o()}ro.exports.restartNumber++,t<1&&(t=t*to.length);let s=[],n=[];for(let o of to.slice(0)){if(e&&o.name!==e||o.wasShutdown)continue;mi.trace("sending shutdown request to ",o.threadId),o.postMessage({restartNumber:ro.exports.restartNumber,type:sm.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Zae.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),pO*2).unref();o.on("exit",()=>{clearTimeout(l),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),_()})});if(s.push(u),c&&r){let _=o.startCopy(),l=new Promise(d=>{let f=a(E=>{E.type===Wae.ITC_EVENT_TYPES.CHILD_STARTED&&(mi.trace("Worker has started",_.threadId),d(),n.splice(n.indexOf(l)),_.off("message",f))},"startListener");mi.trace("Waiting for worker to start",_.threadId),_.on("message",f)});n.push(l),s.length>=t&&await Promise.race(s),n.length>=t&&await Promise.race(n)}}await Promise.all(s),await Promise.all(n);let{restartService:i}=jo();r&&(e==="http"||!e)&&Vae.get(sm.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await i({service:"clustering"})}else yn.postMessage({type:jae,workerType:e})}a(TO,"restartWorkers");function ece(e,t){rF[e]=t}a(ece,"setChildListenerByType");function tce(e){return TO(e,1/0,!1)}a(tce,"shutdownWorkers");var sF=[];function rce(e){sF.push(e)}a(rce,"onMessageFromWorkers");var EO=new Map;function nF(e,t){let r=EO.get(e);r||EO.set(e,r=[]),r.push(t)}a(nF,"onMessageByType");var sce=10;async function nce(e){let t=0;for(let r of Rs)try{r.postMessage(e),t++>sce&&(t=0,await new Promise(setImmediate))}catch(s){mi.error("Unable to send message to worker",s)}}a(nce,"broadcast");var rm=new Map,ice=1;function oce(e){return new Promise(t=>{let r=0;for(let s of Rs)try{let n=ice++,i=a(()=>{rm.delete(n),--r===0&&t(),s!==yn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,rm.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of rm)o.port===s&&o()})),s.postMessage(e),r++}catch(n){mi.error("Unable to send message to worker",n)}r===0&&t()})}a(oce,"broadcastWithAcknowledgement");function ace(e){e.postMessage({type:JG,workers:iF()})}a(ace,"sendThreadInfo");function iF(){let e=Date.now();return to.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(iF,"getChildWorkerInfo");function cce(e,t){e.resources=t,e.resources.updated=Date.now()}a(cce,"recordResourceReport");var hO;function uce(e){hO=e}a(uce,"setMonitorListener");var lce=1e3,KG=!1;function _ce(){KG||(KG=!0,setInterval(()=>{for(let e of to){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}hO&&hO()},lce).unref())}a(_ce,"startMonitoring");var dce=1e3;if(yn){nm(yn);for(let e=0,t=hi.addPorts.length;e<t;e++){let r=hi.addPorts[e];r.threadId=hi.addThreadIds[e],nm(r)}setInterval(()=>{let e=process.memoryUsage();yn.postMessage({type:zG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},dce).unref(),dO=a(()=>new Promise((e,t)=>{yn.on("message",r),yn.postMessage({type:jG});function r(s){s.type===JG&&(yn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else dO=iF;ro.exports.getThreadInfo=dO;function nm(e,t){Rs.push(e),e.on("message",r=>{if(r.type===XG)r.port.threadId=r.threadId,nm(r.port);else if(r.type===zae){let s=rm.get(r.id);s&&s()}else{for(let n of sF)n(r,e);let s=EO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){mi.error(i)}}}).on("close",()=>{Rs.splice(Rs.indexOf(e),1)}).on("exit",()=>{Rs.splice(Rs.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(nm,"addPort");if(mO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await $ae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(WG(s,i.name));try{for await(let{filename:i}of kae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await TO(),console.log("Reloaded HarperDB components")},100)}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");ro.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else yn.on("message",async e=>{let{type:t}=e;t===sm.ITC_EVENT_TYPES.SHUTDOWN&&(ro.exports.restartNumber=e.restartNumber,yn.unref(),setTimeout(()=>{mi.warn("Thread did not voluntarily terminate",qae),process.exit(0)},pO).unref())})});var hF=T(R_=>{"use strict";var{isMainThread:fce,parentPort:g_,threadId:S_}=require("worker_threads"),{Socket:Ece,createServer:hce}=require("net"),{createServer:mce,IncomingMessage:pce}=require("http"),{createServer:Sce}=require("https"),{readFileSync:Pc}=require("fs"),In=U(),Pt=j(),pi=R(),{server:om}=(Pr(),te(To)),{WebSocketServer:Tce}=require("ws"),{createServer:gce}=require("tls"),{getTicketKeys:Rce,restartNumber:Ace}=Qe(),{Headers:uF}=(VE(),te(CB)),{recordAction:T_,recordActionBinary:Oce}=(zn(),te(tl)),{Request:lF,node_request_key:yOe,createReuseportFd:oF}=(sO(),te(PG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){Ace<=1&&In.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:IOe,CONFIG_PARAMS:Nce}=pi;Pt.initSync();var bce=Pt.get(Nce.HTTP_SESSIONAFFINITY),wn={};R_.registerServer=bO;R_.httpServer=yO;R_.deliverSocket=NO;R_.startServers=_F;om.http=yO;om.request=Cce;om.socket=Lce;om.ws=Dce;var gO=[],RO=[],yce,aa={},im={},Ice=[],AO=[];function _F(){return em().loadRootComponents(!0).then(()=>{g_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)NO(s,r,n);else if(t.requestId)wce(t);else if(t.type===pi.ITC_EVENT_TYPES.SHUTDOWN){In.trace("received shutdown request",S_);for(let i in wn){let o=wn[i],c;o.closeIdleConnections&&(setInterval(()=>{o.closeIdleConnections()},25).unref(),setTimeout(()=>{o.closeAllConnections(),In.info("Closed all http connections",i,S_)},4e3).unref()),o.close?.(()=>{clearInterval(c),setTimeout(()=>{console.log("forced close server",i,S_),o.cantCleanupProperly||In.warn("Had to forcefully exit the thread",S_),process.exit(0)},5e3).unref()})}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(oF&&!bce)for(let t in wn){let r=wn[t],s;try{s=oF(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),In.trace("Listening on port "+t,S_)}).on("error",i)}))}Promise.all(e).then(()=>{g_?.postMessage({type:pi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(_F,"startServers");fce||_F();function NO(e,t,r){let s=e?.read?e:new Ece({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=wn[t];if(n.isSecure&&(s.startTime=performance.now()),n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=wn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(In.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(NO,"deliverSocket");var aF=new Map;function wce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=aF.get(n),r){case"connection":i=NO(void 0,t),aF.set(n,i),i.write=(c,u,_)=>(g_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(g_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),g_.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"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(wce,"proxyRequest");function bO(e,t){+t||(t=parseInt(Pt.get(pi.CONFIG_PARAMS.HTTP_PORT),10));let r=wn[t];if(r){let s=r.lastServer||r;s.off("unhandled",cF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else wn[t]=e;e.on("unhandled",cF)}a(bO,"registerServer");function dF(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=[],Pt.get(pi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Pt.get(pi.CONFIG_PARAMS.HTTP_PORT),secure:Pt.get(pi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Pt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Pt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(dF,"getPorts");function yO(e,t){for(let{port:r,secure:s}of dF(t))fF(r,s,t?.isOperationsServer),typeof e=="function"?AO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):bO(e,r),im[r]=OO(AO,r),yce=OO(Ice,r)}a(yO,"httpServer");function fF(e,t,r){if(!aa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Pt.get(s+"_keepAliveTimeout"),headersTimeout:Pt.get(s+"_headersTimeout"),requestTimeout:Pt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Pt.get(s+"tls_privateKey"),o=Pt.get(s+"tls_certificate"),c=Pt.get(s+"tls_certificateAuthority");Object.assign(n,{key:Pc(i),cert:Pc(o)+(c?`
32
32
 
33
- `+Dc(c):""),ticketKeys:Ace()})}oa[e]=(t?Tce:pce)(n,async(i,o)=>{try{let u=performance.now(),_=new _F(i,o);r&&(_.isOperationsServer=!0);let l=await nm[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=hF(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let g of l.headers||[])o.setHeader(g[0],g[1]);return i.baseRequest=_,o.baseResponse=l,oa[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,m;if(!l.handlesHeaders){let g=l.headers||new lF;if(h?h.length>=0&&(typeof h=="string"?g.set("Content-Length",Buffer.byteLength(h)):g.set("Content-Length",h.length),m=!0):(g.set("Content-Length","0"),m=!0),g.append){let N=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(N+=", miss"),g.append("Server-Timing",N,!0)}o.writeHead(d,g&&(g[Symbol.iterator]?Array.from(g):g)),m&&o.end(h)}let S=_.handlerPath,A=_.method;if(S_(E,"duration",S,A,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Nce(d<400,"success",S,A),!m)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let g=0;h.on("data",N=>{g+=N.length}),h.on("end",()=>{S_(performance.now()-f,"transfer",S,A),S_(g,"bytes-sent",S,A)})}else h?.then?h.then(g=>{o.end(g)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?In.warn(u):In.info(u):In.error(u)}a(c,"onError")}),t&&(oa[e].on("secureConnection",i=>{i._parent.startTime&&S_(performance.now()-i._parent.startTime,"tls-handshake",e),S_(i.isSessionReused(),"tls-reused",e)}),oa[e].isSecure=!0),yO(oa[e],e)}return oa[e]}a(EF,"getHTTPServer");function NO(e,t){let r=hF;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(NO,"makeCallbackChain");function hF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new lF}}a(hF,"unhandled");function Lce(e,t){IO(e,{requestOnly:!0,...t})}a(Lce,"onRequest");function Dce(e,t){if(t.securePort){let r=Pt.get("tls_privateKey"),s=Pt.get("tls_certificate"),n=Pt.get("tls_certificateAuthority"),i=Rce({key:Dc(r),cert:Dc(s)+(n?`
33
+ `+Pc(c):""),ticketKeys:Rce()})}aa[e]=(t?Sce:mce)(n,async(i,o)=>{try{let u=performance.now(),_=new lF(i,o);r&&(_.isOperationsServer=!0);let l=await im[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=EF(_)}if(l.headers?.set?.("Server","HarperDB"),l.status===-1){for(let g of l.headers||[])o.setHeader(g[0],g[1]);return i.baseRequest=_,o.baseResponse=l,aa[e].emit("unhandled",i,o)}let d=l.status||200,f=performance.now(),E=f-u,h=l.body,m;if(!l.handlesHeaders){let g=l.headers||new uF;if(h?h.length>=0&&(typeof h=="string"?g.set("Content-Length",Buffer.byteLength(h)):g.set("Content-Length",h.length),m=!0):(g.set("Content-Length","0"),m=!0),g.append){let N=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(N+=", miss"),g.append("Server-Timing",N,!0)}o.writeHead(d,g&&(g[Symbol.iterator]?Array.from(g):g)),m&&o.end(h)}let S=_.handlerPath,A=_.method;if(T_(E,"duration",S,A,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),Oce(d<400,"success",S,A),!m)if(h?.pipe){h.pipe(o),h.destroy&&o.on("close",()=>{h.destroy()});let g=0;h.on("data",N=>{g+=N.length}),h.on("end",()=>{T_(performance.now()-f,"transfer",S,A),T_(g,"bytes-sent",S,A)})}else h?.then?h.then(g=>{o.end(g)},c):o.end(h)}catch(u){c(u)}function c(u){let _=u.headers;o.writeHead(u.statusCode||500,_&&(_[Symbol.iterator]?Array.from(_):_)),o.end(u.toString()),u.statusCode?u.statusCode===500?In.warn(u):In.info(u):In.error(u)}a(c,"onError")}),t&&(aa[e].on("secureConnection",i=>{i._parent.startTime&&T_(performance.now()-i._parent.startTime,"tls-handshake",e),T_(i.isSessionReused(),"tls-reused",e)}),aa[e].isSecure=!0),bO(aa[e],e)}return aa[e]}a(fF,"getHTTPServer");function OO(e,t){let r=EF;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(OO,"makeCallbackChain");function EF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uF}}a(EF,"unhandled");function Cce(e,t){yO(e,{requestOnly:!0,...t})}a(Cce,"onRequest");function Lce(e,t){if(t.securePort){let r=Pt.get("tls_privateKey"),s=Pt.get("tls_certificate"),n=Pt.get("tls_certificateAuthority"),i=gce({key:Pc(r),cert:Pc(s)+(n?`
34
34
 
35
- `+Dc(n):"")},e);wn[t.securePort]=i}if(t.port){let r=mce(e);wn[t.port]=r}}a(Dce,"onSocket");Object.defineProperty(Sce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Pce(e,t){for(let{port:r,secure:s}of fF(t)){AO[r]||(AO[r]=new gce({server:EF(r,s)}),AO[r].on("connection",async(i,o)=>{try{let c=new _F(o);c.isWebSocket=!0;let u=nm[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<RO.length;l++){let d=RO[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){In.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";RO.push({listener:e,protocol:n}),nm[r]=NO(OO,r)}}a(Pce,"onWebSocket");function uF(e,t){t.writeHead(404),t.end(`Not found
36
- `)}a(uF,"defaultNotFound")});var PO={};Fe(PO,{startHTTPThreads:()=>Uce,startSocketServer:()=>_O,updateWorkerIdleness:()=>AF});async function Uce(e=2,t){if(t)CO(0,1,!0);else{let{loadRootComponents:r}=Zh();if(e===0)return(0,ro.setMainIsWorker)(!0),await mF().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)CO(r,e);return Promise.all(RF)}function CO(e,t=1,r){if(wO++,(0,ro.startWorker)("server/threads/threadServer.js",{name:cm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===cm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});RF.push(n),await n,Pc.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=am.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Pc.indexOf(s);o>-1&&Pc.splice(o,1)}if(a(i,"removeWorker"),Mc){let o=Mc;Mc=[];for(let c of o)gF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{LO?LO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,ro.shutdownWorkers)(),wO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function _O(e=0,t){if(typeof e=="string")try{(0,um.existsSync)(e)&&(0,um.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=vce:r=Bce(t):r=DO;let s=(0,Uc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=gF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),LO=!0,r(o,(c,u)=>{if(!c){if(pF){let l=o._socket||new Uc.Socket({handle:o,writable:!0,readable:!0});pF.deliverSocket(l,e,u),l.resume()}else wO>0?(Mc.length===0&&setTimeout(()=>{Mc.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,Mc.push(o)):(console.log("start up a dynamic thread to handle request"),CO(0));kr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new Uc.Socket({handle:o,writable:!0,readable:!0});Gce(l,c,e)}kr(!0,"socket-routed")})};let n=mo();TF.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function DO(e,t){let r,s=0;for(let n of Pc){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=om)return om=i,t(r);s=i}om=0,t(r)}function vce(e,t){let r={};e.getpeername(r);let s=r.address,n=vc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);DO(e,o=>{vc.set(s,{worker:o,lastUsed:i}),t(o)})}function Bce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Uc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=vc.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);DO(s,d=>{vc.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function AF(){om=0;for(let e of Pc)e.expectedIdle=e.recentELU.idle+Hce,e.requests=1;Pc.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Gce(e,t,r){let s=qce++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),am.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),am.delete(s)),n.event=="destroy"&&(e.destroy(),am.delete(s))})}var ro,Uc,cm,TF,um,Mce,Pc,Mc,gF,pF,wO,RF,LO,om,SF,vc,Hce,am,qce,Xh=Re(()=>{ro=D(Qe()),Uc=require("net"),cm=D(R()),TF=D(v()),um=require("fs");jn();({isMainThread:Mce}=require("worker_threads")),Pc=[],Mc=[],gF=[],wO=0,RF=[];Mce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Uce,"startHTTPThreads");a(CO,"startHTTPWorker");a(_O,"startSocketServer");om=0;a(DO,"findMostIdleWorker");SF=36e5,vc=new Map;a(vce,"findByRemoteAddressAffinity");a(Bce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vc)r.lastUsed+SF<e&&vc.delete(t)},SF).unref();Hce=1e3;a(AF,"updateWorkerIdleness");(0,ro.setMonitorListener)(AF);am=new Map,qce=1;a(Gce,"proxySocket")});var UO=T((MOe,OF)=>{"use strict";var R_=j();R_.initSync();var Bc=require("fs-extra"),MO=require("path"),Hc=R(),Fce=require("crypto"),xce=require("uuid").v4;OF.exports=kce;function kce(){if(R_.getHdbBasePath()!==void 0){let e=MO.join(R_.getHdbBasePath(),Hc.LICENSE_KEY_DIR_NAME,Hc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=MO.join(R_.getHdbBasePath(),Hc.LICENSE_KEY_DIR_NAME,Hc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=MO.join(R_.getHdbBasePath(),Hc.LICENSE_KEY_DIR_NAME,Hc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Bc.accessSync(r),Bc.accessSync(e),Bc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=xce(),i=Fce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Bc.writeFileSync(r,n),Bc.writeFileSync(e,i.privateKey),Bc.writeFileSync(t,i.publicKey)}else throw s}}}a(kce,"checkJWTTokenExist")});var bF=T((vOe,NF)=>{"use strict";var vO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};NF.exports={HdbInfoInsertObject:vO}});var wF=T((HOe,IF)=>{"use strict";var yF=R(),BO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[yF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[yF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};IF.exports={UpgradeObject:BO}});var lm=T((GOe,LF)=>{"use strict";var As=require("prompt"),qc=require("chalk"),CF=v(),zs=require("os"),HO=Eo(),qO=["yes","y"];async function $ce(e){let t=`${zs.EOL}`+qc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${zs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${zs.EOL}${zs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${zs.EOL}`;As.override=HO(["CONFIRM_UPGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_UPGRADE:{description:qc.magenta(`${zs.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await As.get([r])}catch(n){return CF.error("There was an error when prompting user about an upgrade."),CF.error(n),!1}return qO.includes(s.CONFIRM_UPGRADE)}a($ce,"forceUpdatePrompt");async function Vce(e){let t=`${zs.EOL}`+qc.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${zs.EOL}`);As.override=HO(["CONFIRM_DOWNGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:qc.magenta(`${zs.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await As.get([r]);return qO.includes(s.CONFIRM_DOWNGRADE)}a(Vce,"forceDowngradePrompt");async function Yce(){let e=`${zs.EOL}`+qc.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");As.override=HO(["GENERATE_CERTS"]),As.start(),As.message=e;let t={properties:{GENERATE_CERTS:{description:qc.magenta(`${zs.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await As.get([t]);return qO.includes(r.GENERATE_CERTS)}a(Yce,"upgradeCertsPrompt");LF.exports={forceUpdatePrompt:$ce,forceDowngradePrompt:Vce,upgradeCertsPrompt:Yce}});var FO=T((xOe,DF)=>{"use strict";var GO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};DF.exports=GO});var MF=T((WOe,PF)=>{"use strict";var Kce=G(),Wce=rt(),$Oe=v(),VOe=require("path"),YOe=require("fs"),KOe=R();PF.exports={getOldPropsValue:Qce};function Qce(e,t,r=!1){let s=t.getRaw(e);return Kce.isNotEmptyAndHasValue(s)?s:r?Wce.getDefaultConfig(e):""}a(Qce,"getOldPropsValue")});var HF=T((jOe,BF)=>{"use strict";var so=require("path"),no=require("fs-extra"),jce=require("properties-reader"),zce=FO(),ht=v(),{getOldPropsValue:Be}=MF(),{HDB_SETTINGS_NAMES:X,CONFIG_PARAMS:aa}=R(),ca=rt(),_m=j(),UF=G(),Cn=R(),xO=new zce("3.1.0"),vF=[];function Jce(){let e=jce(_m.get(X.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ht.info(t);let r=` ;Settings for the HarperDB process.
35
+ `+Pc(n):"")},e);wn[t.securePort]=i}if(t.port){let r=hce(e);wn[t.port]=r}}a(Lce,"onSocket");Object.defineProperty(pce.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Dce(e,t){for(let{port:r,secure:s}of dF(t)){RO[r]||(RO[r]=new Tce({server:fF(r,s)}),RO[r].on("connection",async(i,o)=>{try{let c=new lF(o);c.isWebSocket=!0;let u=im[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<gO.length;l++){let d=gO[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}catch(c){In.warn("Error handling WebSocket connection",c)}}));let n=t?.subProtocol||"";gO.push({listener:e,protocol:n}),im[r]=OO(AO,r)}}a(Dce,"onWebSocket");function cF(e,t){t.writeHead(404),t.end(`Not found
36
+ `)}a(cF,"defaultNotFound")});var DO={};Fe(DO,{startHTTPThreads:()=>Mce,startSocketServer:()=>lO,updateWorkerIdleness:()=>RF});async function Mce(e=2,t){if(t)wO(0,1,!0);else{let{loadRootComponents:r}=em();if(e===0)return(0,so.setMainIsWorker)(!0),await hF().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)wO(r,e);return Promise.all(gF)}function wO(e,t=1,r){if(IO++,(0,so.startWorker)("server/threads/threadServer.js",{name:um.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===um.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});gF.push(n),await n,Mc.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=cm.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Mc.indexOf(s);o>-1&&Mc.splice(o,1)}if(a(i,"removeWorker"),Uc){let o=Uc;Uc=[];for(let c of o)TF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{CO?CO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,so.shutdownWorkers)(),IO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function lO(e=0,t){if(typeof e=="string")try{(0,lm.existsSync)(e)&&(0,lm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Uce:r=vce(t):r=LO;let s=(0,vc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=TF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),CO=!0,r(o,(c,u)=>{if(!c){if(mF){let l=o._socket||new vc.Socket({handle:o,writable:!0,readable:!0});mF.deliverSocket(l,e,u),l.resume()}else IO>0?(Uc.length===0&&setTimeout(()=>{Uc.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,Uc.push(o)):(console.log("start up a dynamic thread to handle request"),wO(0));kr(!1,"socket-routed");return}c.requests++;let _=o.fd;if(_>=0)c.postMessage({port:e,fd:_,data:u});else{let l=o._socket||new vc.Socket({handle:o,writable:!0,readable:!0});qce(l,c,e)}kr(!0,"socket-routed")})};let n=po();SF.info(`HarperDB ${n.version} Server running on port ${e}`)}return s.on("error",n=>{console.error("Error in socket server",n)}),process.env._UNREF_SERVER&&s.unref(),s}function LO(e,t){let r,s=0;for(let n of Mc){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=am)return am=i,t(r);s=i}am=0,t(r)}function Uce(e,t){let r={};e.getpeername(r);let s=r.address,n=Bc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);LO(e,o=>{Bc.set(s,{worker:o,lastUsed:i}),t(o)})}function vce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new vc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Bc.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);LO(s,d=>{Bc.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function RF(){am=0;for(let e of Mc)e.expectedIdle=e.recentELU.idle+Bce,e.requests=1;Mc.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function qce(e,t,r){let s=Hce++;t.postMessage({port:r,requestId:s,event:"connection"}),e.on("data",n=>{let i=n.toString("latin1");t.postMessage({port:r,requestId:s,data:i,event:"data"})}).on("close",n=>{t.postMessage({port:r,requestId:s,event:"close",hadError:n})}).on("error",n=>{t.postMessage({port:r,requestId:s,event:"error",error:n})}).on("drain",n=>{t.postMessage({port:r,requestId:s,event:"drain",error:n})}).on("end",()=>{t.postMessage({port:r,requestId:s,event:"end"})}).resume(),cm.set(s,n=>{n.event=="data"&&e.write(Buffer.from(n.data,"latin1")),n.event=="end"&&(e.end(n.data&&Buffer.from(n.data,"latin1")),cm.delete(s)),n.event=="destroy"&&(e.destroy(),cm.delete(s))})}var so,vc,um,SF,lm,Pce,Mc,Uc,TF,mF,IO,gF,CO,am,pF,Bc,Bce,cm,Hce,Zh=Re(()=>{so=D(Qe()),vc=require("net"),um=D(R()),SF=D(U()),lm=require("fs");zn();({isMainThread:Pce}=require("worker_threads")),Mc=[],Uc=[],TF=[],IO=0,gF=[];Pce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(Mce,"startHTTPThreads");a(wO,"startHTTPWorker");a(lO,"startSocketServer");am=0;a(LO,"findMostIdleWorker");pF=36e5,Bc=new Map;a(Uce,"findByRemoteAddressAffinity");a(vce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Bc)r.lastUsed+pF<e&&Bc.delete(t)},pF).unref();Bce=1e3;a(RF,"updateWorkerIdleness");(0,so.setMonitorListener)(RF);cm=new Map,Hce=1;a(qce,"proxySocket")});var MO=T((POe,AF)=>{"use strict";var A_=j();A_.initSync();var Hc=require("fs-extra"),PO=require("path"),qc=R(),Gce=require("crypto"),Fce=require("uuid").v4;AF.exports=xce;function xce(){if(A_.getHdbBasePath()!==void 0){let e=PO.join(A_.getHdbBasePath(),qc.LICENSE_KEY_DIR_NAME,qc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=PO.join(A_.getHdbBasePath(),qc.LICENSE_KEY_DIR_NAME,qc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=PO.join(A_.getHdbBasePath(),qc.LICENSE_KEY_DIR_NAME,qc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Hc.accessSync(r),Hc.accessSync(e),Hc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Fce(),i=Gce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Hc.writeFileSync(r,n),Hc.writeFileSync(e,i.privateKey),Hc.writeFileSync(t,i.publicKey)}else throw s}}}a(xce,"checkJWTTokenExist")});var NF=T((UOe,OF)=>{"use strict";var UO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};OF.exports={HdbInfoInsertObject:UO}});var IF=T((BOe,yF)=>{"use strict";var bF=R(),vO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[bF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[bF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};yF.exports={UpgradeObject:vO}});var _m=T((qOe,CF)=>{"use strict";var As=require("prompt"),Gc=require("chalk"),wF=U(),zs=require("os"),BO=ho(),HO=["yes","y"];async function kce(e){let t=`${zs.EOL}`+Gc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${zs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${zs.EOL}${zs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${zs.EOL}`;As.override=BO(["CONFIRM_UPGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Gc.magenta(`${zs.EOL}[CONFIRM_UPGRADE] Do you want to upgrade your HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s;try{s=await As.get([r])}catch(n){return wF.error("There was an error when prompting user about an upgrade."),wF.error(n),!1}return HO.includes(s.CONFIRM_UPGRADE)}a(kce,"forceUpdatePrompt");async function $ce(e){let t=`${zs.EOL}`+Gc.bold.green(`Your installed HarperDB version is older than the version used to create your data. Downgrading is not recommended as it is not tested and guaranteed to work. However, if you need to downgrade, and a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${zs.EOL}`);As.override=BO(["CONFIRM_DOWNGRADE"]),As.start(),As.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Gc.magenta(`${zs.EOL}[CONFIRM_DOWNGRADE] Do you want to proceed with using your downgraded HDB instance now? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"no",required:!0}}},s=await As.get([r]);return HO.includes(s.CONFIRM_DOWNGRADE)}a($ce,"forceDowngradePrompt");async function Vce(){let e=`${zs.EOL}`+Gc.bold.green("We now require a Certifacte Authority certificate. HarperDB can generate all new certificates for you (your existing certificates will be backed up) or you can keep any existing certificates and add your own CA certificate. To add your own CA certificate set the <certificateAuthority> parameter in harperdb-config.yaml");As.override=BO(["GENERATE_CERTS"]),As.start(),As.message=e;let t={properties:{GENERATE_CERTS:{description:Gc.magenta(`${zs.EOL}[GENERATE_CERTS] Do you want HarperDB to generate all new certificates? (yes/no)`),pattern:/y(es)?$|n(o)?$/,message:"Must respond 'yes' or 'no'",default:"yes",required:!0}}},r=await As.get([t]);return HO.includes(r.GENERATE_CERTS)}a(Vce,"upgradeCertsPrompt");CF.exports={forceUpdatePrompt:kce,forceDowngradePrompt:$ce,upgradeCertsPrompt:Vce}});var GO=T((FOe,LF)=>{"use strict";var qO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};LF.exports=qO});var PF=T((KOe,DF)=>{"use strict";var Yce=G(),Kce=rt(),kOe=U(),$Oe=require("path"),VOe=require("fs"),YOe=R();DF.exports={getOldPropsValue:Wce};function Wce(e,t,r=!1){let s=t.getRaw(e);return Yce.isNotEmptyAndHasValue(s)?s:r?Kce.getDefaultConfig(e):""}a(Wce,"getOldPropsValue")});var BF=T((QOe,vF)=>{"use strict";var no=require("path"),io=require("fs-extra"),Qce=require("properties-reader"),jce=GO(),ht=U(),{getOldPropsValue:Be}=PF(),{HDB_SETTINGS_NAMES:X,CONFIG_PARAMS:ca}=R(),ua=rt(),dm=j(),MF=G(),Cn=R(),FO=new jce("3.1.0"),UF=[];function zce(){let e=Qce(dm.get(X.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ht.info(t);let r=` ;Settings for the HarperDB process.
37
37
 
38
38
  ;The directory selected during install where the database files reside.
39
39
  ${X.HDB_ROOT_KEY} = ${Be(X.HDB_ROOT_KEY,e)}
@@ -56,9 +56,9 @@ ${X.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Be(X.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
56
56
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
57
57
  ${X.SERVER_HEADERS_TIMEOUT_KEY} = ${Be(X.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
58
58
  ;Define whether to log to file or not.
59
- ${X.LOG_TO_FILE} = ${ca.getDefaultConfig(aa.LOGGING_FILE)}
59
+ ${X.LOG_TO_FILE} = ${ua.getDefaultConfig(ca.LOGGING_FILE)}
60
60
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
61
- ${X.LOG_TO_STDSTREAMS} = ${ca.getDefaultConfig(aa.LOGGING_STDSTREAMS)}
61
+ ${X.LOG_TO_STDSTREAMS} = ${ua.getDefaultConfig(ca.LOGGING_STDSTREAMS)}
62
62
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
63
63
  ${X.LOG_LEVEL_KEY} = ${Be(X.LOG_LEVEL_KEY,e)}
64
64
  ;The path where log files will be written. If there is no file name included in the path, the log file will be created by default as 'hdb_log.log'
@@ -91,22 +91,22 @@ ${X.OPERATION_TOKEN_TIMEOUT_KEY} = ${Be(X.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
91
91
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
92
92
  ${X.REFRESH_TOKEN_TIMEOUT_KEY} = ${Be(X.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
93
93
  ;The port the IPC server will run on.
94
- ${X.IPC_SERVER_PORT} = ${ca.getDefaultConfig(aa.IPC_NETWORK_PORT)}
94
+ ${X.IPC_SERVER_PORT} = ${ua.getDefaultConfig(ca.IPC_NETWORK_PORT)}
95
95
  ;Run HDB in the foreground.
96
- ${X.RUN_IN_FOREGROUND} = ${ca.getDefaultConfig(aa.OPERATIONSAPI_FOREGROUND)}
96
+ ${X.RUN_IN_FOREGROUND} = ${ua.getDefaultConfig(ca.OPERATIONSAPI_FOREGROUND)}
97
97
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
98
- ${X.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ca.getDefaultConfig(aa.CUSTOMFUNCTIONS_ENABLED)}
98
+ ${X.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ua.getDefaultConfig(ca.CUSTOMFUNCTIONS_ENABLED)}
99
99
  ;The port used to access the custom functions server.
100
- ${X.CUSTOM_FUNCTIONS_PORT_KEY} = ${ca.getDefaultConfig(aa.HTTP_PORT)}
100
+ ${X.CUSTOM_FUNCTIONS_PORT_KEY} = ${ua.getDefaultConfig(ca.HTTP_PORT)}
101
101
  ;The path to the folder containing HarperDB custom function files.
102
- ${X.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${so.join(Be(X.HDB_ROOT_KEY,e),"custom_functions")}
102
+ ${X.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${no.join(Be(X.HDB_ROOT_KEY,e),"custom_functions")}
103
103
  ;Set the max number of processes HarperDB will start for the Custom Functions server
104
- ${X.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ca.getDefaultConfig(aa.HTTP_THREADS)}
105
- `,s=_m.get("settings_path"),n=so.dirname(s),i=so.join(n,"3_1_0_upgrade_settings.bak");try{ht.info(`Backing up old settings file to: ${i}`),no.copySync(s,i)}catch(c){throw ht.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ht.info("New settings file values for 3.1.0 upgrade:",r),ht.info(`Creating new/upgraded settings file at '${s}'`),no.writeFileSync(s,r),ht.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ht.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ht.error(c),no.copySync(i,s),c}_m.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ht.info(o),o}a(Jce,"updateSettingsFile_3_1_0");function Xce(){let e=so.join(UF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),t=so.join(UF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.REG_KEY_FILE_NAME),r=so.join(_m.getHdbBasePath(),Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),s=so.join(r,Cn.LICENSE_FILE_NAME),n=so.join(r,Cn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ht.info(i);let o="Creating .license directory";console.log(o),ht.info(o),no.mkdirpSync(r);try{no.accessSync(e);try{let c="Moving licence file";console.log(c),ht.info(c),no.moveSync(e,s);let u="License file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving license file failed";console.error(u),ht.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),ht.warn(u)}try{no.accessSync(t);try{let c="Moving registration file";console.log(c),ht.info(c),no.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving registration file failed";console.error(u),ht.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),ht.warn(u)}}a(Xce,"moveLicenseFiles");xO.sync_functions.push(Jce);xO.sync_functions.push(Xce);vF.push(xO);BF.exports=vF});var kF=T((JOe,xF)=>{"use strict";var Jr=Me(),{insertRecords:Zce}=No(),eue=or(),io=Ke(),tue=G(),pi=v(),rue=G(),Ln=require("fs-extra"),Si=require("path"),sue=require("cli-progress"),A_=require("assert"),nue=require("pino"),iue=j();xF.exports=oue;var dm,qF,fm,kO,Zt,O_=!1;async function oue(e=!0){return dm=iue.getHdbBasePath(),qF=Si.join(dm,"schema"),fm=Si.join(dm,"4_0_0_upgrade_tmp"),kO=Si.join(dm,"transactions"),console.info("Reindexing upgrade started for schemas"),pi.notify("Reindexing upgrade started for schemas"),await GF(qF,!1,e),await Ln.pathExists(kO)&&(console.info(`
104
+ ${X.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ua.getDefaultConfig(ca.HTTP_THREADS)}
105
+ `,s=dm.get("settings_path"),n=no.dirname(s),i=no.join(n,"3_1_0_upgrade_settings.bak");try{ht.info(`Backing up old settings file to: ${i}`),io.copySync(s,i)}catch(c){throw ht.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ht.info("New settings file values for 3.1.0 upgrade:",r),ht.info(`Creating new/upgraded settings file at '${s}'`),io.writeFileSync(s,r),ht.info("Updating env variables with new settings values")}catch(c){throw console.error("There was a problem writing the new settings file. Please check the log for details."),ht.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ht.error(c),io.copySync(i,s),c}dm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ht.info(o),o}a(zce,"updateSettingsFile_3_1_0");function Jce(){let e=no.join(MF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),t=no.join(MF.getHomeDir(),Cn.HDB_HOME_DIR_NAME,Cn.LICENSE_KEY_DIR_NAME,Cn.REG_KEY_FILE_NAME),r=no.join(dm.getHdbBasePath(),Cn.LICENSE_KEY_DIR_NAME,Cn.LICENSE_FILE_NAME),s=no.join(r,Cn.LICENSE_FILE_NAME),n=no.join(r,Cn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ht.info(i);let o="Creating .license directory";console.log(o),ht.info(o),io.mkdirpSync(r);try{io.accessSync(e);try{let c="Moving licence file";console.log(c),ht.info(c),io.moveSync(e,s);let u="License file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving license file failed";console.error(u),ht.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),ht.warn(u)}try{io.accessSync(t);try{let c="Moving registration file";console.log(c),ht.info(c),io.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),ht.info(u)}catch{let u="moving registration file failed";console.error(u),ht.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),ht.warn(u)}}a(Jce,"moveLicenseFiles");FO.sync_functions.push(zce);FO.sync_functions.push(Jce);UF.push(FO);vF.exports=UF});var xF=T((zOe,FF)=>{"use strict";var Jr=Me(),{insertRecords:Xce}=bo(),Zce=or(),oo=Ke(),eue=G(),Si=U(),tue=G(),Ln=require("fs-extra"),Ti=require("path"),rue=require("cli-progress"),O_=require("assert"),sue=require("pino"),nue=j();FF.exports=iue;var fm,HF,Em,xO,Zt,N_=!1;async function iue(e=!0){return fm=nue.getHdbBasePath(),HF=Ti.join(fm,"schema"),Em=Ti.join(fm,"4_0_0_upgrade_tmp"),xO=Ti.join(fm,"transactions"),console.info("Reindexing upgrade started for schemas"),Si.notify("Reindexing upgrade started for schemas"),await qF(HF,!1,e),await Ln.pathExists(xO)&&(console.info(`
106
106
 
107
- Reindexing upgrade started for transaction logs`),pi.notify("Reindexing upgrade started for transaction logs"),await GF(kO,!0,e)),pi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(O_?", but errors occurred":"")}a(oue,"reindexUpgrade");async function GF(e,t,r){let s=await Ln.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Si.join(e,o.toString());if(o===".DS_Store")continue;let u=await Ln.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&Ln.statSync(Si.join(c,d)).isDirectory())try{await aue(o,d,t),Zt.info(`Reindexing started for ${o}.${d}`),pi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await uue(o,d,c,t,r),Zt.info(`Reindexing completed for ${o}.${d}`),pi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){O_=!0,f.schema_path=c,f.table_name=d,pi.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),pi.error(f),Zt.error(f),console.error(f)}}}if(!O_)try{await Ln.rm(fm,{recursive:!0})}catch{}}a(GF,"processTables");async function aue(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Si.join(fm,n);await Ln.ensureDir(fm),await Ln.writeFile(i,""),Zt=nue({level:"debug",formatters:{bindings(){}}},i)}a(aue,"initPinoLogger");var cue=20;async function uue(e,t,r,s,n){let i;try{i=await Jr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){pi.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Zt.error(g);return}throw g}let o=due(i.dbis),c=Jr.openDBI(i,o),u=Object.keys(i.dbis),_=Jr.statDBI(i,o);Zt.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new sue.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await Jr.createEnvironment(r,t,!1);Jr.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),s||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>cue&&await E();await E()}catch(g){throw O_=!0,Zt.error(g),g}async function E(){let g,N=f.map(({value:$})=>$);s?g=await Promise.all(N.map($=>lue(d,$))):g=await Zce(d,o,u.filter($=>$!=="__blob__"),N,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:K}=f[$];Zt.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=g[$]:B=g.written_hashes.indexOf(w)>-1,A_(B,!0),_ue(d,o,K[o],s),Zt.info(`Insert success, written hashes: ${g.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&pi.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Zt.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=Jr.statDBI(i,o),m=Jr.statDBI(d,o);if(Zt.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),A_.deepStrictEqual(h.entryCount,m.entryCount),await Jr.closeEnvironment(i),await Jr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Si.join(r,t),N=Si.join(g,"data.mdb"),V=Si.join(g,"lock.mdb");await Ln.unlink(N),await Ln.unlink(V),await Ln.rmdir(g),Zt.info(`Deleted old environment files from schema folder: ${N}, ${V}`)}let S=await Jr.openEnvironment(r,t),A=Jr.statDBI(S,o);Zt.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),A_.deepStrictEqual(A.entryCount,m.entryCount),await Jr.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(uue,"processTable");async function lue(e,t){Jr.initializeDBIs(e,io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,io.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),rue.isEmpty(t.user_name)||e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(lue,"insertTransaction");function _ue(e,t,r,s){let i=e.dbis[t].get(r);A_.deepStrictEqual(typeof i,"object");let o;if(s){let c={[io.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[io.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!tue.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];FF(e,c,d,r)}else FF(e,c,u,r)}a(_ue,"validateIndices");function FF(e,t,r,s){try{let n=!1,i=eue.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||Zt.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),A_.deepStrictEqual(n,!0)}catch(n){O_=!0,Zt.error(n),console.error(n)}}a(FF,"validateIndex");function due(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(due,"getHashDBI")});var KO=T((ZOe,VF)=>{"use strict";var fue=require("mkcert"),Em=require("path"),$O=require("fs-extra"),VO=v(),Eue=j(),YO=R(),Gc=lT(),hue=Eo(),mue=rt();VF.exports={generateKeys:pue,updateConfigCert:$F};async function pue(){let e=Eue.getHdbBasePath(),t=Em.join(e,YO.LICENSE_KEY_DIR_NAME),r=await fue.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Gc.CERTIFICATE_VALUES.key,caCert:Gc.CERTIFICATE_VALUES.cert}),s=Em.join(t,Gc.CERTIFICATE_PEM_NAME),n=Em.join(t,Gc.PRIVATEKEY_PEM_NAME),i=Em.join(t,Gc.CA_PEM_NAME);try{await $O.writeFile(s,r.cert)}catch(o){throw VO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await $O.writeFile(n,r.key)}catch(o){throw VO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await $O.writeFile(i,Gc.CERTIFICATE_VALUES.cert)}catch(o){throw VO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}$F(s,n,i)}a(pue,"generateKeys");function $F(e,t,r){let s=hue(Object.keys(YO.CONFIG_PARAM_MAP),!0),n=YO.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.TLS_CERTIFICATE]:s[n.TLS_CERTIFICATE.toLowerCase()]?s[n.TLS_CERTIFICATE.toLowerCase()]:e,[n.TLS_PRIVATEKEY]:s[n.TLS_PRIVATEKEY.toLowerCase()]?s[n.TLS_PRIVATEKEY.toLowerCase()]:t,[n.TLS_CERTIFICATEAUTHORITY]:s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATE]=s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_PRIVATEKEY]=s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),mue.updateConfigValue(void 0,void 0,i,!1,!0)}a($F,"updateConfigCert")});var jF=T((rNe,QF)=>{"use strict";var hm=require("path"),oo=require("fs-extra"),Sue=FO(),ua=v(),YF=rt(),WO=j(),Js=R(),mm=G(),Tue=require("properties-reader"),gue=vs(),Rue=aE(),Aue=_r(),tNe=require("util"),Oue=Aue.searchByValue,Nue=dr(),bue=CE(),yue=ke(),Iue=kF(),KF=KO(),wue=lm(),y_=new Sue("4.0.0"),WF=[],N_,b_;async function Cue(){try{if(await wue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),N_){let t=mm.changeExtension(N_,".bak");await oo.move(N_,t)}if(b_){let t=mm.changeExtension(b_,".bak");await oo.move(b_,t)}await KF.generateKeys()}else console.log("Using existing certificates."),KF.updateConfigCert(N_,b_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Cue,"generateNewKeys");async function Lue(){console.log("Updating HarperDB nodes."),ua.info("Updating HarperDB nodes.");let e=[];try{let t=new gue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Oue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!yue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let u={host:c.host,port:c.port};e.push(u);let _=[];for(let l=0,d=c.subscriptions.length;l<d;l++){let f=c.subscriptions[l],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:_,system_info:{hdb_version:Js.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(mm.isEmptyOrZeroLength(s))return;let n=new Rue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await Nue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{bue.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Lue,"updateNodes");async function Due(){let e=WO.get(Js.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(hm.join("config","settings.js"))){ua.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),ua.info(t);let r=hm.dirname(e),s=WO.get(Js.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=hm.join(s,"backup","4_0_0_upgrade_settings.bak"),i=hm.join(s,Js.HDB_CONFIG_FILE);try{ua.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),oo.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{ua.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),ua.info("Updating env variables with new settings values");let d=YF.initOldConfig(e);N_=d[Js.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],b_=d[Js.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],YF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=mm.getPropsFilePath();oo.accessSync(o,oo.constants.F_OK|oo.constants.R_OK);let u=Tue(o).get(Js.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
108
- install_user = ${u}`;try{oo.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{WO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let l="New settings file for 4.0.0 upgrade successfully created.";try{oo.removeSync(r),console.log(l),ua.info(l)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Due,"updateSettingsFile_4_0_0");y_.async_functions.push(Due);y_.async_functions.push(Cue);y_.async_functions.push(Iue);y_.async_functions.push(Lue);WF.push(y_);QF.exports=WF});var QO=T((nNe,ZF)=>{"use strict";var la=G(),Pue=R(),zF=v(),{DATA_VERSION:Mue,UPGRADE_VERSION:Uue}=Pue.UPGRADE_JSON_FIELD_NAMES_ENUM,JF=HF(),pm=jF(),_a=new Map;JF&&JF.forEach(e=>{_a.set(e.version,e)});pm&&pm.forEach(e=>{_a.set(e.version,e)});pm&&pm.forEach(e=>{_a.set(e.version,e)});function vue(){return[..._a.keys()].sort(la.compareVersions)}a(vue,"getSortedVersions");function XF(e){let t=e[Mue],r=e[Uue];return la.isEmptyOrZeroLength(t)||la.isEmptyOrZeroLength(r)?(zF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),zF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[..._a.keys()].sort(la.compareVersions).filter(function(s){return la.compareVersions(s,t)>0&&la.compareVersions(s,r)<=0})}a(XF,"getVersionsForUpgrade");function Bue(e){return XF(e).length>0}a(Bue,"hasUpgradesRequired");function Hue(e){return la.isEmptyOrZeroLength(e)?null:_a.has(e)?_a.get(e):null}a(Hue,"getDirectiveByVersion");ZF.exports={getSortedVersions:vue,getDirectiveByVersion:Hue,getVersionsForUpgrade:XF,hasUpgradesRequired:Bue}});var Sm=T((oNe,nx)=>{"use strict";var que=require("util"),jO=require("chalk"),Gue=require("os"),tx=dr(),Fue=_r(),Xr=R(),rx=bF(),JO=nT(),{UpgradeObject:ex}=wF(),{forceDowngradePrompt:xue}=lm(),kue=po(),I_=v(),Fc=G(),XO=cs(),$ue=(fe(),te(De)),Vue=QO(),Yue=que.promisify(XO.setSchemaDataToGlobal),Kue=Fue.searchByValue,Wue="info_id",Que="2.9.9",jue="3.0.0";async function zue(e){let t=new rx.HdbInfoInsertObject(1,e,e),r=new JO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return XO.setSchemaDataToGlobal(),tx.insert(r)}a(zue,"insertHdbInstallInfo");async function zO(e){let t,r=await sx(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new rx.HdbInfoInsertObject(i,e,e);let o=new JO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Yue(),tx.insert(o)}a(zO,"insertHdbUpgradeInfo");async function sx(){let e=new JO.NoSQLSeachObject(Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Wue,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Kue(e))}catch(r){I_.info(r)}return t}a(sx,"getAllHdbInfoRecords");async function Jue(){let e=await sx();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(Jue,"getLatestHdbInfoRecord");async function Xue(){I_.info("Checking if HDB software has been updated");try{let e=kue.version(),t=await Jue(),r;if(Fc.isEmpty(t))r=Que;else if(r=t.data_version_num,Fc.compareVersions(r.toString(),e.toString())>0){if(!Fc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(jO.yellow(`This instance's data was last run on version ${r}`)),console.error(jO.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${Gue.EOL}${Xr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Fc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(jO.yellow(`This instance's data was last run on version ${r}`)),await xue(new ex(r,e))?await zO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(XO.setSchemaDataToGlobal(),Zue(r),e.toString()===r.toString())return;let s=new ex(r,e);if(Vue.hasUpgradesRequired(s))return s;Fc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await zO(s.upgrade_version),I_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw I_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),I_.fatal(e),e}}a(Xue,"getVersionUpdateInfo");function Zue(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Xr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in $ue.databases.system))throw console.log(t),new Error(t);if(!Fc.isEmpty(e)&&e<jue)throw console.log(t),new Error(t)}a(Zue,"checkIfInstallIsSupported");nx.exports={insertHdbInstallInfo:zue,insertHdbUpgradeInfo:zO,getVersionUpdateInfo:Xue}});var ux=T((cNe,cx)=>{"use strict";var ZO=require("joi"),{boolean:ele,string:ix,number:tle}=ZO.types(),ox=require("fs-extra"),w_=R(),ax=require("path"),rle=Ve();cx.exports=sle;function sle(e){let t=ix.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=ZO.object({[w_.INSTALL_PROMPTS.ROOTPATH]:ZO.custom(nle),[w_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:tle.min(0),[w_.INSTALL_PROMPTS.TC_AGREEMENT]:ix.valid("yes","YES","Yes"),[w_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[w_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:ele});return rle.validateBySchema(e,r)}a(sle,"installValidator");function nle(e,t){if(ox.existsSync(ax.join(e,"system/hdb_user/data.mdb"))||ox.existsSync(ax.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(nle,"validateRootAvailable")});var _x=T((lNe,lx)=>{"use strict";var{mkdirpSync:ile}=require("fs-extra"),Dn=require("path"),xc=R(),tN=v(),ole=as(),eN=Fn(),ale=He();lx.exports=cle;async function cle(e){tN.trace("Mounting HarperDB"),Xs(e),Xs(Dn.join(e,"backup")),Xs(Dn.join(e,"trash")),Xs(Dn.join(e,"keys")),Xs(Dn.join(e,"keys",xc.LICENSE_FILE_NAME)),Xs(Dn.join(e,"log")),Xs(Dn.join(e,"doc")),Xs(Dn.join(e,"database")),Xs(Dn.join(e,xc.TRANSACTIONS_DIR_NAME)),Xs(Dn.join(e,"clustering","leaf")),Xs(Dn.join(e,"components")),await ule()}a(cle,"mountHdb");async function ule(){let e=Hu(),t=Object.keys(eN);for(let r=0;r<t.length;r++){let s=t[r],n=eN[s].hash_attribute;try{ale.initSystemSchemaPaths(xc.SYSTEM_SCHEMA_NAME,s);let i=new e(xc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=eN[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await ole.createTable(s,i)}catch(i){throw tN.error(`issue creating environment for ${xc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(ule,"createLMDBTables");function Xs(e){ile(e,{mode:xc.HDB_FILE_PERMISSIONS}),tN.info(`Directory ${e} created`)}a(Xs,"makeDirectory")});var gm=T((dNe,Ax)=>{"use strict";var sN=require("os"),hx=require("inquirer"),Os=require("fs-extra"),lle=require("properties-reader"),da=require("chalk"),Un=require("path"),_le=require("human-readable-ids").hri,dle=require("ora"),fle=require("yaml"),mt=v(),uo=j(),C_=G(),Tm=Eo(),mx=Sm(),px=po(),ee=R(),Ele=ux(),hle=_x(),nN=rt(),mle=Er(),ple=sE(),Sle=UO(),Tle=cs(),gle=require("util").promisify,Rle=gle(Tle.setSchemaDataToGlobal),Ale=KO(),kc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),er=a(e=>da.magenta.bold(e),"HDB_PROMPT_MSG"),Ole="https://harperdb.io/legal/end-user-license-agreement",lo=sN.EOL,ao="",Nle="yes",dx="Starting HarperDB install...",fx="HarperDB installation was successful.",Ex="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ble="An out of date version of HarperDB is already installed.",rN="It appears that HarperDB is already installed. Exiting install...",yle="Aborting install",Ile=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),wle=new RegExp(/^[^\s.,*>]+$/),Cle=sN.homedir(),Lle=Un.join(Cle,ee.HDB_ROOT_DIR_NAME),Dle=9925,Ple="HDB_ADMIN",Mle="CLUSTER_USER",wr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},$c=Tm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Mn,Sx=!1;Ax.exports=Tx;Tx.createSuperUser=Rx;async function Tx(){console.log(er(lo+dx+lo)),mt.notify(dx);let e;$c[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Ule());let t=Ble();Object.assign(t,e);let r=Ele(t);if(r)throw r.message;await Hle(),await qle(t);let s=await vle(t);Mn=s[ee.INSTALL_PROMPTS.ROOTPATH],$c[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Un.dirname($c[ee.INSTALL_PROMPTS.HDB_CONFIG])===Mn&&(Sx=!0),!$c[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Os.pathExists(Un.join(Mn,ee.HDB_CONFIG_FILE))&&(console.error(rN),process.exit());let n=dle({prefixText:er("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),C_.isEmpty(Mn))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");uo.setHdbBasePath(Mn),await hle(Mn),await Gle(),await Fle(s),mt.initLogSettings(!0),await Rx(s),await kle(s),await Ale.generateKeys(),await $le(),Sle(),n.stop(),console.log(er(lo+fx+lo)),mt.notify(fx)}a(Tx,"install");function Ule(){let e=fle.parseDocument(Os.readFileSync($c[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=nN.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Ule,"getConfigFromFile");async function vle(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:kc,when:co(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:ao,default:Lle,validate:async n=>Pn(n)?Pn(n):await Os.pathExists(Un.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:er(wr.DESTINATION)},{type:"input",transformer:kc,when:co(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ao,default:Dle,validate:n=>Ile.test(n)?!0:"Invalid port.",message:er(wr.HDB_PORT)},{type:"input",transformer:kc,when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ao,default:Ple,validate:n=>Pn(n)?Pn(n):(t=n,!0),message:er(wr.HDB_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],wr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ao,validate:n=>Pn(n)?Pn(n):!0,message:er(wr.HDB_PASS)}];if(C_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:kc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ao,default:_le.random(),validate:i=>wle.test(i)?!0:"Invalid node name, must not contain ., * or >",message:er(wr.NODE_NAME)},{type:"input",transformer:kc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ao,default:Mle,validate:i=>Pn(i)?Pn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:er(wr.CLUSTER_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],wr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ao,validate:i=>Pn(i)?Pn(i):!0,message:er(wr.CLUSTER_PASS)}];r.push(...n)}let s=await hx.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(vle,"installPrompts");function co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${er(t)} ${da.gray("[hidden]")}`),mt.trace(`${er(t)} [hidden]`)):(console.log(`${er(t)} ${e}`),mt.trace(`${er(t)} ${e}`)),!1):!0}a(co,"displayCmdEnvVar");function Pn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Pn,"checkForEmptyValue");function Ble(){let e=Object.keys(ee.INSTALL_PROMPTS),t=Tm(e),r=Tm(Object.keys(ee.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=ee.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(Ble,"checkForPromptOverride");async function Hle(){mt.trace("Checking for existing install.");let e=C_.getPropsFilePath(),t=await Os.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=lle(e),n=nN.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Os.pathExists(n)}if(!t&&C_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await mx.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${px.version()}. Exiting install...`;console.log(lo+da.magenta.bold(ble)),console.log(da.magenta.bold(n)),mt.error(n)}else console.log(lo+da.magenta.bold(rN)),mt.error(rN);process.exit(0)}}a(Hle,"checkForExistingInstall");async function qle(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ole}${lo}and can be viewed by typing or copying and pasting the URL into your web browser.${lo}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:ao,transformer:kc,when:co(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:er(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:da.yellow("Please enter 'yes' or 'no'")},s=await hx.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Nle&&(console.log(da.yellow(Ex)),mt.error(Ex),process.exit(0))}a(qle,"termsAgreement");async function Gle(){let e=Un.join(Mn,ee.HDB_CONFIG_FILE),t;try{t=sN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
109
- install_user = ${t}`,s=C_.getHomeDir(),n=Un.join(s,ee.HDB_HOME_DIR_NAME),i=Un.join(n,ee.LICENSE_KEY_DIR_NAME);try{Os.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Os.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Un.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Os.writeFile(o,r)}catch(c){throw mt.error(`There was an error creating the boot file at path: ${o}`),c}uo.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),uo.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),uo.setProperty(uo.BOOT_PROPS_FILE_PATH,o)}}a(Gle,"createBootPropertiesFile");async function Fle(e){mt.trace("Creating HarperDB config file");let t=Tm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{nN.createConfigFile(t),uo.initSync()}catch(r){xle(r)}}a(Fle,"createConfigFile");function xle(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(yle);let t=Un.resolve(uo.get(uo.BOOT_PROPS_FILE_PATH),"../");t&&Os.removeSync(t),Mn&&(Sx?Os.readdirSync(Mn,{withFileTypes:!0}).forEach(s=>{let n=Un.join(s.path,s.name);n!==$c[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Os.removeSync(n)}):Os.removeSync(Mn)),process.exit(1)}a(xle,"rollbackInstall");async function gx(e,t){mt.trace("Creating admin user"),await Rle();let r;try{r=await ple.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await mle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(gx,"createAdminUser");async function Rx(e){mt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await gx(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(Rx,"createSuperUser");async function kle(e){mt.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await gx({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(kle,"createClusterUser");async function $le(){let e=px.version();if(e)await mx.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a($le,"insertHdbVersionInfo")});var bx=T((ENe,Nx)=>{"use strict";var iN=G(),Zr=v(),Ox=QO();Nx.exports={processDirectives:Vle};async function Vle(e){console.log("Starting upgrade process...");let t=Ox.getVersionsForUpgrade(e),r=Wle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Zr.notify(c),console.log(c);let u=[],_=[];try{u=Yle(o.sync_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await Kle(o.async_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a(Vle,"processDirectives");function Yle(e){if(iN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Zr.info(`Running function ${r.name}`),!(r instanceof Function)){Zr.info("Variable being processed is not a function");continue}let s=r();Zr.info(s),t.push(s)}return t}a(Yle,"runSyncFunctions");async function Kle(e){if(iN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Zr.info(`Running function ${n.name}`),!(n instanceof Function)){Zr.info("Variable being processed is not a function");continue}let i=await n();Zr.info(i),t.push(i)}return t}a(Kle,"runAsyncFunctions");function Wle(e){if(iN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Ox.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Wle,"getUpgradeDirectivesToInstall")});var cN=T((mNe,Dx)=>{"use strict";var Rm=j();Rm.initSync();var Cx=require("chalk"),yx=require("fs-extra"),gi=v(),Ti=R(),Ix=po(),Qle=bx(),oN=G(),Lx=Sm(),jle=lm(),wx=Km(),zle=cs(),Jle=require("util").promisify,Xle=Jle(zle.setSchemaDataToGlobal),aN,{UPGRADE_VERSION:Am}=Ti.UPGRADE_JSON_FIELD_NAMES_ENUM;Dx.exports={upgrade:Zle};async function Zle(e){await Xle(),aN===void 0&&(aN=_c()),yx.existsSync(Rm.get(Rm.BOOT_PROPS_FILE_PATH))||(L_("The hdb_boot_properties file was not found. Please install HDB.",Ti.LOG_LEVELS.ERROR),process.exit(1)),yx.existsSync(Rm.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(L_("The hdb settings file was not found. Please make sure HDB is installed.",Ti.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Lx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),L_(`This version of HarperDB is ${Ix.version()}`,Ti.LOG_LEVELS.INFO);let r=t[Am]?t[Am]:Ix.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Ti.HDB_SUPPORT_ADDRESS}`),gi.notify("Missing new version field from upgrade info object"),process.exit(1)),await e_e();let s,n=0;try{s=await jle.forceUpdatePrompt(t)}catch(i){gi.error("There was an error when prompting user about upgrade."),gi.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),gi.info(`Starting upgrade to version ${r}`),await t_e(t),L_(`HarperDB was successfully upgraded to version ${t[Am]}`,Ti.LOG_LEVELS.INFO)}a(Zle,"upgrade");async function e_e(){let e=!1,t=await wx.findPs(Ti.HDB_PROC_NAME);if(oN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await wx.findPs("hdb_express");oN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await aN.list();oN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(Cx.red(r)),gi.error(r),process.exit(1)}}a(e_e,"checkIfRunning");async function t_e(e){try{await Qle.processDirectives(e)}catch(t){throw L_("There was an error during the data upgrade. Please check the logs.",Ti.LOG_LEVELS.ERROR),t}try{await Lx.insertHdbUpgradeInfo(e[Am])}catch(t){gi.error("Error updating the 'hdb_info' system table."),gi.error(t)}}a(t_e,"runUpgrade");function L_(e,t=void 0){t||(t=gi.info),gi[t](e),console.log(Cx.magenta(e))}a(L_,"printToLogAndConsole")});var Bx=T((SNe,vx)=>{"use strict";var{promises:lN,createReadStream:r_e,createWriteStream:s_e}=require("fs"),{createGzip:n_e}=require("zlib"),{promisify:i_e}=require("util"),{pipeline:o_e}=require("stream"),a_e=i_e(o_e),c_e=require("path"),Ea=j();Ea.initSync();var fa=v(),{CONFIG_PARAMS:D_,ITC_EVENT_TYPES:u_e}=R(),{onMessageFromWorkers:l_e}=Qe(),__e=6e4,d_e="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",f_e="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",uN,Mx;vx.exports=Ux;l_e(e=>{e.type===u_e.RESTART&&(Ea.initSync(!0),clearInterval(Mx),Ea.get(D_.LOGGING_ROTATION_ENABLED)&&Ux())});async function Ux(){try{let e=fa.getLogFilePath(),t=Ea.get(D_.LOGGING_ROTATION_MAXSIZE),r=Ea.get(D_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){fa.error(d_e);return}let s=Ea.get(D_.LOGGING_ROTATION_PATH);if(!s){fa.error(f_e);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}uN=Date.now()/6e4,fa.trace("Log rotate enabled, maxSize:",t,"interval:",r),Mx=setInterval(async()=>{if(n){let o;o=await lN.stat(e),o.size>=n&&await Px(e,s)}i&&Date.now()/6e4-uN>=i&&(await Px(e,s),uN=Date.now()/6e4)},__e).unref()}catch(e){fa.error(e)}}a(Ux,"logRotator");async function Px(e,t){let r=Ea.get(D_.LOGGING_ROTATION_COMPRESS),s=c_e.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await a_e(r_e(e),n_e(),s_e(s)),await lN.unlink(e)):await lN.rename(e,s),fa.closeLogFile(),fa.notify(`hdb.log rotated, old log moved to ${s}`)}a(Px,"moveLogFile")});var ha=T((wNe,$x)=>{"use strict";var Ns=j();Ns.initSync();var gNe=Qo(),bt=R(),Bn=v(),Ri=require("fs-extra"),_o=require("path"),E_e=require("systeminformation"),h_e=UO(),m_e=gm(),_N=require("chalk"),p_e=mo(),Ai=G(),qx=rt(),Gx=Eo(),Hx=BE(),S_e=cN(),T_e=Bx(),g_e=require("minimist"),{PACKAGE_ROOT:R_e}=R(),{startHTTPThreads:A_e,startSocketServer:RNe,mostIdleRouting:ANe,remoteAffinityRouting:ONe}=(Xh(),te(PO)),O_e=Sm(),{isMainThread:N_e}=require("worker_threads"),NNe=Fn(),bNe=Mi(),yNe=OS(),INe=Hu(),dN=R(),vn,Vc,b_e="Upgrade complete. Starting HarperDB.",y_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",I_e="HarperDB not found, starting install process.",w_e="There was an error during install, check install_log.log for more details. Exiting.",C_e="HarperDB successfully started.";function L_e(){let e=a(()=>{Ri.removeSync(_o.join(Ns.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}a(L_e,"addExitListeners");async function Fx(e=!1,t=!1){if(console.log(_N.magenta("Starting HarperDB...")),await kx()===!1){console.log(I_e);try{await m_e()}catch(o){console.error(w_e,o),Bn.error(o),process.exit(1)}}let r,s=Vc?.service==="clustering";Vc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ri.readFile(_o.join(Ns.get(bt.CONFIG_PARAMS.ROOTPATH),bt.HDB_PID_FILE),"utf8")),c=await E_e.processes();for(let u of c.list)if(u.pid===o){s?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}vn===void 0&&(vn=_c()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ns.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Hx.generateNatsConfig(),await vn.startClusteringProcesses(!0),process.exit()),L_e(),await Ri.writeFile(_o.join(Ns.get(dN.CONFIG_PARAMS.ROOTPATH),dN.HDB_PID_FILE),`${process.pid}`),Bn.info("HarperDB PID",process.pid);let n;try{let o=await O_e.getVersionUpdateInfo();o!==void 0&&(n=o[bt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await S_e.upgrade(o),console.log(b_e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Bn.error(o)):(console.error(y_e),Bn.error(o)),process.exit(1)}if(!e){let o=Gx(Object.keys(bt.CONFIG_PARAM_MAP),!0);!Ai.isEmpty(o)&&!Ai.isEmptyOrZeroLength(Object.keys(o))&&qx.updateConfigValue(void 0,void 0,o,!0,!0)}h_e(),M_e(),Ai.autoCastBoolean(Ns.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&N_e&&await Hx.generateNatsConfig(t)}a(Fx,"initialize");async function D_e(e=!1){try{Vc=g_e(process.argv),Vc.ROOTPATH&&qx.updateConfigObject("settings_path",_o.join(Vc.ROOTPATH,bt.HDB_CONFIG_FILE)),await Fx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Vc.service;Ai.autoCastBoolean(Ns.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await vn.startClusteringProcesses(),await vn.startClusteringThreads()),await A_e(process.env.DEV_MODE?1:Ns.get(dN.CONFIG_PARAMS.THREADS)),Ns.get(bt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await T_e(),t||xx()}catch(t){console.error(t),Bn.error(t),process.exit(1)}}a(D_e,"main");function xx(){Bn.suppressLogging(()=>{console.log(_N.magenta(""+Ri.readFileSync(_o.join(R_e,"utility/install/ascii_logo.txt")))),console.log(_N.magenta(`|------------- HarperDB ${p_e.version} successfully started ------------|`))}),Bn.notify(C_e)}a(xx,"started");async function P_e(){try{vn===void 0&&(vn=_c()),vn.enterPM2Mode(),await Fx(),Ai.autoCastBoolean(Ns.get(bt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await vn.startClusteringProcesses(),await vn.startService(bt.PROCESS_DESCRIPTORS.HDB),xx(),process.exit(0)}catch(e){console.error(e),Bn.error(e),process.exit(1)}}a(P_e,"launch");function M_e(){let e=_o.join(Ns.getHdbBasePath(),bt.LICENSE_KEY_DIR_NAME,bt.LICENSE_FILE_NAME),t=_o.join(e,bt.LICENSE_FILE_NAME),r=_o.join(e,bt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Gx(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Ai.isEmpty(s)||Ai.isEmpty(n))return;Ri.mkdirpSync(e),Ri.writeFileSync(r,s),Ri.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Bn.error(n)}}a(M_e,"writeLicenseFromVars");$x.exports={launch:P_e,main:D_e,isHdbInstalled:kx};async function kx(){try{await Ri.stat(Ai.getPropsFilePath()),await Ri.stat(Ns.get(bt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ai.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Bn.error(`Error checking for HDB install - ${e}`),e}return!0}a(kx,"isHdbInstalled")});var Yx=T((LNe,Vx)=>{var U_e=gm(),v_e=v();Vx.exports=B_e;async function B_e(){try{await U_e()}catch(e){console.error("There was an error during the install."),console.error(e),v_e.error(e),process.exit(1)}}a(B_e,"install")});var Qx=T((PNe,Wx)=>{"use strict";var H_e=DE(),q_e=v(),Kx="Registration failed.";async function G_e(){let e;try{e=await H_e.register()}catch(t){return q_e.error(`Registration error ${t}`),Kx}return e||Kx}a(G_e,"register");Wx.exports={register:G_e}});var Xx=T((UNe,Jx)=>{"use strict";var F_e=v(),x_e=R(),k_e=require("util"),$_e=require("child_process"),jx=k_e.promisify($_e.exec),V_e=Jn(),P_=_c(),zx="Stopping HarperDB.";Jx.exports=Y_e;async function Y_e(){if(console.log(zx),F_e.notify(zx),await P_.isServiceRegistered(x_e.HDB_PROC_DESCRIPTOR)){P_.enterPM2Mode();let r=await P_.getUniqueServicesList();for(let s in r)await P_.stop(s)}await P_.kill();let t=await V_e.getHDBProcessInfo();t.clustering.forEach(r=>{jx(`kill ${r.pid}`)}),t.core.forEach(r=>{jx(`kill ${r.pid}`)})}a(Y_e,"stop")});var rk=T((BNe,tk)=>{"use strict";var EN=require("fs-extra"),hN=require("path"),fN=require("yaml"),M_=st(),U_=R(),Zx=ke(),mN=v(),K_e=Er(),W_e=IE(),Q_e=bE(),j_e=Jn(),ek=j(),{isHdbInstalled:z_e}=ha();ek.initSync();var bs={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Cr={LEAF:"leaf server",HUB:"hub server"},Om;tk.exports=J_e;async function J_e(){let e={harperdb:{status:bs.STOPPED}};if(!await z_e()){e.harperdb.status=bs.NOT_INSTALLED,console.log(fN.stringify(e));return}Om=ek.get(U_.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await EN.readFile(hN.join(Om,U_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===U_.NODE_ERROR_CODES.ENOENT){mN.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=bs.STOPPED,console.log(fN.stringify(e));return}throw s}let r=await j_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=bs.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await X_e(r),e.clustering[Cr.HUB].status===bs.RUNNING&&e.clustering[Cr.LEAF].status===bs.RUNNING){let s=[],n=await W_e({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await Q_e.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await M_.closeConnection()}console.log(fN.stringify(e)),process.exit()}a(J_e,"status");async function X_e(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=bs.STOPPED,t[Cr.LEAF].status=bs.STOPPED,t;let{port:r}=M_.getServerConfig(U_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await K_e.getClusterUser();try{(await M_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=bs.RUNNING}catch{t[Cr.HUB].status=bs.ERRORED}let{port:i}=M_.getServerConfig(U_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await M_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=bs.RUNNING}catch{t[Cr.LEAF].status=bs.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await EN.readFile(hN.join(Om,"clustering",Zx.PID_FILES.HUB),"utf8"))}catch(o){mN.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await EN.readFile(hN.join(Om,"clustering",Zx.PID_FILES.LEAF),"utf8"))}catch(o){mN.error(o),t[Cr.LEAF].pid=void 0}return t}a(X_e,"getHubLeafStatus")});var _k=T(()=>{"use strict";var Z_e=require("os"),ym=require("https"),sk=require("http"),Oi=require("fs-extra"),ede=require("yaml"),tde=require("human-readable-ids").hri,{pipeline:nk}=require("stream/promises"),{createWriteStream:Im,ensureDir:wm}=require("fs-extra"),{join:en}=require("path"),TN=require("lodash"),ck=j(),rde=Jn(),uk=v(),Nm=rt(),{restart:sde}=Qo(),lk=G(),ik=st(),nde=cs(),{isHdbInstalled:ide,main:ode}=ha(),ade=gm(),Cm=R(),{SYSTEM_TABLE_NAMES:ok,SYSTEM_SCHEMA_NAME:cde,CONFIG_PARAMS:v_,OPERATIONS_ENUM:tr}=Cm,ude=9925,lde="info",_de=1e4,dde="clone-node-config.yaml",gN=[ok.ROLE_TABLE_NAME,ok.USER_TABLE_NAME],B_=process.env.HDB_LEADER_USERNAME,H_=process.env.HDB_LEADER_PASSWORD,q_=process.env.HDB_LEADER_URL,pN=process.env.HDB_LEADER_CLUSTERING_HOST,fde=process.env.HDB_LEADER_CLUSTERING_PORT,Ede=process.env.HDB_FULLY_CONNECTED,SN,Ce,ot,at,G_,Yc,es,Zs;async function hde(){if(await ide())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+q_),Ce?.rootPath)Yc=Ce.rootPath;else try{Yc=process.env.ROOTPATH?process.env.ROOTPATH:en(Z_e.homedir(),Cm.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=en(Yc,dde),Ce=ede.parseDocument(Oi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}G_=Ce?.clustering?.nodeName??tde.random(),ot=await F_({operation:tr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await Tde(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await Sde(),await pde(),await mde(),await gde(),await Rde(),console.info("Successfully cloned node: "+q_)}a(hde,"cloneNode");async function mde(){console.info("Cloning configuration"),SN=ot?.clustering?.enabled;let e={[v_.ROOTPATH]:Yc};if(SN&&Ce?.clustering?.enabled!==!1){if(pN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[v_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(fde)||ot?.clustering?.hubServer?.cluster?.network?.port;e[v_.CLUSTERING_USER]=ot?.clustering?.user;let i=ck.get(v_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:pN,port:n}):i=[{host:pN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[v_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Ce?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in ot)ot[s]?.package&&!t[s]&&await Nm.addConfig(s,ot[s]);Ce?.databases&&await Nm.addConfig("databases",ot?.schemas);let r;Ce&&(r=Nm.flattenConfig(Ce));for(let s in r){let n=Cm.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=G_),uk.info("Cloning config:",e),TN.isEmpty(e)||Nm.updateConfigValue(void 0,void 0,e,!1,!0)}a(mde,"cloneConfig");async function pde(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Yc,!B_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=B_,!H_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=H_,process.env.OPERATIONSAPI_NETWORK_PORT=Ce?.operationsApi?.network?.port??ude,process.env.CLUSTERING_NODENAME=G_,process.env.CLUSTERING_LOGLEVEL=Ce?.clustering?.logLevel??lde,await ade()}a(pde,"installHDB");async function Sde(){console.info("Cloning system database");let e=ma("system");await wm(e);let t=en(e,"system.mdb"),r=Im(t,{overwrite:!0}),s=await ak({operation:tr.GET_BACKUP,database:"system",tables:gN},r);if(await Oi.utimes(t,Date.now(),new Date(s.date)),at=await F_({operation:tr.DESCRIBE_ALL}),at=await JSON.parse(at.body),es=Ce?.databaseConfig?.excludeDatabases,es=es?es.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(es[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Ce?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(es[n]){at[n]="excluded";continue}if(TN.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])Zs[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:tr.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:tr.GET_BACKUP,database:n});let u=ma(n);await wm(u);let _=en(u,n+".mdb"),l=Im(_,{overwrite:!0}),d=await ak(c,l);await Oi.utimes(_,Date.now(),new Date(d.date))}}a(Sde,"cloneTables");async function Tde(){console.info("Cloning system database using fetch");let e=await bm({operation:tr.GET_BACKUP,database:"system",tables:gN},!0),t=ma("system");await wm(t);let r=en(t,"system.mdb");if(await nk(e.body,Im(r,{overwrite:!0})),await Oi.utimes(r,Date.now(),new Date(e.headers.get("date"))),at=await bm({operation:tr.DESCRIBE_ALL}),at=await at.json(),es=Ce?.databaseConfig?.excludeDatabases,es=es?es.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},ot.schemas)for(let s in ot.schemas)Object.keys(ot.schemas[s]).includes("tables")&&(es[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Ce?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in at){if(es[s]){at[s]="excluded";continue}if(TN.isEmpty(at[s]))continue;let n=[],i=!1;for(let d in at[s])Zs[s+d]?(i=!0,at[s][d]="excluded"):n.push(d);if(n.length===0)return;let o;i?(console.info(`Cloning database: ${s} tables: ${n}`),o=await bm({operation:tr.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await bm({operation:tr.GET_BACKUP,database:s},!0));let c=ma(s);await wm(c);let u=new Date(o.headers.get("date")),_=en(c,`${u.getTime()}-${s}.mdb`);await nk(o.body,Im(_,{overwrite:!0}));let l=en(c,s+".mdb");await Oi.rename(_,l),await Oi.utimes(l,Date.now(),u)}}a(Tde,"cloneTablesFetch");async function bm(e,t=!1){let r=Ce?.httpsRejectUnauthorized??!1,s=new ym.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(B_+":"+H_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(q_,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(bm,"leaderHttpReqFetch");function ma(e){return Ce?.databases&&Ce?.databases[e]?.path||Ce?.storage&&Ce?.storage?.path||en(Yc,"database")}a(ma,"getDbFileDir");async function gde(){let{deployComponent:e}=th(),t=await F_({operation:tr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Ce?.componentConfig?.exclude){for(let o of Ce.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Ce?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await F_({operation:tr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(gde,"cloneComponents");async function Rde(){if(!SN)return;let e=await rde.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await ode():(console.info(await sde({operation:tr.RESTART})),await lk.async_set_timeout(_de)),console.info("Clustering cloned tables");let t=Ce?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ce?.clusteringConfig?.publishToLeaderNode!==!1;await nde.setSchemaDataToGlobalAsync();let s=yl(),n=await F_({operation:tr.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Oi.stat(en(ma("system"),"system.mdb"));for(let u of gN)i.push({schema:cde,table:u,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let u in at){if(at[u]==="excluded")continue;let _=await Oi.stat(en(ma(u),u+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let l in at[u])at[u][l]!=="excluded"&&i.push({schema:u,table:l,subscribe:t,publish:r,start_time:_.mtime.toISOString()})}await ik.createTableStreams(i),uk.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",i);let c;if(Ede==="true"&&n.connections.length>0){let u=AE(),_=[{node_name:ot?.clustering?.nodeName,subscriptions:i}],l=!1;G_=ck.get(Cm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===G_)continue;let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(es[E.schema]||Zs[E.schema+E.table])continue;l=!0;let h=await Oi.stat(en(ma(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}_.push(f)}l&&(c=await u({operation:tr.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}c||await s({operation:tr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:i},!0),await ik.closeConnection()}a(Rde,"clusterTables");async function F_(e){let t=new ym.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(B_+":"+H_).toString("base64"),"Content-Type":"application/json"},n=new URL(q_),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await lk.httpRequest(i,e)}a(F_,"leaderHttpReq");async function ak(e,t){let r=new ym.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(B_+":"+H_).toString("base64"),"Content-Type":"application/json"},i=new URL(q_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,sk=ym),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=sk.request(o,l=>{l.statusCode!==200&&u("Request to leader node failed with code: "+l.statusCode),l.pipe(t),l.on("end",()=>{t.close(),c(l.headers)})});_.on("error",l=>{u(l)}),_.write(JSON.stringify(e)),_.end()})}a(ak,"leaderHttpStream");hde().then().catch(e=>{console.log(e)})});var Kc=v(),Ade=po(),RN=R(),Lm=require("fs"),dk=require("path"),xNe=require("os"),{PACKAGE_ROOT:Ode}=R(),Nde=ob(),kNe=(Xh(),te(PO)),{SERVICE_ACTIONS_ENUM:tn}=RN;bde();function bde(){let e=Nde();if(e)if(e.error){console.error(e.error),Kc.error(e.error);return}else e.warn&&(console.warn(e.warn),Kc.warn(e.warn));let t;Lm.readdir(dk.join(Ode,"bin"),r=>{if(r)return Kc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case tn.DEV:process.env.DEV_MODE=!0;case tn.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Lm.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Lm.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Lm.existsSync(dk.join(n,RN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),ha().main();break;case tn.START:s=ha().launch();break;case tn.INSTALL:Yx()().then(()=>ha().main(!0)).catch(f=>{console.error(f)});break;case tn.REGISTER:Qx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case tn.STOP:Xx()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case tn.RESTART:Qo().restart({}).then().catch(f=>{Kc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case tn.VERSION:Ade.printVersion();break;case tn.UPGRADE:Kc.setLogLevel(RN.LOG_LEVELS.INFO),cN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{Kc.error(`Got an error during upgrade ${f}`)});break;case tn.STATUS:rk()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?_k():ha().main();break;default:console.warn(`The "${t}" command is not understood.`);case tn.HELP:console.log(`
107
+ Reindexing upgrade started for transaction logs`),Si.notify("Reindexing upgrade started for transaction logs"),await qF(xO,!0,e)),Si.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(N_?", but errors occurred":"")}a(iue,"reindexUpgrade");async function qF(e,t,r){let s=await Ln.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Ti.join(e,o.toString());if(o===".DS_Store")continue;let u=await Ln.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&Ln.statSync(Ti.join(c,d)).isDirectory())try{await oue(o,d,t),Zt.info(`Reindexing started for ${o}.${d}`),Si.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await cue(o,d,c,t,r),Zt.info(`Reindexing completed for ${o}.${d}`),Si.notify(`Reindexing completed for ${o}.${d}`)}catch(f){N_=!0,f.schema_path=c,f.table_name=d,Si.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Si.error(f),Zt.error(f),console.error(f)}}}if(!N_)try{await Ln.rm(Em,{recursive:!0})}catch{}}a(qF,"processTables");async function oue(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ti.join(Em,n);await Ln.ensureDir(Em),await Ln.writeFile(i,""),Zt=sue({level:"debug",formatters:{bindings(){}}},i)}a(oue,"initPinoLogger");var aue=20;async function cue(e,t,r,s,n){let i;try{i=await Jr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Si.notify(`${e}.${t} file is not from the old environment and has been skipped`),console.info(`${e}.${t} file is not from the old environment and has been skipped`),Zt.error(g);return}throw g}let o=_ue(i.dbis),c=Jr.openDBI(i,o),u=Object.keys(i.dbis),_=Jr.statDBI(i,o);Zt.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new rue.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await Jr.createEnvironment(r,t,!1);Jr.createDBI(d,o,!1,!0);let f=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),f.push(g),s||e==="system"&&(t==="hdb_schema"&&(g.key=g.key.toString(),g.value.name=g.value.name.toString()),t==="hdb_table"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.name=g.value.name.toString()),t==="hdb_attribute"&&(g.key=g.key.toString(),g.value.schema=g.value.schema.toString(),g.value.table=g.value.table.toString(),g.value.attribute=g.value.attribute.toString())),f.length>aue&&await E();await E()}catch(g){throw N_=!0,Zt.error(g),g}async function E(){let g,N=f.map(({value:$})=>$);s?g=await Promise.all(N.map($=>uue(d,$))):g=await Xce(d,o,u.filter($=>$!=="__blob__"),N,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:K}=f[$];Zt.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=g[$]:B=g.written_hashes.indexOf(w)>-1,O_(B,!0),lue(d,o,K[o],s),Zt.info(`Insert success, written hashes: ${g.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&Si.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),Zt.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=Jr.statDBI(i,o),m=Jr.statDBI(d,o);if(Zt.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${m.entryCount}`),O_.deepStrictEqual(h.entryCount,m.entryCount),await Jr.closeEnvironment(i),await Jr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Ti.join(r,t),N=Ti.join(g,"data.mdb"),V=Ti.join(g,"lock.mdb");await Ln.unlink(N),await Ln.unlink(V),await Ln.rmdir(g),Zt.info(`Deleted old environment files from schema folder: ${N}, ${V}`)}let S=await Jr.openEnvironment(r,t),A=Jr.statDBI(S,o);Zt.info(`New stats: ${JSON.stringify(m)}. New stats after move: ${JSON.stringify(A)}`),O_.deepStrictEqual(A.entryCount,m.entryCount),await Jr.closeEnvironment(S),delete global.lmdb_map[`${e}.${t}`]}a(cue,"processTable");async function uue(e,t){Jr.initializeDBIs(e,oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,oo.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[oo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),tue.isEmpty(t.user_name)||e.dbis[oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(uue,"insertTransaction");function lue(e,t,r,s){let i=e.dbis[t].get(r);O_.deepStrictEqual(typeof i,"object");let o;if(s){let c={[oo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[oo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE]:i.hash_values};o=Object.entries(c)}else o=Object.entries(i);for(let[c,u]of o)if(c!==t&&e.dbis[c]!==void 0&&!eue.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];GF(e,c,d,r)}else GF(e,c,u,r)}a(lue,"validateIndices");function GF(e,t,r,s){try{let n=!1,i=Zce.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||Zt.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),O_.deepStrictEqual(n,!0)}catch(n){N_=!0,Zt.error(n),console.error(n)}}a(GF,"validateIndex");function _ue(e){let t;for(let[r,s]of Object.entries(e))if(s.__dbi_defintion__.is_hash_attribute===!0){t=r;break}return t}a(_ue,"getHashDBI")});var YO=T((XOe,$F)=>{"use strict";var due=require("mkcert"),hm=require("path"),kO=require("fs-extra"),$O=U(),fue=j(),VO=R(),Fc=uT(),Eue=ho(),hue=rt();$F.exports={generateKeys:mue,updateConfigCert:kF};async function mue(){let e=fue.getHdbBasePath(),t=hm.join(e,VO.LICENSE_KEY_DIR_NAME),r=await due.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Fc.CERTIFICATE_VALUES.key,caCert:Fc.CERTIFICATE_VALUES.cert}),s=hm.join(t,Fc.CERTIFICATE_PEM_NAME),n=hm.join(t,Fc.PRIVATEKEY_PEM_NAME),i=hm.join(t,Fc.CA_PEM_NAME);try{await kO.writeFile(s,r.cert)}catch(o){throw $O.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await kO.writeFile(n,r.key)}catch(o){throw $O.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await kO.writeFile(i,Fc.CERTIFICATE_VALUES.cert)}catch(o){throw $O.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}kF(s,n,i)}a(mue,"generateKeys");function kF(e,t,r){let s=Eue(Object.keys(VO.CONFIG_PARAM_MAP),!0),n=VO.CONFIG_PARAMS,i={[n.CLUSTERING_TLS_CERTIFICATE]:s[n.CLUSTERING_TLS_CERTIFICATE.toLowerCase()]?s[n.CLUSTERING_TLS_CERTIFICATE]:e,[n.CLUSTERING_TLS_PRIVATEKEY]:s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]?s[n.CLUSTERING_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CLUSTERING_TLS_CERT_AUTH]:s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]?s[n.CLUSTERING_TLS_CERT_AUTH.toLowerCase()]:r,[n.TLS_CERTIFICATE]:s[n.TLS_CERTIFICATE.toLowerCase()]?s[n.TLS_CERTIFICATE.toLowerCase()]:e,[n.TLS_PRIVATEKEY]:s[n.TLS_PRIVATEKEY.toLowerCase()]?s[n.TLS_PRIVATEKEY.toLowerCase()]:t,[n.TLS_CERTIFICATEAUTHORITY]:s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]?s[n.TLS_CERTIFICATEAUTHORITY.toLowerCase()]:r};s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATE]=s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]),s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_PRIVATEKEY]=s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]),s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]&&(i[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY]=s[n.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY.toLowerCase()]),hue.updateConfigValue(void 0,void 0,i,!1,!0)}a(kF,"updateConfigCert")});var QF=T((tNe,WF)=>{"use strict";var mm=require("path"),ao=require("fs-extra"),pue=GO(),la=U(),VF=rt(),KO=j(),Js=R(),pm=G(),Sue=require("properties-reader"),Tue=vs(),gue=cE(),Rue=_r(),eNe=require("util"),Aue=Rue.searchByValue,Oue=dr(),Nue=LE(),bue=ke(),yue=xF(),YF=YO(),Iue=_m(),I_=new pue("4.0.0"),KF=[],b_,y_;async function wue(){try{if(await Iue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),b_){let t=pm.changeExtension(b_,".bak");await ao.move(b_,t)}if(y_){let t=pm.changeExtension(y_,".bak");await ao.move(y_,t)}await YF.generateKeys()}else console.log("Using existing certificates."),YF.updateConfigCert(b_,y_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(wue,"generateNewKeys");async function Cue(){console.log("Updating HarperDB nodes."),la.info("Updating HarperDB nodes.");let e=[];try{let t=new Tue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Aue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!bue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let l=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(l),l}let u={host:c.host,port:c.port};e.push(u);let _=[];for(let l=0,d=c.subscriptions.length;l<d;l++){let f=c.subscriptions[l],E=f.channel.split(":");_.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:_,system_info:{hdb_version:Js.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(pm.isEmptyOrZeroLength(s))return;let n=new gue(Js.SYSTEM_SCHEMA_NAME,Js.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await Oue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Nue.setRoutes({server:"hub",routes:e})}catch(t){throw console.error("There was a problem setting the clustering routes. Please check the log for details."),t}}a(Cue,"updateNodes");async function Lue(){let e=KO.get(Js.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(mm.join("config","settings.js"))){la.info("pre 4.0.0 settings.js file not found, skipping settings file update");return}let t="Updating settings file for version 4.0.0";console.log(t),la.info(t);let r=mm.dirname(e),s=KO.get(Js.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=mm.join(s,"backup","4_0_0_upgrade_settings.bak"),i=mm.join(s,Js.HDB_CONFIG_FILE);try{la.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),ao.copySync(e,n)}catch(d){throw console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),d}try{la.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),la.info("Updating env variables with new settings values");let d=VF.initOldConfig(e);b_=d[Js.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],y_=d[Js.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],VF.createConfigFile(d)}catch(d){throw console.log("There was a problem creating the new HarperDB config file. Please check the log for details."),d}let o=pm.getPropsFilePath();ao.accessSync(o,ao.constants.F_OK|ao.constants.R_OK);let u=Sue(o).get(Js.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
108
+ install_user = ${u}`;try{ao.writeFileSync(o,_)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{KO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let l="New settings file for 4.0.0 upgrade successfully created.";try{ao.removeSync(r),console.log(l),la.info(l)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(Lue,"updateSettingsFile_4_0_0");I_.async_functions.push(Lue);I_.async_functions.push(wue);I_.async_functions.push(yue);I_.async_functions.push(Cue);KF.push(I_);WF.exports=KF});var WO=T((sNe,XF)=>{"use strict";var _a=G(),Due=R(),jF=U(),{DATA_VERSION:Pue,UPGRADE_VERSION:Mue}=Due.UPGRADE_JSON_FIELD_NAMES_ENUM,zF=BF(),Sm=QF(),da=new Map;zF&&zF.forEach(e=>{da.set(e.version,e)});Sm&&Sm.forEach(e=>{da.set(e.version,e)});Sm&&Sm.forEach(e=>{da.set(e.version,e)});function Uue(){return[...da.keys()].sort(_a.compareVersions)}a(Uue,"getSortedVersions");function JF(e){let t=e[Pue],r=e[Mue];return _a.isEmptyOrZeroLength(t)||_a.isEmptyOrZeroLength(r)?(jF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),jF.error("There was an error when trying to evaluate the version information for your instance. Trying to start the server anyways but it may fail. If you continue to have this problem, please contact support@harperdb.io."),[]):[...da.keys()].sort(_a.compareVersions).filter(function(s){return _a.compareVersions(s,t)>0&&_a.compareVersions(s,r)<=0})}a(JF,"getVersionsForUpgrade");function vue(e){return JF(e).length>0}a(vue,"hasUpgradesRequired");function Bue(e){return _a.isEmptyOrZeroLength(e)?null:da.has(e)?da.get(e):null}a(Bue,"getDirectiveByVersion");XF.exports={getSortedVersions:Uue,getDirectiveByVersion:Bue,getVersionsForUpgrade:JF,hasUpgradesRequired:vue}});var Tm=T((iNe,sx)=>{"use strict";var Hue=require("util"),QO=require("chalk"),que=require("os"),ex=dr(),Gue=_r(),Xr=R(),tx=NF(),zO=sT(),{UpgradeObject:ZF}=IF(),{forceDowngradePrompt:Fue}=_m(),xue=So(),w_=U(),xc=G(),JO=cs(),kue=(Ee(),te(De)),$ue=WO(),Vue=Hue.promisify(JO.setSchemaDataToGlobal),Yue=Gue.searchByValue,Kue="info_id",Wue="2.9.9",Que="3.0.0";async function jue(e){let t=new tx.HdbInfoInsertObject(1,e,e),r=new zO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return JO.setSchemaDataToGlobal(),ex.insert(r)}a(jue,"insertHdbInstallInfo");async function jO(e){let t,r=await rx(),s=new Map([[0,{}]]);for(let c of r)s.set(c.info_id,c);let i=Math.max.apply(null,[...s.keys()])+1;t=new tx.HdbInfoInsertObject(i,e,e);let o=new zO.InsertObject(Xr.OPERATIONS_ENUM.INSERT,Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Vue(),ex.insert(o)}a(jO,"insertHdbUpgradeInfo");async function rx(){let e=new zO.NoSQLSeachObject(Xr.SYSTEM_SCHEMA_NAME,Xr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Kue,Xr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Yue(e))}catch(r){w_.info(r)}return t}a(rx,"getAllHdbInfoRecords");async function zue(){let e=await rx();if(e.length===0)return;let t,r=new Map;for(let n of e)r.set(n.info_id,n);let s=Math.max.apply(null,[...r.keys()]);return t=r.get(s),t}a(zue,"getLatestHdbInfoRecord");async function Jue(){w_.info("Checking if HDB software has been updated");try{let e=xue.version(),t=await zue(),r;if(xc.isEmpty(t))r=Wue;else if(r=t.data_version_num,xc.compareVersions(r.toString(),e.toString())>0){if(!xc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(QO.yellow(`This instance's data was last run on version ${r}`)),console.error(QO.red(`You have installed a version lower than the version that your data was created on or was upgraded to. This may cause issues and is currently not supported.${que.EOL}${Xr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");xc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(QO.yellow(`This instance's data was last run on version ${r}`)),await Fue(new ZF(r,e))?await jO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(JO.setSchemaDataToGlobal(),Xue(r),e.toString()===r.toString())return;let s=new ZF(r,e);if($ue.hasUpgradesRequired(s))return s;xc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await jO(s.upgrade_version),w_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw w_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),w_.fatal(e),e}}a(Jue,"getVersionUpdateInfo");function Xue(e){let t=`You are attempting to upgrade from an old instance of HarperDB that is no longer supported. In order to upgrade to this version, you must do a fresh install. If you need support, please contact ${Xr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in kue.databases.system))throw console.log(t),new Error(t);if(!xc.isEmpty(e)&&e<Que)throw console.log(t),new Error(t)}a(Xue,"checkIfInstallIsSupported");sx.exports={insertHdbInstallInfo:jue,insertHdbUpgradeInfo:jO,getVersionUpdateInfo:Jue}});var cx=T((aNe,ax)=>{"use strict";var XO=require("joi"),{boolean:Zue,string:nx,number:ele}=XO.types(),ix=require("fs-extra"),C_=R(),ox=require("path"),tle=Ve();ax.exports=rle;function rle(e){let t=nx.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=XO.object({[C_.INSTALL_PROMPTS.ROOTPATH]:XO.custom(sle),[C_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ele.min(0),[C_.INSTALL_PROMPTS.TC_AGREEMENT]:nx.valid("yes","YES","Yes"),[C_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[C_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Zue});return tle.validateBySchema(e,r)}a(rle,"installValidator");function sle(e,t){if(ix.existsSync(ox.join(e,"system/hdb_user/data.mdb"))||ix.existsSync(ox.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(sle,"validateRootAvailable")});var lx=T((uNe,ux)=>{"use strict";var{mkdirpSync:nle}=require("fs-extra"),Dn=require("path"),kc=R(),eN=U(),ile=as(),ZO=Fn(),ole=He();ux.exports=ale;async function ale(e){eN.trace("Mounting HarperDB"),Xs(e),Xs(Dn.join(e,"backup")),Xs(Dn.join(e,"trash")),Xs(Dn.join(e,"keys")),Xs(Dn.join(e,"keys",kc.LICENSE_FILE_NAME)),Xs(Dn.join(e,"log")),Xs(Dn.join(e,"doc")),Xs(Dn.join(e,"database")),Xs(Dn.join(e,kc.TRANSACTIONS_DIR_NAME)),Xs(Dn.join(e,"clustering","leaf")),Xs(Dn.join(e,"components")),await cle()}a(ale,"mountHdb");async function cle(){let e=qu(),t=Object.keys(ZO);for(let r=0;r<t.length;r++){let s=t[r],n=ZO[s].hash_attribute;try{ole.initSystemSchemaPaths(kc.SYSTEM_SCHEMA_NAME,s);let i=new e(kc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=ZO[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await ile.createTable(s,i)}catch(i){throw eN.error(`issue creating environment for ${kc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(cle,"createLMDBTables");function Xs(e){nle(e,{mode:kc.HDB_FILE_PERMISSIONS}),eN.info(`Directory ${e} created`)}a(Xs,"makeDirectory")});var Rm=T((_Ne,Rx)=>{"use strict";var rN=require("os"),Ex=require("inquirer"),Os=require("fs-extra"),ule=require("properties-reader"),fa=require("chalk"),Un=require("path"),lle=require("human-readable-ids").hri,_le=require("ora"),dle=require("yaml"),mt=U(),lo=j(),L_=G(),gm=ho(),hx=Tm(),mx=So(),ee=R(),fle=cx(),Ele=lx(),sN=rt(),hle=Er(),mle=nE(),ple=MO(),Sle=cs(),Tle=require("util").promisify,gle=Tle(Sle.setSchemaDataToGlobal),Rle=YO(),$c=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),er=a(e=>fa.magenta.bold(e),"HDB_PROMPT_MSG"),Ale="https://harperdb.io/legal/end-user-license-agreement",_o=rN.EOL,co="",Ole="yes",_x="Starting HarperDB install...",dx="HarperDB installation was successful.",fx="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Nle="An out of date version of HarperDB is already installed.",tN="It appears that HarperDB is already installed. Exiting install...",ble="Aborting install",yle=new RegExp(/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/),Ile=new RegExp(/^[^\s.,*>]+$/),wle=rN.homedir(),Cle=Un.join(wle,ee.HDB_ROOT_DIR_NAME),Lle=9925,Dle="HDB_ADMIN",Ple="CLUSTER_USER",wr={DESTINATION:"Please enter a destination for HarperDB:",HDB_PORT:"Please enter a server listening port for HarperDB:",HDB_USERNAME:"Please enter a username for the HDB_ADMIN:",HDB_PASS:"Please enter a password for the HDB_ADMIN:",NODE_NAME:"Please enter a unique name for this node:",CLUSTER_USERNAME:"Please enter a username for the CLUSTER_USER:",CLUSTER_PASS:"Please enter a password for the CLUSTER_USER:"},Vc=gm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Mn,px=!1;Rx.exports=Sx;Sx.createSuperUser=gx;async function Sx(){console.log(er(_o+_x+_o)),mt.notify(_x);let e;Vc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Mle());let t=vle();Object.assign(t,e);let r=fle(t);if(r)throw r.message;await Ble(),await Hle(t);let s=await Ule(t);Mn=s[ee.INSTALL_PROMPTS.ROOTPATH],Vc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Un.dirname(Vc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Mn&&(px=!0),!Vc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Os.pathExists(Un.join(Mn,ee.HDB_CONFIG_FILE))&&(console.error(tN),process.exit());let n=_le({prefixText:er("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),L_.isEmpty(Mn))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");lo.setHdbBasePath(Mn),await Ele(Mn),await qle(),await Gle(s),mt.initLogSettings(!0),await gx(s),await xle(s),await Rle.generateKeys(),await kle(),ple(),n.stop(),console.log(er(_o+dx+_o)),mt.notify(dx)}a(Sx,"install");function Mle(){let e=dle.parseDocument(Os.readFileSync(Vc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=sN.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Mle,"getConfigFromFile");async function Ule(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:co,default:Cle,validate:async n=>Pn(n)?Pn(n):await Os.pathExists(Un.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:er(wr.DESTINATION)},{type:"input",transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:co,default:Lle,validate:n=>yle.test(n)?!0:"Invalid port.",message:er(wr.HDB_PORT)},{type:"input",transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:co,default:Dle,validate:n=>Pn(n)?Pn(n):(t=n,!0),message:er(wr.HDB_USERNAME)},{type:"password",when:uo(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],wr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:co,validate:n=>Pn(n)?Pn(n):!0,message:er(wr.HDB_PASS)}];if(L_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:co,default:lle.random(),validate:i=>Ile.test(i)?!0:"Invalid node name, must not contain ., * or >",message:er(wr.NODE_NAME)},{type:"input",transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:co,default:Ple,validate:i=>Pn(i)?Pn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:er(wr.CLUSTER_USERNAME)},{type:"password",when:uo(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],wr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:co,validate:i=>Pn(i)?Pn(i):!0,message:er(wr.CLUSTER_PASS)}];r.push(...n)}let s=await Ex.prompt(r);if(Object.keys(s).length===0)return e;for(let n in s)e[n]===void 0&&(e[n]=s[n]);return e}a(Ule,"installPrompts");function uo(e,t){return e!==void 0?(t.includes("password")?(console.log(`${er(t)} ${fa.gray("[hidden]")}`),mt.trace(`${er(t)} [hidden]`)):(console.log(`${er(t)} ${e}`),mt.trace(`${er(t)} ${e}`)),!1):!0}a(uo,"displayCmdEnvVar");function Pn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Pn,"checkForEmptyValue");function vle(){let e=Object.keys(ee.INSTALL_PROMPTS),t=gm(e),r=gm(Object.keys(ee.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=ee.CONFIG_PARAM_MAP[n.toLowerCase()];t[n]?i===void 0?s[n]=t[n]:s[i.toUpperCase()]=t[n]:i!==void 0&&r[i.toLowerCase()]&&(s[n]=r[i.toLowerCase()])}return s}a(vle,"checkForPromptOverride");async function Ble(){mt.trace("Checking for existing install.");let e=L_.getPropsFilePath(),t=await Os.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=ule(e),n=sN.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Os.pathExists(n)}if(!t&&L_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await hx.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${mx.version()}. Exiting install...`;console.log(_o+fa.magenta.bold(Nle)),console.log(fa.magenta.bold(n)),mt.error(n)}else console.log(_o+fa.magenta.bold(tN)),mt.error(tN);process.exit(0)}}a(Ble,"checkForExistingInstall");async function Hle(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${Ale}${_o}and can be viewed by typing or copying and pasting the URL into your web browser.${_o}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:co,transformer:$c,when:uo(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:er(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:fa.yellow("Please enter 'yes' or 'no'")},s=await Ex.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Ole&&(console.log(fa.yellow(fx)),mt.error(fx),process.exit(0))}a(Hle,"termsAgreement");async function qle(){let e=Un.join(Mn,ee.HDB_CONFIG_FILE),t;try{t=rN.userInfo().username}catch{t=process.env.USERNAME||process.env.USER||process.env.LOGNAME||process.env.LNAME||process.env.SUDO_USER}if(t){let r=`settings_path = ${e}
109
+ install_user = ${t}`,s=L_.getHomeDir(),n=Un.join(s,ee.HDB_HOME_DIR_NAME),i=Un.join(n,ee.LICENSE_KEY_DIR_NAME);try{Os.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Os.mkdirpSync(i,{mode:ee.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${ee.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Un.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Os.writeFile(o,r)}catch(c){throw mt.error(`There was an error creating the boot file at path: ${o}`),c}lo.setProperty(ee.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),lo.setProperty(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),lo.setProperty(lo.BOOT_PROPS_FILE_PATH,o)}}a(qle,"createBootPropertiesFile");async function Gle(e){mt.trace("Creating HarperDB config file");let t=gm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{sN.createConfigFile(t),lo.initSync()}catch(r){Fle(r)}}a(Gle,"createConfigFile");function Fle(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(ble);let t=Un.resolve(lo.get(lo.BOOT_PROPS_FILE_PATH),"../");t&&Os.removeSync(t),Mn&&(px?Os.readdirSync(Mn,{withFileTypes:!0}).forEach(s=>{let n=Un.join(s.path,s.name);n!==Vc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Os.removeSync(n)}):Os.removeSync(Mn)),process.exit(1)}a(Fle,"rollbackInstall");async function Tx(e,t){mt.trace("Creating admin user"),await gle();let r;try{r=await mle.addRole(e)}catch(s){if(s.message.includes("already exists"))t=void 0;else throw s.message+="Error creating role",s}if(t)try{t.role=r.role,await hle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(Tx,"createAdminUser");async function gx(e){mt.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await Tx(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(gx,"createSuperUser");async function xle(e){mt.trace("Creating Cluster user.");let t;e[ee.INSTALL_PROMPTS.CLUSTERING_USER]&&e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[ee.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await Tx({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(xle,"createClusterUser");async function kle(){let e=mx.version();if(e)await hx.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(kle,"insertHdbVersionInfo")});var Nx=T((fNe,Ox)=>{"use strict";var nN=G(),Zr=U(),Ax=WO();Ox.exports={processDirectives:$le};async function $le(e){console.log("Starting upgrade process...");let t=Ax.getVersionsForUpgrade(e),r=Kle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Zr.notify(c),console.log(c);let u=[],_=[];try{u=Vle(o.sync_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await Yle(o.async_functions)}catch(l){throw Zr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a($le,"processDirectives");function Vle(e){if(nN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Zr.info(`Running function ${r.name}`),!(r instanceof Function)){Zr.info("Variable being processed is not a function");continue}let s=r();Zr.info(s),t.push(s)}return t}a(Vle,"runSyncFunctions");async function Yle(e){if(nN.isEmptyOrZeroLength(e))return Zr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Zr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Zr.info(`Running function ${n.name}`),!(n instanceof Function)){Zr.info("Variable being processed is not a function");continue}let i=await n();Zr.info(i),t.push(i)}return t}a(Yle,"runAsyncFunctions");function Kle(e){if(nN.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=Ax.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Kle,"getUpgradeDirectivesToInstall")});var aN=T((hNe,Lx)=>{"use strict";var Am=j();Am.initSync();var wx=require("chalk"),bx=require("fs-extra"),Ri=U(),gi=R(),yx=So(),Wle=Nx(),iN=G(),Cx=Tm(),Qle=_m(),Ix=Wm(),jle=cs(),zle=require("util").promisify,Jle=zle(jle.setSchemaDataToGlobal),oN,{UPGRADE_VERSION:Om}=gi.UPGRADE_JSON_FIELD_NAMES_ENUM;Lx.exports={upgrade:Xle};async function Xle(e){await Jle(),oN===void 0&&(oN=dc()),bx.existsSync(Am.get(Am.BOOT_PROPS_FILE_PATH))||(D_("The hdb_boot_properties file was not found. Please install HDB.",gi.LOG_LEVELS.ERROR),process.exit(1)),bx.existsSync(Am.get(gi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(D_("The hdb settings file was not found. Please make sure HDB is installed.",gi.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await Cx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),D_(`This version of HarperDB is ${yx.version()}`,gi.LOG_LEVELS.INFO);let r=t[Om]?t[Om]:yx.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${gi.HDB_SUPPORT_ADDRESS}`),Ri.notify("Missing new version field from upgrade info object"),process.exit(1)),await Zle();let s,n=0;try{s=await Qle.forceUpdatePrompt(t)}catch(i){Ri.error("There was an error when prompting user about upgrade."),Ri.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Ri.info(`Starting upgrade to version ${r}`),await e_e(t),D_(`HarperDB was successfully upgraded to version ${t[Om]}`,gi.LOG_LEVELS.INFO)}a(Xle,"upgrade");async function Zle(){let e=!1,t=await Ix.findPs(gi.HDB_PROC_NAME);if(iN.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await Ix.findPs("hdb_express");iN.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await oN.list();iN.isEmptyOrZeroLength(r)||(e=!0)}if(e){let r="HarperDB is running, please stop all HarperDB services with 'harperdb stop' and run the upgrade command again.";console.log(wx.red(r)),Ri.error(r),process.exit(1)}}a(Zle,"checkIfRunning");async function e_e(e){try{await Wle.processDirectives(e)}catch(t){throw D_("There was an error during the data upgrade. Please check the logs.",gi.LOG_LEVELS.ERROR),t}try{await Cx.insertHdbUpgradeInfo(e[Om])}catch(t){Ri.error("Error updating the 'hdb_info' system table."),Ri.error(t)}}a(e_e,"runUpgrade");function D_(e,t=void 0){t||(t=Ri.info),Ri[t](e),console.log(wx.magenta(e))}a(D_,"printToLogAndConsole")});var vx=T((pNe,Ux)=>{"use strict";var{promises:uN,createReadStream:t_e,createWriteStream:r_e}=require("fs"),{createGzip:s_e}=require("zlib"),{promisify:n_e}=require("util"),{pipeline:i_e}=require("stream"),o_e=n_e(i_e),a_e=require("path"),ha=j();ha.initSync();var Ea=U(),{CONFIG_PARAMS:P_,ITC_EVENT_TYPES:c_e}=R(),{onMessageFromWorkers:u_e}=Qe(),l_e=6e4,__e="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",d_e="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",cN,Px;Ux.exports=Mx;u_e(e=>{e.type===c_e.RESTART&&(ha.initSync(!0),clearInterval(Px),ha.get(P_.LOGGING_ROTATION_ENABLED)&&Mx())});async function Mx(){try{let e=Ea.getLogFilePath(),t=ha.get(P_.LOGGING_ROTATION_MAXSIZE),r=ha.get(P_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Ea.error(__e);return}let s=ha.get(P_.LOGGING_ROTATION_PATH);if(!s){Ea.error(d_e);return}let n;if(t){let o=t.slice(-1),c=t.slice(0,-1);o==="G"?n=c*1e9:o==="M"?n=c*1e6:n=c*1e3}let i;if(r){let o=r.slice(-1),c=r.slice(0,-1);o==="D"?i=c*1440:o==="H"?i=c*60:i=c}cN=Date.now()/6e4,Ea.trace("Log rotate enabled, maxSize:",t,"interval:",r),Px=setInterval(async()=>{if(n){let o;o=await uN.stat(e),o.size>=n&&await Dx(e,s)}i&&Date.now()/6e4-cN>=i&&(await Dx(e,s),cN=Date.now()/6e4)},l_e).unref()}catch(e){Ea.error(e)}}a(Mx,"logRotator");async function Dx(e,t){let r=ha.get(P_.LOGGING_ROTATION_COMPRESS),s=a_e.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await o_e(t_e(e),s_e(),r_e(s)),await uN.unlink(e)):await uN.rename(e,s),Ea.closeLogFile(),Ea.notify(`hdb.log rotated, old log moved to ${s}`)}a(Dx,"moveLogFile")});var ma=T((INe,kx)=>{"use strict";var Ns=j();Ns.initSync();var TNe=jo(),yt=R(),Bn=U(),Ai=require("fs-extra"),fo=require("path"),f_e=require("systeminformation"),E_e=MO(),h_e=Rm(),lN=require("chalk"),m_e=po(),Oi=G(),Hx=rt(),qx=ho(),Bx=HE(),p_e=aN(),S_e=vx(),T_e=require("minimist"),{PACKAGE_ROOT:g_e}=R(),{startHTTPThreads:R_e,startSocketServer:gNe,mostIdleRouting:RNe,remoteAffinityRouting:ANe}=(Zh(),te(DO)),A_e=Tm(),{isMainThread:O_e}=require("worker_threads"),ONe=Fn(),NNe=Ui(),bNe=NS(),yNe=qu(),_N=R(),vn,Yc,N_e="Upgrade complete. Starting HarperDB.",b_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",y_e="HarperDB not found, starting install process.",I_e="There was an error during install, check install_log.log for more details. Exiting.",w_e="HarperDB successfully started.";function C_e(){let e=a(()=>{Ai.removeSync(fo.join(Ns.get(yt.CONFIG_PARAMS.ROOTPATH),yt.HDB_PID_FILE)),process.exit(0)},"remove_hdb_pid");process.on("exit",()=>{e()}),process.on("SIGINT",()=>{e()}),process.on("SIGQUIT",()=>{e()}),process.on("SIGTERM",()=>{e()})}a(C_e,"addExitListeners");async function Gx(e=!1,t=!1){if(console.log(lN.magenta("Starting HarperDB...")),await xx()===!1){console.log(y_e);try{await h_e()}catch(o){console.error(I_e,o),Bn.error(o),process.exit(1)}}let r,s=Yc?.service==="clustering";Yc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ai.readFile(fo.join(Ns.get(yt.CONFIG_PARAMS.ROOTPATH),yt.HDB_PID_FILE),"utf8")),c=await f_e.processes();for(let u of c.list)if(u.pid===o){s?r=!0:console.log("HarperDB appears to be already running.");break}}catch{}vn===void 0&&(vn=dc()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)||(console.error("Clustering must be setup and enabled in harperdb-config."),process.exit()),console.log("Starting clustering."),await Bx.generateNatsConfig(),await vn.startClusteringProcesses(!0),process.exit()),C_e(),await Ai.writeFile(fo.join(Ns.get(_N.CONFIG_PARAMS.ROOTPATH),_N.HDB_PID_FILE),`${process.pid}`),Bn.info("HarperDB PID",process.pid);let n;try{let o=await A_e.getVersionUpdateInfo();o!==void 0&&(n=o[yt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await p_e.upgrade(o),console.log(N_e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Bn.error(o)):(console.error(b_e),Bn.error(o)),process.exit(1)}if(!e){let o=qx(Object.keys(yt.CONFIG_PARAM_MAP),!0);!Oi.isEmpty(o)&&!Oi.isEmptyOrZeroLength(Object.keys(o))&&Hx.updateConfigValue(void 0,void 0,o,!0,!0)}E_e(),P_e(),Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&O_e&&await Bx.generateNatsConfig(t)}a(Gx,"initialize");async function L_e(e=!1){try{Yc=T_e(process.argv),Yc.ROOTPATH&&Hx.updateConfigObject("settings_path",fo.join(Yc.ROOTPATH,yt.HDB_CONFIG_FILE)),await Gx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!Yc.service;Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await vn.startClusteringProcesses(),await vn.startClusteringThreads()),await R_e(process.env.DEV_MODE?1:Ns.get(_N.CONFIG_PARAMS.THREADS)),Ns.get(yt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await S_e(),t||Fx()}catch(t){console.error(t),Bn.error(t),process.exit(1)}}a(L_e,"main");function Fx(){Bn.suppressLogging(()=>{console.log(lN.magenta(""+Ai.readFileSync(fo.join(g_e,"utility/install/ascii_logo.txt")))),console.log(lN.magenta(`|------------- HarperDB ${m_e.version} successfully started ------------|`))}),Bn.notify(w_e)}a(Fx,"started");async function D_e(){try{vn===void 0&&(vn=dc()),vn.enterPM2Mode(),await Gx(),Oi.autoCastBoolean(Ns.get(yt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await vn.startClusteringProcesses(),await vn.startService(yt.PROCESS_DESCRIPTORS.HDB),Fx(),process.exit(0)}catch(e){console.error(e),Bn.error(e),process.exit(1)}}a(D_e,"launch");function P_e(){let e=fo.join(Ns.getHdbBasePath(),yt.LICENSE_KEY_DIR_NAME,yt.LICENSE_FILE_NAME),t=fo.join(e,yt.LICENSE_FILE_NAME),r=fo.join(e,yt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=qx(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Oi.isEmpty(s)||Oi.isEmpty(n))return;Ai.mkdirpSync(e),Ai.writeFileSync(r,s),Ai.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Bn.error(n)}}a(P_e,"writeLicenseFromVars");kx.exports={launch:D_e,main:L_e,isHdbInstalled:xx};async function xx(){try{await Ai.stat(Oi.getPropsFilePath()),await Ai.stat(Ns.get(yt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Oi.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Bn.error(`Error checking for HDB install - ${e}`),e}return!0}a(xx,"isHdbInstalled")});var Vx=T((CNe,$x)=>{var M_e=Rm(),U_e=U();$x.exports=v_e;async function v_e(){try{await M_e()}catch(e){console.error("There was an error during the install."),console.error(e),U_e.error(e),process.exit(1)}}a(v_e,"install")});var Wx=T((DNe,Kx)=>{"use strict";var B_e=PE(),H_e=U(),Yx="Registration failed.";async function q_e(){let e;try{e=await B_e.register()}catch(t){return H_e.error(`Registration error ${t}`),Yx}return e||Yx}a(q_e,"register");Kx.exports={register:q_e}});var Jx=T((MNe,zx)=>{"use strict";var G_e=U(),F_e=R(),x_e=require("util"),k_e=require("child_process"),Qx=x_e.promisify(k_e.exec),$_e=Xn(),M_=dc(),jx="Stopping HarperDB.";zx.exports=V_e;async function V_e(){if(console.log(jx),G_e.notify(jx),await M_.isServiceRegistered(F_e.HDB_PROC_DESCRIPTOR)){M_.enterPM2Mode();let r=await M_.getUniqueServicesList();for(let s in r)await M_.stop(s)}await M_.kill();let t=await $_e.getHDBProcessInfo();t.clustering.forEach(r=>{Qx(`kill ${r.pid}`)}),t.core.forEach(r=>{Qx(`kill ${r.pid}`)})}a(V_e,"stop")});var tk=T((vNe,ek)=>{"use strict";var fN=require("fs-extra"),EN=require("path"),dN=require("yaml"),U_=st(),v_=R(),Xx=ke(),hN=U(),Y_e=Er(),K_e=wE(),W_e=yE(),Q_e=Xn(),Zx=j(),{isHdbInstalled:j_e}=ma();Zx.initSync();var bs={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored",NOT_INSTALLED:"not installed"},Cr={LEAF:"leaf server",HUB:"hub server"},Nm;ek.exports=z_e;async function z_e(){let e={harperdb:{status:bs.STOPPED}};if(!await j_e()){e.harperdb.status=bs.NOT_INSTALLED,console.log(dN.stringify(e));return}Nm=Zx.get(v_.CONFIG_PARAMS.ROOTPATH);let t;try{t=Number.parseInt(await fN.readFile(EN.join(Nm,v_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===v_.NODE_ERROR_CODES.ENOENT){hN.info("`harperdb status` did not find a hdb.pid file"),e.harperdb.status=bs.STOPPED,console.log(dN.stringify(e));return}throw s}let r=await Q_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=bs.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await J_e(r),e.clustering[Cr.HUB].status===bs.RUNNING&&e.clustering[Cr.LEAF].status===bs.RUNNING){let s=[],n=await K_e({});for(let o of n.nodes){let c={};for(let u in o)c[u.replace("_"," ")]=o[u];s.push(c)}e.clustering.network=s;let i=await W_e.clusterStatus();e.clustering.replication={"node name":i.node_name,"is enabled":i.is_enabled,connections:[]};for(let o of i.connections){let c={};c["node name"]=o?.node_name,c.status=o?.status,c.ports={clustering:o?.ports?.clustering,"operations api":o?.ports?.operations_api},c["latency ms"]=o?.latency_ms,c.uptime=o?.uptime,c.subscriptions=o?.subscriptions,c["system info"]={"hdb version":o?.system_info?.hdb_version,"node version":o?.system_info?.node_version,platform:o?.system_info?.platform},e.clustering.replication.connections.push(c)}await U_.closeConnection()}console.log(dN.stringify(e)),process.exit()}a(z_e,"status");async function J_e(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=bs.STOPPED,t[Cr.LEAF].status=bs.STOPPED,t;let{port:r}=U_.getServerConfig(v_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Y_e.getClusterUser();try{(await U_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=bs.RUNNING}catch{t[Cr.HUB].status=bs.ERRORED}let{port:i}=U_.getServerConfig(v_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await U_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=bs.RUNNING}catch{t[Cr.LEAF].status=bs.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await fN.readFile(EN.join(Nm,"clustering",Xx.PID_FILES.HUB),"utf8"))}catch(o){hN.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await fN.readFile(EN.join(Nm,"clustering",Xx.PID_FILES.LEAF),"utf8"))}catch(o){hN.error(o),t[Cr.LEAF].pid=void 0}return t}a(J_e,"getHubLeafStatus")});var lk=T(()=>{"use strict";var X_e=require("os"),Im=require("https"),rk=require("http"),Ni=require("fs-extra"),Z_e=require("yaml"),ede=require("human-readable-ids").hri,{pipeline:sk}=require("stream/promises"),{createWriteStream:wm,ensureDir:Cm}=require("fs-extra"),{join:en}=require("path"),SN=require("lodash"),ak=j(),tde=Xn(),ck=U(),bm=rt(),{restart:rde}=jo(),uk=G(),nk=st(),sde=cs(),{isHdbInstalled:nde,main:ide}=ma(),ode=Rm(),Lm=R(),{SYSTEM_TABLE_NAMES:ik,SYSTEM_SCHEMA_NAME:ade,CONFIG_PARAMS:B_,OPERATIONS_ENUM:tr}=Lm,cde=9925,ude="info",lde=1e4,_de="clone-node-config.yaml",TN=[ik.ROLE_TABLE_NAME,ik.USER_TABLE_NAME],H_=process.env.HDB_LEADER_USERNAME,q_=process.env.HDB_LEADER_PASSWORD,G_=process.env.HDB_LEADER_URL,mN=process.env.HDB_LEADER_CLUSTERING_HOST,dde=process.env.HDB_LEADER_CLUSTERING_PORT,fde=process.env.HDB_FULLY_CONNECTED,pN,Ce,ot,at,F_,Kc,es,Zs;async function Ede(){if(await nde())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+G_),Ce?.rootPath)Kc=Ce.rootPath;else try{Kc=process.env.ROOTPATH?process.env.ROOTPATH:en(X_e.homedir(),Lm.HDB_ROOT_DIR_NAME)}catch(t){throw console.error(t),new Error("There was an setting default rootPath. Please set 'rootPath' in clone-node-config.yaml")}let e;try{e=en(Kc,_de),Ce=Z_e.parseDocument(Ni.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}F_=Ce?.clustering?.nodeName??ede.random(),ot=await x_({operation:tr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await Sde(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await pde(),await mde(),await hde(),await Tde(),await gde(),console.info("Successfully cloned node: "+G_)}a(Ede,"cloneNode");async function hde(){console.info("Cloning configuration"),pN=ot?.clustering?.enabled;let e={[B_.ROOTPATH]:Kc};if(pN&&Ce?.clustering?.enabled!==!1){if(mN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[B_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(dde)||ot?.clustering?.hubServer?.cluster?.network?.port;e[B_.CLUSTERING_USER]=ot?.clustering?.user;let i=ak.get(B_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:mN,port:n}):i=[{host:mN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[B_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Ce?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in ot)ot[s]?.package&&!t[s]&&await bm.addConfig(s,ot[s]);Ce?.databases&&await bm.addConfig("databases",ot?.schemas);let r;Ce&&(r=bm.flattenConfig(Ce));for(let s in r){let n=Lm.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=F_),ck.info("Cloning config:",e),SN.isEmpty(e)||bm.updateConfigValue(void 0,void 0,e,!1,!0)}a(hde,"cloneConfig");async function mde(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Kc,!H_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=H_,!q_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=q_,process.env.OPERATIONSAPI_NETWORK_PORT=Ce?.operationsApi?.network?.port??cde,process.env.CLUSTERING_NODENAME=F_,process.env.CLUSTERING_LOGLEVEL=Ce?.clustering?.logLevel??ude,await ode()}a(mde,"installHDB");async function pde(){console.info("Cloning system database");let e=pa("system");await Cm(e);let t=en(e,"system.mdb"),r=wm(t,{overwrite:!0}),s=await ok({operation:tr.GET_BACKUP,database:"system",tables:TN},r);if(await Ni.utimes(t,Date.now(),new Date(s.date)),at=await x_({operation:tr.DESCRIBE_ALL}),at=await JSON.parse(at.body),es=Ce?.databaseConfig?.excludeDatabases,es=es?es.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(es[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Ce?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(es[n]){at[n]="excluded";continue}if(SN.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])Zs[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:tr.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:tr.GET_BACKUP,database:n});let u=pa(n);await Cm(u);let _=en(u,n+".mdb"),l=wm(_,{overwrite:!0}),d=await ok(c,l);await Ni.utimes(_,Date.now(),new Date(d.date))}}a(pde,"cloneTables");async function Sde(){console.info("Cloning system database using fetch");let e=await ym({operation:tr.GET_BACKUP,database:"system",tables:TN},!0),t=pa("system");await Cm(t);let r=en(t,"system.mdb");if(await sk(e.body,wm(r,{overwrite:!0})),await Ni.utimes(r,Date.now(),new Date(e.headers.get("date"))),at=await ym({operation:tr.DESCRIBE_ALL}),at=await at.json(),es=Ce?.databaseConfig?.excludeDatabases,es=es?es.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},ot.schemas)for(let s in ot.schemas)Object.keys(ot.schemas[s]).includes("tables")&&(es[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Zs=Ce?.databaseConfig?.excludeTables,Zs=Zs?Zs.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in at){if(es[s]){at[s]="excluded";continue}if(SN.isEmpty(at[s]))continue;let n=[],i=!1;for(let d in at[s])Zs[s+d]?(i=!0,at[s][d]="excluded"):n.push(d);if(n.length===0)return;let o;i?(console.info(`Cloning database: ${s} tables: ${n}`),o=await ym({operation:tr.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await ym({operation:tr.GET_BACKUP,database:s},!0));let c=pa(s);await Cm(c);let u=new Date(o.headers.get("date")),_=en(c,`${u.getTime()}-${s}.mdb`);await sk(o.body,wm(_,{overwrite:!0}));let l=en(c,s+".mdb");await Ni.rename(_,l),await Ni.utimes(l,Date.now(),u)}}a(Sde,"cloneTablesFetch");async function ym(e,t=!1){let r=Ce?.httpsRejectUnauthorized??!1,s=new Im.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(H_+":"+q_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(G_,{method:"POST",headers:i,body:JSON.stringify(e),agent:s,compress:!0});if(o.ok)return o;throw console.error(`HTTP Error Response: ${o.status} ${o.statusText}`),new Error(await o.text())}a(ym,"leaderHttpReqFetch");function pa(e){return Ce?.databases&&Ce?.databases[e]?.path||Ce?.storage&&Ce?.storage?.path||en(Kc,"database")}a(pa,"getDbFileDir");async function Tde(){let{deployComponent:e}=rh(),t=await x_({operation:tr.GET_COMPONENTS});t=await JSON.parse(t.body);let r=[];if(t.entries.length){for(let n of t.entries){if(!n.entries)continue;let i=!1;if(Ce?.componentConfig?.exclude){for(let o of Ce.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Ce?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await x_({operation:tr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(Tde,"cloneComponents");async function gde(){if(!pN)return;let e=await tde.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await ide():(console.info(await rde({operation:tr.RESTART})),await uk.async_set_timeout(lde)),console.info("Clustering cloned tables");let t=Ce?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ce?.clusteringConfig?.publishToLeaderNode!==!1;await sde.setSchemaDataToGlobalAsync();let s=Il(),n=await x_({operation:tr.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Ni.stat(en(pa("system"),"system.mdb"));for(let u of TN)i.push({schema:ade,table:u,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let u in at){if(at[u]==="excluded")continue;let _=await Ni.stat(en(pa(u),u+".mdb"));_.mtime.setSeconds(_.mtime.getSeconds()-10);for(let l in at[u])at[u][l]!=="excluded"&&i.push({schema:u,table:l,subscribe:t,publish:r,start_time:_.mtime.toISOString()})}await nk.createTableStreams(i),ck.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",i);let c;if(fde==="true"&&n.connections.length>0){let u=OE(),_=[{node_name:ot?.clustering?.nodeName,subscriptions:i}],l=!1;F_=ak.get(Lm.CONFIG_PARAMS.CLUSTERING_NODENAME);for(let d of n.connections){if(d.node_name===F_)continue;let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(es[E.schema]||Zs[E.schema+E.table])continue;l=!0;let h=await Ni.stat(en(pa(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}_.push(f)}l&&(c=await u({operation:tr.CONFIGURE_CLUSTER,connections:_}),console.info(JSON.stringify(c)))}c||await s({operation:tr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:i},!0),await nk.closeConnection()}a(gde,"clusterTables");async function x_(e){let t=new Im.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(H_+":"+q_).toString("base64"),"Content-Type":"application/json"},n=new URL(G_),i={protocol:n.protocol,host:n.hostname,method:"POST",headers:s};return n.protocol==="https:"&&(i.agent=t),n.port&&(i.port=n.port),await uk.httpRequest(i,e)}a(x_,"leaderHttpReq");async function ok(e,t){let r=new Im.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(H_+":"+q_).toString("base64"),"Content-Type":"application/json"},i=new URL(G_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,rk=Im),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=rk.request(o,l=>{l.statusCode!==200&&u("Request to leader node failed with code: "+l.statusCode),l.pipe(t),l.on("end",()=>{t.close(),c(l.headers)})});_.on("error",l=>{u(l)}),_.write(JSON.stringify(e)),_.end()})}a(ok,"leaderHttpStream");Ede().then().catch(e=>{console.log(e)})});var Wc=U(),Rde=So(),gN=R(),Dm=require("fs"),_k=require("path"),FNe=require("os"),{PACKAGE_ROOT:Ade}=R(),Ode=ib(),xNe=(Zh(),te(DO)),{SERVICE_ACTIONS_ENUM:tn}=gN;Nde();function Nde(){let e=Ode();if(e)if(e.error){console.error(e.error),Wc.error(e.error);return}else e.warn&&(console.warn(e.warn),Wc.warn(e.warn));let t;Dm.readdir(_k.join(Ade,"bin"),r=>{if(r)return Wc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case tn.DEV:process.env.DEV_MODE=!0;case tn.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Dm.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Dm.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Dm.existsSync(_k.join(n,gN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),ma().main();break;case tn.START:s=ma().launch();break;case tn.INSTALL:Vx()().then(()=>ma().main(!0)).catch(f=>{console.error(f)});break;case tn.REGISTER:Wx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case tn.STOP:Jx()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case tn.RESTART:jo().restart({}).then().catch(f=>{Wc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case tn.VERSION:Rde.printVersion();break;case tn.UPGRADE:Wc.setLogLevel(gN.LOG_LEVELS.INFO),aN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{Wc.error(`Got an error during upgrade ${f}`)});break;case tn.STATUS:tk()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?lk():ma().main();break;default:console.warn(`The "${t}" command is not understood.`);case tn.HELP:console.log(`
110
110
  Usage: harperdb [command]
111
111
 
112
112
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -121,4 +121,4 @@ Commands:
121
121
  install - Install harperdb
122
122
  register - Register harperdb
123
123
  upgrade - Upgrade harperdb
124
- status - Print the status of HarperDB and clustering`)}})}a(bde,"harperDBService");
124
+ status - Print the status of HarperDB and clustering`)}})}a(Nde,"harperDBService");