harperdb 4.2.0-beta.9 → 4.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/harperdb.js CHANGED
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var ik=Object.create;var Vc=Object.defineProperty;var ok=Object.getOwnPropertyDescriptor;var ak=Object.getOwnPropertyNames;var ck=Object.getPrototypeOf,uk=Object.prototype.hasOwnProperty;var a=(e,t)=>Vc(e,"name",{value:t,configurable:!0});var ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var p=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(e,t)=>{for(var r in t)Vc(e,r,{get:t[r],enumerable:!0})},pN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ak(t))!uk.call(e,n)&&n!==r&&Vc(e,n,{get:()=>t[n],enumerable:!(s=ok(t,n))||s.enumerable});return e};var P=(e,t,r)=>(r=e!=null?ik(ck(e)):{},pN(t||!e||!e.__esModule?Vc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>pN(Vc({},"__esModule",{value:!0}),e);var gN=p((Ede,TN)=>{var lk=require("fast-glob"),{statSync:ym,existsSync:Im,readFileSync:_k,writeFileSync:dk}=require("fs"),{spawnSync:fk,spawn:Ek,execFileSync:fde}=require("child_process"),{isMainThread:hk}=require("worker_threads"),{join:yi,relative:SN}=require("path"),{PACKAGE_ROOT:Rs}=A(),{tmpdir:mk,platform:pk}=require("os");require("source-map-support").install();var Sk=["resources","server","dataLayer","components"],Yc="ts-build",wm,Tk=__filename.endsWith("tsBuild.js");if(Tk){if(hk){let r;try{ym(yi(Rs,Yc)),r=!0}catch{}if(r)for(let s of lk.sync(Sk.map(n=>n+"/**/*.ts"),{cwd:Rs})){let n=0,i=0;try{n=ym(yi(Rs,s)).mtimeMs-5e3,i=ym(yi(Rs,Yc,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."),wm=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),wm=!0;if(wm){let s=yi(Rs,"node_modules/.bin/tsc");pk()==="win32"&&(s+=".cmd");let n=fk(s,{cwd:Rs});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=yi(mk(),"harperdb-tsc.pid"),o;if(Im(i))try{process.kill(+_k(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=Ek(s,["--watch"],{cwd:Rs,detached:!0,stdio:"ignore"});dk(i,c.pid.toString()),c.unref()}}}}let e=TN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Rs)&&!s[0].includes("node_modules")){let i=SN(Rs,s[0]),o;i.startsWith(Yc)?o=yi(Rs,SN(Yc,i)):o=yi(Rs,Yc,i);let c=yi(o,r),u=c+".js";if(Im(u))return u;if(c.includes(".")&&Im(c))return c}return t(r,s,n)}}});var A=p((pde,UN)=>{"use strict";var Xr=require("path"),gk=require("fs"),{relative:hde,join:mde}=Xr,{existsSync:Rk}=gk;function Ak(){let e=__dirname;for(;!Rk(Xr.join(e,"package.json"));){let t=Xr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Ak,"getHDBPackageRoot");var Ii=Ak(),RN="js",G_=RN,Ok="harperdb-config.yaml",Nk="defaultConfig.yaml",bk="hdb",AN=`harperdb.${G_}`,ON=`customFunctionsServer.${G_}`,yk=`restartHdb.${G_}`,Lm="HarperDB",q_="Custom Functions",F_="Clustering Hub",x_="Clustering Leaf",Ik="Clustering Ingest Service",wk="Clustering Reply Service",Ck="foreground.pid",Lk="hdb.pid",Dk="data",Pk={HDB:Lm,CLUSTERING_HUB:F_,CLUSTERING_LEAF:x_,CLUSTERING_INGEST_SERVICE:Ik,CLUSTERING_REPLY_SERVICE:wk,CUSTOM_FUNCTIONS:q_,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"},Mk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},Uk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},vk={harperdb:Lm,"clustering hub":F_,"clustering leaf":x_,"custom functions":q_,custom_functions:q_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Bk={CLUSTERING_HUB_PROC_DESCRIPTOR:F_,CLUSTERING_LEAF_PROC_DESCRIPTOR:x_},Cm={HDB:Xr.join(Ii,"server/harperdb"),CUSTOM_FUNCTIONS:Xr.join(Ii,"server/customFunctions"),CLUSTERING_HUB:Xr.join(Ii,"server/nats"),CLUSTERING_LEAF:Xr.join(Ii,"server/nats")},Hk={HDB:Xr.join(Cm.HDB,AN),CUSTOM_FUNCTIONS:Xr.join(Cm.CUSTOM_FUNCTIONS,ON)},qk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Xr.join(Ii,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Xr.join(Ii,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Xr.join(Ii,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Gk={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},NN="support@harperdb.io",Fk="customer-success@harperdb.io",bN=1,xk=4141,yN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",kk="https://www.harperdb.io/product",$k=`For support, please submit a request at ${yN} or contact ${NN}`,IN=`For license support, please contact ${Fk}`,Vk="None of the specified records were found.",Yk="hash attribute not found",Kk=`Your current license only supports ${bN} role. ${IN}`,Wk="Your current license only supports 3 connections to a node.",Qk="127.0.0.1",zk=1,Jk=/^\.$/,jk=/^\.\.$/,Xk="U+002E",Zk=/\//g,e$="U+002F",t$=/U\+002F/g,r$=/^U\+002E$/,s$=/^U\+002EU\+002E$/,n$="d",i$=999999,o$="*",a$="--max-old-space-size=",c$="system",u$="__hdb_hash",l$=".harperdb",_$=".hdb",d$="keys",f$="hdb_boot_properties.file",E$=".updateConfig.json",h$="SIGTSTP",m$=24,p$=6e4,S$=448,T$="blob",g$="trash",R$="database",A$="schema",O$="transactions",N$=".count",b$="id",y$="PROCESS_NAME",wN={SETTINGS_PATH_KEY:"settings_path"},CN=require("lodash"),I$={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"},w$={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},C$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},L$={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"},D$={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"},Lr="hdb_internal:",P$={CREATE_SCHEMA:Lr+"create_schema",CREATE_TABLE:Lr+"create_table",CREATE_ATTRIBUTE:Lr+"create_attribute",ADD_USER:Lr+"add_user",ALTER_USER:Lr+"alter_user",DROP_USER:Lr+"drop_user",HDB_NODES:Lr+"hdb_nodes",HDB_USERS:Lr+"hdb_users",HDB_WORKERS:Lr+"hdb_workers",CATCHUP:Lr+"catchup",SCHEMA_CATCHUP:Lr+"schema_catchup",WORKER_ROOM:Lr+"cluster_workers"},M$={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"},U$="060493.ks",v$=".license",B$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},z={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"},H$={CSV:".csv",JSON:".json"},q$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},G$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Kc={};Kc[z.INSERT]=z.INSERT;Kc[z.UPDATE]=z.UPDATE;Kc[z.UPSERT]=z.UPSERT;Kc[z.DELETE]=z.DELETE;var Ce=Object.create(null);Ce[z.DESCRIBE_ALL]=z.DESCRIBE_ALL;Ce[z.DESCRIBE_TABLE]=z.DESCRIBE_TABLE;Ce[z.DESCRIBE_SCHEMA]=z.DESCRIBE_SCHEMA;Ce[z.READ_LOG]=z.READ_LOG;Ce[z.ADD_NODE]=z.ADD_NODE;Ce[z.LIST_USERS]=z.LIST_USERS;Ce[z.LIST_ROLES]=z.LIST_ROLES;Ce[z.USER_INFO]=z.USER_INFO;Ce[z.SQL]=z.SQL;Ce[z.GET_JOB]=z.GET_JOB;Ce[z.SEARCH_JOBS_BY_START_DATE]=z.SEARCH_JOBS_BY_START_DATE;Ce[z.DELETE_FILES_BEFORE]=z.DELETE_FILES_BEFORE;Ce[z.EXPORT_LOCAL]=z.EXPORT_LOCAL;Ce[z.EXPORT_TO_S3]=z.EXPORT_TO_S3;Ce[z.CLUSTER_STATUS]=z.CLUSTER_STATUS;Ce[z.REMOVE_NODE]=z.REMOVE_NODE;Ce[z.RESTART]=z.RESTART;Ce[z.CUSTOM_FUNCTIONS_STATUS]=z.CUSTOM_FUNCTIONS_STATUS;Ce[z.GET_CUSTOM_FUNCTIONS]=z.GET_CUSTOM_FUNCTIONS;Ce[z.GET_CUSTOM_FUNCTION]=z.GET_CUSTOM_FUNCTION;Ce[z.SET_CUSTOM_FUNCTION]=z.SET_CUSTOM_FUNCTION;Ce[z.DROP_CUSTOM_FUNCTION]=z.DROP_CUSTOM_FUNCTION;Ce[z.ADD_CUSTOM_FUNCTION_PROJECT]=z.ADD_CUSTOM_FUNCTION_PROJECT;Ce[z.DROP_CUSTOM_FUNCTION_PROJECT]=z.DROP_CUSTOM_FUNCTION_PROJECT;Ce[z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=z.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ce[z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=z.DEPLOY_CUSTOM_FUNCTION_PROJECT;var F$={DEV:"dev",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},x$={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},LN={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"},k$=CN.invert(LN),$$={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"},DN={settings_path:wN.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];DN[t.toLowerCase()]=t}var V$={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Y$={csv_file_load:"csv_file_load",csv_data_load:z.CSV_DATA_LOAD,csv_url_load:z.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"},K$={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"},W$={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Q$={VERSION_DEFAULT:"2.2.0"},z$={DEVELOPMENT:8192,DEFAULT:512},J$={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"},j$={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"},X$={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},PN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Z$=Symbol("metadata"),eV="__clustering__",tV=Object.values(PN),rV=15984864e5,MN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},sV=CN.invert(MN),nV={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"},iV=111,oV=`\r
3
- `,aV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},cV=["*","%"],uV="unauthorized_access",lV="func_val",_V={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},dV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},fV={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"},EV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},hV={HTTP:"http"},mV={STOPPED:"stopped",ONLINE:"online"},pV="3.x.x",SV={SUCCESS:"success",FAILURE:"failure"},TV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};UN.exports={LOCAL_HARPERDB_OPERATIONS:Ce,HDB_SUPPORT_ADDRESS:NN,HDB_SUPPORT_URL:yN,HDB_PRICING_URL:kk,SUPPORT_HELP_MSG:$k,LICENSE_HELP_MSG:IN,HDB_PROC_NAME:AN,HDB_PROC_DESCRIPTOR:Lm,CLUSTERING_LEAF_PROC_DESCRIPTOR:x_,CLUSTERING_HUB_PROC_DESCRIPTOR:F_,SYSTEM_SCHEMA_NAME:c$,HASH_FOLDER_NAME:u$,HDB_HOME_DIR_NAME:l$,UPDATE_FILE_NAME:E$,LICENSE_KEY_DIR_NAME:d$,BOOT_PROPS_FILE_NAME:f$,JOB_TYPE_ENUM:Y$,JOB_STATUS_ENUM:B$,SYSTEM_TABLE_NAMES:L$,SYSTEM_TABLE_HASH_ATTRIBUTES:D$,OPERATIONS_ENUM:z,VALID_S3_FILE_TYPES:H$,S3_BUCKET_AUTH_KEYS:q$,VALID_SQL_OPS_ENUM:G$,GEO_CONVERSION_ENUM:x$,HDB_SETTINGS_NAMES:LN,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:k$,SERVICE_ACTIONS_ENUM:F$,CLUSTER_MESSAGE_TYPE_ENUM:K$,CLUSTER_CONNECTION_DIRECTION_ENUM:W$,CLUSTER_EVENTS_DEFS_ENUM:J$,PERIOD_REGEX:Jk,DOUBLE_PERIOD_REGEX:jk,UNICODE_PERIOD:Xk,FORWARD_SLASH_REGEX:Zk,UNICODE_FORWARD_SLASH:e$,ESCAPED_FORWARD_SLASH_REGEX:t$,ESCAPED_PERIOD_REGEX:r$,ESCAPED_DOUBLE_PERIOD_REGEX:s$,REG_KEY_FILE_NAME:U$,RESTART_TIMEOUT_MS:p$,HDB_FILE_PERMISSIONS:S$,DATABASES_DIR_NAME:R$,LEGACY_DATABASES_DIR_NAME:A$,TRANSACTIONS_DIR_NAME:O$,LIMIT_COUNT_NAME:N$,ID_ATTRIBUTE_STRING:b$,INSERT_MODULE_ENUM:w$,UPGRADE_JSON_FIELD_NAMES_ENUM:C$,RESTART_CODE:h$,RESTART_CODE_NUM:m$,CLUSTER_OPERATIONS:Kc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:M$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Lr,INTERNAL_SC_CHANNELS:P$,CLUSTERING_MESSAGE_TYPES:nV,HDB_FILE_SUFFIX:_$,BLOB_FOLDER_NAME:T$,HDB_TRASH_DIR:g$,ORIGINATOR_SET_VALUE:iV,LICENSE_VALUES:Q$,RAM_ALLOCATION_ENUM:z$,TIME_STAMP_NAMES_ENUM:PN,TIME_STAMP_NAMES:tV,PERMS_UPDATE_RELEASE_TIMESTAMP:rV,SEARCH_NOT_FOUND_MESSAGE:Vk,SEARCH_ATTRIBUTE_NOT_FOUND:Yk,LICENSE_ROLE_DENIED_RESPONSE:Kk,LICENSE_MAX_CONNS_REACHED:Wk,BASIC_LICENSE_MAX_NON_CU_ROLES:bN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:xk,VALUE_SEARCH_COMPARATORS:MN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:sV,LICENSE_FILE_NAME:v$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:j$,NEW_LINE:oV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:zk,MOMENT_DAYS_TAG:n$,API_TURNOVER_SEC:i$,LOOPBACK:Qk,CODE_EXTENSION:G_,WILDCARD_SEARCH_VALUE:o$,NODE_ERROR_CODES:X$,JAVASCRIPT_EXTENSION:RN,PERMS_CRUD_ENUM:aV,UNAUTHORIZED_PERMISSION_NAME:uV,SEARCH_WILDCARDS:cV,FUNC_VAL:lV,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:_V,JWT_ENUM:dV,CLUSTERING_FLAG:eV,ITC_EVENT_TYPES:fV,CUSTOM_FUNCTION_PROC_NAME:ON,CUSTOM_FUNCTION_PROC_DESCRIPTOR:q_,SERVICES:EV,THREAD_TYPES:hV,MEM_SETTING_KEY:a$,HDB_RESTART_SCRIPT:yk,PROCESS_DESCRIPTORS:Pk,SERVICE_SERVERS:Hk,SERVICE_SERVERS_CWD:Cm,PROCESS_DESCRIPTORS_VALIDATE:vk,LAUNCH_SERVICE_SCRIPTS:qk,LOG_LEVELS:Uk,PROCESS_NAME_ENV_PROP:y$,LOG_NAMES:Mk,PM2_PROCESS_STATUSES:mV,CONFIG_PARAM_MAP:DN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:Ok,HDB_DEFAULT_CONFIG_FILE:Nk,ROLE_TYPES_ENUM:Gk,BOOT_PROP_PARAMS:wN,INSTALL_PROMPTS:I$,HDB_ROOT_DIR_NAME:bk,CLUSTERING_PROCESSES:Bk,FOREGROUND_PID_FILE:Ck,PACKAGE_ROOT:Ii,PRE_4_0_0_VERSION:pV,DATABASES_PARAM_CONFIG:V$,METADATA_PROPERTY:Z$,AUTH_AUDIT_STATUS:SV,AUTH_AUDIT_TYPES:TV,HDB_PID_FILE:Lk,DEFAULT_DATABASE_NAME:Dk,LEGACY_CONFIG_PARAMS:$$};gN()});var fo=p((Tde,HN)=>{"use strict";var vN=require("minimist");HN.exports=gV;function gV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BN(process.env),s=BN(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(gV,"assignCMDENVVariables");function BN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(BN,"objKeysToLowerCase")});var M=p((Rde,Hm)=>{"use strict";var Eo=require("fs-extra"),{workerData:RV,threadId:AV}=require("worker_threads"),Hn=require("path"),FN=require("yaml"),xN=require("properties-reader"),Tt=A(),qN=fo(),OV=require("os"),{PACKAGE_ROOT:Pm}=A(),{_assignPackageExport:NV}=require("../index"),Qc={};for(let e in console)Qc[e]||(Qc[e]=console[e]);var tr={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kN={STDOUT:"stdOut",STDERR:"stdErr"},bV=Hn.join(Pm,"logs"),yV=Hn.join(Pm,"config/yaml/",Tt.HDB_DEFAULT_CONFIG_FILE),IV=1e4,Bn,Xs,er,k_,$_,zc,Sa,Wc;Wc===void 0&&$N();Hm.exports={notify:KN,fatal:WN,error:Jc,warn:Bm,info:V_,debug:vm,trace:Um,setLogLevel:UV,log_level:er,loggerWithTag:wV,suppressLogging:CV,initLogSettings:$N,setupConsoleLogging:VN,logCustomLevel:PV,closeLogFile:Mm,getLogFilePath:()=>zc,OUTPUTS:kN,AuthAuditLog:HV};NV("logger",Hm.exports);function $N(e=!1){try{if(Wc===void 0||e){Mm();let t=MV(),r=qN(["ROOTPATH"]);try{Wc=xN(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Eo.pathExistsSync(Hn.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE)))throw s}({level:er,config_log_path:$_,to_file:Bn,to_stream:Xs}=vV(r.ROOTPATH?Hn.join(r.ROOTPATH,Tt.HDB_CONFIG_FILE):Wc.get("settings_path"))),k_=Tt.LOG_NAMES.HDB,zc=Hn.join($_,k_)}}catch(t){if(Wc=void 0,t.code===Tt.NODE_ERROR_CODES.ENOENT){let r=qN(Object.keys(Tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=Tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===Tt.CONFIG_PARAMS.LOGGING_LEVEL){er=u;continue}if(c===Tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Xs=u;continue}c===Tt.CONFIG_PARAMS.LOGGING_FILE&&(Bn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=BV();Bn=Bn===void 0?n:Bn,Bn=GN(Bn),Xs=Xs===void 0?i:Xs,Xs=GN(Xs),er=er===void 0?s:er,$_=bV,k_=Tt.LOG_NAMES.INSTALL,zc=Hn.join($_,k_);return}throw Jc("Error initializing log settings"),Jc(t),t}process.env.DEV_MODE&&(Xs=!0),VN()}a($N,"initLogSettings");var Dm=!0;function VN(){pa("error",Jc),pa("warn",Bm),pa("log",V_),pa("info",V_),pa("debug",vm),pa("trace",Um)}a(VN,"setupConsoleLogging");function pa(e,t){console[e]=function(...r){if(Dm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qc[e](...r)}}a(pa,"logConsole");function wV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(KN),fatal:r(WN),error:r(Jc),warn:r(Bm),info:r(V_),debug:r(vm),trace:r(Um)};function r(s){return function(...n){return s(t,...n)}}}a(wV,"loggerWithTag");function CV(e){try{Dm=!1,e()}finally{Dm=!0}}a(CV,"suppressLogging");var LV=RV?.name?.replace(/ /g,"-")||"main";function qn(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||LV+"/"+AV);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
4
- `}a(qn,"createLogRecord");function jc(e){Bn&&YN(e),Xs&&process.stdout.write(e)}a(jc,"logStdOut");function Y_(e){Bn&&YN(e),Xs&&process.stderr.write(e)}a(Y_,"logStdErr");function YN(e){DV(),Sa?Eo.appendFileSync(Sa,e):Qc.log(e)}a(YN,"logToFile");function Mm(){try{Eo.closeSync(Sa)}catch{}Sa=null}a(Mm,"closeLogFile");function DV(){if(!Sa){try{if(!zc)debugger;Sa=Eo.openSync(zc,"a")}catch(e){Qc.error(e)}setTimeout(()=>{Mm()},IV).unref()}}a(DV,"openLogFile");function V_(...e){tr[er]<=tr.info&&jc(qn("info",e))}a(V_,"info");function Um(...e){tr[er]<=tr.trace&&jc(qn("trace",e))}a(Um,"trace");function Jc(...e){tr[er]<=tr.error&&Y_(qn("error",e))}a(Jc,"error");function vm(...e){tr[er]<=tr.debug&&jc(qn("debug",e))}a(vm,"debug");function KN(...e){tr[er]<=tr.notify&&jc(qn("notify",e))}a(KN,"notify");function WN(...e){tr[er]<=tr.fatal&&Y_(qn("fatal",e))}a(WN,"fatal");function Bm(...e){tr[er]<=tr.warn&&Y_(qn("warn",e))}a(Bm,"warn");function PV(e,t,...r){t===kN.STDERR?Y_(qn(e,r)):jc(qn(e,r))}a(PV,"logCustomLevel");function MV(){let e;try{e=OV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Hn.join(e,Tt.HDB_HOME_DIR_NAME,Tt.BOOT_PROPS_FILE_NAME);return Eo.existsSync(t)||(t=Hn.join(Pm,"utility/hdb_boot_properties.file")),t}a(MV,"getPropsFilePath");function UV(e){er=e}a(UV,"setLogLevel");function GN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(GN,"autoCastBoolean");function vV(e){try{if(e.includes("config/settings.js")){let o=xN(e);return{level:o.get(Tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Hn.dirname(o.get(Tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(Tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=FN.parseDocument(Eo.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===Tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(vV,"getLogConfig");function BV(){try{let e=FN.parseDocument(Eo.readFileSync(yV,"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(BV,"getDefaultConfig");function HV(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(HV,"AuthAuditLog")});var ho=p((Ode,qV)=>{qV.exports={name:"harperdb",version:"4.2.0-beta.9",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.412.0","@aws-sdk/lib-storage":"3.417.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.10.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-alpha.1",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",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.1",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.8","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},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 mo=p((Nde,QN)=>{"use strict";QN.exports={version:GV,printVersion:FV};var K_=ho();function GV(){if(K_)return K_.version}a(GV,"version");function FV(){K_&&console.log(`HarperDB Version ${K_.version}`)}a(FV,"printVersion")});var jN=p((yde,JN)=>{"use strict";var zN=require("semver/functions/major"),xV=ho(),qm=process.versions&&process.versions.node?process.versions.node:void 0;JN.exports=kV;function kV(){let e=xV.engines["minimum-node"];if(qm&&zN(qm)<zN(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${qm}. Please install a version of Node.js that is withing the defined range.`}}a(kV,"checkNodeVersion")});var po={};Fe(po,{server:()=>gt});var XN,gt,Dr=ge(()=>{XN=require("../index"),gt={};(0,XN._assignPackageExport)("server",gt)});var Gm=p((wde,ZN)=>{"use strict";var $V=require("util"),VV=require("path"),YV=require("child_process"),KV=$V.promisify(YV.execFile),WV=1e3*1e3*10;ZN.exports={findPs:QV};async function QV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await KV("ps",["wwxo",`pid,${r}`],{maxBuffer:WV});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:VV.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(QV,"findPs")});var We=p((Lde,tb)=>{"use strict";var zV="__dbis__",JV="__txns__",jV="__environment_name__",XV="__dbi_defintion__",ZV={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"},eY=["__createdtime__","__updatedtime__"],tY="\uFFFF",eb={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},rY=Object.values(eb);tb.exports={AUDIT_STORE_NAME:JV,INTERNAL_DBIS_NAME:zV,DBI_DEFINITION_NAME:XV,SEARCH_TYPES:ZV,TIMESTAMP_NAMES:eY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:jV,TRANSACTIONS_DBI_NAMES_ENUM:eb,TRANSACTIONS_DBIS:rY,OVERFLOW_MARKER:tY}});var Pr=p((Dde,lb)=>{"use strict";var rb=A(),sb=We(),nb={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},ib=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ob={500:ib("There was an error processing your request."),400:"Invalid request"},sY=ob[nb.INTERNAL_SERVER_ERROR],nY={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.`},iY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},oY={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"},aY={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 ${sb.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${sb.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"},cY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rb.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 ${rb.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"},ab={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"},uY={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."},lY={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`},_Y={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"},dY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},fY={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`},cb={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.`},ub={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}`},EY={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."},hY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},mY={...ab,...oY,...nY,...uY,...lY,..._Y,...dY,...fY,...cY,...cb,...ub,...EY,...hY,...iY};lb.exports={CHECK_LOGS_WRAPPER:ib,HDB_ERROR_MSGS:mY,DEFAULT_ERROR_MSGS:ob,DEFAULT_ERROR_RESP:sY,HTTP_STATUS_CODES:nb,LMDB_ERRORS_ENUM:aY,AUTHENTICATION_ERROR_MSGS:ab,VALIDATION_ERROR_MSGS:cb,ITC_ERRORS:ub}});var Z=p((Mde,fb)=>{"use strict";var Ta=Pr(),pY=M(),SY=A(),W_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,_b),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&&pY[n](i)}},Fm=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}},xm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _b(e,t,r,s=SY.LOG_LEVELS.ERROR,n=null,i=!1){if(db(e))return e;let o=new W_(e,t,r,s,n);return i&&delete o.stack,o}a(_b,"handleHDBError");function db(e){return e.__proto__.constructor.name===W_.name}a(db,"isHDBError");fb.exports={isHDBError:db,handleHDBError:_b,ClientError:Fm,ServerError:xm,hdb_errors:Ta}});var G=p((Bde,Ib)=>{"use strict";var wi=require("path"),Sb=require("fs-extra"),rr=M(),Eb=require("fs-extra"),Q_=require("os"),TY=require("net"),gY=require("recursive-iterator"),Qe=A(),RY=Gm(),hb=require("papaparse"),z_=require("moment"),{inspect:AY}=require("util"),mb=require("is-number"),vde=require("lodash"),OY=require("minimist"),NY=require("https"),bY=require("http"),{hdb_errors:J_}=Z(),yY=/^((\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)))$/,Tb=require("util").promisify(setTimeout),IY=100,wY=5,CY="",LY=4,pb={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Ib.exports={isEmpty:Mr,isEmptyOrZeroLength:Zs,arrayHasEmptyValues:MY,arrayHasEmptyOrZeroLengthValues:UY,buildFolderPath:vY,isBoolean:gb,errorizeMessage:DY,stripFileExtension:HY,autoCast:qY,autoCastJSON:Rb,autoCastJSONDeep:$m,removeDir:GY,compareVersions:FY,isCompatibleDataVersion:xY,escapeRawValue:kY,unescapeValue:$Y,stringifyProps:VY,timeoutPromise:KY,isClusterOperation:QY,getClusterUser:JY,checkGlobalSchemaTable:zY,getHomeDir:Ob,getPropsFilePath:YY,promisifyPapaParse:jY,removeBOM:Nb,createEventPromise:XY,checkProcessRunning:ZY,checkSchemaTableExist:e1,checkSchemaExists:bb,checkTableExists:yb,getStartOfTomorrowInSeconds:t1,getLimitKey:r1,isObject:BY,isNotEmptyAndHasValue:PY,autoCasterIsNumberCheck:Ab,backtickASTSchemaItems:s1,isPortTaken:WY,createForkArgs:n1,autoCastBoolean:i1,async_set_timeout:Tb,getTableHashAttribute:o1,doesSchemaExist:a1,doesTableExist:c1,stringifyObj:u1,ms_to_time:l1,changeExtension:_1,getEnvCliRootPath:Vm,noBootFile:d1,httpRequest:f1,transformReq:E1,convertToMS:h1,PACKAGE_ROOT:Qe.PACKAGE_ROOT};function DY(e){return e instanceof Error?e:new Error(e)}a(DY,"errorizeMessage");function Mr(e){return e==null}a(Mr,"isEmpty");function PY(e){return!Mr(e)&&(e||e===0||e===""||gb(e))}a(PY,"isNotEmptyAndHasValue");function Zs(e){return Mr(e)||e.length===0||e.size===0}a(Zs,"isEmptyOrZeroLength");function MY(e){if(Mr(e))return!0;for(let t=0;t<e.length;t++)if(Mr(e[t]))return!0;return!1}a(MY,"arrayHasEmptyValues");function UY(e){if(Zs(e))return!0;for(let t=0;t<e.length;t++)if(Zs(e[t]))return!0;return!1}a(UY,"arrayHasEmptyOrZeroLengthValues");function vY(...e){try{return e.join(wi.sep)}catch{console.error(e)}}a(vY,"buildFolderPath");function gb(e){return Mr(e)?!1:e===!0||e===!1}a(gb,"isBoolean");function BY(e){return Mr(e)?!1:typeof e=="object"}a(BY,"isObject");function HY(e){return Zs(e)?CY:e.slice(0,-LY)}a(HY,"stripFileExtension");function qY(e){return Mr(e)||e===""||typeof e!="string"?e:pb[e]!==void 0?pb[e]:Ab(e)===!0?Number(e):yY.test(e)?new Date(e):e}a(qY,"autoCast");function Rb(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Rb,"autoCastJSON");function $m(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=$m(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=$m(r);s!==r&&(e[t]=s)}return e}else return Rb(e)}a($m,"autoCastJSONDeep");function Ab(e){if(e.startsWith("0.")&&mb(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mb(e))}a(Ab,"autoCasterIsNumberCheck");async function GY(e){if(Zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Eb.emptyDir(e),await Eb.remove(e)}catch(t){throw rr.error(`Error removing files in ${e} -- ${t}`),t}}a(GY,"removeDir");function FY(e,t){if(Zs(e)){rr.info("Invalid current version sent as parameter.");return}if(Zs(t)){rr.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 l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(FY,"compareVersions");function xY(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(xY,"isCompatibleDataVersion");function kY(e){if(Mr(e))return e;let t=String(e);return t==="."?Qe.UNICODE_PERIOD:t===".."?Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD:t.replace(Qe.FORWARD_SLASH_REGEX,Qe.UNICODE_FORWARD_SLASH)}a(kY,"escapeRawValue");function $Y(e){if(Mr(e))return e;let t=String(e);return t===Qe.UNICODE_PERIOD?".":t===Qe.UNICODE_PERIOD+Qe.UNICODE_PERIOD?"..":String(e).replace(Qe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a($Y,"unescapeValue");function VY(e,t){if(Mr(e))return rr.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+Q_.EOL}!Zs(s)&&s[0]===";"?r+=" "+s+n+Q_.EOL:Zs(s)||(r+=s+"="+n+Q_.EOL)}catch{rr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(VY,"stringifyProps");function Ob(){let e;try{e=Q_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Ob,"getHomeDir");function YY(){let e=wi.join(Ob(),Qe.HDB_HOME_DIR_NAME,Qe.BOOT_PROPS_FILE_NAME);return Sb.existsSync(e)||(e=wi.join(__dirname,"../","hdb_boot_properties.file")),e}a(YY,"getPropsFilePath");function KY(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(KY,"timeoutPromise");async function WY(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=TY.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(WY,"isPortTaken");function QY(e){try{return Qe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){rr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(QY,"isClusterOperation");function zY(e,t){let r=(fe(),te(Pe)).getDatabases();if(!r[e])return J_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return J_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(zY,"checkGlobalSchemaTable");function JY(e,t){if(Mr(t)){rr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Mr(e)||Zs(e)){rr.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){rr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){rr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(JY,"getClusterUser");function jY(){hb.parsePromise=function(e,t,r){return new Promise(function(s,n){hb.parse(e,{header:!0,transformHeader:Nb,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(jY,"promisifyPapaParse");function Nb(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Nb,"removeBOM");function XY(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;rr.info(`Got cluster status event response: ${AY(n)}`);try{i.cancel()}catch{rr.error("Error trying to cancel timeout.")}s(n)})})}a(XY,"createEventPromise");async function ZY(e){let t=!0,r=0;do await Tb(IY*r++),(await RY.findPs(e)).length>0&&(t=!1);while(t&&r<wY);if(t)throw new Error(`process ${e} was not started`)}a(ZY,"checkProcessRunning");function e1(e,t){let r=bb(e);if(r)return r;let s=yb(e,t);if(s)return s}a(e1,"checkSchemaTableExist");function bb(e){let{getDatabases:t}=(fe(),te(Pe));if(!t()[e])return J_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bb,"checkSchemaExists");function yb(e,t){let{getDatabases:r}=(fe(),te(Pe));if(!r()[e][t])return J_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yb,"checkTableExists");function t1(){let e=z_().utc().add(1,Qe.MOMENT_DAYS_TAG).startOf(Qe.MOMENT_DAYS_TAG).unix(),t=z_().utc().unix();return e-t}a(t1,"getStartOfTomorrowInSeconds");function r1(){return z_().utc().format("DD-MM-YYYY")}a(r1,"getLimitKey");function s1(e){try{let t=new gY(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){rr.error("Got an error back ticking items."),rr.error(t)}}a(s1,"backtickASTSchemaItems");function n1(e){return[e]}a(n1,"createForkArgs");function i1(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(i1,"autoCastBoolean");function o1(e,t){let{getDatabases:r}=(fe(),te(Pe)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(o1,"getTableHashAttribute");function a1(e){let{getDatabases:t}=(fe(),te(Pe));return t()[e]!==void 0}a(a1,"doesSchemaExist");function c1(e,t){let{getDatabases:r}=(fe(),te(Pe));return r()[e]?.[t]!==void 0}a(c1,"doesTableExist");function u1(e){try{return JSON.stringify(e)}catch{return e}}a(u1,"stringifyObj");function l1(e){let t=z_.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(l1,"ms_to_time");function _1(e,t){let r=wi.basename(e,wi.extname(e));return wi.join(wi.dirname(e),r+t)}a(_1,"changeExtension");function Vm(){if(process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=OY(process.argv);if(e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Qe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(Vm,"getEnvCliRootPath");var km;function d1(){if(km)return km;let e=Vm();Vm()&&Sb.pathExistsSync(wi.join(e,Qe.HDB_CONFIG_FILE))&&(km=!0)}a(d1,"noBootFile");function f1(e,t){let r;return e.protocol==="http:"?r=bY:r=NY,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(f1,"httpRequest");function E1(e){if(!e.schema&&!e.database){e.schema=Qe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(E1,"transformReq");function h1(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(h1,"convertToMS")});var Ym=p((qde,wb)=>{"use strict";var m1={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},p1="certificate.pem",S1="privateKey.pem",T1="ca.pem";wb.exports={CERTIFICATE_VALUES:m1,CERTIFICATE_PEM_NAME:p1,PRIVATEKEY_PEM_NAME:S1,CA_PEM_NAME:T1}});var Ye=p((Gde,Cb)=>{"use strict";var sr=require("validate.js");sr.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||sr.validators.type.checks[t](e)?null:` must be a '${t}' value`};sr.validators.type.checks={Object:function(e){return sr.isObject(e)&&!sr.isArray(e)},Array:sr.isArray,Integer:sr.isInteger,Number:sr.isNumber,String:sr.isString,Date:sr.isDate,Boolean:function(e){return typeof e=="boolean"}};sr.validators.hasValidFileExt=function(e,t){return sr.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};Cb.exports={validateObject:g1,validateObjectAsync:R1,validateBySchema:A1};function g1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=sr(e,t,{format:"flat"});return r?new Error(r):null}a(g1,"validateObject");async function R1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await sr.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(R1,"validateObjectAsync");function A1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(A1,"validateBySchema")});var Wm=p((kde,Ub)=>{"use strict";var Mb=require("fs-extra"),de=require("joi"),O1=require("os"),{boolean:Me,string:en,number:Pt,array:Km}=de.types(),{totalmem:Lb}=require("os"),ga=require("path"),N1=M(),X_=G(),xde=Ym(),Db=A(),b1=Ye(),Pb="log",y1="components",I1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",w1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",C1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",L1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",D1="rootPath config parameter is undefined",P1="clustering.enabled config parameter is undefined",So=Pt.min(0).required(),Z_=Km.items({host:en.required(),port:So}).empty(null),Gn;Ub.exports={configValidator:M1,routesValidator:G1,route_constraints:Z_};function M1(e){if(Gn=e.rootPath,X_.isEmpty(Gn))throw D1;let t=Me.required(),r=Pt.min(0).max(1e3).empty(null).default(q1),s=en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(j_),n=en.optional().empty(null),i=en.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=de.string().empty(null).default(j_),c=de.custom(v1).empty(null).default(j_),u=e.clustering?.enabled;if(X_.isEmpty(u))throw P1;let l;return u===!0?l=de.object({enabled:t,hubServer:de.object({cluster:de.object({name:de.required().empty(null),network:de.object({port:So,routes:Z_}).required()}).required(),leafNodes:de.object({network:de.object({port:So}).required()}).required(),network:de.object({port:So}).required()}).required(),leafServer:de.object({network:de.object({port:So,routes:Z_}).required(),streams:de.object({maxAge:Pt.min(120).allow(null).optional(),maxBytes:Pt.min(1).allow(null).optional(),maxMsgs:Pt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:de.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:Me.optional(),databaseLevel:Me.optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Me.required(),verify:Me.optional()}),user:en.optional().empty(null)}).required():l=de.object({enabled:t,tls:de.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:Me.required()})}).required(),de.object({authentication:de.object({authorizeLocal:Me,cacheTTL:Pt.required(),enableSessions:Me}),analytics:de.object({aggregatePeriod:Pt}),componentsRoot:s.optional(),clustering:l,localStudio:de.object({enabled:t}).required(),logging:de.object({auditAuthEvents:de.object({logFailed:Me,logSuccessful:Me}),file:Me.required(),level:de.valid("notify","fatal","error","warn","info","debug","trace"),rotation:de.object({enabled:Me.optional(),compress:Me.optional(),interval:en.custom(H1).optional().empty(null),maxSize:en.custom(B1).optional().empty(null),path:en.optional().empty(null).default(j_)}).required(),root:s,stdStreams:Me.required(),auditLog:Me.required()}).required(),operationsApi:de.object({network:de.object({cors:Me.optional(),corsAccessList:Km.optional(),headersTimeout:Pt.min(1).optional(),keepAliveTimeout:Pt.min(1).optional(),port:Pt.optional().empty(null),securePort:Pt.optional().empty(null),timeout:Pt.min(1).optional()}).optional(),tls:de.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:de.object({network:de.object({port:So,securePort:So}).required(),webSocket:Me.optional(),requireAuthentication:Me.optional()}),http:de.object({compressionThreshold:Pt.optional(),cors:Me.optional(),corsAccessList:Km.optional(),headersTimeout:Pt.min(1).optional(),port:Pt.min(0).optional().empty(null),securePort:Pt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:de.object({writeAsync:Me.required(),overlappingSync:Me.optional(),caching:Me.optional(),compression:Me.optional(),noReadAhead:Me.optional(),path:c,prefetchWrites:Me.optional()}).required(),ignoreScripts:Me.optional(),tls:de.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(M1,"configValidator");function U1(e){return Mb.existsSync(e)?null:`Specified path ${e} does not exist.`}a(U1,"doesPathExist");function v1(e,t){de.assert(e,en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=U1(e);if(r)return t.message(r)}a(v1,"validatePath");function B1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(I1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(C1):e}a(B1,"validateRotationMaxSize");function H1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(w1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(L1):e}a(H1,"validateRotationInterval");function q1(e,t){let r=t.state.path.join("."),s=O1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Lb();return i=Math.round(Math.min(i,Lb())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),N1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(q1,"setDefaultThreads");function j_(e,t){if(!X_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(X_.isEmpty(Gn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return ga.join(Gn,y1);case"logging.root":return ga.join(Gn,Pb);case"clustering.leafServer.streams.path":return ga.join(Gn,"clustering","leaf");case"storage.path":let s=ga.join(Gn,Db.LEGACY_DATABASES_DIR_NAME);return Mb.existsSync(s)?s:ga.join(Gn,Db.DATABASES_DIR_NAME);case"logging.rotation.path":return ga.join(Gn,Pb);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(j_,"setDefaultRoot");function G1(e){let t=de.object({routes:Z_});return b1.validateBySchema({routes:e},t)}a(G1,"routesValidator")});var rt=p((Yde,$b)=>{"use strict";var Ur=A(),bt=G(),Rt=M(),{configValidator:F1,routesValidator:vb}=Wm(),nr=require("fs-extra"),x1=require("yaml"),As=require("path"),k1=require("is-number"),Hb=require("properties-reader"),$1=require("lodash"),{handleHDBError:V1}=Z(),{HTTP_STATUS_CODES:Y1,HDB_ERROR_MSGS:ed}=Pr(),Vde=require("minimist"),{server:K1}=(Dr(),te(po)),{DATABASES_PARAM_CONFIG:Xc,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:Os}=Ur,W1="Unable to get config value because config is uninitialized",Q1="Config successfully initialized",z1="Error backing up config file",J1="Empty parameter sent to getConfigValue",qb=As.join(Ur.PACKAGE_ROOT,"config","yaml",Ur.HDB_DEFAULT_CONFIG_FILE),j1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Bb={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"},td,Mt,rd;$b.exports={createConfigFile:X1,getDefaultConfig:Z1,getConfigValue:Fb,initConfig:zm,flattenConfig:Ra,updateConfigValue:xb,updateConfigObject:tK,getConfiguration:nK,setConfiguration:iK,readConfigFile:jm,getClusteringRoutes:oK,initOldConfig:kb,getConfigFromFile:aK,getConfigFilePath:To,addConfig:cK,deleteConfigFromFile:uK,getConfigObj:lK};function X1(e){let t=Ci(qb);td=Ra(t.toJSON());let r;for(let o in e){let c=Os[o.toLowerCase()];if(c===Fn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),l=Qm(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){Rt.error(_)}}}r&&Gb(t,r),Jm(t);let s=t.toJSON();Mt=Ra(s);let n=t.getIn(["rootPath"]),i=As.join(n,Ur.HDB_CONFIG_FILE);nr.createFileSync(i),nr.writeFileSync(i,String(t)),Rt.trace(`Config file written to ${i}`)}a(X1,"createConfigFile");function Gb(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!bt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Xc.TABLES))for(let i in s[n][Xc.TABLES])for(let o in s[n][Xc.TABLES][i]){let c=s[n][Xc.TABLES][i][o],u=[Fn.DATABASES,n,Xc.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=[Fn.DATABASES,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){Rt.error("Error parsing schemas CLI/env config arguments",s)}}a(Gb,"setSchemasConfig");function Z1(e){if(td===void 0){let r=Ci(qb);td=Ra(r.toJSON())}let t=Os[e.toLowerCase()];if(t!==void 0)return td[t.toLowerCase()]}a(Z1,"getDefaultConfig");function Fb(e){if(e==null){Rt.error(J1);return}if(Mt===void 0){Rt.trace(W1);return}let t=Os[e.toLowerCase()];if(t!==void 0)return Mt[t.toLowerCase()]}a(Fb,"getConfigValue");function To(e=bt.getPropsFilePath()){let t=bt.getEnvCliRootPath();return t?As.join(t,Ur.HDB_CONFIG_FILE):Hb(e).get(Ur.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(To,"getConfigFilePath");function zm(e=!1){if(Mt===void 0||e){let t;if(!bt.noBootFile()){t=bt.getPropsFilePath();try{nr.accessSync(t,nr.constants.F_OK|nr.constants.R_OK)}catch(i){throw Rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=To(t),s;if(r.includes("config/settings.js"))try{kb(r);return}catch(i){if(i.code!==Ur.NODE_ERROR_CODES.ENOENT)throw i}try{s=Ci(r)}catch(i){if(i.code===Ur.NODE_ERROR_CODES.ENOENT){Rt.trace(`HarperDB config file not found at ${r}.
6
- This can occur during early stages of install where the config file has not yet been created`);return}else throw Rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eK(s,r),Jm(s);let n=s.toJSON();if(K1.config=n,Mt=Ra(n),Mt.logging_rotation_rotate)for(let i in Bb)Mt[i]&&Rt.error(`Config ${Bb[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);Rt.trace(Q1)}}a(zm,"initConfig");function eK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],As.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],As.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],As.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(Rt.trace("Updating config file with missing config params"),nr.writeFileSync(t,String(e)))}a(eK,"checkForUpdatedConfig");function Jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=F1(t);if(r.error)throw ed.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(Jm,"validateConfig");function tK(e,t){Mt===void 0&&(Mt={});let r=Os[e.toLowerCase()];if(r===void 0){Rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Mt[r.toLowerCase()]=t}a(tK,"updateConfigObject");function xb(e,t,r=void 0,s=!1,n=!1,i=!1){Mt===void 0&&zm();let o=Fb(Os.hdb_root),c=As.join(o,Ur.HDB_CONFIG_FILE),u=Ci(c),l;if(r===void 0&&e.toLowerCase()===Fn.DATABASES)l=t;else if(r===void 0){let f;if(i)f=e;else if(f=Os[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Qm(f,t);u.setIn([...E],h)}else for(let f in r){let E=Os[f.toLowerCase()];if(E===Fn.DATABASES){l=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),S=Ur.LEGACY_CONFIG_PARAMS[f.toUpperCase()];S&&S.startsWith("customFunctions")&&u.hasIn(S.split("_"))&&(E=S,h=S.split("_"));let m=Qm(E,r[f]);E==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{u.setIn([...h],m)}catch(R){Rt.error(R)}}}l&&Gb(u,l),Jm(u);let _=u.getIn(["rootPath"]),d=As.join(_,Ur.HDB_CONFIG_FILE);s===!0&&rK(c,_),nr.writeFileSync(d,String(u)),n&&(Mt=Ra(u.toJSON())),Rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(xb,"updateConfigValue");function rK(e,t){try{let r=As.join(t,"backup",`${Ur.HDB_CONFIG_FILE}.bak`);nr.copySync(e,r),Rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){Rt.error(z1),Rt.error(r)}}a(rK,"backupConfigFile");var sK=["databases"];function Ra(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)),rd=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])&&!sK.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;!Fn[u.toUpperCase()]&&Os[u]&&(n[Os[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(Ra,"flattenConfig");function Qm(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(k1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||bt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return bt.autoCast(t)}a(Qm,"castConfigValue");function nK(){let e=bt.getPropsFilePath(),t=To(e);return Ci(t).toJSON()}a(nK,"getConfiguration");async function iK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return xb(void 0,void 0,n,!0),j1}catch(i){throw typeof i=="string"||i instanceof String?V1(i,i,Y1.BAD_REQUEST,void 0,void 0,!0):i}}a(iK,"setConfiguration");function jm(){let e=bt.getPropsFilePath();try{nr.accessSync(e,nr.constants.F_OK|nr.constants.R_OK)}catch(s){if(!bt.noBootFile())throw Rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=To(e);return Ci(t).toJSON()}a(jm,"readConfigFile");function Ci(e){return x1.parseDocument(nr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(Ci,"parseYamlDoc");function oK(){let e=jm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=bt.isEmptyOrZeroLength(t)?[]:t;let r=vb(t);if(r)throw ed.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=bt.isEmptyOrZeroLength(s)?[]:s;let n=vb(s);if(n)throw ed.CONFIG_VALIDATION(n.message);if(!bt.isEmptyOrZeroLength(s)&&!bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw ed.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oK,"getClusteringRoutes");function kb(e){let t=Hb(e);Mt={};for(let r in Os){let s=t.get(r.toUpperCase());if(bt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Os[r].toLowerCase();n===Fn.LOGGING_ROOT?Mt[n]=As.dirname(s):Mt[n]=s}return Mt}a(kb,"initOldConfig");function aK(e){let t=jm();return $1.get(t,e.replaceAll("_","."))}a(aK,"getConfigFromFile");async function cK(e,t){let r=Ci(To());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await nr.writeFile(To(),String(r))}a(cK,"addConfig");function uK(e){let t=To(bt.getPropsFilePath()),r=Ci(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=As.join(s,Ur.HDB_CONFIG_FILE);nr.writeFileSync(n,String(r))}a(uK,"deleteConfigFromFile");function lK(){return rd||(zm(),rd)}a(lK,"getConfigObj")});var Q=p((Wde,Kb)=>{"use strict";var Xm=require("fs-extra"),Ns=require("path"),Vb=require("os"),_K=require("properties-reader"),Zc=M(),go=G(),se=A(),sd=rt(),dK="Error initializing environment manager",nd="BOOT_PROPS_FILE_PATH",Yb=!1,fK={[se.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},xn={};Kb.exports={BOOT_PROPS_FILE_PATH:nd,getHdbBasePath:EK,setHdbBasePath:hK,get:mK,initSync:SK,setProperty:pe,initTestEnvironment:TK};function EK(){return xn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(EK,"getHdbBasePath");function hK(e){xn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(hK,"setHdbBasePath");function mK(e){let t=sd.getConfigValue(e);return t===void 0?xn[e]:t}a(mK,"get");function pe(e,t){fK[e]&&(xn[e]=t),sd.updateConfigObject(e,t)}a(pe,"setProperty");function pK(){let e;try{e=go.getPropsFilePath(),Xm.accessSync(e,Xm.constants.F_OK|Xm.constants.R_OK),Yb=!0;let t=_K(e);return xn[se.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(se.HDB_SETTINGS_NAMES.INSTALL_USER),xn[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),xn[nd]=e,!0}catch{return Zc.trace(`Environment manager found no properties file at ${e}`),!1}}a(pK,"doesPropFileExist");function SK(e=!1){try{(Yb||pK()||go.noBootFile())&&(sd.initConfig(e),xn[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=sd.getConfigValue(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zc.error(dK),Zc.error(t),console.error(t),process.exit(1)}}a(SK,"initSync");function TK(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=Ns.join(__dirname,"../../","unitTests");xn[nd]=Ns.join(u,"hdb_boot_properties.file"),pe(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ns.join(u,"settings.test")),pe(se.HDB_SETTINGS_NAMES.INSTALL_USER,Vb.userInfo()?Vb.userInfo().username:void 0),pe(se.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),pe(se.HDB_SETTINGS_NAMES.CERT_KEY,Ns.join(u,"envDir","utility","keys","certificate.pem")),pe(se.CONFIG_PARAMS.TLS_PRIVATEKEY,Ns.join(u,"envDir","utility","keys","privateKey.pem")),pe(se.CONFIG_PARAMS.TLS_CERTIFICATE,Ns.join(u,"envDir","utility","keys","certificate.pem")),pe(se.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(se.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ns.join(u,"envDir","log")),pe(se.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),pe(se.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),pe(se.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),pe(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ns.join(u,"envDir")),pe(se.CONFIG_PARAMS.STORAGE_PATH,Ns.join(u,"envDir")),pe(se.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,go.isEmpty(n)?!0:n),pe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,go.isEmpty(n)?!0:n),pe(se.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(se.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,go.isEmpty(i)?!1:i),pe(se.CONFIG_PARAMS.HTTP_CORS,go.isEmpty(i)?!1:i),pe(se.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),pe(se.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),pe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),pe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),pe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ns.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(se.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,go.isEmpty(c)?!1:c),o&&(pe("CORS_ACCESSLIST",o),pe(se.CONFIG_PARAMS.HTTP_CORSACCESSLIST,o)),s&&(pe(se.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),pe(se.CONFIG_PARAMS.HTTP_TIMEOUT,s)),t&&(pe(se.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),pe(se.CONFIG_PARAMS.HTTP_KEEPALIVETIMEOUT,t)),r&&(pe(se.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),pe(se.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${nd}. Please check your boot props and settings files`;Zc.fatal(r),Zc.error(t)}}a(TK,"initTestEnvironment")});var qe=p((zde,Zb)=>{"use strict";var nu=A(),gK=G(),ir=Q(),iu=require("path"),RK=require("minimist"),Wb=require("fs-extra"),Qb=require("lodash");ir.initSync();var{CONFIG_PARAMS:Li,DATABASES_PARAM_CONFIG:eu,SYSTEM_SCHEMA_NAME:id}=nu,tu,ru,su;function zb(){if(tu!==void 0)return tu;if(ir.getHdbBasePath()!==void 0)return tu=ir.get(Li.STORAGE_PATH)||iu.join(ir.getHdbBasePath(),nu.DATABASES_DIR_NAME),tu}a(zb,"getBaseSchemaPath");function Jb(){if(ru!==void 0)return ru;if(ir.getHdbBasePath()!==void 0)return ru=Xb(id),ru}a(Jb,"getSystemSchemaPath");function jb(){if(su!==void 0)return su;if(ir.getHdbBasePath()!==void 0)return su=ir.get(nu.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||iu.join(ir.getHdbBasePath(),nu.TRANSACTIONS_DIR_NAME),su}a(jb,"getTransactionAuditStoreBasePath");function AK(e,t){let r=ir.get(Li.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||iu.join(jb(),e.toString())}a(AK,"getTransactionAuditStorePath");function Xb(e,t){e=e.toString(),t=t&&t.toString();let r=ir.get(nu.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||iu.join(zb(),e)}a(Xb,"getSchemaPath");function OK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,RK(process.argv));let s=r[Li.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!gK.isObject(s))throw o;i=s}for(let o of i){let c=o[id];if(!c)continue;let u=ir.get(Li.DATABASES);u=u??{};let l=c?.tables?.[t]?.[eu.PATH];if(l)return Qb.set(u,[id,eu.TABLES,t,eu.PATH],l),ir.setProperty(Li.DATABASES,u),l;let _=c?.[eu.PATH];if(_)return Qb.set(u,[id,eu.PATH],_),ir.setProperty(Li.DATABASES,u),_}}let n=r[Li.STORAGE_PATH.toUpperCase()];if(n){if(!Wb.pathExistsSync(n))throw new Error(n+" does not exist");let i=iu.join(n,e);return Wb.mkdirsSync(i),ir.setProperty(Li.STORAGE_PATH,n),i}return Jb()}a(OK,"initSystemSchemaPaths");function NK(){tu=void 0,ru=void 0,su=void 0}a(NK,"resetPaths");Zb.exports={getBaseSchemaPath:zb,getSystemSchemaPath:Jb,getTransactionAuditStorePath:AK,getTransactionAuditStoreBasePath:jb,getSchemaPath:Xb,initSystemSchemaPaths:OK,resetPaths:NK}});var or=p((Zde,ny)=>{"use strict";var bK=Pr().LMDB_ERRORS_ENUM,jde=require("lmdb"),yK=We(),Xde=require("buffer").Buffer,{OVERFLOW_MARKER:ey,MAX_SEARCH_KEY_LENGTH:od}=yK,ty=["number","string","symbol","boolean","bigint"];function IK(e){if(e=e?.primaryStore||e,!e)throw new Error(bK.ENV_REQUIRED)}a(IK,"validateEnv");function wK(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(wK,"stringifyData");function CK(e){return e instanceof Date?e.valueOf():e}a(CK,"convertKeyValueToWrite");function LK(e){if(e==null)return;if(ty.includes(typeof e))return e.length>od?[e.slice(0,od)+ey]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(ty.includes(typeof n))n.length>od?t.push(n.slice(0,od)+ey):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(LK,"getIndexedValues");var ad=0,ry=0;function sy(){ry=Date.now()-performance.now()}a(sy,"adjustStartTime");sy();var DK=6e4;setInterval(sy,DK).unref();function PK(){let e=performance.now()+ry;return e>ad?(ad=e,e):(ad+=488e-6,ad)}a(PK,"getNextMonotonicTime");ny.exports={validateEnv:IK,stringifyData:wK,convertKeyValueToWrite:CK,getNextMonotonicTime:PK,getIndexedValues:LK}});var iy,bs,Zm,ou=ge(()=>{iy=require("events"),bs=class extends iy.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 Zr(e){return e[ar]||(e[ar]=Object.create(null))}function _d(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(_){if(!(typeof _=="string"||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a string, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"ID":u=a(function(_){if(!(typeof _=="string"||_?.length>0&&_.every?.(d=>typeof d=="string")||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a string, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Float":u=a(function(_){if(!(typeof _=="number"||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a number, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Int":u=a(function(_){if(!(_>>0===_||_==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs((_>>0)-_)<=1)_=Math.round(_);else throw new ys.ClientError(`${c} must be an integer between -2147483648 and 2147483647, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Long":u=a(function(_){if(!(Math.round(_)===_&&Math.abs(_)<=9007199254740992||_==null&&o.nullable!==!1))if(typeof _=="number"&&Math.abs(_)<=9007199254740992)_=Math.round(_);else throw new ys.ClientError(`${c} must be an integer between -9007199254740992 and 9007199254740992, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Boolean":u=a(function(_){if(!(typeof _=="boolean"||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a boolean, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Date":u=a(function(_){if(!(_ instanceof Date||_==null&&o.nullable!==!1))if(typeof _=="string"||typeof _=="number")_=new Date(_);else throw new ys.ClientError(`${c} must be a Date, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Bytes":u=a(function(_){if(!(_ instanceof Uint8Array||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be a Buffer or Uint8Array, attempt to assign ${_}`);Zr(this)[c]=_},"set");break;case"Any":case void 0:u=a(function(_){Zr(this)[c]=_},"set");break;default:u=a(function(_){if(!(typeof _=="object"||_==null&&o.nullable!==!1))throw new ys.ClientError(`${c} must be an object, attempt to assign ${_}`);Zr(this)[c]=_},"set")}let l=s[c]={get(){let _=this[ar];if(_&&c in _)return _[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=oy(d,o);if(f)return _||(_=this[ar]=Object.create(null)),_[c]=f}return d},set:u,enumerable:!0,configurable:!0};l.get.isAttribute=!0,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,l)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ar];return u?.[o]!==void 0?u[o]:this[Re]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new ys.ClientError("Can not add a property to a sealed table schema");Zr(this)[o]=c}),i("deleteProperty",function(o){Zr(this)[o]=void 0}),i("toJSON",function(){let o=this[ar],c;for(let l in o)c||(c=Object.assign({},this[Re])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),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 oy(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[Re]=n}},_d(r,t)),new r(e)):new cd(e);case Array:let s=new ld(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=oy(o,t?.elements)),s[n]=o}return s}}function dd(e){let t=e[ar],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=dd(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function au(e){let t;if(e[Re]&&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=au(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ar];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=au(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ud(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ro]||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?.[Re]===n){if(ud(i))return!0}else return!0}}else{let r=e[ar];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[Re]===i){if(ud(n))return!0}else return!0}else return!0}}return!1}var ys,ar,cd,Ro,ld,fd=ge(()=>{tn();ys=P(Z()),ar=Symbol("own-data");a(Zr,"getChanges");a(_d,"assignTrackedAccessors");a(oy,"trackObject");cd=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};_d(cd,{});a(dd,"collapseData");a(au,"deepFreeze");a(ud,"hasChanges");Ro=Symbol.for("has-array-changes"),ld=class extends Array{static{a(this,"TrackedArray")}[Ro];constructor(t){super(t)}splice(...t){return this[Ro]=!0,super.splice(...t)}push(...t){return this[Ro]=!0,super.push(...t)}pop(){return this[Ro]=!0,super.pop()}unshift(...t){return this[Ro]=!0,super.unshift(...t)}shift(){return this[Ro]=!0,super.shift()}};ld.prototype.constructor=Array});var ep,MK,Ao,Ed,tp=ge(()=>{ep=P(or()),MK=100,Ao=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=!1;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}removeWrite(t){let r=this.writes.indexOf(t);r>-1&&this.writes.splice(r,1)}validate(){this.validated=!0;for(let t of this.writes||[])t.validate?.()}commit(t=this.timestamp||(0,ep.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot(),this.validated||(this.validate(),this.next&&this.next.validate?.());let n,i=[],o=0,c=a(l=>{let _=l.commit(t,l.entry,s);_&&(i||(i=[]),i.push(_))},"doWrite"),u=a(()=>{let l=this.writes[o++];if(l)if(l.key){s>0&&(l.entry=l.store.getEntry(l.key));let _=l.store.ifVersion(l.key,l.entry?.version??null,u);n=n||_}else u();else for(let _ of this.writes)c(_)},"nextCondition");return this.writes.length<MK>>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?n.then(l=>l?(this.next&&i.push(this.next.commit(t,r)),r&&i.push(this.writes[0].store.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1)):{txnTime:t}}abort(){this.resetReadSnapshot(),this.writes=[]}},Ed=class extends Ao{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp,!1)}get timestamp(){return this._timestamp||(this._timestamp=(0,ep.getNextMonotonicTime)())}getReadTxn(){}}});function ze(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 Ao;e.timestamp&&(s.timestamp=e.timestamp),s[oe]=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){s.open=!1;let u=s.commit();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 ay,Oo=ge(()=>{ay=require("../index");tn();tp();a(ze,"transaction");(0,ay._assignPackageExport)("transaction",ze);ze.commit=function(e){let t=(e[oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};ze.abort=function(e){let t=(e[oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function np(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,f;switch(vK[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=sn.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case yt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":f=!0;break}if(r){let m=o;o=c,c=m,m=!l,l=!u,u=m}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new rp.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let m=ip(e);if(!m)throw new rp.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:g})=>new Promise((O,V)=>setImmediate(()=>{try{O(g&&m(g)?R:uy.SKIP)}catch($){V($)}})))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!E,transaction:t,reverse:r};return E?h.getRange(S):h.getRange(S).map(({value:m})=>m)}function ip(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case yt.SEARCH_TYPES.EQUALS:case void 0:return rn(r,n=>n===s);case yt.SEARCH_TYPES.CONTAINS:return rn(r,n=>n?.toString().includes(s));case yt.SEARCH_TYPES.ENDS_WITH:case yt.SEARCH_TYPES._ENDS_WITH:return rn(r,n=>n?.toString().endsWith(s));case yt.SEARCH_TYPES.STARTS_WITH:case yt.SEARCH_TYPES._STARTS_WITH:return rn(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()),rn(r,n=>(0,sn.compareKeys)(n,s[0])>=0&&(0,sn.compareKeys)(n,s[1])<=0);case"gt":case yt.SEARCH_TYPES.GREATER_THAN:case yt.SEARCH_TYPES._GREATER_THAN:return rn(r,n=>(0,sn.compareKeys)(n,s)>0);case"ge":case yt.SEARCH_TYPES.GREATER_THAN_EQUAL:case yt.SEARCH_TYPES._GREATER_THAN_EQUAL:return rn(r,n=>(0,sn.compareKeys)(n,s)>=0);case yt.SEARCH_TYPES.LESS_THAN:case"lt":case yt.SEARCH_TYPES._LESS_THAN:return rn(r,n=>(0,sn.compareKeys)(n,s)<0);case"le":case yt.SEARCH_TYPES.LESS_THAN_EQUAL:case yt.SEARCH_TYPES._LESS_THAN_EQUAL:return rn(r,n=>(0,sn.compareKeys)(n,s)<=0);case"ne":return rn(r,n=>(0,sn.compareKeys)(n,s)!==0);default:return}}function rn(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 hd(e){if(!e)return;let t=new sp,r,s,n,i,o,c=cy;for(;r=c.exec(e);){i=c.lastIndex;let[,u,l]=r;switch(l){case")":case")&":switch(o){case"limit":if(u.indexOf(",")>-1){let[_,d]=u.split(",");t.offset=+_,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(_=>{switch(_[0]){case"-":return{attribute:_.slice(1),descending:!0};case"+":return{attribute:_.slice(1),descending:!1};default:return{attribute:_,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=UK[l],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 ${l} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(u)}),s=void 0;break;default:throw new Error(`Unknown operator ${l} in query ${e}`)}c=s?BK:cy,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var rp,yt,sn,uy,UK,vK,cy,BK,sp,md=ge(()=>{rp=P(Z()),yt=P(We()),sn=require("ordered-binary"),uy=require("lmdb"),UK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(np,"idsForCondition");vK={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(ip,"filterByType");a(rn,"attributeComparator");cy=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,BK=/([^&|*=]+)([&|*=]*)/g;a(hd,"parseQuery");sp=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 cp={};Fe(cp,{CONTEXT:()=>oe,ID_PROPERTY:()=>ye,IS_COLLECTION:()=>nn,RECORD_PROPERTY:()=>Re,Resource:()=>Ut,SAVE_UPDATES_PROPERTY:()=>hy,snake_case:()=>qK});function qK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function ly(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 ap(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function es(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[oe]||i):l=i:(l=n,c=l[ye]??l[this.primaryKey]??null):i?o=i[oe]||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 _;if(u?.ensureLoaded!=null||u?.async?(_=Object.assign({},t),u?.ensureLoaded!=null&&(_.ensureLoaded=u.ensureLoaded),u.async&&(_.async=u.async)):_=t,o.transaction){let f=this.getResource(c,o,_);return f.then?f.then(d):d(f)}else return ze(o,()=>{let f=this.getResource(c,o,_);return f.then?f.then(d):d(f)},_);function d(f){if(t.type==="read"&&(f[hy]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,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,o);if(E?.then)return E.then(h=>{if(!h)throw new pd(o.user);return typeof l?.then=="function"?l.then(S=>e(f,u,o,S)):e(f,u,o,l)});if(!E)throw new pd(o.user)}return typeof l?.then=="function"?l.then(E=>e(f,u,o,E)):e(f,u,o,l)}a(d,"authorizeActionOnResource")}}function ts(e,t){let r=new Ey.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 op(e){let t=e[Re];if(t){let r=e[ar];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 _y(e){if(typeof e=="string")return t=>op(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=op(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=op(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 dy,fy,Ey,oe,ye,nn,hy,Re,HK,Ut,pd,ap,tn=ge(()=>{dy=require("crypto");ou();fy=require("../index"),Ey=P(Z());fd();Oo();md();oe=Symbol.for("context"),ye=Symbol.for("primary-key"),nn=Symbol("is-collection"),hy=Symbol("save-updates"),Re=Symbol("stored-record"),HK={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[ye]=t;let s=r?.[oe];this[oe]=s!==void 0?s:r||null}static get=es(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 l=_y(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=es(function(t,r,s,n){if(Array.isArray(n)&&t[nn]){let i=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):ts(t,"put")},{hasContent:!0,type:"update"});static delete=es(function(t,r,s,n){return t.delete?t.delete(r):ts(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,dy.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),ze(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ts(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=es(function(t,r,s,n){return t.invalidate?t.invalidate(r):ts(t,"delete")},{hasContent:!1,type:"update"});static post=es(function(t,r,s,n){return t[ye]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=es(function(t,r,s,n){return t.connect?t.connect(n,r):ts(t,"connect")},{hasContent:!0,type:"read"});static subscribe=es(function(t,r,s,n){return t.subscribe?t.subscribe(r):ts(t,"subscribe")},{type:"read"});static publish=es(function(t,r,s,n){return t[ye]!=null&&t.update?.(),t.publish?t.publish(n,r):ts(t,"publish")},{hasContent:!0,type:"create"});static search=es(function(t,r,s,n){let i=t.search?t.search(r):ts(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=_y(o);return i.map(c)}return i},{type:"read"});static query=es(function(t,r,s,n){return t.search?t.search(n,r):ts(t,"search")},{hasContent:!0,type:"read"});static copy=es(function(t,r,s,n){return t.copy?t.copy(n,r):ts(t,"copy")},{type:"create"});static move=es(function(t,r,s,n){return t.move?t.move(n,r):ts(t,"move")},{type:"delete"});post(t){if(this[nn])return this.constructor.create(this[ye],t,this[oe]);ts(this,"post")}static isCollection(t){return t?.[nn]}static coerceId(t){return t}static parseQuery(t){return hd(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&&HK[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:ly(t,this)}}return ly(t,this)}static getResource(t,r,s){let n,i=r[oe],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 l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ye]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ye],f=l.get(d);f?f.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[nn]=!0),n}subscribe(t){return new bs}connect(t){return t?.subscribe!==!1?this.subscribe?.(t):new bs}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[ye]}getContext(){return this[oe]}};Ut.prototype[oe]=null;(0,fy._assignPackageExport)("Resource",Ut);a(qK,"snake_case");pd=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(ly,"pathToId");ap=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(es,"transactional");a(ts,"missingMethod");a(op,"selectFromObject");a(_y,"transformForSelect")});var my={};Fe(my,{Resources:()=>Sd,keyArrayToString:()=>Aa,resetResources:()=>GK,resources:()=>Di});function GK(){return Di=new Sd}function Aa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Sd,Di,cu=ge(()=>{Oo();Sd=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 l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=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&&(n.relativeURL="")),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 ze(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(GK,"resetResources");a(Aa,"keyArrayToString")});var Ay={};Fe(Ay,{HAS_EXPIRATION:()=>hp,LAST_TIMESTAMP_PLACEHOLDER:()=>lu,LOCAL_TIMESTAMP:()=>FK,METADATA:()=>uu,NO_TIMESTAMP:()=>up,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>Ep,RecordEncoder:()=>fp,TIMESTAMP_ASSIGN_LAST:()=>kK,TIMESTAMP_ASSIGN_NEW:()=>Ty,TIMESTAMP_ASSIGN_PREVIOUS:()=>gy,TIMESTAMP_PLACEHOLDER:()=>Td,TIMESTAMP_RECORD_PREVIOUS:()=>lp,getUpdateRecord:()=>mp,handleLocalTimeForGets:()=>Od});function Ry(){return Na[0]=Na[0]^64,xK.getFloat64(0)}function Od(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,l=u?.[uu];return l>=0&&(c.metadataFlags=l,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?.[uu]>=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?o:o.map(c=>{let u=c.value,l=u[uu];return l>=0&&(c.metadataFlags=l,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 l=u.cache;if(c.key){let _=$K.call(l,c.key);if(_&&_.timestampBytes){let d=_.timestampOffset;_.timestampBytes[d]===2&&(_.timestampBytes.copy(Na,0,d),_.timestampBytes=null,_.localTime=Ry())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){n.done.isTracked=!0;let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,No.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<No.length;u++){let l=No[u].deref();(!l||l===this||l.isDone||l.isCommitted)&&No.splice(u--,1)}}}return e}function mp(e,t,r){return function(s,n,i,o,c=-1,u,l,_,d="put",f,E){if(f||u==null?Oa=i?.localTime?lp|gy:up:Oa=u?i?.localTime?lp|16384:Ty|16384:up,_>0&&(c|=hp),Rd=c,dp=_,i?.version===o&&u===!1)throw new Error("Must retain local time if version is not changed");let h={version:o,instructedWrite:Oa>0},S;try{f&&(h.ifVersion=S=i?.version??null);let m=e.put(s,n,h);if(e.cache&&m.result!==!1){let R=e.cache.get(s);R&&(c>=0?R.metadataFlags=c:R.metadataFlags>=0&&(R.metadataFlags=void 0),(_||!R.expiresAt)&&(R.expiresAt=_),h.instructedWrite&&(R.localTime||(R.localTime=1),R.timestampBytes=_p,R.timestampOffset=_p.start||0))}if(u){let R=l?.user?.username;if(E&&(gd=e.encoder.encode(E)),f&&i?.localTime){let g=i?.localTime,O=r.get(g);if(O){let V=vr(O).previousLocalTime;return r.put(g,Ad(o,t,s,V,R,d,gd),{ifVersion:S}),m}}r.put(lu,Ad(o,t,s,i?.localTime?1:0,R,d,gd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:S})}return m}catch(m){throw m.message+=" id: "+s+" options: "+h,m}}}var py,Sy,Td,lu,Ep,FK,uu,Na,xK,up,Ty,kK,gy,lp,hp,_p,gd,Oa,Rd,dp,fp,$K,No,_u=ge(()=>{py=require("msgpackr");ba();Sy=P(M()),Td=new Uint8Array([1,1,1,1,4,64,0,0]),lu=new Uint8Array([1,1,1,1,1,0,0,0]),Ep=new Uint8Array([1,1,1,1,3,64,0,0]),FK=Symbol("local-timestamp"),uu=Symbol("metadata"),Na=new Uint8Array(8),xK=new DataView(Na.buffer,0,8),up=0,Ty=0,kK=1,gy=3,lp=4,hp=16,Oa=0,Rd=-1,dp=0,fp=class extends py.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(Oa||Rd>=0){let i=0,o=Oa;o&&(i+=8,Oa=0);let c=Rd,u=dp;c>=0&&(i+=2,Rd=-1,u&&(i+=8,dp=0));let l=_p=r.call(this,s,n|2048|i);gd=l.subarray((l.start||0)+i,l.end);let _=l.start||0;return o&&(Td[4]=o,Td[5]=o>>8,l.set(Td,_),_+=8),c>=0&&(l[_++]=c,l[_++]=0,u&&(l.dataView||(l.dataView=new DataView(l.buffer,l.byteOffset,l.byteLength))).setFloat64(_,u)),l}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=Ry(),i=t[c]}let l;i<32&&(o=i,c+=2,o&hp&&(l=(t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).getFloat64(c),c+=8));let _=super.decode(t.subarray(c,n),n-c);return{localTime:u,value:_,[uu]:o,expiresAt:l}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Ry,"getTimestamp");$K=Map.prototype.get;a(Od,"handleLocalTimeForGets");No=[];setInterval(()=>{for(let e=0;e<No.length;e++){let t=No[e].deref();!t||t.isDone||t.isCommitted?No.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Sy.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(mp,"getUpdateRecord")});var Uy={};Fe(Uy,{AUDIT_STORE_OPTIONS:()=>Py,createAuditEntry:()=>Ad,openAuditStore:()=>bd,readAuditEntry:()=>vr,setAuditRetention:()=>VK,transactionKeyEncoder:()=>Dy});function bd(e){let t=e.auditStore=e.openDB(Iy.AUDIT_STORE_NAME,Py);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Cy.getWorkerIndex)()===0&&e.on("aftercommit",()=>{fu||(fu=setTimeout(()=>{if(fu=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:0,end:Date.now()-pp})){if((n[0]&15)===Tp){let i=vr(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},pp/10).unref())}),t}function VK(e){clearTimeout(fu),fu=null,pp=e}function Ad(e,t,r,s,n,i,o){let c=My[i],u=1;s&&(s>1?du.setFloat64(0,s):on.set(Ep),u=9),f(0),f(t),d(r),du.setFloat64(u,e),u+=8,n?d(n):on[u++]=0,on[s?8:0]=c;let _=on.subarray(0,u);if(o)return Buffer.concat([_,o]);return _;function d(E){let h=u;u+=1,u=(0,ya.writeKey)(E,on,u),u>130||(on[h]=u-h-1)}function f(E){E<128?on[u++]=E:E<16384?(du.setUint16(u,E|32767),u+=2):E<1056964608?(du.setUint32(u,E|3489660927),u+=4):(on[u]=255,du.setUint32(u+1,E),u+=5)}}function vr(e){let t=e.dataView||(e.dataView=new gp(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,l=t.readFloat64();o=t.readInt();let _=t.position,d=t.position+=o;return{type:My[s&7],tableId:i,get recordId(){return yy(e,c,u)},version:l,previousLocalTime:r,get user(){return d>_?yy(e,_,d):void 0},getValue(f){return s&Sp?f.decoder.decode(e.subarray(t.position)):void 0}}}function yy(e,t,r){let s=e.subarray(t,r);return(0,ya.readKey)(s,0,r-t)}var ya,Nd,Iy,wy,Cy,Ly,on,du,Dy,Py,pp,fu,Sp,Oy,Tp,Ny,by,My,gp,ba=ge(()=>{ya=require("ordered-binary"),Nd=P(Q()),Iy=P(We()),wy=P(A()),Cy=P(Je()),Ly=P(G());_u();(0,Nd.initSync)();on=Buffer.alloc(1024),du=new DataView(on.buffer,on.byteOffset,1024),Dy={writeKey(e,t,r){return e===lu?(t.set(lu,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)}},Py={encoding:"binary",keyEncoder:Dy},pp=(0,Ly.convertToMS)((0,Nd.get)(wy.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,fu=null;a(bd,"openAuditStore");a(VK,"setAuditRetention");Sp=16,Oy=1,Tp=2,Ny=3,by=4,My={put:Oy|Sp,[Oy]:"put",delete:Tp,[Tp]:"delete",message:Ny|Sp,[Ny]:"message",invalidate:by,[by]:"invalidate"};a(Ad,"createAuditEntry");a(vr,"readAuditEntry");gp=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-1)&3489660927,this.position+=4,t):(t=this.getUint32(this.position-1)&3489660927,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(yy,"readKeySafely")});function Hy(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Ia||((0,hu.onMessageByType)(By,d=>{qy(d.path)}),(0,hu.onMessageByType)(YK,d=>{(0,Eu.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=Aa(t);let l=new Rp(r);l.startTime=s,n&&(l.includeDescendants=n);let _=u.get(t);return _?_.push(l):(u.set(t,_=[l]),_.tables=u,_.key=t),l.subscriptions=_,l}function qy(e,t){if(!Ia)return;let r=Ia[e];if(r){try{r.auditStore.resetReadTxn()}catch(s){throw s.message+=" in "+e,s}for(let{key:s,value:n}of r.auditStore.getRange({start:vy,exclusiveStart:!0})){vy=s;let i=vr(n),o=r[i.tableId];if(!o)continue;let c=i.recordId,u,l=Aa(i.recordId),_;do{let d=o.get(l);if(d){for(let E of d)if(!(_&&!E.includeDescendants)){if(E.startTime>=s){(0,Eu.info)("omitting",c,E.startTime,s);continue}try{if(E.crossThreads===!1&&!t)continue;E.listener(c,i,s)}catch(h){console.error(h),(0,Eu.info)(h)}}}if(l==null)break;let f=l.lastIndexOf?.("/",l.length-2);f>-1?l=l.slice(0,f+1):l=null,_=!0}while(!0)}}}function Gy(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,hu.broadcast)({type:By,path:n}),qy(n,!0)})}}var Eu,hu,By,YK,Ia,Lfe,Rp,vy,Fy=ge(()=>{Eu=P(M()),hu=P(Je());ou();cu();ba();By="transaction",YK="transaction-await",Lfe=Buffer.alloc(4096);a(Hy,"addSubscription");Rp=class extends bs{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"}}},vy=Date.now();a(qy,"notifyFromTransactionData");a(Gy,"listenToCommits")});var ky=p((Mfe,xy)=>{"use strict";var Ap=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};xy.exports=Ap});var Vy=p((vfe,$y)=>{"use strict";var Op=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};$y.exports=Op});var yd=p((Hfe,Yy)=>{"use strict";var bp=Q(),yp=A(),{RecordEncoder:KK}=(_u(),te(Ay));bp.initSync();var WK=bp.get(yp.CONFIG_PARAMS.STORAGE_COMPRESSION),QK=bp.get(yp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zK=yp.UPDATES_PROPERTY,Np=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=WK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=QK&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:KK},this.alwaysLazyProperty=s=>s===zK)}};Yy.exports=Np});var wd=p((Gfe,Wy)=>{"use strict";var wa=Q(),mu=A();wa.initSync();var JK=wa.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||wa.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||wa.get(mu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ky=wa.get(mu.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),jK=wa.get(mu.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Id=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=JK,this.noFSAccess=!0,Ky!==void 0&&(this.overlappingSync=Ky),this.noReadAhead=jK}};Wy.exports=Id;Id.MAX_DBS=1e4});var Ue=p((xfe,sI)=>{"use strict";var wp=require("lmdb"),Is=require("fs-extra"),Br=require("path"),Cd=or(),Jy=M(),cr=Pr().LMDB_ERRORS_ENUM,Ld=Vy(),Cp=yd(),jy=wd(),Pi=We(),Qy=A(),{table:XK,resetDatabases:ZK}=(fe(),te(Pe)),zy=Q(),ws=Pi.INTERNAL_DBIS_NAME,Xy=Pi.DBI_DEFINITION_NAME,eW="data.mdb",tW="lock.mdb",pu=".mdb",rW="-lock",Ip=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=rs(t,r),this.key_type=this.dbi[Pi.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Pi.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new wp.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Dd(e,t){if(e===void 0)throw new Error(cr.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(cr.ENV_NAME_REQUIRED)}a(Dd,"pathEnvNameValidation");async function Lp(e,t,r=!0){try{await Is.access(e)}catch(s){throw s.code==="ENOENT"?new Error(cr.INVALID_BASE_PATH):s}try{let s=Br.join(e,t+pu);return await Is.access(s,Is.constants.R_OK|Is.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Is.access(Br.join(e,t,eW),Is.constants.R_OK|Is.constants.F_OK),Br.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(cr.INVALID_ENVIRONMENT)}else throw new Error(cr.INVALID_ENVIRONMENT);throw s}}a(Lp,"validateEnvironmentPath");function Pd(e,t){if(Cd.validateEnv(e),t===void 0)throw new Error(cr.DBI_NAME_REQUIRED)}a(Pd,"validateEnvDBIName");async function sW(e,t,r=!1,s=!1){Dd(e,t);let n=Br.basename(e);t=t.toString();let i=zy.get(Qy.CONFIG_PARAMS.DATABASES);i||zy.setProperty(Qy.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Lp(e,t,s),Zy(e,t,r)}catch(o){if(o.message===cr.INVALID_ENVIRONMENT){let c=Br.join(e,t);await Is.mkdirp(s?c:e);let u=new jy(s?c:c+pu,!1),l=wp.open(u);l.dbis=Object.create(null);let _=new Cp(!1);l.openDB(ws,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dp(e,t,r);return l[Pi.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(sW,"createEnvironment");async function nW(e,t,r,s=!0){Dd(e,t),t=t.toString();let n=Br.join(e,t);return XK({table:t,database:Br.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(nW,"copyEnvironment");async function Zy(e,t,r=!1){Dd(e,t),t=t.toString();let s=Dp(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 Lp(e,t),i=Br.join(e,t+pu),o=n!=i,c=new jy(n,o),u=wp.open(c);u.dbis=Object.create(null);let l=tI(u);for(let _=0;_<l.length;_++)rs(u,l[_]);return u[Pi.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Zy,"openEnvironment");async function iW(e,t,r=!1){Dd(e,t),t=t.toString();let s=Br.join(e,t+pu),n=await Lp(e,t);if(global.lmdb_map!==void 0){let i=Dp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await eI(o),delete global.lmdb_map[i]}}await Is.remove(n),await Is.remove(n===s?n+rW:Br.join(Br.dirname(n),tW))}a(iW,"deleteEnvironment");async function eI(e){Cd.validateEnv(e);let t=e[Pi.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(eI,"closeEnvironment");function Dp(e,t,r=!1){let n=`${Br.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Dp,"getCachedEnvironmentName");function oW(e){Cd.validateEnv(e);let t=Object.create(null),r=rs(e,ws);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ws)try{t[s]=Object.assign(new Ld,n)}catch{Jy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(oW,"listDBIDefinitions");function tI(e){Cd.validateEnv(e);let t=[],r=rs(e,ws);for(let{key:s}of r.getRange({start:!1}))s!==ws&&t.push(s);return t}a(tI,"listDBIs");function aW(e,t){let s=rs(e,ws).getEntry(t),n=new Ld;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Jy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(aW,"getDBIDefinition");function rI(e,t,r,s=!r){if(Pd(e,t),t=t.toString(),t===ws)throw new Error(cr.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return rs(e,t)}catch(n){if(n.message===cr.DBI_DOES_NOT_EXIST){let i=new Cp(r,s===!0),o=e.openDB(t,i),c=new Ld(r===!0,s);return o[Xy]=c,rs(e,ws).putSync(t,c),e.dbis[t]=o,o}throw n}}a(rI,"createDBI");function rs(e,t){if(Pd(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ws?r=aW(e,t):r=new Ld,r===void 0)throw new Error(cr.DBI_DOES_NOT_EXIST);let s;try{let n=new Cp(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(cr.DBI_DOES_NOT_EXIST):n}return s[Xy]=r,e.dbis[t]=s,s}a(rs,"openDBI");function cW(e,t){Pd(e,t),t=t.toString();let r=rs(e,t),s=r.getStats();return r[Pi.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(cW,"statDBI");async function uW(e,t){try{let r=Br.join(e,t+pu);return(await Is.stat(r)).size}catch{throw new Error(cr.INVALID_ENVIRONMENT)}}a(uW,"environmentDataSize");function lW(e,t){if(Pd(e,t),t=t.toString(),t===ws)throw new Error(cr.CANNOT_DROP_INTERNAL_DBIS_NAME);rs(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],rs(e,ws).removeSync(t)}a(lW,"dropDBI");function _W(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{rs(e,i)}catch(o){if(o.message===cr.DBI_DOES_NOT_EXIST)rI(e,i,i!==t,i===t),s=!0;else throw o}}s&&ZK()}a(_W,"initializeDBIs");sI.exports={openDBI:rs,openEnvironment:Zy,createEnvironment:sW,listDBIs:tI,listDBIDefinitions:oW,createDBI:rI,dropDBI:lW,statDBI:cW,deleteEnvironment:iW,initializeDBIs:_W,TransactionCursor:Ip,environmentDataSize:uW,copyEnvironment:nW,closeEnvironment:eI}});var oI=p(($fe,iI)=>{"use strict";var Pp=Ue(),dW=M(),nI=Pr().LMDB_ERRORS_ENUM;iI.exports=fW;async function fW(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 Pp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==nI.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pp.closeEnvironment(global.lmdb_map[s]),await Pp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==nI.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){dW.error(t)}}a(fW,"cleanLMDBMap")});var kn=p((Yfe,EW)=>{EW.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 TI=p((Wfe,SI)=>{"use strict";var Mp=require("recursive-iterator"),hW=require("alasql"),Up=require("clone"),aI=G(),{handleHDBError:cI,hdb_errors:mW}=Z(),{HDB_ERROR_MSGS:uI,HTTP_STATUS_CODES:lI}=mW,{getDatabases:pW}=(fe(),te(Pe)),SW=["DISTINCT_ARRAY"],_I=Symbol("validateTables"),vp=Symbol("validateTable"),Kfe=Symbol("getAllColumns"),dI=Symbol("validateAllColumns"),Md=Symbol("findColumn"),fI=Symbol("validateOrderBy"),Su=Symbol("validateSegment"),Bp=Symbol("validateColumn"),EI=Symbol("setColumnsForTable"),hI=Symbol("checkColumnsForAsterisk"),mI=Symbol("validateGroupBy"),pI=Symbol("hasColumns"),Hp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_I](),this[hI](),this[dI]()}[_I](){if(this[pI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[vp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[vp](t.table)})}}[pI](){let t=!1,r=new Mp(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[vp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=pW();if(!r[t.databaseid])throw cI(new Error,uI.SCHEMA_NOT_FOUND(t.databaseid),lI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw cI(new Error,uI.TABLE_NOT_FOUND(t.databaseid,t.tableid),lI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Up(n);i.table=Up(t),this.attributes.push(i)})}[Md](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)}[hI](){let t=new Mp(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[EI](r.tableid)}[EI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new hW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[dI](){this[Su](this.statement.columns,!1),this[Su](this.statement.joins,!1),this[Su](this.statement.where,!1),this[mI](this.statement.group,!1),this[Su](this.statement.order,!0)}[Su](t,r){if(!t)return;let s=new Mp(t),n=[];for(let{node:i,path:o}of s)!aI.isEmpty(i)&&!aI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[fI](i):n.push(this[Bp](i)));return n}[mI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&SW.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Up(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Md](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[Md](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`}[fI](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[Bp](t)}[Bp](t){let r=this[Md](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]}};SI.exports=Hp});var RI=p((zfe,gI)=>{"use strict";var qp=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")}};gI.exports=qp});var OI=p((jfe,AI)=>{"use strict";var Gp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};AI.exports=Gp});var bI=p((Zfe,NI)=>{"use strict";var Fp=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}};NI.exports=Fp});var II=p((tEe,yI)=>{"use strict";var xp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};yI.exports=xp});var yo=p((oEe,LI)=>{"use strict";var TW=Ue(),gW=OI(),RW=bI(),AW=II(),an=or(),Tu=Pr().LMDB_ERRORS_ENUM,OW=We(),$n=A(),NW=G(),bW=require("uuid"),sEe=require("lmdb"),{handleHDBError:yW,hdb_errors:IW}=Z(),{OVERFLOW_MARKER:nEe,MAX_SEARCH_KEY_LENGTH:iEe}=OW,wI=Q();wI.initSync();var Ud=wI.get($n.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),kp=$n.TIME_STAMP_NAMES_ENUM.CREATED_TIME,bo=$n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function wW(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new gW,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];CI(l,!0,n);let _=CW(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Vp(o,c,s,i,n)}a(wW,"insertRecords");function CW(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 _=c([[{}]]);Array.isArray(_)&&(c=_[0][$n.FUNC_VAL],s[o]=c)}let u=an.getIndexedValues(c),l=e.dbis[o];if(u){Ud&&l.prefetch(u.map(_=>({key:_,value:n})),vd);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Ud&&e.dbis[t].prefetch([n],vd),e.dbis[t].put(n,s,s[bo])})}a(CW,"insertRecord");function LW(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(LW,"removeSkippedRecords");function CI(e,t,r){let s=r>0;(s||!Number.isInteger(e[bo]))&&(e[bo]=r||(r=an.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[kp]))&&(e[kp]=r||an.getNextMonotonicTime()):delete e[kp]}a(CI,"setTimestamps");function $p(e,t,r){r.indexOf($n.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push($n.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf($n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push($n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),TW.initializeDBIs(e,t,r)}a($p,"initializeTransaction");async function DW(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new RW,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],f;try{f=Yp(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(f),u.push(d)}return Vp(c,u,s,i,n,o)}a(DW,"updateRecords");async function PW(e,t,r,s,n=an.getNextMonotonicTime()){try{Kp(e,t,r,s)}catch(u){throw yW(u,u.message,IW.HTTP_STATUS_CODES.BAD_REQUEST)}$p(e,t,r);let i=new AW,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;NW.isEmpty(l[t])?(_=bW.v4(),l[t]=_):_=l[t];let d=Yp(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Vp(o,c,s,i,n)}a(PW,"upsertRecords");async function Vp(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(),LW(r,i),s}a(Vp,"finalizeWrite");function Yp(e,t,r,s,n,i=!1,o){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(CI(r,!_,o),Number.isInteger(r[bo])&&l[bo]>r[bo])return!1;_&&n.original_records.push(l);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],m=e.dbis[h];if(m===void 0)continue;let R=l[h];if(typeof S=="function"){let O=S([[l]]);Array.isArray(O)&&(S=O[0][$n.FUNC_VAL],r[h]=S)}if(S===R)continue;let g=an.getIndexedValues(R);if(g){Ud&&m.prefetch(g.map(O=>({key:O,value:s})),vd);for(let O=0,V=g.length;O<V;O++)m.remove(g[O],s)}if(g=an.getIndexedValues(S),g){Ud&&m.prefetch(g.map(O=>({key:O,value:s})),vd);for(let O=0,V=g.length;O<V;O++)m.put(g[O],s)}}let E=Object.assign({},l,r);c.put(s,E,E[bo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Yp(e,t,r,s,n,i,o))}a(Yp,"updateUpsertRecord");function MW(e,t,r){if(an.validateEnv(e),t===void 0)throw new Error(Tu.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Tu.WRITE_ATTRIBUTES_REQUIRED):new Error(Tu.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(MW,"validateBasic");function Kp(e,t,r,s){if(MW(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Tu.RECORDS_REQUIRED):new Error(Tu.RECORDS_MUST_BE_ARRAY)}a(Kp,"validateWrite");function vd(){}a(vd,"noop");LI.exports={insertRecords:wW,updateRecords:DW,upsertRecords:PW}});var cn=p((cEe,MI)=>{"use strict";var PI=G(),DI=A(),Ca=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Vn=require("joi"),Mi={schema_format:{pattern:Ca,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},UW=Vn.alternatives(Vn.string().min(1).max(Mi.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Mi.schema_format.message}),Vn.number()).required(),vW=Vn.alternatives(Vn.string().min(1).max(Mi.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Mi.schema_format.message}),Vn.number()),BW=Vn.alternatives(Vn.string().min(1).max(Mi.schema_length.maximum).pattern(Ca).messages({"string.pattern.base":"{:#label} "+Mi.schema_format.message}),Vn.number()).required();function HW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Mi.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(HW,"checkValidTable");function qW(e,t){return PI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(qW,"validateSchemaExists");function GW(e,t){let r=t.state.ancestors[0].schema;return PI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(GW,"validateTableExists");function FW(e,t){return e.toLowerCase()===DI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${DI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(FW,"validateSchemaName");MI.exports={common_validators:Mi,schema_regex:Ca,hdb_schema_table:UW,validateSchemaExists:qW,validateTableExists:GW,validateSchemaName:FW,checkValidTable:HW,hdb_database:vW,hdb_table:BW}});var Bd=p((lEe,UI)=>{var{common_validators:un}=cn(),Ru=Ye(),gu="is required",ut={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 Au(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(Au,"makeAttributesStrings");function xW(e){return e=Au(e),ut.table.presence=!1,ut.attribute.presence=!1,ut.hash_attribute.presence=!1,Ru.validateObject(e,ut)}a(xW,"schema_object");function kW(e){return e=Au(e),ut.table.presence={message:gu},ut.attribute.presence=!1,ut.hash_attribute.presence=!1,Ru.validateObject(e,ut)}a(kW,"table_object");function $W(e){return e=Au(e),ut.table.presence={message:gu},ut.attribute.presence=!1,Ru.validateObject(e,ut)}a($W,"create_table_object");function VW(e){return e=Au(e),ut.table.presence={message:gu},ut.attribute.presence={message:gu},ut.hash_attribute.presence=!1,Ru.validateObject(e,ut)}a(VW,"attribute_object");function YW(e){return e=Au(e),ut.table.presence={message:gu},ut.attribute.presence=!1,ut.hash_attribute.presence=!1,Ru.validateObject(e,ut)}a(YW,"describe_table");function KW(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(KW,"validateTableResidence");UI.exports={schema_object:xW,create_table_object:$W,table_object:kW,attribute_object:VW,describe_table:YW,validateTableResidence:KW}});var BI=p((dEe,vI)=>{"use strict";var WW=require("uuid"),Wp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||WW.v4(),this.schema_table=`${this.schema}.${this.table}`}};vI.exports=Wp});var Hd=p((EEe,HI)=>{"use strict";var QW=BI(),Qp=class extends QW{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=Qp});var GI=p((mEe,qI)=>{"use strict";qI.exports=JW;var zW="inserted";function JW(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===zW?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(JW,"returnObject")});var qd=p((SEe,VI)=>{"use strict";var jW=A(),zp=Ue(),XW=yo(),{getSystemSchemaPath:ZW,getSchemaPath:eQ}=qe(),tQ=kn(),rQ=Bd(),sQ=Hd(),nQ=GI(),{handleHDBError:FI,hdb_errors:kI}=Z(),xI=G(),{HTTP_STATUS_CODES:iQ}=kI,Jp=tQ.hdb_attribute,$I=[];for(let e=0;e<Jp.attributes.length;e++)$I.push(Jp.attributes[e].attribute);var oQ="inserted";VI.exports=aQ;async function aQ(e){let t=rQ.attribute_object(e);if(t)throw FI(new Error,t.message,kI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&xI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FI(new Error,r,iQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=xI.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 sQ(e.schema,e.table,e.attribute,e.id);try{let i=await zp.openEnvironment(eQ(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}`);zp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await zp.openEnvironment(ZW(),jW.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await XW.insertRecords(o,Jp.hash_attribute,$I,[n]);return nQ(oQ,c,{records:[n]},u)}catch(i){throw i}}a(aQ,"lmdbCreateAttribute")});var Xp=p((gEe,KI)=>{var{hdb_table:cQ,hdb_database:YI}=cn(),uQ=Ye(),jp=require("joi"),lQ={undefined:"undefined",null:"null"},_Q=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||lQ[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"),dQ=jp.object({database:YI,schema:YI,table:cQ,records:jp.array().items(jp.object().custom(_Q)).required()});KI.exports=function(e){return uQ.validateBySchema(e,dQ)}});var Ou=p((OEe,QI)=>{"use strict";var Yn=G(),WI=M(),AEe=Xp(),{getDatabases:fQ}=(fe(),te(Pe)),{ClientError:Io}=Z();QI.exports=EQ;function EQ(e){if(Yn.isEmpty(e))throw new Io("invalid update parameters defined.");if(Yn.isEmptyOrZeroLength(e.schema))throw new Io("invalid schema specified.");if(Yn.isEmptyOrZeroLength(e.table))throw new Io("invalid table specified.");if(!Array.isArray(e.records))throw new Io("records must be an array");let t=fQ()[e.schema]?.[e.table];if(Yn.isEmpty(t))throw new Io(`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&&Yn.isEmptyOrZeroLength(o[r]))throw WI.error("a valid hash attribute must be provided with update record:",o),new Io("a valid hash attribute must be provided with update record, check log for more info");if(!Yn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw WI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Io(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Yn.isEmpty(o[r])&&o[r]!==""&&s.has(Yn.autoCast(o[r]))&&(o.skip=!0),s.add(Yn.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(EQ,"insertUpdateValidate")});var Nu=p((bEe,zI)=>{"use strict";var hQ=A().OPERATIONS_ENUM,Zp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=hQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};zI.exports=Zp});var wu=p((wEe,JI)=>{"use strict";var IEe=Nu(),Gd=A(),tS=G(),eS=M(),mQ=require("uuid"),{handleHDBError:bu,hdb_errors:pQ}=Z(),{HDB_ERROR_MSGS:yu,HTTP_STATUS_CODES:Iu}=pQ;JI.exports=SQ;function SQ(e,t,r){for(let n=0;n<t.length;n++)TQ(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];gQ(i,r,e.operation)}}a(SQ,"processRows");function TQ(e){if(Buffer.byteLength(String(e))>Gd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bu(new Error,yu.ATTR_NAME_LENGTH_ERR(e),Iu.BAD_REQUEST,void 0,void 0,!0);if(tS.isEmptyOrZeroLength(e)||tS.isEmpty(e.trim()))throw bu(new Error,yu.ATTR_NAME_NULLISH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(TQ,"validateAttribute");function gQ(e,t,r){if(!e.hasOwnProperty(t)||tS.isEmptyOrZeroLength(e[t])){if(r===Gd.OPERATIONS_ENUM.INSERT||r===Gd.OPERATIONS_ENUM.UPSERT){e[t]=mQ.v4();return}throw eS.error("Update transaction aborted due to record with no hash value:",e),bu(new Error,yu.RECORD_MISSING_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Gd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw eS.error(e),bu(new Error,yu.HASH_VAL_LENGTH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw eS.error(e),bu(new Error,yu.INVALID_FORWARD_SLASH_IN_HASH_ERR,Iu.BAD_REQUEST,void 0,void 0,!0)}a(gQ,"validateHash")});var Fd=p((LEe,XI)=>{"use strict";var jI=G(),RQ=A(),AQ=M(),OQ=qd(),NQ=Hd(),bQ=Kn(),{SchemaEventMsg:yQ}=Cs(),IQ="already exists in";XI.exports=wQ;async function wQ(e,t,r){if(jI.isEmptyOrZeroLength(r))return r;let s=[];jI.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 CQ(e,t.schema,t.name,i)})),n}a(wQ,"lmdbCheckForNewAttributes");async function CQ(e,t,r,s){let n=new NQ(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await LQ(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(IQ))AQ.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(CQ,"createNewAttribute");async function LQ(e){let t;return t=await OQ(e),bQ.signalSchemaChange(new yQ(process.pid,RQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(LQ,"createAttribute")});var La=p((PEe,ZI)=>{"use strict";var rS=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}};ZI.exports=rS});var tw=p((UEe,ew)=>{"use strict";var DQ=La(),PQ=A().OPERATIONS_ENUM,sS=class extends DQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(PQ.INSERT,r,s,n,i),this.records=t}};ew.exports=sS});var sw=p((BEe,rw)=>{"use strict";var MQ=La(),UQ=A().OPERATIONS_ENUM,nS=class extends MQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(UQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};rw.exports=nS});var iw=p((qEe,nw)=>{"use strict";var vQ=La(),BQ=A().OPERATIONS_ENUM,iS=class extends vQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(BQ.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};nw.exports=iS});var aw=p((FEe,ow)=>{"use strict";var HQ=La(),qQ=A().OPERATIONS_ENUM,oS=class extends HQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(qQ.DELETE,s,n,t,i),this.original_records=r}};ow.exports=oS});var Cu=p(($Ee,_w)=>{"use strict";var kEe=require("path"),cw=Ue(),GQ=tw(),FQ=sw(),xQ=iw(),kQ=aw(),Da=We(),uw=G(),{CONFIG_PARAMS:$Q}=A(),lw=Q();lw.initSync();var xd=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:VQ}=qe();_w.exports=YQ;async function YQ(e,t){if(lw.get($Q.LOGGING_AUDITLOG)===!1)return;let r=VQ(e.schema,e.table),s=await cw.openEnvironment(r,e.table,!0),n=KQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){cw.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),uw.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(YQ,"writeTransaction");function KQ(e,t){let r=uw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===xd.INSERT)return new GQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xd.UPDATE)return new FQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xd.UPSERT)return new xQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===xd.DELETE)return new kQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(KQ,"createTransactionObject")});var aS=p((KEe,dw)=>{"use strict";var WQ=Ou(),YEe=Nu(),Lu=A(),QQ=wu(),zQ=yo().insertRecords,JQ=Ue(),jQ=M(),XQ=Fd(),{getSchemaPath:ZQ}=qe(),ez=Cu();dw.exports=tz;async function tz(e){try{let{schema_table:t,attributes:r}=WQ(e);QQ(e,r,t.hash_attribute),e.schema!==Lu.SYSTEM_SCHEMA_NAME&&(r.includes(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await XQ(e.hdb_auth_header,t,r),n=ZQ(e.schema,e.table),i=await JQ.openEnvironment(n,e.table),o=await zQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ez(e,o)}catch(c){jQ.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(tz,"lmdbCreateRecords")});var hw=p((QEe,Ew)=>{"use strict";var fw=A(),rz=aS(),sz=Nu(),nz=require("fs-extra"),{getSchemaPath:iz}=qe();Ew.exports=oz;async function oz(e){let t=[{name:e.schema,createddate:Date.now()}],r=new sz(fw.SYSTEM_SCHEMA_NAME,fw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await rz(r),await nz.mkdirp(iz(e.schema))}a(oz,"lmdbCreateSchema")});var pw=p((JEe,mw)=>{"use strict";var cS=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}};mw.exports=cS});var Rw=p((the,gw)=>{"use strict";var Sw=Ue(),uS=or(),lS=Pr().LMDB_ERRORS_ENUM,az=We(),Tw=M(),XEe=G(),cz=require("lmdb"),uz=pw(),lz=A(),{OVERFLOW_MARKER:ZEe,MAX_SEARCH_KEY_LENGTH:ehe}=az,_z=lz.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function dz(e,t,r,s){if(uS.validateEnv(e),t===void 0)throw new Error(lS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lS.IDS_REQUIRED):new Error(lS.IDS_MUST_BE_ITERABLE);try{let n=Sw.listDBIs(e);Sw.initializeDBIs(e,t,n);let i=new uz,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[_z]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,cz.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<n.length;m++){let R=n[m];if(!h.hasOwnProperty(R)||R===t)continue;let g=e.dbis[R],O=h[R];if(O!=null)try{let V=uS.getIndexedValues(O);if(V)for(let $=0,F=V.length;$<F;$++)g.remove(V[$],o)}catch{Tw.warn(`cannot delete from attribute: ${R}, ${O}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){Tw.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let f=0,E=_.length;f<E;f++)_[f]===!0?i.deleted.push(u[f]):(i.skipped.push(u[f]),l.push(f));let d=0;for(let f=0;f<l.length;f++){let E=l[f];i.original_records.splice(E-d,1),d++}return i.txn_time=uS.getNextMonotonicTime(),i}catch(n){throw n}}a(dz,"deleteRecords");gw.exports={deleteRecords:dz}});var Du=p((she,Ow)=>{"use strict";var Pa=G(),fz=Rw(),Ez=Ue(),{getSchemaPath:hz}=qe(),mz=Cu(),pz=M();Ow.exports=Sz;async function Sz(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 Aw([],[]);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=hz(e.schema,e.table),i=await Ez.openEnvironment(n,e.table),o=await fz.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await mz(e,o)}catch(c){pz.error(`unable to write transaction due to ${c.message}`)}return Aw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Sz,"lmdbDeleteRecords");function Aw(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(Aw,"createDeleteResponse")});var dS=p((ohe,Nw)=>{"use strict";var Tz=A(),ihe=or();function _S(e,t){let r=Object.create(null);if(t.length===1&&Tz.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(_S,"parseRow");function gz(e,t,r,s){let n=_S(r,e);s.push(n)}a(gz,"searchAll");function Rz(e,t,r,s){let n=_S(r,e);s[t]=n}a(Rz,"searchAllToMap");function Az(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Az,"iterateDBI");function wo(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(wo,"pushResults");function Oz(e,t,r,s,n,i){t.toString().endsWith(e)&&wo(t,r,s,n,i)}a(Oz,"endsWith");function Nz(e,t,r,s,n,i){t.toString().includes(e)&&wo(t,r,s,n,i)}a(Nz,"contains");function bz(e,t,r,s,n,i){t>e&&wo(t,r,s,n,i)}a(bz,"greaterThanCompare");function yz(e,t,r,s,n,i){t>=e&&wo(t,r,s,n,i)}a(yz,"greaterThanEqualCompare");function Iz(e,t,r,s,n,i){t<e&&wo(t,r,s,n,i)}a(Iz,"lessThanCompare");function wz(e,t,r,s,n,i){t<=e&&wo(t,r,s,n,i)}a(wz,"lessThanEqualCompare");Nw.exports={parseRow:_S,searchAll:gz,searchAllToMap:Rz,iterateDBI:Az,endsWith:Oz,contains:Nz,greaterThanCompare:bz,greaterThanEqualCompare:yz,lessThanCompare:Iz,lessThanEqualCompare:wz,pushResults:wo}});var Ma=p((_he,Dw)=>{"use strict";var Ui=Ue(),che=M(),Hr=or(),kd=We(),st=Pr().LMDB_ERRORS_ENUM,uhe=G(),Cz=A(),$d=dS(),{parseRow:Lz}=$d,lhe=require("lmdb"),{OVERFLOW_MARKER:bw,MAX_SEARCH_KEY_LENGTH:Dz}=kd;function yw(e,t,r,s=!1,n=void 0,i=void 0){return Co(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(yw,"iterateFullIndex");function Pu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return Co(e,t,r,(_,d,f,E)=>{let g={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return E===r?(g.values=!1,d.getRange(g).map(O=>({value:O}))):d.getRange(g)})}a(Pu,"iterateRangeBetween");function Co(e,t,r,s){let n=e.database||e,i=Ui.openDBI(n,r);i[kd.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Ui.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(Co,"setupTransaction");function Iw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(bw)){if(!n)if(r)n=Ui.openDBI(e,r);else{let u=Ui.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Ui.openDBI(e,u[l]),!n[kd.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Iw,"getOverflowCheck");function Pz(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);return Co(e,t,t,(o,c,u)=>(Vd(r),r=Mu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>Lz(l.value,r))))}a(Pz,"searchAll");function Mz(e,t,r,s=!1,n=void 0,i=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);Vd(r),r=Mu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of yw(e,t,t,s,n,i))o.set(c,$d.parseRow(u,r));return o}a(Mz,"searchAllToMap");function Uz(e,t,r=!1,s=void 0,n=void 0){if(Hr.validateEnv(e),t===void 0)throw new Error(st.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=yw(e,void 0,t,r,s,n),c=o.transaction,u=Iw(c.database,c,void 0,t);for(let{key:l,value:_}of o){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}a(Uz,"iterateDBI");function vz(e,t){if(Hr.validateEnv(e),t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);return Ui.statDBI(e,t).entryCount}a(vz,"countAll");function Bz(e,t,r,s,n=!1,i=void 0,o=void 0){return vi(e,r,s),Co(e,t,r,(c,u,l,_)=>(s=Hr.convertKeyValueToWrite(s),_===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(Bz,"equals");function Hz(e,t,r){return vi(e,t,r),Ui.openDBI(e,t).getValuesCount(r)}a(Hz,"count");function qz(e,t,r,s,n=!1,i=void 0,o=void 0){return vi(e,r,s),Co(e,null,r,(c,u)=>{s=Hr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;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++),_=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(l===!0)return _.DONE}}),_.filter(f=>f)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(qz,"startsWith");function Gz(e,t,r,s,n=!1,i=void 0,o=void 0){return ww(e,t,r,s,n,i,o,!0)}a(Gz,"endsWith");function ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return vi(e,r,s),Co(e,null,r,(u,l,_,d)=>{let f=Iw(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(E=>{let h=E.toString();return h.endsWith(bw)?l.getValues(E,{transaction:u}).map(S=>{let m=f(E,S);if(c?m.endsWith(s):m.includes(s))return{key:m,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?l[kd.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:l.getValues(E,{transaction:u}).map(S=>({key:E,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ww,"contains");function Fz(e,t,r,s,n=!1,i=void 0,o=void 0){vi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!0,!1)}a(Fz,"greaterThan");function xz(e,t,r,s,n=!1,i=void 0,o=void 0){vi(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pu(e,t,r,s,u,n,i,o,!1,!1)}a(xz,"greaterThanEqual");function kz(e,t,r,s,n=!1,i=void 0,o=void 0){vi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!0)}a(kz,"lessThan");function $z(e,t,r,s,n=!1,i=void 0,o=void 0){vi(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pu(e,t,r,u,s,n,i,o,!1,!1)}a($z,"lessThanEqual");function Vz(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(Hr.validateEnv(e),r===void 0)throw new Error(st.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(st.START_VALUE_REQUIRED);if(n===void 0)throw new Error(st.END_VALUE_REQUIRED);if(s=Hr.convertKeyValueToWrite(s),n=Hr.convertKeyValueToWrite(n),s>n)throw new Error(st.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pu(e,t,r,s,n,i,o,c)}a(Vz,"between");function Yz(e,t,r,s){Hr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);if(Vd(r),r=Mu(n,r),s===void 0)throw new Error(st.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=$d.parseRow(c,r)),o}a(Yz,"searchByHash");function Kz(e,t,r){Hr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(st.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Kz,"checkHashExists");function Wz(e,t,r,s,n=[]){return Lw(e,t,r,s,n),Cw(e,t,r,s,n).map(i=>i[1])}a(Wz,"batchSearchByHash");function Qz(e,t,r,s,n=[]){Lw(e,t,r,s,n);let i=new Map;for(let[o,c]of Cw(e,t,r,s,n))i.set(o,c);return i}a(Qz,"batchSearchByHashToMap");function Cw(e,t,r,s,n=[]){return Co(e,t,t,(i,o,c)=>{r=Mu(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,$d.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(Cw,"batchHashSearch");function Lw(e,t,r,s,n){if(Hr.validateEnv(e),t===void 0)throw new Error(st.HASH_ATTRIBUTE_REQUIRED);if(Vd(r),s==null)throw new Error(st.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(st.IDS_MUST_BE_ITERABLE)}a(Lw,"initializeBatchSearchByHash");function Vd(e){if(!Array.isArray(e))throw e===void 0?new Error(st.FETCH_ATTRIBUTES_REQUIRED):new Error(st.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Vd,"validateFetchAttributes");function vi(e,t,r){if(Hr.validateEnv(e),t===void 0)throw new Error(st.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(st.SEARCH_VALUE_REQUIRED);if(r?.length>Dz)throw new Error(st.SEARCH_VALUE_TOO_LARGE)}a(vi,"validateComparisonFunctions");function Mu(e,t){return t.length===1&&Cz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Ui.listDBIs(e)),t}a(Mu,"setGetWholeRowAttributes");Dw.exports={searchAll:Pz,searchAllToMap:Mz,count:Hz,countAll:vz,equals:Bz,startsWith:qz,endsWith:Gz,contains:ww,searchByHash:Yz,setGetWholeRowAttributes:Mu,batchSearchByHash:Wz,batchSearchByHashToMap:Qz,checkHashExists:Kz,iterateDBI:Uz,greaterThan:Fz,greaterThanEqual:xz,lessThan:kz,lessThanEqual:$z,between:Vz}});var Ua=p((fhe,Bw)=>{var Pw=require("lodash"),Mw=Ye(),xe=require("joi"),zz=G(),{hdb_schema_table:Yd,checkValidTable:Uw,hdb_table:vw,hdb_database:Kd}=cn(),{handleHDBError:Jz,hdb_errors:jz}=Z(),{getDatabases:Xz}=(fe(),te(Pe)),{HTTP_STATUS_CODES:Zz}=jz,eJ=xe.object({database:Kd,schema:Kd,table:vw,search_attribute:Yd,search_value:xe.any().required(),get_attributes:xe.array().min(1).items(Yd).optional(),desc:xe.bool(),limit:xe.number().integer().min(1),offset:xe.number().integer().min(0)}),tJ=xe.object({database:Kd,schema:Kd,table:vw,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(Yd).optional(),conditions:xe.array().min(1).items(xe.object({search_attribute:Yd,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()});Bw.exports=function(e,t){let r=null;switch(t){case"value":r=Mw.validateBySchema(e,eJ);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Uw("database",e.schema)),i(Uw("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=Mw.validateBySchema(e,tJ);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=zz.checkGlobalSchemaTable(e.schema,e.table);if(n)return Jz(new Error,n,Zz.NOT_FOUND);let o=Xz()[e.schema][e.table].attributes,c=e.get_attributes?[...e.get_attributes]:[];if(t==="value"&&c.push(e.search_attribute),t==="conditions")for(let l=0,_=e.conditions.length;l<_;l++){let d=e.conditions[l];c.push(d.search_attribute)}let u=Pw.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!Pw.some(o,_=>_===l||_.attribute===l||_.attribute===l.attribute));if(u&&u.length>0){let l=u.join(", ");return l=l.replace(/,([^,]*)$/," and$1"),new Error(`unknown attribute '${l}'`)}}return r}});var fS=p((hhe,Hw)=>{"use strict";var rJ=Ue(),sJ=Ua(),{getSchemaPath:nJ}=qe();Hw.exports=iJ;function iJ(e){let t=sJ(e,"hashes");if(t)throw t;let r=nJ(e.schema,e.table);return rJ.openEnvironment(r,e.table)}a(iJ,"initialize")});var ES=p((phe,qw)=>{"use strict";var oJ=Ma(),aJ=fS();qw.exports=cJ;async function cJ(e){let t=await aJ(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return oJ.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(cJ,"lmdbGetDataByHash")});var va=p((The,Gw)=>{"use strict";var hS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Gw.exports=hS});var xw=p((Ahe,Fw)=>{"use strict";var Rhe=va(),uJ=Ma(),lJ=fS();Fw.exports=_J;async function _J(e){let t=await lJ(e),r=global.hdb_schema[e.schema][e.table];return uJ.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(_J,"lmdbSearchByHash")});var Ls=p((Nhe,kw)=>{"use strict";var mS=class{static{a(this,"SearchObject")}constructor(t,r,s,n,i,o,c,u=!1,l=void 0,_=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=l,this.offset=_}};kw.exports=mS});var Wd=p((yhe,Qw)=>{"use strict";var Kt=Ma(),dJ=Ue(),fJ=G(),le=We(),Lo=A(),EJ=kn(),$w=Pr().LMDB_ERRORS_ENUM,{getSchemaPath:hJ}=qe(),Wn=Lo.SEARCH_WILDCARDS;async function mJ(e,t,r){let s;e.schema===Lo.SYSTEM_SCHEMA_NAME?s=EJ[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ww(e,s.hash_attribute,r,t);return Yw(e,n,s.hash_attribute,r)}a(mJ,"prepSearch");async function Yw(e,t,r,s){let n=hJ(e.schema,e.table),i=await dJ.openEnvironment(n,e.table),o=Kw(i,e,t,r),c=o.transaction||i;if([le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,le.SEARCH_TYPES.SEARCH_ALL,le.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(pJ(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Vw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[_]:f.key}),"toObject");return s?Vw(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Kt.batchSearchByHashToMap(c,r,e.get_attributes,l):Kt.batchSearchByHash(c,r,e.get_attributes,l)}a(Yw,"executeSearch");function Kw(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 le.SEARCH_TYPES.EQUALS:n=Kt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.CONTAINS:n=Kt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.ENDS_WITH:case le.SEARCH_TYPES._ENDS_WITH:n=Kt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.STARTS_WITH:case le.SEARCH_TYPES._STARTS_WITH:n=Kt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Kt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Kt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case le.SEARCH_TYPES.SEARCH_ALL:return Kt.searchAll(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Kt.searchAllToMap(e,s,t.get_attributes,o,c,u);case le.SEARCH_TYPES.BETWEEN:n=Kt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN:case le.SEARCH_TYPES._GREATER_THAN:n=Kt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.GREATER_THAN_EQUAL:case le.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Kt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN:case le.SEARCH_TYPES._LESS_THAN:n=Kt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case le.SEARCH_TYPES.LESS_THAN_EQUAL:case le.SEARCH_TYPES._LESS_THAN_EQUAL:n=Kt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Kw,"searchByType");function Vw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Vw,"createMapFromIterable");function pJ(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(pJ,"checkToFetchMore");function Ww(e,t,r,s){if(fJ.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),Wn.indexOf(n)>-1)return r===!0?le.SEARCH_TYPES.SEARCH_ALL_TO_MAP:le.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Wn[0])<0&&n.indexOf(Wn[1])<0)return c===!0?r===!0?le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:le.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:le.SEARCH_TYPES.EQUALS;if(Wn.indexOf(i)>=0&&Wn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),le.SEARCH_TYPES.CONTAINS;if(Wn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),le.SEARCH_TYPES.ENDS_WITH;if(Wn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),le.SEARCH_TYPES.STARTS_WITH;if(n.includes(Wn[0])||n.includes(Wn[1]))return le.SEARCH_TYPES.EQUALS;throw new Error($w.UNKNOWN_SEARCH_TYPE)}else switch(s){case Lo.VALUE_SEARCH_COMPARATORS.BETWEEN:return le.SEARCH_TYPES.BETWEEN;case Lo.VALUE_SEARCH_COMPARATORS.GREATER:return le.SEARCH_TYPES.GREATER_THAN;case Lo.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return le.SEARCH_TYPES.GREATER_THAN_EQUAL;case Lo.VALUE_SEARCH_COMPARATORS.LESS:return le.SEARCH_TYPES.LESS_THAN;case Lo.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return le.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error($w.UNKNOWN_SEARCH_TYPE)}}a(Ww,"createSearchTypeFromSearchObject");Qw.exports={executeSearch:Yw,createSearchTypeFromSearchObject:Ww,prepSearch:mJ,searchByType:Kw}});var Jw=p((Che,zw)=>{"use strict";var whe=Ls(),SJ=Ua(),TJ=G(),gJ=A(),RJ=Wd();zw.exports=AJ;function AJ(e,t){if(!TJ.isEmpty(t)&&gJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=SJ(e,"value");if(s)throw s;let n=!0;return RJ.prepSearch(e,t,n)}a(AJ,"lmdbGetDataByValue")});var Uu=p((Phe,jw)=>{"use strict";var Dhe=Ls(),OJ=Ua(),NJ=G(),bJ=A(),yJ=Wd();jw.exports=IJ;async function IJ(e,t){if(!NJ.isEmpty(t)&&bJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=OJ(e,"value");if(s)throw s;return yJ.prepSearch(e,t,!1)}a(IJ,"lmdbSearchByValue")});var Zw=p((vhe,Xw)=>{"use strict";var Uhe=We(),pS=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}},SS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},TS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Xw.exports={SearchByConditionsObject:pS,SearchCondition:SS,SortAttribute:TS}});var nC=p((Ghe,sC)=>{"use strict";var Hhe=Zw().SearchByConditionsObject,wJ=Ls(),CJ=Ua(),gS=Ma(),Qd=We(),{Resource:qhe}=(tn(),te(cp)),rC=Wd(),LJ=dS(),DJ=require("lodash"),{getSchemaPath:PJ}=qe(),eC=Ue(),{handleHDBError:MJ,hdb_errors:UJ}=Z(),{HTTP_STATUS_CODES:vJ}=UJ,BJ=1e8;sC.exports=HJ;async function HJ(e){let t=CJ(e,"conditions");if(t)throw MJ(t,t.message,vJ.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=PJ(e.schema,e.table),s=await eC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)eC.openDBI(s,l.search_attribute);let i=DJ.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Qd.SEARCH_TYPES.EQUALS?l.estimated_count=gS.count(s,l.search_attribute,l.search_value):_===Qd.SEARCH_TYPES.CONTAINS||_===Qd.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=BJ}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await tC(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(rC.filterByType),d=_.length,f=gS.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(E=>l.get(E,{transaction:o,lazy:!0})),d>0&&(u=u.filter(E=>{for(let h=0;h<d;h++)if(!_[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=>LJ.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await tC(o,e,f,n.hash_attribute);c=c.concat(E)}let l=new Set,_=e.offset||0;c=c.filter(d=>l.has(d)?!1:(l.add(d),!0)).slice(_,e.limit&&e.limit+_),u=gS.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(HJ,"lmdbSearchByConditions");async function tC(e,t,r,s){let n=new wJ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Qd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,rC.searchByType(e,n,i,s).map(o=>o.value)}a(tC,"executeConditionSearch")});var vu=p((xhe,iC)=>{"use strict";var qJ=A().OPERATIONS_ENUM,RS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=qJ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};iC.exports=RS});var AS=p(($he,fC)=>{"use strict";var uC=Ls(),lC=vu(),_C=Uu(),dC=Du(),ur=A(),oC=G(),aC=Ue(),{getTransactionAuditStorePath:GJ,getSchemaPath:FJ}=qe(),cC=M();fC.exports=xJ;async function xJ(e){try{if(oC.isEmpty(global.hdb_schema[e.schema])||oC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await kJ(e),await $J(e);let t=FJ(e.schema,e.table);try{await aC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")cC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=GJ(e.schema,e.table);await aC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")cC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(xJ,"lmdbDropTable");async function kJ(e){let t=new uC(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 _C(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 lC(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await dC(n)}a(kJ,"deleteAttributesFromSystem");async function $J(e){let t=new uC(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 _C(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 lC(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await dC(n)}catch(i){throw i}}a($J,"dropTableFromSystem")});var hC=p((Yhe,EC)=>{"use strict";var VJ=require("fs-extra"),YJ=Ls(),KJ=va(),WJ=vu(),QJ=AS(),zJ=Du(),JJ=ES(),jJ=Uu(),Qn=A(),{getSchemaPath:XJ}=qe(),{handleHDBError:ZJ,hdb_errors:ej}=Z(),{HDB_ERROR_MSGS:tj,HTTP_STATUS_CODES:rj}=ej;EC.exports=sj;async function sj(e){let t;try{t=await nj(e.schema);let r=new YJ(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await jJ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await QJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new WJ(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zJ(n);let i=XJ(t);await VJ.remove(i)}catch(r){throw r}}a(sj,"lmdbDropSchema");async function nj(e){let t=new KJ(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await JJ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw ZJ(new Error,tj.SCHEMA_NOT_FOUND(e),rj.NOT_FOUND,void 0,void 0,!0);return s}a(nj,"validateDropSchema")});var Bu=p((Whe,mC)=>{"use strict";var OS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};mC.exports=OS});var bS=p((Jhe,pC)=>{"use strict";var ij=require("fs-extra"),zd=Ue(),{getTransactionAuditStorePath:oj}=qe(),NS=We(),zhe=Bu();pC.exports=aj;async function aj(e){let t;try{let r=oj(e.schema,e.table);await ij.mkdirp(r),t=await zd.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{zd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),zd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),zd.createDBI(t,NS.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(aj,"createTransactionsAuditEnvironment")});var RC=p((Xhe,gC)=>{"use strict";var yS=A(),SC=Ue(),cj=yo(),{getSystemSchemaPath:uj,getSchemaPath:lj}=qe(),_j=kn(),dj=qd(),IS=Hd(),fj=M(),Ej=bS(),CS=_j.hdb_table,TC=[];for(let e=0;e<CS.attributes.length;e++)TC.push(CS.attributes[e].attribute);gC.exports=hj;async function hj(e,t){let r=lj(t.schema,t.table),s=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await SC.createEnvironment(r,t.table),e!==void 0){let o=await SC.openEnvironment(uj(),yS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await cj.insertRecords(o,CS.hash_attribute,TC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wS(s),await wS(n),await wS(i)}await Ej(t)}catch(o){throw o}}a(hj,"lmdbCreateTable");async function wS(e){try{await dj(e)}catch(t){fj.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wS,"createAttribute")});var OC=p((eme,AC)=>{"use strict";var mj=Ou(),pj=wu(),Sj=Fd(),Hu=A(),Tj=yo().updateRecords,gj=Ue(),{getSchemaPath:Rj}=qe(),Aj=Cu(),Oj=M();AC.exports=Nj;async function Nj(e){try{let{schema_table:t,attributes:r}=mj(e);pj(e,r,t.hash_attribute),e.schema!==Hu.SYSTEM_SCHEMA_NAME&&(r.includes(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Hu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await Sj(e.hdb_auth_header,t,r),n=Rj(e.schema,e.table),i=await gj.openEnvironment(n,e.table),o=await Tj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await Aj(e,o)}catch(c){Oj.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(Nj,"lmdbUpdateRecords")});var bC=p((rme,NC)=>{"use strict";var bj=A().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=bj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};NC.exports=LS});var IC=p((ime,yC)=>{"use strict";var nme=bC(),yj=Ou(),Ij=wu(),wj=Fd(),qu=A(),Cj=yo().upsertRecords,Lj=Ue(),{getSchemaPath:Dj}=qe(),Pj=Cu(),Mj=M(),{handleHDBError:Uj,hdb_errors:vj}=Z();yC.exports=Bj;async function Bj(e){let t;try{t=yj(e)}catch(u){throw Uj(u,u.message,vj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Ij(e,s,r.hash_attribute),e.schema!==qu.SYSTEM_SCHEMA_NAME&&(s.includes(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(qu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await wj(e.hdb_auth_header,r,s),i=Dj(e.schema,e.table),o=await Lj.openEnvironment(i,e.table),c=await Cj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Pj(e,c)}catch(u){Mj.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(Bj,"lmdbUpsertRecords")});var CC=p((ame,wC)=>{"use strict";var DS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};wC.exports=DS});var DC=p((ume,LC)=>{"use strict";var PS=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}};LC.exports=PS});var UC=p((dme,MC)=>{"use strict";var MS=Ue(),{getTransactionAuditStorePath:Hj}=qe(),_me=CC(),Gu=We(),qj=G(),PC=DC(),Gj=require("util").promisify,Fj=Gj(setTimeout),xj=1e4,kj=100;MC.exports=$j;async function $j(e){let t=Hj(e.schema,e.table),r=await MS.openEnvironment(t,e.table,!0),s=MS.listDBIs(r);MS.initializeDBIs(r,Gu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new PC;do n=await Vj(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 Fj(kj);while(n.transactions_deleted>0);return i}a($j,"deleteAuditLogsBefore");async function Vj(e,t){let r=new PC;try{let s=e.dbis[Gu.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[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];qj.isEmpty(c)||(n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Gu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>xj)break}return await n,r}catch(s){throw s}}a(Vj,"deleteTransactions")});var BC=p((Eme,vC)=>{"use strict";var US=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};vC.exports=US});var qC=p((pme,HC)=>{"use strict";var Yj=Ls(),Kj=vu(),mme=BC(),ln=A(),Wj=G(),vS=Ue(),Qj=kn(),zj=Uu(),Jj=Du(),{getSchemaPath:jj}=qe();HC.exports=Xj;async function Xj(e,t=!0){let r;e.schema===ln.SYSTEM_SCHEMA_NAME?r=Qj[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await e2(e),n=jj(e.schema,e.table),i=await vS.openEnvironment(n,e.table);return t===!0&&await Zj(e,i,r.hash_attribute),vS.dropDBI(i,e.attribute),s}a(Xj,"lmdbDropAttribute");async function Zj(e,t,r){let s=vS.openDBI(t,r),n,i=e.attribute;for(let{key:o,value:c,version:u}of s.getRange({start:!1,versions:!0})){let l={};for(let _ in c)_!==i&&(l[_]=c[_]);n=t.dbis[r].put(o,l,u)}await n}a(Zj,"removeAttributeFromAllObjects");async function e2(e){let t=new Yj(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 zj(t)).filter(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Wj.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 Kj(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Jj(i)}a(e2,"dropAttributeFromSystem")});var VC=p((gme,$C)=>{"use strict";var BS=Ue(),Ba=We(),Tme=or(),HS=A(),GC=G(),{getTransactionAuditStorePath:t2}=qe(),r2=Ma(),Jd=La(),s2=M();$C.exports=n2;async function n2(e){let t=t2(e.schema,e.table),r=await BS.openEnvironment(t,e.table,!0),s=BS.listDBIs(r);BS.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return FC(r,e.search_values);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,o2(r,e.search_values,n);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return i2(r,e.search_values);default:return FC(r)}}a(n2,"readAuditLog");function FC(e,t=[0,Date.now()]){GC.isEmpty(t[0])&&(t[0]=0),GC.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 Jd,n))}a(FC,"searchTransactionsByTimestamp");function i2(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,kC(e,i))}return Object.fromEntries(r)}a(i2,"searchTransactionsByUsername");function o2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=r2.equals(e,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let f=Number(d);s.has(f)?s.get(f).push(l.toString()):s.set(f,[l.toString()])}}let n=Array.from(s.keys()),i=kC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);xC(u,"records",r,_,o),xC(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(o2,"searchTransactionsByHashValues");function xC(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 l=n.get(u),_=l[l.length-1];if(_.timestamp===i)_[t]=[c];else{let d=new Jd(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Jd(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(xC,"loopRecords");function kC(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 Jd,i);r.push(o)}}catch(i){s2.warn(i)}return r}catch(s){throw s}}a(kC,"batchSearchTransactions")});var KC=p((Nme,YC)=>{"use strict";var{getSchemaPath:Ame}=qe(),Ome=Ue(),{database:a2}=(fe(),te(Pe));YC.exports={writeTransaction:c2};async function c2(e,t,r){return a2({database:e,table:t}).transaction(r)}a(c2,"writeTransaction")});var JC=p((yme,zC)=>{"use strict";var{getSchemaPath:WC}=qe(),QC=Ue();zC.exports={flush:u2,resetReadTxn:l2};async function u2(e,t){return(await QC.openEnvironment(WC(e,t),t.toString())).flushed}a(u2,"flush");async function l2(e,t){try{(await QC.openEnvironment(WC(e,t),t.toString())).resetReadTxn()}catch{}}a(l2,"resetReadTxn")});var eL=p((wme,ZC)=>{"use strict";var{Readable:_2}=require("stream"),{getDatabases:d2}=(fe(),te(Pe)),{readSync:f2,openSync:E2,createReadStream:jC}=require("fs"),{open:h2}=require("lmdb"),XC=yd(),m2=wd(),{AUDIT_STORE_OPTIONS:p2}=(ba(),te(Uy)),{INTERNAL_DBIS_NAME:S2,AUDIT_STORE_NAME:T2}=We();ZC.exports=R2;var qS=32768,g2=100;async function R2(e){let t=e.database||e.schema||"data",r=d2()[t],s=new Date().toISOString(),n=e.tables||e.table&&[e.table];if(n){let l=r[n[0]];if(!l)throw new Error(`Can not find table ${n[0]}`);let _=l.dbisDB,d=h2({noSync:!0,maxDbs:m2.MAX_DBS}),f,E=d.openDB(S2,new XC(!1)),h=_.useReadTransaction(),S=0,m=a(async function(g,O){O.encoding="binary",O.encoder=void 0;let V=d.openDB(g,O),$=_.openDB(g,O);for(let{key:F,version:C,value:Y}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,Y,C),S++%g2===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:g,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(V=>g.startsWith?.(V+"/"))){E.put(g,O);let[,V]=g.split("/"),$=!V,F=new XC(!$,$);await m(g,F)}e.include_audit&&await m(T2,Object.assign({},p2)),await f;let R=jC(d.path);return R.headers=u(),R.on("close",()=>{h.done(),d.close()}),R}let o=r[Object.keys(r)[0]].primaryStore,c=E2(o.path);return o.transaction(()=>{let l=Buffer.alloc(qS);f2(c,l,0,qS);let _=o.useReadTransaction(),d=jC(null,{fd:c,start:qS}),f=new _2.from(async function*(){yield l;for await(let E of d)_.openTimer&&(_.openTimer=0),yield E;_.done()}());return f.headers=u(),f});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(R2,"getBackup")});var sL=p((Lme,rL)=>{"use strict";var A2=M(),{handleHDBError:O2}=Z(),N2=RI(),b2=qd(),y2=aS(),I2=hw(),w2=Du(),C2=ES(),L2=xw(),D2=Jw(),P2=Uu(),M2=nC(),U2=hC(),v2=RC(),B2=OC(),H2=IC(),q2=UC(),G2=AS(),F2=qC(),x2=VC(),k2=KC(),tL=JC(),$2=eL(),GS=class extends N2{static{a(this,"LMDBBridge")}async searchByConditions(t){return M2(t)}async getDataByHash(t){return await C2(t)}async searchByHash(t){return await L2(t)}async getDataByValue(t,r){return await D2(t,r)}async searchByValue(t){return await P2(t)}async createSchema(t){return await I2(t)}async dropSchema(t){return await U2(t)}async createTable(t,r){return await v2(t,r)}async dropTable(t){return await G2(t)}async createAttribute(t){return await b2(t)}async createRecords(t){return await y2(t)}async updateRecords(t){return await B2(t)}async upsertRecords(t){try{return await H2(t)}catch(r){throw O2(r,null,null,A2.ERR,r)}}async deleteRecords(t){return await w2(t)}async dropAttribute(t){return await F2(t)}async deleteAuditLogsBefore(t){return await q2(t)}async readAuditLog(t){return await x2(t)}writeTransaction(t,r,s){return k2.writeTransaction(t,r,s)}flush(t,r){return tL.flush(t,r)}resetReadTxn(t,r){return tL.resetReadTxn(t,r)}getBackup(t){return $2(t)}};rL.exports=GS});var dL={};Fe(dL,{ResourceBridge:()=>kS});function $S({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 iL(e,t){let r=_n(e),s=$S(e,r);if(!r)throw new Ds.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;ze(i,()=>new Promise(l=>o=l));let c=e.ids||e.hash_values,u=0;return{[Symbol.asyncIterator](){return{async next(){if(u<c.length){let l=c[u++],_=await r.get({id:l,lazy:n,select:s},i);return _=_&&dd(_),t?{value:{key:l,value:_}}:{value:_}}else return o(),{done:!0}},return(l){return o(),{value:l,done:!0}},throw(l){return o(),{done:!0}}}}}}function _n(e){let t=e.database||e.schema||Y2,r=Ps()[t];if(!r)throw(0,Ds.handleHDBError)(new Error,V2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function oL(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*aL(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 cL,jd,Ds,uL,lL,Ms,FS,xS,_L,V2,Y2,K2,W2,nL,kS,fL=ge(()=>{"use strict";cL=P(sL()),jd=P(Ua()),Ds=P(Z());fe();uL=P(Ou()),lL=P(wu()),Ms=P(A()),FS=P(Kn()),xS=P(Cs()),_L=P(G());Oo();fd();({HDB_ERROR_MSGS:V2}=Ds.hdb_errors),Y2="data",K2=1e4,W2=10,kS=class extends cL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),nL=this}async searchByConditions(t){let r=(0,jd.default)(t,"conditions");if(r)throw(0,Ds.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_n(t);if(!s)throw new Ds.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:$S(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 Ds.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}]}lt({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(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,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(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){_n(t).dropTable()}createSchema(t){return Fu({database:t.schema,table:null}),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,Ms.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await VS(t.schema),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,Ms.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,nL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,uL.default)(t);(0,lL.default)(t,s,r.primaryKey);let n,i=Ps()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return ze(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(f=>f.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=dd(d));for(let f in _)if(Object.prototype.hasOwnProperty.call(_,f)){let E=_[f];if(typeof E=="function")try{let h=E([[d]]);Array.isArray(h)&&(E=h[0].func_val,_[f]=E)}catch(h){throw h.message+="Trying to set key "+f+" on object"+JSON.stringify(_),h}}if(d)for(let f in d)Object.prototype.hasOwnProperty.call(_,f)||(_[f]=d[f]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=Ps()[t.schema][t.table],s={user:t.hdb_user};return ze(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 oL(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Ps()[t.schema][t.table];if(!r.createdTimeProperty)throw new Ds.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:Ms.VALUE_SEARCH_COMPARATORS.LESS}]}),n=!1,i=[],o=[],c=0,u=[],l=a(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),o.push(..._.skipped_hashes),await(0,_L.async_set_timeout)(W2),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%K2===0&&await l();return u.length>0&&await l(),n?oL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,jd.default)(t,"hashes");if(r)throw r;return iL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of iL(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Ms.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,jd.default)(t,"value");if(s)throw s;let n=_n(t);if(!n)throw new Ds.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===Ms.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:$S(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 Ms.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 Ms.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of aL(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return aL(r,t.search_values?.[0],t.search_values?.[1])}}};a($S,"getSelect");a(iL,"getRecords");a(_n,"getTable");a(oL,"createDeleteResponse");a(aL,"groupRecordsInHistory")});var ss=p((Bme,EL)=>{"use strict";var{ResourceBridge:Q2}=(fL(),te(dL)),z2=Q();z2.initSync();var Xd;function J2(){return Xd||(Xd=new Q2,Xd)}a(J2,"getBridge");EL.exports=J2()});var SL=p((qme,pL)=>{"use strict";var hL=require("lodash"),xu=require("mathjs"),j2=require("jsonata"),mL=G();pL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hL.uniqWith(e,hL.isEqual):e,searchJSON:X2,mad:ku.bind(null,xu.mad),mean:ku.bind(null,xu.mean),mode:ku.bind(null,xu.mode),prod:ku.bind(null,xu.prod),median:ku.bind(null,xu.median)};function ku(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(ku,"aggregateFunction");function X2(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(mL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),mL.isEmpty(this.__ala__.res[r])){let s=j2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(X2,"searchJSON")});var gL=p((Fme,TL)=>{"use strict";var _t=require("moment"),YS="YYYY-MM-DDTHH:mm:ss.SSSZZ";_t.suppressDeprecationWarnings=!0;TL.exports={current_date:()=>_t().utc().format("YYYY-MM-DD"),current_time:()=>_t().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return _t(e).utc().format("YYYY");case"month":return _t(e).utc().format("MM");case"day":return _t(e).utc().format("DD");case"hour":return _t(e).utc().format("HH");case"minute":return _t(e).utc().format("mm");case"second":return _t(e).utc().format("ss");case"millisecond":return _t(e).utc().format("SSS");default:break}},date:e=>_t(e).utc().format(YS),date_format:(e,t)=>_t(e).utc().format(t),date_add:(e,t,r)=>_t(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>_t(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=_t(e).utc(),n=_t(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>_t().utc().valueOf(),get_server_time:()=>_t().format(YS),offset_utc:(e,t)=>_t(e).utc().utcOffset(t).format(YS)}});var NL=p((xme,OL)=>{"use strict";var Z2=require("@turf/area"),e4=require("@turf/length"),t4=require("@turf/circle"),r4=require("@turf/difference"),s4=require("@turf/distance"),n4=require("@turf/boolean-contains"),i4=require("@turf/boolean-equal"),o4=require("@turf/boolean-disjoint"),a4=require("@turf/helpers"),RL=A(),Ee=G();OL.exports={geoArea:c4,geoLength:u4,geoCircle:l4,geoDifference:_4,geoDistance:AL,geoNear:d4,geoContains:f4,geoEqual:E4,geoCrosses:h4,geoConvert:m4};var KS="geo1 is required",WS="geo2 is required";function c4(e){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),Z2.default(e)}a(c4,"geoArea");function u4(e,t){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),e4.default(e,{units:t||"kilometers"})}a(u4,"geoLength");function l4(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)),t4.default(e,t,{units:r||"kilometers"})}a(l4,"geoCircle");function _4(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)),r4(e,t)}a(_4,"geoDifference");function AL(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)),s4.default(e,t,{units:r||"kilometers"})}a(AL,"geoDistance");function d4(e,t,r,s){if(Ee.isEmpty(e))throw new Error("point1 is required");if(Ee.isEmpty(t))throw new Error("point2 is required");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 AL(e,t,s)<=r}a(d4,"geoNear");function f4(e,t){if(Ee.isEmpty(e))throw new Error(KS);if(Ee.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),n4.default(e,t)}a(f4,"geoContains");function E4(e,t){if(Ee.isEmpty(e))throw new Error(KS);if(Ee.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),i4.default(e,t)}a(E4,"geoEqual");function h4(e,t){if(Ee.isEmpty(e))throw new Error(KS);if(Ee.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),!o4.default(e,t)}a(h4,"geoCrosses");function m4(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(RL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(RL.GEO_CONVERSION_ENUM).join(",")}`);return a4[t](e,r)}a(m4,"geoConvert")});var Zd=p(($me,bL)=>{var Do=SL(),qr=gL(),dn=NL();bL.exports=e=>{e.aggr.mad=e.aggr.MAD=Do.mad,e.aggr.mean=e.aggr.MEAN=Do.mean,e.aggr.mode=e.aggr.MODE=Do.mode,e.aggr.prod=e.aggr.PROD=Do.prod,e.aggr.median=e.aggr.MEDIAN=Do.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Do.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Do.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=qr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=qr.current_time,e.fn.extract=e.fn.EXTRACT=qr.extract,e.fn.date=e.fn.DATE=qr.date,e.fn.date_format=e.fn.DATE_FORMAT=qr.date_format,e.fn.date_add=e.fn.DATE_ADD=qr.date_add,e.fn.date_sub=e.fn.DATE_SUB=qr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=qr.date_diff,e.fn.now=e.fn.NOW=qr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=qr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=qr.get_server_time,e.fn.getdate=e.fn.GETDATE=qr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=qr.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 CL=p((Vme,wL)=>{"use strict";var $u=require("lodash"),vt=require("alasql");vt.options.cache=!1;var p4=Zd(),yL=require("clone"),ef=require("recursive-iterator"),ae=M(),ue=G(),Ha=ss(),S4=A(),{hdb_errors:T4}=Z(),{getDatabases:IL}=(fe(),te(Pe)),g4="IS NULL",Us="There was a problem performing this search. Please check the logs and try again.";p4(vt);var QS=class{static{a(this,"SQLSearch")}constructor(t,r){if(ue.isEmpty(t))throw ae.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(),ue.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ue.isEmptyOrZeroLength(s))return ae.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ae.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ae.error(s),new Error(Us)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ae.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ae.error(s),new Error(Us)}if(Object.keys(this.data).length===0)return ae.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ae.error("Error thrown from processJoins in SQLSearch class method search."),ae.error(s),new Error(Us)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ae.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ae.error(s),new Error(Us)}try{return t=await this._finalSQL(),t}catch(s){throw ae.error("Error thrown from finalSQL in SQLSearch class method search."),ae.error(s),new Error(Us)}}_getColumns(){let t=new ef(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(yL(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$u.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let 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(ue.isEmpty(this.statement.where)){ae.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new ef(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ue.isEmpty(r)&&r.right)if(ue.isNotEmptyAndHasValue(r.right.value)){let s=ue.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new vt.yy.LogicValue({value:s}):r.right instanceof vt.yy.StringValue&&!ue.isEmpty(s)&&ue.autoCasterIsNumberCheck(s.toString())&&(r.right=new vt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ue.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new vt.yy.LogicValue({value:i}):s instanceof vt.yy.StringValue&&ue.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new vt.yy.NumValue({value:i}))});if(t){ae.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new ef(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(!ue.isEmpty(S4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ue.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ue.isEmptyOrZeroLength(r.left.columnid)||ue.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(ue.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"=":!ue.isEmpty(r.right.value)||!ue.isEmpty(r.left.value)?s.add(ue.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 l=0;l<u.length;l++)if(u[l].value)s.add(u[l].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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from)&&ue.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&&$u.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(ue.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ue.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(ue.isEmptyOrZeroLength(this.all_table_attributes)&&!ue.isEmptyOrZeroLength(this.columns.columns))return t;if(ue.isEmptyOrZeroLength(this.all_table_attributes)&&ue.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await vt.promise(r)}catch(r){throw ae.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ae.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(yL(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(ue.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(g4)>-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=$u.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,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ue.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ue.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await Ha.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(_),new Error(Us)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;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,ue.autoCast(E)))}))}catch(_){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ae.error(_),new Error(Us)}else if(!ue.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ue.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,f=_.length;d<f;d++){let E=_[d];c.search_attribute=E.attribute,c.search_value=E.search_value;let h=await Ha.getDataByValue(c,E.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,ue.autoCast(S)));else for(let[S,m]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,m[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,ue.autoCast(S)))}}catch(_){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ae.error(_),new Error(Us)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await Ha.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ue.autoCast(d)));else for(let[d,f]of _)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,ue.autoCast(d)))}catch(_){throw ae.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ae.error(_),new Error(Us)}}}_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 vt.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 vt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new vt.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 vt.yy.FuncValue:new vt.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,S=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="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 _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=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 vt.promise(h,t),t=null}catch(E){throw ae.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ae.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 S=f[E];o.forEach(m=>{S[m.key]!==null&&S[m.key]!==void 0&&m.keys.add(S[m.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),S=$u.difference(h,[...E.keys].map(m=>m.toString()));for(let m=0,R=S.length;m<R;m++){let g=S[m];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 ef(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=$u.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 ae.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ae.error(i),new Error(Us)}}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 _ in i)o.push(i[_][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),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let f=o[_],E=u.get(f);for(let h=0;h<l;h++){let S=n.columns[h],m=E[S]===void 0?null:E[S];this.data[s].__merged_data[f].push(m)}}}}catch(r){throw ae.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ae.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();ae.trace(`Final SQL: ${n}`),s=await vt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ae.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ae.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ae.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 ae.error(T4.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ae.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],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${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"),l=`[${c}]`;s=s.replace(u,l)});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 ae.error("There was an error when processing this SQL operation. Check your logs"),ae.error(o),new Error(Us)}}return Object.values(Object.values(this.data)[0].__merged_data)}};wL.exports=QS});var lr=p((Kme,LL)=>{"use strict";var R4=TI();LL.exports={searchByConditions:O4,searchByHash:N4,searchByValue:b4,search:y4};var zS=ss(),{transformReq:JS}=G(),A4=CL();async function O4(e){return JS(e),zS.searchByConditions(e)}a(O4,"searchByConditions");async function N4(e){JS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zS.searchByHash(e))r&&t.push(r);return t}a(N4,"searchByHash");async function b4(e){JS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zS.searchByValue(e))t.push(r);return t}a(b4,"searchByValue");function y4(e,t){try{let r=new R4(e);r.validate(),new A4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(y4,"search")});var zn=p((Qme,UL)=>{"use strict";var Vu=require("crypto"),I4=Q(),{CONFIG_PARAMS:w4}=A(),PL="aes-256-cbc",C4=32,L4=16,jS=64,ML=32,D4=jS+ML,DL=new Map;UL.exports={encrypt:P4,decrypt:M4,createNatsTableStreamName:U4};function P4(e){let t=Vu.randomBytes(C4),r=Vu.randomBytes(L4),s=Vu.createCipheriv(PL,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(P4,"encrypt");function M4(e){let t=e.substr(0,jS),r=e.substr(jS,ML),s=e.substr(D4,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Vu.createDecipheriv(PL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(M4,"decrypt");function U4(e,t){let r=I4.get(w4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=DL.get(r);return s||(s=Vu.createHash("md5").update(r).digest("hex"),DL.set(r,s)),s}a(U4,"createNatsTableStreamName")});var Bi=p((jme,BL)=>{"use strict";var Jme=lr(),tf=M(),vL=Bd(),v4=zn(),rf=G(),{handleHDBError:sf,hdb_errors:B4}=Z(),{HDB_ERROR_MSGS:nf,HTTP_STATUS_CODES:XS}=B4,H4=Q();H4.initSync();var{getDatabases:ZS}=(fe(),te(Pe));BL.exports={describeAll:q4,describeTable:of,describeSchema:G4};async function q4(e){try{let t=rf.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 _ in n){i[_]=!0,!t&&!s&&(o[_]=e.hdb_user.role.permission[_].describe);let d=n[_];for(let f in d)try{let E;if(t||s)E=await of({schema:_,table:f,exact_count:u});else if(r&&r[_].describe&&r[_].tables[f].describe){let h=r[_].tables[f].attribute_permissions;E=await of({schema:_,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){tf.error(E)}}let l={};for(let _ in c)t||s?(l[c[_].schema]==null&&(l[c[_].schema]={}),l[c[_].schema][c[_].name]=c[_],i[c[_].schema]&&delete i[c[_].schema]):o[c[_].schema]&&(l[c[_].schema]==null&&(l[c[_].schema]={}),l[c[_].schema][c[_].name]=c[_],i[c[_].schema]&&delete i[c[_].schema]);for(let _ in i)t||s?l[_]={}:o[_]&&(l[_]={});return l}catch(t){return tf.error("Got an error in describeAll"),tf.error(t),sf(new Error,nf.DESCRIBE_ALL_ERR)}}a(q4,"describeAll");async function of(e,t){rf.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=vL.describe_table(e);if(i)throw i;let c=ZS()[r];if(!c)throw sf(new Error,nf.SCHEMA_NOT_FOUND(e.schema),XS.NOT_FOUND);let u=c[s];if(!u)throw sf(new Error,nf.TABLE_NOT_FOUND(e.schema,e.table),XS.NOT_FOUND);function l(f){_.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(l,"pushAtt");let _=[];if(n){let f={};n.forEach(E=>{E.describe&&(f[E.attribute_name]=!0)}),u.attributes.forEach(E=>{f[E.name]&&l(E)})}else u.attributes?.forEach(f=>l(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:_};d.clustering_stream_name=v4.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){tf.warn(`unable to stat table dbi due to ${f}`)}return d}a(of,"descTable");async function G4(e){rf.transformReq(e);let t=vL.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 sf(new Error,nf.SCHEMA_NOT_FOUND(e.schema),XS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),rf.isEmpty(u)||u.describe){let l=await of({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(G4,"describeSchema")});var ns=p((tpe,xL)=>{var F4=kn(),{callbackify:qL,promisify:x4}=require("util"),{getDatabases:GL}=(fe(),te(Pe));xL.exports={setSchemaDataToGlobal:HL,getTableSchema:k4,getSystemSchema:$4,setSchemaDataToGlobalAsync:x4(HL)};var FL=Bi(),Zme=qL(FL.describeAll),epe=qL(FL.describeTable);function HL(e){global.hdb_schema=GL(),e&&e()}a(HL,"setSchemaDataToGlobal");function k4(e,t,r){let s=GL()[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(k4,"getTableSchema");function $4(){return F4}a($4,"getSystemSchema")});var _r=p((spe,YL)=>{"use strict";var cf=Xp(),Bt=G(),V4=require("util"),uf=ss(),Y4=ns(),kL=M(),{handleHDBError:Po,hdb_errors:K4}=Z(),{HTTP_STATUS_CODES:Mo}=K4,W4=V4.promisify(Y4.getTableSchema),Q4="updated",$L="inserted",VL="upserted";YL.exports={insert:J4,update:j4,upsert:X4,validation:z4,flush:Z4};async function z4(e){if(Bt.isEmpty(e))throw new Error("invalid update parameters defined.");if(Bt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Bt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await W4(e.schema,e.table),r=cf(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&&Bt.isEmptyOrZeroLength(c[s]))throw kL.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(!Bt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw kL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Bt.isEmpty(c[s])&&c[s]!==""&&n.has(Bt.autoCast(c[s]))&&(c.skip=!0),n.add(Bt.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(z4,"validation");async function J4(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=cf(e);if(t)throw Po(new Error,t.message,Mo.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Po(new Error,r,Mo.BAD_REQUEST);let s=await uf.createRecords(e);return af($L,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(J4,"insertData");async function j4(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=cf(e);if(t)throw Po(new Error,t.message,Mo.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Po(new Error,r,Mo.BAD_REQUEST);let s=await uf.updateRecords(e);return Bt.isEmpty(s.existing_rows)?af(Q4,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):af(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(j4,"updateData");async function X4(e){if(e.operation!=="upsert")throw Po(new Error,"invalid operation, must be upsert",Mo.INTERNAL_SERVER_ERROR);let t=cf(e);if(t)throw Po(new Error,t.message,Mo.BAD_REQUEST);Bt.transformReq(e);let r=Bt.checkSchemaTableExist(e.schema,e.table);if(r)throw Po(new Error,r,Mo.BAD_REQUEST);let s=await uf.upsertRecords(e);return af(VL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(X4,"upsertData");function af(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===$L?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===VL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(af,"returnObject");function Z4(e){return Bt.transformReq(e),uf.flush(e.schema,e.table)}a(Z4,"flush")});var tT=p((ipe,QL)=>{var e3=Ye(),eT=require("joi"),{hdb_table:t3,hdb_database:KL}=cn(),WL={schema:KL,database:KL,table:t3},r3={date:eT.date().iso().required()},s3={timestamp:eT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};QL.exports=function(e,t){let r=t==="timestamp"?{...WL,...s3}:{...WL,...r3},s=eT.object(r);return e3.validateBySchema(e,s)}});var jL=p((ope,JL)=>{var n3=Ye(),rT=require("joi"),{hdb_table:i3,hdb_database:zL}=cn(),o3=rT.object({schema:zL,database:zL,table:i3,hash_values:rT.array().required(),ids:rT.array()});JL.exports=function(e){return n3.validateBySchema(e,o3)}});var oT=p((ape,XL)=>{"use strict";var sT=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}},nT=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}},iT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};XL.exports={InsertObject:sT,NoSQLSeachObject:nT,DeleteResponseObject:iT}});var Bo=p((upe,sD)=>{"use strict";var eD=tT(),a3=jL(),Uo=G(),ZL=require("moment"),tD=M(),{promisify:c3,callbackify:u3}=require("util"),vo=A(),l3=ns(),aT=c3(l3.getTableSchema),cT=ss(),{DeleteResponseObject:_3}=oT(),{handleHDBError:Hi,hdb_errors:d3}=Z(),{HDB_ERROR_MSGS:lf,HTTP_STATUS_CODES:qi}=d3,f3="records successfully deleted",E3=u3(rD);sD.exports={delete:E3,deleteRecord:rD,deleteFilesBefore:h3,deleteAuditLogsBefore:m3};async function h3(e){let t=eD(e,"date");if(t)throw Hi(t,t.message,qi.BAD_REQUEST,void 0,void 0,!0);if(Uo.transformReq(e),!ZL(e.date,ZL.ISO_8601).isValid())throw Hi(new Error,lf.INVALID_DATE,qi.BAD_REQUEST,vo.LOG_LEVELS.ERROR,lf.INVALID_DATE,!0);let s=Uo.checkSchemaTableExist(e.schema,e.table);if(s)throw Hi(new Error,s,qi.NOT_FOUND,vo.LOG_LEVELS.ERROR,s,!0);let n=await cT.deleteRecordsBefore(e);if(await aT(e.schema,e.table),tD.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(h3,"deleteFilesBefore");async function m3(e){let t=eD(e,"timestamp");if(t)throw Hi(t,t.message,qi.BAD_REQUEST,void 0,void 0,!0);if(Uo.transformReq(e),isNaN(e.timestamp))throw Hi(new Error,lf.INVALID_VALUE("Timestamp"),qi.BAD_REQUEST,vo.LOG_LEVELS.ERROR,lf.INVALID_VALUE("Timestamp"),!0);let r=Uo.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,qi.NOT_FOUND,vo.LOG_LEVELS.ERROR,r,!0);let s=await cT.deleteAuditLogsBefore(e);return await aT(e.schema,e.table),tD.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(m3,"deleteAuditLogsBefore");async function rD(e){e.ids&&(e.hash_values=e.ids);let t=a3(e);if(t)throw Hi(t,t.message,qi.BAD_REQUEST,void 0,void 0,!0);Uo.transformReq(e);let r=Uo.checkSchemaTableExist(e.schema,e.table);if(r)throw Hi(new Error,r,qi.NOT_FOUND,vo.LOG_LEVELS.ERROR,r,!0);try{await aT(e.schema,e.table);let s=await cT.deleteRecords(e);return Uo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${f3}`),s}catch(s){if(s.message===vo.SEARCH_NOT_FOUND_MESSAGE){let n=new _3;return n.message=vo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(rD,"deleteRecord")});var _f=p((_pe,oD)=>{var p3=require("crypto"),nD=9;function S3(e){let t=g3(nD),r=iD(e+t);return t+r}a(S3,"createHash");function T3(e,t){let r=e.substr(0,nD),s=r+iD(t+r);return e===s}a(T3,"validateHash");function g3(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(g3,"generateSalt");function iD(e){return p3.createHash("md5").update(e).digest("hex")}a(iD,"md5");oD.exports={hash:S3,validate:T3}});var cD=p((fpe,aD)=>{var uT=Ye(),Wt={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 R3(e){return Wt.password.presence=!0,Wt.username.presence=!0,Wt.role.presence=!0,Wt.active.presence=!0,uT.validateObject(e,Wt)}a(R3,"addUserValidation");function A3(e){return Wt.password.presence=!1,Wt.username.presence=!0,Wt.role.presence=!1,Wt.active.presence=!1,uT.validateObject(e,Wt)}a(A3,"alterUserValidation");function O3(e){return Wt.password.presence=!1,Wt.username.presence=!0,Wt.role.presence=!1,Wt.active.presence=!1,uT.validateObject(e,Wt)}a(O3,"dropUserValidation");aD.exports={addUserValidation:R3,alterUserValidation:A3,dropUserValidation:O3}});var ke=p((mpe,lD)=>{"use strict";var{platform:hpe}=require("os"),N3="nats-server.zip",lT="nats-server",b3=process.platform==="win32"?`${lT}.exe`:lT,_T="HDB",y3=/^[^\s.,*>]+$/,uD="__request__",I3=a(e=>`${e}.${uD}`,"REQUEST_SUBJECT"),w3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},C3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},L3={HUB:"hub.pid",LEAF:"leaf.pid"},D3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},P3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:_T,deliver_subject:"__HDB__.WORKQUEUE"},M3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:_T,deliver_subject:"HDB.SCHEMAQUEUE"},U3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:_T,deliver_subject:"HDB.USERQUEUE"},v3={SUCCESS:"success",ERROR:"error"},B3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},H3={TXN:"txn",MSGID:"msgid"},qa={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},q3={[qa.ERR]:1,[qa.WRN]:2,[qa.INF]:3,[qa.DBG]:4,[qa.TRC]:5},G3={debug:"-D",trace:"-DVV"};lD.exports={NATS_SERVER_ZIP:N3,NATS_SERVER_NAME:lT,NATS_BINARY_NAME:b3,PID_FILES:L3,NATS_CONFIG_FILES:C3,SERVER_SUFFIX:D3,WORK_QUEUE_CONSUMER_NAMES:P3,SCHEMA_QUEUE_CONSUMER_NAMES:M3,USER_QUEUE_CONSUMER_NAMES:U3,NATS_TERM_CONSTRAINTS_RX:y3,REQUEST_SUFFIX:uD,UPDATE_REMOTE_RESPONSE_STATUSES:v3,CLUSTER_STATUS_STATUSES:B3,REQUEST_SUBJECT:I3,SUBJECT_PREFIXES:H3,MSG_HEADERS:w3,LOG_LEVELS:qa,LOG_LEVEL_FLAGS:G3,LOG_LEVEL_HIERARCHY:q3}});var dD=p((Spe,_D)=>{"use strict";var df=A(),ff=class{static{a(this,"BaseLicense")}constructor(t=0,r=df.RAM_ALLOCATION_ENUM.DEFAULT,s=df.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},dT=class extends ff{static{a(this,"ExtendedLicense")}constructor(t=0,r=df.RAM_ALLOCATION_ENUM.DEFAULT,s=df.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};_D.exports={BaseLicense:ff,ExtendedLicense:dT}});var Yu=p((gpe,SD)=>{"use strict";var Fa=require("fs-extra"),fD=_f(),ED=require("crypto"),F3=require("moment"),x3=require("uuid").v4,Qt=M(),ET=require("path"),k3=G(),Gi=A(),$3=dD().ExtendedLicense,Ga="invalid license key format",V3="061183",Y3="mofi25",K3="aes-256-cbc",W3=16,Q3=32,hD=Q();hD.initSync();var fT;SD.exports={validateLicense:mD,generateFingerPrint:J3,licenseSearch:pD,getLicense:Z3};function hT(){return ET.join(hD.getHdbBasePath(),Gi.LICENSE_KEY_DIR_NAME,Gi.LICENSE_FILE_NAME)}a(hT,"getLicenseDirPath");function z3(){let e=hT();return ET.join(e,Gi.LICENSE_FILE_NAME)}a(z3,"getLicenseFilePath");function mT(){let e=hT();return ET.join(e,Gi.REG_KEY_FILE_NAME)}a(mT,"getFingerPrintFilePath");async function J3(){let e=mT();try{return await Fa.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await j3();throw Qt.error(`Error writing fingerprint file to ${e}`),Qt.error(t),new Error("There was an error generating the fingerprint")}}a(J3,"generateFingerPrint");async function j3(){let e=x3(),t=fD.hash(e),r=mT();try{await Fa.mkdirp(hT()),await Fa.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Qt.error(`Error writing fingerprint file to ${r}`),Qt.error(s),new Error("There was an error generating the fingerprint")}return t}a(j3,"writeFingerprint");function mD(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Gi.RAM_ALLOCATION_ENUM.DEFAULT,version:Gi.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Qt.error("empty license key passed to validate."),r;let s=mT(),n=!1;try{n=Fa.statSync(s)}catch(i){Qt.error(i)}if(n){let i;try{i=Fa.readFileSync(s,"utf8")}catch{Qt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Y3),c=o[1];c=Buffer.concat([Buffer.from(c)],W3);let u=Buffer.concat([Buffer.from(i)],Q3),l=ED.createDecipheriv(K3,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(o[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let E=X3(o[0],i);if(E)_=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Ga),Qt.error(Ga),new Error(Ga)}let d;if(isNaN(_))try{d=JSON.parse(_),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(Ga),Qt.error(Ga),new Error(Ga)}else r.exp_date=_;r.exp_date<F3().valueOf()&&(r.valid_date=!1),fD.validate(o[1],`${V3}${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||Qt.error("Invalid licence"),r}a(mD,"validateLicense");function X3(e,t){try{let r=ED.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Qt.warn("Check old license failed")}}a(X3,"checkOldLicense");function pD(){let e=new $3,t=[];try{t=Fa.readFileSync(z3(),"utf-8").split(Gi.NEW_LINE)}catch(r){r.code==="ENOENT"?Qt.info("no license file found"):Qt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(k3.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mD(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){Qt.error("There was an error parsing the license string."),Qt.error(n),e.ram_allocation=Gi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return fT=e,e}a(pD,"licenseSearch");async function Z3(){return fT||await pD(),fT}a(Z3,"getLicense")});var dr=p((bpe,vD)=>{"use strict";var OD="username is required",ND="nothing to update, must supply active, role or password to update",bD="password cannot be an empty string",yD="If role is specified, it cannot be empty.",ID="active must be true or false";vD.exports={addUser:cX,alterUser:uX,dropUser:_X,getSuperUser:hX,userInfo:dX,listUsers:hf,listUsersExternal:fX,setUsersToGlobal:ka,findAndValidateUser:MD,getClusterUser:mX,USERNAME_REQUIRED:OD,ALTERUSER_NOTHING_TO_UPDATE:ND,EMPTY_PASSWORD:bD,EMPTY_ROLE:yD,ACTIVE_BOOLEAN:ID};var wD=_r(),eX=Bo(),ST=_f(),CD=cD(),LD=lr(),TT=Kn(),Gr=G(),DD=require("validate.js"),he=M(),{promisify:tX}=require("util"),gT=zn(),TD=A(),gD=ke(),rX=rt(),Ape=Q(),Ope=Yu(),sX=kn(),{table:Npe}=(fe(),te(Pe)),{handleHDBError:fn,hdb_errors:nX}=Z(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:pT,HDB_ERROR_MSGS:xa}=nX,{UserEventMsg:RT}=Cs(),RD=require("lodash"),{server:AT}=(Dr(),te(po)),iX=M();AT.getUser=MD;var PD={username:!0,active:!0,role:!0,password:!0},AD=new Map,Ef=LD.searchByValue,oX=LD.searchByHash,aX=tX(eX.delete);async function cX(e){let t=DD.cleanAttributes(e,PD),r=CD.addUserValidation(t);if(r)throw fn(new Error,r.message,En.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 Ef(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 fn(new Error,xa.ROLE_NAME_NOT_FOUND(t.role),En.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw fn(new Error,xa.DUP_ROLES_FOUND(t.role),En.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=gT.encrypt(t.password)),t.password=ST.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wD.insert(i)}catch(u){throw he.error("There was an error searching for a user."),he.error(u),u}he.debug(o);try{await ka()}catch(u){throw he.error("Got an error setting users to global"),he.error(u),u}if(o.skipped_hashes.length===1)throw fn(new Error,xa.USER_ALREADY_EXISTS(t.username),En.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],TT.signalUserChange(new RT(process.pid)),`${c.username} successfully added`}a(cX,"addUser");async function uX(e){let t=DD.cleanAttributes(e,PD);if(Gr.isEmptyOrZeroLength(t.username))throw new Error(OD);if(Gr.isEmptyOrZeroLength(t.password)&&Gr.isEmptyOrZeroLength(t.role)&&Gr.isEmptyOrZeroLength(t.active))throw new Error(ND);if(!Gr.isEmpty(t.password)&&Gr.isEmptyOrZeroLength(t.password.trim()))throw new Error(bD);if(!Gr.isEmpty(t.active)&&!Gr.isBoolean(t.active))throw new Error(ID);let r=lX(t.username);if(!Gr.isEmpty(t.password)&&!Gr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=gT.encrypt(t.password)),t.password=ST.hash(t.password)),t.role==="")throw new Error(yD);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 Ef(i)||[])}catch(c){throw he.error("Got an error searching for a role."),he.error(c),c}if(!o||o.length===0){let c=xa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw he.error(c),fn(new Error,c,En.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=xa.ALTER_USER_DUP_ROLES(t.role);throw he.error(c),fn(new Error,c,En.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 wD.update(s)}catch(i){throw he.error("Error during update."),he.error(i),i}try{await ka()}catch(i){throw he.error("Got an error setting users to global"),he.error(i),i}return TT.signalUserChange(new RT(process.pid)),n}a(uX,"alterUser");function lX(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(lX,"isClusterUser");async function _X(e){try{let t=CD.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Gr.isEmpty(global.hdb_users.get(e.username)))throw fn(new Error,xa.USER_NOT_EXIST(e.username),En.NOT_FOUND,void 0,void 0,!0);let s;try{s=await aX(r)}catch(n){throw he.error("Got an error deleting a user."),he.error(n),n}he.debug(s);try{await ka()}catch(n){throw he.error("Got an error setting users to global."),he.error(n),n}return TT.signalUserChange(new RT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(_X,"dropUser");async function dX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await oX(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(dX,"userInfo");async function fX(){let e;try{e=await hf()}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(fX,"listUsersExternal");async function hf(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Ef(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]=RD.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 Ef(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=RD.cloneDeep(o),o.role=r[o.role],EX(o.role),i.set(o.username,o);return i}catch(e){throw he.error("got an error listing users"),he.error(e),Gr.errorizeMessage(e)}return null}a(hf,"listUsers");function EX(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(sX)){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(EX,"appendSystemTablesToRole");async function ka(){try{let e=await hf();global.hdb_users=e}catch(e){throw he.error(e),e}}a(ka,"setUsersToGlobal");async function MD(e,t,r=!0){global.hdb_users||await ka();let s=global.hdb_users.get(e);if(!s)throw fn(new Error,pT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw fn(new Error,pT.USER_INACTIVE,En.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(AD.get(t)===s.password)return n;if(ST.validate(s.password,t))AD.set(t,s.password);else throw fn(new Error,pT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0)}return n}a(MD,"findAndValidateUser");async function hX(){global.hdb_users||await ka();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(hX,"getSuperUser");async function mX(){let e=await hf(),t=rX.getConfigFromFile(TD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Gr.isEmpty(r)&&r?.role?.role===TD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=gT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gD.SERVER_SUFFIX.ADMIN,r}a(mX,"getClusterUser");var UD=[];AT.invalidateUser=function(e){for(let t of UD)try{t(e)}catch(r){iX.error("Error invalidating user",r)}};AT.onInvalidatedUser=function(e){UD.push(e)}});var Wu=p((Cpe,GD)=>{"use strict";var Ho=M(),Fr=A(),pX=oI(),Ipe=ns(),wpe=Bi(),SX=dr(),{validateEvent:BD}=Cs(),Ku=ss(),TX=require("process"),{resetDatabases:gX}=(fe(),te(Pe)),RX={[Fr.ITC_EVENT_TYPES.SCHEMA]:AX,[Fr.ITC_EVENT_TYPES.USER]:qD};async function AX(e){let t=BD(e);if(t){Ho.error(t);return}Ho.trace("ITC schemaHandler received schema event:",e),await pX(e.message),await OX(e.message)}a(AX,"schemaHandler");async function OX(e){try{Ku.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ku.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ku.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=gX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ho.error(t)}}a(OX,"syncSchemaMetadata");var HD=[];async function qD(e){try{try{Ku.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ku.resetReadTxn(Fr.SYSTEM_SCHEMA_NAME,Fr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ho.warn(r)}let t=BD(e);if(t){Ho.error(t);return}Ho.trace(`ITC userHandler ${Fr.HDB_ITC_CLIENT_PREFIX}${TX.pid} received user event:`,e),await SX.setUsersToGlobal();for(let r of HD)r()}catch(t){Ho.error(t)}}a(qD,"userHandler");qD.addListener=function(e){HD.push(e)};GD.exports=RX});var Cs=p((vpe,xD)=>{"use strict";var Dpe=M(),OT=G(),NX=A(),{ITC_ERRORS:Qu}=Pr(),{parentPort:Ppe,threadId:bX,isMainThread:yX,workerData:Mpe}=require("worker_threads"),{onMessageFromWorkers:IX,broadcast:Upe,broadcastWithAcknowledgement:wX}=Je();xD.exports={sendItcEvent:CX,validateEvent:FD,SchemaEventMsg:LX,UserEventMsg:DX};var mf;IX(async(e,t)=>{mf=mf||Wu(),FD(e),mf[e.type]&&await mf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function CX(e){return!yX&&e.message&&(e.message.originator=bX),wX(e)}a(CX,"sendItcEvent");function FD(e){if(typeof e!="object")return Qu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||OT.isEmpty(e.type))return Qu.MISSING_TYPE;if(!e.hasOwnProperty("message")||OT.isEmpty(e.message))return Qu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||OT.isEmpty(e.message.originator))return Qu.MISSING_ORIGIN;if(NX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Qu.INVALID_EVENT(e.type)}a(FD,"validateEvent");function LX(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(LX,"SchemaEventMsg");function DX(e){this.originator=e}a(DX,"UserEventMsg")});var Kn=p((qpe,YD)=>{"use strict";var kD=A(),Hpe=G(),pf=M(),$D=ky(),$a,{sendItcEvent:VD}=Cs();function PX(e){try{pf.trace("signalSchemaChange called with message:",e),$a=$a||Wu();let t=new $D(kD.ITC_EVENT_TYPES.SCHEMA,e);return $a.schema(t),VD(t)}catch(t){pf.error(t)}}a(PX,"signalSchemaChange");function MX(e){try{pf.trace("signalUserChange called with message:",e),$a=$a||Wu();let t=new $D(kD.ITC_EVENT_TYPES.USER,e);return $a.user(t),VD(t)}catch(t){pf.error(t)}}a(MX,"signalUserChange");YD.exports={signalSchemaChange:PX,signalUserChange:MX}});var Xu={};Fe(Xu,{addAnalyticsListener:()=>ju,recordAction:()=>xr,recordActionBinary:()=>is,setAnalyticsEnabled:()=>UX});function UX(e){tP=e}function xr(e,t,r,s,n){if(!tP)return;let i=t+(r?"-"+r:"");s!==void 0&&(i+="-"+s),n!==void 0&&(i+="-"+n);let o=gf.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let l=c;o.values=c=new Float32Array(u*2),c.set(l),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},gf.set(i,o)}Sf||vX()}function is(e,t,r,s,n){xr(!!e,t,r,s,n)}function ju(e){nP.push(e)}function vX(){Sf=performance.now(),setTimeout(async()=>{let e=performance.now()-Sf;Sf=0;let t=[],r={time:Date.now(),period:e,threadId:qo.threadId,metrics:t};for(let[n,i]of gf){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 iP){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===_){let S=l[l.length-1];typeof S=="number"?l[l.length-1]={value:S,count:1+h}:S.count+=h}else l.push(h>1?{value:E,count:h}:E),_=E;u=f}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:l,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 oP()}let s=process.memoryUsage();t.push({metric:"memory",threadId:qo.threadId,byThread:!0,...s});for(let n of nP)n(t);gf=new Map,qo.parentPort?qo.parentPort.postMessage({type:sP,report:r}):uP({report:r})},rP).unref()}async function BX(e,t=6e4){let r=yT(),s=aP(),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=[],l;for(let{key:h,value:S}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!S)continue;if(i){if(h>i+t)break}else i=h;l=h;let{metrics:m,threadId:R}=S;for(let g of m||[]){let{path:O,method:V,type:$,metric:F,count:C,total:Y,distribution:B,threads:k,...ie}=g;C||(C=1);let we=F+(O?"-"+O:"");V!==void 0&&(we+="-"+V),$!==void 0&&(we+="-"+$);let ce=o.get(we);if(ce){if(ce.threads){let De=ce.threads[R];if(De)ce=De;else{ce.threads[R]=Object.assign({},ie);continue}}ce.count||(ce.count=1);let Yt=ce.count;for(let De in ie){let Js=ie[De];typeof Js=="number"&&(ce[De]=(ce[De]*Yt+Js*C)/(Yt+C))}ce.count+=C,Y>=0&&(ce.total+=Y,ce.ratio=ce.total/ce.count)}else ce=Object.assign({period:t},g),delete ce.distribution,o.set(we,ce),ce.byThread&&(ce.threads=[],ce.threads[R]=Object.assign({},ie),u.push(ce));if(B){B=B.map(De=>typeof De=="number"?{value:De,count:1}:De);let Yt=c.get(we);Yt?Yt.push(...B):c.set(we,B)}}await oP()}for(let h of u){let{path:S,method:m,type:R,metric:g,count:O,total:V,distribution:$,threads:F,...C}=h;F=F.filter(Y=>Y);for(let Y in C){if(typeof h[Y]!="number")continue;let B=0;for(let k of F){let ie=k[Y];typeof ie=="number"&&(B+=ie)}h[Y]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,S]of c){let m=o.get(h);S.sort((De,Js)=>De.value>Js.value?1:-1);let R=m.count-1,g=[],O=0,V=0,$;for(let De of iP){let Js=R*De;for(;O<Js;)$=S[V++],O+=$.count,V===1&&O--;let ma=S[V>1?V-2:0];$||($=S[0]),g.push($.value-($.value-ma.value)*(O-Js)/$.count)}let[F,C,Y,B,k,ie,we,ce,Yt]=g;Object.assign(m,{p1:F,p10:C,p25:Y,median:B,p75:k,p90:ie,p95:we,p99:ce,p999:Yt})}let _;for(let[h,S]of o)S.id=(0,Tf.getNextMonotonicTime)(),S.time=l,s.primaryStore.put(S.id,S,{append:!0}).then(m=>{m||s.primaryStore.put(S.id,S)}),_=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(_||E*10>f){let h=(0,Tf.getNextMonotonicTime)(),S={id:h,metric:"main-thread-utilization",idle:f-KD,active:E-WD,time:d,...process.memoryUsage()};s.primaryStore.put(h,S,{append:!0}).then(m=>{m||s.primaryStore.put(h,S)})}KD=f,WD=E}async function QD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function yT(){return zD||(zD=lt({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function aP(){return JD||(JD=lt({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function GX(){cP=!0;let e=(0,Ju.get)(bT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await BX(rP,e),await QD(yT(),HX),await QD(aP(),qX)},Math.min(e/2,2147483647)).unref()}function uP(e,t){let r=e.report;r.threadId=t?.threadId||qo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(jD+=s.mean*s.count);r.totalBytesProcessed=jD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(XD.get(t))}),XD.set(t,t.performance.eventLoopUtilization())),r.id=(0,Tf.getNextMonotonicTime)(),yT().primaryStore.put(r.id,r),cP||GX(),FX&&(lP=kX(r))}async function kX(e){if(await lP,!Fi){let r=(0,zu.dirname)((0,eP.getLogFilePath)());try{Fi=await(0,NT.open)((0,zu.join)(r,"analytics.log"),"r+")}catch{Fi=await(0,NT.open)((0,zu.join)(r,"analytics.log"),"w+")}}let t=(await Fi.stat()).size;if(t>xX){let r=Buffer.alloc(t);await Fi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Fi.write(r,{position:0}),await Fi.truncate(r.length),t=r.length}await Fi.write(JSON.stringify(e)+`
7
- `,t)}var qo,ZD,eP,zu,NT,Tf,Ju,bT,gf,tP,Sf,rP,sP,nP,iP,KD,WD,oP,HX,qX,zD,JD,cP,jD,XD,FX,lP,Fi,xX,Jn=ge(()=>{qo=require("worker_threads"),ZD=P(Je());fe();eP=P(M()),zu=require("path"),NT=require("fs/promises"),Tf=P(or()),Ju=P(Q()),bT=P(A());Dr();(0,Ju.initSync)();gf=new Map,tP=(0,Ju.get)(bT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(UX,"setAnalyticsEnabled");a(xr,"recordAction");gt.recordAnalytics=xr;a(is,"recordActionBinary");Sf=0,rP=1e3,sP="analytics-report",nP=[];a(ju,"addAnalyticsListener");iP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(vX,"sendAnalytics");a(BX,"aggregation");KD=0,WD=0,oP=a(()=>new Promise(setImmediate),"rest");a(QD,"cleanup");HX=36e5,qX=31536e6;a(yT,"getRawAnalyticsTable");a(aP,"getAnalyticsTable");(0,ZD.setChildListenerByType)(sP,uP);a(GX,"startScheduledTasks");jD=0,XD=new Map,FX=!1;a(uP,"recordAnalytics");xX=1e6;a(kX,"logAnalytics")});var DT={};Fe(DT,{coerceType:()=>bf,makeTable:()=>If,setServerUtilities:()=>zX,updateResource:()=>rl});function If(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,evictionMS:f,audit:E,trackDeletes:h}=e,{attributes:S}=e;S||(S=[]),Gy(i,u);let m=mp(i,s,u),R=0,g,O,V,$={},F=Promise.resolve(),C,Y,B;for(let J of S)(J.assignCreatedTime||J.name==="__createdtime__")&&(C=J),(J.assignUpdatedTime||J.name==="__updatedtime__")&&(Y=J),J.expiresAt&&(B=J),J.isPrimaryKey&&($=J);let k,ie=[],we=[],ce=1,Yt=2,De=864e5,Js,ma,tk=10,rk=6;E&&mN();class He 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=S;static expirationTimer;static createdTimeProperty=C;static updatedTimeProperty=Y;static sources=[];static get expirationMS(){return d}static dbisDB=_;static schemaDefined=l;static sourcedFrom(T,N){return N&&(this.sourceOptions=N,(N.expiration||N.eviction||N.scanInterval)&&this.setTTLExpiration(N)),this.sources[N?.runFirst?"unshift":"push"](T),O=T&&T.get&&(!T.get.reliesOnPrototype||T.prototype.get),(async()=>{let U=!1,b=a(async w=>{let I=w.value,v=w.table?Xe[c][w.table]:He;if(c===vs.SYSTEM_SCHEMA_NAME&&(w.table===vs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===vs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(U=!0),w.id===void 0&&(w.id=I[v.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));w.source=T;let L=await v.getResource(w.id,w,Zu);switch(w.type){case"put":return L._writeUpdate(I,Zu);case"delete":return L._writeDelete(Zu);case"publish":return L._writePublish(I,Zu);case"invalidate":return L.invalidate(Zu);default:je.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=T.subscribe;w&&h==null&&(h=!0);let I=T.subscribeOnThisThread?T.subscribeOnThisThread((0,Go.getWorkerIndex)()):(0,Go.getWorkerIndex)()===0,v=w&&I&&await T.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(v)for await(let L of v)try{if(!(L.type==="transaction"?L.writes[0]:L)){je.error("Bad subscription event",L);continue}L.source=T;let W=ze(L,()=>{if(L.type==="transaction"){let ne=[];for(let X of L.writes){X[oe]=L;try{ne.push(b(X))}catch(re){throw re.message+=" writing "+JSON.stringify(X)+" of event "+JSON.stringify(L),re}}return Promise.all(ne)}else if(L.type==="define_schema"){let ne=this.attributes.slice(0),X;for(let re of L.attributes)ne.find(Oe=>Oe.name===re.name)||(ne.push(re),X=!0);X&&(lt({table:n,database:c,attributes:ne,origin:"cluster"}),nl.signalSchemaChange(new il.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(L)});U&&(await W,nl.signalUserChange(new il.UserEventMsg(process.pid))),L.onCommit&&(W?.then?W.then(L.onCommit):L.onCommit())}catch(K){je.error("error in subscription handler",K)}}catch(w){je.error(w)}})(),this}static getResource(T,N,U){let b=super.getResource(T,N,U);if(T!=null)try{if(b.hasOwnProperty(Re))return b;if(typeof T=="object"&&T&&!Array.isArray(T))throw new Error(`Invalid id ${JSON.stringify(T)}`);let w=!U?.async||i.cache?.get(T),I=Ni(N),v=I.getReadTxn();if(v?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return EN(T,N,{transaction:v},w,L=>{if(L?rl(b,L):b[Re]=null,N.onlyIfCached&&N.noCacheStore){if(!b.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(U?.ensureLoaded){let K=Nm(T,L,N,b);if(K)return I?.disregardReadTxn(),b[wT]=!0,LT(K,W=>(rl(b,W),b))}return b})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(T)),w}return b}ensureLoaded(){let T=Nm(this[ye],this[hn],this[oe]);if(T)return this[wT]=!0,LT(T,N=>{this[hn]=N,this[Re]=N.value,this[Nf]=N.version})}static setTTLExpiration(T){if(typeof T=="number")d=T*1e3,f||(f=0);else if(T&&typeof T=="object")d=T.expiration*1e3,f=(T.eviction||0)*1e3,De=T.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");De=De||(d+f)/4,bm()}static enableAuditing(T=!0){E=T,T&&mN(),He.audit=T}static coerceId(T){return T===""?null:bf(T,$)}static async dropTable(){if(delete Xe[c][n],c===o){for(let T of S)_.remove(He.tableName+"/"+T.name),r[T.name]?.drop();_.remove(He.tableName+"/"),i.drop(),await _.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));nl.signalSchemaChange(new il.SchemaEventMsg(process.pid,vs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(T,N){if(T&&typeof T=="object"&&!Array.isArray(T)&&T.url===""){let U=this.getRecordCount();return{recordCount:U.recordCount,estimatedRecordRange:U.estimatedRange,records:"./",name:n,database:c,attributes:S}}return super.get(T,N)}get(T){if(typeof T=="string")return this.getProperty(T);if(this[nn])return this.search(T);if(T?.property)return this.getProperty(T.property);if(this.doesExist()||T?.ensureLoaded===!1||this[oe]?.returnNonexistent)return this}static allowRead(T,N){if(!T)return!1;let U=T.role.permission;if(U.super_user)return!0;if(U[n]?.read){let b=U[n].attribute_permissions;if(b){N||(N={});let w=N.select;if(w){let I=CT(b,"read");N.select=w.filter(v=>I[v])}else N.select=b.filter(I=>I.read).map(I=>I.attribute_name);return N}else return!0}}allowUpdate(T,N,U){if(!T)return!1;let b=T.role.permission;if(b.super_user)return!0;if(b[n]?.update){let w=b[n].attribute_permissions;if(w){let I=CT(w,"update");for(let v in N)if(!I[v])return!1;if(U)for(let v of w){let L=v.attribute_name;!v.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(T,N){return this.allowUpdate(T,{})}static allowCreate(T,N){if(!T)return!1;let U=T.role.permission;if(U.super_user)return!0;if(U[n]?.insert){let b=U[n].attribute_permissions;if(b){let w=CT(b,"insert");for(let I in N)if(!w[I])return!1}else return!0}}static allowDelete(T){if(!T)return!1;let N=T.role.permission;if(N.super_user||N[n]?.delete)return!0}update(T,N){if(!Ni(this[oe]))throw new Error("Can not update a table resource outside of a transaction");if(T===!1)return this;let b;if(typeof T=="object"&&T){if(N)for(let w in this[Re])T[w]===void 0&&(T[w]=void 0);b=this[ar],b&&(T=Object.assign(b,T)),this[ar]=b=T}return this._writeUpdate(this),this}invalidate(T){Ni(this[oe]).addWrite({key:this[ye],store:i,invalidated:!0,entry:this[hn],nodeName:this[oe]?.nodeName,commit:(U,b)=>{if(b?.version>U)return;let w=null;for(let L in r)w||(w={}),w[L]=this.getProperty(L);let I,v=this[ye];for(let L of He.sources){if(this[oe]?.source===L||this[oe]?.source?.isEqual?.(L))break;if(L.shouldReceiveInvalidations){let K=L.invalidate?.(v,this);I=I?Promise.all([I,K]):K}}return m(v,w,this[hn],U,Rf,E,this[oe],0,"invalidate"),I}})}static evict(T,N,U){let b=this.Source,w;if(!((O||E)&&(!N||(w=i.getEntry(T),!w||!N)||w.version!==U))){if(O){if(i.hasLock(T,w.version))return;let I;for(let v in r)I||(I={}),I[v]=N[v];if(I){m(T,I,w,U,Af,null,null,0,null,!0);return}}if(E)m(T,null,w,U,Af,null,null,0,null,!0);else return i.remove(T,U)}}lock(){throw new Error("Not yet implemented")}static operation(T,N){return T.table||=n,T.schema||=c,pP.operation(T,N)}async put(T){this.update(T,!0)}_writeUpdate(T,N){let U=this[oe],b=Ni(U);if(this[ye]===void 0)throw new Error("Can not save record without an id");let w,I=this[ye];this[IT]=!0;let v={key:I,store:i,entry:this[hn],nodeName:U?.nodeName,validate:()=>{!T[dP]||ud(T)?this.validate(T):b.removeWrite(v)},commit:(L,K,W)=>{let ne;W&&(U&&K?.version>(U.lastModified||0)&&(U.lastModified=K.version),rl(this,K));let X=K?.value;if(!w){if(w=!0,this[oe]?.source?T=au(T):(t&&T[t]!==I&&(T[t]=I),Y&&(T[Y.name]=Y.type==="Date"?new Date(L):Y.type==="String"?new Date(L).toISOString():L),C&&(X?T[C.name]=X[C.name]:T[C.name]=C.type==="Date"?new Date(L):C.type==="String"?new Date(L).toISOString():L),T=au(T)),T[Re])throw new Error("Can not assign a record with a record property");this[Re]=T;for(let re of He.sources){if(U?.source===re||U?.source?.isEqual?.(re))break;if(re?.put&&(!re.put.reliesOnPrototype||re.prototype.put)){let Oe=re.put(I,T,this);ne=ne?Promise.all([ne,Oe]):Oe}}}return this[IT]=!1,je.trace("Checking timestamp for put",I,K?.version>L,K?.version,L),K?.version>L||(Om(I,X,T),m(I,T,K,L,0,E,U,U.expiresAt||(d?d+Date.now():0))),ne}};b.addWrite(v)}async delete(T){if(typeof T=="string")return this.deleteProperty(T);if(this[nn]){for await(let N of this.search(T))(await He.getResource(N[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(T);return}return this[Re]?this._writeDelete(T):!1}_writeDelete(T){let N=Ni(this[oe]),U,b=this[ye],w;return N.addWrite({key:b,store:i,resource:this,nodeName:this[oe]?.nodeName,commit:(I,v,L)=>{let K=v?.value;if(L){let W=this[oe];W&&v?.version>(W.lastModified||0)&&(W.lastModified=v.version),rl(this,v)}if(!U){U=!0;for(let W of He.sources){if(this[oe]?.source===W||this[oe]?.source?.isEqual?.(W))break;if(W?.delete&&(!W.delete.reliesOnPrototype||W.prototype.delete)){let ne=W.delete(b,this);w=w?Promise.all([w,ne]):ne}}}if(!(v?.version>I))return Om(this[ye],K),je.trace("Write delete entry",E||h,I),E||h?(m(b,null,this[hn],I,0,E,this[oe],0,"delete"),E||bm()):i.remove(this[ye]),w}}),!0}search(T){let N=Ni(this[oe]);if(!T)throw new Error("No query provided");let U=T.reverse===!0,b=T.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(T)?T:T[Symbol.iterator]?Array.from(T):[],this[ye]&&(b=[{attribute:null,comparator:"prefix",value:this[ye]}].concat(b));for(let X of b){let re=X[0]??X.attribute,Oe=re==null?$:S.find(Ne=>Ne.name==re);if(Oe)Oe.type&&(X[1]===void 0?X.value=w(X.value,Oe):X[1]=w(X[1],Oe));else if(re!=null)throw(0,mn.handleHDBError)(new Error,`${re} is not a defined attribute`,404)}function w(X,re){return Array.isArray(X)?X.map(Oe=>bf(Oe,re)):bf(X,re)}a(w,"coerceTypedValues"),b.length>1&&(b=(0,hP.sortBy)(b,X=>{if(X.estimated_count===void 0){let re=X.comparator||X.search_type;if(re===tl.SEARCH_TYPES.EQUALS){let Oe=X[0]??X.attribute;if(Oe==null||Oe===t)X.estimated_count=1;else{let Ne=r[Oe];X.estimated_count=Ne?Ne.getValuesCount(X[1]??X.value):1/0}}else re===tl.SEARCH_TYPES.CONTAINS||re===tl.SEARCH_TYPES.ENDS_WITH||re==="ne"?X.estimated_count=1/0:re===tl.SEARCH_TYPES.STARTS_WITH||re==="prefix"?X.estimated_count=YX:X.estimated_count=VX}return X.estimated_count}));let I=N.getReadTxn();I.use();let v=T.select,L=b[0],K;if(!L)K=i.getRange(U?{end:!1,reverse:!0,transaction:I,lazy:v?.length<4}:{start:!1,transaction:I,lazy:v?.length<4}).map(({value:X})=>X?new Promise(re=>setImmediate(()=>re(X))):Of.SKIP);else{let X=np(L,I,U,He,T.allowFullScan);if(!T.operator||T.operator.toLowerCase()==="and"){let re=b.slice(1).map(ip);K=ne(X,re)}else{for(let Oe=1;Oe<b.length;Oe++){let Ne=b[Oe],Un=np(Ne,I,U,He,T.allowFullScan);X=X.concat(Un)}let re=new Set;X=X.filter(Oe=>re.has(Oe)?!1:(re.add(Oe),!0)),K=ne(X)}}(T.offset||T.limit!==void 0)&&(K=K.slice(T.offset,T.limit!==void 0?(T.offset||0)+T.limit:void 0)),K.onDone=()=>{I.done()};let W=this[oe];function ne(X,re){let Oe=re?.length,Ne={transaction:I,lazy:Oe>0||v?.length<4,alwaysPrefetch:!0},Un=T.ensureLoaded!==!1;function bi(kc,Ve){if(Un&&Ve!==void 0){let Cr=!W.onlyIfCached&&Nm(Ve,kc,W,this);if(Cr)return Cr.then(vn=>bi(vn))}let js=kc?.value;if(!js)return Of.SKIP;for(let Cr=0;Cr<Oe;Cr++)if(!re[Cr](js))return Of.SKIP;return js}return a(bi,"processEntry"),X.map(kc=>EN(kc,W,Ne,!1,bi))}return a(ne,"idsToRecords"),K}async subscribe(T){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||lt({table:n,database:c,schemaDefined:l,attributes:S,audit:!0}),T||(T={});let N=Hy(He,this[ye]??null,function(I,v,L){try{let K=v.getValue(i);this.send({id:I,timestamp:L,value:K,version:v.version,type:v.type})}catch(K){je.error(K)}},T.startTime,this[nn]),U=this[ye],b=T.previousCount;b>1e3&&(b=1e3);let w=T.startTime;if(this[nn]){if(w){if(b)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:v}of u.getRange({start:w,exclusiveStart:!0})){let L=vr(v,i);if(L.tableId!==s)continue;let K=L.recordId;(U==null||EP(U,K))&&N.send({id:K,timestamp:I,...L}),N.startTime=I}}else if(b){let I=[];for(let{key:v,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let K=vr(L);if(K.tableId!==s)continue;let W=K.recordId;if(U==null||EP(U,W)){let ne=K.getValue(i);if(I.push({id:W,timestamp:v,value:ne,version:K.version,type:K.type}),--b<=0)break}}catch(K){je.error("Error getting history entry",v,K)}for(let v=I.length;v>0;)N.send(I[--v]);I[0]&&(N.startTime=I[0].timestamp)}else if(!T.omitCurrent)for(let{key:I,value:v,version:L,localTime:K}of i.getRange({start:U??!1,end:U==null?void 0:[U,mP.MAXIMUM_KEY],versions:!0}))v&&N.send({id:I,version:L,timestamp:K,value:v})}else{b&&!w&&(w=0);let I=this[hn]?.localTime;if(je.trace("Subscription from",w,"from",U),w<I){let v=[],L=I;do{let K=u.get(L);if(K){T.omitCurrent=!0;let W=vr(K),ne=W.getValue(i);v.push({id:U,value:ne,timestamp:L,...W}),L=W.previousLocalTime}else break;b&&b--}while(L>w&&b!==0);for(let K=v.length;K>0;)N.send(v[--K]);N.startTime=I}!T.omitCurrent&&this.doesExist()&&N.send({id:U,version:this[Nf],timestamp:this[hn]?.localTime,value:this})}return T.listener&&N.on("data",T.listener),N}doesExist(){return!!(this[Re]||this[IT])}async publish(T,N){this._writePublish(T,N)}_writePublish(T,N){let U=Ni(this[oe]),b=this[ye]||null,w,I;U.addWrite({key:b,store:i,entry:this[hn],nodeName:this[oe]?.nodeName,validate:()=>{this.validate(T)},commit:(v,L,K)=>{if(!I){I=!0;for(let W of He.sources){if(this[oe]?.source===W||this[oe]?.source?.isEqual?.(W))break;if(W?.publish&&(!W.publish.reliesOnPrototype||W.prototype.publish)){let ne=W.publish(b,T,this);w=w?Promise.all([w,ne]):ne}}}L===void 0&&h&&!E&&bm(),m(b,L?.value??null,L,L?.version||v,0,!0,this[oe],L?.expiresAt,"message",!1,T)}})}validate(T){let N,U=a((b,w,I)=>{if(w.type&&b!=null)if(w.properties){typeof b!="object"&&(N||(N=[])).push(`Property ${I} must be an object${w.type?" ("+w.type+")":""}`);let v=w.properties;for(let L=0,K=v.length;L<K;L++){let W=v[L],ne=U(b[W.name],W,I+"."+W.name);ne&&(b[W.name]=ne)}}else switch(w.type){case"Int":(typeof b!="number"||b>>0!==b)&&(N||(N=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof b!="number"||!(Math.floor(b)===b&&Math.abs(b)<=9007199254740992))&&(N||(N=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof b!="number"&&(N||(N=[])).push(`Property ${I} must be a number`);break;case"ID":typeof b=="string"||b?.length>0&&b.every?.(v=>typeof v=="string")||(N||(N=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof b!="string"&&(N||(N=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof b!="boolean"&&(N||(N=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(b instanceof Date)){if(typeof b=="string"||typeof b=="number")return new Date(b);(N||(N=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":b instanceof Uint8Array||(N||(N=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(b)){if(w.elements)for(let v=0,L=b.length;v<L;v++){let K=b[v],W=U(K,w.elements,I+"[*]");W&&(b[v]=W)}}else(N||(N=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}w.nullable===!1&&b==null&&(N||(N=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let b=0,w=S.length;b<w;b++){let I=S[b],v=U(T[I.name],I,I.name);v&&(T[I.name]=v)}if(N)throw new mn.ClientError(N.join(". "))}getUpdatedTime(){return this[Nf]}wasLoadedFromSource(){return O?!!this[wT]:void 0}static async addAttributes(T){let N=S.slice(0);for(let U of T){if(!U.name)throw new mn.ClientError("Attribute name is required");if(U.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");N.push(U)}return lt({table:n,database:c,schemaDefined:l,attributes:N}),He.indexingOperation}static async removeAttributes(T){let N=S.filter(U=>!T.includes(U.name));return lt({table:n,database:c,schemaDefined:l,attributes:N}),He.indexingOperation}static getRecordCount(T){let N=i.getStats().entryCount,U=5e3,b=1e3,w;N>U&&!T?.exactCount&&(w=b);let I=0;for(let{value:v}of i.getRange({start:!0,lazy:!0,limit:w}))v!=null&&I++;if(w){let v=I;I=0;for(let{value:Un}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:w}))Un!=null&&I++;let L=w*2,K=(I+v)/L,W=Math.pow((I-v+1)/w/2,2)+K*(1-K)/L,ne=Math.max(Math.sqrt(W)*N,1),X=Math.round(K*N),re=Math.max(X-1.96*ne,0),Oe=Math.min(X+1.96*ne,N),Ne=Math.pow(10,Math.round(Math.log10(ne)));return Ne>X&&(Ne=Ne/10),I=Math.round(X/Ne)*Ne,{recordCount:I,estimatedRange:[Math.round(re),Math.round(Oe)]}}return{recordCount:I}}static updatedAttributes(){_d(this,this)}static async deleteHistory(T=0){let N;for(let{key:U,value:b}of u.getRange({start:0,end:T}))await el(),vr(b).tableId===s&&(N=u.remove(U));await N}static async*getHistory(T=0,N=1/0){for(let{key:U,value:b}of u.getRange({start:T,end:N})){await el();let w=vr(b);w.tableId===s&&(yield{id:w.recordId,localTime:U,version:w.version,type:w.type,value:w.getValue(i),user:w.user})}}static async getHistoryOfRecord(T){let N=[],U=i.getEntry(T);if(!U)return N;let b=U.localTime,w=0;do{await el();let I=u.get(b);if(I){let v=vr(I);N.push({id:v.recordId,localTime:b,version:v.version,type:v.type,value:v.getValue(i),user:v.user}),b=v.previousLocalTime}else break}while(w<1e3&&b);return N.reverse()}static cleanup(){k?.remove()}}He.updatedAttributes();let sk=He.prototype;return sk[dP]=!0,d&&He.setTTLExpiration(d/1e3),B&&nk(),He;function Om(J,T,N){let U;for(let b in r){let w=r[b],I=w.isIndexing,v=N?.[b],L=T?.[b];if(v===L&&!I)continue;U=!0;let K=(0,sl.getIndexedValues)(L);if(K){_P&&w.prefetch(K.map(W=>({key:W,value:J})),fP);for(let W=0,ne=K.length;W<ne;W++)w.remove(K[W],J)}if(K=(0,sl.getIndexedValues)(v),K){_P&&w.prefetch(K.map(W=>({key:W,value:J})),fP);for(let W=0,ne=K.length;W<ne;W++)w.put(K[W],J)}}return U}a(Om,"updateIndices");function EN(J,T,N,U,b){let w=a(()=>{let I=i.getEntry(J,N);return I&&T&&(I?.version>(T.lastModified||0)&&(T.lastModified=I.version),I?.localTime&&!T.lastRefreshed&&(T.lastRefreshed=I.localTime)),b(I,J)},"whenPrefetched");return U?w():ce>0?(ce--,w()):new Promise((I,v)=>{ce===0?(ce--,i.prefetch([J],()=>{L(),K()})):(ie.push(J),we.push(K),ie.length>rk&&(ce--,L()));function L(){if(ie.length>0){let W=we;i.prefetch(ie,()=>{ce===-1?L():ce++;for(let ne of W)ne()}),ie=[],we=[],Yt>2&&Yt--}else ce=Yt,Yt<tk&&Yt++}a(L,"prefetch");function K(){try{I(w())}catch(W){v(W)}}a(K,"load")})}a(EN,"loadLocalRecord");function Nm(J,T,N,U){if(O){let b;if(N.noCache?b=!0:(T?(!T.value||T.metadataFlags&(Rf|Af)||T.expiresAt&&T.expiresAt<Date.now())&&(b=!0):b=!0,is(!b,"cache-hit",n)),b){let w=hN(J,T,N).then(I=>(I?.value?.[Re]&&je.error("Can not assign a record with a record property"),N&&(I?.version>(N.lastModified||0)&&(N.lastModified=I.version),N.lastRefreshed=Date.now()),I));if(N?.onlyIfCached||T?.value&&U?.allowStaleWhileRevalidate?.(T,J)){if(w.catch(I=>je.warn(I)),N?.onlyIfCached&&!U.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return w}}}a(Nm,"ensureLoadedFromSource");function Ni(J){let T=J?.transaction;if(T){if(!T.open)throw new Error("Can not use a transaction that is not open");if(!T.lmdbDb)return T.lmdbDb=i,T;do{if(T.lmdbDb?.path===i.path)return T;let N=T.next;if(!N)return T=T.next=new Ao,T.lmdbDb=i,T;T=N}while(!0)}else return new Ed}a(Ni,"txnForContext");async function hN(J,T,N){let U=T?.metadataFlags,b=T?.version,w,I;if(!i.attemptLock(J,b,()=>{clearTimeout(I);let W=i.getEntry(J);!W||!W.value||W.metadataFlags&(Rf|Af)?w(hN(J,i.getEntry(J),N)):w(W)}))return new Promise(W=>{w=W,I=setTimeout(()=>{i.unlock(J,b)},QX)});let v=T?.value,L={requestContext:N,replacingRecord:v,replacingVersion:b,source:null,resourceCache:N?.resourceCache},K=N?.responseHeaders;return new Promise((W,ne)=>{let X;LT(ze(L,async re=>{let Oe=performance.now(),Ne,Un,bi;try{for(let Cr of He.sources)if(Cr.get&&(!Cr.get.reliesOnPrototype||Cr.prototype.get)&&(L.source=Cr,Ne=await Cr.get(J,L),Ne))break;bi=U&Rf;let Ve=L.lastModified||bi&&b;Un=bi||Ve>b||!v,Ve||(Ve=(0,sl.getNextMonotonicTime)());let js=performance.now()-Oe;if(xr(js,"cache-resolution",n),K&&K.append("Server-Timing",`cache-resolve;dur=${js.toFixed(2)}`),re.timestamp=Ve,d&&!L.expiresAt&&(L.expiresAt=Date.now()+d),Ne){if(typeof Ne!="object")throw new Error("Only objects can be cached and stored in tables");typeof Ne.toJSON=="function"&&(Ne=Ne.toJSON()),t&&Ne[t]!==J&&(Ne[t]=J)}X=!0,W({version:Ve,value:Ne})}catch(Ve){Ve.message+=` while resolving record ${J} for ${n}`,v&&((Ve.code==="ECONNRESET"||Ve.code==="ECONNREFUSED"||Ve.code==="EAI_AGAIN")&&!N?.mustRevalidate||N?.staleIfError&&(Ve.statusCode===500||Ve.statusCode===502||Ve.statusCode===503||Ve.statusCode===504))?(W({version:b,value:v}),je.trace(Ve.message,"(returned stale record)")):ne(Ve),L.transaction.abort();return}if(N?.noCacheStore){L.transaction.abort();return}Ni(L).addWrite({key:J,store:i,entry:T,nodeName:"source",commit:(Ve,js)=>{if(js?.version!==b)return;let Cr=Om(J,v,Ne),vn;if(Ne){for(let gs of He.sources){if(L.source===gs)break;if(gs.put&&(!gs.put.reliesOnPrototype||gs.prototype.put)){let $c=gs.put(J,Ne,L);vn=vn?Promise.all([vn,$c]):$c}}m(J,Ne,js,Ve,0,E&&Un||null,L,L.expiresAt,"put",!!bi)}else{for(let gs of He.sources){if(L.source===gs)break;if(gs.delete&&(!gs.delete.reliesOnPrototype||gs.prototype.delete)){let $c=gs.delete(J,L);vn=vn?Promise.all([vn,$c]):$c}}E||h?m(J,null,js,Ve,0,E&&Un||null,L,0,"delete",!!bi):i.remove(J,b)}return vn}})}),()=>{i.unlock(J,b)},re=>{i.unlock(J,b),X&&je.error("Error committing cache update",re)})})}a(hN,"getFromSource");function bm(){if(De!==Js&&(Js=De,(0,Go.getWorkerIndex)()===(0,Go.getWorkerCount)()-1)){if(ma&&clearTimeout(ma),!De)return;let J=new Date;J.setMonth(0),J.setDate(1),J.setHours(0),J.setMinutes(0),J.setSeconds(0);let T=Math.ceil((Date.now()-J.getTime())/De)*De+J.getTime(),N=a(U=>{je.trace(`Scheduled next cleanup scan at ${new Date(U)}ms`),ma=setTimeout(()=>F=F.then(async()=>{if(N(Math.max(U+De,Date.now())),i.rootStore.status!=="open"){clearTimeout(ma);return}je.trace(`Starting cleanup scan for ${n}`);try{let b=0;for(let{key:w,value:I,version:v,expiresAt:L}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&v+WX<Date.now()?i.remove(w,v):L&&L+f<Date.now()&&(He.evict(w,I,v),b++),await el();je.trace(`Finished cleanup scan for ${n}, evicted ${b} entries`)}catch(b){je.trace(`Error in cleanup scan for ${n}:`,b)}}),Math.min(U-Date.now(),2147483647)).unref()},"startNextTimer");N(T)}}a(bm,"scheduleCleanup");function mN(){k=u?.addDeleteRemovalCallback(s,J=>{let T=i.getEntry(J);T?.value===null&&i.remove(J,T.version)})}a(mN,"addDeleteRemoval");function nk(){(0,Go.getWorkerIndex)()===0&&setInterval(async()=>{try{let J=B.name,T=r[J];if(!T)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:N}of T.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let U=i.getEntry(N);U?.value?.[J]<Date.now()&&He.evict(N,U.value,U.version),await el()}}catch(J){je.error("Error in evicting old records",J)}},KX).unref()}a(nk,"runRecordExpirationEviction")}function CT(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 fP(){}function zX(e){pP=e}function bf(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"&&!JX.test(e)&&(e+="Z"),new Date(e)):r?e:(0,yf.autoCast)(e)}function EP(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 LT(e,t,r){return e?.then?e.then(t,r):t(e)}function rl(e,t){e[hn]=t,e[Re]=t?.value??null,e[Nf]=t?.version}var vs,Of,sl,hP,tl,ol,mn,nl,il,je,mP,Go,yf,$X,pP,VX,YX,KX,WX,_P,QX,Nf,dP,hn,IT,wT,Zu,Rf,Af,uSe,JX,el,wf=ge(()=>{vs=P(A()),Of=require("lmdb"),sl=P(or()),hP=require("lodash");tn();tp();tl=P(We()),ol=P(Q());Fy();mn=P(Z()),nl=P(Kn()),il=P(Cs());fe();md();je=P(M());fd();Oo();mP=require("ordered-binary"),Go=P(Je());ba();yf=P(G());_u();Jn();$X=new Uint8Array(9);$X[8]=192;VX=1e8,YX=1e7,KX=6e4,WX=864e5;ol.initSync();_P=ol.get(vs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),QX=1e4,Nf=Symbol.for("version"),dP=Symbol.for("incremental-update"),hn=Symbol("entry"),IT=Symbol("is-saving"),wT=Symbol("loaded-from-source"),Zu={isNotification:!0,ensureLoaded:!1},Rf=1,Af=8,uSe=(0,yf.convertToMS)(ol.get(vs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(If,"makeTable");a(CT,"attributesAsObject");a(fP,"noop");a(zX,"setServerUtilities");JX=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(bf,"coerceType");a(EP,"isDescendantId");el=a(()=>new Promise(setImmediate),"rest");a(LT,"when");a(rl,"updateResource")});var Pe={};Fe(Pe,{database:()=>Fu,databases:()=>Xe,dropDatabase:()=>VS,dropTableMeta:()=>rZ,getDatabases:()=>Ps,getTables:()=>jX,onUpdatedTable:()=>BT,readMetaDb:()=>al,resetDatabases:()=>XX,table:()=>lt,tables:()=>$r});function jX(){return Mf||Ps(),$r||{}}function Ps(){if(Mf)return Xe;Mf=!0,Ka=new Map;let e=(0,Ht.getHdbBasePath)()&&(0,Ke.join)((0,Ht.getHdbBasePath)(),fr.DATABASES_DIR_NAME),t=(0,Ht.get)(fr.CONFIG_PARAMS.DATABASES)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Ht.get)(fr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,kr.existsSync)(e)?e:(0,Ke.join)((0,Ht.getHdbBasePath)(),fr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,kr.existsSync)(e))for(let r of(0,kr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ke.basename)(r.name,".mdb");r.isFile()&&(0,Ke.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&al((0,Ke.join)(e,r.name),null,s)}if((0,kr.existsSync)((0,Ya.getBaseSchemaPath)())){for(let r of(0,kr.readdirSync)((0,Ya.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ke.join)((0,Ya.getBaseSchemaPath)(),r.name),n=(0,Ke.join)((0,Ya.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,kr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ke.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ke.join)(n,i.name);al((0,Ke.join)(s,i.name),(0,Ke.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,kr.existsSync)(n))for(let o of(0,kr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ke.extname)(o.name).toLowerCase()===".mdb"&&al((0,Ke.join)(n,o.name),(0,Ke.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ke.join)(c.path,(0,Ke.basename)(o+".mdb"));(0,kr.existsSync)(u)&&al(u,o,r,null,!0)}}for(let r in Xe){let s=Ka.get(r);if(s){let n=Xe[r];r.includes("delete")&&os.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(os.trace(`delete table class ${i}`),delete n[i])}else if(delete Xe[r],r==="data"){for(let n in $r)delete $r[n];delete $r[Uf]}}return Ka=null,Xe}}function XX(){Mf=!1;for(let[,e]of xi)e.needsDeletion=!0;Ps();for(let[e,t]of xi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),xi.delete(e));return Xe}function al(e,t,r=UT,s,n){let i=new PT.default(e,!1);try{let o=xi.get(e);o?o.needsDeletion=!1:(o=(0,Lf.open)(i),xi.set(e,o));let c=new Fo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Cf.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,kr.existsSync)(s)&&(i.path=s,l=(0,Lf.open)(i),l.isLegacy=!0):l=bd(o));let _=RP(r),d=_[Uf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[S,m]=E.toString().split("/");m===""?m=h.name:m||(m=S,S=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),d?.add(S);let R=f.get(S);R||f.set(S,R={attributes:[]}),(m==null||h.is_hash_attribute)&&(R.primary=h),m!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:S,primary:m}=h;if(!m){for(let k of S)if(k.is_hash_attribute||k.isPrimaryKey){m=k;break}if(!m){os.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(S)}`);continue}}let R=_[E],g={},O=[],V,$,F=typeof m.audit=="boolean"?m.audit:(0,Ht.get)(fr.CONFIG_PARAMS.LOGGING_AUDITLOG),C=m.trackDeletes,Y=m.expiration,B=m.eviction;if(R)g=R.indices,O=R.attributes,R.schemaVersion++;else{V=m.tableId,V?V>=(u.get(Va)||0)&&u.putSync(Va,V+1):(m.tableId=V=u.get(Va),V||(V=1),u.putSync(Va,V+1),u.putSync(m.key,m));let k=new Fo.default(!m.is_hash_attribute,m.is_hash_attribute);$=Od(o.openDB(m.key,k)),$.rootStore=o,$.tableId=V}for(let k of S){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!g[k.name]){let we=new Fo.default(!k.is_hash_attribute,k.is_hash_attribute);g[k.name]=o.openDB(k.key,we)}let ie=O.find(we=>we.name===k.name);ie?O.splice(O.indexOf(ie),1,k):O.push(k)}}catch(ie){os.error("Error trying to update attribute",k,O,g,ie)}}if(!R){R=AP(_,E,If({primaryStore:$,auditStore:l,audit:F,expirationMS:Y&&Y*1e3,evictionMS:B&&B*1e3,trackDeletes:C,tableName:E,tableId:V,primaryKey:m.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:g,attributes:S,schemaDefined:m.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let k of vT)k(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function RP(e){let t=Xe[e];if(t||(e==="data"?t=Xe[e]=$r:e==="system"?Object.defineProperty(Xe,"system",{value:t=Object.create(null),configurable:!0}):t=Xe[e]=Object.create(null)),Ka&&!Ka.has(e)){let r=new Set;t[Uf]=r,Ka.set(e,r)}return t}function AP(e,t,r){return e[t]=r,r}function Fu({database:e,table:t}){e||(e=UT),Ps();let r=RP(e),s=(0,Ke.join)((0,Ht.getHdbBasePath)(),fr.DATABASES_DIR_NAME),n=t&&(0,Ht.get)(fr.CONFIG_PARAMS.DATABASES)?.[e]?.tables?.[t]?.path;s=n||(0,Ht.get)(fr.CONFIG_PARAMS.DATABASES)?.[e]?.path||process.env.STORAGE_PATH||(0,Ht.get)(fr.CONFIG_PARAMS.STORAGE_PATH)||((0,kr.existsSync)(s)?s:(0,Ke.join)((0,Ht.getHdbBasePath)(),fr.LEGACY_DATABASES_DIR_NAME));let i=(0,Ke.join)(s,(n?t:e)+".mdb"),o=xi.get(i);if(!o){let c=new PT.default(i,!1);o=(0,Lf.open)(c),xi.set(i,o)}return o}async function VS(e){if(!Xe[e])throw new Error("Schema does not exist");let t=Xe[e];for(let r in t){let n=t[r].primaryStore.rootStore;xi.delete(n.path),n.status==="open"&&(await n.close(),await SP.remove(n.path))}if(e==="data"){for(let r in $r)delete $r[r];delete $r[Uf]}delete Xe[e]}function lt({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:l}){t||(t=UT);let _=Fu({database:t,table:e}),d=Xe[t],f=d?.[e];if(_.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,S,m;u==null&&(u=!0);let R=new Fo.default(!1);for(let C of i)C.attribute?(C.name=C.attribute,C.indexed=!0):C.attribute=C.name,C.expiresAt&&(C.indexed=!0);let g,O;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 C=_.auditStore;C||(C=bd(_)),h=i.find(ie=>ie.isPrimaryKey)||{},E=h.name,h.is_hash_attribute=!0,h.schemaDefined=u,c&&(h.trackDeletes=!0),o=h.audit=typeof o=="boolean"?o:(0,Ht.get)(fr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),l&&(h.origins?h.origins.includes(l)||h.origins.push(l):h.origins=[l]),os.trace(`${e} table loading, opening primary store`);let Y=new Fo.default(!1,!0),B=e+"/",k=Od(_.openDB(B,Y));k.rootStore=_,m=_.dbisDb=_.openDB(Cf.INTERNAL_DBIS_NAME,R),k.tableId=m.get(Va),k.tableId||(k.tableId=1),m.putSync(Va,k.tableId+1),h.tableId=k.tableId,f=AP(d,e,If({primaryStore:k,auditStore:C,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:m})),f.schemaVersion=1,g=!0,F(),m.put(B,h)}S=f.indices,m=m||(_.dbisDb=_.openDB(Cf.INTERNAL_DBIS_NAME,R)),f.dbisDB=m;let V=[];for(let{key:C,value:Y}of m.getRange({start:!0})){let[B,k]=C.toString().split("/");if(k===""&&(k=Y.name),k){if(B!==e)continue}else k=B;if(!i.find(we=>we.name===k)?.indexed&&Y.indexed&&!Y.isPrimaryKey){F(),g=!0,m.remove(C);let we=f.indices[B];we&&V.push(we)}}let $=[];try{for(let C of i||[]){let Y=e+"/"+(C.name||"");Object.defineProperty(C,"key",{value:Y,configurable:!0});let B=m.get(Y);if(C.isPrimaryKey){if(B=B||m.get(Y=e+"/"),o!==f.audit||(+r||void 0)!==(+B.expiration||void 0)||(+s||void 0)!==(+B.eviction||void 0)){let ie=Object.assign({},B);typeof o=="boolean"&&(o&&f.enableAuditing(o),ie.audit=o),r&&(ie.expiration=+r),s&&(ie.eviction=+s),g=!0,F(),m.put(Y,ie)}continue}B?.attribute&&!B.name&&(B.indexed=!0);let k=!B||B.type!==C.type||B.indexed!==C.indexed||JSON.stringify(B.attributes)!==JSON.stringify(C.attributes)||JSON.stringify(B.elements)!==JSON.stringify(C.elements);if(C.indexed){let ie=new Fo.default(!0,!1),we=_.openDB(Y,ie);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<cl.workerData?.restartNumber)&&(g=!0,F(),B=m.get(Y),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<cl.workerData?.restartNumber)&&(g=!0,C.lastIndexedKey=B?.lastIndexedKey||!1,C.indexingPID=process.pid,we.isIndexing=!0,Object.defineProperty(C,"dbi",{value:we}),$.push(C)),m.put(Y,C)),S[C.name]=we}else k&&(g=!0,F(),m.put(Y,C))}}finally{O&&O()}if(g&&(f.schemaVersion++,f.updatedAttributes()),os.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=tZ(f,$,V):g&&Df.signalSchemaChange(new Pf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=l,g)for(let C of vT)C(f,l!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),os.trace(`${e} table loaded`),f;function F(){O||_.transactionSync(()=>({then(C){O=C}}))}a(F,"startTxn")}async function tZ(e,t,r){try{let s=e.schemaVersion;await Df.signalSchemaChange(new Pf.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:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let f=0;f<c;f++){let E=t[f],h=E.name,S=(0,TP.getIndexedValues)(_[h]);if(S)for(let m=0,R=S.length;m<R;m++)E.dbi.put(S[m],l)}}),n.then(()=>u--,f=>{u--,os.error(f)}),cl.workerData&&cl.workerData.restartNumber!==gP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=l,e.dbisDB.put(f.key,f);if(i)return}u>ZX?await n:u>eZ&&await new Promise(f=>setImmediate(f))}for(let l of t)delete l.lastIndexedKey,delete l.indexingPID,l.dbi.isIndexing=!1,n=e.dbisDB.put(l.key,l)}await n,await Df.signalSchemaChange(new Pf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){os.error("Error in indexing",s)}}function rZ({table:e,database:t}){let r=Fu({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 BT(e){vT.push(e)}var Ht,Cf,Lf,Ke,kr,Ya,Fo,PT,fr,SP,MT,TP,Df,Pf,cl,os,gP,UT,Uf,$r,Xe,Va,vT,Mf,xi,Ka,ZX,eZ,fe=ge(()=>{Ht=P(Q()),Cf=P(We()),Lf=require("lmdb"),Ke=require("path"),kr=require("fs"),Ya=P(qe());wf();Fo=P(yd()),PT=P(wd()),fr=P(A()),SP=P(require("fs-extra")),MT=require("../index"),TP=P(or()),Df=P(Kn()),Pf=P(Cs()),cl=require("worker_threads"),os=P(M()),gP=P(Je());ba();_u();UT="data",Uf=Symbol("defined-tables");(0,Ht.initSync)();$r=Object.create(null),Xe=Object.create(null);(0,MT._assignPackageExport)("databases",Xe);(0,MT._assignPackageExport)("tables",$r);Va=Symbol.for("next-table-id"),vT=[],xi=new Map;a(jX,"getTables");a(Ps,"getDatabases");a(XX,"resetDatabases");a(al,"readMetaDb");a(RP,"ensureDB");a(AP,"setTable");a(Fu,"database");a(VS,"dropDatabase");a(lt,"table");ZX=1e3,eZ=10;a(tZ,"runIndexing");a(rZ,"dropTableMeta");a(BT,"onUpdatedTable")});var GT={};Fe(GT,{loadGQLSchema:()=>iZ,start:()=>qT,startOnMainThread:()=>nZ});function qT({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),f=new Map,E=[],h;for(let m of d.definitions)switch(m.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 Y={type:F.name?.value};return Object.defineProperty(Y,"location",{value:F.loc.startToken}),Y};a($,"getProperty");let R=m.name.value,g=[],O={table:null,database:null,properties:g};f.set(R,O);for(let F of m.directives){if(F.name.value==="table"){for(let C of F.arguments)O[C.name.value]=C.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=R),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,E.push(O)}if(F.name.value==="sealed"&&(O.sealed=!0),F.name.value==="export"){O.export=!0;for(let C of F.arguments)C.name.value==="name"&&(O.export={name:C.value.value})}}let V=!1;for(let F of m.fields){let C=$(F.type);C.name=F.name.value,g.push(C);for(let Y of F.directives)if(Y.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(C.isPrimaryKey=!0,V=!0);else if(Y.name.value==="indexed")C.indexed=!0;else if(Y.name.value==="createdTime")C.assignCreatedTime=!0;else if(Y.name.value==="updatedTime")C.assignUpdatedTime=!0;else if(Y.name.value==="expiresAt")C.expiresAt=!0;else if(Y.name.value==="allow"){let B=C.authorizedRoles=[];for(let k of Y.arguments)k.name.value==="role"&&B.push(k.value.value)}}O.typeName=R,R==="Query"&&(h=O)}function S(m){let R=f.get(m.type);R?m.properties=R.properties:m.type==="array"?S(m.elements):sZ.includes(m.type)||(0,OP.getWorkerIndex)()===0&&console.error(`The type ${m.type} is unknown at line ${m.location.line}, column ${m.location.column}, in ${n}`)}a(S,"connectPropertyType");for(let m of f.values())for(let R of m.properties)S(R);for(let m of E)m.tableClass=e(m),m.export&&i.set((0,HT.dirname)(s)+"/"+(m.export.name||m.typeName),m.tableClass);if(h)for(let m of h.properties){let R=f.get(m.type);if(!R)throw new Error(`${m.type} was not found as a Query export`);i.set((0,HT.dirname)(s)+"/"+m.name,R.tableClass)}}}var HT,OP,sZ,nZ,iZ,NP=ge(()=>{HT=require("path");fe();OP=P(Je()),sZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(qT,"start");nZ=qT,iZ=qT({ensureTable:lt}).handleFile});async function vf(e){return oZ?(ul||(ul=aZ(uZ)),(await(await ul).import(e)).namespace):import(e)}async function aZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ul=new Compartment({console,Math,Date,fetch:cZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,yP.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:$r,databases:Xe})}};let s=await(0,bP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ul}function cZ(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 uZ(){return{Resource:Ut,tables:$r}}var bP,yP,oZ,ul,FT=ge(()=>{tn();fe();bP=require("fs/promises"),yP=require("path"),oZ=!1;a(vf,"secureImport");a(aZ,"getCompartment");a(cZ,"secureOnlyFetch");a(uZ,"getGlobalVars")});var kT={};Fe(kT,{handleFile:()=>lZ});async function lZ(e,t,r,s){let n=new Map,i=(0,IP.pathToFileURL)(r).toString(),o=await vf(i);u(o.default)&&s.set((0,xT.dirname)(t),o.default),c(o,(0,xT.dirname)(t));function c(l,_){for(let d in l){let f=l[d];u(f)?s.set(_+"/"+d,f):typeof f=="object"&&c(f,_+"/"+d)}}a(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return a(u,"isResource"),n}var IP,xT,wP=ge(()=>{IP=require("url");FT();xT=require("path");a(lZ,"handleFile")});var VT={};Fe(VT,{start:()=>_Z});function _Z({resources:e}){e.set("login",$T),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var $T,CP=ge(()=>{tn();a(_Z,"start");$T=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 KT=p((ISe,PP)=>{"use strict";var{Readable:dZ}=require("stream"),fZ=1e4;PP.exports={streamAsJSON(e){return new YT({value:e})}};var YT=class extends dZ{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*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](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){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),LP)}catch(n){yield LP(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);DP(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>fZ?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 DP(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}}};function LP(e){return console.error(e),JSON.stringify(e.toString())}a(LP,"handleError");function DP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(DP,"when")});var Bf=p((CSe,MP)=>{"use strict";var EZ=ss();MP.exports={writeTransaction:hZ};function hZ(e,t,r){return EZ.writeTransaction(e,t,r)}a(hZ,"writeTransaction")});var HP=p((PSe,BP)=>{"use strict";var mZ=lr(),pZ=ns(),UP=M(),SZ=_r(),DSe=Bf(),TZ=require("clone"),QT=require("alasql"),gZ=Zd(),vP=require("util"),RZ=vP.promisify(pZ.getTableSchema),AZ=vP.promisify(mZ.search),OZ=A(),WT=G();gZ(QT);BP.exports={update:bZ};var NZ="There was a problem performing this update. Please check the logs and try again.";async function bZ({statement:e,hdb_user:t}){let r=await RZ(e.table.databaseid,e.table.tableid),s=yZ(e.columns);WT.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=TZ(n),c=WT.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=QT.parse(u).statements[0],_=await AZ(l),d=IZ(s,_);return wZ(o,d,t)}a(bZ,"update");function yZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=QT.compile(`SELECT ${r.expression.toString()} AS [${OZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw UP.error(t),new Error(NZ)}}a(yZ,"createUpdateRecord");function IZ(e,t){return WT.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(IZ,"buildUpdateRecords");async function wZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await SZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){UP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(wZ,"updateRecords")});var GP=p((BSe,qP)=>{var CZ=require("alasql"),LZ=lr(),DZ=M(),PZ=ss(),JT=require("util"),zT=G(),MZ=A(),UZ=ns(),USe=Bf(),vSe=_r(),vZ="record",BZ="successfully deleted",HZ=JT.callbackify(xZ),qZ=JT.promisify(LZ.search),GZ=JT.promisify(UZ.getTableSchema);qP.exports={convertDelete:HZ};function FZ(e){return`${e.deleted_hashes.length} ${vZ}${e.deleted_hashes.length===1?"":"s"} ${BZ}`}a(FZ,"generateReturnMessage");async function xZ({statement:e,hdb_user:t}){let r=await GZ(e.table.databaseid,e.table.tableid);zT.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=zT.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=CZ.parse(o).statements[0],u={operation:MZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await qZ(c);let l=await PZ.deleteRecords(u);return zT.isEmptyOrZeroLength(l.message)&&(l.message=FZ(l)),delete l.txn_time,l}catch(l){throw DZ.error(l),l.hdb_code?l.message:l}}a(xZ,"convertDelete")});var VP=p((qSe,$P)=>{"use strict";var kZ=Bi(),{hdb_errors:FP}=Z(),{getDatabases:xP}=(fe(),te(Pe));$P.exports={checkSchemaExists:kP,checkSchemaTableExists:$Z,schema_describe:kZ};async function kP(e){if(!xP()[e])return FP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kP,"checkSchemaExists");async function $Z(e,t){let r=await kP(e);if(r)return r;if(!xP()[e][t])return FP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($Z,"checkSchemaTableExists")});var nt=p((VSe,uM)=>{"use strict";var qt=Q();qt.initSync();var VZ=require("fs-extra"),YZ=require("semver"),dl=require("path"),{monotonicFactory:KZ}=require("ulidx"),KP=KZ(),WZ=require("util"),WP=require("child_process"),QZ=WZ.promisify(WP.exec),zZ=WP.spawn,Ae=ke(),be=A(),eg=G(),as=M(),Hf=zn(),JZ=Bf(),ll=rt(),{onMessageByType:jZ}=Je(),{isMainThread:XZ}=require("worker_threads"),{Encoder:ZZ,decode:tg}=require("msgpackr"),QP=new ZZ,{isEmpty:xo}=eg,zP=dr(),e5=48*36e11,t5=5e9;XZ&&jZ(be.ITC_EVENT_TYPES.RESTART,()=>{Bs=void 0,za=void 0});var{connect:r5,StorageType:JP,RetentionPolicy:jP,AckPolicy:qf,DeliverPolicy:Gf,DiscardPolicy:s5,NatsConnection:FSe,JetStreamManager:xSe,JetStreamClient:kSe,StringCodec:$Se,JSONCodec:n5,createInbox:rg,headers:i5,ErrorCode:YP}=require("nats"),{PACKAGE_ROOT:o5}=A(),a5=ho(),{recordAction:c5}=(Jn(),te(Xu)),XP=n5(),u5="clustering",l5=a5.engines[Ae.NATS_SERVER_NAME],_5=dl.join(o5,"dependencies"),ZT=dl.join(_5,`${process.platform}-${process.arch}`,Ae.NATS_BINARY_NAME),jT,XT,_l,Wa,Qa;uM.exports={runCommand:ZP,checkNATSServerInstalled:d5,createConnection:sg,getConnection:Ff,getJetStreamManager:fl,getJetStream:eM,getNATSReferences:Er,getServerList:E5,createLocalStream:ng,listStreams:tM,deleteLocalStream:h5,getServerConfig:El,listRemoteStreams:m5,viewStream:p5,viewStreamIterator:S5,publishToStream:T5,createWorkQueueStream:g5,addSourceToWorkStream:sM,request:A5,removeSourceFromWorkStream:iM,reloadNATS:ig,reloadNATSHub:O5,reloadNATSLeaf:N5,extractServerName:nM,requestErrorHandler:b5,updateWorkStream:y5,createLocalTableStream:aM,createTableStreams:I5,purgeTableStream:cM,purgeSchemaTableStreams:w5,getStreamInfo:C5,updateLocalStreams:D5,closeConnection:f5,getJsmServerName:hl,addNatsMsgHeader:rM,updateIngestStreamConsumer:R5};async function ZP(e,t=void 0){let{stdout:r,stderr:s}=await QZ(e,{cwd:t});if(s)throw new Error(s.replace(`
2
+ "use strict";var ok=Object.create;var Yc=Object.defineProperty;var ak=Object.getOwnPropertyDescriptor;var ck=Object.getOwnPropertyNames;var uk=Object.getPrototypeOf,lk=Object.prototype.hasOwnProperty;var a=(e,t)=>Yc(e,"name",{value:t,configurable:!0});var ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var T=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ge=(e,t)=>{for(var r in t)Yc(e,r,{get:t[r],enumerable:!0})},SN=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ck(t))!lk.call(e,n)&&n!==r&&Yc(e,n,{get:()=>t[n],enumerable:!(s=ak(t,n))||s.enumerable});return e};var M=(e,t,r)=>(r=e!=null?ok(uk(e)):{},SN(t||!e||!e.__esModule?Yc(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>SN(Yc({},"__esModule",{value:!0}),e);var RN=T((hde,gN)=>{var _k=require("fast-glob"),{statSync:bm,existsSync:ym,readFileSync:dk,writeFileSync:fk}=require("fs"),{spawnSync:Ek,spawn:hk,execFileSync:Ede}=require("child_process"),{isMainThread:mk}=require("worker_threads"),{join:bi,relative:TN}=require("path"),{PACKAGE_ROOT:Ns}=A(),{tmpdir:pk,platform:Sk}=require("os");require("source-map-support").install();var Tk=["resources","server","dataLayer","components"],Kc="ts-build",Im,gk=__filename.endsWith("tsBuild.js");if(gk){if(mk){let r;try{bm(bi(Ns,Kc)),r=!0}catch{}if(r)for(let s of _k.sync(Tk.map(n=>n+"/**/*.ts"),{cwd:Ns})){let n=0,i=0;try{n=bm(bi(Ns,s)).mtimeMs-5e3,i=bm(bi(Ns,Kc,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."),Im=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),Im=!0;if(Im){let s=bi(Ns,"node_modules/.bin/tsc");Sk()==="win32"&&(s+=".cmd");let n=Ek(s,{cwd:Ns});if(n.stdout.length&&console.log(n.stdout.toString()),n.stderr.length&&console.log(n.stderr.toString()),r){let i=bi(pk(),"harperdb-tsc.pid"),o;if(ym(i))try{process.kill(+dk(i,{encoding:"utf8"}),0),o=!0}catch{}if(!o){console.log("starting tsc background process");let c=hk(s,["--watch"],{cwd:Ns,detached:!0,stdio:"ignore"});fk(i,c.pid.toString()),c.unref()}}}}let e=gN.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Ns)&&!s[0].includes("node_modules")){let i=TN(Ns,s[0]),o;i.startsWith(Kc)?o=bi(Ns,TN(Kc,i)):o=bi(Ns,Kc,i);let c=bi(o,r),u=c+".js";if(ym(u))return u;if(c.includes(".")&&ym(c))return c}return t(r,s,n)}}});var A=T((Sde,vN)=>{"use strict";var es=require("path"),Rk=require("fs"),{relative:mde,join:pde}=es,{existsSync:Ak}=Rk;function Ok(){let e=__dirname;for(;!Ak(es.join(e,"package.json"));){let t=es.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(Ok,"getHDBPackageRoot");var yi=Ok(),AN="js",F_=AN,Nk="harperdb-config.yaml",bk="defaultConfig.yaml",yk="hdb",ON=`harperdb.${F_}`,NN=`customFunctionsServer.${F_}`,Ik=`restartHdb.${F_}`,Cm="HarperDB",G_="Custom Functions",x_="Clustering Hub",k_="Clustering Leaf",wk="Clustering Ingest Service",Ck="Clustering Reply Service",Lk="foreground.pid",Dk="hdb.pid",Pk="data",Mk={HDB:Cm,CLUSTERING_HUB:x_,CLUSTERING_LEAF:k_,CLUSTERING_INGEST_SERVICE:wk,CLUSTERING_REPLY_SERVICE:Ck,CUSTOM_FUNCTIONS:G_,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"},Uk={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},vk={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Bk={harperdb:Cm,"clustering hub":x_,"clustering leaf":k_,"custom functions":G_,custom_functions:G_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Hk={CLUSTERING_HUB_PROC_DESCRIPTOR:x_,CLUSTERING_LEAF_PROC_DESCRIPTOR:k_},wm={HDB:es.join(yi,"server/harperdb"),CUSTOM_FUNCTIONS:es.join(yi,"server/customFunctions"),CLUSTERING_HUB:es.join(yi,"server/nats"),CLUSTERING_LEAF:es.join(yi,"server/nats")},qk={HDB:es.join(wm.HDB,ON),CUSTOM_FUNCTIONS:es.join(wm.CUSTOM_FUNCTIONS,NN)},Gk={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:es.join(yi,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:es.join(yi,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:es.join(yi,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Fk={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},bN="support@harperdb.io",xk="customer-success@harperdb.io",yN=1,kk=4141,IN="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",$k="https://www.harperdb.io/product",Vk=`For support, please submit a request at ${IN} or contact ${bN}`,wN=`For license support, please contact ${xk}`,Yk="None of the specified records were found.",Kk="hash attribute not found",Wk=`Your current license only supports ${yN} role. ${wN}`,Qk="Your current license only supports 3 connections to a node.",jk="127.0.0.1",zk=1,Jk=/^\.$/,Xk=/^\.\.$/,Zk="U+002E",e$=/\//g,t$="U+002F",r$=/U\+002F/g,s$=/^U\+002E$/,n$=/^U\+002EU\+002E$/,i$="d",o$=999999,a$="*",c$="--max-old-space-size=",u$="system",l$="__hdb_hash",_$=".harperdb",d$=".hdb",f$="keys",E$="hdb_boot_properties.file",h$=".updateConfig.json",m$="SIGTSTP",p$=24,S$=6e4,T$=448,g$="blob",R$="trash",A$="database",O$="schema",N$="transactions",b$=".count",y$="id",I$="PROCESS_NAME",CN={SETTINGS_PATH_KEY:"settings_path"},LN=require("lodash"),w$={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"},C$={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},L$={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},D$={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"},P$={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:",M$={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"},U$={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"},v$="060493.ks",B$=".license",H$={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},z={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"},q$={CSV:".csv",JSON:".json"},G$={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},F$={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Wc={};Wc[z.INSERT]=z.INSERT;Wc[z.UPDATE]=z.UPDATE;Wc[z.UPSERT]=z.UPSERT;Wc[z.DELETE]=z.DELETE;var we=Object.create(null);we[z.DESCRIBE_ALL]=z.DESCRIBE_ALL;we[z.DESCRIBE_TABLE]=z.DESCRIBE_TABLE;we[z.DESCRIBE_SCHEMA]=z.DESCRIBE_SCHEMA;we[z.READ_LOG]=z.READ_LOG;we[z.ADD_NODE]=z.ADD_NODE;we[z.LIST_USERS]=z.LIST_USERS;we[z.LIST_ROLES]=z.LIST_ROLES;we[z.USER_INFO]=z.USER_INFO;we[z.SQL]=z.SQL;we[z.GET_JOB]=z.GET_JOB;we[z.SEARCH_JOBS_BY_START_DATE]=z.SEARCH_JOBS_BY_START_DATE;we[z.DELETE_FILES_BEFORE]=z.DELETE_FILES_BEFORE;we[z.EXPORT_LOCAL]=z.EXPORT_LOCAL;we[z.EXPORT_TO_S3]=z.EXPORT_TO_S3;we[z.CLUSTER_STATUS]=z.CLUSTER_STATUS;we[z.REMOVE_NODE]=z.REMOVE_NODE;we[z.RESTART]=z.RESTART;we[z.CUSTOM_FUNCTIONS_STATUS]=z.CUSTOM_FUNCTIONS_STATUS;we[z.GET_CUSTOM_FUNCTIONS]=z.GET_CUSTOM_FUNCTIONS;we[z.GET_CUSTOM_FUNCTION]=z.GET_CUSTOM_FUNCTION;we[z.SET_CUSTOM_FUNCTION]=z.SET_CUSTOM_FUNCTION;we[z.DROP_CUSTOM_FUNCTION]=z.DROP_CUSTOM_FUNCTION;we[z.ADD_CUSTOM_FUNCTION_PROJECT]=z.ADD_CUSTOM_FUNCTION_PROJECT;we[z.DROP_CUSTOM_FUNCTION_PROJECT]=z.DROP_CUSTOM_FUNCTION_PROJECT;we[z.PACKAGE_CUSTOM_FUNCTION_PROJECT]=z.PACKAGE_CUSTOM_FUNCTION_PROJECT;we[z.DEPLOY_CUSTOM_FUNCTION_PROJECT]=z.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"},k$={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},DN={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"},$$=LN.invert(DN),V$={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"},PN={settings_path:CN.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];PN[t.toLowerCase()]=t}var Y$={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},K$={csv_file_load:"csv_file_load",csv_data_load:z.CSV_DATA_LOAD,csv_url_load:z.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"},W$={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"},Q$={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},j$={VERSION_DEFAULT:"2.2.0"},z$={DEVELOPMENT:8192,DEFAULT:512},J$={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"},X$={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"},Z$={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},MN={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},eV=Symbol("metadata"),tV="__clustering__",rV=Object.values(MN),sV=15984864e5,UN={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},nV=LN.invert(UN),iV={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"},oV=111,aV=`\r
3
+ `,cV={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},uV=["*","%"],lV="unauthorized_access",_V="func_val",dV={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},fV={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},EV={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"},hV={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},mV={HTTP:"http"},pV={STOPPED:"stopped",ONLINE:"online"},SV="3.x.x",TV={SUCCESS:"success",FAILURE:"failure"},gV={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};vN.exports={LOCAL_HARPERDB_OPERATIONS:we,HDB_SUPPORT_ADDRESS:bN,HDB_SUPPORT_URL:IN,HDB_PRICING_URL:$k,SUPPORT_HELP_MSG:Vk,LICENSE_HELP_MSG:wN,HDB_PROC_NAME:ON,HDB_PROC_DESCRIPTOR:Cm,CLUSTERING_LEAF_PROC_DESCRIPTOR:k_,CLUSTERING_HUB_PROC_DESCRIPTOR:x_,SYSTEM_SCHEMA_NAME:u$,HASH_FOLDER_NAME:l$,HDB_HOME_DIR_NAME:_$,UPDATE_FILE_NAME:h$,LICENSE_KEY_DIR_NAME:f$,BOOT_PROPS_FILE_NAME:E$,JOB_TYPE_ENUM:K$,JOB_STATUS_ENUM:H$,SYSTEM_TABLE_NAMES:D$,SYSTEM_TABLE_HASH_ATTRIBUTES:P$,OPERATIONS_ENUM:z,VALID_S3_FILE_TYPES:q$,S3_BUCKET_AUTH_KEYS:G$,VALID_SQL_OPS_ENUM:F$,GEO_CONVERSION_ENUM:k$,HDB_SETTINGS_NAMES:DN,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:$$,SERVICE_ACTIONS_ENUM:x$,CLUSTER_MESSAGE_TYPE_ENUM:W$,CLUSTER_CONNECTION_DIRECTION_ENUM:Q$,CLUSTER_EVENTS_DEFS_ENUM:J$,PERIOD_REGEX:Jk,DOUBLE_PERIOD_REGEX:Xk,UNICODE_PERIOD:Zk,FORWARD_SLASH_REGEX:e$,UNICODE_FORWARD_SLASH:t$,ESCAPED_FORWARD_SLASH_REGEX:r$,ESCAPED_PERIOD_REGEX:s$,ESCAPED_DOUBLE_PERIOD_REGEX:n$,REG_KEY_FILE_NAME:v$,RESTART_TIMEOUT_MS:S$,HDB_FILE_PERMISSIONS:T$,DATABASES_DIR_NAME:A$,LEGACY_DATABASES_DIR_NAME:O$,TRANSACTIONS_DIR_NAME:N$,LIMIT_COUNT_NAME:b$,ID_ATTRIBUTE_STRING:y$,INSERT_MODULE_ENUM:C$,UPGRADE_JSON_FIELD_NAMES_ENUM:L$,RESTART_CODE:m$,RESTART_CODE_NUM:p$,CLUSTER_OPERATIONS:Wc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:U$,HDB_INTERNAL_SC_CHANNEL_PREFIX:Dr,INTERNAL_SC_CHANNELS:M$,CLUSTERING_MESSAGE_TYPES:iV,HDB_FILE_SUFFIX:d$,BLOB_FOLDER_NAME:g$,HDB_TRASH_DIR:R$,ORIGINATOR_SET_VALUE:oV,LICENSE_VALUES:j$,RAM_ALLOCATION_ENUM:z$,TIME_STAMP_NAMES_ENUM:MN,TIME_STAMP_NAMES:rV,PERMS_UPDATE_RELEASE_TIMESTAMP:sV,SEARCH_NOT_FOUND_MESSAGE:Yk,SEARCH_ATTRIBUTE_NOT_FOUND:Kk,LICENSE_ROLE_DENIED_RESPONSE:Wk,LICENSE_MAX_CONNS_REACHED:Qk,BASIC_LICENSE_MAX_NON_CU_ROLES:yN,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:kk,VALUE_SEARCH_COMPARATORS:UN,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:nV,LICENSE_FILE_NAME:B$,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:X$,NEW_LINE:aV,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:zk,MOMENT_DAYS_TAG:i$,API_TURNOVER_SEC:o$,LOOPBACK:jk,CODE_EXTENSION:F_,WILDCARD_SEARCH_VALUE:a$,NODE_ERROR_CODES:Z$,JAVASCRIPT_EXTENSION:AN,PERMS_CRUD_ENUM:cV,UNAUTHORIZED_PERMISSION_NAME:lV,SEARCH_WILDCARDS:uV,FUNC_VAL:_V,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:dV,JWT_ENUM:fV,CLUSTERING_FLAG:tV,ITC_EVENT_TYPES:EV,CUSTOM_FUNCTION_PROC_NAME:NN,CUSTOM_FUNCTION_PROC_DESCRIPTOR:G_,SERVICES:hV,THREAD_TYPES:mV,MEM_SETTING_KEY:c$,HDB_RESTART_SCRIPT:Ik,PROCESS_DESCRIPTORS:Mk,SERVICE_SERVERS:qk,SERVICE_SERVERS_CWD:wm,PROCESS_DESCRIPTORS_VALIDATE:Bk,LAUNCH_SERVICE_SCRIPTS:Gk,LOG_LEVELS:vk,PROCESS_NAME_ENV_PROP:I$,LOG_NAMES:Uk,PM2_PROCESS_STATUSES:pV,CONFIG_PARAM_MAP:PN,CONFIG_PARAMS:y,HDB_CONFIG_FILE:Nk,HDB_DEFAULT_CONFIG_FILE:bk,ROLE_TYPES_ENUM:Fk,BOOT_PROP_PARAMS:CN,INSTALL_PROMPTS:w$,HDB_ROOT_DIR_NAME:yk,CLUSTERING_PROCESSES:Hk,FOREGROUND_PID_FILE:Lk,PACKAGE_ROOT:yi,PRE_4_0_0_VERSION:SV,DATABASES_PARAM_CONFIG:Y$,METADATA_PROPERTY:eV,AUTH_AUDIT_STATUS:TV,AUTH_AUDIT_TYPES:gV,HDB_PID_FILE:Dk,DEFAULT_DATABASE_NAME:Pk,LEGACY_CONFIG_PARAMS:V$};RN()});var Eo=T((gde,qN)=>{"use strict";var BN=require("minimist");qN.exports=RV;function RV(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=HN(process.env),s=HN(BN(process.argv))):(r=process.env,s=BN(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(RV,"assignCMDENVVariables");function HN(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(HN,"objKeysToLowerCase")});var U=T((Ade,Bm)=>{"use strict";var ho=require("fs-extra"),{workerData:AV,threadId:OV}=require("worker_threads"),Hn=require("path"),xN=require("yaml"),kN=require("properties-reader"),St=A(),GN=Eo(),NV=require("os"),{PACKAGE_ROOT:Dm}=A(),{_assignPackageExport:bV}=require("../index"),jc={};for(let e in console)jc[e]||(jc[e]=console[e]);var ir={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},$N={STDOUT:"stdOut",STDERR:"stdErr"},yV=Hn.join(Dm,"logs"),IV=Hn.join(Dm,"config/yaml/",St.HDB_DEFAULT_CONFIG_FILE),wV=1e4,Bn,Xs,nr,$_,V_,zc,pa,Qc;Qc===void 0&&VN();Bm.exports={notify:WN,fatal:QN,error:Jc,warn:vm,info:Y_,debug:Um,trace:Mm,setLogLevel:vV,log_level:nr,loggerWithTag:CV,suppressLogging:LV,initLogSettings:VN,setupConsoleLogging:YN,logCustomLevel:MV,closeLogFile:Pm,getLogFilePath:()=>zc,OUTPUTS:$N,AuthAuditLog:qV};bV("logger",Bm.exports);function VN(e=!1){try{if(Qc===void 0||e){Pm();let t=UV(),r=GN(["ROOTPATH"]);try{Qc=kN(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!ho.pathExistsSync(Hn.join(r.ROOTPATH,St.HDB_CONFIG_FILE)))throw s}({level:nr,config_log_path:V_,to_file:Bn,to_stream:Xs}=BV(r.ROOTPATH?Hn.join(r.ROOTPATH,St.HDB_CONFIG_FILE):Qc.get("settings_path"))),$_=St.LOG_NAMES.HDB,zc=Hn.join(V_,$_)}}catch(t){if(Qc=void 0,t.code===St.NODE_ERROR_CODES.ENOENT){let r=GN(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){nr=u;continue}if(c===St.CONFIG_PARAMS.LOGGING_STDSTREAMS){Xs=u;continue}c===St.CONFIG_PARAMS.LOGGING_FILE&&(Bn=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=HV();Bn=Bn===void 0?n:Bn,Bn=FN(Bn),Xs=Xs===void 0?i:Xs,Xs=FN(Xs),nr=nr===void 0?s:nr,V_=yV,$_=St.LOG_NAMES.INSTALL,zc=Hn.join(V_,$_);return}throw Jc("Error initializing log settings"),Jc(t),t}process.env.DEV_MODE&&(Xs=!0),YN()}a(VN,"initLogSettings");var Lm=!0;function YN(){ma("error",Jc),ma("warn",vm),ma("log",Y_),ma("info",Y_),ma("debug",Um),ma("trace",Mm)}a(YN,"setupConsoleLogging");function ma(e,t){console[e]=function(...r){if(Lm&&t(...r),!/PM2 log:|App \[/.test(r[0]))return jc[e](...r)}}a(ma,"logConsole");function CV(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(WN),fatal:r(QN),error:r(Jc),warn:r(vm),info:r(Y_),debug:r(Um),trace:r(Mm)};function r(s){return function(...n){return s(t,...n)}}}a(CV,"loggerWithTag");function LV(e){try{Lm=!1,e()}finally{Lm=!0}}a(LV,"suppressLogging");var DV=AV?.name?.replace(/ /g,"-")||"main";function qn(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||DV+"/"+OV);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(qn,"createLogRecord");function Xc(e){Bn&&KN(e),Xs&&process.stdout.write(e)}a(Xc,"logStdOut");function K_(e){Bn&&KN(e),Xs&&process.stderr.write(e)}a(K_,"logStdErr");function KN(e){PV(),pa?ho.appendFileSync(pa,e):jc.log(e)}a(KN,"logToFile");function Pm(){try{ho.closeSync(pa)}catch{}pa=null}a(Pm,"closeLogFile");function PV(){if(!pa){try{if(!zc)debugger;pa=ho.openSync(zc,"a")}catch(e){jc.error(e)}setTimeout(()=>{Pm()},wV).unref()}}a(PV,"openLogFile");function Y_(...e){ir[nr]<=ir.info&&Xc(qn("info",e))}a(Y_,"info");function Mm(...e){ir[nr]<=ir.trace&&Xc(qn("trace",e))}a(Mm,"trace");function Jc(...e){ir[nr]<=ir.error&&K_(qn("error",e))}a(Jc,"error");function Um(...e){ir[nr]<=ir.debug&&Xc(qn("debug",e))}a(Um,"debug");function WN(...e){ir[nr]<=ir.notify&&Xc(qn("notify",e))}a(WN,"notify");function QN(...e){ir[nr]<=ir.fatal&&K_(qn("fatal",e))}a(QN,"fatal");function vm(...e){ir[nr]<=ir.warn&&K_(qn("warn",e))}a(vm,"warn");function MV(e,t,...r){t===$N.STDERR?K_(qn(e,r)):Xc(qn(e,r))}a(MV,"logCustomLevel");function UV(){let e;try{e=NV.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Hn.join(e,St.HDB_HOME_DIR_NAME,St.BOOT_PROPS_FILE_NAME);return ho.existsSync(t)||(t=Hn.join(Dm,"utility/hdb_boot_properties.file")),t}a(UV,"getPropsFilePath");function vV(e){nr=e}a(vV,"setLogLevel");function FN(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(FN,"autoCastBoolean");function BV(e){try{if(e.includes("config/settings.js")){let o=kN(e);return{level:o.get(St.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Hn.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=xN.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(BV,"getLogConfig");function HV(){try{let e=xN.parseDocument(ho.readFileSync(IV,"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(HV,"getDefaultConfig");function qV(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(qV,"AuthAuditLog")});var mo=T((Nde,GV)=>{GV.exports={name:"harperdb",version:"4.2.0-rc.1",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.418.0","@aws-sdk/lib-storage":"3.418.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.4.0","@fastify/static":"~6.11.0","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"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.23.2","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.8.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.10.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.2",lmdb:"2.9.0-beta.2",lodash:"4.17.21",mathjs:"11.11.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",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.3",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.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.1","validate.js":"0.13.1",ws:"^8.14.1",yaml:"2.3.2"},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((bde,jN)=>{"use strict";jN.exports={version:FV,printVersion:xV};var W_=mo();function FV(){if(W_)return W_.version}a(FV,"version");function xV(){W_&&console.log(`HarperDB Version ${W_.version}`)}a(xV,"printVersion")});var XN=T((Ide,JN)=>{"use strict";var zN=require("semver/functions/major"),kV=mo(),Hm=process.versions&&process.versions.node?process.versions.node:void 0;JN.exports=$V;function $V(){let e=kV.engines["minimum-node"];if(Hm&&zN(Hm)<zN(e))return{error:`The minimum version of Node.js HarperDB supports is: ${e}, the currently installed Node.js version is: ${Hm}. Please install a version of Node.js that is withing the defined range.`}}a($V,"checkNodeVersion")});var So={};Ge(So,{server:()=>Tt});var ZN,Tt,Pr=ge(()=>{ZN=require("../index"),Tt={};(0,ZN._assignPackageExport)("server",Tt)});var qm=T((Cde,eb)=>{"use strict";var VV=require("util"),YV=require("path"),KV=require("child_process"),WV=VV.promisify(KV.execFile),QV=1e3*1e3*10;eb.exports={findPs:jV};async function jV(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await WV("ps",["wwxo",`pid,${r}`],{maxBuffer:QV});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:YV.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(jV,"findPs")});var Ke=T((Dde,rb)=>{"use strict";var zV="__dbis__",JV="__txns__",XV="__environment_name__",ZV="__dbi_defintion__",eY={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"},tY=["__createdtime__","__updatedtime__"],rY="\uFFFF",tb={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},sY=Object.values(tb);rb.exports={AUDIT_STORE_NAME:JV,INTERNAL_DBIS_NAME:zV,DBI_DEFINITION_NAME:ZV,SEARCH_TYPES:eY,TIMESTAMP_NAMES:tY,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:XV,TRANSACTIONS_DBI_NAMES_ENUM:tb,TRANSACTIONS_DBIS:sY,OVERFLOW_MARKER:rY}});var Mr=T((Pde,_b)=>{"use strict";var sb=A(),nb=Ke(),ib={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},ob=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),ab={500:ob("There was an error processing your request."),400:"Invalid request"},nY=ab[ib.INTERNAL_SERVER_ERROR],iY={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.`},oY={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},aY={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"},cY={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 ${nb.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${nb.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"},uY={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${sb.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 ${sb.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"},cb={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"},lY={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."},_Y={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`},dY={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"},fY={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},EY={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`},ub={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.`},lb={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}`},hY={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."},mY={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},pY={...cb,...aY,...iY,...lY,..._Y,...dY,...fY,...EY,...uY,...ub,...lb,...hY,...mY,...oY};_b.exports={CHECK_LOGS_WRAPPER:ob,HDB_ERROR_MSGS:pY,DEFAULT_ERROR_MSGS:ab,DEFAULT_ERROR_RESP:nY,HTTP_STATUS_CODES:ib,LMDB_ERRORS_ENUM:cY,AUTHENTICATION_ERROR_MSGS:cb,VALIDATION_ERROR_MSGS:ub,ITC_ERRORS:lb}});var Z=T((Ude,Eb)=>{"use strict";var Sa=Mr(),SY=U(),TY=A(),Q_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,db),this.statusCode=s||Sa.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Sa.DEFAULT_ERROR_MSGS[s]?Sa.DEFAULT_ERROR_MSGS[s]:Sa.DEFAULT_ERROR_MSGS[Sa.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&&SY[n](i)}},Gm=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}},Fm=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function db(e,t,r,s=TY.LOG_LEVELS.ERROR,n=null,i=!1){if(fb(e))return e;let o=new Q_(e,t,r,s,n);return i&&delete o.stack,o}a(db,"handleHDBError");function fb(e){return e.__proto__.constructor.name===Q_.name}a(fb,"isHDBError");Eb.exports={isHDBError:fb,handleHDBError:db,ClientError:Gm,ServerError:Fm,hdb_errors:Sa}});var G=T((Hde,wb)=>{"use strict";var Ii=require("path"),Tb=require("fs-extra"),or=U(),hb=require("fs-extra"),j_=require("os"),gY=require("net"),RY=require("recursive-iterator"),We=A(),AY=qm(),mb=require("papaparse"),z_=require("moment"),{inspect:OY}=require("util"),pb=require("is-number"),Bde=require("lodash"),NY=require("minimist"),bY=require("https"),yY=require("http"),{hdb_errors:J_}=Z(),IY=/^((\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)))$/,gb=require("util").promisify(setTimeout),wY=100,CY=5,LY="",DY=4,Sb={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wb.exports={isEmpty:Ur,isEmptyOrZeroLength:Zs,arrayHasEmptyValues:UY,arrayHasEmptyOrZeroLengthValues:vY,buildFolderPath:BY,isBoolean:Rb,errorizeMessage:PY,stripFileExtension:qY,autoCast:GY,autoCastJSON:Ab,autoCastJSONDeep:km,removeDir:FY,compareVersions:xY,isCompatibleDataVersion:kY,escapeRawValue:$Y,unescapeValue:VY,stringifyProps:YY,timeoutPromise:WY,isClusterOperation:jY,getClusterUser:JY,checkGlobalSchemaTable:zY,getHomeDir:Nb,getPropsFilePath:KY,promisifyPapaParse:XY,removeBOM:bb,createEventPromise:ZY,checkProcessRunning:e1,checkSchemaTableExist:t1,checkSchemaExists:yb,checkTableExists:Ib,getStartOfTomorrowInSeconds:r1,getLimitKey:s1,isObject:HY,isNotEmptyAndHasValue:MY,autoCasterIsNumberCheck:Ob,backtickASTSchemaItems:n1,isPortTaken:QY,createForkArgs:i1,autoCastBoolean:o1,async_set_timeout:gb,getTableHashAttribute:a1,doesSchemaExist:c1,doesTableExist:u1,stringifyObj:l1,ms_to_time:_1,changeExtension:d1,getEnvCliRootPath:$m,noBootFile:f1,httpRequest:E1,transformReq:h1,convertToMS:m1,PACKAGE_ROOT:We.PACKAGE_ROOT};function PY(e){return e instanceof Error?e:new Error(e)}a(PY,"errorizeMessage");function Ur(e){return e==null}a(Ur,"isEmpty");function MY(e){return!Ur(e)&&(e||e===0||e===""||Rb(e))}a(MY,"isNotEmptyAndHasValue");function Zs(e){return Ur(e)||e.length===0||e.size===0}a(Zs,"isEmptyOrZeroLength");function UY(e){if(Ur(e))return!0;for(let t=0;t<e.length;t++)if(Ur(e[t]))return!0;return!1}a(UY,"arrayHasEmptyValues");function vY(e){if(Zs(e))return!0;for(let t=0;t<e.length;t++)if(Zs(e[t]))return!0;return!1}a(vY,"arrayHasEmptyOrZeroLengthValues");function BY(...e){try{return e.join(Ii.sep)}catch{console.error(e)}}a(BY,"buildFolderPath");function Rb(e){return Ur(e)?!1:e===!0||e===!1}a(Rb,"isBoolean");function HY(e){return Ur(e)?!1:typeof e=="object"}a(HY,"isObject");function qY(e){return Zs(e)?LY:e.slice(0,-DY)}a(qY,"stripFileExtension");function GY(e){return Ur(e)||e===""||typeof e!="string"?e:Sb[e]!==void 0?Sb[e]:Ob(e)===!0?Number(e):IY.test(e)?new Date(e):e}a(GY,"autoCast");function Ab(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Ab,"autoCastJSON");function km(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=km(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=km(r);s!==r&&(e[t]=s)}return e}else return Ab(e)}a(km,"autoCastJSONDeep");function Ob(e){if(e.startsWith("0.")&&pb(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pb(e))}a(Ob,"autoCasterIsNumberCheck");async function FY(e){if(Zs(e))throw new Error(`Directory path: ${e} does not exist`);try{await hb.emptyDir(e),await hb.remove(e)}catch(t){throw or.error(`Error removing files in ${e} -- ${t}`),t}}a(FY,"removeDir");function xY(e,t){if(Zs(e)){or.info("Invalid current version sent as parameter.");return}if(Zs(t)){or.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(xY,"compareVersions");function kY(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kY,"isCompatibleDataVersion");function $Y(e){if(Ur(e))return e;let t=String(e);return t==="."?We.UNICODE_PERIOD:t===".."?We.UNICODE_PERIOD+We.UNICODE_PERIOD:t.replace(We.FORWARD_SLASH_REGEX,We.UNICODE_FORWARD_SLASH)}a($Y,"escapeRawValue");function VY(e){if(Ur(e))return e;let t=String(e);return t===We.UNICODE_PERIOD?".":t===We.UNICODE_PERIOD+We.UNICODE_PERIOD?"..":String(e).replace(We.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(VY,"unescapeValue");function YY(e,t){if(Ur(e))return or.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+j_.EOL}!Zs(s)&&s[0]===";"?r+=" "+s+n+j_.EOL:Zs(s)||(r+=s+"="+n+j_.EOL)}catch{or.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(YY,"stringifyProps");function Nb(){let e;try{e=j_.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Nb,"getHomeDir");function KY(){let e=Ii.join(Nb(),We.HDB_HOME_DIR_NAME,We.BOOT_PROPS_FILE_NAME);return Tb.existsSync(e)||(e=Ii.join(__dirname,"../","hdb_boot_properties.file")),e}a(KY,"getPropsFilePath");function WY(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(WY,"timeoutPromise");async function QY(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=gY.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(QY,"isPortTaken");function jY(e){try{return We.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){or.error(`Error checking operation against cluster ops ${t}`)}return!1}a(jY,"isClusterOperation");function zY(e,t){let r=(de(),te(Le)).getDatabases();if(!r[e])return J_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return J_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(zY,"checkGlobalSchemaTable");function JY(e,t){if(Ur(t)){or.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Ur(e)||Zs(e)){or.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){or.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){or.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(JY,"getClusterUser");function XY(){mb.parsePromise=function(e,t,r){return new Promise(function(s,n){mb.parse(e,{header:!0,transformHeader:bb,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(XY,"promisifyPapaParse");function bb(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bb,"removeBOM");function ZY(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;or.info(`Got cluster status event response: ${OY(n)}`);try{i.cancel()}catch{or.error("Error trying to cancel timeout.")}s(n)})})}a(ZY,"createEventPromise");async function e1(e){let t=!0,r=0;do await gb(wY*r++),(await AY.findPs(e)).length>0&&(t=!1);while(t&&r<CY);if(t)throw new Error(`process ${e} was not started`)}a(e1,"checkProcessRunning");function t1(e,t){let r=yb(e);if(r)return r;let s=Ib(e,t);if(s)return s}a(t1,"checkSchemaTableExist");function yb(e){let{getDatabases:t}=(de(),te(Le));if(!t()[e])return J_.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yb,"checkSchemaExists");function Ib(e,t){let{getDatabases:r}=(de(),te(Le));if(!r()[e][t])return J_.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Ib,"checkTableExists");function r1(){let e=z_().utc().add(1,We.MOMENT_DAYS_TAG).startOf(We.MOMENT_DAYS_TAG).unix(),t=z_().utc().unix();return e-t}a(r1,"getStartOfTomorrowInSeconds");function s1(){return z_().utc().format("DD-MM-YYYY")}a(s1,"getLimitKey");function n1(e){try{let t=new RY(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){or.error("Got an error back ticking items."),or.error(t)}}a(n1,"backtickASTSchemaItems");function i1(e){return[e]}a(i1,"createForkArgs");function o1(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(o1,"autoCastBoolean");function a1(e,t){let{getDatabases:r}=(de(),te(Le)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(a1,"getTableHashAttribute");function c1(e){let{getDatabases:t}=(de(),te(Le));return t()[e]!==void 0}a(c1,"doesSchemaExist");function u1(e,t){let{getDatabases:r}=(de(),te(Le));return r()[e]?.[t]!==void 0}a(u1,"doesTableExist");function l1(e){try{return JSON.stringify(e)}catch{return e}}a(l1,"stringifyObj");function _1(e){let t=z_.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(_1,"ms_to_time");function d1(e,t){let r=Ii.basename(e,Ii.extname(e));return Ii.join(Ii.dirname(e),r+t)}a(d1,"changeExtension");function $m(){if(process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=NY(process.argv);if(e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[We.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a($m,"getEnvCliRootPath");var xm;function f1(){if(xm)return xm;let e=$m();$m()&&Tb.pathExistsSync(Ii.join(e,We.HDB_CONFIG_FILE))&&(xm=!0)}a(f1,"noBootFile");function E1(e,t){let r;return e.protocol==="http:"?r=yY:r=bY,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(E1,"httpRequest");function h1(e){if(!e.schema&&!e.database){e.schema=We.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(h1,"transformReq");function m1(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(m1,"convertToMS")});var Vm=T((Gde,Cb)=>{"use strict";var p1={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,String.fromCharCode(13,10)),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,String.fromCharCode(13,10))},S1="certificate.pem",T1="privateKey.pem",g1="ca.pem";Cb.exports={CERTIFICATE_VALUES:p1,CERTIFICATE_PEM_NAME:S1,PRIVATEKEY_PEM_NAME:T1,CA_PEM_NAME:g1}});var Ve=T((Fde,Lb)=>{"use strict";var ar=require("validate.js");ar.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||ar.validators.type.checks[t](e)?null:` must be a '${t}' value`};ar.validators.type.checks={Object:function(e){return ar.isObject(e)&&!ar.isArray(e)},Array:ar.isArray,Integer:ar.isInteger,Number:ar.isNumber,String:ar.isString,Date:ar.isDate,Boolean:function(e){return typeof e=="boolean"}};ar.validators.hasValidFileExt=function(e,t){return ar.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};Lb.exports={validateObject:R1,validateObjectAsync:A1,validateBySchema:O1};function R1(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=ar(e,t,{format:"flat"});return r?new Error(r):null}a(R1,"validateObject");async function A1(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await ar.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(A1,"validateObjectAsync");function O1(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(O1,"validateBySchema")});var Km=T(($de,vb)=>{"use strict";var Ub=require("fs-extra"),_e=require("joi"),N1=require("os"),{boolean:De,string:en,number:Mt,array:Ym}=_e.types(),{totalmem:Db}=require("os"),Ta=require("path"),b1=U(),Z_=G(),kde=Vm(),Pb=A(),y1=Ve(),Mb="log",I1="components",w1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",C1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",L1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",D1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",P1="rootPath config parameter is undefined",M1="clustering.enabled config parameter is undefined",To=Mt.min(0).required(),ed=Ym.items({host:en.required(),port:To}).empty(null),Gn;vb.exports={configValidator:U1,routesValidator:F1,route_constraints:ed};function U1(e){if(Gn=e.rootPath,Z_.isEmpty(Gn))throw P1;let t=De.required(),r=Mt.min(0).max(1e3).empty(null).default(G1),s=en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(X_),n=en.optional().empty(null),i=en.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),o=_e.string().empty(null).default(X_),c=_e.custom(B1).empty(null).default(X_),u=e.clustering?.enabled;if(Z_.isEmpty(u))throw M1;let _;return u===!0?_=_e.object({enabled:t,hubServer:_e.object({cluster:_e.object({name:_e.required().empty(null),network:_e.object({port:To,routes:ed}).required()}).required(),leafNodes:_e.object({network:_e.object({port:To}).required()}).required(),network:_e.object({port:To}).required()}).required(),leafServer:_e.object({network:_e.object({port:To,routes:ed}).required(),streams:_e.object({maxAge:Mt.min(120).allow(null).optional(),maxBytes:Mt.min(1).allow(null).optional(),maxMsgs:Mt.min(1).allow(null).optional(),path:o}).required()}).required(),logLevel:_e.valid("error","warn","info","debug","trace"),nodeName:i,republishMessages:De.optional(),databaseLevel:De.optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:De.required(),verify:De.optional()}),user:en.optional().empty(null)}).required():_=_e.object({enabled:t,tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n,insecure:De.required()})}).required(),_e.object({authentication:_e.object({authorizeLocal:De,cacheTTL:Mt.required(),enableSessions:De}),analytics:_e.object({aggregatePeriod:Mt}),componentsRoot:s.optional(),clustering:_,localStudio:_e.object({enabled:t}).required(),logging:_e.object({auditAuthEvents:_e.object({logFailed:De,logSuccessful:De}),file:De.required(),level:_e.valid("notify","fatal","error","warn","info","debug","trace"),rotation:_e.object({enabled:De.optional(),compress:De.optional(),interval:en.custom(q1).optional().empty(null),maxSize:en.custom(H1).optional().empty(null),path:en.optional().empty(null).default(X_)}).required(),root:s,stdStreams:De.required(),auditLog:De.required()}).required(),operationsApi:_e.object({network:_e.object({cors:De.optional(),corsAccessList:Ym.optional(),headersTimeout:Mt.min(1).optional(),keepAliveTimeout:Mt.min(1).optional(),port:Mt.optional().empty(null),securePort:Mt.optional().empty(null),timeout:Mt.min(1).optional()}).optional(),tls:_e.object({certificate:n,certificateAuthority:n,privateKey:n})}).required(),rootPath:en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:_e.object({network:_e.object({port:To,securePort:To}).required(),webSocket:De.optional(),requireAuthentication:De.optional()}),http:_e.object({compressionThreshold:Mt.optional(),cors:De.optional(),corsAccessList:Ym.optional(),headersTimeout:Mt.min(1).optional(),port:Mt.min(0).optional().empty(null),securePort:Mt.min(0).optional().empty(null)}).required(),threads:r.optional(),storage:_e.object({writeAsync:De.required(),overlappingSync:De.optional(),caching:De.optional(),compression:De.optional(),noReadAhead:De.optional(),path:c,prefetchWrites:De.optional()}).required(),ignoreScripts:De.optional(),tls:_e.object({certificate:n.optional(),certificateAuthority:n.optional(),privateKey:n.optional()})}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(U1,"configValidator");function v1(e){return Ub.existsSync(e)?null:`Specified path ${e} does not exist.`}a(v1,"doesPathExist");function B1(e,t){_e.assert(e,en.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=v1(e);if(r)return t.message(r)}a(B1,"validatePath");function H1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(w1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(L1):e}a(H1,"validateRotationMaxSize");function q1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(C1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(D1):e}a(q1,"validateRotationInterval");function G1(e,t){let r=t.state.path.join("."),s=N1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Db();return i=Math.round(Math.min(i,Db())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),b1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(G1,"setDefaultThreads");function X_(e,t){if(!Z_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Z_.isEmpty(Gn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"componentsRoot":return Ta.join(Gn,I1);case"logging.root":return Ta.join(Gn,Mb);case"clustering.leafServer.streams.path":return Ta.join(Gn,"clustering","leaf");case"storage.path":let s=Ta.join(Gn,Pb.LEGACY_DATABASES_DIR_NAME);return Ub.existsSync(s)?s:Ta.join(Gn,Pb.DATABASES_DIR_NAME);case"logging.rotation.path":return Ta.join(Gn,Mb);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(X_,"setDefaultRoot");function F1(e){let t=_e.object({routes:ed});return y1.validateBySchema({routes:e},t)}a(F1,"routesValidator")});var tt=T((Kde,Vb)=>{"use strict";var vr=A(),bt=G(),gt=U(),{configValidator:x1,routesValidator:Bb}=Km(),cr=require("fs-extra"),k1=require("yaml"),bs=require("path"),$1=require("is-number"),qb=require("properties-reader"),V1=require("lodash"),{handleHDBError:Y1}=Z(),{HTTP_STATUS_CODES:K1,HDB_ERROR_MSGS:td}=Mr(),Yde=require("minimist"),{server:W1}=(Pr(),te(So)),{DATABASES_PARAM_CONFIG:Zc,CONFIG_PARAMS:Fn,CONFIG_PARAM_MAP:ys}=vr,Q1="Unable to get config value because config is uninitialized",j1="Config successfully initialized",z1="Error backing up config file",J1="Empty parameter sent to getConfigValue",Gb=bs.join(vr.PACKAGE_ROOT,"config","yaml",vr.HDB_DEFAULT_CONFIG_FILE),X1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Hb={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"},rd,Ut,sd;Vb.exports={createConfigFile:Z1,getDefaultConfig:eK,getConfigValue:xb,initConfig:Qm,flattenConfig:ga,updateConfigValue:kb,updateConfigObject:rK,getConfiguration:iK,setConfiguration:oK,readConfigFile:zm,getClusteringRoutes:aK,initOldConfig:$b,getConfigFromFile:cK,getConfigFilePath:go,addConfig:uK,deleteConfigFromFile:lK,getConfigObj:_K};function Z1(e){let t=wi(Gb);rd=ga(t.toJSON());let r;for(let o in e){let c=ys[o.toLowerCase()];if(c===Fn.DATABASES){r=e[o];continue}if(!c&&o.endsWith("_package")&&(c=o),c!==void 0){let u=c.split("_"),_=Wm(c,e[o]);c==="rootPath"&&_?.endsWith("/")&&(_=_.slice(0,-1));try{t.setIn([...u],_)}catch(l){gt.error(l)}}}r&&Fb(t,r),jm(t);let s=t.toJSON();Ut=ga(s);let n=t.getIn(["rootPath"]),i=bs.join(n,vr.HDB_CONFIG_FILE);cr.createFileSync(i),cr.writeFileSync(i,String(t)),gt.trace(`Config file written to ${i}`)}a(Z1,"createConfigFile");function Fb(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!bt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zc.TABLES))for(let i in s[n][Zc.TABLES])for(let o in s[n][Zc.TABLES][i]){let c=s[n][Zc.TABLES][i][o],u=[Fn.DATABASES,n,Zc.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=[Fn.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(Fb,"setSchemasConfig");function eK(e){if(rd===void 0){let r=wi(Gb);rd=ga(r.toJSON())}let t=ys[e.toLowerCase()];if(t!==void 0)return rd[t.toLowerCase()]}a(eK,"getDefaultConfig");function xb(e){if(e==null){gt.error(J1);return}if(Ut===void 0){gt.trace(Q1);return}let t=ys[e.toLowerCase()];if(t!==void 0)return Ut[t.toLowerCase()]}a(xb,"getConfigValue");function go(e=bt.getPropsFilePath()){let t=bt.getEnvCliRootPath();return t?bs.join(t,vr.HDB_CONFIG_FILE):qb(e).get(vr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(go,"getConfigFilePath");function Qm(e=!1){if(Ut===void 0||e){let t;if(!bt.noBootFile()){t=bt.getPropsFilePath();try{cr.accessSync(t,cr.constants.F_OK|cr.constants.R_OK)}catch(i){throw gt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=go(t),s;if(r.includes("config/settings.js"))try{$b(r);return}catch(i){if(i.code!==vr.NODE_ERROR_CODES.ENOENT)throw i}try{s=wi(r)}catch(i){if(i.code===vr.NODE_ERROR_CODES.ENOENT){gt.trace(`HarperDB config file not found at ${r}.
6
+ 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}`)}tK(s,r),jm(s);let n=s.toJSON();if(W1.config=n,Ut=ga(n),Ut.logging_rotation_rotate)for(let i in Hb)Ut[i]&&gt.error(`Config ${Hb[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);gt.trace(j1)}}a(Qm,"initConfig");function tK(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],bs.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],bs.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],bs.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"),cr.writeFileSync(t,String(e)))}a(tK,"checkForUpdatedConfig");function jm(e){let t=e.toJSON();t.componentsRoot=t.componentsRoot??t?.customFunctions?.root,t.threads=t.threads??t?.http?.threads;let r=x1(t);if(r.error)throw td.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(jm,"validateConfig");function rK(e,t){Ut===void 0&&(Ut={});let r=ys[e.toLowerCase()];if(r===void 0){gt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Ut[r.toLowerCase()]=t}a(rK,"updateConfigObject");function kb(e,t,r=void 0,s=!1,n=!1,i=!1){Ut===void 0&&Qm();let o=xb(ys.hdb_root),c=bs.join(o,vr.HDB_CONFIG_FILE),u=wi(c),_;if(r===void 0&&e.toLowerCase()===Fn.DATABASES)_=t;else if(r===void 0){let f;if(i)f=e;else if(f=ys[e.toLowerCase()],f===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let E=f.split("_"),h=Wm(f,t);u.setIn([...E],h)}else for(let f in r){let E=ys[f.toLowerCase()];if(E===Fn.DATABASES){_=r[f];continue}if(!E&&f.endsWith("_package")&&(E=f),E!==void 0){let h=E.split("_"),p=vr.LEGACY_CONFIG_PARAMS[f.toUpperCase()];p&&p.startsWith("customFunctions")&&u.hasIn(p.split("_"))&&(E=p,h=p.split("_"));let m=Wm(E,r[f]);E==="rootPath"&&m?.endsWith("/")&&(m=m.slice(0,-1));try{u.setIn([...h],m)}catch(g){gt.error(g)}}}_&&Fb(u,_),jm(u);let l=u.getIn(["rootPath"]),d=bs.join(l,vr.HDB_CONFIG_FILE);s===!0&&sK(c,l),cr.writeFileSync(d,String(u)),n&&(Ut=ga(u.toJSON())),gt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(kb,"updateConfigValue");function sK(e,t){try{let r=bs.join(t,"backup",`${vr.HDB_CONFIG_FILE}.bak`);cr.copySync(e,r),gt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){gt.error(z1),gt.error(r)}}a(sK,"backupConfigFile");var nK=["databases"];function ga(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)),sd=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])&&!nK.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;!Fn[u.toUpperCase()]&&ys[u]&&(n[ys[u].toLowerCase()]=o[c]),n[u]=o[c]}}else n[i.toLowerCase()]=s[i];return n}a(r,"squashObj")}a(ga,"flattenConfig");function Wm(e,t){if(e===Fn.CLUSTERING_NODENAME||e===Fn.CLUSTERING_USER){if(t==null)return t;if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if($1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||bt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return bt.autoCast(t)}a(Wm,"castConfigValue");function iK(){let e=bt.getPropsFilePath(),t=go(e);return wi(t).toJSON()}a(iK,"getConfiguration");async function oK(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return kb(void 0,void 0,n,!0),X1}catch(i){throw typeof i=="string"||i instanceof String?Y1(i,i,K1.BAD_REQUEST,void 0,void 0,!0):i}}a(oK,"setConfiguration");function zm(){let e=bt.getPropsFilePath();try{cr.accessSync(e,cr.constants.F_OK|cr.constants.R_OK)}catch(s){if(!bt.noBootFile())throw gt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=go(e);return wi(t).toJSON()}a(zm,"readConfigFile");function wi(e){return k1.parseDocument(cr.readFileSync(e,"utf8"),{simpleKeys:!0})}a(wi,"parseYamlDoc");function aK(){let e=zm(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=bt.isEmptyOrZeroLength(t)?[]:t;let r=Bb(t);if(r)throw td.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=bt.isEmptyOrZeroLength(s)?[]:s;let n=Bb(s);if(n)throw td.CONFIG_VALIDATION(n.message);if(!bt.isEmptyOrZeroLength(s)&&!bt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!bt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw td.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(aK,"getClusteringRoutes");function $b(e){let t=qb(e);Ut={};for(let r in ys){let s=t.get(r.toUpperCase());if(bt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=ys[r].toLowerCase();n===Fn.LOGGING_ROOT?Ut[n]=bs.dirname(s):Ut[n]=s}return Ut}a($b,"initOldConfig");function cK(e){let t=zm();return V1.get(t,e.replaceAll("_","."))}a(cK,"getConfigFromFile");async function uK(e,t){let r=wi(go());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await cr.writeFile(go(),String(r))}a(uK,"addConfig");function lK(e){let t=go(bt.getPropsFilePath()),r=wi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=bs.join(s,vr.HDB_CONFIG_FILE);cr.writeFileSync(n,String(r))}a(lK,"deleteConfigFromFile");function _K(){return sd||(Qm(),sd)}a(_K,"getConfigObj")});var Q=T((Qde,Wb)=>{"use strict";var Jm=require("fs-extra"),Is=require("path"),Yb=require("os"),dK=require("properties-reader"),eu=U(),Ro=G(),re=A(),nd=tt(),fK="Error initializing environment manager",id="BOOT_PROPS_FILE_PATH",Kb=!1,EK={[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},xn={};Wb.exports={BOOT_PROPS_FILE_PATH:id,getHdbBasePath:hK,setHdbBasePath:mK,get:pK,initSync:TK,setProperty:pe,initTestEnvironment:gK};function hK(){return xn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(hK,"getHdbBasePath");function mK(e){xn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(mK,"setHdbBasePath");function pK(e){let t=nd.getConfigValue(e);return t===void 0?xn[e]:t}a(pK,"get");function pe(e,t){EK[e]&&(xn[e]=t),nd.updateConfigObject(e,t)}a(pe,"setProperty");function SK(){let e;try{e=Ro.getPropsFilePath(),Jm.accessSync(e,Jm.constants.F_OK|Jm.constants.R_OK),Kb=!0;let t=dK(e);return xn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),xn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),xn[id]=e,!0}catch{return eu.trace(`Environment manager found no properties file at ${e}`),!1}}a(SK,"doesPropFileExist");function TK(e=!1){try{(Kb||SK()||Ro.noBootFile())&&(nd.initConfig(e),xn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=nd.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){eu.error(fK),eu.error(t),console.error(t),process.exit(1)}}a(TK,"initSync");function gK(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=Is.join(__dirname,"../../","unitTests");xn[id]=Is.join(u,"hdb_boot_properties.file"),pe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Is.join(u,"settings.test")),pe(re.HDB_SETTINGS_NAMES.INSTALL_USER,Yb.userInfo()?Yb.userInfo().username:void 0),pe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Is.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.HDB_SETTINGS_NAMES.CERT_KEY,Is.join(u,"envDir","utility","keys","certificate.pem")),pe(re.CONFIG_PARAMS.TLS_PRIVATEKEY,Is.join(u,"envDir","utility","keys","privateKey.pem")),pe(re.CONFIG_PARAMS.TLS_CERTIFICATE,Is.join(u,"envDir","utility","keys","certificate.pem")),pe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),pe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Is.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,Is.join(u,"envDir")),pe(re.CONFIG_PARAMS.STORAGE_PATH,Is.join(u,"envDir")),pe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ro.isEmpty(n)?!0:n),pe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ro.isEmpty(n)?!0:n),pe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),pe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ro.isEmpty(i)?!1:i),pe(re.CONFIG_PARAMS.HTTP_CORS,Ro.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,Is.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),pe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ro.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 ${id}. Please check your boot props and settings files`;eu.fatal(r),eu.error(t)}}a(gK,"initTestEnvironment")});var Be=T((zde,ey)=>{"use strict";var iu=A(),RK=G(),ur=Q(),ou=require("path"),AK=require("minimist"),Qb=require("fs-extra"),jb=require("lodash");ur.initSync();var{CONFIG_PARAMS:Ci,DATABASES_PARAM_CONFIG:tu,SYSTEM_SCHEMA_NAME:od}=iu,ru,su,nu;function zb(){if(ru!==void 0)return ru;if(ur.getHdbBasePath()!==void 0)return ru=ur.get(Ci.STORAGE_PATH)||ou.join(ur.getHdbBasePath(),iu.DATABASES_DIR_NAME),ru}a(zb,"getBaseSchemaPath");function Jb(){if(su!==void 0)return su;if(ur.getHdbBasePath()!==void 0)return su=Zb(od),su}a(Jb,"getSystemSchemaPath");function Xb(){if(nu!==void 0)return nu;if(ur.getHdbBasePath()!==void 0)return nu=ur.get(iu.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ou.join(ur.getHdbBasePath(),iu.TRANSACTIONS_DIR_NAME),nu}a(Xb,"getTransactionAuditStoreBasePath");function OK(e,t){let r=ur.get(Ci.DATABASES)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ou.join(Xb(),e.toString())}a(OK,"getTransactionAuditStorePath");function Zb(e,t){e=e.toString(),t=t&&t.toString();let r=ur.get(iu.CONFIG_PARAMS.DATABASES)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ou.join(zb(),e)}a(Zb,"getSchemaPath");function NK(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,AK(process.argv));let s=r[Ci.DATABASES.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!RK.isObject(s))throw o;i=s}for(let o of i){let c=o[od];if(!c)continue;let u=ur.get(Ci.DATABASES);u=u??{};let _=c?.tables?.[t]?.[tu.PATH];if(_)return jb.set(u,[od,tu.TABLES,t,tu.PATH],_),ur.setProperty(Ci.DATABASES,u),_;let l=c?.[tu.PATH];if(l)return jb.set(u,[od,tu.PATH],l),ur.setProperty(Ci.DATABASES,u),l}}let n=r[Ci.STORAGE_PATH.toUpperCase()];if(n){if(!Qb.pathExistsSync(n))throw new Error(n+" does not exist");let i=ou.join(n,e);return Qb.mkdirsSync(i),ur.setProperty(Ci.STORAGE_PATH,n),i}return Jb()}a(NK,"initSystemSchemaPaths");function bK(){ru=void 0,su=void 0,nu=void 0}a(bK,"resetPaths");ey.exports={getBaseSchemaPath:zb,getSystemSchemaPath:Jb,getTransactionAuditStorePath:OK,getTransactionAuditStoreBasePath:Xb,getSchemaPath:Zb,initSystemSchemaPaths:NK,resetPaths:bK}});var lr=T((efe,iy)=>{"use strict";var yK=Mr().LMDB_ERRORS_ENUM,Xde=require("lmdb"),IK=Ke(),Zde=require("buffer").Buffer,{OVERFLOW_MARKER:ty,MAX_SEARCH_KEY_LENGTH:ad}=IK,ry=["number","string","symbol","boolean","bigint"];function wK(e){if(e=e?.primaryStore||e,!e)throw new Error(yK.ENV_REQUIRED)}a(wK,"validateEnv");function CK(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(CK,"stringifyData");function LK(e){return e instanceof Date?e.valueOf():e}a(LK,"convertKeyValueToWrite");function DK(e){if(e==null)return;if(ry.includes(typeof e))return e.length>ad?[e.slice(0,ad)+ty]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(ry.includes(typeof n))n.length>ad?t.push(n.slice(0,ad)+ty):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(DK,"getIndexedValues");var cd=0,sy=0;function ny(){sy=Date.now()-performance.now()}a(ny,"adjustStartTime");ny();var PK=6e4;setInterval(ny,PK).unref();function MK(){let e=performance.now()+sy;return e>cd?(cd=e,e):(cd+=488e-6,cd)}a(MK,"getNextMonotonicTime");iy.exports={validateEnv:wK,stringifyData:CK,convertKeyValueToWrite:LK,getNextMonotonicTime:MK,getIndexedValues:DK}});var oy,ws,Xm,au=ge(()=>{oy=require("events"),ws=class extends oy.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new Xm;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)}},Xm=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 ts(e){return e[Wt]||(e[Wt]=Object.create(null))}function dd(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}`);ts(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}`);ts(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}`);ts(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}`);ts(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}`);ts(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}`);ts(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}`);ts(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}`);ts(this)[c]=l},"set");break;case"Any":case void 0:u=a(function(l){ts(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}`);ts(this)[c]=l},"set")}let _=s[c]={get(){let l=this[Wt];if(l&&c in l)return l[c];let d=this[Re]?.[c];if(d&&typeof d=="object"){let f=ay(d,o);if(f)return l||(l=this[Wt]=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[Wt];return u?.[o]!==void 0?u[o]:this[Re]?.[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");ts(this)[o]=c}),i("deleteProperty",function(o){ts(this)[o]=void 0}),i("toJSON",function(){let o=this[Wt],c;for(let _ in o)c||(c=Object.assign({},this[Re])),c[_]=o[_];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[Re])),Object.assign(c,this)),c||this[Re]}),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 ay(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[Re]=n}},dd(r,t)),new r(e)):new ud(e);case Array:let s=new _d(e.length);s[Re]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=ay(o,t?.elements)),s[n]=o}return s}}function fd(e){let t=e[Wt],r;for(let n in t){r||(r=Object.assign({},e[Re]));let i=t[n];i&&typeof i=="object"&&(i=fd(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[Re])),Object.assign(r,e)),r||e[Re]}function cu(e){let t;if(e[Re]&&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=cu(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Wt];for(let s in r){t||(t=Object.assign({},e[Re]));let n=r[s];n&&typeof n=="object"&&(n=cu(n)),t[s]=n}return t?Object.freeze(t):e[Re]||(e.buffer?e:Object.freeze(e))}function ld(e){let t=e[Re];if(t===void 0)return!0;if(e.constructor===Array){if(!t||e[Ao]||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?.[Re]===n){if(ld(i))return!0}else return!0}}else{let r=e[Wt];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[Re]===i){if(ld(n))return!0}else return!0}else return!0}}return!1}var Cs,Wt,ud,Ao,_d,Ed=ge(()=>{tn();Cs=M(Z()),Wt=Symbol("own-data");a(ts,"getChanges");a(dd,"assignTrackedAccessors");a(ay,"trackObject");ud=class{static{a(this,"GenericTrackedObject")}constructor(t){this[Re]=t}};dd(ud,{});a(fd,"collapseData");a(cu,"deepFreeze");a(ld,"hasChanges");Ao=Symbol.for("has-array-changes"),_d=class extends Array{static{a(this,"TrackedArray")}[Ao];constructor(t){super(t)}splice(...t){return this[Ao]=!0,super.splice(...t)}push(...t){return this[Ao]=!0,super.push(...t)}pop(){return this[Ao]=!0,super.pop()}unshift(...t){return this[Ao]=!0,super.unshift(...t)}shift(){return this[Ao]=!0,super.shift()}};_d.prototype.constructor=Array});var Zm,UK,Oo,hd,ep=ge(()=>{Zm=M(lr()),UK=100,Oo=class{static{a(this,"DatabaseTransaction")}writes=[];lmdbDb;readTxn;readTxnRefCount;validated=0;timestamp=0;open=!0;getReadTxn(){return this.readTxnRefCount=(this.readTxnRefCount||0)+1,this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}disregardReadTxn(){--this.readTxnRefCount===0&&this.resetReadSnapshot()}resetReadSnapshot(){this.readTxn&&(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,Zm.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 p=this.writes[h];if(!p)continue;let m=p[f===0?"before":"beforeIntermediate"];if(m){let g=m();E?E.push?E.push(g):E=[E,g]:E=g}}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<UK>>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),Promise.all(i).then(()=>(this.writes=[],{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=[]}},hd=class extends Oo{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit()}get timestamp(){return this._timestamp||(this._timestamp=(0,Zm.getNextMonotonicTime)())}getReadTxn(){}}});function Qe(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 Oo;e.timestamp&&(s.timestamp=e.timestamp),s[Oe]=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 cy,No=ge(()=>{cy=require("../index");tn();ep();a(Qe,"transaction");(0,cy._assignPackageExport)("transaction",Qe);Qe.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Qe.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()}});function sp(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,_,l=e[1]??e.value;l instanceof Date&&(l=l.getTime());let d=e.comparator,f;switch(BK[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]=sn.MAXIMUM_KEY;break;case"starts_with":o=l.toString(),c=l+String.fromCharCode(65535);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}if(r){let m=o;o=c,c=m,m=!_,_=!u,u=m}let E=i===s.primaryKey||i==null,h=E?s.primaryStore:s.indices[i];if(!h||h.isIndexing||f){if(!n)throw new tp.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let m=np(e);if(!m)throw new tp.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:R})=>new Promise((b,V)=>setImmediate(()=>{try{b(R&&m(R)?g:ly.SKIP)}catch($){V($)}})))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:_,values:!E,transaction:t,reverse:r};return E?h.getRange(p):h.getRange(p).map(({value:m})=>m)}function np(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case yt.SEARCH_TYPES.EQUALS:case void 0:return rn(r,n=>n===s);case yt.SEARCH_TYPES.CONTAINS:return rn(r,n=>n?.toString().includes(s));case yt.SEARCH_TYPES.ENDS_WITH:case yt.SEARCH_TYPES._ENDS_WITH:return rn(r,n=>n?.toString().endsWith(s));case yt.SEARCH_TYPES.STARTS_WITH:case yt.SEARCH_TYPES._STARTS_WITH:return rn(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()),rn(r,n=>(0,sn.compareKeys)(n,s[0])>=0&&(0,sn.compareKeys)(n,s[1])<=0);case"gt":case yt.SEARCH_TYPES.GREATER_THAN:case yt.SEARCH_TYPES._GREATER_THAN:return rn(r,n=>(0,sn.compareKeys)(n,s)>0);case"ge":case yt.SEARCH_TYPES.GREATER_THAN_EQUAL:case yt.SEARCH_TYPES._GREATER_THAN_EQUAL:return rn(r,n=>(0,sn.compareKeys)(n,s)>=0);case yt.SEARCH_TYPES.LESS_THAN:case"lt":case yt.SEARCH_TYPES._LESS_THAN:return rn(r,n=>(0,sn.compareKeys)(n,s)<0);case"le":case yt.SEARCH_TYPES.LESS_THAN_EQUAL:case yt.SEARCH_TYPES._LESS_THAN_EQUAL:return rn(r,n=>(0,sn.compareKeys)(n,s)<=0);case"ne":return rn(r,n=>(0,sn.compareKeys)(n,s)!==0);default:return}}function rn(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 md(e){if(!e)return;let t=new rp,r,s,n,i,o,c=uy;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=vK[_],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?HK:uy,c.lastIndex=i}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var tp,yt,sn,ly,vK,BK,uy,HK,rp,pd=ge(()=>{tp=M(Z()),yt=M(Ke()),sn=require("ordered-binary"),ly=require("lmdb"),vK={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(sp,"idsForCondition");BK={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(np,"filterByType");a(rn,"attributeComparator");uy=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,HK=/([^&|*=]+)([&|*=]*)/g;a(md,"parseQuery");rp=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 ap={};Ge(ap,{CONTEXT:()=>Oe,ID_PROPERTY:()=>Pe,IS_COLLECTION:()=>nn,RECORD_PROPERTY:()=>Re,Resource:()=>vt,SAVE_UPDATES_PROPERTY:()=>my,snake_case:()=>GK});function GK(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function _y(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 op(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function rs(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[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(_=n,c=_[this.primaryKey]??null,o=i[Oe]||i):_=i:(_=n,c=_[Pe]??_[this.primaryKey]??null):i?o=i[Oe]||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 Qe(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[my]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?f.allowRead(o.user,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,o);if(E?.then)return E.then(h=>{if(!h)throw new Sd(o.user);return typeof _?.then=="function"?_.then(p=>e(f,u,o,p)):e(f,u,o,_)});if(!E)throw new Sd(o.user)}return typeof _?.then=="function"?_.then(E=>e(f,u,o,E)):e(f,u,o,_)}a(d,"authorizeActionOnResource")}}function ss(e,t){let r=new hy.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 ip(e){let t=e[Re];if(t){let r=e[Wt];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 dy(e){if(typeof e=="string")return t=>ip(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=ip(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=ip(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 fy,Ey,hy,Oe,Pe,nn,my,Re,qK,vt,Sd,op,tn=ge(()=>{fy=require("crypto");au();Ey=require("../index"),hy=M(Z());Ed();No();pd();Oe=Symbol.for("context"),Pe=Symbol.for("primary-key"),nn=Symbol("is-collection"),my=Symbol("save-updates"),Re=Symbol("stored-record"),qK={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},vt=class{static{a(this,"Resource")}static transactions;constructor(t,r){this[Pe]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}static get=rs(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 _=dy(u);return typeof c?.map=="function"?c.map(_):_(c)}return c}},{type:"read",resetTransaction:!0,ensureLoaded:!0,async:!0});static put=rs(function(t,r,s,n){if(Array.isArray(n)&&t[nn]){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):ss(t,"put")},{hasContent:!0,type:"update"});static delete=rs(function(t,r,s,n){return t.delete?t.delete(r):ss(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,fy.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),Qe(s,()=>{let i=new this(n,s),o=i.put?i.put(r):ss(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=rs(function(t,r,s,n){return t.invalidate?t.invalidate(r):ss(t,"delete")},{hasContent:!1,type:"update"});static post=rs(function(t,r,s,n){return t[Pe]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=rs(function(t,r,s,n){return t.connect?t.connect(n,r):ss(t,"connect")},{hasContent:!0,type:"read"});static subscribe=rs(function(t,r,s,n){return t.subscribe?t.subscribe(r):ss(t,"subscribe")},{type:"read"});static publish=rs(function(t,r,s,n){return t[Pe]!=null&&t.update?.(),t.publish?t.publish(n,r):ss(t,"publish")},{hasContent:!0,type:"create"});static search=rs(function(t,r,s,n){let i=t.search?t.search(r):ss(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=dy(o);return i.map(c)}return i},{type:"read"});static query=rs(function(t,r,s,n){return t.search?t.search(n,r):ss(t,"search")},{hasContent:!0,type:"read"});static copy=rs(function(t,r,s,n){return t.copy?t.copy(n,r):ss(t,"copy")},{type:"create"});static move=rs(function(t,r,s,n){return t.move?t.move(n,r):ss(t,"move")},{type:"delete"});post(t){if(this[nn])return this.constructor.create(this[Pe],t,this[Oe]);ss(this,"post")}static isCollection(t){return t?.[nn]}static coerceId(t){return t}static parseQuery(t){return md(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&&qK[i];if(o)r.headers.set("accept",o);else if(s)s.property=i;else return{query:{property:i},id:_y(t,this)}}return _y(t,this)}static getResource(t,r,s){let n,i=r[Oe],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(_=>_[Pe]===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[Pe],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[nn]=!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[Pe]}getContext(){return this[Oe]}};vt.prototype[Oe]=null;(0,Ey._assignPackageExport)("Resource",vt);a(GK,"snake_case");Sd=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(_y,"pathToId");op=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(rs,"transactional");a(ss,"missingMethod");a(ip,"selectFromObject");a(dy,"transformForSelect")});var py={};Ge(py,{Resources:()=>Td,keyArrayToString:()=>Ra,resetResources:()=>FK,resources:()=>Li});function FK(){return Li=new Td}function Ra(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Td,Li,uu=ge(()=>{No();Td=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&&(n.relativeURL="")),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 Qe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(FK,"resetResources");a(Ra,"keyArrayToString")});var Oy={};Ge(Oy,{HAS_EXPIRATION:()=>Ep,LAST_TIMESTAMP_PLACEHOLDER:()=>_u,LOCAL_TIMESTAMP:()=>xK,METADATA:()=>lu,NO_TIMESTAMP:()=>cp,PREVIOUS_TIMESTAMP_PLACEHOLDER:()=>fp,RecordEncoder:()=>dp,TIMESTAMP_ASSIGN_LAST:()=>$K,TIMESTAMP_ASSIGN_NEW:()=>gy,TIMESTAMP_ASSIGN_PREVIOUS:()=>Ry,TIMESTAMP_PLACEHOLDER:()=>gd,TIMESTAMP_RECORD_PREVIOUS:()=>up,getUpdateRecord:()=>hp,handleLocalTimeForGets:()=>Nd});function Ay(){return Oa[0]=Oa[0]^64,kK.getFloat64(0)}function Nd(e){let t=e.getEntry;e.getEntry=function(i,o){let c=t.call(this,i,o),u=c?.value,_=u?.[lu];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?.[lu]>=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?o:o.map(c=>{let u=c.value,_=u[lu];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=VK.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=Ay())}}}}while(i!=o&&(i=i.next))}));let n=e.useReadTransaction();if(n.done(),!n.done.isTracked){n.done.isTracked=!0;let i=n.constructor,o=n.use,c=n.done;i.prototype.use=function(){this.timerTracked||(this.timerTracked=!0,bo.push(new WeakRef(this))),o.call(this)},i.prototype.done=function(){if(c.call(this),this.isDone)for(let u=0;u<bo.length;u++){let _=bo[u].deref();(!_||_===this||_.isDone||_.isCommitted)&&bo.splice(u--,1)}}}return e}function hp(e,t,r){return function(s,n,i,o,c=-1,u,_,l,d="put",f,E){if(f||u==null?Aa=i?.localTime?up|Ry:cp:Aa=u?i?.localTime?up|16384:gy|16384:cp,l>0&&(c|=Ep),Ad=c,_p=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},p;try{f&&(h.ifVersion=p=i?.version??null);let m=e.put(s,n,h);if(e.cache&&m.result!==!1){let g=e.cache.get(s);g&&(c>=0?g.metadataFlags=c:g.metadataFlags>=0&&(g.metadataFlags=void 0),(l||!g.expiresAt)&&(g.expiresAt=l),h.instructedWrite&&(g.localTime||(g.localTime=1),g.timestampBytes=lp,g.timestampOffset=lp.start||0))}if(u){let g=_?.user?.username;if(E&&(Rd=e.encoder.encode(E)),f&&i?.localTime){let R=i?.localTime,b=r.get(R);if(b){let V=Br(b).previousLocalTime;return r.put(R,Od(o,t,s,V,g,d,Rd),{ifVersion:p}),m}}r.put(_u,Od(o,t,s,i?.localTime?1:0,g,d,Rd),{append:d!=="invalidate",instructedWrite:!0,ifVersion:p})}return m}catch(m){throw m.message+=" id: "+s+" options: "+h,m}}}var Sy,Ty,gd,_u,fp,xK,lu,Oa,kK,cp,gy,$K,Ry,up,Ep,lp,Rd,Aa,Ad,_p,dp,VK,bo,du=ge(()=>{Sy=require("msgpackr");Na();Ty=M(U()),gd=new Uint8Array([1,1,1,1,4,64,0,0]),_u=new Uint8Array([1,1,1,1,1,0,0,0]),fp=new Uint8Array([1,1,1,1,3,64,0,0]),xK=Symbol("local-timestamp"),lu=Symbol("metadata"),Oa=new Uint8Array(8),kK=new DataView(Oa.buffer,0,8),cp=0,gy=0,$K=1,Ry=3,up=4,Ep=16,Aa=0,Ad=-1,_p=0,dp=class extends Sy.Encoder{static{a(this,"RecordEncoder")}constructor(t){super(t);let r=this.encode;this.encode=function(s,n){if(Aa||Ad>=0){let i=0,o=Aa;o&&(i+=8,Aa=0);let c=Ad,u=_p;c>=0&&(i+=2,Ad=-1,u&&(i+=8,_p=0));let _=lp=r.call(this,s,n|2048|i);Rd=_.subarray((_.start||0)+i,_.end);let l=_.start||0;return o&&(gd[4]=o,gd[5]=o>>8,_.set(gd,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=Ay(),i=t[c]}let _;i<32&&(o=i,c+=2,o&Ep&&(_=(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,[lu]:o,expiresAt:_}}return super.decode(t,r)}catch(c){throw c.message+=", data: "+t.slice(0,40).toString("hex"),c}}};a(Ay,"getTimestamp");VK=Map.prototype.get;a(Nd,"handleLocalTimeForGets");bo=[];setInterval(()=>{for(let e=0;e<bo.length;e++){let t=bo[e].deref();!t||t.isDone||t.isCommitted?bo.splice(e--,1):t.notCurrent&&(t.openTimer?(t.openTimer>3&&Ty.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(hp,"getUpdateRecord")});var vy={};Ge(vy,{AUDIT_STORE_OPTIONS:()=>My,createAuditEntry:()=>Od,openAuditStore:()=>yd,readAuditEntry:()=>Br,setAuditRetention:()=>YK,transactionKeyEncoder:()=>Py});function yd(e){let t=e.auditStore=e.openDB(wy.AUDIT_STORE_NAME,My);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Ly.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()-mp})){if((n[0]&15)===Sp){let i=Br(n),o=i.tableId;r[o]?.(i.recordId)}t.remove(s)}},mp/10).unref())}),t}function YK(e){clearTimeout(Eu),Eu=null,mp=e}function Od(e,t,r,s,n,i,o){let c=Uy[i],u=1;s&&(s>1?fu.setFloat64(0,s):on.set(fp),u=9),f(0),f(t),d(r),fu.setFloat64(u,e),u+=8,n?d(n):on[u++]=0,on[s?8:0]=c;let l=on.subarray(0,u);if(o)return Buffer.concat([l,o]);return l;function d(E){let h=u;u+=1,u=(0,ba.writeKey)(E,on,u),u>130||(on[h]=u-h-1)}function f(E){E<128?on[u++]=E:E<16384?(fu.setUint16(u,E|32767),u+=2):E<1056964608?(fu.setUint32(u,E|3489660927),u+=4):(on[u]=255,fu.setUint32(u+1,E),u+=5)}}function Br(e){let t=e.dataView||(e.dataView=new Tp(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:Uy[s&7],tableId:i,get recordId(){return Iy(e,c,u)},version:_,previousLocalTime:r,get user(){return d>l?Iy(e,l,d):void 0},getValue(f){return s&pp?f.decoder.decode(e.subarray(t.position)):void 0}}}function Iy(e,t,r){let s=e.subarray(t,r);return(0,ba.readKey)(s,0,r-t)}var ba,bd,wy,Cy,Ly,Dy,on,fu,Py,My,mp,Eu,pp,Ny,Sp,by,yy,Uy,Tp,Na=ge(()=>{ba=require("ordered-binary"),bd=M(Q()),wy=M(Ke()),Cy=M(A()),Ly=M(je()),Dy=M(G());du();(0,bd.initSync)();on=Buffer.alloc(1024),fu=new DataView(on.buffer,on.byteOffset,1024),Py={writeKey(e,t,r){return e===_u?(t.set(_u,r),r+8):typeof e=="number"?((t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))).setFloat64(r,e),r+8):(0,ba.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,ba.readKey)(e,t,r)}},My={encoding:"binary",keyEncoder:Py},mp=(0,Dy.convertToMS)((0,bd.get)(Cy.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,Eu=null;a(yd,"openAuditStore");a(YK,"setAuditRetention");pp=16,Ny=1,Sp=2,by=3,yy=4,Uy={put:Ny|pp,[Ny]:"put",delete:Sp,[Sp]:"delete",message:by|pp,[by]:"message",invalidate:yy,[yy]:"invalidate"};a(Od,"createAuditEntry");a(Br,"readAuditEntry");Tp=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-1)&3489660927,this.position+=4,t):(t=this.getUint32(this.position-1)&3489660927,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(Iy,"readKeySafely")});function Hy(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ya||((0,mu.onMessageByType)(By,d=>{qy(d.path)}),(0,mu.onMessageByType)(KK,d=>{(0,hu.trace)("confirming to proceed with txn",d.txnId)}),ya=Object.create(null));let c=ya[i]||(ya[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 Rp(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 qy(e,t){if(!ya)return;let r=ya[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:gp,exclusiveStart:!0})){gp=n;let o=Br(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 p;h.supportsTransactions&&h.txnInProgress!==o.version&&(p=!0,h.txnInProgress||(s?s.push(h):s=[h]),h.txnInProgress=o.version),h.listener(u,o,n,p)}catch(p){console.error(p),(0,hu.info)(p)}}}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"},gp,!0)}function Gy(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:By,path:n}),qy(n,!0)})}}var hu,mu,By,KK,ya,Dfe,Rp,gp,Fy=ge(()=>{hu=M(U()),mu=M(je());au();uu();Na();By="transaction",KK="transaction-await",Dfe=Buffer.alloc(4096);a(Hy,"addSubscription");Rp=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"}}},gp=Date.now();a(qy,"notifyFromTransactionData");a(Gy,"listenToCommits")});var ky=T((Ufe,xy)=>{"use strict";var Ap=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};xy.exports=Ap});var Vy=T((Bfe,$y)=>{"use strict";var Op=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};$y.exports=Op});var Id=T((qfe,Yy)=>{"use strict";var bp=Q(),yp=A(),{RecordEncoder:WK}=(du(),te(Oy));bp.initSync();var QK=bp.get(yp.CONFIG_PARAMS.STORAGE_COMPRESSION),jK=bp.get(yp.CONFIG_PARAMS.STORAGE_CACHING)!==!1,zK=yp.UPDATES_PROPERTY,Np=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=QK&&r&&{startingOffset:32},this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=jK&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.encoder={Encoder:WK},this.alwaysLazyProperty=s=>s===zK)}};Yy.exports=Np});var Cd=T((Ffe,Wy)=>{"use strict";var Ia=Q(),pu=A();Ia.initSync();var JK=Ia.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Ia.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Ia.get(pu.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",Ky=Ia.get(pu.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),XK=Ia.get(pu.CONFIG_PARAMS.STORAGE_NOREADAHEAD),wd=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=JK,this.noFSAccess=!0,Ky!==void 0&&(this.overlappingSync=Ky),this.noReadAhead=XK}};Wy.exports=wd;wd.MAX_DBS=1e4});var Me=T((kfe,sI)=>{"use strict";var wp=require("lmdb"),Ls=require("fs-extra"),Hr=require("path"),Ld=lr(),zy=U(),_r=Mr().LMDB_ERRORS_ENUM,Dd=Vy(),Cp=Id(),Jy=Cd(),Di=Ke(),Qy=A(),{table:ZK,resetDatabases:eW}=(de(),te(Le)),jy=Q(),Ds=Di.INTERNAL_DBIS_NAME,Xy=Di.DBI_DEFINITION_NAME,tW="data.mdb",rW="lock.mdb",Su=".mdb",sW="-lock",Ip=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=ns(t,r),this.key_type=this.dbi[Di.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Di.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new wp.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Pd(e,t){if(e===void 0)throw new Error(_r.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(_r.ENV_NAME_REQUIRED)}a(Pd,"pathEnvNameValidation");async function Lp(e,t,r=!0){try{await Ls.access(e)}catch(s){throw s.code==="ENOENT"?new Error(_r.INVALID_BASE_PATH):s}try{let s=Hr.join(e,t+Su);return await Ls.access(s,Ls.constants.R_OK|Ls.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Ls.access(Hr.join(e,t,tW),Ls.constants.R_OK|Ls.constants.F_OK),Hr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(_r.INVALID_ENVIRONMENT)}else throw new Error(_r.INVALID_ENVIRONMENT);throw s}}a(Lp,"validateEnvironmentPath");function Md(e,t){if(Ld.validateEnv(e),t===void 0)throw new Error(_r.DBI_NAME_REQUIRED)}a(Md,"validateEnvDBIName");async function nW(e,t,r=!1,s=!1){Pd(e,t);let n=Hr.basename(e);t=t.toString();let i=jy.get(Qy.CONFIG_PARAMS.DATABASES);i||jy.setProperty(Qy.CONFIG_PARAMS.DATABASES,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Lp(e,t,s),Zy(e,t,r)}catch(o){if(o.message===_r.INVALID_ENVIRONMENT){let c=Hr.join(e,t);await Ls.mkdirp(s?c:e);let u=new Jy(s?c:c+Su,!1),_=wp.open(u);_.dbis=Object.create(null);let l=new Cp(!1);_.openDB(Ds,l),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Dp(e,t,r);return _[Di.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=_,_}throw o}}a(nW,"createEnvironment");async function iW(e,t,r,s=!0){Pd(e,t),t=t.toString();let n=Hr.join(e,t);return ZK({table:t,database:Hr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(iW,"copyEnvironment");async function Zy(e,t,r=!1){Pd(e,t),t=t.toString();let s=Dp(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 Lp(e,t),i=Hr.join(e,t+Su),o=n!=i,c=new Jy(n,o),u=wp.open(c);u.dbis=Object.create(null);let _=tI(u);for(let l=0;l<_.length;l++)ns(u,_[l]);return u[Di.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Zy,"openEnvironment");async function oW(e,t,r=!1){Pd(e,t),t=t.toString();let s=Hr.join(e,t+Su),n=await Lp(e,t);if(global.lmdb_map!==void 0){let i=Dp(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await eI(o),delete global.lmdb_map[i]}}await Ls.remove(n),await Ls.remove(n===s?n+sW:Hr.join(Hr.dirname(n),rW))}a(oW,"deleteEnvironment");async function eI(e){Ld.validateEnv(e);let t=e[Di.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(eI,"closeEnvironment");function Dp(e,t,r=!1){let n=`${Hr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Dp,"getCachedEnvironmentName");function aW(e){Ld.validateEnv(e);let t=Object.create(null),r=ns(e,Ds);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Ds)try{t[s]=Object.assign(new Dd,n)}catch{zy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(aW,"listDBIDefinitions");function tI(e){Ld.validateEnv(e);let t=[],r=ns(e,Ds);for(let{key:s}of r.getRange({start:!1}))s!==Ds&&t.push(s);return t}a(tI,"listDBIs");function cW(e,t){let s=ns(e,Ds).getEntry(t),n=new Dd;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zy.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(cW,"getDBIDefinition");function rI(e,t,r,s=!r){if(Md(e,t),t=t.toString(),t===Ds)throw new Error(_r.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return ns(e,t)}catch(n){if(n.message===_r.DBI_DOES_NOT_EXIST){let i=new Cp(r,s===!0),o=e.openDB(t,i),c=new Dd(r===!0,s);return o[Xy]=c,ns(e,Ds).putSync(t,c),e.dbis[t]=o,o}throw n}}a(rI,"createDBI");function ns(e,t){if(Md(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Ds?r=cW(e,t):r=new Dd,r===void 0)throw new Error(_r.DBI_DOES_NOT_EXIST);let s;try{let n=new Cp(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(_r.DBI_DOES_NOT_EXIST):n}return s[Xy]=r,e.dbis[t]=s,s}a(ns,"openDBI");function uW(e,t){Md(e,t),t=t.toString();let r=ns(e,t),s=r.getStats();return r[Di.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(uW,"statDBI");async function lW(e,t){try{let r=Hr.join(e,t+Su);return(await Ls.stat(r)).size}catch{throw new Error(_r.INVALID_ENVIRONMENT)}}a(lW,"environmentDataSize");function _W(e,t){if(Md(e,t),t=t.toString(),t===Ds)throw new Error(_r.CANNOT_DROP_INTERNAL_DBIS_NAME);ns(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],ns(e,Ds).removeSync(t)}a(_W,"dropDBI");function dW(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{ns(e,i)}catch(o){if(o.message===_r.DBI_DOES_NOT_EXIST)rI(e,i,i!==t,i===t),s=!0;else throw o}}s&&eW()}a(dW,"initializeDBIs");sI.exports={openDBI:ns,openEnvironment:Zy,createEnvironment:nW,listDBIs:tI,listDBIDefinitions:aW,createDBI:rI,dropDBI:_W,statDBI:uW,deleteEnvironment:oW,initializeDBIs:dW,TransactionCursor:Ip,environmentDataSize:lW,copyEnvironment:iW,closeEnvironment:eI}});var oI=T((Vfe,iI)=>{"use strict";var Pp=Me(),fW=U(),nI=Mr().LMDB_ERRORS_ENUM;iI.exports=EW;async function EW(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 Pp.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==nI.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Pp.closeEnvironment(global.lmdb_map[s]),await Pp.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==nI.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){fW.error(t)}}a(EW,"cleanLMDBMap")});var kn=T((Kfe,hW)=>{hW.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 TI=T((Qfe,SI)=>{"use strict";var Mp=require("recursive-iterator"),mW=require("alasql"),Up=require("clone"),aI=G(),{handleHDBError:cI,hdb_errors:pW}=Z(),{HDB_ERROR_MSGS:uI,HTTP_STATUS_CODES:lI}=pW,{getDatabases:SW}=(de(),te(Le)),TW=["DISTINCT_ARRAY"],_I=Symbol("validateTables"),vp=Symbol("validateTable"),Wfe=Symbol("getAllColumns"),dI=Symbol("validateAllColumns"),Ud=Symbol("findColumn"),fI=Symbol("validateOrderBy"),Tu=Symbol("validateSegment"),Bp=Symbol("validateColumn"),EI=Symbol("setColumnsForTable"),hI=Symbol("checkColumnsForAsterisk"),mI=Symbol("validateGroupBy"),pI=Symbol("hasColumns"),Hp=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[_I](),this[hI](),this[dI]()}[_I](){if(this[pI]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[vp](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[vp](t.table)})}}[pI](){let t=!1,r=new Mp(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[vp](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=SW();if(!r[t.databaseid])throw cI(new Error,uI.SCHEMA_NOT_FOUND(t.databaseid),lI.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw cI(new Error,uI.TABLE_NOT_FOUND(t.databaseid,t.tableid),lI.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Up(n);i.table=Up(t),this.attributes.push(i)})}[Ud](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)}[hI](){let t=new Mp(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[EI](r.tableid)}[EI](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new mW.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[dI](){this[Tu](this.statement.columns,!1),this[Tu](this.statement.joins,!1),this[Tu](this.statement.where,!1),this[mI](this.statement.group,!1),this[Tu](this.statement.order,!0)}[Tu](t,r){if(!t)return;let s=new Mp(t),n=[];for(let{node:i,path:o}of s)!aI.isEmpty(i)&&!aI.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[fI](i):n.push(this[Bp](i)));return n}[mI](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&TW.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Up(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Ud](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[Ud](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`}[fI](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[Bp](t)}[Bp](t){let r=this[Ud](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]}};SI.exports=Hp});var RI=T((zfe,gI)=>{"use strict";var qp=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")}};gI.exports=qp});var OI=T((Xfe,AI)=>{"use strict";var Gp=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};AI.exports=Gp});var bI=T((eEe,NI)=>{"use strict";var Fp=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}};NI.exports=Fp});var II=T((rEe,yI)=>{"use strict";var xp=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};yI.exports=xp});var Io=T((aEe,LI)=>{"use strict";var gW=Me(),RW=OI(),AW=bI(),OW=II(),an=lr(),gu=Mr().LMDB_ERRORS_ENUM,NW=Ke(),$n=A(),bW=G(),yW=require("uuid"),nEe=require("lmdb"),{handleHDBError:IW,hdb_errors:wW}=Z(),{OVERFLOW_MARKER:iEe,MAX_SEARCH_KEY_LENGTH:oEe}=NW,wI=Q();wI.initSync();var vd=wI.get($n.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),kp=$n.TIME_STAMP_NAMES_ENUM.CREATED_TIME,yo=$n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function CW(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new RW,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u];CI(_,!0,n);let l=LW(e,t,r,_),d=_[t];o.push(l),c.push(d)}return Vp(o,c,s,i,n)}a(CW,"insertRecords");function LW(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][$n.FUNC_VAL],s[o]=c)}let u=an.getIndexedValues(c),_=e.dbis[o];if(u){vd&&_.prefetch(u.map(l=>({key:l,value:n})),Bd);for(let l=0,d=u.length;l<d;l++)_.put(u[l],n)}}vd&&e.dbis[t].prefetch([n],Bd),e.dbis[t].put(n,s,s[yo])})}a(LW,"insertRecord");function DW(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(DW,"removeSkippedRecords");function CI(e,t,r){let s=r>0;(s||!Number.isInteger(e[yo]))&&(e[yo]=r||(r=an.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[kp]))&&(e[kp]=r||an.getNextMonotonicTime()):delete e[kp]}a(CI,"setTimestamps");function $p(e,t,r){r.indexOf($n.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push($n.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf($n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push($n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),gW.initializeDBIs(e,t,r)}a($p,"initializeTransaction");async function PW(e,t,r,s,n=an.getNextMonotonicTime()){Kp(e,t,r,s),$p(e,t,r);let i=new AW,o=[],c=[],u=[];for(let _=0;_<s.length;_++){let l=s[_],d=l[t],f;try{f=Yp(e,t,l,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(_);continue}c.push(f),u.push(d)}return Vp(c,u,s,i,n,o)}a(PW,"updateRecords");async function MW(e,t,r,s,n=an.getNextMonotonicTime()){try{Kp(e,t,r,s)}catch(u){throw IW(u,u.message,wW.HTTP_STATUS_CODES.BAD_REQUEST)}$p(e,t,r);let i=new OW,o=[],c=[];for(let u=0;u<s.length;u++){let _=s[u],l;bW.isEmpty(_[t])?(l=yW.v4(),_[t]=l):l=_[t];let d=Yp(e,t,_,l,i,!1,n);o.push(d),c.push(l)}return Vp(o,c,s,i,n)}a(MW,"upsertRecords");async function Vp(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(),DW(r,i),s}a(Vp,"finalizeWrite");function Yp(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(CI(r,!l,o),Number.isInteger(r[yo])&&_[yo]>r[yo])return!1;l&&n.original_records.push(_);let d,f=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],m=e.dbis[h];if(m===void 0)continue;let g=_[h];if(typeof p=="function"){let b=p([[_]]);Array.isArray(b)&&(p=b[0][$n.FUNC_VAL],r[h]=p)}if(p===g)continue;let R=an.getIndexedValues(g);if(R){vd&&m.prefetch(R.map(b=>({key:b,value:s})),Bd);for(let b=0,V=R.length;b<V;b++)m.remove(R[b],s)}if(R=an.getIndexedValues(p),R){vd&&m.prefetch(R.map(b=>({key:b,value:s})),Bd);for(let b=0,V=R.length;b<V;b++)m.put(R[b],s)}}let E=Object.assign({},_,r);c.put(s,E,E[yo])},"do_put");return u?d=c.ifVersion(s,u.version,f):d=c.ifNoExists(s,f),d.then(E=>E?!0:Yp(e,t,r,s,n,i,o))}a(Yp,"updateUpsertRecord");function UW(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(UW,"validateBasic");function Kp(e,t,r,s){if(UW(e,t,r),!Array.isArray(s))throw s===void 0?new Error(gu.RECORDS_REQUIRED):new Error(gu.RECORDS_MUST_BE_ARRAY)}a(Kp,"validateWrite");function Bd(){}a(Bd,"noop");LI.exports={insertRecords:CW,updateRecords:PW,upsertRecords:MW}});var cn=T((uEe,MI)=>{"use strict";var PI=G(),DI=A(),wa=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Vn=require("joi"),Pi={schema_format:{pattern:wa,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},vW=Vn.alternatives(Vn.string().min(1).max(Pi.schema_length.maximum).pattern(wa).messages({"string.pattern.base":"{:#label} "+Pi.schema_format.message}),Vn.number()).required(),BW=Vn.alternatives(Vn.string().min(1).max(Pi.schema_length.maximum).pattern(wa).messages({"string.pattern.base":"{:#label} "+Pi.schema_format.message}),Vn.number()),HW=Vn.alternatives(Vn.string().min(1).max(Pi.schema_length.maximum).pattern(wa).messages({"string.pattern.base":"{:#label} "+Pi.schema_format.message}),Vn.number()).required();function qW(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Pi.schema_length.maximum?`'${e}' maximum of 250 characters`:wa.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(qW,"checkValidTable");function GW(e,t){return PI.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(GW,"validateSchemaExists");function FW(e,t){let r=t.state.ancestors[0].schema;return PI.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(FW,"validateTableExists");function xW(e,t){return e.toLowerCase()===DI.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${DI.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(xW,"validateSchemaName");MI.exports={common_validators:Pi,schema_regex:wa,hdb_schema_table:vW,validateSchemaExists:GW,validateTableExists:FW,validateSchemaName:xW,checkValidTable:qW,hdb_database:BW,hdb_table:HW}});var Hd=T((_Ee,UI)=>{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 kW(e){return e=Ou(e),ct.table.presence=!1,ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(kW,"schema_object");function $W(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a($W,"table_object");function VW(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,Au.validateObject(e,ct)}a(VW,"create_table_object");function YW(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(YW,"attribute_object");function KW(e){return e=Ou(e),ct.table.presence={message:Ru},ct.attribute.presence=!1,ct.hash_attribute.presence=!1,Au.validateObject(e,ct)}a(KW,"describe_table");function WW(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(WW,"validateTableResidence");UI.exports={schema_object:kW,create_table_object:VW,table_object:$W,attribute_object:YW,describe_table:KW,validateTableResidence:WW}});var BI=T((fEe,vI)=>{"use strict";var QW=require("uuid"),Wp=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||QW.v4(),this.schema_table=`${this.schema}.${this.table}`}};vI.exports=Wp});var qd=T((hEe,HI)=>{"use strict";var jW=BI(),Qp=class extends jW{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=Qp});var GI=T((pEe,qI)=>{"use strict";qI.exports=JW;var zW="inserted";function JW(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===zW?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(JW,"returnObject")});var Gd=T((TEe,VI)=>{"use strict";var XW=A(),jp=Me(),ZW=Io(),{getSystemSchemaPath:eQ,getSchemaPath:tQ}=Be(),rQ=kn(),sQ=Hd(),nQ=qd(),iQ=GI(),{handleHDBError:FI,hdb_errors:kI}=Z(),xI=G(),{HTTP_STATUS_CODES:oQ}=kI,zp=rQ.hdb_attribute,$I=[];for(let e=0;e<zp.attributes.length;e++)$I.push(zp.attributes[e].attribute);var aQ="inserted";VI.exports=cQ;async function cQ(e){let t=sQ.attribute_object(e);if(t)throw FI(new Error,t.message,kI.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&xI.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FI(new Error,r,oQ.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=xI.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 nQ(e.schema,e.table,e.attribute,e.id);try{let i=await jp.openEnvironment(tQ(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}`);jp.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await jp.openEnvironment(eQ(),XW.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await ZW.insertRecords(o,zp.hash_attribute,$I,[n]);return iQ(aQ,c,{records:[n]},u)}catch(i){throw i}}a(cQ,"lmdbCreateAttribute")});var Xp=T((REe,KI)=>{var{hdb_table:uQ,hdb_database:YI}=cn(),lQ=Ve(),Jp=require("joi"),_Q={undefined:"undefined",null:"null"},dQ=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||_Q[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"),fQ=Jp.object({database:YI,schema:YI,table:uQ,records:Jp.array().items(Jp.object().custom(dQ)).required()});KI.exports=function(e){return lQ.validateBySchema(e,fQ)}});var Nu=T((NEe,QI)=>{"use strict";var Yn=G(),WI=U(),OEe=Xp(),{getDatabases:EQ}=(de(),te(Le)),{ClientError:wo}=Z();QI.exports=hQ;function hQ(e){if(Yn.isEmpty(e))throw new wo("invalid update parameters defined.");if(Yn.isEmptyOrZeroLength(e.schema))throw new wo("invalid schema specified.");if(Yn.isEmptyOrZeroLength(e.table))throw new wo("invalid table specified.");if(!Array.isArray(e.records))throw new wo("records must be an array");let t=EQ()[e.schema]?.[e.table];if(Yn.isEmpty(t))throw new wo(`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&&Yn.isEmptyOrZeroLength(o[r]))throw WI.error("a valid hash attribute must be provided with update record:",o),new wo("a valid hash attribute must be provided with update record, check log for more info");if(!Yn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw WI.error(`a valid hash value must be provided with ${e.operation} record:`,o),new wo(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Yn.isEmpty(o[r])&&o[r]!==""&&s.has(Yn.autoCast(o[r]))&&(o.skip=!0),s.add(Yn.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(hQ,"insertUpdateValidate")});var bu=T((yEe,jI)=>{"use strict";var mQ=A().OPERATIONS_ENUM,Zp=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=mQ.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};jI.exports=Zp});var Cu=T((CEe,zI)=>{"use strict";var wEe=bu(),Fd=A(),tS=G(),eS=U(),pQ=require("uuid"),{handleHDBError:yu,hdb_errors:SQ}=Z(),{HDB_ERROR_MSGS:Iu,HTTP_STATUS_CODES:wu}=SQ;zI.exports=TQ;function TQ(e,t,r){for(let n=0;n<t.length;n++)gQ(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];RQ(i,r,e.operation)}}a(TQ,"processRows");function gQ(e){if(Buffer.byteLength(String(e))>Fd.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(tS.isEmptyOrZeroLength(e)||tS.isEmpty(e.trim()))throw yu(new Error,Iu.ATTR_NAME_NULLISH_ERR,wu.BAD_REQUEST,void 0,void 0,!0)}a(gQ,"validateAttribute");function RQ(e,t,r){if(!e.hasOwnProperty(t)||tS.isEmptyOrZeroLength(e[t])){if(r===Fd.OPERATIONS_ENUM.INSERT||r===Fd.OPERATIONS_ENUM.UPSERT){e[t]=pQ.v4();return}throw eS.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]))>Fd.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw eS.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 eS.error(e),yu(new Error,Iu.INVALID_FORWARD_SLASH_IN_HASH_ERR,wu.BAD_REQUEST,void 0,void 0,!0)}a(RQ,"validateHash")});var xd=T((DEe,XI)=>{"use strict";var JI=G(),AQ=A(),OQ=U(),NQ=Gd(),bQ=qd(),yQ=Kn(),{SchemaEventMsg:IQ}=Ps(),wQ="already exists in";XI.exports=CQ;async function CQ(e,t,r){if(JI.isEmptyOrZeroLength(r))return r;let s=[];JI.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 LQ(e,t.schema,t.name,i)})),n}a(CQ,"lmdbCheckForNewAttributes");async function LQ(e,t,r,s){let n=new bQ(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await DQ(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(wQ))OQ.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(LQ,"createNewAttribute");async function DQ(e){let t;return t=await NQ(e),yQ.signalSchemaChange(new IQ(process.pid,AQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(DQ,"createAttribute")});var Ca=T((MEe,ZI)=>{"use strict";var rS=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}};ZI.exports=rS});var tw=T((vEe,ew)=>{"use strict";var PQ=Ca(),MQ=A().OPERATIONS_ENUM,sS=class extends PQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(MQ.INSERT,r,s,n,i),this.records=t}};ew.exports=sS});var sw=T((HEe,rw)=>{"use strict";var UQ=Ca(),vQ=A().OPERATIONS_ENUM,nS=class extends UQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(vQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};rw.exports=nS});var iw=T((GEe,nw)=>{"use strict";var BQ=Ca(),HQ=A().OPERATIONS_ENUM,iS=class extends BQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(HQ.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};nw.exports=iS});var aw=T((xEe,ow)=>{"use strict";var qQ=Ca(),GQ=A().OPERATIONS_ENUM,oS=class extends qQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(GQ.DELETE,s,n,t,i),this.original_records=r}};ow.exports=oS});var Lu=T((VEe,_w)=>{"use strict";var $Ee=require("path"),cw=Me(),FQ=tw(),xQ=sw(),kQ=iw(),$Q=aw(),La=Ke(),uw=G(),{CONFIG_PARAMS:VQ}=A(),lw=Q();lw.initSync();var kd=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:YQ}=Be();_w.exports=KQ;async function KQ(e,t){if(lw.get(VQ.LOGGING_AUDITLOG)===!1)return;let r=YQ(e.schema,e.table),s=await cw.openEnvironment(r,e.table,!0),n=WQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){cw.initializeDBIs(s,La.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,La.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[La.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[La.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),uw.isEmpty(n.user_name)||s.dbis[La.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[La.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(KQ,"writeTransaction");function WQ(e,t){let r=uw.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===kd.INSERT)return new FQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kd.UPDATE)return new xQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kd.UPSERT)return new kQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===kd.DELETE)return new $Q(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(WQ,"createTransactionObject")});var aS=T((WEe,dw)=>{"use strict";var QQ=Nu(),KEe=bu(),Du=A(),jQ=Cu(),zQ=Io().insertRecords,JQ=Me(),XQ=U(),ZQ=xd(),{getSchemaPath:ej}=Be(),tj=Lu();dw.exports=rj;async function rj(e){try{let{schema_table:t,attributes:r}=QQ(e);jQ(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 ZQ(e.hdb_auth_header,t,r),n=ej(e.schema,e.table),i=await JQ.openEnvironment(n,e.table),o=await zQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await tj(e,o)}catch(c){XQ.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(rj,"lmdbCreateRecords")});var hw=T((jEe,Ew)=>{"use strict";var fw=A(),sj=aS(),nj=bu(),ij=require("fs-extra"),{getSchemaPath:oj}=Be();Ew.exports=aj;async function aj(e){let t=[{name:e.schema,createddate:Date.now()}],r=new nj(fw.SYSTEM_SCHEMA_NAME,fw.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await sj(r),await ij.mkdirp(oj(e.schema))}a(aj,"lmdbCreateSchema")});var pw=T((JEe,mw)=>{"use strict";var cS=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}};mw.exports=cS});var Rw=T((rhe,gw)=>{"use strict";var Sw=Me(),uS=lr(),lS=Mr().LMDB_ERRORS_ENUM,cj=Ke(),Tw=U(),ZEe=G(),uj=require("lmdb"),lj=pw(),_j=A(),{OVERFLOW_MARKER:ehe,MAX_SEARCH_KEY_LENGTH:the}=cj,dj=_j.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function fj(e,t,r,s){if(uS.validateEnv(e),t===void 0)throw new Error(lS.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lS.IDS_REQUIRED):new Error(lS.IDS_MUST_BE_ITERABLE);try{let n=Sw.listDBIs(e);Sw.initializeDBIs(e,t,n);let i=new lj,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[dj]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,uj.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let m=0;m<n.length;m++){let g=n[m];if(!h.hasOwnProperty(g)||g===t)continue;let R=e.dbis[g],b=h[g];if(b!=null)try{let V=uS.getIndexedValues(b);if(V)for(let $=0,F=V.length;$<F;$++)R.remove(V[$],o)}catch{Tw.warn(`cannot delete from attribute: ${g}, ${b}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){Tw.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=uS.getNextMonotonicTime(),i}catch(n){throw n}}a(fj,"deleteRecords");gw.exports={deleteRecords:fj}});var Pu=T((nhe,Ow)=>{"use strict";var Da=G(),Ej=Rw(),hj=Me(),{getSchemaPath:mj}=Be(),pj=Lu(),Sj=U();Ow.exports=Tj;async function Tj(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Da.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Da.isEmptyOrZeroLength(e.hash_values)&&!Da.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Da.isEmpty(u)||e.hash_values.push(u)}}if(Da.isEmptyOrZeroLength(e.hash_values))return Aw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Da.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=mj(e.schema,e.table),i=await hj.openEnvironment(n,e.table),o=await Ej.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await pj(e,o)}catch(c){Sj.error(`unable to write transaction due to ${c.message}`)}return Aw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Tj,"lmdbDeleteRecords");function Aw(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(Aw,"createDeleteResponse")});var dS=T((ahe,Nw)=>{"use strict";var gj=A(),ohe=lr();function _S(e,t){let r=Object.create(null);if(t.length===1&&gj.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(_S,"parseRow");function Rj(e,t,r,s){let n=_S(r,e);s.push(n)}a(Rj,"searchAll");function Aj(e,t,r,s){let n=_S(r,e);s[t]=n}a(Aj,"searchAllToMap");function Oj(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Oj,"iterateDBI");function Co(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(Co,"pushResults");function Nj(e,t,r,s,n,i){t.toString().endsWith(e)&&Co(t,r,s,n,i)}a(Nj,"endsWith");function bj(e,t,r,s,n,i){t.toString().includes(e)&&Co(t,r,s,n,i)}a(bj,"contains");function yj(e,t,r,s,n,i){t>e&&Co(t,r,s,n,i)}a(yj,"greaterThanCompare");function Ij(e,t,r,s,n,i){t>=e&&Co(t,r,s,n,i)}a(Ij,"greaterThanEqualCompare");function wj(e,t,r,s,n,i){t<e&&Co(t,r,s,n,i)}a(wj,"lessThanCompare");function Cj(e,t,r,s,n,i){t<=e&&Co(t,r,s,n,i)}a(Cj,"lessThanEqualCompare");Nw.exports={parseRow:_S,searchAll:Rj,searchAllToMap:Aj,iterateDBI:Oj,endsWith:Nj,contains:bj,greaterThanCompare:yj,greaterThanEqualCompare:Ij,lessThanCompare:wj,lessThanEqualCompare:Cj,pushResults:Co}});var Pa=T((dhe,Dw)=>{"use strict";var Mi=Me(),uhe=U(),qr=lr(),$d=Ke(),rt=Mr().LMDB_ERRORS_ENUM,lhe=G(),Lj=A(),Vd=dS(),{parseRow:Dj}=Vd,_he=require("lmdb"),{OVERFLOW_MARKER:bw,MAX_SEARCH_KEY_LENGTH:Pj}=$d;function yw(e,t,r,s=!1,n=void 0,i=void 0){return Lo(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(yw,"iterateFullIndex");function Mu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,_=!1){return Lo(e,t,r,(l,d,f,E)=>{let R={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?(R.values=!1,d.getRange(R).map(b=>({value:b}))):d.getRange(R)})}a(Mu,"iterateRangeBetween");function Lo(e,t,r,s){let n=e.database||e,i=Mi.openDBI(n,r);i[$d.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Mi.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(Lo,"setupTransaction");function Iw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(bw)){if(!n)if(r)n=Mi.openDBI(e,r);else{let u=Mi.listDBIs(e);for(let _=0,l=u.length;_<l&&(n=Mi.openDBI(e,u[_]),!n[$d.DBI_DEFINITION_NAME].is_hash_attribute);_++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(Iw,"getOverflowCheck");function Mj(e,t,r,s=!1,n=void 0,i=void 0){if(qr.validateEnv(e),t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);return Lo(e,t,t,(o,c,u)=>(Yd(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(_=>Dj(_.value,r))))}a(Mj,"searchAll");function Uj(e,t,r,s=!1,n=void 0,i=void 0){if(qr.validateEnv(e),t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);Yd(r),r=Uu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of yw(e,t,t,s,n,i))o.set(c,Vd.parseRow(u,r));return o}a(Uj,"searchAllToMap");function vj(e,t,r=!1,s=void 0,n=void 0){if(qr.validateEnv(e),t===void 0)throw new Error(rt.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=yw(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(vj,"iterateDBI");function Bj(e,t){if(qr.validateEnv(e),t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);return Mi.statDBI(e,t).entryCount}a(Bj,"countAll");function Hj(e,t,r,s,n=!1,i=void 0,o=void 0){return Ui(e,r,s),Lo(e,t,r,(c,u,_,l)=>(s=qr.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(Hj,"equals");function qj(e,t,r){return Ui(e,t,r),Mi.openDBI(e,t).getValuesCount(r)}a(qj,"count");function Gj(e,t,r,s,n=!1,i=void 0,o=void 0){return Ui(e,r,s),Lo(e,null,r,(c,u)=>{s=qr.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(Gj,"startsWith");function Fj(e,t,r,s,n=!1,i=void 0,o=void 0){return ww(e,t,r,s,n,i,o,!0)}a(Fj,"endsWith");function ww(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Ui(e,r,s),Lo(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(bw)?_.getValues(E,{transaction:u}).map(p=>{let m=f(E,p);if(c?m.endsWith(s):m.includes(s))return{key:m,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?_[$d.DBI_DEFINITION_NAME].is_hash_attribute?{key:E,value:E}:_.getValues(E,{transaction:u}).map(p=>({key:E,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(ww,"contains");function xj(e,t,r,s,n=!1,i=void 0,o=void 0){Ui(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(xj,"greaterThan");function kj(e,t,r,s,n=!1,i=void 0,o=void 0){Ui(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(kj,"greaterThanEqual");function $j(e,t,r,s,n=!1,i=void 0,o=void 0){Ui(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($j,"lessThan");function Vj(e,t,r,s,n=!1,i=void 0,o=void 0){Ui(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(Vj,"lessThanEqual");function Yj(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(qr.validateEnv(e),r===void 0)throw new Error(rt.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(rt.START_VALUE_REQUIRED);if(n===void 0)throw new Error(rt.END_VALUE_REQUIRED);if(s=qr.convertKeyValueToWrite(s),n=qr.convertKeyValueToWrite(n),s>n)throw new Error(rt.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Mu(e,t,r,s,n,i,o,c)}a(Yj,"between");function Kj(e,t,r,s){qr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);if(Yd(r),r=Uu(n,r),s===void 0)throw new Error(rt.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Vd.parseRow(c,r)),o}a(Kj,"searchByHash");function Wj(e,t,r){qr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rt.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Wj,"checkHashExists");function Qj(e,t,r,s,n=[]){return Lw(e,t,r,s,n),Cw(e,t,r,s,n).map(i=>i[1])}a(Qj,"batchSearchByHash");function jj(e,t,r,s,n=[]){Lw(e,t,r,s,n);let i=new Map;for(let[o,c]of Cw(e,t,r,s,n))i.set(o,c);return i}a(jj,"batchSearchByHashToMap");function Cw(e,t,r,s,n=[]){return Lo(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[_,Vd.parseRow(l,r)];n.push(_)}).filter(_=>_)})}a(Cw,"batchHashSearch");function Lw(e,t,r,s,n){if(qr.validateEnv(e),t===void 0)throw new Error(rt.HASH_ATTRIBUTE_REQUIRED);if(Yd(r),s==null)throw new Error(rt.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(rt.IDS_MUST_BE_ITERABLE)}a(Lw,"initializeBatchSearchByHash");function Yd(e){if(!Array.isArray(e))throw e===void 0?new Error(rt.FETCH_ATTRIBUTES_REQUIRED):new Error(rt.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Yd,"validateFetchAttributes");function Ui(e,t,r){if(qr.validateEnv(e),t===void 0)throw new Error(rt.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(rt.SEARCH_VALUE_REQUIRED);if(r?.length>Pj)throw new Error(rt.SEARCH_VALUE_TOO_LARGE)}a(Ui,"validateComparisonFunctions");function Uu(e,t){return t.length===1&&Lj.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Mi.listDBIs(e)),t}a(Uu,"setGetWholeRowAttributes");Dw.exports={searchAll:Mj,searchAllToMap:Uj,count:qj,countAll:Bj,equals:Hj,startsWith:Gj,endsWith:Fj,contains:ww,searchByHash:Kj,setGetWholeRowAttributes:Uu,batchSearchByHash:Qj,batchSearchByHashToMap:jj,checkHashExists:Wj,iterateDBI:vj,greaterThan:xj,greaterThanEqual:kj,lessThan:$j,lessThanEqual:Vj,between:Yj}});var Ma=T((Ehe,Bw)=>{var Pw=require("lodash"),Mw=Ve(),Fe=require("joi"),zj=G(),{hdb_schema_table:Kd,checkValidTable:Uw,hdb_table:vw,hdb_database:Wd}=cn(),{handleHDBError:Jj,hdb_errors:Xj}=Z(),{getDatabases:Zj}=(de(),te(Le)),{HTTP_STATUS_CODES:ez}=Xj,tz=Fe.object({database:Wd,schema:Wd,table:vw,search_attribute:Kd,search_value:Fe.any().required(),get_attributes:Fe.array().min(1).items(Kd).optional(),desc:Fe.bool(),limit:Fe.number().integer().min(1),offset:Fe.number().integer().min(0)}),rz=Fe.object({database:Wd,schema:Wd,table:vw,operator:Fe.string().valid("and","or").default("and").lowercase(),offset:Fe.number().integer().min(0),limit:Fe.number().integer().min(1),get_attributes:Fe.array().min(1).items(Kd).optional(),conditions:Fe.array().min(1).items(Fe.object({search_attribute:Kd,search_type:Fe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").optional(),search_value:Fe.when("search_type",{switch:[{is:"equals",then:Fe.any()},{is:"between",then:Fe.array().items(Fe.alternatives([Fe.string(),Fe.number()])).length(2)}],otherwise:Fe.alternatives(Fe.string(),Fe.number())}).required()})).required()});Bw.exports=function(e,t){let r=null;switch(t){case"value":r=Mw.validateBySchema(e,tz);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Uw("database",e.schema)),i(Uw("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=Mw.validateBySchema(e,rz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=zj.checkGlobalSchemaTable(e.schema,e.table);if(n)return Jj(new Error,n,ez.NOT_FOUND);let o=Zj()[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=Pw.filter(c,_=>_!=="*"&&_.attribute!=="*"&&!Pw.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 fS=T((mhe,Hw)=>{"use strict";var sz=Me(),nz=Ma(),{getSchemaPath:iz}=Be();Hw.exports=oz;function oz(e){let t=nz(e,"hashes");if(t)throw t;let r=iz(e.schema,e.table);return sz.openEnvironment(r,e.table)}a(oz,"initialize")});var ES=T((She,qw)=>{"use strict";var az=Pa(),cz=fS();qw.exports=uz;async function uz(e){let t=await cz(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return az.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(uz,"lmdbGetDataByHash")});var Ua=T((ghe,Gw)=>{"use strict";var hS=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Gw.exports=hS});var xw=T((Ohe,Fw)=>{"use strict";var Ahe=Ua(),lz=Pa(),_z=fS();Fw.exports=dz;async function dz(e){let t=await _z(e),r=global.hdb_schema[e.schema][e.table];return lz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(dz,"lmdbSearchByHash")});var Ms=T((bhe,kw)=>{"use strict";var mS=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}};kw.exports=mS});var Qd=T((Ihe,Qw)=>{"use strict";var Qt=Pa(),fz=Me(),Ez=G(),ue=Ke(),Do=A(),hz=kn(),$w=Mr().LMDB_ERRORS_ENUM,{getSchemaPath:mz}=Be(),Wn=Do.SEARCH_WILDCARDS;async function pz(e,t,r){let s;e.schema===Do.SYSTEM_SCHEMA_NAME?s=hz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Ww(e,s.hash_attribute,r,t);return Yw(e,n,s.hash_attribute,r)}a(pz,"prepSearch");async function Yw(e,t,r,s){let n=mz(e.schema,e.table),i=await fz.openEnvironment(n,e.table),o=Kw(i,e,t,r),c=o.transaction||i;if([ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ue.SEARCH_TYPES.SEARCH_ALL,ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Sz(e,r)===!1){let l=e.search_attribute;if(l===r)return s?Vw(o,()=>!0):o.map(f=>({[r]:f.key}));let d=a(f=>({[r]:f.value,[l]:f.key}),"toObject");return s?Vw(o,d):o.map(d)}let _=e.search_attribute===r?o.map(l=>l.key):o.map(l=>l.value);return s===!0?Qt.batchSearchByHashToMap(c,r,e.get_attributes,_):Qt.batchSearchByHash(c,r,e.get_attributes,_)}a(Yw,"executeSearch");function Kw(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 ue.SEARCH_TYPES.EQUALS:n=Qt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.CONTAINS:n=Qt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.ENDS_WITH:case ue.SEARCH_TYPES._ENDS_WITH:n=Qt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.STARTS_WITH:case ue.SEARCH_TYPES._STARTS_WITH:n=Qt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Qt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Qt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ue.SEARCH_TYPES.SEARCH_ALL:return Qt.searchAll(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Qt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ue.SEARCH_TYPES.BETWEEN:n=Qt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN:case ue.SEARCH_TYPES._GREATER_THAN:n=Qt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.GREATER_THAN_EQUAL:case ue.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Qt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN:case ue.SEARCH_TYPES._LESS_THAN:n=Qt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ue.SEARCH_TYPES.LESS_THAN_EQUAL:case ue.SEARCH_TYPES._LESS_THAN_EQUAL:n=Qt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Kw,"searchByType");function Vw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Vw,"createMapFromIterable");function Sz(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(Sz,"checkToFetchMore");function Ww(e,t,r,s){if(Ez.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),Wn.indexOf(n)>-1)return r===!0?ue.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ue.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Wn[0])<0&&n.indexOf(Wn[1])<0)return c===!0?r===!0?ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ue.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ue.SEARCH_TYPES.EQUALS;if(Wn.indexOf(i)>=0&&Wn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ue.SEARCH_TYPES.CONTAINS;if(Wn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ue.SEARCH_TYPES.ENDS_WITH;if(Wn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ue.SEARCH_TYPES.STARTS_WITH;if(n.includes(Wn[0])||n.includes(Wn[1]))return ue.SEARCH_TYPES.EQUALS;throw new Error($w.UNKNOWN_SEARCH_TYPE)}else switch(s){case Do.VALUE_SEARCH_COMPARATORS.BETWEEN:return ue.SEARCH_TYPES.BETWEEN;case Do.VALUE_SEARCH_COMPARATORS.GREATER:return ue.SEARCH_TYPES.GREATER_THAN;case Do.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ue.SEARCH_TYPES.GREATER_THAN_EQUAL;case Do.VALUE_SEARCH_COMPARATORS.LESS:return ue.SEARCH_TYPES.LESS_THAN;case Do.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ue.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error($w.UNKNOWN_SEARCH_TYPE)}}a(Ww,"createSearchTypeFromSearchObject");Qw.exports={executeSearch:Yw,createSearchTypeFromSearchObject:Ww,prepSearch:pz,searchByType:Kw}});var zw=T((Lhe,jw)=>{"use strict";var Che=Ms(),Tz=Ma(),gz=G(),Rz=A(),Az=Qd();jw.exports=Oz;function Oz(e,t){if(!gz.isEmpty(t)&&Rz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Tz(e,"value");if(s)throw s;let n=!0;return Az.prepSearch(e,t,n)}a(Oz,"lmdbGetDataByValue")});var vu=T((Mhe,Jw)=>{"use strict";var Phe=Ms(),Nz=Ma(),bz=G(),yz=A(),Iz=Qd();Jw.exports=wz;async function wz(e,t){if(!bz.isEmpty(t)&&yz.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Nz(e,"value");if(s)throw s;return Iz.prepSearch(e,t,!1)}a(wz,"lmdbSearchByValue")});var Zw=T((Bhe,Xw)=>{"use strict";var vhe=Ke(),pS=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}},SS=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},TS=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Xw.exports={SearchByConditionsObject:pS,SearchCondition:SS,SortAttribute:TS}});var nC=T((Fhe,sC)=>{"use strict";var qhe=Zw().SearchByConditionsObject,Cz=Ms(),Lz=Ma(),gS=Pa(),jd=Ke(),{Resource:Ghe}=(tn(),te(ap)),rC=Qd(),Dz=dS(),Pz=require("lodash"),{getSchemaPath:Mz}=Be(),eC=Me(),{handleHDBError:Uz,hdb_errors:vz}=Z(),{HTTP_STATUS_CODES:Bz}=vz,Hz=1e8;sC.exports=qz;async function qz(e){let t=Lz(e,"conditions");if(t)throw Uz(t,t.message,Bz.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=Mz(e.schema,e.table),s=await eC.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let _ of e.conditions)eC.openDBI(s,_.search_attribute);let i=Pz.sortBy(e.conditions,_=>{if(_.estimated_count===void 0){let l=_.search_type;l===jd.SEARCH_TYPES.EQUALS?_.estimated_count=gS.count(s,_.search_attribute,_.search_value):l===jd.SEARCH_TYPES.CONTAINS||l===jd.SEARCH_TYPES.ENDS_WITH?_.estimated_count=1/0:_.estimated_count=Hz}return _.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await tC(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(rC.filterByType),d=l.length,f=gS.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=>Dz.parseRow(E,f))}else{for(let d=1;d<i.length;d++){let f=i[d],E=await tC(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=gS.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(qz,"lmdbSearchByConditions");async function tC(e,t,r,s){let n=new Cz(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===jd.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,rC.searchByType(e,n,i,s).map(o=>o.value)}a(tC,"executeConditionSearch")});var Bu=T((khe,iC)=>{"use strict";var Gz=A().OPERATIONS_ENUM,RS=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=Gz.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};iC.exports=RS});var AS=T((Vhe,fC)=>{"use strict";var uC=Ms(),lC=Bu(),_C=vu(),dC=Pu(),dr=A(),oC=G(),aC=Me(),{getTransactionAuditStorePath:Fz,getSchemaPath:xz}=Be(),cC=U();fC.exports=kz;async function kz(e){try{if(oC.isEmpty(global.hdb_schema[e.schema])||oC.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await $z(e),await Vz(e);let t=xz(e.schema,e.table);try{await aC.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")cC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=Fz(e.schema,e.table);await aC.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")cC.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(kz,"lmdbDropTable");async function $z(e){let t=new uC(dr.SYSTEM_SCHEMA_NAME,dr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await _C(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 lC(dr.SYSTEM_SCHEMA_NAME,dr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await dC(n)}a($z,"deleteAttributesFromSystem");async function Vz(e){let t=new uC(dr.SYSTEM_SCHEMA_NAME,dr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,dr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await _C(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 lC(dr.SYSTEM_SCHEMA_NAME,dr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await dC(n)}catch(i){throw i}}a(Vz,"dropTableFromSystem")});var hC=T((Khe,EC)=>{"use strict";var Yz=require("fs-extra"),Kz=Ms(),Wz=Ua(),Qz=Bu(),jz=AS(),zz=Pu(),Jz=ES(),Xz=vu(),Qn=A(),{getSchemaPath:Zz}=Be(),{handleHDBError:eJ,hdb_errors:tJ}=Z(),{HDB_ERROR_MSGS:rJ,HTTP_STATUS_CODES:sJ}=tJ;EC.exports=nJ;async function nJ(e){let t;try{t=await iJ(e.schema);let r=new Kz(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await Xz(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await jz(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new Qz(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await zz(n);let i=Zz(t);await Yz.remove(i)}catch(r){throw r}}a(nJ,"lmdbDropSchema");async function iJ(e){let t=new Wz(Qn.SYSTEM_SCHEMA_NAME,Qn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Qn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await Jz(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw eJ(new Error,rJ.SCHEMA_NOT_FOUND(e),sJ.NOT_FOUND,void 0,void 0,!0);return s}a(iJ,"validateDropSchema")});var Hu=T((Qhe,mC)=>{"use strict";var OS=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};mC.exports=OS});var bS=T((Jhe,pC)=>{"use strict";var oJ=require("fs-extra"),zd=Me(),{getTransactionAuditStorePath:aJ}=Be(),NS=Ke(),zhe=Hu();pC.exports=cJ;async function cJ(e){let t;try{let r=aJ(e.schema,e.table);await oJ.mkdirp(r),t=await zd.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{zd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),zd.createDBI(t,NS.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),zd.createDBI(t,NS.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(cJ,"createTransactionsAuditEnvironment")});var RC=T((Zhe,gC)=>{"use strict";var yS=A(),SC=Me(),uJ=Io(),{getSystemSchemaPath:lJ,getSchemaPath:_J}=Be(),dJ=kn(),fJ=Gd(),IS=qd(),EJ=U(),hJ=bS(),CS=dJ.hdb_table,TC=[];for(let e=0;e<CS.attributes.length;e++)TC.push(CS.attributes[e].attribute);gC.exports=mJ;async function mJ(e,t){let r=_J(t.schema,t.table),s=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new IS(t.schema,t.table,yS.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new IS(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await SC.createEnvironment(r,t.table),e!==void 0){let o=await SC.openEnvironment(lJ(),yS.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await uJ.insertRecords(o,CS.hash_attribute,TC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wS(s),await wS(n),await wS(i)}await hJ(t)}catch(o){throw o}}a(mJ,"lmdbCreateTable");async function wS(e){try{await fJ(e)}catch(t){EJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wS,"createAttribute")});var OC=T((tme,AC)=>{"use strict";var pJ=Nu(),SJ=Cu(),TJ=xd(),qu=A(),gJ=Io().updateRecords,RJ=Me(),{getSchemaPath:AJ}=Be(),OJ=Lu(),NJ=U();AC.exports=bJ;async function bJ(e){try{let{schema_table:t,attributes:r}=pJ(e);SJ(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 TJ(e.hdb_auth_header,t,r),n=AJ(e.schema,e.table),i=await RJ.openEnvironment(n,e.table),o=await gJ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await OJ(e,o)}catch(c){NJ.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(bJ,"lmdbUpdateRecords")});var bC=T((sme,NC)=>{"use strict";var yJ=A().OPERATIONS_ENUM,LS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=yJ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};NC.exports=LS});var IC=T((ome,yC)=>{"use strict";var ime=bC(),IJ=Nu(),wJ=Cu(),CJ=xd(),Gu=A(),LJ=Io().upsertRecords,DJ=Me(),{getSchemaPath:PJ}=Be(),MJ=Lu(),UJ=U(),{handleHDBError:vJ,hdb_errors:BJ}=Z();yC.exports=HJ;async function HJ(e){let t;try{t=IJ(e)}catch(u){throw vJ(u,u.message,BJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;wJ(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 CJ(e.hdb_auth_header,r,s),i=PJ(e.schema,e.table),o=await DJ.openEnvironment(i,e.table),c=await LJ(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await MJ(e,c)}catch(u){UJ.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(HJ,"lmdbUpsertRecords")});var CC=T((cme,wC)=>{"use strict";var DS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};wC.exports=DS});var DC=T((lme,LC)=>{"use strict";var PS=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}};LC.exports=PS});var UC=T((fme,MC)=>{"use strict";var MS=Me(),{getTransactionAuditStorePath:qJ}=Be(),dme=CC(),Fu=Ke(),GJ=G(),PC=DC(),FJ=require("util").promisify,xJ=FJ(setTimeout),kJ=1e4,$J=100;MC.exports=VJ;async function VJ(e){let t=qJ(e.schema,e.table),r=await MS.openEnvironment(t,e.table,!0),s=MS.listDBIs(r);MS.initializeDBIs(r,Fu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new PC;do n=await YJ(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 xJ($J);while(n.transactions_deleted>0);return i}a(VJ,"deleteAuditLogsBefore");async function YJ(e,t){let r=new PC;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];GJ.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>kJ)break}return await n,r}catch(s){throw s}}a(YJ,"deleteTransactions")});var BC=T((hme,vC)=>{"use strict";var US=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};vC.exports=US});var qC=T((Sme,HC)=>{"use strict";var KJ=Ms(),WJ=Bu(),pme=BC(),ln=A(),QJ=G(),vS=Me(),jJ=kn(),zJ=vu(),JJ=Pu(),{getSchemaPath:XJ}=Be();HC.exports=ZJ;async function ZJ(e,t=!0){let r;e.schema===ln.SYSTEM_SCHEMA_NAME?r=jJ[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await t2(e),n=XJ(e.schema,e.table),i=await vS.openEnvironment(n,e.table);return t===!0&&await e2(e,i,r.hash_attribute),vS.dropDBI(i,e.attribute),s}a(ZJ,"lmdbDropAttribute");async function e2(e,t,r){let s=vS.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(e2,"removeAttributeFromAllObjects");async function t2(e){let t=new KJ(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 zJ(t)).filter(o=>o[ln.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(QJ.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 WJ(ln.SYSTEM_SCHEMA_NAME,ln.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return JJ(i)}a(t2,"dropAttributeFromSystem")});var VC=T((Rme,$C)=>{"use strict";var BS=Me(),va=Ke(),gme=lr(),HS=A(),GC=G(),{getTransactionAuditStorePath:r2}=Be(),s2=Pa(),Jd=Ca(),n2=U();$C.exports=i2;async function i2(e){let t=r2(e.schema,e.table),r=await BS.openEnvironment(t,e.table,!0),s=BS.listDBIs(r);BS.initializeDBIs(r,va.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return FC(r,e.search_values);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,a2(r,e.search_values,n);case HS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return o2(r,e.search_values);default:return FC(r)}}a(i2,"readAuditLog");function FC(e,t=[0,Date.now()]){GC.isEmpty(t[0])&&(t[0]=0),GC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[va.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 Jd,n))}a(FC,"searchTransactionsByTimestamp");function o2(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[va.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,kC(e,i))}return Object.fromEntries(r)}a(o2,"searchTransactionsByUsername");function a2(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let _=t[c],l=s2.equals(e,va.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,va.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=kC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],_=u.timestamp,l=s.get(_);xC(u,"records",r,l,o),xC(u,"original_records",r,l,o)}return Object.fromEntries(o)}a(a2,"searchTransactionsByHashValues");function xC(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 Jd(e.operation,e.user_name,i,void 0);d[t]=[c],_.push(d)}}else{let _=new Jd(e.operation,e.user_name,i,void 0);_[t]=[c],n.set(u,[_])}}}a(xC,"loopRecords");function kC(e,t){let r=[];try{let s=e.dbis[va.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 Jd,i);r.push(o)}}catch(i){n2.warn(i)}return r}catch(s){throw s}}a(kC,"batchSearchTransactions")});var KC=T((bme,YC)=>{"use strict";var{getSchemaPath:Ome}=Be(),Nme=Me(),{database:c2}=(de(),te(Le));YC.exports={writeTransaction:u2};async function u2(e,t,r){return c2({database:e,table:t}).transaction(r)}a(u2,"writeTransaction")});var zC=T((Ime,jC)=>{"use strict";var{getSchemaPath:WC}=Be(),QC=Me();jC.exports={flush:l2,resetReadTxn:_2};async function l2(e,t){return(await QC.openEnvironment(WC(e,t),t.toString())).flushed}a(l2,"flush");async function _2(e,t){try{(await QC.openEnvironment(WC(e,t),t.toString())).resetReadTxn()}catch{}}a(_2,"resetReadTxn")});var eL=T((Cme,ZC)=>{"use strict";var{Readable:d2}=require("stream"),{getDatabases:f2}=(de(),te(Le)),{readSync:E2,openSync:h2,createReadStream:JC}=require("fs"),{open:m2}=require("lmdb"),XC=Id(),p2=Cd(),{AUDIT_STORE_OPTIONS:S2}=(Na(),te(vy)),{INTERNAL_DBIS_NAME:T2,AUDIT_STORE_NAME:g2}=Ke();ZC.exports=A2;var qS=32768,R2=100;async function A2(e){let t=e.database||e.schema||"data",r=f2()[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=m2({noSync:!0,maxDbs:p2.MAX_DBS}),f,E=d.openDB(T2,new XC(!1)),h=l.useReadTransaction(),p=0,m=a(async function(R,b){b.encoding="binary",b.encoder=void 0;let V=d.openDB(R,b),$=l.openDB(R,b);for(let{key:F,version:w,value:W}of $.getRange({transaction:h,versions:$.useVersions}))f=V.put(F,W,w),p++%R2===0&&(await new Promise(B=>setTimeout(B,20)),h.openTimer&&(h.openTimer=0))},"copyDatabase");for(let{key:R,value:b}of l.getRange({transaction:h,start:!1}))if(n.some(V=>R.startsWith?.(V+"/"))){E.put(R,b);let[,V]=R.split("/"),$=!V,F=new XC(!$,$);await m(R,F)}e.include_audit&&await m(g2,Object.assign({},S2)),await f;let g=JC(d.path);return g.headers=u(),g.on("close",()=>{h.done(),d.close()}),g}let o=r[Object.keys(r)[0]].primaryStore,c=h2(o.path);return o.transaction(()=>{let _=Buffer.alloc(qS);E2(c,_,0,qS);let l=o.useReadTransaction(),d=JC(null,{fd:c,start:qS}),f=new d2.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(A2,"getBackup")});var sL=T((Dme,rL)=>{"use strict";var O2=U(),{handleHDBError:N2}=Z(),b2=RI(),y2=Gd(),I2=aS(),w2=hw(),C2=Pu(),L2=ES(),D2=xw(),P2=zw(),M2=vu(),U2=nC(),v2=hC(),B2=RC(),H2=OC(),q2=IC(),G2=UC(),F2=AS(),x2=qC(),k2=VC(),$2=KC(),tL=zC(),V2=eL(),GS=class extends b2{static{a(this,"LMDBBridge")}async searchByConditions(t){return U2(t)}async getDataByHash(t){return await L2(t)}async searchByHash(t){return await D2(t)}async getDataByValue(t,r){return await P2(t,r)}async searchByValue(t){return await M2(t)}async createSchema(t){return await w2(t)}async dropSchema(t){return await v2(t)}async createTable(t,r){return await B2(t,r)}async dropTable(t){return await F2(t)}async createAttribute(t){return await y2(t)}async createRecords(t){return await I2(t)}async updateRecords(t){return await H2(t)}async upsertRecords(t){try{return await q2(t)}catch(r){throw N2(r,null,null,O2.ERR,r)}}async deleteRecords(t){return await C2(t)}async dropAttribute(t){return await x2(t)}async deleteAuditLogsBefore(t){return await G2(t)}async readAuditLog(t){return await k2(t)}writeTransaction(t,r,s){return $2.writeTransaction(t,r,s)}flush(t,r){return tL.flush(t,r)}resetReadTxn(t,r){return tL.resetReadTxn(t,r)}getBackup(t){return V2(t)}};rL.exports=GS});var dL={};Ge(dL,{ResourceBridge:()=>kS});function $S({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 iL(e,t){let r=_n(e),s=$S(e,r);if(!r)throw new Us.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;Qe(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&&fd(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||K2,r=vs()[t];if(!r)throw(0,Us.handleHDBError)(new Error,Y2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function oL(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*aL(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 cL,Xd,Us,uL,lL,Bs,FS,xS,_L,Y2,K2,W2,Q2,nL,kS,fL=ge(()=>{"use strict";cL=M(sL()),Xd=M(Ma()),Us=M(Z());de();uL=M(Nu()),lL=M(Cu()),Bs=M(A()),FS=M(Kn()),xS=M(Ps()),_L=M(G());No();Ed();({HDB_ERROR_MSGS:Y2}=Us.hdb_errors),K2="data",W2=1e4,Q2=10,kS=class extends cL.default{static{a(this,"ResourceBridge")}constructor(t){super(t),nL=this}async searchByConditions(t){let r=(0,Xd.default)(t,"conditions");if(r)throw(0,Us.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_n(t);if(!s)throw new Us.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:$S(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 Us.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}),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,Bs.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await VS(t.schema),FS.signalSchemaChange(new xS.SchemaEventMsg(process.pid,Bs.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,nL.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,uL.default)(t);(0,lL.default)(t,s,r.primaryKey);let n,i=vs()[t.schema][t.table],o={user:t.hdb_user,expiresAt:t.expiresAt};return Qe(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=fd(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=vs()[t.schema][t.table],s={user:t.hdb_user};return Qe(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 oL(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=vs()[t.schema][t.table];if(!r.createdTimeProperty)throw new Us.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:Bs.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,_L.async_set_timeout)(Q2),u=[],n=!0},"chunkDelete");for await(let l of s)u.push(l[r.primaryKey]),c++,c%W2===0&&await _();return u.length>0&&await _(),n?oL(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Xd.default)(t,"hashes");if(r)throw r;return iL(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of iL(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Bs.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Xd.default)(t,"value");if(s)throw s;let n=_n(t);if(!n)throw new Us.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===Bs.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:$S(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 Bs.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 Bs.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of aL(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return aL(r,t.search_values?.[0],t.search_values?.[1])}}};a($S,"getSelect");a(iL,"getRecords");a(_n,"getTable");a(oL,"createDeleteResponse");a(aL,"groupRecordsInHistory")});var is=T((Hme,EL)=>{"use strict";var{ResourceBridge:j2}=(fL(),te(dL)),z2=Q();z2.initSync();var Zd;function J2(){return Zd||(Zd=new j2,Zd)}a(J2,"getBridge");EL.exports=J2()});var SL=T((Gme,pL)=>{"use strict";var hL=require("lodash"),ku=require("mathjs"),X2=require("jsonata"),mL=G();pL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hL.uniqWith(e,hL.isEqual):e,searchJSON:Z2,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 Z2(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(mL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),mL.isEmpty(this.__ala__.res[r])){let s=X2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(Z2,"searchJSON")});var gL=T((xme,TL)=>{"use strict";var lt=require("moment"),YS="YYYY-MM-DDTHH:mm:ss.SSSZZ";lt.suppressDeprecationWarnings=!0;TL.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(YS),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(YS),offset_utc:(e,t)=>lt(e).utc().utcOffset(t).format(YS)}});var NL=T((kme,OL)=>{"use strict";var e4=require("@turf/area"),t4=require("@turf/length"),r4=require("@turf/circle"),s4=require("@turf/difference"),n4=require("@turf/distance"),i4=require("@turf/boolean-contains"),o4=require("@turf/boolean-equal"),a4=require("@turf/boolean-disjoint"),c4=require("@turf/helpers"),RL=A(),fe=G();OL.exports={geoArea:u4,geoLength:l4,geoCircle:_4,geoDifference:d4,geoDistance:AL,geoNear:f4,geoContains:E4,geoEqual:h4,geoCrosses:m4,geoConvert:p4};var KS="geo1 is required",WS="geo2 is required";function u4(e){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),e4.default(e)}a(u4,"geoArea");function l4(e,t){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),t4.default(e,{units:t||"kilometers"})}a(l4,"geoLength");function _4(e,t,r){if(fe.isEmpty(e))throw new Error("point is required");if(fe.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),r4.default(e,t,{units:r||"kilometers"})}a(_4,"geoCircle");function d4(e,t){if(fe.isEmpty(e))throw new Error("poly1 is required");if(fe.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),s4(e,t)}a(d4,"geoDifference");function AL(e,t,r){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),n4.default(e,t,{units:r||"kilometers"})}a(AL,"geoDistance");function f4(e,t,r,s){if(fe.isEmpty(e))throw new Error("point1 is required");if(fe.isEmpty(t))throw new Error("point2 is required");if(fe.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return AL(e,t,s)<=r}a(f4,"geoNear");function E4(e,t){if(fe.isEmpty(e))throw new Error(KS);if(fe.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),i4.default(e,t)}a(E4,"geoContains");function h4(e,t){if(fe.isEmpty(e))throw new Error(KS);if(fe.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),o4.default(e,t)}a(h4,"geoEqual");function m4(e,t){if(fe.isEmpty(e))throw new Error(KS);if(fe.isEmpty(e))throw new Error(WS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),!a4.default(e,t)}a(m4,"geoCrosses");function p4(e,t,r){if(fe.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(fe.isEmpty(t))throw new Error("geo_type is required");if(fe.isEmpty(RL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(RL.GEO_CONVERSION_ENUM).join(",")}`);return c4[t](e,r)}a(p4,"geoConvert")});var ef=T((Vme,bL)=>{var Po=SL(),Gr=gL(),dn=NL();bL.exports=e=>{e.aggr.mad=e.aggr.MAD=Po.mad,e.aggr.mean=e.aggr.MEAN=Po.mean,e.aggr.mode=e.aggr.MODE=Po.mode,e.aggr.prod=e.aggr.PROD=Po.prod,e.aggr.median=e.aggr.MEDIAN=Po.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=Po.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=Po.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Gr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Gr.current_time,e.fn.extract=e.fn.EXTRACT=Gr.extract,e.fn.date=e.fn.DATE=Gr.date,e.fn.date_format=e.fn.DATE_FORMAT=Gr.date_format,e.fn.date_add=e.fn.DATE_ADD=Gr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Gr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Gr.date_diff,e.fn.now=e.fn.NOW=Gr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Gr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Gr.get_server_time,e.fn.getdate=e.fn.GETDATE=Gr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Gr.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 CL=T((Yme,wL)=>{"use strict";var Vu=require("lodash"),Bt=require("alasql");Bt.options.cache=!1;var S4=ef(),yL=require("clone"),tf=require("recursive-iterator"),ne=U(),ae=G(),Ba=is(),T4=A(),{hdb_errors:g4}=Z(),{getDatabases:IL}=(de(),te(Le)),R4="IS NULL",Hs="There was a problem performing this search. Please check the logs and try again.";S4(Bt);var QS=class{static{a(this,"SQLSearch")}constructor(t,r){if(ae.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(),ae.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ae.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(Hs)}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(Hs)}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(Hs)}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(Hs)}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(Hs)}}_getColumns(){let t=new tf(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(yL(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(ae.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new tf(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ae.isEmpty(r)&&r.right)if(ae.isNotEmptyAndHasValue(r.right.value)){let s=ae.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new Bt.yy.LogicValue({value:s}):r.right instanceof Bt.yy.StringValue&&!ae.isEmpty(s)&&ae.autoCasterIsNumberCheck(s.toString())&&(r.right=new Bt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ae.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new Bt.yy.LogicValue({value:i}):s instanceof Bt.yy.StringValue&&ae.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new Bt.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 tf(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(!ae.isEmpty(T4.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ae.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ae.isEmptyOrZeroLength(r.left.columnid)||ae.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(ae.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"=":!ae.isEmpty(r.right.value)||!ae.isEmpty(r.left.value)?s.add(ae.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(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from)&&ae.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(ae.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ae.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(ae.isEmptyOrZeroLength(this.all_table_attributes)&&!ae.isEmptyOrZeroLength(this.columns.columns))return t;if(ae.isEmptyOrZeroLength(this.all_table_attributes)&&ae.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await Bt.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(yL(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(ae.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(R4)>-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),!ae.isEmpty(this.exact_search_values[_])&&!this.exact_search_values[_].ignore&&!ae.isEmptyOrZeroLength(this.exact_search_values[_].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[_].values);let l=await Ba.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(Hs)}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 Ba.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,ae.autoCast(E)))}))}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(l),new Error(Hs)}else if(!ae.isEmpty(this.comparator_search_values[_])&&!this.comparator_search_values[_].ignore&&!ae.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 Ba.getDataByValue(c,E.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ae.autoCast(p)));else for(let[p,m]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,m[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,m[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(p)))}}catch(l){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(l),new Error(Hs)}else try{c.search_attribute=n.attribute,c.search_value="*";let l=await Ba.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,ae.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,ae.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(Hs)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof Bt.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 Bt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new Bt.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 Bt.yy.FuncValue:new Bt.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,p=E.as?E.as_orig:E.tableid_orig;o.push({key:`'${p}.${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 "${p}.${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 Bt.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 p=f[E];o.forEach(m=>{p[m.key]!==null&&p[m.key]!==void 0&&m.keys.add(p[m.key])})}o.forEach(E=>{let h=Object.keys(this.data[`${E.schema}_${E.table}`].__merged_data),p=Vu.difference(h,[...E.keys].map(m=>m.toString()));for(let m=0,g=p.length;m<g;m++){let R=p[m];delete this.data[`${E.schema}_${E.table}`].__merged_data[R]}})}return{existing_attributes:c,joined_length:f?f.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new tf(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(Hs)}}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 Ba.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 p=n.columns[h],m=E[p]===void 0?null:E[p];this.data[s].__merged_data[f].push(m)}}}}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 Bt.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(g4.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 Ba.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(Hs)}}return Object.values(Object.values(this.data)[0].__merged_data)}};wL.exports=QS});var fr=T((Wme,LL)=>{"use strict";var A4=TI();LL.exports={searchByConditions:N4,searchByHash:b4,searchByValue:y4,search:I4};var jS=is(),{transformReq:zS}=G(),O4=CL();async function N4(e){return zS(e),jS.searchByConditions(e)}a(N4,"searchByConditions");async function b4(e){zS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of jS.searchByHash(e))r&&t.push(r);return t}a(b4,"searchByHash");async function y4(e){zS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of jS.searchByValue(e))t.push(r);return t}a(y4,"searchByValue");function I4(e,t){try{let r=new A4(e);r.validate(),new O4(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(I4,"search")});var jn=T((jme,UL)=>{"use strict";var Yu=require("crypto"),w4=Q(),{CONFIG_PARAMS:C4}=A(),PL="aes-256-cbc",L4=32,D4=16,JS=64,ML=32,P4=JS+ML,DL=new Map;UL.exports={encrypt:M4,decrypt:U4,createNatsTableStreamName:v4};function M4(e){let t=Yu.randomBytes(L4),r=Yu.randomBytes(D4),s=Yu.createCipheriv(PL,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(M4,"encrypt");function U4(e){let t=e.substr(0,JS),r=e.substr(JS,ML),s=e.substr(P4,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Yu.createDecipheriv(PL,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(U4,"decrypt");function v4(e,t){let r=w4.get(C4.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=DL.get(r);return s||(s=Yu.createHash("md5").update(r).digest("hex"),DL.set(r,s)),s}a(v4,"createNatsTableStreamName")});var vi=T((Xme,BL)=>{"use strict";var Jme=fr(),rf=U(),vL=Hd(),B4=jn(),sf=G(),{handleHDBError:nf,hdb_errors:H4}=Z(),{HDB_ERROR_MSGS:of,HTTP_STATUS_CODES:XS}=H4,q4=Q();q4.initSync();var{getDatabases:ZS}=(de(),te(Le));BL.exports={describeAll:G4,describeTable:af,describeSchema:F4};async function G4(e){try{let t=sf.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 af({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 af({schema:l,table:f,exact_count:u},h)}E&&c.push(E)}catch(E){rf.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 rf.error("Got an error in describeAll"),rf.error(t),nf(new Error,of.DESCRIBE_ALL_ERR)}}a(G4,"describeAll");async function af(e,t){sf.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=vL.describe_table(e);if(i)throw i;let c=ZS()[r];if(!c)throw nf(new Error,of.SCHEMA_NOT_FOUND(e.schema),XS.NOT_FOUND);let u=c[s];if(!u)throw nf(new Error,of.TABLE_NOT_FOUND(e.schema,e.table),XS.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=B4.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){rf.warn(`unable to stat table dbi due to ${f}`)}return d}a(af,"descTable");async function F4(e){sf.transformReq(e);let t=vL.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 nf(new Error,of.SCHEMA_NOT_FOUND(e.schema),XS.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),sf.isEmpty(u)||u.describe){let _=await af({schema:e.schema,table:c,exact_count:e.exact_count},u?u.attribute_permissions:null);_&&(o[_.name]=_)}}return o}a(F4,"describeSchema")});var os=T((rpe,xL)=>{var x4=kn(),{callbackify:qL,promisify:k4}=require("util"),{getDatabases:GL}=(de(),te(Le));xL.exports={setSchemaDataToGlobal:HL,getTableSchema:$4,getSystemSchema:V4,setSchemaDataToGlobalAsync:k4(HL)};var FL=vi(),epe=qL(FL.describeAll),tpe=qL(FL.describeTable);function HL(e){global.hdb_schema=GL(),e&&e()}a(HL,"setSchemaDataToGlobal");function $4(e,t,r){let s=GL()[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($4,"getTableSchema");function V4(){return x4}a(V4,"getSystemSchema")});var Er=T((npe,YL)=>{"use strict";var uf=Xp(),Ht=G(),Y4=require("util"),lf=is(),K4=os(),kL=U(),{handleHDBError:Mo,hdb_errors:W4}=Z(),{HTTP_STATUS_CODES:Uo}=W4,Q4=Y4.promisify(K4.getTableSchema),j4="updated",$L="inserted",VL="upserted";YL.exports={insert:J4,update:X4,upsert:Z4,validation:z4,flush:e3};async function z4(e){if(Ht.isEmpty(e))throw new Error("invalid update parameters defined.");if(Ht.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(Ht.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await Q4(e.schema,e.table),r=uf(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&&Ht.isEmptyOrZeroLength(c[s]))throw kL.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(!Ht.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw kL.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!Ht.isEmpty(c[s])&&c[s]!==""&&n.has(Ht.autoCast(c[s]))&&(c.skip=!0),n.add(Ht.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(z4,"validation");async function J4(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=uf(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await lf.createRecords(e);return cf($L,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(J4,"insertData");async function X4(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=uf(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await lf.updateRecords(e);return Ht.isEmpty(s.existing_rows)?cf(j4,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):cf(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(X4,"updateData");async function Z4(e){if(e.operation!=="upsert")throw Mo(new Error,"invalid operation, must be upsert",Uo.INTERNAL_SERVER_ERROR);let t=uf(e);if(t)throw Mo(new Error,t.message,Uo.BAD_REQUEST);Ht.transformReq(e);let r=Ht.checkSchemaTableExist(e.schema,e.table);if(r)throw Mo(new Error,r,Uo.BAD_REQUEST);let s=await lf.upsertRecords(e);return cf(VL,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(Z4,"upsertData");function cf(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===$L?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===VL?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(cf,"returnObject");function e3(e){return Ht.transformReq(e),lf.flush(e.schema,e.table)}a(e3,"flush")});var tT=T((ope,QL)=>{var t3=Ve(),eT=require("joi"),{hdb_table:r3,hdb_database:KL}=cn(),WL={schema:KL,database:KL,table:r3},s3={date:eT.date().iso().required()},n3={timestamp:eT.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};QL.exports=function(e,t){let r=t==="timestamp"?{...WL,...n3}:{...WL,...s3},s=eT.object(r);return t3.validateBySchema(e,s)}});var JL=T((ape,zL)=>{var i3=Ve(),rT=require("joi"),{hdb_table:o3,hdb_database:jL}=cn(),a3=rT.object({schema:jL,database:jL,table:o3,hash_values:rT.array().required(),ids:rT.array()});zL.exports=function(e){return i3.validateBySchema(e,a3)}});var oT=T((cpe,XL)=>{"use strict";var sT=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}},nT=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}},iT=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};XL.exports={InsertObject:sT,NoSQLSeachObject:nT,DeleteResponseObject:iT}});var Ho=T((lpe,sD)=>{"use strict";var eD=tT(),c3=JL(),vo=G(),ZL=require("moment"),tD=U(),{promisify:u3,callbackify:l3}=require("util"),Bo=A(),_3=os(),aT=u3(_3.getTableSchema),cT=is(),{DeleteResponseObject:d3}=oT(),{handleHDBError:Bi,hdb_errors:f3}=Z(),{HDB_ERROR_MSGS:_f,HTTP_STATUS_CODES:Hi}=f3,E3="records successfully deleted",h3=l3(rD);sD.exports={delete:h3,deleteRecord:rD,deleteFilesBefore:m3,deleteAuditLogsBefore:p3};async function m3(e){let t=eD(e,"date");if(t)throw Bi(t,t.message,Hi.BAD_REQUEST,void 0,void 0,!0);if(vo.transformReq(e),!ZL(e.date,ZL.ISO_8601).isValid())throw Bi(new Error,_f.INVALID_DATE,Hi.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,_f.INVALID_DATE,!0);let s=vo.checkSchemaTableExist(e.schema,e.table);if(s)throw Bi(new Error,s,Hi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,s,!0);let n=await cT.deleteRecordsBefore(e);if(await aT(e.schema,e.table),tD.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(m3,"deleteFilesBefore");async function p3(e){let t=eD(e,"timestamp");if(t)throw Bi(t,t.message,Hi.BAD_REQUEST,void 0,void 0,!0);if(vo.transformReq(e),isNaN(e.timestamp))throw Bi(new Error,_f.INVALID_VALUE("Timestamp"),Hi.BAD_REQUEST,Bo.LOG_LEVELS.ERROR,_f.INVALID_VALUE("Timestamp"),!0);let r=vo.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);let s=await cT.deleteAuditLogsBefore(e);return await aT(e.schema,e.table),tD.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(p3,"deleteAuditLogsBefore");async function rD(e){e.ids&&(e.hash_values=e.ids);let t=c3(e);if(t)throw Bi(t,t.message,Hi.BAD_REQUEST,void 0,void 0,!0);vo.transformReq(e);let r=vo.checkSchemaTableExist(e.schema,e.table);if(r)throw Bi(new Error,r,Hi.NOT_FOUND,Bo.LOG_LEVELS.ERROR,r,!0);try{await aT(e.schema,e.table);let s=await cT.deleteRecords(e);return vo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${E3}`),s}catch(s){if(s.message===Bo.SEARCH_NOT_FOUND_MESSAGE){let n=new d3;return n.message=Bo.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(rD,"deleteRecord")});var df=T((dpe,oD)=>{var S3=require("crypto"),nD=9;function T3(e){let t=R3(nD),r=iD(e+t);return t+r}a(T3,"createHash");function g3(e,t){let r=e.substr(0,nD),s=r+iD(t+r);return e===s}a(g3,"validateHash");function R3(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(R3,"generateSalt");function iD(e){return S3.createHash("md5").update(e).digest("hex")}a(iD,"md5");oD.exports={hash:T3,validate:g3}});var cD=T((Epe,aD)=>{var uT=Ve(),jt={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 A3(e){return jt.password.presence=!0,jt.username.presence=!0,jt.role.presence=!0,jt.active.presence=!0,uT.validateObject(e,jt)}a(A3,"addUserValidation");function O3(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,uT.validateObject(e,jt)}a(O3,"alterUserValidation");function N3(e){return jt.password.presence=!1,jt.username.presence=!0,jt.role.presence=!1,jt.active.presence=!1,uT.validateObject(e,jt)}a(N3,"dropUserValidation");aD.exports={addUserValidation:A3,alterUserValidation:O3,dropUserValidation:N3}});var xe=T((ppe,lD)=>{"use strict";var{platform:mpe}=require("os"),b3="nats-server.zip",lT="nats-server",y3=process.platform==="win32"?`${lT}.exe`:lT,_T="HDB",I3=/^[^\s.,*>]+$/,uD="__request__",w3=a(e=>`${e}.${uD}`,"REQUEST_SUBJECT"),C3={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin",TRANSACTED_NODES:"transacted_nodes"},L3={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},D3={HUB:"hub.pid",LEAF:"leaf.pid"},P3={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},M3={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:_T,deliver_subject:"__HDB__.WORKQUEUE"},U3={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:_T,deliver_subject:"HDB.SCHEMAQUEUE"},v3={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:_T,deliver_subject:"HDB.USERQUEUE"},B3={SUCCESS:"success",ERROR:"error"},H3={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},q3={TXN:"txn",MSGID:"msgid"},Ha={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},G3={[Ha.ERR]:1,[Ha.WRN]:2,[Ha.INF]:3,[Ha.DBG]:4,[Ha.TRC]:5},F3={debug:"-D",trace:"-DVV"};lD.exports={NATS_SERVER_ZIP:b3,NATS_SERVER_NAME:lT,NATS_BINARY_NAME:y3,PID_FILES:D3,NATS_CONFIG_FILES:L3,SERVER_SUFFIX:P3,WORK_QUEUE_CONSUMER_NAMES:M3,SCHEMA_QUEUE_CONSUMER_NAMES:U3,USER_QUEUE_CONSUMER_NAMES:v3,NATS_TERM_CONSTRAINTS_RX:I3,REQUEST_SUFFIX:uD,UPDATE_REMOTE_RESPONSE_STATUSES:B3,CLUSTER_STATUS_STATUSES:H3,REQUEST_SUBJECT:w3,SUBJECT_PREFIXES:q3,MSG_HEADERS:C3,LOG_LEVELS:Ha,LOG_LEVEL_FLAGS:F3,LOG_LEVEL_HIERARCHY:G3}});var dD=T((Tpe,_D)=>{"use strict";var ff=A(),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}},dT=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}};_D.exports={BaseLicense:Ef,ExtendedLicense:dT}});var Ku=T((Rpe,SD)=>{"use strict";var Ga=require("fs-extra"),fD=df(),ED=require("crypto"),x3=require("moment"),k3=require("uuid").v4,zt=U(),ET=require("path"),$3=G(),qi=A(),V3=dD().ExtendedLicense,qa="invalid license key format",Y3="061183",K3="mofi25",W3="aes-256-cbc",Q3=16,j3=32,hD=Q();hD.initSync();var fT;SD.exports={validateLicense:mD,generateFingerPrint:J3,licenseSearch:pD,getLicense:eX};function hT(){return ET.join(hD.getHdbBasePath(),qi.LICENSE_KEY_DIR_NAME,qi.LICENSE_FILE_NAME)}a(hT,"getLicenseDirPath");function z3(){let e=hT();return ET.join(e,qi.LICENSE_FILE_NAME)}a(z3,"getLicenseFilePath");function mT(){let e=hT();return ET.join(e,qi.REG_KEY_FILE_NAME)}a(mT,"getFingerPrintFilePath");async function J3(){let e=mT();try{return await Ga.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await X3();throw zt.error(`Error writing fingerprint file to ${e}`),zt.error(t),new Error("There was an error generating the fingerprint")}}a(J3,"generateFingerPrint");async function X3(){let e=k3(),t=fD.hash(e),r=mT();try{await Ga.mkdirp(hT()),await Ga.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw zt.error(`Error writing fingerprint file to ${r}`),zt.error(s),new Error("There was an error generating the fingerprint")}return t}a(X3,"writeFingerprint");function mD(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 zt.error("empty license key passed to validate."),r;let s=mT(),n=!1;try{n=Ga.statSync(s)}catch(i){zt.error(i)}if(n){let i;try{i=Ga.readFileSync(s,"utf8")}catch{zt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(K3),c=o[1];c=Buffer.concat([Buffer.from(c)],Q3);let u=Buffer.concat([Buffer.from(i)],j3),_=ED.createDecipheriv(W3,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=Z3(o[0],i);if(E)l=E;else throw r.valid_license=!1,r.valid_machine=!1,console.error(qa),zt.error(qa),new Error(qa)}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(qa),zt.error(qa),new Error(qa)}else r.exp_date=l;r.exp_date<x3().valueOf()&&(r.valid_date=!1),fD.validate(o[1],`${Y3}${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||zt.error("Invalid licence"),r}a(mD,"validateLicense");function Z3(e,t){try{let r=ED.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{zt.warn("Check old license failed")}}a(Z3,"checkOldLicense");function pD(){let e=new V3,t=[];try{t=Ga.readFileSync(z3(),"utf-8").split(qi.NEW_LINE)}catch(r){r.code==="ENOENT"?zt.info("no license file found"):zt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if($3.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=mD(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){zt.error("There was an error parsing the license string."),zt.error(n),e.ram_allocation=qi.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return fT=e,e}a(pD,"licenseSearch");async function eX(){return fT||await pD(),fT}a(eX,"getLicense")});var hr=T((ype,vD)=>{"use strict";var OD="username is required",ND="nothing to update, must supply active, role or password to update",bD="password cannot be an empty string",yD="If role is specified, it cannot be empty.",ID="active must be true or false";vD.exports={addUser:uX,alterUser:lX,dropUser:dX,getSuperUser:mX,userInfo:fX,listUsers:mf,listUsersExternal:EX,setUsersToGlobal:xa,findAndValidateUser:MD,getClusterUser:pX,USERNAME_REQUIRED:OD,ALTERUSER_NOTHING_TO_UPDATE:ND,EMPTY_PASSWORD:bD,EMPTY_ROLE:yD,ACTIVE_BOOLEAN:ID};var wD=Er(),tX=Ho(),ST=df(),CD=cD(),LD=fr(),TT=Kn(),Fr=G(),DD=require("validate.js"),Ee=U(),{promisify:rX}=require("util"),gT=jn(),TD=A(),gD=xe(),sX=tt(),Ope=Q(),Npe=Ku(),nX=kn(),{table:bpe}=(de(),te(Le)),{handleHDBError:fn,hdb_errors:iX}=Z(),{HTTP_STATUS_CODES:En,AUTHENTICATION_ERROR_MSGS:pT,HDB_ERROR_MSGS:Fa}=iX,{UserEventMsg:RT}=Ps(),RD=require("lodash"),{server:AT}=(Pr(),te(So)),oX=U();AT.getUser=MD;var PD={username:!0,active:!0,role:!0,password:!0},AD=new Map,hf=LD.searchByValue,aX=LD.searchByHash,cX=rX(tX.delete);async function uX(e){let t=DD.cleanAttributes(e,PD),r=CD.addUserValidation(t);if(r)throw fn(new Error,r.message,En.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 Ee.error("There was an error searching for a role in add user"),Ee.error(u),u}if(!n||n.length<1)throw fn(new Error,Fa.ROLE_NAME_NOT_FOUND(t.role),En.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw fn(new Error,Fa.DUP_ROLES_FOUND(t.role),En.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=gT.encrypt(t.password)),t.password=ST.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await wD.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await xa()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw fn(new Error,Fa.USER_ALREADY_EXISTS(t.username),En.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],TT.signalUserChange(new RT(process.pid)),`${c.username} successfully added`}a(uX,"addUser");async function lX(e){let t=DD.cleanAttributes(e,PD);if(Fr.isEmptyOrZeroLength(t.username))throw new Error(OD);if(Fr.isEmptyOrZeroLength(t.password)&&Fr.isEmptyOrZeroLength(t.role)&&Fr.isEmptyOrZeroLength(t.active))throw new Error(ND);if(!Fr.isEmpty(t.password)&&Fr.isEmptyOrZeroLength(t.password.trim()))throw new Error(bD);if(!Fr.isEmpty(t.active)&&!Fr.isBoolean(t.active))throw new Error(ID);let r=_X(t.username);if(!Fr.isEmpty(t.password)&&!Fr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=gT.encrypt(t.password)),t.password=ST.hash(t.password)),t.role==="")throw new Error(yD);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 Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=Fa.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),fn(new Error,c,En.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Fa.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),fn(new Error,c,En.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 wD.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await xa()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return TT.signalUserChange(new RT(process.pid)),n}a(lX,"alterUser");function _X(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(_X,"isClusterUser");async function dX(e){try{let t=CD.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 fn(new Error,Fa.USER_NOT_EXIST(e.username),En.NOT_FOUND,void 0,void 0,!0);let s;try{s=await cX(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await xa()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return TT.signalUserChange(new RT(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(dX,"dropUser");async function fX(e){let t={};try{if(!e||!e.hdb_user)return"There was no user info in the body";t=e.hdb_user;let r={schema:"system",table:"hdb_role",hash_values:[t.role.id],get_attributes:["*"]},s;try{s=await aX(r)}catch(n){throw Ee.error("Got an error searching for a role."),Ee.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw Ee.error(r),r}return t}a(fX,"userInfo");async function EX(){let e;try{e=await mf()}catch(t){throw Ee.error("Got an error listing users."),Ee.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(EX,"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 Ee.error("Got an error searching for roles."),Ee.error(o),o}let r={};for(let o of t)r[o.id]=RD.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 Ee.error("Got an error searching for users."),Ee.error(o),o}let i=new Map;for(let o of n)o=RD.cloneDeep(o),o.role=r[o.role],hX(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),Fr.errorizeMessage(e)}return null}a(mf,"listUsers");function hX(e){try{if(!e){Ee.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(nX)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){Ee.error("Got an error trying to set system permissions."),Ee.error(t)}}a(hX,"appendSystemTablesToRole");async function xa(){try{let e=await mf();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(xa,"setUsersToGlobal");async function MD(e,t,r=!0){global.hdb_users||await xa();let s=global.hdb_users.get(e);if(!s)throw fn(new Error,pT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw fn(new Error,pT.USER_INACTIVE,En.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(AD.get(t)===s.password)return n;if(ST.validate(s.password,t))AD.set(t,s.password);else throw fn(new Error,pT.GENERIC_AUTH_FAIL,En.UNAUTHORIZED,void 0,void 0,!0)}return n}a(MD,"findAndValidateUser");async function mX(){global.hdb_users||await xa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(mX,"getSuperUser");async function pX(){let e=await mf(),t=sX.getConfigFromFile(TD.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Fr.isEmpty(r)&&r?.role?.role===TD.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=gT.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gD.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gD.SERVER_SUFFIX.ADMIN,r}a(pX,"getClusterUser");var UD=[];AT.invalidateUser=function(e){for(let t of UD)try{t(e)}catch(r){oX.error("Error invalidating user",r)}};AT.onInvalidatedUser=function(e){UD.push(e)}});var Qu=T((Lpe,GD)=>{"use strict";var qo=U(),xr=A(),SX=oI(),wpe=os(),Cpe=vi(),TX=hr(),{validateEvent:BD}=Ps(),Wu=is(),gX=require("process"),{resetDatabases:RX}=(de(),te(Le)),AX={[xr.ITC_EVENT_TYPES.SCHEMA]:OX,[xr.ITC_EVENT_TYPES.USER]:qD};async function OX(e){let t=BD(e);if(t){qo.error(t);return}qo.trace("ITC schemaHandler received schema event:",e),await SX(e.message),await NX(e.message)}a(OX,"schemaHandler");async function NX(e){try{Wu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=RX();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){qo.error(t)}}a(NX,"syncSchemaMetadata");var HD=[];async function qD(e){try{try{Wu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wu.resetReadTxn(xr.SYSTEM_SCHEMA_NAME,xr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){qo.warn(r)}let t=BD(e);if(t){qo.error(t);return}qo.trace(`ITC userHandler ${xr.HDB_ITC_CLIENT_PREFIX}${gX.pid} received user event:`,e),await TX.setUsersToGlobal();for(let r of HD)r()}catch(t){qo.error(t)}}a(qD,"userHandler");qD.addListener=function(e){HD.push(e)};GD.exports=AX});var Ps=T((Bpe,xD)=>{"use strict";var Ppe=U(),OT=G(),bX=A(),{ITC_ERRORS:ju}=Mr(),{parentPort:Mpe,threadId:yX,isMainThread:IX,workerData:Upe}=require("worker_threads"),{onMessageFromWorkers:wX,broadcast:vpe,broadcastWithAcknowledgement:CX}=je();xD.exports={sendItcEvent:LX,validateEvent:FD,SchemaEventMsg:DX,UserEventMsg:PX};var pf;wX(async(e,t)=>{pf=pf||Qu(),FD(e),pf[e.type]&&await pf[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function LX(e){return!IX&&e.message&&(e.message.originator=yX),CX(e)}a(LX,"sendItcEvent");function FD(e){if(typeof e!="object")return ju.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||OT.isEmpty(e.type))return ju.MISSING_TYPE;if(!e.hasOwnProperty("message")||OT.isEmpty(e.message))return ju.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||OT.isEmpty(e.message.originator))return ju.MISSING_ORIGIN;if(bX.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ju.INVALID_EVENT(e.type)}a(FD,"validateEvent");function DX(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(DX,"SchemaEventMsg");function PX(e){this.originator=e}a(PX,"UserEventMsg")});var Kn=T((Gpe,YD)=>{"use strict";var kD=A(),qpe=G(),Sf=U(),$D=ky(),ka,{sendItcEvent:VD}=Ps();function MX(e){try{Sf.trace("signalSchemaChange called with message:",e),ka=ka||Qu();let t=new $D(kD.ITC_EVENT_TYPES.SCHEMA,e);return ka.schema(t),VD(t)}catch(t){Sf.error(t)}}a(MX,"signalSchemaChange");function UX(e){try{Sf.trace("signalUserChange called with message:",e),ka=ka||Qu();let t=new $D(kD.ITC_EVENT_TYPES.USER,e);return ka.user(t),VD(t)}catch(t){Sf.error(t)}}a(UX,"signalUserChange");YD.exports={signalSchemaChange:MX,signalUserChange:UX}});var Zu={};Ge(Zu,{addAnalyticsListener:()=>Xu,recordAction:()=>kr,recordActionBinary:()=>as,setAnalyticsEnabled:()=>vX});function vX(e){tP=e}function kr(e,t,r,s,n){if(!tP)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||BX()}function as(e,t,r,s,n){kr(!!e,t,r,s,n)}function Xu(e){nP.push(e)}function BX(){Tf=performance.now(),setTimeout(async()=>{let e=performance.now()-Tf;Tf=0;let t=[],r={time:Date.now(),period:e,threadId:Go.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 iP){let f=Math.floor(c*d),E=o[f-1];if(f>u){let h=f-u;if(E===l){let p=_[_.length-1];typeof p=="number"?_[_.length-1]={value:p,count:1+h}:p.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 oP()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Go.threadId,byThread:!0,...s});for(let n of nP)n(t);Rf=new Map,Go.parentPort?Go.parentPort.postMessage({type:sP,report:r}):uP({report:r})},rP).unref()}async function HX(e,t=6e4){let r=yT(),s=aP(),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:p}of r.primaryStore.getRange({start:n||!1,exclusiveStart:!0,end:1/0})){if(!p)continue;if(i){if(h>i+t)break}else i=h;_=h;let{metrics:m,threadId:g}=p;for(let R of m||[]){let{path:b,method:V,type:$,metric:F,count:w,total:W,distribution:B,threads:k,...se}=R;w||(w=1);let Ie=F+(b?"-"+b:"");V!==void 0&&(Ie+="-"+V),$!==void 0&&(Ie+="-"+$);let ie=o.get(Ie);if(ie){if(ie.threads){let qe=ie.threads[g];if(qe)ie=qe;else{ie.threads[g]=Object.assign({},se);continue}}ie.count||(ie.count=1);let Yt=ie.count;for(let qe in se){let Pt=se[qe];typeof Pt=="number"&&(ie[qe]=(ie[qe]*Yt+Pt*w)/(Yt+w))}ie.count+=w,W>=0&&(ie.total+=W,ie.ratio=ie.total/ie.count)}else ie=Object.assign({period:t},R),delete ie.distribution,o.set(Ie,ie),ie.byThread&&(ie.threads=[],ie.threads[g]=Object.assign({},se),u.push(ie));if(B){B=B.map(qe=>typeof qe=="number"?{value:qe,count:1}:qe);let Yt=c.get(Ie);Yt?Yt.push(...B):c.set(Ie,B)}}await oP()}for(let h of u){let{path:p,method:m,type:g,metric:R,count:b,total:V,distribution:$,threads:F,...w}=h;F=F.filter(W=>W);for(let W in w){if(typeof h[W]!="number")continue;let B=0;for(let k of F){let se=k[W];typeof se=="number"&&(B+=se)}h[W]=B}h.count=F.length,delete h.threads,delete h.byThread}for(let[h,p]of c){let m=o.get(h);p.sort((qe,Pt)=>qe.value>Pt.value?1:-1);let g=m.count-1,R=[],b=0,V=0,$;for(let qe of iP){let Pt=g*qe;for(;b<Pt;)$=p[V++],b+=$.count,V===1&&b--;let Os=p[V>1?V-2:0];$||($=p[0]),R.push($.value-($.value-Os.value)*(b-Pt)/$.count)}let[F,w,W,B,k,se,Ie,ie,Yt]=R;Object.assign(m,{p1:F,p10:w,p25:W,median:B,p75:k,p90:se,p95:Ie,p99:ie,p999:Yt})}let l;for(let[h,p]of o)p.id=(0,gf.getNextMonotonicTime)(),p.time=_,s.primaryStore.put(p.id,p,{append:!0}).then(m=>{m||s.primaryStore.put(p.id,p)}),l=!0;let d=Date.now(),{idle:f,active:E}=performance.eventLoopUtilization();if(l||E*10>f){let h=(0,gf.getNextMonotonicTime)(),p={id:h,metric:"main-thread-utilization",idle:f-KD,active:E-WD,time:d,...process.memoryUsage()};s.primaryStore.put(h,p,{append:!0}).then(m=>{m||s.primaryStore.put(h,p)})}KD=f,WD=E}async function QD(e,t){let r=Date.now()-t;for(let s of e.primaryStore.getKeys({start:!1,end:r}))e.primaryStore.remove(s)}function yT(){return jD||(jD=ut({table:"hdb_raw_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"metrics"}]}))}function aP(){return zD||(zD=ut({table:"hdb_analytics",database:"system",audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"metric"},{name:"path"},{name:"method"},{name:"type"}]}))}function FX(){cP=!0;let e=(0,Ju.get)(bT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await HX(rP,e),await QD(yT(),qX),await QD(aP(),GX)},Math.min(e/2,2147483647)).unref()}function uP(e,t){let r=e.report;r.threadId=t?.threadId||Go.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(JD+=s.mean*s.count);r.totalBytesProcessed=JD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(XD.get(t))}),XD.set(t,t.performance.eventLoopUtilization())),r.id=(0,gf.getNextMonotonicTime)(),yT().primaryStore.put(r.id,r),cP||FX(),xX&&(lP=$X(r))}async function $X(e){if(await lP,!Gi){let r=(0,zu.dirname)((0,eP.getLogFilePath)());try{Gi=await(0,NT.open)((0,zu.join)(r,"analytics.log"),"r+")}catch{Gi=await(0,NT.open)((0,zu.join)(r,"analytics.log"),"w+")}}let t=(await Gi.stat()).size;if(t>kX){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)+`
7
+ `,t)}var Go,ZD,eP,zu,NT,gf,Ju,bT,Rf,tP,Tf,rP,sP,nP,iP,KD,WD,oP,qX,GX,jD,zD,cP,JD,XD,xX,lP,Gi,kX,zn=ge(()=>{Go=require("worker_threads"),ZD=M(je());de();eP=M(U()),zu=require("path"),NT=require("fs/promises"),gf=M(lr()),Ju=M(Q()),bT=M(A());Pr();(0,Ju.initSync)();Rf=new Map,tP=(0,Ju.get)(bT.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(vX,"setAnalyticsEnabled");a(kr,"recordAction");Tt.recordAnalytics=kr;a(as,"recordActionBinary");Tf=0,rP=1e3,sP="analytics-report",nP=[];a(Xu,"addAnalyticsListener");iP=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(BX,"sendAnalytics");a(HX,"aggregation");KD=0,WD=0,oP=a(()=>new Promise(setImmediate),"rest");a(QD,"cleanup");qX=36e5,GX=31536e6;a(yT,"getRawAnalyticsTable");a(aP,"getAnalyticsTable");(0,ZD.setChildListenerByType)(sP,uP);a(FX,"startScheduledTasks");JD=0,XD=new Map,xX=!1;a(uP,"recordAnalytics");kX=1e6;a($X,"logAnalytics")});var DT={};Ge(DT,{coerceType:()=>yf,makeTable:()=>wf,setServerUtilities:()=>zX,updateResource:()=>sl});function wf(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:p}=e;p||(p=[]),Gy(i,u);let m=hp(i,s,u),g=0,R,b,V,$={},F=Promise.resolve(),w,W,B;for(let J of p)(J.assignCreatedTime||J.name==="__createdtime__")&&(w=J),(J.assignUpdatedTime||J.name==="__updatedtime__")&&(W=J),J.expiresAt&&(B=J),J.isPrimaryKey&&($=J);let k,se=[],Ie=[],ie=1,Yt=2,qe={},Pt={},Os=864e5,EN,H_,tk=10,rk=6;E&&pN();class pt extends vt{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=p;static expirationTimer;static createdTimeProperty=w;static updatedTimeProperty=W;static sources=[];static get expirationMS(){return d}static dbisDB=l;static schemaDefined=_;static sourcedFrom(S,O){O&&(this.sourceOptions=O,(O.expiration||O.eviction||O.scanInterval)&&this.setTTLExpiration(O)),O?.intermediateSource?(S.intermediateSource=!0,this.sources.unshift(S)):this.sources.push(S),b=S.get&&(!S.get.reliesOnPrototype||S.prototype.get);let v=a(I=>{let L=this.sources.slice(0,-1);if(L=L.filter(D=>D[I]&&(!D[I].reliesOnPrototype||D.prototype[I])),L.length>0)if(L.length===1){let D=L[0];return(K,j,ce)=>{if(K?.source!==D)return D[I](j,ce,K)}}else return(D,K,j)=>{let ce=[];for(let Y of L){if(D?.source===Y)break;ce.push(Y[I](K,j,D))}return Promise.all(ce)}},"getApplyToIntermediateSource"),N=this.sources[this.sources.length-1],C=a(I=>{if(N[I]&&(!N[I].reliesOnPrototype||N.prototype[I]))return(L,D,K)=>{if(!L?.source)return N[I](D,K,L)}},"getApplyToCanonicalSource");return qe={put:C("put"),delete:C("delete"),publish:C("publish")},Pt={put:v("put"),delete:v("delete"),publish:v("publish"),invalidate:v("invalidate")},(async()=>{let I=!1,L=a(async(D,K)=>{let j=D.value,ce=D.table?Je[c][D.table]:pt;if(c===qs.SYSTEM_SCHEMA_NAME&&(D.table===qs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||D.table===qs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(I=!0),D.id===void 0&&(D.id=j[ce.primaryKey],D.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(D));D.source=S;let Y=await ce.getResource(D.id,K,el);switch(D.type){case"put":return Y._writeUpdate(j,el);case"delete":return Y._writeDelete(el);case"publish":return Y._writePublish(j,el);case"invalidate":return Y.invalidate(el);default:ze.error("Unknown operation",D.type,D.id)}},"writeUpdate");try{let D=S.subscribe;D&&h==null&&(h=!0);let K=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Fo.getWorkerIndex)()):(0,Fo.getWorkerIndex)()===0,j=D&&K&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(j){let ce;for await(let Y of j)try{if(!(Y.type==="transaction"?Y.writes[0]:Y)){ze.error("Bad subscription event",Y);continue}if(Y.source=S,ce)if(Y.beginTxn)ce.resolve();else{L(Y,ce);continue}if(Y.type==="end_txn")continue;let ye=Qe(Y,()=>{if(Y.type==="transaction"){let oe=[];for(let Kt of Y.writes)try{oe.push(L(Kt,Y))}catch(sr){throw sr.message+=" writing "+JSON.stringify(Kt)+" of event "+JSON.stringify(Y),sr}return Promise.all(oe)}else if(Y.type==="define_schema"){let oe=this.attributes.slice(0),Kt;for(let sr of Y.attributes)oe.find(fo=>fo.name===sr.name)||(oe.push(sr),Kt=!0);Kt&&(ut({table:n,database:c,attributes:oe,origin:"cluster"}),il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return Y.beginTxn?(ce=Y,L(Y,Y),new Promise(oe=>{ce.resolve=oe})):L(Y,Y)});I&&(await ye,il.signalUserChange(new ol.UserEventMsg(process.pid))),Y.onCommit&&(ye?.then?ye.then(Y.onCommit):Y.onCommit())}catch(me){ze.error("error in subscription handler",me)}}}catch(D){ze.error(D)}})(),this}static getResource(S,O,v){let N=super.getResource(S,O,v);if(S!=null)try{if(N.hasOwnProperty(Re))return N;if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let C=!v?.async||i.cache?.get(S),I=Ni(O),L=I.getReadTxn();if(L?.isDone)throw new Error("You can not read from a transaction that has already been committed/aborted");return hN(S,O,{transaction:L},C,D=>{if(D?sl(N,D):N[Re]=null,O.onlyIfCached&&O.noCacheStore){if(!N.doesExist())throw new mn.ServerError("Entry is not cached",504)}else if(v?.ensureLoaded){let K=Om(S,D,O,N);if(K)return I?.disregardReadTxn(),N[wT]=!0,LT(K,j=>(sl(N,j),N))}return N})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(S)),C}return N}ensureLoaded(){let S=Om(this[Pe],this[hn],this[Oe]);if(S)return this[wT]=!0,LT(S,O=>{this[hn]=O,this[Re]=O.value,this[bf]=O.version})}static setTTLExpiration(S){if(typeof S=="number")d=S*1e3,f||(f=0);else if(S&&typeof S=="object")d=S.expiration*1e3,f=(S.eviction||0)*1e3,Os=S.scanInterval*1e3;else throw new Error("Invalid expiration value type");if(d<0)throw new Error("Expiration can not be negative");Os=Os||(d+f)/4,Nm()}static enableAuditing(S=!0){E=S,S&&pN(),pt.audit=S}static coerceId(S){return S===""?null:yf(S,$)}static async dropTable(){if(delete Je[c][n],c===o){for(let S of p)l.remove(pt.tableName+"/"+S.name),r[S.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));il.signalSchemaChange(new ol.SchemaEventMsg(process.pid,qs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static get(S,O){if(S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""){let v=this.getRecordCount();return{recordCount:v.recordCount,estimatedRecordRange:v.estimatedRange,records:"./",name:n,database:c,attributes:p}}return super.get(S,O)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[nn])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||S?.ensureLoaded===!1||this[Oe]?.returnNonexistent)return this}static allowRead(S,O){if(!S)return!1;let v=S.role.permission;if(v.super_user)return!0;if(v[n]?.read){let N=v[n].attribute_permissions;if(N){O||(O={});let C=O.select;if(C){let I=CT(N,"read");O.select=C.filter(L=>I[L])}else O.select=N.filter(I=>I.read).map(I=>I.attribute_name);return O}else return!0}}allowUpdate(S,O,v){if(!S)return!1;let N=S.role.permission;if(N.super_user)return!0;if(N[n]?.update){let C=N[n].attribute_permissions;if(C){let I=CT(C,"update");for(let L in O)if(!I[L])return!1;if(v)for(let L of C){let D=L.attribute_name;!L.update&&!(D in O)&&(O[D]=this.getProperty(D))}}else return!0}}allowCreate(S,O){return this.allowUpdate(S,{})}static allowCreate(S,O){if(!S)return!1;let v=S.role.permission;if(v.super_user)return!0;if(v[n]?.insert){let N=v[n].attribute_permissions;if(N){let C=CT(N,"insert");for(let I in O)if(!C[I])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let O=S.role.permission;if(O.super_user||O[n]?.delete)return!0}update(S,O){if(!Ni(this[Oe]))throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let N;if(typeof S=="object"&&S)if(O){Object.isFrozen(S)&&(S=Object.assign({},S));for(let C in this[Re])S[C]===void 0&&(S[C]=void 0);this[Wt]=S}else N=this[Wt],N&&(S=Object.assign(N,S)),this[Wt]=N=S;return this._writeUpdate(this),this}invalidate(S){let O=this[Oe],v=this[Pe];Ni(this[Oe]).addWrite({key:v,store:i,invalidated:!0,entry:this[hn],nodeName:this[Oe]?.nodeName,before:qe.invalidate?.bind(this,O,v),beforeIntermediate:Pt.invalidate?.bind(this,O,v),commit:(C,I)=>{if(I?.version>C)return;let L=null;for(let D in r)L||(L={}),L[D]=this.getProperty(D);m(v,L,this[hn],C,Af,E,this[Oe],0,"invalidate")}})}static evict(S,O,v){let N=this.Source,C;if(!((b||E)&&(!O||(C=i.getEntry(S),!C||!O)||C.version!==v))){if(b){if(i.hasLock(S,C.version))return;let I;for(let L in r)I||(I={}),I[L]=O[L];if(I){m(S,I,C,v,Of,null,null,0,null,!0);return}}if(i.ifVersion(v,()=>{q_(S,O,null)}),E)m(S,null,C,v,Of,null,null,0,null,!0);else return i.remove(S,v)}}lock(){throw new Error("Not yet implemented")}static operation(S,O){return S.table||=n,S.schema||=c,pP.operation(S,O)}async put(S){this.update(S,!0)}_writeUpdate(S,O){let v=this[Oe],N=Ni(v),C=this[Pe];if(C===void 0)throw new Error("Can not save record without an id");let I=this[hn];this[IT]=!0;let L={key:C,store:i,entry:I,nodeName:v?.nodeName,validate:D=>{if(!S[dP]||ld(S)){if(this.validate(S),v?.source?S=cu(S):(t&&S[t]!==C&&(S[t]=C),W&&(S[W.name]=W.type==="Date"?new Date(D):W.type==="String"?new Date(D).toISOString():D),w&&(I?.value?S[w.name]=I?.value[w.name]:S[w.name]=w.type==="Date"?new Date(D):w.type==="String"?new Date(D).toISOString():D),S=cu(S)),S[Re])throw new Error("Can not assign a record with a record property");this[Re]=S}else N.removeWrite(L)},before:qe.put&&(()=>qe.put(v,C,S)),beforeIntermediate:Pt.put&&(()=>Pt.put(v,C,S)),commit:(D,K,j)=>{j&&(v&&K?.version>(v.lastModified||0)&&(v.lastModified=K.version),sl(this,K));let ce=K?.value;this[IT]=!1,ze.trace("Checking timestamp for put",C,K?.version>D,K?.version,D),!(K?.version>D)&&(q_(C,ce,S),m(C,S,K,D,0,E,v,v.expiresAt||(d?d+Date.now():0)))}};N.addWrite(L)}async delete(S){if(typeof S=="string")return this.deleteProperty(S);if(this[nn]){for await(let O of this.search(S))(await pt.getResource(O[t],this.getContext(),{ensureLoaded:!1}))._writeDelete(S);return}return this[Re]?this._writeDelete(S):!1}_writeDelete(S){let O=Ni(this[Oe]),v,N=this[Pe],C=this[Oe];return O.addWrite({key:N,store:i,resource:this,nodeName:C?.nodeName,before:qe.delete?.bind(this,C,N),beforeIntermediate:Pt.delete?.bind(this,C,N),commit:(I,L,D)=>{let K=L?.value;D&&(C&&L?.version>(C.lastModified||0)&&(C.lastModified=L.version),sl(this,L)),!(L?.version>I)&&(q_(this[Pe],K),ze.trace("Write delete entry",N,I),E||h?(m(N,null,this[hn],I,0,E,this[Oe],0,"delete"),E||Nm()):i.remove(this[Pe]))}}),!0}search(S){let O=Ni(this[Oe]);if(!S)throw new Error("No query provided");let v=S.reverse===!0,N=S.conditions;N?N.length===void 0&&(N=Array.from(N)):N=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[Pe]&&(N=[{attribute:null,comparator:"prefix",value:this[Pe]}].concat(N));for(let Y of N){let me=Y[0]??Y.attribute,ye=me==null?$:p.find(oe=>oe.name==me);if(ye)ye.type&&(Y[1]===void 0?Y.value=C(Y.value,ye):Y[1]=C(Y[1],ye));else if(me!=null)throw(0,mn.handleHDBError)(new Error,`${me} is not a defined attribute`,404)}function C(Y,me){return Array.isArray(Y)?Y.map(ye=>yf(ye,me)):yf(Y,me)}a(C,"coerceTypedValues"),N.length>1&&(N=(0,hP.sortBy)(N,Y=>{if(Y.estimated_count===void 0){let me=Y.comparator||Y.search_type;if(me===rl.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===rl.SEARCH_TYPES.CONTAINS||me===rl.SEARCH_TYPES.ENDS_WITH||me==="ne"?Y.estimated_count=1/0:me===rl.SEARCH_TYPES.STARTS_WITH||me==="prefix"?Y.estimated_count=KX:Y.estimated_count=YX}return Y.estimated_count}));let I=O.getReadTxn();I.use();let L=S.select,D=N[0],K;if(!D)K=i.getRange(v?{end:!1,reverse:!0,transaction:I,lazy:L?.length<4}:{start:!1,transaction:I,lazy:L?.length<4}).map(({value:Y})=>Y?new Promise(me=>setImmediate(()=>me(Y))):Nf.SKIP);else{let Y=sp(D,I,v,pt,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let me=N.slice(1).map(np);K=ce(Y,me)}else{for(let ye=1;ye<N.length;ye++){let oe=N[ye],Kt=sp(oe,I,v,pt,S.allowFullScan);Y=Y.concat(Kt)}let me=new Set;Y=Y.filter(ye=>me.has(ye)?!1:(me.add(ye),!0)),K=ce(Y)}}(S.offset||S.limit!==void 0)&&(K=K.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),K.onDone=()=>{I.done()};let j=this[Oe];function ce(Y,me){let ye=me?.length,oe={transaction:I,lazy:ye>0||L?.length<4,alwaysPrefetch:!0},Kt=S.ensureLoaded!==!1;function sr(fo,$e){if(Kt&&$e!==void 0){let Lr=!j.onlyIfCached&&Om($e,fo,j,this);if(Lr)return Lr.then(ik=>sr(ik))}let Js=fo?.value;if(!Js)return Nf.SKIP;for(let Lr=0;Lr<ye;Lr++)if(!me[Lr](Js))return Nf.SKIP;return Js}return a(sr,"processEntry"),Y.map(fo=>hN(fo,j,oe,!1,sr))}return a(ce,"idsToRecords"),K}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ut({table:n,database:c,schemaDefined:_,attributes:p,audit:!0}),S||(S={});let O=Hy(pt,this[Pe]??null,function(I,L,D,K){try{let j=L.getValue?.(i);this.send({id:I,timestamp:D,value:j,version:L.version,type:L.type,beginTxn:K})}catch(j){ze.error(j)}},S.startTime,this[nn]);S.crossThreads===!1&&(O.crossThreads=!1),S.supportsTransactions&&(O.supportsTransactions=!0);let v=this[Pe],N=S.previousCount;N>1e3&&(N=1e3);let C=S.startTime;if(this[nn]){if(C){if(N)throw new mn.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:I,value:L}of u.getRange({start:C,exclusiveStart:!0})){let D=Br(L,i);if(D.tableId!==s)continue;let K=D.recordId;(v==null||EP(v,K))&&O.send({id:K,timestamp:I,...D}),O.startTime=I}}else if(N){let I=[];for(let{key:L,value:D}of u.getRange({start:"z",end:!1,reverse:!0}))try{let K=Br(D);if(K.tableId!==s)continue;let j=K.recordId;if(v==null||EP(v,j)){let ce=K.getValue(i);if(I.push({id:j,timestamp:L,value:ce,version:K.version,type:K.type}),--N<=0)break}}catch(K){ze.error("Error getting history entry",L,K)}for(let L=I.length;L>0;)O.send(I[--L]);I[0]&&(O.startTime=I[0].timestamp)}else if(!S.omitCurrent)for(let{key:I,value:L,version:D,localTime:K}of i.getRange({start:v??!1,end:v==null?void 0:[v,mP.MAXIMUM_KEY],versions:!0}))L&&O.send({id:I,version:D,timestamp:K,value:L})}else{N&&!C&&(C=0);let I=this[hn]?.localTime;if(ze.trace("Subscription from",C,"from",v),C<I){let L=[],D=I;do{let K=u.get(D);if(K){S.omitCurrent=!0;let j=Br(K),ce=j.getValue(i);L.push({id:v,value:ce,timestamp:D,...j}),D=j.previousLocalTime}else break;N&&N--}while(D>C&&N!==0);for(let K=L.length;K>0;)O.send(L[--K]);O.startTime=I}!S.omitCurrent&&this.doesExist()&&O.send({id:v,version:this[bf],timestamp:this[hn]?.localTime,value:this})}return S.listener&&O.on("data",S.listener),O}doesExist(){return!!(this[Re]||this[IT])}async publish(S,O){this._writePublish(S,O)}_writePublish(S,O){let v=Ni(this[Oe]),N=this[Pe]||null,C=this[Oe];v.addWrite({key:N,store:i,entry:this[hn],nodeName:C?.nodeName,validate:()=>{this.validate(S)},before:qe.publish?.bind(this,C,N,S),beforeIntermediate:Pt.publish?.bind(this,C,N,S),commit:(I,L,D)=>{L===void 0&&h&&!E&&Nm(),m(N,L?.value??null,L,L?.version||I,0,!0,C,L?.expiresAt,"message",!1,S)}})}validate(S){let O,v=a((N,C,I)=>{if(C.type&&N!=null)if(C.properties){typeof N!="object"&&(O||(O=[])).push(`Property ${I} must be an object${C.type?" ("+C.type+")":""}`);let L=C.properties;for(let D=0,K=L.length;D<K;D++){let j=L[D],ce=v(N[j.name],j,I+"."+j.name);ce&&(N[j.name]=ce)}}else switch(C.type){case"Int":(typeof N!="number"||N>>0!==N)&&(O||(O=[])).push(`Property ${I} must be an integer (from -2147483648 to 2147483647)`);break;case"Long":(typeof N!="number"||!(Math.floor(N)===N&&Math.abs(N)<=9007199254740992))&&(O||(O=[])).push(`Property ${I} must be an integer (from -9007199254740992 to 9007199254740992)`);break;case"Float":typeof N!="number"&&(O||(O=[])).push(`Property ${I} must be a number`);break;case"ID":typeof N=="string"||N?.length>0&&N.every?.(L=>typeof L=="string")||(O||(O=[])).push(`Property ${I} must be a string, or an array of strings`);break;case"String":typeof N!="string"&&(O||(O=[])).push(`Property ${I} must be a string`);break;case"Boolean":typeof N!="boolean"&&(O||(O=[])).push(`Property ${I} must be a boolean`);break;case"Date":if(!(N instanceof Date)){if(typeof N=="string"||typeof N=="number")return new Date(N);(O||(O=[])).push(`Property ${I} must be a Date`)}break;case"Bytes":N instanceof Uint8Array||(O||(O=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break;case"array":if(Array.isArray(N)){if(C.elements)for(let L=0,D=N.length;L<D;L++){let K=N[L],j=v(K,C.elements,I+"[*]");j&&(N[L]=j)}}else(O||(O=[])).push(`Property ${I} must be a Buffer or Uint8Array`);break}C.nullable===!1&&N==null&&(O||(O=[])).push(`Property ${I} is required (and not does not allow null values)`)},"validateValue");for(let N=0,C=p.length;N<C;N++){let I=p[N],L=v(S[I.name],I,I.name);L&&(S[I.name]=L)}if(O)throw new mn.ClientError(O.join(". "))}getUpdatedTime(){return this[bf]}wasLoadedFromSource(){return b?!!this[wT]:void 0}static async addAttributes(S){let O=p.slice(0);for(let v of S){if(!v.name)throw new mn.ClientError("Attribute name is required");if(v.name.match(/[`/]/))throw new mn.ClientError("Attribute names cannot include backticks or forward slashes");O.push(v)}return ut({table:n,database:c,schemaDefined:_,attributes:O}),pt.indexingOperation}static async removeAttributes(S){let O=p.filter(v=>!S.includes(v.name));return ut({table:n,database:c,schemaDefined:_,attributes:O}),pt.indexingOperation}static getRecordCount(S){let O=i.getStats().entryCount,v=5e3,N=1e3,C;O>v&&!S?.exactCount&&(C=N);let I=0;for(let{value:L}of i.getRange({start:!0,lazy:!0,limit:C}))L!=null&&I++;if(C){let L=I;I=0;for(let{value:Kt}of i.getRange({start:"\uFFFF",reverse:!0,lazy:!0,limit:C}))Kt!=null&&I++;let D=C*2,K=(I+L)/D,j=Math.pow((I-L+1)/C/2,2)+K*(1-K)/D,ce=Math.max(Math.sqrt(j)*O,1),Y=Math.round(K*O),me=Math.max(Y-1.96*ce,0),ye=Math.min(Y+1.96*ce,O),oe=Math.pow(10,Math.round(Math.log10(ce)));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(){dd(this,this)}static async deleteHistory(S=0){let O;for(let{key:v,value:N}of u.getRange({start:0,end:S}))await tl(),Br(N).tableId===s&&(O=u.remove(v));await O}static async*getHistory(S=0,O=1/0){for(let{key:v,value:N}of u.getRange({start:S,end:O})){await tl();let C=Br(N);C.tableId===s&&(yield{id:C.recordId,localTime:v,version:C.version,type:C.type,value:C.getValue(i),user:C.user})}}static async getHistoryOfRecord(S){let O=[],v=i.getEntry(S);if(!v)return O;let N=v.localTime,C=0;do{await tl();let I=u.get(N);if(I){let L=Br(I);O.push({id:L.recordId,localTime:N,version:L.version,type:L.type,value:L.getValue(i),user:L.user}),N=L.previousLocalTime}else break}while(C<1e3&&N);return O.reverse()}static cleanup(){k?.remove()}}pt.updatedAttributes();let sk=pt.prototype;return sk[dP]=!0,d&&pt.setTTLExpiration(d/1e3),B&&nk(),pt;function q_(J,S,O){let v;for(let N in r){let C=r[N],I=C.isIndexing,L=O?.[N],D=S?.[N];if(L===D&&!I)continue;v=!0;let K=(0,nl.getIndexedValues)(D);if(K){_P&&C.prefetch(K.map(j=>({key:j,value:J})),fP);for(let j=0,ce=K.length;j<ce;j++)C.remove(K[j],J)}if(K=(0,nl.getIndexedValues)(L),K){_P&&C.prefetch(K.map(j=>({key:j,value:J})),fP);for(let j=0,ce=K.length;j<ce;j++)C.put(K[j],J)}}return v}a(q_,"updateIndices");function hN(J,S,O,v,N){let C=a(()=>{let I=i.getEntry(J,O);return I&&S&&(I?.version>(S.lastModified||0)&&(S.lastModified=I.version),I?.localTime&&!S.lastRefreshed&&(S.lastRefreshed=I.localTime)),N(I,J)},"whenPrefetched");return v?C():ie>0?(ie--,C()):new Promise((I,L)=>{ie===0?(ie--,i.prefetch([J],()=>{D(),K()})):(se.push(J),Ie.push(K),se.length>rk&&(ie--,D()));function D(){if(se.length>0){let j=Ie;i.prefetch(se,()=>{ie===-1?D():ie++;for(let ce of j)ce()}),se=[],Ie=[],Yt>2&&Yt--}else ie=Yt,Yt<tk&&Yt++}a(D,"prefetch");function K(){try{I(C())}catch(j){L(j)}}a(K,"load")})}a(hN,"loadLocalRecord");function Om(J,S,O,v){if(b){let N;if(O.noCache?N=!0:(S?(!S.value||S.metadataFlags&(Af|Of)||S.expiresAt&&S.expiresAt<Date.now())&&(N=!0):N=!0,as(!N,"cache-hit",n)),N){let C=mN(J,S,O).then(I=>(I?.value?.[Re]&&ze.error("Can not assign a record with a record property"),O&&(I?.version>(O.lastModified||0)&&(O.lastModified=I.version),O.lastRefreshed=Date.now()),I));if(O?.onlyIfCached||S?.value&&v?.allowStaleWhileRevalidate?.(S,J)){if(C.catch(I=>ze.warn(I)),O?.onlyIfCached&&!v.doesExist())throw new mn.ServerError("Entry is not cached",504);return}else return C}}}a(Om,"ensureLoadedFromSource");function Ni(J){let S=J?.transaction;if(S){if(!S.open)throw new Error("Can not use a transaction that is not open");if(!S.lmdbDb)return S.lmdbDb=i,S;do{if(S.lmdbDb?.path===i.path)return S;let O=S.next;if(!O)return S=S.next=new Oo,S.lmdbDb=i,S;S=O}while(!0)}else return new hd}a(Ni,"txnForContext");async function mN(J,S,O){let v=S?.metadataFlags,N=S?.version,C,I;if(!i.attemptLock(J,N,()=>{clearTimeout(I);let j=i.getEntry(J);!j||!j.value||j.metadataFlags&(Af|Of)?C(mN(J,i.getEntry(J),O)):C(j)}))return new Promise(j=>{C=j,I=setTimeout(()=>{i.unlock(J,N)},jX)});let L=S?.value,D={requestContext:O,replacingRecord:L,replacingVersion:N,source:null,resourceCache:O?.resourceCache},K=O?.responseHeaders;return new Promise((j,ce)=>{let Y;LT(Qe(D,async me=>{let ye=performance.now(),oe,Kt,sr;try{for(let Lr of pt.sources)if(Lr.get&&(!Lr.get.reliesOnPrototype||Lr.prototype.get)&&(D.source=Lr,oe=await Lr.get(J,D),oe))break;sr=v&Af;let $e=D.lastModified||sr&&N;Kt=sr||$e>N||!L,$e||($e=(0,nl.getNextMonotonicTime)());let Js=performance.now()-ye;if(kr(Js,"cache-resolution",n),K&&K.append("Server-Timing",`cache-resolve;dur=${Js.toFixed(2)}`),me.timestamp=$e,d&&!D.expiresAt&&(D.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]!==J&&(oe[t]=J)}Y=!0,j({version:$e,value:oe})}catch($e){$e.message+=` while resolving record ${J} for ${n}`,L&&(($e.code==="ECONNRESET"||$e.code==="ECONNREFUSED"||$e.code==="EAI_AGAIN")&&!O?.mustRevalidate||O?.staleIfError&&($e.statusCode===500||$e.statusCode===502||$e.statusCode===503||$e.statusCode===504))?(j({version:N,value:L}),ze.trace($e.message,"(returned stale record)")):ce($e),D.transaction.abort();return}if(O?.noCacheStore){D.transaction.abort();return}Ni(D).addWrite({key:J,store:i,entry:S,nodeName:"source",commit:($e,Js)=>{if(Js?.version!==N)return;let Lr=q_(J,L,oe);oe?(Pt.put?.(D,J,oe),m(J,oe,Js,$e,0,E&&Kt||null,D,D.expiresAt,"put",!!sr)):(Pt.delete?.(D,J),E||h?m(J,null,Js,$e,0,E&&Kt||null,D,0,"delete",!!sr):i.remove(J,N))}})}),()=>{i.unlock(J,N)},me=>{i.unlock(J,N),Y&&ze.error("Error committing cache update",me)})})}a(mN,"getFromSource");function Nm(){if(Os!==EN&&(EN=Os,(0,Fo.getWorkerIndex)()===(0,Fo.getWorkerCount)()-1)){if(H_&&clearTimeout(H_),!Os)return;let J=new Date;J.setMonth(0),J.setDate(1),J.setHours(0),J.setMinutes(0),J.setSeconds(0);let S=Math.ceil((Date.now()-J.getTime())/Os)*Os+J.getTime(),O=a(v=>{ze.trace(`Scheduled next cleanup scan at ${new Date(v)}ms`),H_=setTimeout(()=>F=F.then(async()=>{if(O(Math.max(v+Os,Date.now())),i.rootStore.status!=="open"){clearTimeout(H_);return}ze.trace(`Starting cleanup scan for ${n}`);try{let N=0;for(let{key:C,value:I,version:L,expiresAt:D}of i.getRange({start:!1,snapshot:!1,versions:!0,lazy:!0}))I===null&&!E&&L+QX<Date.now()?i.remove(C,L):D&&D+f<Date.now()&&(pt.evict(C,I,L),N++),await tl();ze.trace(`Finished cleanup scan for ${n}, evicted ${N} entries`)}catch(N){ze.trace(`Error in cleanup scan for ${n}:`,N)}}),Math.min(v-Date.now(),2147483647)).unref()},"startNextTimer");O(S)}}a(Nm,"scheduleCleanup");function pN(){k=u?.addDeleteRemovalCallback(s,J=>{let S=i.getEntry(J);S?.value===null&&i.remove(J,S.version)})}a(pN,"addDeleteRemoval");function nk(){(0,Fo.getWorkerIndex)()===0&&setInterval(async()=>{try{let J=B.name,S=r[J];if(!S)throw new Error(`expiresAt attribute ${B} must be indexed`);for(let{value:O}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let v=i.getEntry(O);v?.value?.[J]<Date.now()&&pt.evict(O,v.value,v.version),await tl()}}catch(J){ze.error("Error in evicting old records",J)}},WX).unref()}a(nk,"runRecordExpirationEviction")}function CT(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 fP(){}function zX(e){pP=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"&&!JX.test(e)&&(e+="Z"),new Date(e)):r?e:(0,If.autoCast)(e)}function EP(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 LT(e,t,r){return e?.then?e.then(t,r):t(e)}function sl(e,t){e[hn]=t,e[Re]=t?.value??null,e[bf]=t?.version}var qs,Nf,nl,hP,rl,al,mn,il,ol,ze,mP,Fo,If,VX,pP,YX,KX,WX,QX,_P,jX,bf,dP,hn,IT,wT,el,Af,Of,lSe,JX,tl,Cf=ge(()=>{qs=M(A()),Nf=require("lmdb"),nl=M(lr()),hP=require("lodash");tn();ep();rl=M(Ke()),al=M(Q());Fy();mn=M(Z()),il=M(Kn()),ol=M(Ps());de();pd();ze=M(U());Ed();No();mP=require("ordered-binary"),Fo=M(je());Na();If=M(G());du();zn();VX=new Uint8Array(9);VX[8]=192;YX=1e8,KX=1e7,WX=6e4,QX=864e5;al.initSync();_P=al.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jX=1e4,bf=Symbol.for("version"),dP=Symbol.for("incremental-update"),hn=Symbol("entry"),IT=Symbol("is-saving"),wT=Symbol("loaded-from-source"),el={isNotification:!0,ensureLoaded:!1},Af=1,Of=8,lSe=(0,If.convertToMS)(al.get(qs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(wf,"makeTable");a(CT,"attributesAsObject");a(fP,"noop");a(zX,"setServerUtilities");JX=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(yf,"coerceType");a(EP,"isDescendantId");tl=a(()=>new Promise(setImmediate),"rest");a(LT,"when");a(sl,"updateResource")});var Le={};Ge(Le,{database:()=>xu,databases:()=>Je,dropDatabase:()=>VS,dropTableMeta:()=>sZ,getDatabases:()=>vs,getTables:()=>XX,onUpdatedTable:()=>BT,readMetaDb:()=>cl,resetDatabases:()=>ZX,table:()=>ut,tables:()=>Vr});function XX(){return Uf||vs(),Vr||{}}function vs(){if(Uf)return Je;Uf=!0,Ya=new Map;let e=(0,Jt.getHdbBasePath)()&&(0,Ye.join)((0,Jt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),t=(0,Jt.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,Jt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,$r.existsSync)(e)?e:(0,Ye.join)((0,Jt.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&&cl((0,Ye.join)(e,r.name),null,s)}if((0,$r.existsSync)((0,Va.getBaseSchemaPath)())){for(let r of(0,$r.readdirSync)((0,Va.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ye.join)((0,Va.getBaseSchemaPath)(),r.name),n=(0,Ye.join)((0,Va.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);cl((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"&&cl((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)&&cl(u,o,r,null,!0)}}for(let r in Je){let s=Ya.get(r);if(s){let n=Je[r];r.includes("delete")&&cs.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(cs.trace(`delete table class ${i}`),delete n[i])}else if(delete Je[r],r==="data"){for(let n in Vr)delete Vr[n];delete Vr[vf]}}return Ya=null,Je}}function ZX(){Uf=!1;for(let[,e]of Fi)e.needsDeletion=!0;vs();for(let[e,t]of Fi)t.needsDeletion&&!e.endsWith("system.mdb")&&(t.close(),Fi.delete(e));return Je}function cl(e,t,r=UT,s,n){let i=new PT.default(e,!1);try{let o=Fi.get(e);o?o.needsDeletion=!1:(o=(0,Df.open)(i),Fi.set(e,o));let c=new xo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Lf.INTERNAL_DBIS_NAME,c)),_=o.auditStore;_||(s?(0,$r.existsSync)(s)&&(i.path=s,_=(0,Df.open)(i),_.isLegacy=!0):_=yd(o));let l=RP(r),d=l[vf],f=new Map;for(let{key:E,value:h}of u.getRange({start:!1})){let[p,m]=E.toString().split("/");m===""?m=h.name:m||(m=p,p=t,h.name||(h.name=m,h.indexed=!h.is_hash_attribute)),d?.add(p);let g=f.get(p);g||f.set(p,g={attributes:[]}),(m==null||h.is_hash_attribute)&&(g.primary=h),m!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:E,configurable:!0})}for(let[E,h]of f){let{attributes:p,primary:m}=h;if(!m){for(let k of p)if(k.is_hash_attribute||k.isPrimaryKey){m=k;break}if(!m){cs.fatal(`Unable to find a primary key attribute on table ${E}, with attributes: ${JSON.stringify(p)}`);continue}}let g=l[E],R={},b=[],V,$,F=typeof m.audit=="boolean"?m.audit:(0,Jt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),w=m.trackDeletes,W=m.expiration,B=m.eviction;if(g)R=g.indices,b=g.attributes,g.schemaVersion++;else{V=m.tableId,V?V>=(u.get($a)||0)&&u.putSync($a,V+1):(m.tableId=V=u.get($a),V||(V=1),u.putSync($a,V+1),u.putSync(m.key,m));let k=new xo.default(!m.is_hash_attribute,m.is_hash_attribute);$=Nd(o.openDB(m.key,k)),$.rootStore=o,$.tableId=V}for(let k of p){k.attribute=k.name;try{if(!k.is_hash_attribute&&(k.indexed||k.attribute&&!k.name)){if(!R[k.name]){let Ie=new xo.default(!k.is_hash_attribute,k.is_hash_attribute);R[k.name]=o.openDB(k.key,Ie)}let se=b.find(Ie=>Ie.name===k.name);se?b.splice(b.indexOf(se),1,k):b.push(k)}}catch(se){cs.error("Error trying to update attribute",k,b,R,se)}}if(!g){g=AP(l,E,wf({primaryStore:$,auditStore:_,audit:F,expirationMS:W&&W*1e3,evictionMS:B&&B*1e3,trackDeletes:w,tableName:E,tableId:V,primaryKey:m.name,databasePath:n?r+"/"+E:r,databaseName:r,indices:R,attributes:p,schemaDefined:m.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let k of vT)k(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function RP(e){let t=Je[e];if(t||(e==="data"?t=Je[e]=Vr:e==="system"?Object.defineProperty(Je,"system",{value:t=Object.create(null),configurable:!0}):t=Je[e]=Object.create(null)),Ya&&!Ya.has(e)){let r=new Set;t[vf]=r,Ya.set(e,r)}return t}function AP(e,t,r){return e[t]=r,r}function xu({database:e,table:t}){e||(e=UT),vs();let r=RP(e),s=(0,Ye.join)((0,Jt.getHdbBasePath)(),Yr.DATABASES_DIR_NAME),n=(0,Jt.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,Jt.get)(Yr.CONFIG_PARAMS.STORAGE_PATH)||((0,$r.existsSync)(s)?s:(0,Ye.join)((0,Jt.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 PT.default(o,!1);c=(0,Df.open)(u),Fi.set(o,c)}return c}async function VS(e){if(!Je[e])throw new Error("Schema does not exist");let t=Je[e];for(let r in t){let n=t[r].primaryStore.rootStore;Fi.delete(n.path),n.status==="open"&&(await n.close(),await SP.remove(n.path))}if(e==="data"){for(let r in Vr)delete Vr[r];delete Vr[vf]}delete Je[e]}function ut({table:e,database:t,expiration:r,eviction:s,scanInterval:n,attributes:i,audit:o,trackDeletes:c,schemaDefined:u,origin:_}){t||(t=UT);let l=xu({database:t,table:e}),d=Je[t],f=d?.[e];if(l.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let E,h,p,m;u==null&&(u=!0);let g=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 R,b;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=yd(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,Jt.get)(Yr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(h.expiration=r),s&&(h.eviction=s),_&&(h.origins?h.origins.includes(_)||h.origins.push(_):h.origins=[_]),cs.trace(`${e} table loading, opening primary store`);let W=new xo.default(!1,!0),B=e+"/",k=Nd(l.openDB(B,W));k.rootStore=l,m=l.dbisDb=l.openDB(Lf.INTERNAL_DBIS_NAME,g),k.tableId=m.get($a),k.tableId||(k.tableId=1),m.putSync($a,k.tableId+1),h.tableId=k.tableId,f=AP(d,e,wf({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:m})),f.schemaVersion=1,R=!0,F(),m.put(B,h)}p=f.indices,m=m||(l.dbisDb=l.openDB(Lf.INTERNAL_DBIS_NAME,g)),f.dbisDB=m;let V=[];for(let{key:w,value:W}of m.getRange({start:!0})){let[B,k]=w.toString().split("/");if(k===""&&(k=W.name),k){if(B!==e)continue}else k=B;if(!i.find(Ie=>Ie.name===k)?.indexed&&W.indexed&&!W.isPrimaryKey){F(),R=!0,m.remove(w);let Ie=f.indices[B];Ie&&V.push(Ie)}}let $=[];try{for(let w of i||[]){let W=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:W,configurable:!0});let B=m.get(W);if(w.isPrimaryKey){if(B=B||m.get(W=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),R=!0,F(),m.put(W,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(W,se);(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(R=!0,F(),B=m.get(W),(k||B.indexingPID&&B.indexingPID!==process.pid||B.restartNumber<ul.workerData?.restartNumber)&&(R=!0,w.lastIndexedKey=B?.lastIndexedKey||!1,w.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(w,"dbi",{value:Ie}),$.push(w)),m.put(W,w)),p[w.name]=Ie}else k&&(R=!0,F(),m.put(W,w))}}finally{b&&b()}if(R&&(f.schemaVersion++,f.updatedAttributes()),cs.trace(`${e} table loading, running index`),$.length>0||V.length>0?f.indexingOperation=rZ(f,$,V):R&&Pf.signalSchemaChange(new Mf.SchemaEventMsg(process.pid,"schema-change",f.databaseName,f.tableName)),f.origin=_,R)for(let w of vT)w(f,_!=="cluster");return(r||s||n)&&f.setTTLExpiration({expiration:r,eviction:s,scanInterval:n}),cs.trace(`${e} table loaded`),f;function F(){b||l.transactionSync(()=>({then(w){b=w}}))}a(F,"startTxn")}async function rZ(e,t,r){try{let s=e.schemaVersion;await Pf.signalSchemaChange(new Mf.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,p=(0,TP.getIndexedValues)(l[h]);if(p)for(let m=0,g=p.length;m<g;m++)E.dbi.put(p[m],_)}}),n.then(()=>u--,f=>{u--,cs.error(f)}),ul.workerData&&ul.workerData.restartNumber!==gP.restartNumber&&(i=!0),++o%100===0||i){for(let f of t)f.lastIndexedKey=_,e.dbisDB.put(f.key,f);if(i)return}u>eZ?await n:u>tZ&&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 Pf.signalSchemaChange(new Mf.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){cs.error("Error in indexing",s)}}function sZ({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 BT(e){vT.push(e)}var Jt,Lf,Df,Ye,$r,Va,xo,PT,Yr,SP,MT,TP,Pf,Mf,ul,cs,gP,UT,vf,Vr,Je,$a,vT,Uf,Fi,Ya,eZ,tZ,de=ge(()=>{Jt=M(Q()),Lf=M(Ke()),Df=require("lmdb"),Ye=require("path"),$r=require("fs"),Va=M(Be());Cf();xo=M(Id()),PT=M(Cd()),Yr=M(A()),SP=M(require("fs-extra")),MT=require("../index"),TP=M(lr()),Pf=M(Kn()),Mf=M(Ps()),ul=require("worker_threads"),cs=M(U()),gP=M(je());Na();du();UT="data",vf=Symbol("defined-tables");(0,Jt.initSync)();Vr=Object.create(null),Je=Object.create(null);(0,MT._assignPackageExport)("databases",Je);(0,MT._assignPackageExport)("tables",Vr);$a=Symbol.for("next-table-id"),vT=[],Fi=new Map;a(XX,"getTables");a(vs,"getDatabases");a(ZX,"resetDatabases");a(cl,"readMetaDb");a(RP,"ensureDB");a(AP,"setTable");a(xu,"database");a(VS,"dropDatabase");a(ut,"table");eZ=1e3,tZ=10;a(rZ,"runIndexing");a(sZ,"dropTableMeta");a(BT,"onUpdatedTable")});var qT={};Ge(qT,{loadGQLSchema:()=>oZ,start:()=>HT,startOnMainThread:()=>iZ});function HT({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 m of d.definitions)switch(m.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 W={type:F.name?.value};return Object.defineProperty(W,"location",{value:F.loc.startToken}),W};a($,"getProperty");let g=m.name.value,R=[],b={table:null,database:null,properties:R};f.set(g,b);for(let F of m.directives){if(F.name.value==="table"){for(let w of F.arguments)b[w.name.value]=w.value.value;b.schema&&(b.database=b.schema),b.table||(b.table=g),b.audit&&(b.audit=b.audit!=="false"),b.attributes=b.properties,E.push(b)}if(F.name.value==="sealed"&&(b.sealed=!0),F.name.value==="export"){b.export=!0;for(let w of F.arguments)w.name.value==="name"&&(b.export={name:w.value.value})}}let V=!1;for(let F of m.fields){let w=$(F.type);w.name=F.name.value,R.push(w);for(let W of F.directives)if(W.name.value==="primaryKey")V?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,V=!0);else if(W.name.value==="indexed")w.indexed=!0;else if(W.name.value==="createdTime")w.assignCreatedTime=!0;else if(W.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(W.name.value==="expiresAt")w.expiresAt=!0;else if(W.name.value==="allow"){let B=w.authorizedRoles=[];for(let k of W.arguments)k.name.value==="role"&&B.push(k.value.value)}}b.typeName=g,g==="Query"&&(h=b)}function p(m){let g=f.get(m.type);g?m.properties=g.properties:m.type==="array"?p(m.elements):nZ.includes(m.type)||(0,OP.getWorkerIndex)()===0&&console.error(`The type ${m.type} is unknown at line ${m.location.line}, column ${m.location.column}, in ${n}`)}a(p,"connectPropertyType");for(let m of f.values())for(let g of m.properties)p(g);for(let m of E)m.tableClass=e(m),m.export&&(m.export.name===""?i.set((0,Bf.dirname)(s),m.tableClass):i.set((0,Bf.dirname)(s)+"/"+(m.export.name||m.typeName),m.tableClass));if(h)for(let m of h.properties){let g=f.get(m.type);if(!g)throw new Error(`${m.type} was not found as a Query export`);i.set((0,Bf.dirname)(s)+"/"+m.name,g.tableClass)}}}var Bf,OP,nZ,iZ,oZ,NP=ge(()=>{Bf=require("path");de();OP=M(je()),nZ=["ID","Int","Float","Long","String","Boolean","Date","Bytes","Any"];a(HT,"start");iZ=HT,oZ=HT({ensureTable:ut}).handleFile});async function Hf(e){return aZ?(ll||(ll=cZ(lZ)),(await(await ll).import(e)).namespace):import(e)}async function cZ(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ll=new Compartment({console,Math,Date,fetch:uZ,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,yP.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:vt,tables:Vr,databases:Je})}};let s=await(0,bP.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ll}function uZ(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 lZ(){return{Resource:vt,tables:Vr}}var bP,yP,aZ,ll,GT=ge(()=>{tn();de();bP=require("fs/promises"),yP=require("path"),aZ=!1;a(Hf,"secureImport");a(cZ,"getCompartment");a(uZ,"secureOnlyFetch");a(lZ,"getGlobalVars")});var xT={};Ge(xT,{handleFile:()=>_Z});async function _Z(e,t,r,s){let n=new Map,i=(0,IP.pathToFileURL)(r).toString(),o=await Hf(i);u(o.default)&&s.set((0,FT.dirname)(t),o.default),c(o,(0,FT.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 IP,FT,wP=ge(()=>{IP=require("url");GT();FT=require("path");a(_Z,"handleFile")});var $T={};Ge($T,{start:()=>dZ});function dZ({resources:e}){e.set("login",kT),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var kT,CP=ge(()=>{tn();a(dZ,"start");kT=class extends vt{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 YT=T((wSe,PP)=>{"use strict";var{Readable:fZ}=require("stream"),EZ=1e4;PP.exports={streamAsJSON(e){return new VT({value:e})}};var VT=class extends fZ{static{a(this,"JSONStream")}constructor(t){super(t),this.buffer=[],this.bufferSize=0,this.iterator=this.serialize(t.value,!0)}*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](),o;for(;;)if(o=i.next(),o.then&&(yield o.then(c=>(o=c,""))),o.done){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),LP)}catch(n){yield LP(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);DP(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>EZ?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 DP(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}}};function LP(e){return console.error(e),JSON.stringify(e.toString())}a(LP,"handleError");function DP(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(DP,"when")});var qf=T((LSe,MP)=>{"use strict";var hZ=is();MP.exports={writeTransaction:mZ};function mZ(e,t,r){return hZ.writeTransaction(e,t,r)}a(mZ,"writeTransaction")});var HP=T((MSe,BP)=>{"use strict";var pZ=fr(),SZ=os(),UP=U(),TZ=Er(),PSe=qf(),gZ=require("clone"),WT=require("alasql"),RZ=ef(),vP=require("util"),AZ=vP.promisify(SZ.getTableSchema),OZ=vP.promisify(pZ.search),NZ=A(),KT=G();RZ(WT);BP.exports={update:yZ};var bZ="There was a problem performing this update. Please check the logs and try again.";async function yZ({statement:e,hdb_user:t}){let r=await AZ(e.table.databaseid,e.table.tableid),s=IZ(e.columns);KT.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=gZ(n),c=KT.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,_=WT.parse(u).statements[0],l=await OZ(_),d=wZ(s,l);return CZ(o,d,t)}a(yZ,"update");function IZ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=WT.compile(`SELECT ${r.expression.toString()} AS [${NZ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw UP.error(t),new Error(bZ)}}a(IZ,"createUpdateRecord");function wZ(e,t){return KT.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(wZ,"buildUpdateRecords");async function CZ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await TZ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){UP.error(`Error delete new_attributes from update response: ${i}`)}return n}a(CZ,"updateRecords")});var GP=T((HSe,qP)=>{var LZ=require("alasql"),DZ=fr(),PZ=U(),MZ=is(),jT=require("util"),QT=G(),UZ=A(),vZ=os(),vSe=qf(),BSe=Er(),BZ="record",HZ="successfully deleted",qZ=jT.callbackify(kZ),GZ=jT.promisify(DZ.search),FZ=jT.promisify(vZ.getTableSchema);qP.exports={convertDelete:qZ};function xZ(e){return`${e.deleted_hashes.length} ${BZ}${e.deleted_hashes.length===1?"":"s"} ${HZ}`}a(xZ,"generateReturnMessage");async function kZ({statement:e,hdb_user:t}){let r=await FZ(e.table.databaseid,e.table.tableid);QT.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=QT.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=LZ.parse(o).statements[0],u={operation:UZ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await GZ(c);let _=await MZ.deleteRecords(u);return QT.isEmptyOrZeroLength(_.message)&&(_.message=xZ(_)),delete _.txn_time,_}catch(_){throw PZ.error(_),_.hdb_code?_.message:_}}a(kZ,"convertDelete")});var VP=T((GSe,$P)=>{"use strict";var $Z=vi(),{hdb_errors:FP}=Z(),{getDatabases:xP}=(de(),te(Le));$P.exports={checkSchemaExists:kP,checkSchemaTableExists:VZ,schema_describe:$Z};async function kP(e){if(!xP()[e])return FP.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(kP,"checkSchemaExists");async function VZ(e,t){let r=await kP(e);if(r)return r;if(!xP()[e][t])return FP.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VZ,"checkSchemaTableExists")});var st=T((YSe,uM)=>{"use strict";var qt=Q();qt.initSync();var YZ=require("fs-extra"),KZ=require("semver"),fl=require("path"),{monotonicFactory:WZ}=require("ulidx"),KP=WZ(),QZ=require("util"),WP=require("child_process"),jZ=QZ.promisify(WP.exec),zZ=WP.spawn,Ae=xe(),be=A(),ZT=G(),us=U(),Gf=jn(),JZ=qf(),_l=tt(),{onMessageByType:XZ}=je(),{isMainThread:ZZ}=require("worker_threads"),{Encoder:e5,decode:eg}=require("msgpackr"),QP=new e5,{isEmpty:ko}=ZT,jP=hr(),t5=48*36e11,r5=5e9;ZZ&&XZ(be.ITC_EVENT_TYPES.RESTART,()=>{Gs=void 0,Qa=void 0});var{connect:s5,StorageType:zP,RetentionPolicy:JP,AckPolicy:Ff,DeliverPolicy:xf,DiscardPolicy:n5,NatsConnection:xSe,JetStreamManager:kSe,JetStreamClient:$Se,StringCodec:VSe,JSONCodec:i5,createInbox:tg,headers:o5,ErrorCode:YP}=require("nats"),{PACKAGE_ROOT:a5}=A(),c5=mo(),{recordAction:u5}=(zn(),te(Zu)),XP=i5(),l5="clustering",_5=c5.engines[Ae.NATS_SERVER_NAME],d5=fl.join(a5,"dependencies"),XT=fl.join(d5,`${process.platform}-${process.arch}`,Ae.NATS_BINARY_NAME),zT,JT,dl,Ka,Wa;uM.exports={runCommand:ZP,checkNATSServerInstalled:f5,createConnection:rg,getConnection:kf,getJetStreamManager:El,getJetStream:eM,getNATSReferences:mr,getServerList:h5,createLocalStream:sg,listStreams:tM,deleteLocalStream:m5,getServerConfig:hl,listRemoteStreams:p5,viewStream:S5,viewStreamIterator:T5,publishToStream:g5,createWorkQueueStream:R5,addSourceToWorkStream:sM,request:O5,removeSourceFromWorkStream:iM,reloadNATS:ng,reloadNATSHub:N5,reloadNATSLeaf:b5,extractServerName:nM,requestErrorHandler:y5,updateWorkStream:I5,createLocalTableStream:aM,createTableStreams:w5,purgeTableStream:cM,purgeSchemaTableStreams:C5,getStreamInfo:L5,updateLocalStreams:P5,closeConnection:E5,getJsmServerName:ml,addNatsMsgHeader:rM,updateIngestStreamConsumer:A5};async function ZP(e,t=void 0){let{stdout:r,stderr:s}=await jZ(e,{cwd:t});if(s)throw new Error(s.replace(`
8
8
  `,""));return r.replace(`
9
- `,"")}a(ZP,"runCommand");async function d5(){try{await VZ.access(ZT)}catch{return!1}let e=await ZP(`${ZT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return YZ.eq(t,l5)}a(d5,"checkNATSServerInstalled");async function sg(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await zP.getClusterUser();if(xo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}as.trace("create nats connection called");let i=await r5({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:2e5,tls:{keyFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return as.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(sg,"createConnection");async function f5(){Bs&&(await Bs.drain(),Bs=void 0,Wa=void 0,Qa=void 0,za=void 0)}a(f5,"closeConnection");var Bs,za;async function Ff(){return za||(za=sg(qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Bs=await za),Bs||za}a(Ff,"getConnection");async function fl(){if(Wa)return Wa;xo(Bs)&&await Ff();let{domain:e}=El(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wa=await Bs.jetstreamManager({domain:e}),Wa}a(fl,"getJetStreamManager");async function eM(){if(Qa)return Qa;xo(Bs)&&await Ff();let{domain:e}=El(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(xo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Qa=Bs.jetstream({domain:e}),Qa}a(eM,"getJetStream");async function Er(){let e=Bs||await Ff(),t=Wa||await fl(),r=Qa||await eM();return{connection:e,jsm:t,js:r}}a(Er,"getNATSReferences");async function E5(e){let t=qt.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await zP.getClusterUser(),n=await sg(t,r,s),i=rg(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=XP.decode(_.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 eg.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(E5,"getServerList");async function ng(e,t){let{jsm:r}=await Er(),s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:JP.File,retention:jP.Limits,subjects:t,discard:s5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(ng,"createLocalStream");async function tM(){let{jsm:e}=await Er(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(tM,"listStreams");async function h5(e){let{jsm:t}=await Er();await t.streams.delete(e)}a(h5,"deleteLocalStream");async function m5(e){let{connection:t}=await Er(),r=[],s=rg(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(XP.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 p5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Er(),i=KP(),o={durable_name:i,ack_policy:qf.Explicit};t&&(o.deliver_policy=Gf.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 l=[];for await(let _ of u){let d=tg(_.data),f={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(f.origin=_.headers.get(Ae.MSG_HEADERS.ORIGIN)),l.push(f),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(p5,"viewStream");async function*S5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Er(),i=KP(),o={durable_name:i,ack_policy:qf.Explicit};t&&(o.deliver_policy=Gf.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 l of u){let _=tg(l.data);_[0]||(_=[_]);for(let d of _){let f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(f.origin=l.headers.get(Ae.MSG_HEADERS.ORIGIN)),yield f}if(l.ack(),l.info.pending===0)break}await c.delete()}a(S5,"viewStreamIterator");async function T5(e,t,r,s){as.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=rM(s,r);let{js:n}=await Er(),i=await hl(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:QP.encode(s);try{as.trace(`publishToStream publishing to subject: ${o}`),c5(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 oM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){as.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await ng(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(T5,"publishToStream");function rM(e,t){t===void 0&&(t=i5());let r=qt.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return t.has(Ae.MSG_HEADERS.ORIGIN)||t.append(Ae.MSG_HEADERS.ORIGIN,r),t}a(rM,"addNatsMsgHeader");function El(e){e=e.toLowerCase();let t=dl.join(qt.get(be.CONFIG_PARAMS.ROOTPATH),u5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return xo(XT)&&(XT={port:ll.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ll.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.HUB,config_file:Ae.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:dl.join(t,Ae.PID_FILES.HUB),hdb_nats_path:t}),XT;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return xo(jT)&&(jT={port:ll.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ll.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.LEAF,config_file:Ae.NATS_CONFIG_FILES.LEAF_SERVER,domain:ll.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.LEAF,pid_file_path:dl.join(t,Ae.PID_FILES.LEAF),hdb_nats_path:t}),jT;as.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(El,"getServerConfig");async function g5(e){let{jsm:t}=await Er(),r=await hl();try{await t.streams.add({name:e.stream_name,storage:JP.File,retention:jP.Limits,max_age:e5,max_bytes:t5,subjects:[`${Ae.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:qf.Explicit,durable_name:e.durable_name,deliver_policy:Gf.All,max_ack_pending:1e4});else throw s}}a(g5,"createWorkQueueStream");async function R5(){let{jsm:e}=await Er();(await e.consumers.info(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(as.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name),as.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:qf.Explicit,durable_name:Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Gf.All,max_ack_pending:1e4}))}a(R5,"updateIngestStreamConsumer");async function sM(e,t,r){let{jsm:s}=await Er(),n=await s.streams.info(t),i=nM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hf.createNatsTableStreamName(c,u),_=i===e,d,f,E=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let S=0,m=n.config.sources.length;S<m;S++)if(d=n.config.sources[S],f=S,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){E=!0;break}if(E===!0){if(d.opt_start_time===o)return;let S=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:S}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${Ae.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(sM,"addSourceToWorkStream");function nM(e){return e.split(".")[1]}a(nM,"extractServerName");async function iM(e,t,r){let{jsm:s}=await Er(),{schema:n,table:i}=r,o=`txn.${n}.${i}.${e}`;await s.streams.purge(t,{filter:o});let c=Hf.createNatsTableStreamName(n,i),u=await s.streams.info(t);if(!Array.isArray(u.config.sources)||u.config.sources.length===0)return;let l=u.config.sources.length,_;for(;l--;)if(_=u.config.sources[l],_.name===c&&_.external.api===`$JS.${e}.API`){u.config.sources.splice(l,1);break}await s.streams.update(t,u.config)}a(iM,"removeSourceFromWorkStream");async function A5(e,t,r=2e4,s=rg()){if(!eg.isObject(t))throw new Error("data param must be an object");let n=QP.encode(t),{connection:i}=await Er(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return tg(c.data)}a(A5,"request");function ig(e){return new Promise(async(t,r)=>{let s=zZ(ZT,["--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(ig,"reloadNATS");async function O5(){let{pid_file_path:e}=El(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ig(e)}a(O5,"reloadNATSHub");async function N5(){let{pid_file_path:e}=El(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ig(e)}a(N5,"reloadNATSLeaf");function b5(e,t,r){let s;switch(e.code){case YP.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case YP.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(b5,"requestErrorHandler");async function y5(e,t){let r=t+Ae.SERVER_SUFFIX.LEAF;await oM(async()=>{e.subscribe===!0?await sM(r,Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await iM(r,Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(y5,"updateWorkStream");function oM(e){return JZ.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(oM,"exclusiveLock");async function aM(e,t){let r=Hf.createNatsTableStreamName(e,t),s=await hl(),n=L5(e,t,s);await ng(r,[n])}a(aM,"createLocalTableStream");async function I5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await aM(s,n)}}a(I5,"createTableStreams");async function cM(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hf.createNatsTableStreamName(e,t),{jsm:s}=await Er();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")as.warn(r);else throw r}}a(cM,"purgeTableStream");async function w5(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await cM(e,t[r])}a(w5,"purgeSchemaTableStreams");async function C5(e){return(await fl()).streams.info(e)}a(C5,"getStreamInfo");function L5(e,t,r){return`${Ae.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(L5,"createSubjectName");async function hl(){if(_l)return _l;if(_l=(await fl())?.nc?.info?.server_name,_l===void 0)throw new Error("Unable to get jetstream manager server name");return _l}a(hl,"getJsmServerName");async function D5(){let e=await fl(),t=await hl(),r=await tM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=P5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Ae.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${Ae.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;as.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;as.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");as.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(D5,"updateLocalStreams");function P5(e){let{config:t}=e,r=!1;if(t.name===Ae.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=qt.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(P5,"updateStreamLimits")});var Vf=p((WSe,fM)=>{"use strict";var Ja=Bd(),ja=VP(),M5=M(),U5=require("uuid").v4,KSe=require("clone"),kf=Kn(),Xa=A(),v5=require("util"),ki=ss(),{handleHDBError:hr,hdb_errors:B5}=Z(),{HDB_ERROR_MSGS:xf,HTTP_STATUS_CODES:mr}=B5,{SchemaEventMsg:$f}=Cs(),lM=nt(),{getDatabases:H5}=(fe(),te(Pe)),{transformReq:Za}=G();fM.exports={createSchema:q5,createSchemaStructure:_M,createTable:G5,createTableStructure:dM,createAttribute:V5,dropSchema:F5,dropTable:x5,dropAttribute:k5,getBackup:Y5};async function q5(e){let t=await _M(e);return kf.signalSchemaChange(new $f(process.pid,e.operation,e.schema)),t}a(q5,"createSchema");async function _M(e){let t=Ja.schema_object(e);if(t)throw hr(t,t.message,mr.BAD_REQUEST,void 0,void 0,!0);if(Za(e),!await ja.checkSchemaExists(e.schema))throw hr(new Error,xf.SCHEMA_EXISTS_ERR(e.schema),mr.BAD_REQUEST,Xa.LOG_LEVELS.ERROR,xf.SCHEMA_EXISTS_ERR(e.schema),!0);return await ki.createSchema(e),`database '${e.schema}' successfully created`}a(_M,"createSchemaStructure");async function G5(e){return Za(e),e.hash_attribute=e.primary_key??e.hash_attribute,await dM(e)}a(G5,"createTable");async function dM(e){let t=Ja.create_table_object(e);if(t)throw hr(t,t.message,mr.BAD_REQUEST,void 0,void 0,!0);if(Ja.validateTableResidence(e.residence),!await ja.checkSchemaTableExists(e.schema,e.table))throw hr(new Error,xf.TABLE_EXISTS_ERR(e.schema,e.table),mr.BAD_REQUEST,Xa.LOG_LEVELS.ERROR,xf.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:U5(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ki.createTable(s,e);else throw hr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",mr.BAD_REQUEST);else await ki.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(dM,"createTableStructure");async function F5(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ja.schema_object(e),s=t??r;if(s)throw hr(s,s.message,mr.BAD_REQUEST,void 0,void 0,!0);Za(e);let n=await ja.checkSchemaExists(e.schema);if(n)throw hr(new Error,n,mr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,n,!0);let i=await ja.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ki.dropSchema(e),kf.signalSchemaChange(new $f(process.pid,e.operation,e.schema)),await lM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(F5,"dropSchema");async function x5(e){let t=Ja.table_object(e);if(t)throw hr(t,t.message,mr.BAD_REQUEST,void 0,void 0,!0);Za(e);let r=await ja.checkSchemaTableExists(e.schema,e.table);if(r)throw hr(new Error,r,mr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,r,!0);return await ki.dropTable(e),await lM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(x5,"dropTable");async function k5(e){let t=Ja.attribute_object(e);if(t)throw hr(t,t.message,mr.BAD_REQUEST,void 0,void 0,!0);Za(e);let r=await ja.checkSchemaTableExists(e.schema,e.table);if(r)throw hr(new Error,r,mr.NOT_FOUND,Xa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw hr(new Error,"You cannot drop a hash attribute",mr.BAD_REQUEST,void 0,void 0,!0);if(Xa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw hr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,mr.BAD_REQUEST,void 0,void 0,!0);try{return await ki.dropAttribute(e),$5(e),kf.signalSchemaChange(new $f(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw M5.error(`Got an error deleting attribute ${v5.inspect(e)}.`),s}}a(k5,"dropAttribute");function $5(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($5,"dropAttributeFromGlobal");async function V5(e){Za(e);let t=H5()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw hr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,mr.BAD_REQUEST,void 0,void 0,!0);return await ki.createAttribute(e),kf.signalSchemaChange(new $f(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(V5,"createAttribute");function Y5(e){return ki.getBackup(e)}a(Y5,"getBackup")});var hM=p((zSe,EM)=>{"use strict";var{OPERATIONS_ENUM:K5}=A(),og=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=K5.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};EM.exports=og});var ag=p((XSe,gM)=>{"use strict";var W5=ss(),jSe=hM(),Yf=G(),Kf=A(),Q5=Q(),{handleHDBError:mM,hdb_errors:z5}=Z(),{HDB_ERROR_MSGS:pM,HTTP_STATUS_CODES:SM}=z5,J5=Object.values(Kf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),TM="To use this operation audit log must be enabled in harperdb-config.yaml";gM.exports=j5;async function j5(e){if(Yf.isEmpty(e.schema))throw new Error(pM.SCHEMA_REQUIRED_ERR);if(Yf.isEmpty(e.table))throw new Error(pM.TABLE_REQUIRED_ERR);if(!Q5.get(Kf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw mM(new Error,TM,SM.BAD_REQUEST,Kf.LOG_LEVELS.ERROR,TM,!0);let t=Yf.checkSchemaTableExist(e.schema,e.table);if(t)throw mM(new Error,t,SM.NOT_FOUND,Kf.LOG_LEVELS.ERROR,t,!0);if(!Yf.isEmpty(e.search_type)&&J5.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await W5.readAuditLog(e)}a(j5,"readAuditLog")});var AM=p((eTe,RM)=>{"use strict";var{OPERATIONS_ENUM:X5}=A(),cg=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=X5.GET_BACKUP,this.schema=t,this.table=r}};RM.exports=cg});var bM=p((nTe,NM)=>{"use strict";var Z5=ss(),rTe=AM(),ug=G(),e8=A(),sTe=Q(),{handleHDBError:t8,hdb_errors:r8}=Z(),{HDB_ERROR_MSGS:OM,HTTP_STATUS_CODES:s8}=r8;NM.exports=n8;async function n8(e){if(ug.isEmpty(e.schema))throw new Error(OM.SCHEMA_REQUIRED_ERR);if(ug.isEmpty(e.table))throw new Error(OM.TABLE_REQUIRED_ERR);let t=ug.checkSchemaTableExist(e.schema,e.table);if(t)throw t8(new Error,t,s8.NOT_FOUND,e8.LOG_LEVELS.ERROR,t,!0);return await Z5.getBackup(read_audit_log_object)}a(n8,"getBackup")});var DM=p((oTe,LM)=>{var $i=require("validate.js"),IM=Ye(),ec=A(),{handleHDBError:i8,hdb_errors:o8}=Z(),{HDB_ERROR_MSGS:it,HTTP_STATUS_CODES:a8}=o8,lg=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),c8={STRUCTURE_USER:"structure_user"},yM=Object.values(ec.ROLE_TYPES_ENUM),u8="attribute_permissions",l8="attribute_name",{PERMS_CRUD_ENUM:tc}=ec,_8=[u8,...Object.values(tc)],wM=[tc.READ,tc.INSERT,tc.UPDATE],d8=[l8,...wM];function f8(e){let t=lg();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,CM(e,t)}a(f8,"addRoleValidation");function E8(e){let t=lg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,CM(e,t)}a(E8,"alterRoleValidation");function h8(e){let t=lg();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,IM.validateObject(e,t)}a(h8,"dropRoleValidation");var m8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function CM(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&&dt(it.INVALID_ROLE_JSON_KEYS(n),r);let i=IM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{dt(o,r)}),e.permission){let o=p8(e);o&&dt(o,r),yM.forEach(c=>{e.permission[c]&&!$i.isBoolean(e.permission[c])&&dt(it.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(yM.indexOf(o)<0){if(o===c8.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||dt(it.SCHEMA_NOT_FOUND(d),r)}continue}dt(it.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){dt(it.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){dt(it.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{_8.includes(_)||dt(it.INVALID_PERM_KEY(_),r,o,u)}),Object.values(tc).forEach(_=>{$i.isDefined(l[_])?$i.isBoolean(l[_])||dt(it.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):dt(it.TABLE_PERM_MISSING(_),r,o,u)}),$i.isDefined(l.attribute_permissions)){if(!$i.isArray(l.attribute_permissions)){dt(it.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{dt(it.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:f})=>f),d={read:!1,insert:!1,update:!1};for(let f in l.attribute_permissions){let E=l.attribute_permissions[f];if(Object.keys(E).forEach(S=>{!d8.includes(S)&&S!==tc.DELETE&&dt(it.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!$i.isDefined(E.attribute_name)){dt(it.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=E.attribute_name;if(!_.includes(h)){dt(it.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}wM.forEach(S=>{$i.isDefined(E[S])?$i.isBoolean(E[S])||dt(it.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):dt(it.ATTR_PERM_MISSING(S,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(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let f=`${o}.${u}`;dt(it.MISMATCHED_TABLE_ATTR_PERMS(f),r,o,u)}}}}return S8(r)}a(CM,"customValidate");LM.exports={addRoleValidation:f8,alterRoleValidation:E8,dropRoleValidation:h8};function p8(e){let{operation:t,permission:r}=e;if(t===ec.OPERATIONS_ENUM.ADD_ROLE||t===ec.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 it.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ec.ROLE_TYPES_ENUM.SUPER_USER:ec.ROLE_TYPES_ENUM.CLUSTER_USER;return it.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(p8,"validateNoSUPerms");function S8(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:it.ROLE_PERMS_ERROR,...e};return i8(new Error,s,a8.BAD_REQUEST)}else return null}a(S8,"generateRolePermResponse");function dt(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(dt,"addPermError")});var zf=p((cTe,vM)=>{"use strict";var PM=_r(),MM=lr(),T8=Bo(),dg=DM(),fg=Kn(),g8=require("uuid").v4,R8=require("util"),Wf=A(),A8=G(),Eg=MM.searchByValue,O8=MM.searchByHash,N8=R8.promisify(T8.delete),b8=Ls(),y8=va(),{hdb_errors:I8,handleHDBError:rc}=Z(),{HDB_ERROR_MSGS:UM,HTTP_STATUS_CODES:Qf}=I8,{UserEventMsg:hg}=Cs();vM.exports={addRole:w8,alterRole:C8,dropRole:L8,listRoles:D8};function _g(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(_g,"scrubRoleDetails");async function w8(e){let t=dg.addRoleValidation(e);if(t)throw t;e=_g(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 Eg(r)||[])}catch(i){throw rc(i)}if(s&&s.length>0)throw rc(new Error,UM.ROLE_ALREADY_EXISTS(e.role),Qf.CONFLICT,void 0,void 0,!0);e.id||(e.id=g8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await PM.insert(n),fg.signalUserChange(new hg(process.pid)),e=_g(e),e}a(w8,"addRole");async function C8(e){let t=dg.alterRoleValidation(e);if(t)throw t;e=_g(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await PM.update(r)}catch(n){throw rc(n)}if(s&&s?.message==="updated 0 of 1 records")throw rc(new Error,"Invalid role id",Qf.BAD_REQUEST,void 0,void 0,!0);return await fg.signalUserChange(new hg(process.pid)),e}a(C8,"alterRole");async function L8(e){let t=dg.dropRoleValidation(e);if(t)throw rc(new Error,t,Qf.BAD_REQUEST,void 0,void 0,!0);let r=new y8(Wf.SYSTEM_SCHEMA_NAME,Wf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await O8(r));if(s.length===0)throw rc(new Error,UM.ROLE_NOT_FOUND,Qf.NOT_FOUND,void 0,void 0,!0);let n=new b8(Wf.SYSTEM_SCHEMA_NAME,Wf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Eg(n)),o=!1;if(A8.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 N8(c),fg.signalUserChange(new hg(process.pid)),`${s[0].role} successfully deleted`}a(L8,"dropRole");async function D8(){return Eg({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(D8,"listRoles")});var GM=p((lTe,qM)=>{"use strict";var P8=Q(),Vi=require("joi"),M8=Ye(),BM=require("moment"),U8=require("fs-extra"),mg=require("path"),v8=require("lodash"),ml=A(),{LOG_LEVELS:ko}=A(),B8="YYYY-MM-DD hh:mm:ss",H8=mg.resolve(__dirname,"../logs");qM.exports=function(e){return M8.validateBySchema(e,q8)};var q8=Vi.object({from:Vi.custom(HM),until:Vi.custom(HM),level:Vi.valid(ko.NOTIFY,ko.FATAL,ko.ERROR,ko.WARN,ko.INFO,ko.DEBUG,ko.TRACE),order:Vi.valid("asc","desc"),limit:Vi.number().min(1),start:Vi.number().min(0),log_name:Vi.custom(G8)});function HM(e,t){if(BM(e,BM.ISO_8601).format(B8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(HM,"validateDatetime");function G8(e,t){if(v8.invert(ml.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=P8.get(ml.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?ml.LOG_NAMES.HDB:e,i=n===ml.LOG_NAMES.INSTALL?mg.join(H8,ml.LOG_NAMES.INSTALL):mg.join(s,n);return U8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(G8,"validateReadLogPath")});var Sg=p((dTe,xM)=>{"use strict";var Jf=A(),F8=M(),x8=Q(),k8=GM(),pg=require("path"),FM=require("fs-extra"),{once:$8}=require("events"),{handleHDBError:V8,hdb_errors:Y8}=Z(),{PACKAGE_ROOT:K8}=A(),W8=pg.join(K8,"logs"),Q8=1e3,z8=200;xM.exports=J8;async function J8(e){let t=k8(e);if(t)throw V8(t,t.message,Y8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=x8.get(Jf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Jf.LOG_NAMES.HDB:e.log_name,n=s===Jf.LOG_NAMES.INSTALL?pg.join(W8,Jf.LOG_NAMES.INSTALL):pg.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,l=e.until!==void 0,_=l?new Date(e.until):void 0,d=e.limit===void 0?Q8:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,S=0;f==="desc"&&!u&&!_&&(S=Math.max(FM.statSync(n).size-(h+5)*z8,0));let m=FM.createReadStream(n,{start:S});m.on("error",F=>{F8.error(F)});let R=0,g=[],O="",V;m.on("data",F=>{let C=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=O+F;let Y=0,B;for(;(B=C.exec(F))&&!m.destroyed;){V&&(V.message=F.slice(Y,B.index),$(V));let[k,ie,we]=B,ce=we.split("] ["),Yt=ce[0],De=ce[1];ce.splice(0,2),V={timestamp:ie,thread:Yt,level:De,tags:ce,message:""},Y=B.index+k.length}O=F.slice(Y)}),m.on("end",F=>{m.destroyed||V&&(V.message=O.trim(),$(V))}),m.resume();function $(F){let C,Y,B;switch(!0){case(i&&c&&l):C=new Date(F.timestamp),Y=new Date(u),B=new Date(_),F.level===o&&C>=Y&&C<=B&&R<E?R++:F.level===o&&C>=Y&&C<=B&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case(i&&c):C=new Date(F.timestamp),Y=new Date(u),F.level===o&&C>=Y&&R<E?R++:F.level===o&&C>=Y&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case(i&&l):C=new Date(F.timestamp),B=new Date(_),F.level===o&&C<=B&&R<E?R++:F.level===o&&C<=B&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case(c&&l):C=new Date(F.timestamp),Y=new Date(u),B=new Date(_),C>=Y&&C<=B&&R<E?R++:C>=Y&&C<=B&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case i:F.level===o&&R<E?R++:F.level===o&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case c:C=new Date(F.timestamp),Y=new Date(u),C>=Y&&R<E?R++:C>=Y&&R>=E&&(Yi(F,f,g),R++,R===h&&m.destroy());break;case l:C=new Date(F.timestamp),B=new Date(_),C<=B&&R<E?R++:C<=B&&R>=E&&(Yi(F,f,g),R++,R===h&&m.destroy());break;default:R<E?R++:(Yi(F,f,g),R++,R===h&&m.destroy())}}return a($,"onLogMessage"),await $8(m,"close"),g}a(J8,"readLog");function Yi(e,t,r){t==="desc"?j8(e,r):t==="asc"?X8(e,r):r.push(e)}a(Yi,"pushLineToResult");function j8(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(j8,"insertDescending");function X8(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(X8,"insertAscending")});var Xf=p((pTe,YM)=>{"use strict";var Tg=require("joi"),{string:jf,boolean:kM,date:Z8}=Tg.types(),e6=Ye(),{validateSchemaExists:ETe,validateTableExists:hTe,validateSchemaName:mTe}=cn(),t6=A(),r6=ke(),$M=Q();$M.initSync();var s6=jf.invalid($M.get(t6.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(r6.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(),VM={operation:jf.valid("add_node","update_node"),node_name:s6,subscriptions:Tg.array().items({table:jf.optional(),schema:jf.required(),subscribe:kM.required(),publish:kM.required().custom(i6),start_time:Z8.iso()}).min(1).required()};function n6(e){return e6.validateBySchema(e,Tg.object(VM))}a(n6,"addUpdateNodeValidator");function i6(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(i6,"checkForFalsy");YM.exports={addUpdateNodeValidator:n6,validation_schema:VM}});var WM=p((TTe,KM)=>{var o6=Ye(),a6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};KM.exports=function(e){return o6.validateObject(e,a6)}});var Zf=p((gTe,QM)=>{"use strict";var c6=A().OPERATIONS_ENUM,gg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=c6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};QM.exports=gg});var JM=p((ATe,zM)=>{"use strict";var u6={OPERATION:"operation",REFRESH:"refresh"},Rg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Ag=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};zM.exports={JWTTokens:Rg,TOKEN_TYPE_ENUM:u6,JWTRSAKeys:Ag}});var Tl=p((NTe,eU)=>{"use strict";var Sl=require("jsonwebtoken"),Og=require("fs-extra"),Ng=G(),cs=A(),{handleHDBError:pr,hdb_errors:l6}=Z(),{HTTP_STATUS_CODES:Sr,AUTHENTICATION_ERROR_MSGS:Tr}=l6,pl=M(),jM=_f(),Ig=dr(),_6=_r().update,d6=Zf(),f6=Kn(),{UserEventMsg:E6}=Cs(),Ki=Q();Ki.initSync();var bg=require("path"),{JWTTokens:h6,JWTRSAKeys:m6,TOKEN_TYPE_ENUM:eE}=JM(),p6=Ki.get(cs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ki.get(cs.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",S6=Ki.get(cs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ki.get(cs.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",tE="RS256",yg;eU.exports={createTokens:T6,validateOperationToken:R6,refreshOperationToken:g6,validateRefreshToken:ZM};async function T6(e){if(Ng.isEmpty(e)||typeof e!="object")throw pr(new Error,Tr.INVALID_AUTH_OBJECT,Sr.BAD_REQUEST,void 0,void 0,!0);if(Ng.isEmpty(e.username))throw pr(new Error,Tr.USERNAME_REQUIRED,Sr.BAD_REQUEST,void 0,void 0,!0);if(Ng.isEmpty(e.password))throw pr(new Error,Tr.PASSWORD_REQUIRED,Sr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Ig.findAndValidateUser(e.username,e.password),!t)throw pr(new Error,Tr.INVALID_CREDENTIALS,Sr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw pl.error(f),pr(new Error,Tr.INVALID_CREDENTIALS,Sr.UNAUTHORIZED,void 0,void 0,!0)}let r=await rE(),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 XM(i,r.private_key,r.passphrase),c=await Sl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:S6,algorithm:tE,subject:eE.REFRESH}),u=jM.hash(c),l=new d6(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await _6(l)}catch(f){pl.error(f),d=f}if(d!==void 0||_.skipped_hashes.length>0)throw pr(new Error,Tr.REFRESH_TOKEN_SAVE_FAILED,Sr.INTERNAL_SERVER_ERROR);return f6.signalUserChange(new E6(process.pid)),new h6(o,c)}a(T6,"createTokens");async function XM(e,t,r){return await Sl.sign(e,{key:t,passphrase:r},{expiresIn:p6,algorithm:tE,subject:eE.OPERATION})}a(XM,"signOperationToken");async function rE(){if(yg===void 0)try{let e=bg.join(Ki.getHdbBasePath(),cs.LICENSE_KEY_DIR_NAME,cs.JWT_ENUM.JWT_PASSPHRASE_NAME),t=bg.join(Ki.getHdbBasePath(),cs.LICENSE_KEY_DIR_NAME,cs.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=bg.join(Ki.getHdbBasePath(),cs.LICENSE_KEY_DIR_NAME,cs.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Og.readFile(e)).toString(),n=(await Og.readFile(t)).toString(),i=(await Og.readFile(r)).toString();yg=new m6(i,n,s)}catch(e){throw pl.error(e),pr(new Error,Tr.NO_ENCRYPTION_KEYS,Sr.INTERNAL_SERVER_ERROR)}return yg}a(rE,"getJWTRSAKeys");async function g6(e){if(!e)throw pr(new Error,Tr.INVALID_BODY,Sr.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw pr(new Error,Tr.REFRESH_TOKEN_REQUIRED,Sr.BAD_REQUEST,void 0,void 0,!0);await ZM(e.refresh_token);let t=await rE(),r=await Sl.decode(e.refresh_token);return{operation_token:await XM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(g6,"refreshOperationToken");async function R6(e){try{let t=await rE(),r=await Sl.verify(e,t.public_key,{algorithms:tE,subject:eE.OPERATION});return await Ig.findAndValidateUser(r.username,void 0,!1)}catch(t){throw pl.warn(t),t.name&&t.name==="TokenExpiredError"?pr(new Error,Tr.TOKEN_EXPIRED,Sr.FORBIDDEN):pr(new Error,Tr.INVALID_TOKEN,Sr.UNAUTHORIZED)}}a(R6,"validateOperationToken");async function ZM(e){let t;try{let r=await rE(),s=await Sl.verify(e,r.public_key,{algorithms:tE,subject:eE.REFRESH});t=await Ig.findAndValidateUser(s.username,void 0,!1)}catch(r){throw pl.warn(r),r.name&&r.name==="TokenExpiredError"?pr(new Error,Tr.TOKEN_EXPIRED,Sr.FORBIDDEN):pr(new Error,Tr.INVALID_TOKEN,Sr.UNAUTHORIZED)}if(!jM.validate(t.refresh_token,e))throw pr(new Error,Tr.INVALID_TOKEN,Sr.UNAUTHORIZED);return t}a(ZM,"validateRefreshToken")});var wg=p((ITe,sU)=>{"use strict";var A6=WM(),sc=require("passport"),O6=require("passport-local").Strategy,N6=require("passport-http").BasicStrategy,b6=require("util"),y6=dr(),rU=b6.callbackify(y6.findAndValidateUser),yTe=Pr(),I6=A(),tU=Tl();sc.use(new O6(function(e,t,r){rU(e,t,r)}));sc.use(new N6(function(e,t,r){rU(e,t,r)}));sc.serializeUser(function(e,t){t(null,e)});sc.deserializeUser(function(e,t){t(null,e)});function w6(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":sc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===I6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?tU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):tU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:sc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(w6,"authorize");function C6(e,t){let r=A6(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(C6,"checkPermissions");sU.exports={authorize:w6,checkPermissions:C6}});var nc=p((CTe,nU)=>{"use strict";var Cg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Lg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};nU.exports={Node:Cg,NodeSubscription:Lg}});var oU=p((DTe,iU)=>{"use strict";var L6=A().OPERATIONS_ENUM,Dg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=L6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};iU.exports=Dg});var gl=p((MTe,aU)=>{"use strict";var Pg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Mg=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)}};aU.exports={RemotePayloadObject:Pg,RemotePayloadSubscription:Mg}});var uU=p((vTe,cU)=>{"use strict";var Ug=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}};cU.exports=Ug});var dU=p((FTe,_U)=>{"use strict";var D6=uU(),HTe=We(),lU=Ue(),P6=M(),{getSchemaPath:qTe,getTransactionAuditStorePath:GTe}=qe(),{getDatabases:M6}=(fe(),te(Pe));_U.exports=U6;async function U6(e){let t=new D6;try{let r=M6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await lU.environmentDataSize(schema_path,e.name),o=await lU.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){P6.warn(`unable to stat table dbi due to ${r}`)}return t}a(U6,"lmdbGetTableSize")});var EU=p((kTe,fU)=>{"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}};fU.exports=vg});var jn=p((KTe,SU)=>{"use strict";var v6=require("fs-extra"),B6=require("path"),zt=require("systeminformation"),Wi=M(),H6=nt(),Bg=ke(),nE=A(),q6=dU(),pU=Bi(),{getThreadInfo:hU}=Je(),Kg=Q();Kg.initSync();var G6=EU(),{openEnvironment:VTe}=Ue(),{getSchemaPath:YTe}=qe(),{database:F6}=(fe(),te(Pe)),sE;SU.exports={getHDBProcessInfo:Fg,getNetworkInfo:kg,getDiskInfo:xg,getMemoryInfo:Gg,getCPUInfo:qg,getTimeInfo:Hg,getSystemInformation:$g,systemInformation:x6,getTableSize:Vg,getMetrics:Yg};function Hg(){return zt.time()}a(Hg,"getTimeInfo");async function qg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await zt.cpu();_.cpu_speed=await zt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:S,raw_currentload_user:m,cpus:R,...g}=await zt.currentLoad();return g.cpus=[],R.forEach(O=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:C,raw_load_system:Y,raw_load_user:B,...k}=O;g.cpus.push(k)}),_.current_load=g,_}catch(e){return Wi.error(`error in getCPUInfo: ${e}`),{}}}a(qg,"getCPUInfo");async function Gg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await zt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Wi.error(`error in getMemoryInfo: ${e}`),{}}}a(Gg,"getMemoryInfo");async function Fg(){let e={core:[],clustering:[]};try{let t=await zt.processes(),r;try{r=Number.parseInt(await v6.readFile(B6.join(Kg.get(nE.CONFIG_PARAMS.ROOTPATH),nE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===nE.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(Fg,"getHDBProcessInfo");async function xg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await zt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await zt.fsStats();return e.read_write=l,e.size=await zt.fsSize(),e}catch(t){return Wi.error(`error in getDiskInfo: ${t}`),e}}a(xg,"getDiskInfo");async function kg(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await zt.networkInterfaceDefault(),e.latency=await zt.inetChecksite("google.com"),(await zt.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...f}=s;e.interfaces.push(f)}),(await zt.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(kg,"getNetworkInfo");async function $g(){if(sE!==void 0)return sE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await zt.osInfo();e=c;let u=await zt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,sE=e,sE}catch(t){return Wi.error(`error in getSystemInformation: ${t}`),e}}a($g,"getSystemInformation");async function Vg(){let e=[],t=await pU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await q6(s));return e}a(Vg,"getTableSize");async function Yg(){let e=await pU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=F6({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:l,txnid:_}}),s[n]=o}catch(i){Wi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Yg,"getMetrics");async function mU(){if(Kg.get(nE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await H6.getNATSReferences(),r=await t.streams.info(Bg.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Bg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bg.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(mU,"getNatsStreamInfo");async function x6(e){let t=new G6;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await $g(),t.time=Hg(),t.cpu=await qg(),t.memory=await Gg(),t.disk=await xg(),t.network=await kg(),t.harperdb_processes=await Fg(),t.table_size=await Vg(),t.metrics=await Yg(),t.threads=await hU(),t.replication=await mU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await $g();break;case"time":t.time=Hg();break;case"cpu":t.cpu=await qg();break;case"memory":t.memory=await Gg();break;case"disk":t.disk=await xg();break;case"network":t.network=await kg();break;case"harperdb_processes":t.harperdb_processes=await Fg();break;case"table_size":t.table_size=await Vg();break;case"database_metrics":case"metrics":t.metrics=await Yg();break;case"threads":t.threads=await hU();break;case"replication":t.replication=await mU();break;default:break}return t}a(x6,"systemInformation")});var Xn=p((JTe,AU)=>{"use strict";var k6=_r(),Wg=G(),$6=require("util"),$o=A(),TU=Q();TU.initSync();var V6=wg(),gU=lr(),{Node:QTe,NodeSubscription:zTe}=nc(),Y6=va(),K6=oU(),{RemotePayloadObject:W6,RemotePayloadSubscription:Q6}=gl(),{handleHDBError:z6,hdb_errors:J6}=Z(),{HTTP_STATUS_CODES:j6,HDB_ERROR_MSGS:X6}=J6,Z6=Ls(),e9=jn(),t9=mo(),{getDatabases:r9}=(fe(),te(Pe)),s9=$6.promisify(V6.authorize),n9=gU.searchByHash,i9=gU.searchByValue;AU.exports={authHeaderToUser:o9,isEmpty:a9,getNodeRecord:c9,upsertNodeRecord:u9,buildNodePayloads:l9,checkClusteringEnabled:_9,getAllNodeRecords:d9,getSystemInfo:f9,reverseSubscription:RU};async function o9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await s9(t,null),e}a(o9,"authHeaderToUser");function a9(e){return e==null}a(a9,"isEmpty");async function c9(e){let t=new Y6($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n9(t)}a(c9,"getNodeRecord");async function u9(e){let t=new K6($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return k6.upsert(t)}a(u9,"upsertNodeRecord");function RU(e){if(Wg.isEmpty(e.subscribe)||Wg.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(RU,"reverseSubscription");function l9(e,t,r,s){let n=[];for(let i=0,o=e.length;i<o;i++){let c=e[i],{schema:u,table:l}=c,_=Wg.getTableHashAttribute(u,l),{subscribe:d,publish:f}=RU(c),E=r9()[u]?.[l],h=new Q6(u,l,_,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new W6(r,t,n,s)}a(l9,"buildNodePayloads");function _9(){if(!TU.get($o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw z6(new Error,X6.CLUSTERING_NOT_ENABLED,j6.BAD_REQUEST,void 0,void 0,!0)}a(_9,"checkClusteringEnabled");async function d9(){let e=new Z6($o.SYSTEM_SCHEMA_NAME,$o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await i9(e))}a(d9,"getAllNodeRecords");async function f9(){let e=await e9.getSystemInformation();return{hdb_version:t9.version(),node_version:e.node_version,platform:e.platform}}a(f9,"getSystemInfo")});var Qg=p((XTe,LU)=>{"use strict";var iE=nt(),OU=G(),NU=ke(),bU=A(),oE=M(),yU=Vf(),E9=Bu(),{RemotePayloadObject:h9}=gl(),{handleHDBError:IU,hdb_errors:m9}=Z(),{HTTP_STATUS_CODES:wU}=m9,{NodeSubscription:CU}=nc();LU.exports=p9;async function p9(e,t){let r;try{r=await iE.request(`${t}.${NU.REQUEST_SUFFIX}`,new h9(bU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),oE.trace("Response from remote describe all request:",r)}catch(o){oE.error(`addNode received error from describe all request to remote node: ${o}`);let c=iE.requestErrorHandler(o,"add_node",t);throw IU(new Error,c,wU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===NU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw IU(new Error,o,wU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===bU.SYSTEM_SCHEMA_NAME){await iE.createLocalTableStream(c,u);let h=new CU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=OU.doesSchemaExist(c),_=s[c]!==void 0,d=u?OU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!f){n.push(o);continue}if(!l&&_&&(oE.trace(`addNode creating schema: ${c}`),await yU.createSchema({operation:"create_schema",schema:c})),!d&&f){oE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new E9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await yU.createTable(h)}await iE.createLocalTableStream(c,u);let E=new CU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(p9,"reviewSubscriptions")});var Ol=p((ege,MU)=>{"use strict";var{handleHDBError:aE,hdb_errors:S9}=Z(),{HTTP_STATUS_CODES:cE}=S9,{addUpdateNodeValidator:T9}=Xf(),Rl=M(),PU=A(),DU=ke(),g9=G(),zg=nt(),Al=Xn(),R9=Q(),A9=Qg(),{Node:O9,NodeSubscription:N9}=nc(),{broadcast:b9}=Je(),y9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",I9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w9=R9.get(PU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=C9;async function C9(e,t=!1){Rl.trace("addNode called with:",e),Al.checkClusteringEnabled();let r=T9(e);if(r)throw aE(r,r.message,cE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Al.getNodeRecord(s);if(!g9.isEmptyOrZeroLength(d))throw aE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,cE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await A9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=y9,o;let c=Al.buildNodePayloads(n,w9,PU.OPERATIONS_ENUM.ADD_NODE,await Al.getSystemInfo());Rl.trace("addNode sending remote payload:",c);let u;try{u=await zg.request(`${s}.${DU.REQUEST_SUFFIX}`,c)}catch(d){Rl.error(`addNode received error from request: ${d}`);let f=zg.requestErrorHandler(d,"add_node",s);throw aE(new Error,f,cE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw aE(new Error,d,cE.INTERNAL_SERVER_ERROR,"error",d)}Rl.trace(u);let l=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Rl.trace("Add node updating work stream for node:",s,"subscriptions:",E),await zg.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new N9(E.schema,E.table,E.publish,E.subscribe))}let _=new O9(s,l,u.system_info);return await Al.upsertNodeRecord(_),b9({type:"nats_update"}),i.length>0?o.message=I9:o.message=`Successfully added '${s}' to manifest`,o}a(C9,"addNode")});var jg=p((rge,BU)=>{"use strict";var{handleHDBError:uE,hdb_errors:L9}=Z(),{HTTP_STATUS_CODES:lE}=L9,{addUpdateNodeValidator:D9}=Xf(),Nl=M(),vU=A(),UU=ke(),P9=G(),Jg=nt(),bl=Xn(),M9=Q(),{cloneDeep:U9}=require("lodash"),v9=Qg(),{NodeSubscription:B9}=nc(),{broadcast:H9}=Je(),q9="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",G9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",F9=M9.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME);BU.exports=x9;async function x9(e){Nl.trace("updateNode called with:",e),bl.checkClusteringEnabled();let t=D9(e);if(t)throw uE(t,t.message,lE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=U9(await bl.getNodeRecord(r));if(P9.isEmptyOrZeroLength(s))throw uE(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,lE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await v9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=q9,o;let c=bl.buildNodePayloads(n,F9,vU.OPERATIONS_ENUM.UPDATE_NODE,await bl.getSystemInfo());Nl.trace("updateNode sending remote payload:",c);let u;try{u=await Jg.request(`${r}.${UU.REQUEST_SUFFIX}`,c)}catch(l){Nl.error(`updateNode received error from request: ${l}`);let _=Jg.requestErrorHandler(l,"update_node",r);throw uE(new Error,_,lE.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===UU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw uE(new Error,l,lE.INTERNAL_SERVER_ERROR,"error",l)}Nl.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Nl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await Jg.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await k9(s[0],n,u.system_info),i.length>0?o.message=G9:o.message=`Successfully updated '${r}'`,o}a(x9,"updateNode");async function k9(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,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===o.schema&&_.table===o.table){_.publish=o.publish,_.subscribe=o.subscribe,c=!0;break}}c||s.subscriptions.push(new B9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await bl.upsertNodeRecord(s),H9({type:"nats_update"})}a(k9,"updateNodeTable")});var xU=p((nge,FU)=>{"use strict";var GU=require("joi"),{string:HU}=GU.types(),$9=Ye(),qU=A(),V9=Q(),Y9=ke();FU.exports=K9;function K9(e){let t=HU.invalid(V9.get(qU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y9.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=GU.object({operation:HU.valid(qU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return $9.validateBySchema(e,r)}a(K9,"removeNodeValidator")});var dE=p((oge,WU)=>{"use strict";var{handleHDBError:kU,hdb_errors:W9}=Z(),{HTTP_STATUS_CODES:$U}=W9,Q9=xU(),yl=M(),VU=Xn(),z9=G(),_E=A(),YU=ke(),KU=nt(),J9=Q(),{RemotePayloadObject:j9}=gl(),{NodeSubscription:X9}=nc(),Z9=vu(),e7=Bo(),{broadcast:t7}=Je(),r7=J9.get(_E.CONFIG_PARAMS.CLUSTERING_NODENAME);WU.exports=s7;async function s7(e){yl.trace("removeNode called with:",e),VU.checkClusteringEnabled();let t=Q9(e);if(t)throw kU(t,t.message,$U.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await VU.getNodeRecord(r);if(z9.isEmptyOrZeroLength(s))throw kU(new Error,`Node '${r}' was not found.`,$U.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new j9(_E.OPERATIONS_ENUM.REMOVE_NODE,r7,[]),i,o=!1;try{i=await KU.request(`${r}.${YU.REQUEST_SUFFIX}`,n),yl.trace("Remove node reply from remote node:",r,i)}catch(u){yl.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];yl.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new X9(_.schema,_.table,!1,!1);await KU.updateWorkStream(d,r)}let c=new Z9(_E.SYSTEM_SCHEMA_NAME,_E.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await e7.deleteRecord(c),t7({type:"nats_update"}),i?.status===YU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(yl.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(s7,"removeNode")});var JU=p((cge,zU)=>{"use strict";var QU=require("joi"),{string:n7,array:i7}=QU.types(),o7=Ye(),a7=Xf();zU.exports=c7;function c7(e){let t=QU.object({operation:n7.valid("configure_cluster").required(),connections:i7.items(a7.validation_schema).required()});return o7.validateBySchema(e,t)}a(c7,"configureClusterValidator")});var EE=p((lge,tv)=>{"use strict";var u7=A(),fE=M(),l7=G(),_7=dE(),d7=Ol(),jU=Xn(),f7=JU(),{handleHDBError:XU,hdb_errors:E7}=Z(),{HTTP_STATUS_CODES:ZU}=E7,h7="Configure cluster complete.",m7="Failed to configure the cluster. Check the logs for more details.",p7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";tv.exports=S7;async function S7(e){fE.trace("configure cluster called with:",e),jU.checkClusteringEnabled();let t=f7(e);if(t)throw XU(t,t.message,ZU.BAD_REQUEST,void 0,void 0,!0);let r=await jU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(ev(_7,{operation:u7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);fE.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(ev(d7,E,E.node_name))}let c=await Promise.allSettled(i);fE.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"&&(fE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(l7.isEmptyOrZeroLength(u))return{message:h7,connections:l};if(_)return{message:p7,failed_nodes:u,connections:l};throw XU(new Error,m7,ZU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(S7,"configureCluster");async function ev(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ev,"functionWrapper")});var sv=p((dge,rv)=>{"use strict";var hE=require("joi"),T7=Ye(),{validateSchemaExists:g7,validateTableExists:R7,validateSchemaName:A7}=cn(),O7=hE.object({operation:hE.string().valid("purge_stream"),schema:hE.string().custom(g7).custom(A7).required(),table:hE.string().custom(R7).required()});function N7(e){return T7.validateBySchema(e,O7)}a(N7,"purgeStreamValidator");rv.exports=N7});var Xg=p((Ege,nv)=>{"use strict";var{handleHDBError:b7,hdb_errors:y7}=Z(),{HTTP_STATUS_CODES:I7}=y7,w7=sv(),C7=nt(),L7=Xn();nv.exports=D7;async function D7(e){let t=w7(e);if(t)throw b7(t,t.message,I7.BAD_REQUEST,void 0,void 0,!0);L7.checkClusteringEnabled();let{schema:r,table:s}=e;return await C7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(D7,"purgeStream")});var pE=p((mge,lv)=>{"use strict";var eR=Xn(),P7=nt(),av=Q(),mE=A(),Vo=ke(),M7=G(),Zg=M(),{RemotePayloadObject:U7}=gl(),{ErrorCode:iv}=require("nats"),ov=av.get(mE.CONFIG_PARAMS.CLUSTERING_ENABLED),cv=av.get(mE.CONFIG_PARAMS.CLUSTERING_NODENAME);lv.exports={clusterStatus:v7,buildNodeStatus:uv};async function v7(){let e={node_name:cv,is_enabled:ov,connections:[]};if(!ov)return e;let t=await eR.getAllNodeRecords();if(M7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(uv(t[s],e.connections));return await Promise.allSettled(r),e}a(v7,"clusterStatus");async function uv(e,t){let r=e.name,s=new U7(mE.OPERATIONS_ENUM.CLUSTER_STATUS,cv,void 0,await eR.getSystemInfo()),n,i,o=Vo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await P7.request(Vo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Vo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Vo.CLUSTER_STATUS_STATUSES.CLOSED,Zg.error(`Error getting node status from ${r} `,n))}catch(u){Zg.warn(`Error getting node status from ${r}`,u),u.code===iv.NoResponders?o=Vo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===iv.Timeout?o=Vo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Vo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new B7(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!==mE.PRE_4_0_0_VERSION&&await eR.upsertNodeRecord(u)}catch(u){Zg.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(uv,"buildNodeStatus");function B7(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(B7,"NodeStatusObject")});var TE=p((Sge,_v)=>{"use strict";var{handleHDBError:H7,hdb_errors:q7}=Z(),{HTTP_STATUS_CODES:G7}=q7,F7=nt(),x7=Xn(),tR=G(),SE=require("joi"),k7=Ye(),$7=2e3,V7=SE.object({timeout:SE.number().min(1),connected_nodes:SE.boolean(),routes:SE.boolean()});_v.exports=Y7;async function Y7(e){x7.checkClusteringEnabled();let t=k7.validateBySchema(e,V7);if(t)throw H7(t,t.message,G7.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||tR.autoCastBoolean(s),o=n===void 0||tR.autoCastBoolean(n),c={nodes:[]},u=await F7.getServerList(r??$7),l={};if(i)for(let _=0,d=u.length;_<d;_++){let f=u[_].statsz;f&&(l[u[_].server.name]=f.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let f=u[_].server,E=u[_].data;if(f.name.endsWith("-hub")){let h={name:f.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=[],l[f.name]&&l[f.name].forEach(S=>{h.connected_nodes.includes(S.name.slice(0,-4))||h.connected_nodes.push(S.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(S=>({host:S.split(":")[0],port:tR.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Y7,"clusterNetwork")});var hv=p((gge,Ev)=>{"use strict";var rR=require("joi"),dv=Ye(),{route_constraints:fv}=Wm();Ev.exports={setRoutesValidator:K7,deleteRoutesValidator:W7};function K7(e){let t=rR.object({server:rR.valid("hub","leaf").required(),routes:fv.required()});return dv.validateBySchema(e,t)}a(K7,"setRoutesValidator");function W7(e){let t=rR.object({routes:fv.required()});return dv.validateBySchema(e,t)}a(W7,"deleteRoutesValidator")});var RE=p((Age,Tv)=>{"use strict";var Yo=rt(),sR=G(),gE=A(),mv=hv(),{handleHDBError:pv,hdb_errors:Q7}=Z(),{HTTP_STATUS_CODES:Sv}=Q7,z7="cluster routes successfully set",J7="cluster routes successfully deleted";Tv.exports={setRoutes:j7,getRoutes:X7,deleteRoutes:Z7};function j7(e){let t=mv.setRoutesValidator(e);if(t)throw pv(t,t.message,Sv.BAD_REQUEST,void 0,void 0,!0);let r=Yo.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 l=e.routes[c];l.port=sR.autoCast(l.port);let _=s.some(f=>f.host===l.host&&f.port===l.port),d=n.some(f=>f.host===l.host&&f.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?Yo.updateConfigValue(gE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Yo.updateConfigValue(gE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:z7,set:o,skipped:i}}a(j7,"setRoutes");function X7(){let e=Yo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(X7,"getRoutes");function Z7(e){let t=mv.deleteRoutesValidator(e);if(t)throw pv(t,t.message,Sv.BAD_REQUEST,void 0,void 0,!0);let r=Yo.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],f=!1;for(let E=0,h=s.length;E<h;E++){let S=s[E];if(d.host===S.host&&d.port===S.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,S=n.length;h<S;h++){let m=n[h];if(d.host===m.host&&d.port===m.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=sR.isEmptyOrZeroLength(s)?null:s,Yo.updateConfigValue(gE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=sR.isEmptyOrZeroLength(n)?null:n,Yo.updateConfigValue(gE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:J7,deleted:i,skipped:o}}a(Z7,"deleteRoutes")});var Rv=p((Nge,gv)=>{"use strict";var Il=require("alasql"),Ko=require("recursive-iterator"),Hs=M(),eee=G(),wl=A(),nR=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,ree(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=>wl.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=>!wl.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][wl.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=tee(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!wl.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Il.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function tee(e){return e.filter(t=>t[wl.PERMS_CRUD_ENUM.READ])}a(tee,"filterReadRestrictedAttrs");function ree(e,t,r,s,n){see(e,t,r,s,n)}a(ree,"interpretAST");function Cl(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(Cl,"addSchemaTableToMap");function see(e,t,r,s,n){if(!e){Hs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Il.yy.Insert?aee(e,t,r):e instanceof Il.yy.Select?nee(e,t,r,s,n):e instanceof Il.yy.Update?iee(e,t,r):e instanceof Il.yy.Delete?oee(e,t,r):Hs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(see,"getRecordAttributesAST");function nee(e,t,r,s,n){if(!e){Hs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(eee.isEmptyOrZeroLength(i)){Hs.error("No schema specified");return}e.from.forEach(c=>{Cl(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Cl(c.table,t,r,s,n)});let o=new Ko(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Hs.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new Ko(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Hs.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new Ko(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Hs.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new Ko(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Hs.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(nee,"getSelectAttributes");function iee(e,t,r){if(!e){Hs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ko(e.columns),n=e.table.databaseid;Cl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&iR(e.table.tableid,n,i.columnid,t,r)}a(iee,"getUpdateAttributes");function oee(e,t,r){if(!e){Hs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ko(e.where),n=e.table.databaseid;Cl(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&iR(e.table.tableid,n,i.columnid,t,r)}a(oee,"getDeleteAttributes");function aee(e,t,r){if(!e){Hs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ko(e.columns),n=e.into.databaseid;Cl(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&iR(e.into.tableid,n,i.columnid,t,r)}a(aee,"getInsertAttributes");function iR(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(iR,"pushAttribute");gv.exports=nR});var OE=p((yge,bv)=>{var AE=Yu(),Av=require("chalk"),Vr=M(),Ov=require("prompt"),{promisify:cee}=require("util"),oR=A(),uee=require("fs-extra"),lee=require("path"),_ee=G(),dee=mo(),Nv=Q();Nv.initSync();var fee=require("moment"),Eee=cee(Ov.get),hee=lee.join(Nv.getHdbBasePath(),oR.LICENSE_KEY_DIR_NAME,oR.LICENSE_FILE_NAME,oR.LICENSE_FILE_NAME);bv.exports={getFingerprint:pee,setLicense:mee,parseLicense:aR,register:See,getRegistrationInfo:gee};async function mee(e){if(e&&e.key&&e.company){try{Vr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await aR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Vr.error(r),Vr.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 pee(){let e={};try{e=await AE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Vr.error(r),Vr.error(t),new Error(r)}return e}a(pee,"getFingerprint");async function aR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Vr.info("Validating license input...");let r=AE.validateLicense(e,t);if(Vr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Vr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Vr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Vr.info("writing license to disk"),await uee.writeFile(hee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Vr.error("Failed to write License"),s}return"Registration successful."}a(aR,"parseLicense");async function See(){let e=await Tee();return aR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(See,"register");async function Tee(){let e=await AE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Av.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Av.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Ov.start()}catch(s){Vr.error(s)}let r;try{r=await Eee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(Tee,"promptForRegistration");async function gee(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await AE.getLicense()}catch(r){throw Vr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(_ee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=dee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=fee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(gee,"getRegistrationInfo")});var Iv=p((wge,yv)=>{"use strict";var Ree=ke(),cR=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+Ree.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:l,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c}},this.cluster={name:_,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"}};yv.exports=cR});var Lv=p((Lge,Cv)=>{"use strict";var wv=ke(),uR=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+wv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+wv.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,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"}};Cv.exports=uR});var Pv=p((Pge,Dv)=>{"use strict";var lR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Dv.exports=lR});var Uv=p((Uge,Mv)=>{"use strict";var Aee=ke(),_R=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Aee.SERVER_SUFFIX.ADMIN,this.password=r}};Mv.exports=_R});var LE=p((Bge,Hv)=>{"use strict";var Ll=require("path"),IE=require("fs-extra"),Oee=Iv(),Nee=Lv(),bee=Pv(),yee=Uv(),dR=dr(),ic=G(),gr=rt(),yE=A(),NE=ke(),{CONFIG_PARAMS:ft}=yE,Pl=M(),wE=Q(),vv=zn(),fR=nt(),Dl="clustering",Iee=1e4,Bv=5;Hv.exports={generateNatsConfig:wee,removeNatsConfig:Cee};async function wee(e=!1,t=void 0){wE.initSync();let r=wE.get(ft.ROOTPATH),s=Ll.join(r,Dl,NE.PID_FILES.HUB),n=Ll.join(r,Dl,NE.PID_FILES.LEAF),i=gr.getConfigFromFile(ft.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ll.join(r,Dl,NE.NATS_CONFIG_FILES.HUB_SERVER),c=Ll.join(r,Dl,NE.NATS_CONFIG_FILES.LEAF_SERVER),u=gr.getConfigFromFile(ft.CLUSTERING_TLS_CERTIFICATE),l=gr.getConfigFromFile(ft.CLUSTERING_TLS_PRIVATEKEY),_=gr.getConfigFromFile(ft.CLUSTERING_TLS_CERT_AUTH),d=gr.getConfigFromFile(ft.CLUSTERING_TLS_INSECURE),f=gr.getConfigFromFile(ft.CLUSTERING_TLS_VERIFY),E=gr.getConfigFromFile(ft.CLUSTERING_NODENAME),h=gr.getConfigFromFile(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await fR.checkNATSServerInstalled()||CE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await dR.listUsers(),m=gr.getConfigFromFile(ft.CLUSTERING_USER),R=await dR.getClusterUser();(ic.isEmpty(R)||R.active!==!0)&&CE(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await bE(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await bE(ft.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await bE(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),await bE(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],O=[];for(let[k,ie]of S.entries())ie.role.role===yE.ROLE_TYPES_ENUM.CLUSTER_USER&&ie.active&&(g.push(new yee(ie.username,vv.decrypt(ie.hash))),O.push(new bee(ie.username,vv.decrypt(ie.hash))));let V=[],{hub_routes:$}=gr.getClusteringRoutes();if(!ic.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Oee(gr.getConfigFromFile(ft.CLUSTERING_HUBSERVER_NETWORK_PORT),E,s,u,l,_,d,f,h,gr.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NAME),gr.getConfigFromFile(ft.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,O);_==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=ic.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===yE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await IE.writeJson(o,F),Pl.trace(`Hub server config written to ${o}`));let C=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,Y=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new Nee(gr.getConfigFromFile(ft.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[C],[Y],g,O,u,l,_,d);_==null&&delete B.tls.ca_file,(t===void 0||t===yE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await IE.writeJson(c,B),Pl.trace(`Leaf server config written to ${c}`))}a(wee,"generateNatsConfig");async function bE(e){let t=wE.get(e);return ic.isEmpty(t)&&CE(`port undefined for '${e}'`),await ic.isPortTaken(t)&&CE(`'${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(bE,"isPortAvailable");function CE(e){let t=`Error generating clustering config: ${e}`;Pl.error(t),console.error(t),process.exit(1)}a(CE,"generateNatsConfigError");async function Cee(e){let{port:t,config_file:r}=fR.getServerConfig(e),{username:s,decrypt_hash:n}=await dR.getClusterUser(),i=0,o=2e3;for(;i<Bv;){try{let l=await fR.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Pl.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=Bv)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 ic.async_set_timeout(o*(i*2))}let c="0".repeat(Iee),u=Ll.join(wE.get(ft.ROOTPATH),Dl,r);await IE.writeFile(u,c),await IE.remove(u),Pl.notify(e,"started.")}a(Cee,"removeNatsConfig")});var $v=p((qge,kv)=>{"use strict";var Yr=Q(),Lee=Yu(),_e=A(),Ml=ke(),Zn=require("path"),{PACKAGE_ROOT:PE}=A(),qv=Q(),DE=G(),oc="/dev/null",Dee=Zn.join(PE,"launchServiceScripts"),Gv=Zn.join(PE,"utility/scripts"),Pee=Zn.join(Gv,_e.HDB_RESTART_SCRIPT),Fv=Zn.resolve(PE,"dependencies",`${process.platform}-${process.arch}`,Ml.NATS_BINARY_NAME);function xv(){let t=Lee.licenseSearch().ram_allocation||_e.RAM_ALLOCATION_ENUM.DEFAULT,r=_e.MEM_SETTING_KEY+t,s={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return DE.noBootFile()&&(s[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DE.getEnvCliRootPath()),{name:_e.PROCESS_DESCRIPTORS.HDB,script:_e.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:PE}}a(xv,"generateMainServerConfig");var Mee=9930;function Uee(){Yr.initSync(!0);let e=Yr.get(_e.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Ml.NATS_CONFIG_FILES.HUB_SERVER),r=Zn.join(Yr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=qv.get(_e.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ml.LOG_LEVEL_FLAGS[Yr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Mee?"-"+s:""),script:Fv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Yr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=oc,i.error_file=oc),i}a(Uee,"generateNatsHubServerConfig");var vee=9940;function Bee(){Yr.initSync(!0);let e=Yr.get(_e.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Ml.NATS_CONFIG_FILES.LEAF_SERVER),r=Zn.join(Yr.get(_e.HDB_SETTINGS_NAMES.LOG_PATH_KEY),_e.LOG_NAMES.HDB),s=qv.get(_e.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ml.LOG_LEVEL_FLAGS[Yr.get(_e.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==vee?"-"+s:""),script:Fv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Yr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=oc,i.error_file=oc),i}a(Bee,"generateNatsLeafServerConfig");function Hee(){Yr.initSync();let e=Zn.join(Yr.get(_e.CONFIG_PARAMS.LOGGING_ROOT),_e.LOG_NAMES.HDB),t={name:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:_e.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Dee,autorestart:!1};return Yr.get(_e.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=oc,t.error_file=oc),t}a(Hee,"generateClusteringUpgradeV4ServiceConfig");function qee(){let e={[_e.PROCESS_NAME_ENV_PROP]:_e.PROCESS_DESCRIPTORS.RESTART_HDB};return DE.noBootFile()&&(e[_e.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DE.getEnvCliRootPath()),{...{name:_e.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Gv},script:Pee}}a(qee,"generateRestart");function Gee(){return{apps:[xv()]}}a(Gee,"generateAllServiceConfigs");kv.exports={generateAllServiceConfigs:Gee,generateMainServerConfig:xv,generateRestart:qee,generateNatsHubServerConfig:Uee,generateNatsLeafServerConfig:Bee,generateClusteringUpgradeV4ServiceConfig:Hee}});var ac=p((Yge,sB)=>{"use strict";var Ie=A(),Fee=G(),Ul=LE(),vl=nt(),pn=ke(),Qi=$v(),ME=Q(),ei=M(),xee=Xn(),{startWorker:Vv,onMessageFromWorkers:kee}=Je(),$ee=jn(),Vee=require("util"),Kv=require("child_process"),{execFile:Yee}=Kv,Fge=Vee.promisify(Kv.exec),xge=require("systeminformation"),Se;sB.exports={enterPM2Mode:Kee,start:Wo,stop:ER,reload:Wv,restart:Qv,list:hR,describe:Jv,connect:ti,kill:jee,startAllServices:Xee,startService:mR,getUniqueServicesList:jv,restartAllServices:Zee,isServiceRegistered:Xv,reloadStopStart:Zv,restartHdb:zv,deleteProcess:zee,startClusteringProcesses:tB,startClusteringThreads:rB,isHdbRestartRunning:Jee,isClusteringRunning:tte,stopClustering:ete,reloadClustering:rte};var{PACKAGE_ROOT:kge}=A(),$ge=A(),{loggerWithTag:Vge}=ei,Bl=!1;kee(e=>{e.type==="restart"&&ME.initSync(!0)});function Kee(){Bl=!0}a(Kee,"enterPM2Mode");function ti(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{ei.setupConsoleLogging(),r&&t(r),e(s)})})}a(ti,"connect");var Rr,Wee=10,Yv;function Wo(e){if(Bl)return Qee(e);let t=Yee(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Rr.indexOf(t);i>-1&&Rr.splice(i,1),!Yv&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Wee&&Wo(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=ME.get(Ie.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&pn.LOG_LEVEL_HIERARCHY[i]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let f=l===pn.LOG_LEVELS.ERR||l===pn.LOG_LEVELS.WRN?ei.OUTPUTS.STDERR:ei.OUTPUTS.STDOUT;ei.logCustomLevel(l||"info",f,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=pn.LOG_LEVELS[d]}if(pn.LOG_LEVEL_HIERARCHY[i]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===pn.LOG_LEVELS.ERR||l===pn.LOG_LEVELS.WRN?ei.OUTPUTS.STDERR:ei.OUTPUTS.STDOUT;ei.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Rr){Rr=[];let n=a(()=>{Yv=!0,Rr&&(Rr.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Rr.push(t)}a(Wo,"start");function Qee(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Qee,"startWithPM2");function ER(e){if(!Bl){for(let t of Rr||[])t.name===e&&(Rr.splice(Rr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(ER,"stop");function Wv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Wv,"reload");function Qv(e){if(!Bl)for(let t of Rr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(Qv,"restart");function zee(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(zee,"deleteProcess");async function zv(){await Wo(Qi.generateRestart())}a(zv,"restartHdb");async function Jee(){let e=await hR();for(let t in e)if(e[t].name===Ie.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Jee,"isHdbRestartRunning");function hR(){return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(hR,"list");function Jv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Jv,"describe");function jee(){if(!Bl){for(let e of Rr||[])e.kill();Rr=[];return}return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(jee,"kill");async function Xee(){try{await tB(),await rB(),await Wo(Qi.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(Xee,"startAllServices");async function mR(e){try{let t;switch(e=e.toLowerCase(),e){case Ie.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Qi.generateMainServerConfig();break;case Ie.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Qi.generateNatsIngestServiceConfig();break;case Ie.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Qi.generateNatsReplyServiceConfig();break;case Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Qi.generateNatsHubServerConfig(),await Wo(t),await Ul.removeNatsConfig(e);return;case Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Qi.generateNatsLeafServerConfig(),await Wo(t),await Ul.removeNatsConfig(e);return;case Ie.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Qi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Wo(t)}catch(t){throw Se?.disconnect(),t}}a(mR,"startService");async function jv(){try{let e=await hR(),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 Se?.disconnect(),e}}a(jv,"getUniqueServicesList");async function Zee(e=[]){try{let t=!1,r=await jv();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ie.PROCESS_DESCRIPTORS.HDB?t=!0:await Qv(o))}t&&await Zv(Ie.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(Zee,"restartAllServices");async function Xv(e){if(Rr?.find(r=>r.name===e))return!0;let t=await $ee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Xv,"isServiceRegistered");async function Zv(e){let t=e===Ie.PROCESS_DESCRIPTORS.HDB?ME.get(Ie.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ME.get(Ie.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await Jv(e),s=Fee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await ER(e),await mR(e)):e===Ie.PROCESS_DESCRIPTORS.HDB?await zv():await Wv(e)}a(Zv,"reloadStopStart");var eB;async function tB(){for(let e in Ie.CLUSTERING_PROCESSES){let t=Ie.CLUSTERING_PROCESSES[e];await mR(t)}}a(tB,"startClusteringProcesses");async function rB(){eB=Vv(Ie.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ie.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await vl.createWorkQueueStream(pn.WORK_QUEUE_CONSUMER_NAMES),await vl.updateIngestStreamConsumer(),await vl.updateLocalStreams();let e=await xee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ie.PRE_4_0_0_VERSION){ei.info("Starting clustering upgrade 4.0.0 process"),Vv(Ie.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(rB,"startClusteringThreads");async function ete(){for(let e in Ie.CLUSTERING_PROCESSES)if(e!==Ie.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ie.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await eB.terminate();else{let t=Ie.CLUSTERING_PROCESSES[e];await ER(t)}}a(ete,"stopClustering");async function tte(){for(let e in Ie.CLUSTERING_PROCESSES){let t=Ie.CLUSTERING_PROCESSES[e];if(await Xv(t)===!1)return!1}return!0}a(tte,"isClusteringRunning");async function rte(){await Ul.generateNatsConfig(!0),await vl.reloadNATSHub(),await vl.reloadNATSLeaf(),await Ul.removeNatsConfig(Ie.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ul.removeNatsConfig(Ie.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(rte,"reloadClustering")});var Qo=p((Wge,lB)=>{"use strict";var ste=require("minimist"),{isMainThread:TR,parentPort:oB}=require("worker_threads"),Ze=A(),{PROCESS_DESCRIPTORS_VALIDATE:Hl}=Ze,Sn=M(),gR=G(),UE=LE(),cc=nt(),pR=ke(),aB=rt(),Tn=ac(),nB=jn(),nte=fo(),{restartWorkers:vE,onMessageByType:ite}=Je(),{handleHDBError:ote,hdb_errors:ate}=Z(),{HTTP_STATUS_CODES:cte}=ate,BE=Q();BE.initSync();var ql=`Restarting HarperDB. This may take up to ${Ze.RESTART_TIMEOUT_MS/1e3} seconds.`,ute="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",iB="Clustering is not enabled so cannot be restarted",lte="Invalid service",uc,us;lB.exports={restart:cB,restartService:RR};TR&&ite(Ze.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?RR({service:e.workerType}):cB({operation:"restart"})});async function cB(e){us=Object.keys(e).length===0,uc=await Tn.isServiceRegistered(Ze.HDB_PROC_DESCRIPTOR);let t=ste(process.argv);if(t.service){await RR(t);return}if(us&&!uc){console.error(ute);return}if(us&&console.log(ql),uc){Tn.enterPM2Mode(),Sn.notify(ql);let r=nte(Object.keys(Ze.CONFIG_PARAM_MAP),!0);return gR.isEmptyOrZeroLength(Object.keys(r))||aB.updateConfigValue(void 0,void 0,r,!0,!0),dte(),ql}return TR?(Sn.notify(ql),setTimeout(()=>{vE()},50)):oB.postMessage({type:Ze.ITC_EVENT_TYPES.RESTART}),ql}a(cB,"restart");async function RR(e){let{service:t}=e;if(Ze.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw ote(new Error,lte,cte.BAD_REQUEST,void 0,void 0,!0);if(uc=await Tn.isServiceRegistered(Ze.HDB_PROC_DESCRIPTOR),!TR)return oB.postMessage({type:Ze.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Hl.clustering:if(!BE.get(Ze.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=iB;break}us&&console.log("Restarting clustering"),Sn.notify("Restarting clustering"),await uB();break;case Hl.clustering_config:case Hl["clustering config"]:if(!BE.get(Ze.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=iB;break}us&&console.log("Restarting clustering_config"),Sn.notify("Restarting clustering_config"),await Tn.reloadClustering();break;case"custom_functions":case"custom functions":case Hl.harperdb:case Hl.http_workers:if(us&&!uc){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}us&&console.log("Restarting http_workers"),Sn.notify("Restarting http_workers"),us?await Tn.restart(Ze.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Sn.error(r),us&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(RR,"restartService");async function _te(){await cc.publishToStream(`${pR.SUBJECT_PREFIXES.TXN}.${pR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,pR.WORK_QUEUE_CONSUMER_NAMES.stream_name,cc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_te,"postDummyNatsMsg");async function dte(){await uB(),await Tn.restart(Ze.HDB_PROC_DESCRIPTOR),await gR.async_set_timeout(2e3),BE.get(Ze.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await SR(),us&&(await cc.closeConnection(),process.exit(0))}a(dte,"restartPM2Mode");async function uB(){if(!aB.getConfigFromFile(Ze.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await nB.getHDBProcessInfo()).clustering.length===0)Sn.trace("Clustering not running, restart will start clustering services"),await UE.generateNatsConfig(!0),await Tn.startClusteringProcesses(),await Tn.startClusteringThreads(),await SR(),us&&await cc.closeConnection();else{await _te(),await UE.generateNatsConfig(!0),uc?(Sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Tn.restart(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Tn.restart(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await nB.getHDBProcessInfo()).clustering.forEach(n=>{Sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await gR.async_set_timeout(3e3),await SR(),await cc.updateLocalStreams(),us&&await cc.closeConnection(),Sn.trace("Restart clustering restarting ingest and reply service threads");let t=vE(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vE(Ze.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(uB,"restartClustering");async function SR(){await UE.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await UE.removeNatsConfig(Ze.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(SR,"removeNatsConfig")});var RB=p((Jge,gB)=>{"use strict";var zge=require("lodash"),Ar=A(),{handleHDBError:_B,hdb_errors:fte}=Z(),{HDB_ERROR_MSGS:Ete,HTTP_STATUS_CODES:hte}=fte,AR=M();gB.exports={getRolePermissions:pte};var zo=Object.create(null),mte=a(e=>({key:e,perms:{}}),"perms_template_obj"),hB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),mB=a((e=!1,t=!1,r=!1,s=!1)=>({[Ar.PERMS_CRUD_ENUM.READ]:e,[Ar.PERMS_CRUD_ENUM.INSERT]:t,[Ar.PERMS_CRUD_ENUM.UPDATE]:r,[Ar.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),OR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...mB(t,r,s,n)}),"table_perms_template"),dB=a((e,t=mB())=>({attribute_name:e,describe:TB(t),[Gl]:t[Gl],[NR]:t[NR],[bR]:t[bR]}),"attr_perms_template"),fB=a((e,t=!1)=>({attribute_name:e,describe:t,[Gl]:t}),"timestamp_attr_perms_template"),{READ:Gl,INSERT:NR,UPDATE:bR}=Ar.PERMS_CRUD_ENUM,pB=Object.values(Ar.PERMS_CRUD_ENUM),SB=[Gl,NR,bR];function pte(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[Ar.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=Ste(e,r);return zo[t]?zo[t].key=s:zo[t]=mte(s),zo[t].perms=n,n}catch(r){if(!e[Ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Ar.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Ar.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 AR.error(s),AR.debug(r),_B(new Error,Ete.OUTDATED_PERMS_TRANSLATION_ERROR,hte.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
10
- ${r.stack}`;throw AR.error(s),_B(new Error)}}}a(pte,"getRolePermissions");function Ste(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Ar.SYSTEM_SCHEMA_NAME]=s[Ar.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]=Tte(t[i]);return}r[i]=hB(),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],l=gte(c,u);r[i].describe||pB.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=OR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=OR()})}),r}a(Ste,"translateRolePermissions");function Tte(e){let t=hB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=OR(!0,!0,!0,!0,!0)}),t}a(Tte,"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}=_,f=_;return Ar.TIME_STAMP_NAMES.includes(d)&&(f=fB(d,_[Gl])),l[d]=f,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=dB(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=TB(_),n.attribute_permissions.push(_),c||Rte(_,u)}else if(l!==o){let _;Ar.TIME_STAMP_NAMES.includes(l)?_=fB(l):_=dB(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=EB(n),n}else return e.describe=EB(e),e}a(gte,"getTableAttrPerms");function EB(e){return pB.filter(t=>e[t]).length>0}a(EB,"getSchemaTableDescribePerm");function TB(e){return SB.filter(t=>e[t]).length>0}a(TB,"getAttributeDescribePerm");function Rte(e,t){SB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Rte,"checkForHashPerms")});var AB={};Fe(AB,{Headers:()=>zi});var zi,HE=ge(()=>{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]}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 Fl={};Fe(Fl,{authentication:()=>LB,bypassAuth:()=>wte,login:()=>Lte,logout:()=>Dte,start:()=>Cte});function wte(){CB=!0}async function LB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let E=e.isOperationsServer?bte?Nte:[]:Ote?Ate:[];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 qE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(qE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let S=n.indexOf(";",h),m=n.indexOf("=",h);c=n.slice(m+1,S===-1?n.length:S),u=await NB.get(c)}e.session=u||(u={})}e.user=null;let l=a((E,h,S)=>{let m=new FE.AuthAuditLog(E,h,Gt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=S,c&&(m.session_id=c),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===Gt.AUTH_AUDIT_STATUS.SUCCESS?OB.notify(m):OB.error(m)},"authAuditLog"),_;if(s){if(_=Jo.get(s),!_){let[E,h]=s.split(" "),S,m;try{switch(E){case"Basic":[S,m]=atob(h).split(":"),_=S||m?await gt.getUser(S,m):null;break;case"Bearer":try{_=await(0,GE.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,GE.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return Ite&&(Jo.get(h)||(Jo.set(h,h),l(S,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),{status:401,body:Ji({error:R.message},e)}}Jo.set(s,_),yte&&l(_.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=_}else u?.user?e.user=await gt.getUser(u.user,null,!1):CB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,yB.getSuperUser)());qE&&(e.session.update=function(E){if(!c){c=(0,IB.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return E.id=c,NB.put(E)},e.login=async function(E,h){e.user=await gt.getUser(E,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Di.loginPath?(d.status=302,d.headers.set("Location",Di.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let f=o.length;if(f>0){let E=d.headers;E||(d.headers=E=new zi);for(let h=0;h<f;){let S=o[h++];E.set(S,o[h++])}}return o=null,d}function Cte({server:e,port:t}){e.request(LB,{port:t||"all"}),bB||(bB=!0,setInterval(()=>{Jo=new Map},ls.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),wB.user.addListener(()=>{Jo=new Map}))}async function Lte(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 Dte(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var yB,GE,IB,ls,Gt,FE,wB,OB,Ate,Ote,Nte,bte,NB,qE,CB,yte,Ite,Jo,bB,xE=ge(()=>{yB=P(dr());Dr();cu();GE=P(Tl());fe();IB=require("uuid"),ls=P(Q()),Gt=P(A()),FE=P(M()),wB=P(Wu());HE();lc();OB=(0,FE.loggerWithTag)("auth-event");ls.initSync();Ate=ls.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),Ote=ls.get(Gt.CONFIG_PARAMS.HTTP_CORS),Nte=ls.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),bte=ls.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),NB=lt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qE=ls.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,CB=ls.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,yte=ls.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Ite=ls.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Jo=new Map;gt.onInvalidatedUser(()=>{Jo=new Map});a(wte,"bypassAuth");a(LB,"authentication");a(Cte,"start");a(Lte,"login");a(Dte,"logout")});var HB=p((iRe,BB)=>{"use strict";var Te=require("joi"),DB=require("fs-extra"),PB=require("path"),si=Ye(),MB=Q(),UB=A(),vB=M(),{hdb_errors:Pte}=Z(),{HDB_ERROR_MSGS:Jt}=Pte,ri=/^[a-zA-Z0-9-_]+$/;BB.exports={getDropCustomFunctionValidator:Ute,setCustomFunctionValidator:vte,addComponentValidator:Gte,dropCustomFunctionProjectValidator:Fte,packageComponentValidator:xte,deployComponentValidator:kte,setComponentFileValidator:Bte,getComponentFileValidator:qte,dropComponentFileValidator:Hte};function kE(e,t,r){try{let s=MB.get(UB.CONFIG_PARAMS.COMPONENTSROOT),n=PB.join(s,t);return DB.existsSync(n)?e?t:r.message(Jt.PROJECT_EXISTS):e?r.message(Jt.NO_PROJECT):t}catch(s){return vB.error(s),r.message(Jt.VALIDATION_ERR)}}a(kE,"checkProjectExists");function xl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(xl,"checkFilePath");function Mte(e,t,r,s){try{let n=MB.get(UB.CONFIG_PARAMS.COMPONENTSROOT),i=PB.join(n,e,t,r+".js");return DB.existsSync(i)?r:s.message(Jt.NO_FILE)}catch(n){return vB.error(n),s.message(Jt.VALIDATION_ERR)}}a(Mte,"checkFileExists");function Ute(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ri).custom(Mte.bind(null,e.project,e.type)).custom(xl).required().messages({"string.pattern.base":Jt.BAD_FILE_NAME})});return si.validateBySchema(e,t)}a(Ute,"getDropCustomFunctionValidator");function vte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().custom(xl).required(),function_content:Te.string().required()});return si.validateBySchema(e,t)}a(vte,"setCustomFunctionValidator");function Bte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),file:Te.string().custom(xl).required(),payload:Te.string().allow("").optional(),encoding:Te.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(Bte,"setComponentFileValidator");function Hte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),file:Te.string().custom(xl).optional()});return si.validateBySchema(e,t)}a(Hte,"dropComponentFileValidator");function qte(e){let t=Te.object({project:Te.string().required(),file:Te.string().custom(xl).required(),encoding:Te.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(qte,"getComponentFileValidator");function Gte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!1)).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(Gte,"addComponentValidator");function Fte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(Fte,"dropCustomFunctionProjectValidator");function xte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return si.validateBySchema(e,t)}a(xte,"packageComponentValidator");function kte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Jt.BAD_PROJECT_NAME}),payload:Te.string().optional().messages({"string.pattern.base":Jt.BAD_PACKAGE}),package:Te.string().optional()});return si.validateBySchema(e,t)}a(kte,"deployComponentValidator")});var KE=p((aRe,VB)=>{"use strict";var $E=require("joi"),VE=require("path"),qB=require("fs-extra"),{exec:$te}=require("child_process"),Vte=require("util"),GB=Vte.promisify($te),kl=A(),{handleHDBError:_c,hdb_errors:Yte}=Z(),{HTTP_STATUS_CODES:dc}=Yte,Vl=Q(),Kte=Ye(),$l=M();Vl.initSync();var yR=Vl.get(kl.CONFIG_PARAMS.COMPONENTSROOT),FB="npm install --omit=dev --json",Wte=`${FB} --dry-run`;VB.exports={installModules:jte,auditModules:Xte,installAllRootModules:Qte,uninstallRootModule:zte,linkHarperdb:Jte};async function Qte(e=!1){await YE(),await Yl(e?"npm install --ignore-scripts":"npm install",Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(Qte,"installAllRootModules");async function zte(e){await Yl(`npm uninstall ${e}`,Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(zte,"uninstallRootModule");async function Jte(){await YE(),await Yl(`npm link ${kl.PACKAGE_ROOT}`,Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(Jte,"linkHarperdb");async function Yl(e,t=void 0){let{stdout:r,stderr:s}=await GB(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
9
+ `,"")}a(ZP,"runCommand");async function f5(){try{await YZ.access(XT)}catch{return!1}let e=await ZP(`${XT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return KZ.eq(t,_5)}a(f5,"checkNATSServerInstalled");async function rg(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await jP.getClusterUser();if(ko(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}us.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:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:qt.get(be.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return us.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(rg,"createConnection");async function E5(){Gs&&(await Gs.drain(),Gs=void 0,Ka=void 0,Wa=void 0,Qa=void 0)}a(E5,"closeConnection");var Gs,Qa;async function kf(){return Qa||(Qa=rg(qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Gs=await Qa),Gs||Qa}a(kf,"getConnection");async function El(){if(Ka)return Ka;ko(Gs)&&await kf();let{domain:e}=hl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ka=await Gs.jetstreamManager({domain:e}),Ka}a(El,"getJetStreamManager");async function eM(){if(Wa)return Wa;ko(Gs)&&await kf();let{domain:e}=hl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ko(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Wa=Gs.jetstream({domain:e}),Wa}a(eM,"getJetStream");async function mr(){let e=Gs||await kf(),t=Ka||await El(),r=Wa||await eM();return{connection:e,jsm:t,js:r}}a(mr,"getNATSReferences");async function h5(e){let t=qt.get(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await jP.getClusterUser(),n=await rg(t,r,s),i=tg(),o=n.subscribe(i),c=[],u,_=(async()=>{for await(let l of o){let d=XP.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 ZT.async_set_timeout(e),await o.drain(),await n.close(),await _,c}a(h5,"getServerList");async function sg(e,t){let{jsm:r}=await mr(),s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:zP.File,retention:JP.Limits,subjects:t,discard:n5.Old,max_msgs:n,max_bytes:i,max_age:s})}a(sg,"createLocalStream");async function tM(){let{jsm:e}=await mr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(tM,"listStreams");async function m5(e){let{jsm:t}=await mr();await t.streams.delete(e)}a(m5,"deleteLocalStream");async function p5(e){let{connection:t}=await mr(),r=[],s=tg(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(XP.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 S5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=KP(),o={durable_name:i,ack_policy:Ff.Explicit};t&&(o.deliver_policy=xf.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=eg(l.data),f={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};if(l.headers&&(f.origin=l.headers.get(Ae.MSG_HEADERS.ORIGIN)),_.push(f),l.ack(),l.info.pending===0)break}return await c.delete(),_}a(S5,"viewStream");async function*T5(e,t=void 0,r=void 0){let{jsm:s,js:n}=await mr(),i=KP(),o={durable_name:i,ack_policy:Ff.Explicit};t&&(o.deliver_policy=xf.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=eg(_.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(Ae.MSG_HEADERS.ORIGIN)),yield f}if(_.ack(),_.info.pending===0)break}await c.delete()}a(T5,"viewStreamIterator");async function g5(e,t,r,s){us.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=rM(s,r);let{js:n}=await mr(),i=await ml(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:QP.encode(s);try{us.trace(`publishToStream publishing to subject: ${o}`),u5(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 oM(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){us.trace(`publishToStream creating stream: ${t}`);let l=o.split(".");l[2]="*",await sg(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(g5,"publishToStream");function rM(e,t){t===void 0&&(t=o5());let r=qt.get(be.CONFIG_PARAMS.CLUSTERING_NODENAME);return!t.has(Ae.MSG_HEADERS.ORIGIN)&&r&&t.append(Ae.MSG_HEADERS.ORIGIN,r),t}a(rM,"addNatsMsgHeader");function hl(e){e=e.toLowerCase();let t=fl.join(qt.get(be.CONFIG_PARAMS.ROOTPATH),l5);if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ko(JT)&&(JT={port:_l.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:_l.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.HUB,config_file:Ae.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:fl.join(t,Ae.PID_FILES.HUB),hdb_nats_path:t}),JT;if(e===be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ko(zT)&&(zT={port:_l.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:_l.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.LEAF,config_file:Ae.NATS_CONFIG_FILES.LEAF_SERVER,domain:_l.getConfigFromFile(be.CONFIG_PARAMS.CLUSTERING_NODENAME)+Ae.SERVER_SUFFIX.LEAF,pid_file_path:fl.join(t,Ae.PID_FILES.LEAF),hdb_nats_path:t}),zT;us.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(hl,"getServerConfig");async function R5(e){let{jsm:t}=await mr(),r=await ml();try{await t.streams.add({name:e.stream_name,storage:zP.File,retention:JP.Limits,max_age:t5,max_bytes:r5,subjects:[`${Ae.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:Ff.Explicit,durable_name:e.durable_name,deliver_policy:xf.All,max_ack_pending:1e4});else throw s}}a(R5,"createWorkQueueStream");async function A5(){let{jsm:e}=await mr();(await e.consumers.info(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(us.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name),us.info("Adding pull consumer to ingest stream"),await e.consumers.add(Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Ff.Explicit,durable_name:Ae.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:xf.All,max_ack_pending:1e4}))}a(A5,"updateIngestStreamConsumer");async function sM(e,t,r){let{jsm:s}=await mr(),n=await s.streams.info(t),i=nM(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,_=Gf.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 p=0,m=n.config.sources.length;p<m;p++)if(d=n.config.sources[p],f=p,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 p=`txn.${c}.${u}.${e}`;await s.streams.purge(t,{filter:p}),n.config.sources.splice(f,1),await s.streams.update(t,n.config)}let h={name:_,opt_start_time:o,filter_subject:`${Ae.SUBJECT_PREFIXES.TXN}.>`};l||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(sM,"addSourceToWorkStream");function nM(e){return e.split(".")[1]}a(nM,"extractServerName");async function iM(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=Gf.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(iM,"removeSourceFromWorkStream");async function O5(e,t,r=2e4,s=tg()){if(!ZT.isObject(t))throw new Error("data param must be an object");let n=QP.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 eg(c.data)}a(O5,"request");function ng(e){return new Promise(async(t,r)=>{let s=zZ(XT,["--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(ng,"reloadNATS");async function N5(){let{pid_file_path:e}=hl(be.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await ng(e)}a(N5,"reloadNATSHub");async function b5(){let{pid_file_path:e}=hl(be.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await ng(e)}a(b5,"reloadNATSLeaf");function y5(e,t,r){let s;switch(e.code){case YP.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case YP.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(y5,"requestErrorHandler");async function I5(e,t){let r=t+Ae.SERVER_SUFFIX.LEAF;await oM(async()=>{e.subscribe===!0?await sM(r,Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await iM(r,Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(I5,"updateWorkStream");function oM(e){return JZ.writeTransaction(be.SYSTEM_SCHEMA_NAME,be.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(oM,"exclusiveLock");async function aM(e,t){let r=Gf.createNatsTableStreamName(e,t),s=await ml(),n=D5(e,t,s);await sg(r,[n])}a(aM,"createLocalTableStream");async function w5(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await aM(s,n)}}a(w5,"createTableStreams");async function cM(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Gf.createNatsTableStreamName(e,t),{jsm:s}=await mr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")us.warn(r);else throw r}}a(cM,"purgeTableStream");async function C5(e,t){if(qt.get(be.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await cM(e,t[r])}a(C5,"purgeSchemaTableStreams");async function L5(e){return(await El()).streams.info(e)}a(L5,"getStreamInfo");function D5(e,t,r){return`${Ae.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(D5,"createSubjectName");async function ml(){if(dl)return dl;if(dl=(await El())?.nc?.info?.server_name,dl===void 0)throw new Error("Unable to get jetstream manager server name");return dl}a(ml,"getJsmServerName");async function P5(){let e=await El(),t=await ml(),r=await tM();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=M5(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===Ae.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ae.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;us.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else if(n.name===Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name){let _=`${Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;us.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}else{let _=i.split(".");_[_.length-1]=t;let l=_.join(".");us.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}await e.streams.update(n.name,n)}}}a(P5,"updateLocalStreams");function M5(e){let{config:t}=e,r=!1;if(t.name===Ae.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===Ae.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=qt.get(be.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=qt.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(M5,"updateStreamLimits")});var Kf=T((QSe,fM)=>{"use strict";var ja=Hd(),za=VP(),U5=U(),v5=require("uuid").v4,WSe=require("clone"),Vf=Kn(),Ja=A(),B5=require("util"),xi=is(),{handleHDBError:pr,hdb_errors:H5}=Z(),{HDB_ERROR_MSGS:$f,HTTP_STATUS_CODES:Sr}=H5,{SchemaEventMsg:Yf}=Ps(),lM=st(),{getDatabases:q5}=(de(),te(Le)),{transformReq:Xa}=G();fM.exports={createSchema:G5,createSchemaStructure:_M,createTable:F5,createTableStructure:dM,createAttribute:Y5,dropSchema:x5,dropTable:k5,dropAttribute:$5,getBackup:K5};async function G5(e){let t=await _M(e);return Vf.signalSchemaChange(new Yf(process.pid,e.operation,e.schema)),t}a(G5,"createSchema");async function _M(e){let t=ja.schema_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(Xa(e),!await za.checkSchemaExists(e.schema))throw pr(new Error,$f.SCHEMA_EXISTS_ERR(e.schema),Sr.BAD_REQUEST,Ja.LOG_LEVELS.ERROR,$f.SCHEMA_EXISTS_ERR(e.schema),!0);return await xi.createSchema(e),`database '${e.schema}' successfully created`}a(_M,"createSchemaStructure");async function F5(e){return Xa(e),e.hash_attribute=e.primary_key??e.hash_attribute,await dM(e)}a(F5,"createTable");async function dM(e){let t=ja.create_table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);if(ja.validateTableResidence(e.residence),!await za.checkSchemaTableExists(e.schema,e.table))throw pr(new Error,$f.TABLE_EXISTS_ERR(e.schema,e.table),Sr.BAD_REQUEST,Ja.LOG_LEVELS.ERROR,$f.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:v5(),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(dM,"createTableStructure");async function x5(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ja.schema_object(e),s=t??r;if(s)throw pr(s,s.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let n=await za.checkSchemaExists(e.schema);if(n)throw pr(new Error,n,Sr.NOT_FOUND,Ja.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),Vf.signalSchemaChange(new Yf(process.pid,e.operation,e.schema)),await lM.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(x5,"dropSchema");async function k5(e){let t=ja.table_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let r=await za.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,Ja.LOG_LEVELS.ERROR,r,!0);return await xi.dropTable(e),await lM.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(k5,"dropTable");async function $5(e){let t=ja.attribute_object(e);if(t)throw pr(t,t.message,Sr.BAD_REQUEST,void 0,void 0,!0);Xa(e);let r=await za.checkSchemaTableExists(e.schema,e.table);if(r)throw pr(new Error,r,Sr.NOT_FOUND,Ja.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(Ja.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),V5(e),Vf.signalSchemaChange(new Yf(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw U5.error(`Got an error deleting attribute ${B5.inspect(e)}.`),s}}a($5,"dropAttribute");function V5(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(V5,"dropAttributeFromGlobal");async function Y5(e){Xa(e);let t=q5()[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),Vf.signalSchemaChange(new Yf(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Y5,"createAttribute");function K5(e){return xi.getBackup(e)}a(K5,"getBackup")});var hM=T((zSe,EM)=>{"use strict";var{OPERATIONS_ENUM:W5}=A(),ig=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=W5.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};EM.exports=ig});var og=T((ZSe,gM)=>{"use strict";var Q5=is(),XSe=hM(),Wf=G(),Qf=A(),j5=Q(),{handleHDBError:mM,hdb_errors:z5}=Z(),{HDB_ERROR_MSGS:pM,HTTP_STATUS_CODES:SM}=z5,J5=Object.values(Qf.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),TM="To use this operation audit log must be enabled in harperdb-config.yaml";gM.exports=X5;async function X5(e){if(Wf.isEmpty(e.schema))throw new Error(pM.SCHEMA_REQUIRED_ERR);if(Wf.isEmpty(e.table))throw new Error(pM.TABLE_REQUIRED_ERR);if(!j5.get(Qf.CONFIG_PARAMS.LOGGING_AUDITLOG))throw mM(new Error,TM,SM.BAD_REQUEST,Qf.LOG_LEVELS.ERROR,TM,!0);let t=Wf.checkSchemaTableExist(e.schema,e.table);if(t)throw mM(new Error,t,SM.NOT_FOUND,Qf.LOG_LEVELS.ERROR,t,!0);if(!Wf.isEmpty(e.search_type)&&J5.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Q5.readAuditLog(e)}a(X5,"readAuditLog")});var AM=T((tTe,RM)=>{"use strict";var{OPERATIONS_ENUM:Z5}=A(),ag=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Z5.GET_BACKUP,this.schema=t,this.table=r}};RM.exports=ag});var bM=T((iTe,NM)=>{"use strict";var e8=is(),sTe=AM(),cg=G(),t8=A(),nTe=Q(),{handleHDBError:r8,hdb_errors:s8}=Z(),{HDB_ERROR_MSGS:OM,HTTP_STATUS_CODES:n8}=s8;NM.exports=i8;async function i8(e){if(cg.isEmpty(e.schema))throw new Error(OM.SCHEMA_REQUIRED_ERR);if(cg.isEmpty(e.table))throw new Error(OM.TABLE_REQUIRED_ERR);let t=cg.checkSchemaTableExist(e.schema,e.table);if(t)throw r8(new Error,t,n8.NOT_FOUND,t8.LOG_LEVELS.ERROR,t,!0);return await e8.getBackup(read_audit_log_object)}a(i8,"getBackup")});var DM=T((aTe,LM)=>{var ki=require("validate.js"),IM=Ve(),Za=A(),{handleHDBError:o8,hdb_errors:a8}=Z(),{HDB_ERROR_MSGS:nt,HTTP_STATUS_CODES:c8}=a8,ug=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),u8={STRUCTURE_USER:"structure_user"},yM=Object.values(Za.ROLE_TYPES_ENUM),l8="attribute_permissions",_8="attribute_name",{PERMS_CRUD_ENUM:ec}=Za,d8=[l8,...Object.values(ec)],wM=[ec.READ,ec.INSERT,ec.UPDATE],f8=[_8,...wM];function E8(e){let t=ug();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,CM(e,t)}a(E8,"addRoleValidation");function h8(e){let t=ug();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,CM(e,t)}a(h8,"alterRoleValidation");function m8(e){let t=ug();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,IM.validateObject(e,t)}a(m8,"dropRoleValidation");var p8=["operation","role","id","permission","hdb_user","hdb_auth_header"];function CM(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=IM.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{_t(o,r)}),e.permission){let o=S8(e);o&&_t(o,r),yM.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(yM.indexOf(o)<0){if(o===u8.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=>{d8.includes(l)||_t(nt.INVALID_PERM_KEY(l),r,o,u)}),Object.values(ec).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(p=>{!f8.includes(p)&&p!==ec.DELETE&&_t(nt.INVALID_ATTR_PERM_KEY(p),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}wM.forEach(p=>{ki.isDefined(E[p])?ki.isBoolean(E[p])||_t(nt.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):_t(nt.ATTR_PERM_MISSING(p,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 T8(r)}a(CM,"customValidate");LM.exports={addRoleValidation:E8,alterRoleValidation:h8,dropRoleValidation:m8};function S8(e){let{operation:t,permission:r}=e;if(t===Za.OPERATIONS_ENUM.ADD_ROLE||t===Za.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?Za.ROLE_TYPES_ENUM.SUPER_USER:Za.ROLE_TYPES_ENUM.CLUSTER_USER;return nt.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(S8,"validateNoSUPerms");function T8(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 o8(new Error,s,c8.BAD_REQUEST)}else return null}a(T8,"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 Jf=T((uTe,vM)=>{"use strict";var PM=Er(),MM=fr(),g8=Ho(),_g=DM(),dg=Kn(),R8=require("uuid").v4,A8=require("util"),jf=A(),O8=G(),fg=MM.searchByValue,N8=MM.searchByHash,b8=A8.promisify(g8.delete),y8=Ms(),I8=Ua(),{hdb_errors:w8,handleHDBError:tc}=Z(),{HDB_ERROR_MSGS:UM,HTTP_STATUS_CODES:zf}=w8,{UserEventMsg:Eg}=Ps();vM.exports={addRole:C8,alterRole:L8,dropRole:D8,listRoles:P8};function lg(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(lg,"scrubRoleDetails");async function C8(e){let t=_g.addRoleValidation(e);if(t)throw t;e=lg(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 fg(r)||[])}catch(i){throw tc(i)}if(s&&s.length>0)throw tc(new Error,UM.ROLE_ALREADY_EXISTS(e.role),zf.CONFLICT,void 0,void 0,!0);e.id||(e.id=R8());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await PM.insert(n),dg.signalUserChange(new Eg(process.pid)),e=lg(e),e}a(C8,"addRole");async function L8(e){let t=_g.alterRoleValidation(e);if(t)throw t;e=lg(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await PM.update(r)}catch(n){throw tc(n)}if(s&&s?.message==="updated 0 of 1 records")throw tc(new Error,"Invalid role id",zf.BAD_REQUEST,void 0,void 0,!0);return await dg.signalUserChange(new Eg(process.pid)),e}a(L8,"alterRole");async function D8(e){let t=_g.dropRoleValidation(e);if(t)throw tc(new Error,t,zf.BAD_REQUEST,void 0,void 0,!0);let r=new I8(jf.SYSTEM_SCHEMA_NAME,jf.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await N8(r));if(s.length===0)throw tc(new Error,UM.ROLE_NOT_FOUND,zf.NOT_FOUND,void 0,void 0,!0);let n=new y8(jf.SYSTEM_SCHEMA_NAME,jf.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await fg(n)),o=!1;if(O8.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 b8(c),dg.signalUserChange(new Eg(process.pid)),`${s[0].role} successfully deleted`}a(D8,"dropRole");async function P8(){return fg({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(P8,"listRoles")});var GM=T((_Te,qM)=>{"use strict";var M8=Q(),$i=require("joi"),U8=Ve(),BM=require("moment"),v8=require("fs-extra"),hg=require("path"),B8=require("lodash"),pl=A(),{LOG_LEVELS:$o}=A(),H8="YYYY-MM-DD hh:mm:ss",q8=hg.resolve(__dirname,"../logs");qM.exports=function(e){return U8.validateBySchema(e,G8)};var G8=$i.object({from:$i.custom(HM),until:$i.custom(HM),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(F8)});function HM(e,t){if(BM(e,BM.ISO_8601).format(H8)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(HM,"validateDatetime");function F8(e,t){if(B8.invert(pl.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=M8.get(pl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?pl.LOG_NAMES.HDB:e,i=n===pl.LOG_NAMES.INSTALL?hg.join(q8,pl.LOG_NAMES.INSTALL):hg.join(s,n);return v8.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(F8,"validateReadLogPath")});var pg=T((fTe,xM)=>{"use strict";var Xf=A(),x8=U(),k8=Q(),$8=GM(),mg=require("path"),FM=require("fs-extra"),{once:V8}=require("events"),{handleHDBError:Y8,hdb_errors:K8}=Z(),{PACKAGE_ROOT:W8}=A(),Q8=mg.join(W8,"logs"),j8=1e3,z8=200;xM.exports=J8;async function J8(e){let t=$8(e);if(t)throw Y8(t,t.message,K8.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=k8.get(Xf.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Xf.LOG_NAMES.HDB:e.log_name,n=s===Xf.LOG_NAMES.INSTALL?mg.join(Q8,Xf.LOG_NAMES.INSTALL):mg.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?j8:e.limit,f=e.order===void 0?void 0:e.order,E=e.start===void 0?0:e.start,h=E+d,p=0;f==="desc"&&!u&&!l&&(p=Math.max(FM.statSync(n).size-(h+5)*z8,0));let m=FM.createReadStream(n,{start:p});m.on("error",F=>{x8.error(F)});let g=0,R=[],b="",V;m.on("data",F=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;F=b+F;let W=0,B;for(;(B=w.exec(F))&&!m.destroyed;){V&&(V.message=F.slice(W,B.index),$(V));let[k,se,Ie]=B,ie=Ie.split("] ["),Yt=ie[0],qe=ie[1];ie.splice(0,2),V={timestamp:se,thread:Yt,level:qe,tags:ie,message:""},W=B.index+k.length}b=F.slice(W)}),m.on("end",F=>{m.destroyed||V&&(V.message=b.trim(),$(V))}),m.resume();function $(F){let w,W,B;switch(!0){case(i&&c&&_):w=new Date(F.timestamp),W=new Date(u),B=new Date(l),F.level===o&&w>=W&&w<=B&&g<E?g++:F.level===o&&w>=W&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(i&&c):w=new Date(F.timestamp),W=new Date(u),F.level===o&&w>=W&&g<E?g++:F.level===o&&w>=W&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(i&&_):w=new Date(F.timestamp),B=new Date(l),F.level===o&&w<=B&&g<E?g++:F.level===o&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case(c&&_):w=new Date(F.timestamp),W=new Date(u),B=new Date(l),w>=W&&w<=B&&g<E?g++:w>=W&&w<=B&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case i:F.level===o&&g<E?g++:F.level===o&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case c:w=new Date(F.timestamp),W=new Date(u),w>=W&&g<E?g++:w>=W&&g>=E&&(Vi(F,f,R),g++,g===h&&m.destroy());break;case _:w=new Date(F.timestamp),B=new Date(l),w<=B&&g<E?g++:w<=B&&g>=E&&(Vi(F,f,R),g++,g===h&&m.destroy());break;default:g<E?g++:(Vi(F,f,R),g++,g===h&&m.destroy())}}return a($,"onLogMessage"),await V8(m,"close"),R}a(J8,"readLog");function Vi(e,t,r){t==="desc"?X8(e,r):t==="asc"?Z8(e,r):r.push(e)}a(Vi,"pushLineToResult");function X8(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(X8,"insertDescending");function Z8(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(Z8,"insertAscending")});var eE=T((STe,YM)=>{"use strict";var Sg=require("joi"),{string:Zf,boolean:kM,date:e6}=Sg.types(),t6=Ve(),{validateSchemaExists:hTe,validateTableExists:mTe,validateSchemaName:pTe}=cn(),r6=A(),s6=xe(),$M=Q();$M.initSync();var n6=Zf.invalid($M.get(r6.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(),VM={operation:Zf.valid("add_node","update_node"),node_name:n6,subscriptions:Sg.array().items({table:Zf.optional(),schema:Zf.required(),subscribe:kM.required(),publish:kM.required().custom(o6),start_time:e6.iso()}).min(1).required()};function i6(e){return t6.validateBySchema(e,Sg.object(VM))}a(i6,"addUpdateNodeValidator");function o6(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(o6,"checkForFalsy");YM.exports={addUpdateNodeValidator:i6,validation_schema:VM}});var WM=T((gTe,KM)=>{var a6=Ve(),c6={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};KM.exports=function(e){return a6.validateObject(e,c6)}});var tE=T((RTe,QM)=>{"use strict";var u6=A().OPERATIONS_ENUM,Tg=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=u6.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};QM.exports=Tg});var zM=T((OTe,jM)=>{"use strict";var l6={OPERATION:"operation",REFRESH:"refresh"},gg=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Rg=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};jM.exports={JWTTokens:gg,TOKEN_TYPE_ENUM:l6,JWTRSAKeys:Rg}});var gl=T((bTe,eU)=>{"use strict";var Tl=require("jsonwebtoken"),Ag=require("fs-extra"),Og=G(),ls=A(),{handleHDBError:Tr,hdb_errors:_6}=Z(),{HTTP_STATUS_CODES:gr,AUTHENTICATION_ERROR_MSGS:Rr}=_6,Sl=U(),JM=df(),yg=hr(),d6=Er().update,f6=tE(),E6=Kn(),{UserEventMsg:h6}=Ps(),Yi=Q();Yi.initSync();var Ng=require("path"),{JWTTokens:m6,JWTRSAKeys:p6,TOKEN_TYPE_ENUM:rE}=zM(),S6=Yi.get(ls.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Yi.get(ls.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",T6=Yi.get(ls.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Yi.get(ls.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",sE="RS256",bg;eU.exports={createTokens:g6,validateOperationToken:A6,refreshOperationToken:R6,validateRefreshToken:ZM};async function g6(e){if(Og.isEmpty(e)||typeof e!="object")throw Tr(new Error,Rr.INVALID_AUTH_OBJECT,gr.BAD_REQUEST,void 0,void 0,!0);if(Og.isEmpty(e.username))throw Tr(new Error,Rr.USERNAME_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);if(Og.isEmpty(e.password))throw Tr(new Error,Rr.PASSWORD_REQUIRED,gr.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await yg.findAndValidateUser(e.username,e.password),!t)throw Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}catch(f){throw Sl.error(f),Tr(new Error,Rr.INVALID_CREDENTIALS,gr.UNAUTHORIZED,void 0,void 0,!0)}let r=await nE(),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 XM(i,r.private_key,r.passphrase),c=await Tl.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:T6,algorithm:sE,subject:rE.REFRESH}),u=JM.hash(c),_=new f6(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),l,d;try{l=await d6(_)}catch(f){Sl.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 E6.signalUserChange(new h6(process.pid)),new m6(o,c)}a(g6,"createTokens");async function XM(e,t,r){return await Tl.sign(e,{key:t,passphrase:r},{expiresIn:S6,algorithm:sE,subject:rE.OPERATION})}a(XM,"signOperationToken");async function nE(){if(bg===void 0)try{let e=Ng.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Ng.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Ng.join(Yi.getHdbBasePath(),ls.LICENSE_KEY_DIR_NAME,ls.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Ag.readFile(e)).toString(),n=(await Ag.readFile(t)).toString(),i=(await Ag.readFile(r)).toString();bg=new p6(i,n,s)}catch(e){throw Sl.error(e),Tr(new Error,Rr.NO_ENCRYPTION_KEYS,gr.INTERNAL_SERVER_ERROR)}return bg}a(nE,"getJWTRSAKeys");async function R6(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 ZM(e.refresh_token);let t=await nE(),r=await Tl.decode(e.refresh_token);return{operation_token:await XM({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(R6,"refreshOperationToken");async function A6(e){try{let t=await nE(),r=await Tl.verify(e,t.public_key,{algorithms:sE,subject:rE.OPERATION});return await yg.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Sl.warn(t),t.name&&t.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}}a(A6,"validateOperationToken");async function ZM(e){let t;try{let r=await nE(),s=await Tl.verify(e,r.public_key,{algorithms:sE,subject:rE.REFRESH});t=await yg.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Sl.warn(r),r.name&&r.name==="TokenExpiredError"?Tr(new Error,Rr.TOKEN_EXPIRED,gr.FORBIDDEN):Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED)}if(!JM.validate(t.refresh_token,e))throw Tr(new Error,Rr.INVALID_TOKEN,gr.UNAUTHORIZED);return t}a(ZM,"validateRefreshToken")});var Ig=T((wTe,sU)=>{"use strict";var O6=WM(),rc=require("passport"),N6=require("passport-local").Strategy,b6=require("passport-http").BasicStrategy,y6=require("util"),I6=hr(),rU=y6.callbackify(I6.findAndValidateUser),ITe=Mr(),w6=A(),tU=gl();rc.use(new N6(function(e,t,r){rU(e,t,r)}));rc.use(new b6(function(e,t,r){rU(e,t,r)}));rc.serializeUser(function(e,t){t(null,e)});rc.deserializeUser(function(e,t){t(null,e)});function C6(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":rc.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===w6.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?tU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):tU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:rc.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(C6,"authorize");function L6(e,t){let r=O6(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(L6,"checkPermissions");sU.exports={authorize:C6,checkPermissions:L6}});var sc=T((LTe,nU)=>{"use strict";var wg=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Cg=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};nU.exports={Node:wg,NodeSubscription:Cg}});var oU=T((PTe,iU)=>{"use strict";var D6=A().OPERATIONS_ENUM,Lg=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=D6.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};iU.exports=Lg});var Rl=T((UTe,aU)=>{"use strict";var Dg=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Pg=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)}};aU.exports={RemotePayloadObject:Dg,RemotePayloadSubscription:Pg}});var uU=T((BTe,cU)=>{"use strict";var Mg=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}};cU.exports=Mg});var dU=T((xTe,_U)=>{"use strict";var P6=uU(),qTe=Ke(),lU=Me(),M6=U(),{getSchemaPath:GTe,getTransactionAuditStorePath:FTe}=Be(),{getDatabases:U6}=(de(),te(Le));_U.exports=v6;async function v6(e){let t=new P6;try{let r=U6()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await lU.environmentDataSize(schema_path,e.name),o=await lU.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){M6.warn(`unable to stat table dbi due to ${r}`)}return t}a(v6,"lmdbGetTableSize")});var EU=T(($Te,fU)=>{"use strict";var Ug=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}};fU.exports=Ug});var Jn=T((WTe,SU)=>{"use strict";var B6=require("fs-extra"),H6=require("path"),Xt=require("systeminformation"),Ki=U(),q6=st(),vg=xe(),oE=A(),G6=dU(),pU=vi(),{getThreadInfo:hU}=je(),Yg=Q();Yg.initSync();var F6=EU(),{openEnvironment:YTe}=Me(),{getSchemaPath:KTe}=Be(),{database:x6}=(de(),te(Le)),iE;SU.exports={getHDBProcessInfo:Gg,getNetworkInfo:xg,getDiskInfo:Fg,getMemoryInfo:qg,getCPUInfo:Hg,getTimeInfo:Bg,getSystemInformation:kg,systemInformation:k6,getTableSize:$g,getMetrics:Vg};function Bg(){return Xt.time()}a(Bg,"getTimeInfo");async function Hg(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:_,...l}=await Xt.cpu();l.cpu_speed=await Xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:f,raw_currentload_irq:E,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:m,cpus:g,...R}=await Xt.currentLoad();return R.cpus=[],g.forEach(b=>{let{raw_load:V,raw_load_idle:$,raw_load_irq:F,raw_load_nice:w,raw_load_system:W,raw_load_user:B,...k}=b;R.cpus.push(k)}),l.current_load=R,l}catch(e){return Ki.error(`error in getCPUInfo: ${e}`),{}}}a(Hg,"getCPUInfo");async function qg(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Ki.error(`error in getMemoryInfo: ${e}`),{}}}a(qg,"getMemoryInfo");async function Gg(){let e={core:[],clustering:[]};try{let t=await Xt.processes(),r;try{r=Number.parseInt(await B6.readFile(H6.join(Yg.get(oE.CONFIG_PARAMS.ROOTPATH),oE.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===oE.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(Gg,"getHDBProcessInfo");async function Fg(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Xt.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,..._}=await Xt.fsStats();return e.read_write=_,e.size=await Xt.fsSize(),e}catch(t){return Ki.error(`error in getDiskInfo: ${t}`),e}}a(Fg,"getDiskInfo");async function xg(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Xt.networkInterfaceDefault(),e.latency=await Xt.inetChecksite("google.com"),(await Xt.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 Xt.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(xg,"getNetworkInfo");async function kg(){if(iE!==void 0)return iE;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Xt.osInfo();e=c;let u=await Xt.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,iE=e,iE}catch(t){return Ki.error(`error in getSystemInformation: ${t}`),e}}a(kg,"getSystemInformation");async function $g(){let e=[],t=await pU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await G6(s));return e}a($g,"getTableSize");async function Vg(){let e=await pU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let i=x6({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(Vg,"getMetrics");async function mU(){if(Yg.get(oE.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await q6.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(mU,"getNatsStreamInfo");async function k6(e){let t=new F6;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await kg(),t.time=Bg(),t.cpu=await Hg(),t.memory=await qg(),t.disk=await Fg(),t.network=await xg(),t.harperdb_processes=await Gg(),t.table_size=await $g(),t.metrics=await Vg(),t.threads=await hU(),t.replication=await mU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await kg();break;case"time":t.time=Bg();break;case"cpu":t.cpu=await Hg();break;case"memory":t.memory=await qg();break;case"disk":t.disk=await Fg();break;case"network":t.network=await xg();break;case"harperdb_processes":t.harperdb_processes=await Gg();break;case"table_size":t.table_size=await $g();break;case"database_metrics":case"metrics":t.metrics=await Vg();break;case"threads":t.threads=await hU();break;case"replication":t.replication=await mU();break;default:break}return t}a(k6,"systemInformation")});var Xn=T((JTe,AU)=>{"use strict";var $6=Er(),Kg=G(),V6=require("util"),Vo=A(),TU=Q();TU.initSync();var Y6=Ig(),gU=fr(),{Node:jTe,NodeSubscription:zTe}=sc(),K6=Ua(),W6=oU(),{RemotePayloadObject:Q6,RemotePayloadSubscription:j6}=Rl(),{handleHDBError:z6,hdb_errors:J6}=Z(),{HTTP_STATUS_CODES:X6,HDB_ERROR_MSGS:Z6}=J6,e9=Ms(),t9=Jn(),r9=po(),{getDatabases:s9}=(de(),te(Le)),n9=V6.promisify(Y6.authorize),i9=gU.searchByHash,o9=gU.searchByValue;AU.exports={authHeaderToUser:a9,isEmpty:c9,getNodeRecord:u9,upsertNodeRecord:l9,buildNodePayloads:_9,checkClusteringEnabled:d9,getAllNodeRecords:f9,getSystemInfo:E9,reverseSubscription:RU};async function a9(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await n9(t,null),e}a(a9,"authHeaderToUser");function c9(e){return e==null}a(c9,"isEmpty");async function u9(e){let t=new K6(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return i9(t)}a(u9,"getNodeRecord");async function l9(e){let t=new W6(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return $6.upsert(t)}a(l9,"upsertNodeRecord");function RU(e){if(Kg.isEmpty(e.subscribe)||Kg.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(RU,"reverseSubscription");function _9(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=Kg.getTableHashAttribute(u,_),{subscribe:d,publish:f}=RU(c),E=s9()[u]?.[_],h=new j6(u,_,l,f,d,c.start_time,E.schemaDefined?E.attributes:void 0);n.push(h)}return new Q6(r,t,n,s)}a(_9,"buildNodePayloads");function d9(){if(!TU.get(Vo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw z6(new Error,Z6.CLUSTERING_NOT_ENABLED,X6.BAD_REQUEST,void 0,void 0,!0)}a(d9,"checkClusteringEnabled");async function f9(){let e=new e9(Vo.SYSTEM_SCHEMA_NAME,Vo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await o9(e))}a(f9,"getAllNodeRecords");async function E9(){let e=await t9.getSystemInformation();return{hdb_version:r9.version(),node_version:e.node_version,platform:e.platform}}a(E9,"getSystemInfo")});var Wg=T((ZTe,LU)=>{"use strict";var aE=st(),OU=G(),NU=xe(),bU=A(),cE=U(),yU=Kf(),h9=Hu(),{RemotePayloadObject:m9}=Rl(),{handleHDBError:IU,hdb_errors:p9}=Z(),{HTTP_STATUS_CODES:wU}=p9,{NodeSubscription:CU}=sc();LU.exports=S9;async function S9(e,t){let r;try{r=await aE.request(`${t}.${NU.REQUEST_SUFFIX}`,new m9(bU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),cE.trace("Response from remote describe all request:",r)}catch(o){cE.error(`addNode received error from describe all request to remote node: ${o}`);let c=aE.requestErrorHandler(o,"add_node",t);throw IU(new Error,c,wU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===NU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw IU(new Error,o,wU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===bU.SYSTEM_SCHEMA_NAME){await aE.createLocalTableStream(c,u);let h=new CU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let _=OU.doesSchemaExist(c),l=s[c]!==void 0,d=u?OU.doesTableExist(c,u):!0,f=u?s?.[c]?.[u]!==void 0:!0;if(!_&&!l||!d&&!f){n.push(o);continue}if(!_&&l&&(cE.trace(`addNode creating schema: ${c}`),await yU.createSchema({operation:"create_schema",schema:c})),!d&&f){cE.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new h9(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await yU.createTable(h)}await aE.createLocalTableStream(c,u);let E=new CU(c,u,o.publish,o.subscribe);E.start_time=o.start_time,i.push(E)}return{added:i,skipped:n}}a(S9,"reviewSubscriptions")});var Nl=T((tge,MU)=>{"use strict";var{handleHDBError:uE,hdb_errors:T9}=Z(),{HTTP_STATUS_CODES:lE}=T9,{addUpdateNodeValidator:g9}=eE(),Al=U(),PU=A(),DU=xe(),R9=G(),Qg=st(),Ol=Xn(),A9=Q(),O9=Wg(),{Node:N9,NodeSubscription:b9}=sc(),{broadcast:y9}=je(),I9="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",w9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",C9=A9.get(PU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=L9;async function L9(e,t=!1){Al.trace("addNode called with:",e),Ol.checkClusteringEnabled();let r=g9(e);if(r)throw uE(r,r.message,lE.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Ol.getNodeRecord(s);if(!R9.isEmptyOrZeroLength(d))throw uE(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,lE.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await O9(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=I9,o;let c=Ol.buildNodePayloads(n,C9,PU.OPERATIONS_ENUM.ADD_NODE,await Ol.getSystemInfo());Al.trace("addNode sending remote payload:",c);let u;try{u=await Qg.request(`${s}.${DU.REQUEST_SUFFIX}`,c)}catch(d){Al.error(`addNode received error from request: ${d}`);let f=Qg.requestErrorHandler(d,"add_node",s);throw uE(new Error,f,lE.INTERNAL_SERVER_ERROR,"error",f)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw uE(new Error,d,lE.INTERNAL_SERVER_ERROR,"error",d)}Al.trace(u);let _=[];for(let d=0,f=n.length;d<f;d++){let E=n[d];Al.trace("Add node updating work stream for node:",s,"subscriptions:",E),await Qg.updateWorkStream(E,s),n[d].start_time===void 0&&delete n[d].start_time,_.push(new b9(E.schema,E.table,E.publish,E.subscribe))}let l=new N9(s,_,u.system_info);return await Ol.upsertNodeRecord(l),y9({type:"nats_update"}),i.length>0?o.message=w9:o.message=`Successfully added '${s}' to manifest`,o}a(L9,"addNode")});var zg=T((sge,BU)=>{"use strict";var{handleHDBError:_E,hdb_errors:D9}=Z(),{HTTP_STATUS_CODES:dE}=D9,{addUpdateNodeValidator:P9}=eE(),bl=U(),vU=A(),UU=xe(),M9=G(),jg=st(),yl=Xn(),U9=Q(),{cloneDeep:v9}=require("lodash"),B9=Wg(),{NodeSubscription:H9}=sc(),{broadcast:q9}=je(),G9="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",F9="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",x9=U9.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME);BU.exports=k9;async function k9(e){bl.trace("updateNode called with:",e),yl.checkClusteringEnabled();let t=P9(e);if(t)throw _E(t,t.message,dE.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=v9(await yl.getNodeRecord(r));if(M9.isEmptyOrZeroLength(s))throw _E(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,dE.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await B9(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=G9,o;let c=yl.buildNodePayloads(n,x9,vU.OPERATIONS_ENUM.UPDATE_NODE,await yl.getSystemInfo());bl.trace("updateNode sending remote payload:",c);let u;try{u=await jg.request(`${r}.${UU.REQUEST_SUFFIX}`,c)}catch(_){bl.error(`updateNode received error from request: ${_}`);let l=jg.requestErrorHandler(_,"update_node",r);throw _E(new Error,l,dE.INTERNAL_SERVER_ERROR,"error",l)}if(u.status===UU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let _=`Error returned from remote node ${r}: ${u.message}`;throw _E(new Error,_,dE.INTERNAL_SERVER_ERROR,"error",_)}bl.trace(u);for(let _=0,l=n.length;_<l;_++){let d=n[_];bl.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await jg.updateWorkStream(d,r),n[_].start_time===void 0&&delete n[_].start_time}return await $9(s[0],n,u.system_info),i.length>0?o.message=F9:o.message=`Successfully updated '${r}'`,o}a(k9,"updateNode");async function $9(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 H9(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await yl.upsertNodeRecord(s),q9({type:"nats_update"})}a($9,"updateNodeTable")});var xU=T((ige,FU)=>{"use strict";var GU=require("joi"),{string:HU}=GU.types(),V9=Ve(),qU=A(),Y9=Q(),K9=xe();FU.exports=W9;function W9(e){let t=HU.invalid(Y9.get(qU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(K9.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=GU.object({operation:HU.valid(qU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return V9.validateBySchema(e,r)}a(W9,"removeNodeValidator")});var EE=T((age,WU)=>{"use strict";var{handleHDBError:kU,hdb_errors:Q9}=Z(),{HTTP_STATUS_CODES:$U}=Q9,j9=xU(),Il=U(),VU=Xn(),z9=G(),fE=A(),YU=xe(),KU=st(),J9=Q(),{RemotePayloadObject:X9}=Rl(),{NodeSubscription:Z9}=sc(),e7=Bu(),t7=Ho(),{broadcast:r7}=je(),s7=J9.get(fE.CONFIG_PARAMS.CLUSTERING_NODENAME);WU.exports=n7;async function n7(e){Il.trace("removeNode called with:",e),VU.checkClusteringEnabled();let t=j9(e);if(t)throw kU(t,t.message,$U.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await VU.getNodeRecord(r);if(z9.isEmptyOrZeroLength(s))throw kU(new Error,`Node '${r}' was not found.`,$U.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new X9(fE.OPERATIONS_ENUM.REMOVE_NODE,s7,[]),i,o=!1;try{i=await KU.request(`${r}.${YU.REQUEST_SUFFIX}`,n),Il.trace("Remove node reply from remote node:",r,i)}catch(u){Il.error("removeNode received error from request:",u),o=!0}for(let u=0,_=s.subscriptions.length;u<_;u++){let l=s.subscriptions[u];Il.trace(`Remove node removing subscription: ${l.schema}.${l.table} for node: ${r}`);let d=new Z9(l.schema,l.table,!1,!1);await KU.updateWorkStream(d,r)}let c=new e7(fE.SYSTEM_SCHEMA_NAME,fE.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await t7.deleteRecord(c),r7({type:"nats_update"}),i?.status===YU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Il.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(n7,"removeNode")});var zU=T((uge,jU)=>{"use strict";var QU=require("joi"),{string:i7,array:o7}=QU.types(),a7=Ve(),c7=eE();jU.exports=u7;function u7(e){let t=QU.object({operation:i7.valid("configure_cluster").required(),connections:o7.items(c7.validation_schema).required()});return a7.validateBySchema(e,t)}a(u7,"configureClusterValidator")});var mE=T((_ge,tv)=>{"use strict";var l7=A(),hE=U(),_7=G(),d7=EE(),f7=Nl(),JU=Xn(),E7=zU(),{handleHDBError:XU,hdb_errors:h7}=Z(),{HTTP_STATUS_CODES:ZU}=h7,m7="Configure cluster complete.",p7="Failed to configure the cluster. Check the logs for more details.",S7="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";tv.exports=T7;async function T7(e){hE.trace("configure cluster called with:",e),JU.checkClusteringEnabled();let t=E7(e);if(t)throw XU(t,t.message,ZU.BAD_REQUEST,void 0,void 0,!0);let r=await JU.getAllNodeRecords(),s=[];for(let f=0,E=r.length;f<E;f++)s.push(ev(d7,{operation:l7.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[f].name},r[f].name));let n=await Promise.allSettled(s);hE.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(ev(f7,E,E.node_name))}let c=await Promise.allSettled(i);hE.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"&&(hE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(l=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||_.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(_7.isEmptyOrZeroLength(u))return{message:m7,connections:_};if(l)return{message:S7,failed_nodes:u,connections:_};throw XU(new Error,p7,ZU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(T7,"configureCluster");async function ev(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ev,"functionWrapper")});var sv=T((fge,rv)=>{"use strict";var pE=require("joi"),g7=Ve(),{validateSchemaExists:R7,validateTableExists:A7,validateSchemaName:O7}=cn(),N7=pE.object({operation:pE.string().valid("purge_stream"),schema:pE.string().custom(R7).custom(O7).required(),table:pE.string().custom(A7).required()});function b7(e){return g7.validateBySchema(e,N7)}a(b7,"purgeStreamValidator");rv.exports=b7});var Jg=T((hge,nv)=>{"use strict";var{handleHDBError:y7,hdb_errors:I7}=Z(),{HTTP_STATUS_CODES:w7}=I7,C7=sv(),L7=st(),D7=Xn();nv.exports=P7;async function P7(e){let t=C7(e);if(t)throw y7(t,t.message,w7.BAD_REQUEST,void 0,void 0,!0);D7.checkClusteringEnabled();let{schema:r,table:s}=e;return await L7.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(P7,"purgeStream")});var TE=T((pge,lv)=>{"use strict";var Zg=Xn(),M7=st(),av=Q(),SE=A(),Yo=xe(),U7=G(),Xg=U(),{RemotePayloadObject:v7}=Rl(),{ErrorCode:iv}=require("nats"),ov=av.get(SE.CONFIG_PARAMS.CLUSTERING_ENABLED),cv=av.get(SE.CONFIG_PARAMS.CLUSTERING_NODENAME);lv.exports={clusterStatus:B7,buildNodeStatus:uv};async function B7(){let e={node_name:cv,is_enabled:ov,connections:[]};if(!ov)return e;let t=await Zg.getAllNodeRecords();if(U7.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(uv(t[s],e.connections));return await Promise.allSettled(r),e}a(B7,"clusterStatus");async function uv(e,t){let r=e.name,s=new v7(SE.OPERATIONS_ENUM.CLUSTER_STATUS,cv,void 0,await Zg.getSystemInfo()),n,i,o=Yo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await M7.request(Yo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Yo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Yo.CLUSTER_STATUS_STATUSES.CLOSED,Xg.error(`Error getting node status from ${r} `,n))}catch(u){Xg.warn(`Error getting node status from ${r}`,u),u.code===iv.NoResponders?o=Yo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===iv.Timeout?o=Yo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Yo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new H7(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!==SE.PRE_4_0_0_VERSION&&await Zg.upsertNodeRecord(u)}catch(u){Xg.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(uv,"buildNodeStatus");function H7(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(H7,"NodeStatusObject")});var RE=T((Tge,_v)=>{"use strict";var{handleHDBError:q7,hdb_errors:G7}=Z(),{HTTP_STATUS_CODES:F7}=G7,x7=st(),k7=Xn(),eR=G(),gE=require("joi"),$7=Ve(),V7=2e3,Y7=gE.object({timeout:gE.number().min(1),connected_nodes:gE.boolean(),routes:gE.boolean()});_v.exports=K7;async function K7(e){k7.checkClusteringEnabled();let t=$7.validateBySchema(e,Y7);if(t)throw q7(t,t.message,F7.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||eR.autoCastBoolean(s),o=n===void 0||eR.autoCastBoolean(n),c={nodes:[]},u=await x7.getServerList(r??V7),_={};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(p=>{h.connected_nodes.includes(p.name.slice(0,-4))||h.connected_nodes.push(p.name.slice(0,-4))})),o&&(h.routes=E.cluster?.urls?E.cluster?.urls.map(p=>({host:p.split(":")[0],port:eR.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(K7,"clusterNetwork")});var hv=T((Rge,Ev)=>{"use strict";var tR=require("joi"),dv=Ve(),{route_constraints:fv}=Km();Ev.exports={setRoutesValidator:W7,deleteRoutesValidator:Q7};function W7(e){let t=tR.object({server:tR.valid("hub","leaf").required(),routes:fv.required()});return dv.validateBySchema(e,t)}a(W7,"setRoutesValidator");function Q7(e){let t=tR.object({routes:fv.required()});return dv.validateBySchema(e,t)}a(Q7,"deleteRoutesValidator")});var OE=T((Oge,Tv)=>{"use strict";var Ko=tt(),rR=G(),AE=A(),mv=hv(),{handleHDBError:pv,hdb_errors:j7}=Z(),{HTTP_STATUS_CODES:Sv}=j7,z7="cluster routes successfully set",J7="cluster routes successfully deleted";Tv.exports={setRoutes:X7,getRoutes:Z7,deleteRoutes:eee};function X7(e){let t=mv.setRoutesValidator(e);if(t)throw pv(t,t.message,Sv.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=rR.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(AE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):Ko.updateConfigValue(AE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:z7,set:o,skipped:i}}a(X7,"setRoutes");function Z7(){let e=Ko.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Z7,"getRoutes");function eee(e){let t=mv.deleteRoutesValidator(e);if(t)throw pv(t,t.message,Sv.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 p=s[E];if(d.host===p.host&&d.port===p.port){s.splice(E,1),f=!0,c=!0,i.push(d);break}}if(!f){let E=!0;for(let h=0,p=n.length;h<p;h++){let m=n[h];if(d.host===m.host&&d.port===m.port){n.splice(h,1),u=!0,E=!1,i.push(d);break}}E&&o.push(d)}}return c&&(s=rR.isEmptyOrZeroLength(s)?null:s,Ko.updateConfigValue(AE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=rR.isEmptyOrZeroLength(n)?null:n,Ko.updateConfigValue(AE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:J7,deleted:i,skipped:o}}a(eee,"deleteRoutes")});var Rv=T((bge,gv)=>{"use strict";var wl=require("alasql"),Wo=require("recursive-iterator"),Fs=U(),tee=G(),Cl=A(),sR=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=>Cl.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=>!Cl.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][Cl.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=ree(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(_=>!Cl.SEARCH_WILDCARDS.includes(_));c.forEach(({attribute_name:_})=>{let l=new wl.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 ree(e){return e.filter(t=>t[Cl.PERMS_CRUD_ENUM.READ])}a(ree,"filterReadRestrictedAttrs");function see(e,t,r,s,n){nee(e,t,r,s,n)}a(see,"interpretAST");function Ll(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(Ll,"addSchemaTableToMap");function nee(e,t,r,s,n){if(!e){Fs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof wl.yy.Insert?cee(e,t,r):e instanceof wl.yy.Select?iee(e,t,r,s,n):e instanceof wl.yy.Update?oee(e,t,r):e instanceof wl.yy.Delete?aee(e,t,r):Fs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(nee,"getRecordAttributesAST");function iee(e,t,r,s,n){if(!e){Fs.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(tee.isEmptyOrZeroLength(i)){Fs.error("No schema specified");return}e.from.forEach(c=>{Ll(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ll(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{Fs.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{Fs.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{Fs.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{Fs.info(`table specified as ${_} not found.`);return}t.get(l).get(_).indexOf(u.columnid)<0&&t.get(l).get(_).push(u.columnid)}}}a(iee,"getSelectAttributes");function oee(e,t,r){if(!e){Fs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.table.databaseid;Ll(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nR(e.table.tableid,n,i.columnid,t,r)}a(oee,"getUpdateAttributes");function aee(e,t,r){if(!e){Fs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Wo(e.where),n=e.table.databaseid;Ll(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&nR(e.table.tableid,n,i.columnid,t,r)}a(aee,"getDeleteAttributes");function cee(e,t,r){if(!e){Fs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Wo(e.columns),n=e.into.databaseid;Ll(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&nR(e.into.tableid,n,i.columnid,t,r)}a(cee,"getInsertAttributes");function nR(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(nR,"pushAttribute");gv.exports=sR});var bE=T((Ige,bv)=>{var NE=Ku(),Av=require("chalk"),Kr=U(),Ov=require("prompt"),{promisify:uee}=require("util"),iR=A(),lee=require("fs-extra"),_ee=require("path"),dee=G(),fee=po(),Nv=Q();Nv.initSync();var Eee=require("moment"),hee=uee(Ov.get),mee=_ee.join(Nv.getHdbBasePath(),iR.LICENSE_KEY_DIR_NAME,iR.LICENSE_FILE_NAME,iR.LICENSE_FILE_NAME);bv.exports={getFingerprint:See,setLicense:pee,parseLicense:oR,register:Tee,getRegistrationInfo:Ree};async function pee(e){if(e&&e.key&&e.company){try{Kr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await oR(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Kr.error(r),Kr.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 See(){let e={};try{e=await NE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Kr.error(r),Kr.error(t),new Error(r)}return e}a(See,"getFingerprint");async function oR(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Kr.info("Validating license input...");let r=NE.validateLicense(e,t);if(Kr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Kr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Kr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Kr.info("writing license to disk"),await lee.writeFile(mee,JSON.stringify({license_key:e,company:t}))}catch(s){throw Kr.error("Failed to write License"),s}return"Registration successful."}a(oR,"parseLicense");async function Tee(){let e=await gee();return oR(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(Tee,"register");async function gee(){let e=await NE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:Av.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:Av.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{Ov.start()}catch(s){Kr.error(s)}let r;try{r=await hee(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(gee,"promptForRegistration");async function Ree(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await NE.getLicense()}catch(r){throw Kr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(dee.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=fee.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=Eee.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(Ree,"getRegistrationInfo")});var Iv=T((Cge,yv)=>{"use strict";var Aee=xe(),aR=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+Aee.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"}};yv.exports=aR});var Lv=T((Dge,Cv)=>{"use strict";var wv=xe(),cR=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+wv.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+wv.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"}};Cv.exports=cR});var Pv=T((Mge,Dv)=>{"use strict";var uR=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};Dv.exports=uR});var Uv=T((vge,Mv)=>{"use strict";var Oee=xe(),lR=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+Oee.SERVER_SUFFIX.ADMIN,this.password=r}};Mv.exports=lR});var LE=T((Hge,Hv)=>{"use strict";var nc=require("path"),wE=require("fs-extra"),Nee=Iv(),bee=Lv(),yee=Pv(),Iee=Uv(),_R=hr(),oc=G(),Ar=tt(),IE=A(),Dl=xe(),{CONFIG_PARAMS:it}=IE,Pl=U(),Ml=Q(),vv=jn(),dR=st(),ic="clustering",wee=1e4,Bv=5;Hv.exports={generateNatsConfig:Lee,removeNatsConfig:Dee,getHubConfigPath:Cee};function Cee(){let e=Ml.get(it.ROOTPATH);return nc.join(e,ic,Dl.NATS_CONFIG_FILES.HUB_SERVER)}a(Cee,"getHubConfigPath");async function Lee(e=!1,t=void 0){Ml.initSync();let r=Ml.get(it.ROOTPATH),s=nc.join(r,ic,Dl.PID_FILES.HUB),n=nc.join(r,ic,Dl.PID_FILES.LEAF),i=Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=nc.join(r,ic,Dl.NATS_CONFIG_FILES.HUB_SERVER),c=nc.join(r,ic,Dl.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 dR.checkNATSServerInstalled()||CE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await _R.listUsers(),m=Ar.getConfigFromFile(it.CLUSTERING_USER),g=await _R.getClusterUser();(oc.isEmpty(g)||g.active!==!0)&&CE(`Invalid cluster user '${m}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await yE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await yE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await yE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await yE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let R=[],b=[];for(let[k,se]of p.entries())se.role.role===IE.ROLE_TYPES_ENUM.CLUSTER_USER&&se.active&&(R.push(new Iee(se.username,vv.decrypt(se.hash))),b.push(new yee(se.username,vv.decrypt(se.hash))));let V=[],{hub_routes:$}=Ar.getClusteringRoutes();if(!oc.isEmptyOrZeroLength($))for(let k of $)V.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${k.host}:${k.port}`);let F=new Nee(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,R,b);l==null&&(delete F.tls.ca_file,delete F.leafnodes.tls.ca_file),t=oc.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===IE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await wE.writeJson(o,F),Pl.trace(`Hub server config written to ${o}`));let w=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,W=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new bee(Ar.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),E,n,i,[w],[W],R,b,u,_,l,d);l==null&&delete B.tls.ca_file,(t===void 0||t===IE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await wE.writeJson(c,B),Pl.trace(`Leaf server config written to ${c}`))}a(Lee,"generateNatsConfig");async function yE(e){let t=Ml.get(e);return oc.isEmpty(t)&&CE(`port undefined for '${e}'`),await oc.isPortTaken(t)&&CE(`'${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(yE,"isPortAvailable");function CE(e){let t=`Error generating clustering config: ${e}`;Pl.error(t),console.error(t),process.exit(1)}a(CE,"generateNatsConfigError");async function Dee(e){let{port:t,config_file:r}=dR.getServerConfig(e),{username:s,decrypt_hash:n}=await _R.getClusterUser(),i=0,o=2e3;for(;i<Bv;){try{let _=await dR.createConnection(t,s,n,!1);if(_.protocol.connected===!0){_.close();break}}catch(_){Pl.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${_}`)}if(i++,i>=Bv)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 oc.async_set_timeout(o*(i*2))}let c="0".repeat(wee),u=nc.join(Ml.get(it.ROOTPATH),ic,r);await wE.writeFile(u,c),await wE.remove(u),Pl.notify(e,"started.")}a(Dee,"removeNatsConfig")});var $v=T((Gge,kv)=>{"use strict";var Wr=Q(),Pee=Ku(),le=A(),Ul=xe(),Zn=require("path"),{PACKAGE_ROOT:PE}=A(),qv=Q(),DE=G(),ac="/dev/null",Mee=Zn.join(PE,"launchServiceScripts"),Gv=Zn.join(PE,"utility/scripts"),Uee=Zn.join(Gv,le.HDB_RESTART_SCRIPT),Fv=Zn.resolve(PE,"dependencies",`${process.platform}-${process.arch}`,Ul.NATS_BINARY_NAME);function xv(){let t=Pee.licenseSearch().ram_allocation||le.RAM_ALLOCATION_ENUM.DEFAULT,r=le.MEM_SETTING_KEY+t,s={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return DE.noBootFile()&&(s[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DE.getEnvCliRootPath()),{name:le.PROCESS_DESCRIPTORS.HDB,script:le.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:PE}}a(xv,"generateMainServerConfig");var vee=9930;function Bee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Ul.NATS_CONFIG_FILES.HUB_SERVER),r=Zn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=qv.get(le.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Ul.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==vee?"-"+s:""),script:Fv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ac,i.error_file=ac),i}a(Bee,"generateNatsHubServerConfig");var Hee=9940;function qee(){Wr.initSync(!0);let e=Wr.get(le.CONFIG_PARAMS.ROOTPATH),t=Zn.join(e,"clustering",Ul.NATS_CONFIG_FILES.LEAF_SERVER),r=Zn.join(Wr.get(le.HDB_SETTINGS_NAMES.LOG_PATH_KEY),le.LOG_NAMES.HDB),s=qv.get(le.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Ul.LOG_LEVEL_FLAGS[Wr.get(le.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Hee?"-"+s:""),script:Fv,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ac,i.error_file=ac),i}a(qee,"generateNatsLeafServerConfig");function Gee(){Wr.initSync();let e=Zn.join(Wr.get(le.CONFIG_PARAMS.LOGGING_ROOT),le.LOG_NAMES.HDB),t={name:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:le.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:Mee,autorestart:!1};return Wr.get(le.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ac,t.error_file=ac),t}a(Gee,"generateClusteringUpgradeV4ServiceConfig");function Fee(){let e={[le.PROCESS_NAME_ENV_PROP]:le.PROCESS_DESCRIPTORS.RESTART_HDB};return DE.noBootFile()&&(e[le.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=DE.getEnvCliRootPath()),{...{name:le.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:Gv},script:Uee}}a(Fee,"generateRestart");function xee(){return{apps:[xv()]}}a(xee,"generateAllServiceConfigs");kv.exports={generateAllServiceConfigs:xee,generateMainServerConfig:xv,generateRestart:Fee,generateNatsHubServerConfig:Bee,generateNatsLeafServerConfig:qee,generateClusteringUpgradeV4ServiceConfig:Gee}});var cc=T((kge,rB)=>{"use strict";var Ne=A(),kee=G(),ei=LE(),vl=st(),pn=xe(),Wi=$v(),ME=Q(),Qi=U(),$ee=Xn(),{startWorker:Vv,onMessageFromWorkers:Vee}=je(),Yee=Jn(),xge=require("util"),Kee=require("child_process"),Wee=require("fs"),{execFile:Qee}=Kee,Se;rB.exports={enterPM2Mode:jee,start:ji,stop:fR,reload:Kv,restart:Wv,list:ER,describe:jv,connect:ti,kill:ete,startAllServices:tte,startService:hR,getUniqueServicesList:zv,restartAllServices:rte,isServiceRegistered:Jv,reloadStopStart:Xv,restartHdb:Qv,deleteProcess:Xee,startClusteringProcesses:eB,startClusteringThreads:tB,isHdbRestartRunning:Zee,isClusteringRunning:nte,stopClustering:ste,reloadClustering:ite};var Bl=!1;Vee(e=>{e.type==="restart"&&ME.initSync(!0)});function jee(){Bl=!0}a(jee,"enterPM2Mode");function ti(){return Se||(Se=require("pm2")),new Promise((e,t)=>{Se.connect((r,s)=>{Qi.setupConsoleLogging(),r&&t(r),e(s)})})}a(ti,"connect");var Or,zee=10,Yv;function ji(e,t=!1){if(Bl)return Jee(e);let r=Qee(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),!Yv&&i!==0&&(e.restarts=(e.restarts||0)+1,e.restarts<zee&&(Wee.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=ME.get(Ne.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),c=/\[\d+][^\[]+\[(\w+)]/g,u,_=0,l;for(;u=c.exec(i);){if(u.index&&pn.LOG_LEVEL_HIERARCHY[o]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===pn.LOG_LEVELS.ERR||l===pn.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=pn.LOG_LEVELS[f]}if(pn.LOG_LEVEL_HIERARCHY[o]>=pn.LOG_LEVEL_HIERARCHY[l||"info"]){let d=l===pn.LOG_LEVELS.ERR||l===pn.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(()=>{Yv=!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 Jee(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.start(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Jee,"startWithPM2");function fR(e){if(!Bl){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)}Se.stop(e,async(s,n)=>{s&&(Se.disconnect(),r(s)),Se.delete(e,(i,o)=>{i&&(Se.disconnect(),r(s)),Se.disconnect(),t(o)})})})}a(fR,"stop");function Kv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.reload(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Kv,"reload");function Wv(e){if(!Bl)for(let t of Or||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.restart(e,(s,n)=>{Se.disconnect(),t(n)})})}a(Wv,"restart");function Xee(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.delete(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(Xee,"deleteProcess");async function Qv(){await ji(Wi.generateRestart())}a(Qv,"restartHdb");async function Zee(){let e=await ER();for(let t in e)if(e[t].name===Ne.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Zee,"isHdbRestartRunning");function ER(){return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Se.list((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(ER,"list");function jv(e){return new Promise(async(t,r)=>{try{await ti()}catch(s){r(s)}Se.describe(e,(s,n)=>{s&&(Se.disconnect(),r(s)),Se.disconnect(),t(n)})})}a(jv,"describe");function ete(){if(!Bl){for(let e of Or||[])e.kill();Or=[];return}return new Promise(async(e,t)=>{try{await ti()}catch(r){t(r)}Se.killDaemon((r,s)=>{r&&(Se.disconnect(),t(r)),Se.disconnect(),e(s)})})}a(ete,"kill");async function tte(){try{await eB(),await tB(),await ji(Wi.generateAllServiceConfigs())}catch(e){throw Se?.disconnect(),e}}a(tte,"startAllServices");async function hR(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 Se?.disconnect(),r}}a(hR,"startService");async function zv(){try{let e=await ER(),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 Se?.disconnect(),e}}a(zv,"getUniqueServicesList");async function rte(e=[]){try{let t=!1,r=await zv();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 Wv(o))}t&&await Xv(Ne.PROCESS_DESCRIPTORS.HDB)}catch(t){throw Se?.disconnect(),t}}a(rte,"restartAllServices");async function Jv(e){if(Or?.find(r=>r.name===e))return!0;let t=await Yee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(Jv,"isServiceRegistered");async function Xv(e){let t=e===Ne.PROCESS_DESCRIPTORS.HDB?ME.get(Ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):ME.get(Ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await jv(e),s=kee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await fR(e),await hR(e)):e===Ne.PROCESS_DESCRIPTORS.HDB?await Qv():await Kv(e)}a(Xv,"reloadStopStart");var Zv;async function eB(e=!1){for(let t in Ne.CLUSTERING_PROCESSES){let r=Ne.CLUSTERING_PROCESSES[t];await hR(r,e)}}a(eB,"startClusteringProcesses");async function tB(){Zv=Vv(Ne.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ne.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await vl.createWorkQueueStream(pn.WORK_QUEUE_CONSUMER_NAMES),await vl.updateIngestStreamConsumer(),await vl.updateLocalStreams();let e=await $ee.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"),Vv(Ne.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(tB,"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 Zv.terminate();else{let t=Ne.CLUSTERING_PROCESSES[e];await fR(t)}}a(ste,"stopClustering");async function nte(){for(let e in Ne.CLUSTERING_PROCESSES){let t=Ne.CLUSTERING_PROCESSES[e];if(await Jv(t)===!1)return!1}return!0}a(nte,"isClusteringRunning");async function ite(){await ei.generateNatsConfig(!0),await vl.reloadNATSHub(),await vl.reloadNATSLeaf(),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ei.removeNatsConfig(Ne.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(ite,"reloadClustering")});var Qo=T((Vge,uB)=>{"use strict";var ote=require("minimist"),{isMainThread:SR,parentPort:iB}=require("worker_threads"),Xe=A(),{PROCESS_DESCRIPTORS_VALIDATE:Hl}=Xe,Sn=U(),TR=G(),UE=LE(),uc=st(),mR=xe(),oB=tt(),Tn=cc(),sB=Jn(),ate=Eo(),{restartWorkers:vE,onMessageByType:cte}=je(),{handleHDBError:ute,hdb_errors:lte}=Z(),{HTTP_STATUS_CODES:_te}=lte,BE=Q();BE.initSync();var ql=`Restarting HarperDB. This may take up to ${Xe.RESTART_TIMEOUT_MS/1e3} seconds.`,dte="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nB="Clustering is not enabled so cannot be restarted",fte="Invalid service",lc,_s;uB.exports={restart:aB,restartService:gR};SR&&cte(Xe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?gR({service:e.workerType}):aB({operation:"restart"})});async function aB(e){_s=Object.keys(e).length===0,lc=await Tn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR);let t=ote(process.argv);if(t.service){await gR(t);return}if(_s&&!lc){console.error(dte);return}if(_s&&console.log(ql),lc){Tn.enterPM2Mode(),Sn.notify(ql);let r=ate(Object.keys(Xe.CONFIG_PARAM_MAP),!0);return TR.isEmptyOrZeroLength(Object.keys(r))||oB.updateConfigValue(void 0,void 0,r,!0,!0),hte(),ql}return SR?(Sn.notify(ql),setTimeout(()=>{vE()},50)):iB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART}),ql}a(aB,"restart");async function gR(e){let{service:t}=e;if(Xe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw ute(new Error,fte,_te.BAD_REQUEST,void 0,void 0,!0);if(lc=await Tn.isServiceRegistered(Xe.HDB_PROC_DESCRIPTOR),!SR)return iB.postMessage({type:Xe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Hl.clustering:if(!BE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nB;break}_s&&console.log("Restarting clustering"),Sn.notify("Restarting clustering"),await cB();break;case Hl.clustering_config:case Hl["clustering config"]:if(!BE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nB;break}_s&&console.log("Restarting clustering_config"),Sn.notify("Restarting clustering_config"),await Tn.reloadClustering();break;case"custom_functions":case"custom functions":case Hl.harperdb:case Hl.http_workers:if(_s&&!lc){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}_s&&console.log("Restarting http_workers"),Sn.notify("Restarting http_workers"),_s?await Tn.restart(Xe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{vE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Sn.error(r),_s&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(gR,"restartService");async function Ete(){await uc.publishToStream(`${mR.SUBJECT_PREFIXES.TXN}.${mR.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,mR.WORK_QUEUE_CONSUMER_NAMES.stream_name,uc.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Ete,"postDummyNatsMsg");async function hte(){await cB(),await Tn.restart(Xe.HDB_PROC_DESCRIPTOR),await TR.async_set_timeout(2e3),BE.get(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await pR(),_s&&(await uc.closeConnection(),process.exit(0))}a(hte,"restartPM2Mode");async function cB(){if(!oB.getConfigFromFile(Xe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sB.getHDBProcessInfo()).clustering.length===0)Sn.trace("Clustering not running, restart will start clustering services"),await UE.generateNatsConfig(!0),await Tn.startClusteringProcesses(),await Tn.startClusteringThreads(),await pR(),_s&&await uc.closeConnection();else{await Ete(),await UE.generateNatsConfig(!0),lc?(Sn.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Tn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Tn.restart(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await sB.getHDBProcessInfo()).clustering.forEach(n=>{Sn.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await TR.async_set_timeout(3e3),await pR(),await uc.updateLocalStreams(),_s&&await uc.closeConnection(),Sn.trace("Restart clustering restarting ingest and reply service threads");let t=vE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=vE(Xe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(cB,"restartClustering");async function pR(){await UE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await UE.removeNatsConfig(Xe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(pR,"removeNatsConfig")});var gB=T((Wge,TB)=>{"use strict";var Kge=require("lodash"),Nr=A(),{handleHDBError:lB,hdb_errors:mte}=Z(),{HDB_ERROR_MSGS:pte,HTTP_STATUS_CODES:Ste}=mte,RR=U();TB.exports={getRolePermissions:gte};var jo=Object.create(null),Tte=a(e=>({key:e,perms:{}}),"perms_template_obj"),EB=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),hB=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"),AR=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...hB(t,r,s,n)}),"table_perms_template"),_B=a((e,t=hB())=>({attribute_name:e,describe:SB(t),[Gl]:t[Gl],[OR]:t[OR],[NR]:t[NR]}),"attr_perms_template"),dB=a((e,t=!1)=>({attribute_name:e,describe:t,[Gl]:t}),"timestamp_attr_perms_template"),{READ:Gl,INSERT:OR,UPDATE:NR}=Nr.PERMS_CRUD_ENUM,mB=Object.values(Nr.PERMS_CRUD_ENUM),pB=[Gl,OR,NR];function gte(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=Rte(e,r);return jo[t]?jo[t].key=s:jo[t]=Tte(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 RR.error(s),RR.debug(r),lB(new Error,pte.OUTDATED_PERMS_TRANSLATION_ERROR,Ste.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
10
+ ${r.stack}`;throw RR.error(s),lB(new Error)}}}a(gte,"getRolePermissions");function Rte(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]=Ate(t[i]);return}r[i]=EB(),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],_=Ote(c,u);r[i].describe||mB.forEach(l=>{_[l]&&(r[i].describe=!0)}),r[i].tables[o]=_}else r[i].tables[o]=AR()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=AR()})}),r}a(Rte,"translateRolePermissions");function Ate(e){let t=EB(!0);return Object.keys(e).forEach(r=>{t.tables[r]=AR(!0,!0,!0,!0,!0)}),t}a(Ate,"createStructureUserPermissions");function Ote(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=dB(d,l[Gl])),_[d]=f,_},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=_B(o);return t.attributes.forEach(({attribute:_})=>{if(i[_]){let l=i[_];l.describe=SB(l),n.attribute_permissions.push(l),c||Nte(l,u)}else if(_!==o){let l;Nr.TIME_STAMP_NAMES.includes(_)?l=dB(_):l=_B(_),n.attribute_permissions.push(l)}}),c||n.attribute_permissions.push(u),n.describe=fB(n),n}else return e.describe=fB(e),e}a(Ote,"getTableAttrPerms");function fB(e){return mB.filter(t=>e[t]).length>0}a(fB,"getSchemaTableDescribePerm");function SB(e){return pB.filter(t=>e[t]).length>0}a(SB,"getAttributeDescribePerm");function Nte(e,t){pB.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(Nte,"checkForHashPerms")});var RB={};Ge(RB,{Headers:()=>zi});var zi,HE=ge(()=>{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]}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 Fl={};Ge(Fl,{authentication:()=>CB,bypassAuth:()=>Dte,login:()=>Mte,logout:()=>Ute,start:()=>Pte});function Dte(){wB=!0}async function CB(e,t){let r=e.headers.asObject,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let E=e.isOperationsServer?wte?Ite:[]:yte?bte:[];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 qE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),qE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(qE){let E=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(E);if(h>=0){let p=n.indexOf(";",h),m=n.indexOf("=",h);c=n.slice(m+1,p===-1?n.length:p),u=await OB.get(c)}e.session=u||(u={})}e.user=null;let _=a((E,h,p)=>{let m=new FE.AuthAuditLog(E,h,Gt.AUTH_AUDIT_TYPES.AUTHENTICATION,r["x-forwarded-for"]??e.ip,e.method,e.pathname);m.auth_strategy=p,c&&(m.session_id=c),r.referer&&(m.referer=r.referer),r.origin&&(m.origin=r.origin),h===Gt.AUTH_AUDIT_STATUS.SUCCESS?AB.notify(m):AB.error(m)},"authAuditLog"),l;if(s){if(l=zo.get(s),!l){let[E,h]=s.split(" "),p,m;try{switch(E){case"Basic":[p,m]=atob(h).split(":"),l=p||m?await Tt.getUser(p,m):null;break;case"Bearer":try{l=await(0,GE.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,GE.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return Lte&&(zo.get(h)||(zo.set(h,h),_(p,Gt.AUTH_AUDIT_STATUS.FAILURE,E))),{status:401,body:Ji({error:g.message},e)}}zo.set(s,l),Cte&&_(l.username,Gt.AUTH_AUDIT_STATUS.SUCCESS,E)}e.user=l}else u?.user?e.user=await Tt.getUser(u.user,null,!1):wB&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=await(0,bB.getSuperUser)());qE&&(e.session.update=function(E){if(!c){c=(0,yB.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):d?.headers?.set&&d.headers.set("Set-Cookie",p)}return E.id=c,OB.put(E)},e.login=async function(E,h){e.user=await Tt.getUser(E,h),e.session.update({user:e.user.username})},(l&&!u||u?.user?.username!==l?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Li.loginPath?(d.status=302,d.headers.set("Location",Li.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let f=o.length;if(f>0){let E=d.headers;E||(d.headers=E=new zi);for(let h=0;h<f;){let p=o[h++];E.set(p,o[h++])}}return o=null,d}function Pte({server:e,port:t}){e.request(CB,{port:t||"all"}),NB||(NB=!0,setInterval(()=>{zo=new Map},ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),IB.user.addListener(()=>{zo=new Map}))}async function Mte(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 Ute(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var bB,GE,yB,ds,Gt,FE,IB,AB,bte,yte,Ite,wte,OB,qE,wB,Cte,Lte,zo,NB,xE=ge(()=>{bB=M(hr());Pr();uu();GE=M(gl());de();yB=require("uuid"),ds=M(Q()),Gt=M(A()),FE=M(U()),IB=M(Qu());HE();_c();AB=(0,FE.loggerWithTag)("auth-event");ds.initSync();bte=ds.get(Gt.CONFIG_PARAMS.HTTP_CORSACCESSLIST),yte=ds.get(Gt.CONFIG_PARAMS.HTTP_CORS),Ite=ds.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),wte=ds.get(Gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS),OB=ut({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),qE=ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,wB=ds.get(Gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??process.env.DEV_MODE,Cte=ds.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Lte=ds.get(Gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,zo=new Map;Tt.onInvalidatedUser(()=>{zo=new Map});a(Dte,"bypassAuth");a(CB,"authentication");a(Pte,"start");a(Mte,"login");a(Ute,"logout")});var BB=T((rRe,vB)=>{"use strict";var Te=require("joi"),LB=require("fs-extra"),DB=require("path"),si=Ve(),PB=Q(),MB=A(),UB=U(),{hdb_errors:vte}=Z(),{HDB_ERROR_MSGS:Zt}=vte,ri=/^[a-zA-Z0-9-_]+$/;vB.exports={getDropCustomFunctionValidator:Hte,setCustomFunctionValidator:qte,addComponentValidator:kte,dropCustomFunctionProjectValidator:$te,packageComponentValidator:Vte,deployComponentValidator:Yte,setComponentFileValidator:Gte,getComponentFileValidator:xte,dropComponentFileValidator:Fte};function kE(e,t,r){try{let s=PB.get(MB.CONFIG_PARAMS.COMPONENTSROOT),n=DB.join(s,t);return LB.existsSync(n)?e?t:r.message(Zt.PROJECT_EXISTS):e?r.message(Zt.NO_PROJECT):t}catch(s){return UB.error(s),r.message(Zt.VALIDATION_ERR)}}a(kE,"checkProjectExists");function xl(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(xl,"checkFilePath");function Bte(e,t,r,s){try{let n=PB.get(MB.CONFIG_PARAMS.COMPONENTSROOT),i=DB.join(n,e,t,r+".js");return LB.existsSync(i)?r:s.message(Zt.NO_FILE)}catch(n){return UB.error(n),s.message(Zt.VALIDATION_ERR)}}a(Bte,"checkFileExists");function Hte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().pattern(ri).custom(Bte.bind(null,e.project,e.type)).custom(xl).required().messages({"string.pattern.base":Zt.BAD_FILE_NAME})});return si.validateBySchema(e,t)}a(Hte,"getDropCustomFunctionValidator");function qte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),type:Te.string().valid("helpers","routes").required(),file:Te.string().custom(xl).required(),function_content:Te.string().required()});return si.validateBySchema(e,t)}a(qte,"setCustomFunctionValidator");function Gte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:Te.string().custom(xl).required(),payload:Te.string().allow("").optional(),encoding:Te.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(Gte,"setComponentFileValidator");function Fte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),file:Te.string().custom(xl).optional()});return si.validateBySchema(e,t)}a(Fte,"dropComponentFileValidator");function xte(e){let t=Te.object({project:Te.string().required(),file:Te.string().custom(xl).required(),encoding:Te.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return si.validateBySchema(e,t)}a(xte,"getComponentFileValidator");function kte(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!1)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a(kte,"addComponentValidator");function $te(e){let t=Te.object({project:Te.string().pattern(ri).custom(kE.bind(null,!0)).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME})});return si.validateBySchema(e,t)}a($te,"dropCustomFunctionProjectValidator");function Vte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),skip_node_modules:Te.boolean()});return si.validateBySchema(e,t)}a(Vte,"packageComponentValidator");function Yte(e){let t=Te.object({project:Te.string().pattern(ri).required().messages({"string.pattern.base":Zt.BAD_PROJECT_NAME}),payload:Te.string().optional().messages({"string.pattern.base":Zt.BAD_PACKAGE}),package:Te.string().optional()});return si.validateBySchema(e,t)}a(Yte,"deployComponentValidator")});var KE=T((nRe,$B)=>{"use strict";var $E=require("joi"),VE=require("path"),HB=require("fs-extra"),{exec:Kte}=require("child_process"),Wte=require("util"),qB=Wte.promisify(Kte),kl=A(),{handleHDBError:dc,hdb_errors:Qte}=Z(),{HTTP_STATUS_CODES:fc}=Qte,Vl=Q(),jte=Ve(),$l=U();Vl.initSync();var bR=Vl.get(kl.CONFIG_PARAMS.COMPONENTSROOT),GB="npm install --omit=dev --json",zte=`${GB} --dry-run`;$B.exports={installModules:ere,auditModules:tre,installAllRootModules:Jte,uninstallRootModule:Xte,linkHarperdb:Zte};async function Jte(e=!1){await YE(),await Yl(e?"npm install --ignore-scripts":"npm install",Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(Jte,"installAllRootModules");async function Xte(e){await Yl(`npm uninstall ${e}`,Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(Xte,"uninstallRootModule");async function Zte(){await YE(),await Yl(`npm link ${kl.PACKAGE_ROOT}`,Vl.get(kl.CONFIG_PARAMS.ROOTPATH))}a(Zte,"linkHarperdb");async function Yl(e,t=void 0){let{stdout:r,stderr:s}=await qB(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
11
11
  `,""));return $l.trace(r,s),r.replace(`
12
- `,"")}a(Yl,"runCommand");async function jte(e){$l.info(`starting installModules for request: ${e}`);let t=$B(e);if(t)throw _c(t,t.message,dc.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?Wte:FB;await YE(),await kB(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 l=VE.join(yR,u),_,d=null;try{let{stdout:f,stderr:E}=await GB(n,{cwd:l});_=f?f.replace(`
12
+ `,"")}a(Yl,"runCommand");async function ere(e){$l.info(`starting installModules for request: ${e}`);let t=kB(e);if(t)throw dc(t,t.message,fc.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?zte:GB;await YE(),await xB(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 _=VE.join(bR,u),l,d=null;try{let{stdout:f,stderr:E}=await qB(n,{cwd:_});l=f?f.replace(`
13
13
  `,""):null,d=E?E.replace(`
14
- `,""):null}catch(f){f.stderr?i[u].npm_error=xB(f.stderr):i[u].npm_error=f.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return $l.info(`finished installModules with response ${i}`),i}a(jte,"installModules");function xB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
15
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(xB,"parseNPMStdErr");async function Xte(e){$l.info(`starting auditModules for request: ${e}`);let t=$B(e);if(t)throw _c(t,t.message,dc.BAD_REQUEST);let{projects:r}=e;await YE(),await kB(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=VE.join(yR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Yl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=xB(u.stderr)}}return $l.info(`finished auditModules with response ${s}`),s}a(Xte,"auditModules");async function YE(){try{return await Yl("npm -v"),!0}catch{throw _c(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",dc.BAD_REQUEST,void 0,void 0,!0)}}a(YE,"checkNPMInstalled");async function kB(e){if(!Array.isArray(e)||e.length===0)throw _c(new Error,"projects argument must be an array with at least 1 element",dc.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=VE.join(yR,i.toString());if(!await qB.pathExists(o)){t.push(i);continue}let u=VE.join(o,"package.json");await qB.pathExists(u)||r.push(i)}if(t.length>0)throw _c(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,dc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw _c(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,dc.BAD_REQUEST,void 0,void 0,!0)}a(kB,"checkProjectPaths");function $B(e){let t=$E.object({projects:$E.array().min(1).items($E.string()).required(),dry_run:$E.boolean().default(!1)});return Kte.validateBySchema(e,t)}a($B,"modulesValidator")});var wR=p((uRe,zB)=>{"use strict";var fc=require("fs-extra"),IR=require("path"),WE=M(),YB=G(),QE=A(),QB=Q(),Zte=rt();zB.exports=ere;async function ere(){let e=tre(),t=QB.get(QE.CONFIG_PARAMS.ROOTPATH),r=IR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+QE.PACKAGE_ROOT}},n=IR.join(t,"node_modules");await fc.ensureDir(n);let i,o=!0,c=!1;try{i=await fc.readJson(r)}catch(u){if(YB.isEmptyOrZeroLength(e))return;if(u.code!==QE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!YB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await KB(l);s.dependencies[u]=_+l}if(!o){WE.notify("Installing components"),await WB(r,s,null);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await KB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(WE.notify("Removing component",u),c=!0);c&&(WE.notify("Updating components."),await WB(r,s,i))}a(ere,"installComponents");function tre(){let e=Zte.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 KB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":IR.extname(e)||await fc.pathExists(e)?"file:":"github:"}a(KB,"getPkgPrefix");async function WB(e,t,r){WE.trace("npm installing components package.json",t),await fc.writeFile(e,JSON.stringify(t,null," "));try{await KE().installAllRootModules(QB.get(QE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await fc.writeFile(e,JSON.stringify(r,null," ")):await fc.unlink(e),s}}a(WB,"installPackages")});var JE=p((dRe,XB)=>{"use strict";var Ge=require("fs-extra"),CR=require("fast-glob"),me=require("path"),jB=require("tar-fs"),_Re=require("uuid").v4,LR=require("normalize-path"),gn=HB(),It=M(),$e=A(),Et=Q(),zE=rt(),rre=G(),{PACKAGE_ROOT:sre}=A(),{handleHDBError:wt,hdb_errors:nre}=Z(),{basename:ire}=require("path"),ore=wR(),are=Q(),cre=A(),{Readable:ure}=require("stream"),{HDB_ERROR_MSGS:jo,HTTP_STATUS_CODES:Ct}=nre,lre=me.join(sre,"application-template"),JB=me.join(Et.get($e.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function _re(){It.trace("getting custom api status");let e={};try{e={port:Et.get($e.CONFIG_PARAMS.HTTP_PORT),directory:Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw wt(new Error,jo.FUNCTION_STATUS,Ct.INTERNAL_SERVER_ERROR,It.ERR,t)}return e}a(_re,"customFunctionsStatus");function dre(){It.trace("getting custom api endpoints");let e={},t=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT);try{CR.sync(LR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:CR.sync(LR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:CR.sync(LR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw wt(new Error,jo.GET_FUNCTIONS,Ct.INTERNAL_SERVER_ERROR,It.ERR,r)}return e}a(dre,"getCustomFunctions");function fre(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("getting custom api endpoint file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return Ge.readFileSync(o,{encoding:"utf8"})}catch(c){throw wt(new Error,jo.GET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(fre,"getCustomFunction");function Ere(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=gn.setCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("setting custom function file content");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return Ge.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw wt(new Error,jo.SET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(Ere,"setCustomFunction");function hre(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function file");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return Ge.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw wt(new Error,jo.DROP_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,o)}}a(hre,"dropCustomFunction");function mre(e){e.project&&(e.project=me.parse(e.project).name);let t=gn.addComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("adding component");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=me.join(r,s);return Ge.mkdirSync(n,{recursive:!0}),Ge.copySync(lre,n),`Successfully added project: ${s}`}catch(n){throw wt(new Error,jo.ADD_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,n)}}a(mre,"addComponent");function pre(e){e.project&&(e.project=me.parse(e.project).name);let t=gn.dropCustomFunctionProjectValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function project");let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=Et.get($e.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 zE.updateConfigValue($e.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return Ge.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw wt(new Error,jo.DROP_FUNCTION_PROJECT,Ct.INTERNAL_SERVER_ERROR,It.ERR,i)}}a(pre,"dropCustomFunctionProject");async function Sre(e){e.project&&(e.project=me.parse(e.project).name);let t=gn.packageComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;It.trace("packaging component",s);let n;try{n=await Ge.realpath(me.join(r,s))}catch(u){if(u.code!==$e.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ge.realpath(me.join(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===$e.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ge.ensureDir(JB);let i=me.join(JB,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),jB.pack(n,o).pipe(Ge.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ge.readFileSync(i,{encoding:"base64"});return await Ge.remove(i),{project:s,payload:c}}a(Sre,"packageComponent");async function Tre(e){e.project&&(e.project=me.parse(e.project).name);let t=gn.deployComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(It.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=me.join(r,s),i="file:"+o,await Ge.ensureDir(o);let f=ure.from(Buffer.from(n,"base64"));await new Promise((h,S)=>{f.pipe(jB.extract(o,{finish:h})).on("error",S)});let E=await Ge.readdir(o);E.length===1&&E[0]==="package"&&(await Ge.copy(me.join(o,"package"),o),await Ge.remove(me.join(o,"package")))}if(zE.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),!n){await ore();let f=are.get(cre.CONFIG_PARAMS.ROOTPATH);o=me.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(XE(),te(jE)),l;u.setErrorReporter(f=>l=f);let _=ire(o),d=u.component_errors.get(_);try{await u.loadComponent(o,c)}finally{u.component_errors.set(_,d)}if(l)throw l;return It.info("Installed component"),`Successfully deployed: ${s}`}a(Tre,"deployComponent");async function gre(){let e=zE.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 Ge.readdir(o,{withFileTypes:!0});for(let l of u){let _=l.name;if(_.startsWith(".")||_==="node_modules")continue;let d=me.join(o,_);if(l.isDirectory()||l.isSymbolicLink()){let f={name:_,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await Ge.stat(d),E={name:me.basename(_),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),{name:Et.get($e.CONFIG_PARAMS.COMPONENTSROOT).split(me.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(me.join(Et.get($e.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(XE(),te(jE)).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 Rre(e){let t=gn.getComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Ge.readFile(me.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file),r)}catch(s){throw s.code===$e.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(Rre,"getComponentFile");async function Are(e){let t=gn.setComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await Ge.ensureFile(s),await Ge.outputFile(s,e.payload,r)):await Ge.ensureDir(s),"Successfully set component: "+e.file}a(Are,"setComponentFile");async function Ore(e){let t=gn.dropComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Et.get($e.CONFIG_PARAMS.COMPONENTSROOT),r);return await Ge.pathExists(s)&&await Ge.remove(s),zE.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Ore,"dropComponent");XB.exports={customFunctionsStatus:_re,getCustomFunctions:dre,getCustomFunction:fre,setCustomFunction:Ere,dropCustomFunction:hre,addComponent:mre,dropCustomFunctionProject:pre,packageComponent:Sre,deployComponent:Tre,getComponents:gre,getComponentFile:Rre,setComponentFile:Are,dropComponent:Ore}});var DR=p((ERe,eH)=>{"use strict";var Rn=require("joi"),ZB=Ye();eH.exports={readTransactionLogValidator:Nre,deleteTransactionLogsBeforeValidator:bre};function Nre(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),from:Rn.date().timestamp(),to:Rn.date().timestamp(),limit:Rn.number().min(1)});return ZB.validateBySchema(e,t)}a(Nre,"readTransactionLogValidator");function bre(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),timestamp:Rn.date().timestamp().required()});return ZB.validateBySchema(e,t)}a(bre,"deleteTransactionLogsBeforeValidator")});var eh=p((mRe,iH)=>{"use strict";var PR=A(),ZE=nt(),tH=G(),rH=Q(),sH=zn(),{handleHDBError:Ec,hdb_errors:yre}=Z(),{HTTP_STATUS_CODES:hc}=yre,{readTransactionLogValidator:Ire,deleteTransactionLogsBeforeValidator:wre}=DR(),nH="This operation relies on clustering and cannot run with it disable.",Cre="Logs successfully deleted from transaction log.",Lre="All logs successfully deleted from transaction log.";iH.exports={readTransactionLog:Dre,deleteTransactionLogsBefore:Pre};async function*Dre(e){let t=Ire(e);if(t)throw Ec(t,t.message,hc.BAD_REQUEST,void 0,void 0,!0);if(!rH.get(PR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ec(new Error,nH,hc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=tH.checkSchemaTableExist(r,s);if(n)throw Ec(new Error,n,hc.NOT_FOUND,void 0,void 0,!0);let i=sH.createNatsTableStreamName(r,s),o=await ZE.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 l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===PR.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(Dre,"readTransactionLog");async function Pre(e){let t=wre(e);if(t)throw Ec(t,t.message,hc.BAD_REQUEST,void 0,void 0,!0);if(!rH.get(PR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ec(new Error,nH,hc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=tH.checkSchemaTableExist(r,s);if(i)throw Ec(new Error,i,hc.NOT_FOUND,void 0,void 0,!0);let o=sH.createNatsTableStreamName(r,s),{jsm:c}=await ZE.getNATSReferences(),u=await ZE.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=Cre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,_=Lre):d=(await ZE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(Pre,"deleteTransactionLogsBefore")});var aH=p((SRe,oH)=>{"use strict";var MR=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}};oH.exports=MR});var uH=p((gRe,cH)=>{"use strict";var UR=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};cH.exports=UR});var BR=p((ARe,_H)=>{"use strict";var lH=aH(),Mre=uH(),{HDB_ERROR_MSGS:Ure}=Pr(),vR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Ure.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 lH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Mre(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 lH(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}};_H.exports=vR});var nh=p((NRe,IH)=>{"use strict";var HR=_r(),th=lr(),ds=Vf(),Ql=Bi(),qR=Bo(),vre=ag(),Bre=bM(),zl=dr(),rh=zf(),At=M(),Hre=Sg(),qre=Ol(),Gre=jg(),Fre=dE(),xre=EE(),kre=Xg(),$re=pE(),Vre=TE(),GR=RE(),ni=G(),Yre=Rv(),FR=OE(),EH=Qo(),_s=A(),hH=RB(),Kre=jn(),mH=Tl(),pH=(xE(),te(Fl)),SH=rt(),Kr=JE(),Wre=require("alasql"),TH=eh(),gH=KE(),RH=BR(),{handleHDBError:Or,hdb_errors:AH}=Z(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Kl}=AH,H=new Map,OH="delete",ji="insert",ii="read",Xo="update",Wl="describe",dH=Ql.describeSchema.name,fH=Ql.describeTable.name,NH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Qre="catchup",zre="handleGetJob",Jre="handleGetJobsByStartDate",sh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},jre=[ds.createTable.name,ds.createAttribute.name,ds.dropTable.name,ds.dropAttribute.name],bH={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(HR.insert.name,new x(!1,[ji]));H.set(HR.update.name,new x(!1,[Xo]));H.set(HR.upsert.name,new x(!1,[ji,Xo]));H.set(th.searchByConditions.name,new x(!1,[ii]));H.set(th.searchByHash.name,new x(!1,[ii]));H.set(th.searchByValue.name,new x(!1,[ii]));H.set(th.search.name,new x(!1,[ii]));H.set(ds.createSchema.name,new x(!0,[]));H.set(ds.createTable.name,new x(!0,[]));H.set(ds.createAttribute.name,new x(!1,[ji]));H.set(ds.dropSchema.name,new x(!0,[]));H.set(ds.dropTable.name,new x(!0,[]));H.set(ds.dropAttribute.name,new x(!0,[]));H.set(Ql.describeSchema.name,new x(!1,[ii]));H.set(Ql.describeTable.name,new x(!1,[ii]));H.set(qR.deleteRecord.name,new x(!1,[OH]));H.set(zl.addUser.name,new x(!0,[]));H.set(zl.alterUser.name,new x(!0,[]));H.set(zl.dropUser.name,new x(!0,[]));H.set(zl.listUsersExternal.name,new x(!0,[]));H.set(rh.listRoles.name,new x(!0,[]));H.set(rh.addRole.name,new x(!0,[]));H.set(rh.alterRole.name,new x(!0,[]));H.set(rh.dropRole.name,new x(!0,[]));H.set(Hre.name,new x(!0,[]));H.set(qre.name,new x(!0,[]));H.set(Gre.name,new x(!0,[]));H.set(Fre.name,new x(!0,[]));H.set(xre.name,new x(!0,[]));H.set(kre.name,new x(!0,[]));H.set(GR.setRoutes.name,new x(!0,[]));H.set(GR.getRoutes.name,new x(!0,[]));H.set(GR.deleteRoutes.name,new x(!0,[]));H.set(SH.setConfiguration.name,new x(!0,[]));H.set($re.clusterStatus.name,new x(!0,[]));H.set(Vre.name,new x(!0,[]));H.set(FR.getFingerprint.name,new x(!0,[]));H.set(FR.setLicense.name,new x(!0,[]));H.set(qR.deleteFilesBefore.name,new x(!0,[]));H.set(qR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(EH.restart.name,new x(!0,[]));H.set(EH.restartService.name,new x(!0,[]));H.set(vre.name,new x(!0,[]));H.set(Bre.name,new x(!0,[ii]));H.set(Kre.systemInformation.name,new x(!0,[]));H.set(SH.getConfiguration.name,new x(!0,[]));H.set(TH.readTransactionLog.name,new x(!0,[]));H.set(TH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(gH.installModules.name,new x(!0,[]));H.set(gH.auditModules.name,new x(!0,[]));H.set(mH.createTokens.name,new x(!1,[]));H.set(mH.refreshOperationToken.name,new x(!1,[]));H.set(pH.login.name,new x(!1,[]));H.set(pH.logout.name,new x(!1,[]));H.set(Kr.customFunctionsStatus.name,new x(!0,[]));H.set(Kr.getCustomFunctions.name,new x(!0,[]));H.set(Kr.getComponents.name,new x(!0,[]));H.set(Kr.getComponentFile.name,new x(!0,[]));H.set(Kr.setComponentFile.name,new x(!0,[]));H.set(Kr.dropComponent.name,new x(!0,[]));H.set(Kr.getCustomFunction.name,new x(!0,[]));H.set(Kr.setCustomFunction.name,new x(!0,[]));H.set(Kr.dropCustomFunction.name,new x(!0,[]));H.set(Kr.addComponent.name,new x(!0,[]));H.set(Kr.dropCustomFunctionProject.name,new x(!0,[]));H.set(Kr.packageComponent.name,new x(!0,[]));H.set(Kr.deployComponent.name,new x(!0,[]));H.set(FR.getRegistrationInfo.name,new x(!1,[]));H.set(zl.userInfo.name,new x(!1,[]));H.set(Ql.describeAll.name,new x(!1,[]));H.set(zre,new x(!1,[]));H.set(Jre,new x(!0,[]));H.set(Qre,new x(!0,[]));H.set(sh.CSV_DATA_LOAD,new x(!1,[ji,Xo]));H.set(sh.CSV_URL_LOAD,new x(!1,[ji,Xo]));H.set(sh.CSV_FILE_LOAD,new x(!1,[ji,Xo]));H.set(sh.IMPORT_FROM_S3,new x(!1,[ji,Xo]));H.set(bH.EXPORT_TO_S3,new x(!0,[]));H.set(bH.EXPORT_LOCAL,new x(!0,[]));H.set(_s.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[OH]));H.set(_s.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[ii]));H.set(_s.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[ji]));H.set(_s.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Xo]));IH.exports={verifyPerms:Zre,verifyPermsAst:Xre,verifyBulkLoadAttributePerms:tse};function Xre(e,t,r){if(ni.isEmptyOrZeroLength(e))throw At.info("verify_perms_ast has an empty user parameter"),Or(new Error);if(ni.isEmptyOrZeroLength(t))throw At.info("verify_perms_ast has an empty user parameter"),Or(new Error);if(ni.isEmptyOrZeroLength(r))throw At.info("verify_perms_ast has a null operation parameter"),Or(new Error);try{let s=new RH,n=new Yre(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."),Or(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&NH[r])throw Or(new Error,Ft.DROP_SYSTEM,Kl.FORBIDDEN);if(c&&!u)return null;let l=hH.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof Wre.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let f=n.getTablesBySchemaName(i[d]);f&&o.set(i[d],f)}let _=yH(t,r,o,s);return _||(o.forEach((d,f)=>{for(let E=0;E<d.length;E++){let h=n.getAttributesBySchemaTableName(f,d[E]),S=kR(t.role.permission,f,d[E]);xR(h,S,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw Or(s)}}a(Xre,"verifyPermsAst");function Zre(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw At.info("null required parameter in verifyPerms"),Or(new Error,Ft.DEFAULT_INVALID_REQUEST,Kl.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 RH;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(Ft.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(_s.SYSTEM_SCHEMA_NAME)||n===_s.SYSTEM_SCHEMA_NAME;if(_&&NH[r])throw Or(new Error,Ft.DROP_SYSTEM,Kl.FORBIDDEN);if(u&&!_||l===!0&&(r===ds.createSchema.name||r===ds.dropSchema.name))return null;if(jre.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=hH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===dH||r===fH){if(n===_s.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===dH&&(!d[n]||!d[n][Wl]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(n));if(r===fH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Wl]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(n,i))}}let f=yH(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&&_s.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],m=d[n].tables[i];m[_s.PERMS_CRUD_ENUM.READ]&&(m.attribute_permissions.length>0?m.attribute_permissions.filter(g=>g[_s.PERMS_CRUD_ENUM.READ]).forEach(g=>{S.push(g.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let E=ese(e),h=kR(e.hdb_user.role.permission,n,i);return xR(E,h,r,i,n,c,s),c.getPermsResponse()}a(Zre,"verifyPerms");function yH(e,t,r,s,n){if(ni.arrayHasEmptyValues([e,t,r]))throw At.info("hasPermissions has an invalid parameter"),Or(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.`),Or(new Error,Ft.OP_NOT_FOUND(t),Kl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return At.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Wl]===!1){s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Wl]===!1)s.addInvalidItem(Ft.TABLE_NOT_FOUND(u,_));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 S=E[h],m=d[S];(m==null||m===!1)&&(At.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(S))}f.length>0&&s.addUnauthorizedTable(u,_,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw At.error(E),At.error(f),Or(AH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(yH,"hasPermissions");function xR(e,t,r,s,n,i,o){if(!e||!t)throw At.info("no attributes specified in checkAttributePerms."),Or(new Error);let c=H.get(r).perms;if(!c||c==="")throw At.info(`no permissions found for ${r} in checkAttributePerms().`),Or(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 _ of e){let d=t.get(_);if(d){if(d[Wl]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let f of c){if(_s.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ii)throw Or(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Kl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(xR,"checkAttributePerms");function ese(e){let t=new Set;try{if(e.action)return t;if(e.operation===_s.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(ese,"getRecordAttributes");function kR(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(kR,"getAttributePermissions");function tse(e,t,r,s,n,i,o){let c=new Set(i),u=kR(e,s,n);xR(c,u,t,n,s,o,r)}a(tse,"verifyBulkLoadAttributePerms")});var oh=p((yRe,PH)=>{"use strict";PH.exports={evaluateSQL:Ese,processAST:DH,convertSQLToAST:LH,checkASTPermissions:CH};var rse=_r(),wH=require("util"),sse=wH.callbackify(rse.insert),nse=lr().search,ise=HP().update,ose=wH.callbackify(ise),ase=GP().convertDelete,Xi=require("alasql"),cse=nh(),ih=M(),use=Zd(),lse=G(),Jl=A(),{hdb_errors:_se,handleHDBError:$R}=Z(),{HTTP_STATUS_CODES:VR}=_se;use(Xi);var dse=403,fse="There was a problem performing this insert. Please check the logs and try again.",YR=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Ese(e,t){let r=e.parsed_sql_object;if(!r){r=LH(e.sql);let s,n=r.ast.statements[0];if(n instanceof Xi.yy.Insert?s=n.into.databaseid:n instanceof Xi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Xi.yy.Update||n instanceof Xi.yy.Delete?s=n.table.databaseid:ih.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Xi.yy.Select)&&lse.isEmptyOrZeroLength(s))return t("No schema specified",null)}DH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Ese,"evaluateSQL");function CH(e,t){let r;try{r=cse.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(CH,"checkASTPermissions");function LH(e){let t=new YR;if(!e)throw $R(new Error,"The 'sql' parameter is missing from the request body",VR.BAD_REQUEST);try{let r=e.trim(),s=Xi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
16
- `);throw s[1]?$R(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,VR.BAD_REQUEST):$R(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",VR.BAD_REQUEST)}return t}a(LH,"convertSQLToAST");function DH(e,t,r){try{let s=hse;if(!e.bypass_auth&&!t.permissions_checked){let i=CH(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 Jl.VALID_SQL_OPS_ENUM.SELECT:s=nse,n=t.ast.statements[0];break;case Jl.VALID_SQL_OPS_ENUM.INSERT:s=mse;break;case Jl.VALID_SQL_OPS_ENUM.UPDATE:s=ose;break;case Jl.VALID_SQL_OPS_ENUM.DELETE:s=ase;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(DH,"processAST");function hse(e,t){ih.info(e),t("unknown sql statement")}a(hse,"nullFunction");function mse({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=pse(i,e.values)}catch(o){return r(o)}sse(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){ih.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(mse,"convertInsert");function pse(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]]=Xi.compile(`SELECT ${n.toString()} AS [${Jl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ih.error(r),new Error(fse)}}a(pse,"createDataObjects")});var KR=p((wRe,UH)=>{"use strict";var{S3:Sse,GetObjectCommand:Tse}=require("@aws-sdk/client-s3");UH.exports={getFileStreamFromS3:gse,getS3AuthObj:MH};async function gse(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await MH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Tse(r))).Body}a(gse,"getFileStreamFromS3");function MH(e,t,r){return new Sse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(MH,"getS3AuthObj")});var ah=p((LRe,VH)=>{"use strict";var HH=lr(),Rse=oh(),Ase=KR(),{AsyncParser:Ose,Transform:Nse}=require("json2csv"),Xl=require("stream"),Wr=G(),WR=require("fs-extra"),bse=require("path"),Es=M(),{promisify:qH}=require("util"),jl=G(),{handleHDBError:ht,hdb_errors:yse}=Z(),{HDB_ERROR_MSGS:Nr,HTTP_STATUS_CODES:mt}=yse,{streamAsJSON:Ise}=KT(),{Upload:wse}=require("@aws-sdk/lib-storage"),vH=["search_by_value","search_by_hash","sql"],BH=["json","csv"],GH="json",FH="csv",Cse="Successfully exported JSON locally.",Lse="Successfully exported CSV locally.",Dse=1e3,Pse=HH.searchByHash,Mse=HH.searchByValue,Use=qH(Rse.evaluateSQL),vse=qH(Xl.finished);VH.exports={export_to_s3:Gse,export_local:Bse,toCsvStream:xH};async function Bse(e){Es.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=kH(e);if(!Wr.isEmpty(t))throw Es.error(t),ht(new Error,t,mt.BAD_REQUEST,void 0,void 0,!0);if(Wr.isEmpty(e.path))throw Es.error(Nr.MISSING_VALUE("path")),ht(new Error,Nr.MISSING_VALUE("path"),mt.BAD_REQUEST,void 0,void 0,!0);let r=(Wr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(bse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Wr.buildFolderPath(e.path,r);await Hse(e.path);let n=await $H(e);return await qse(s,e.format,n)}a(Bse,"export_local");async function Hse(e){if(Es.trace("in confirmPath"),Wr.isEmptyOrZeroLength(e))throw ht(new Error,`Invalid path: ${e}`,mt.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await WR.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,Es.error(s),ht(new Error,s,mt.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 Es.error(r),ht(new Error,r,mt.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Hse,"confirmPath");async function qse(e,t,r){if(Es.trace("in saveToLocal"),jl.isEmptyOrZeroLength(e))throw ht(new Error,Nr.INVALID_VALUE("file_path"),mt.BAD_REQUEST,void 0,void 0,!0);if(jl.isEmptyOrZeroLength(t))throw ht(new Error,Nr.INVALID_VALUE("Source format"),mt.BAD_REQUEST,void 0,void 0,!0);if(jl.isEmpty(r))throw ht(new Error,Nr.NOT_FOUND("Data"),mt.BAD_REQUEST,void 0,void 0,!0);if(t===GH){let s=WR.createWriteStream(e);return Ise(r).pipe(s),await vse(s),{message:Cse,path:e}}else if(t===FH){let s=WR.createWriteStream(e),n=Xl.Readable.from(r),i={},o={objectMode:!0};return await new Ose(i,o).fromInput(n).toOutput(s).promise(!1),{message:Lse,path:e}}throw ht(new Error,Nr.INVALID_VALUE("format"),mt.BAD_REQUEST)}a(qse,"saveToLocal");async function Gse(e){if(!e.s3||Object.keys(e.s3).length===0)throw ht(new Error,Nr.MISSING_VALUE("S3 object"),mt.BAD_REQUEST);if(Wr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ht(new Error,Nr.MISSING_VALUE("aws_access_key_id"),mt.BAD_REQUEST);if(Wr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ht(new Error,Nr.MISSING_VALUE("aws_secret_access_key"),mt.BAD_REQUEST);if(Wr.isEmptyOrZeroLength(e.s3.bucket))throw ht(new Error,Nr.MISSING_VALUE("bucket"),mt.BAD_REQUEST);if(Wr.isEmptyOrZeroLength(e.s3.key))throw ht(new Error,Nr.MISSING_VALUE("key"),mt.BAD_REQUEST);if(Wr.isEmptyOrZeroLength(e.s3.region))throw ht(new Error,Nr.MISSING_VALUE("region"),mt.BAD_REQUEST);let t=kH(e);if(!Wr.isEmpty(t))throw ht(new Error,t,mt.BAD_REQUEST);Es.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await $H(e)}catch(u){throw Es.error(u),u}let s,n=await Ase.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xl.PassThrough;if(e.format===FH){i=e.s3.key+".csv";let u=xH(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===GH){i=e.s3.key+".json";let u=new Xl.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,f]of r.entries()){let E=d===l-1?JSON.stringify(f):JSON.stringify(f)+",";_+=E,d!==0&&d%Dse===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw ht(new Error,Nr.INVALID_VALUE("format"),mt.BAD_REQUEST);return new wse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Gse,"export_to_s3");function xH(e){let t=Xl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Nse(r,s);return t.pipe(n)}a(xH,"toCsvStream");function kH(e){if(Es.trace("in exportCoreValidation"),Wr.isEmpty(e.format))return"format missing";if(BH.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${BH.join(", ")}`;let t=e.search_operation.operation;if(Wr.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(kH,"exportCoreValidation");async function $H(e){Es.trace("in getRecords");let t,r;if(jl.isEmpty(e.search_operation)||jl.isEmptyOrZeroLength(e.search_operation.operation))throw ht(new Error,Nr.INVALID_VALUE("Search operation"),mt.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Mse;break;case"search_by_hash":t=Pse;break;case"sql":t=Use;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Es.error(r),ht(new Error,r,mt.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a($H,"getRecords")});var XH={};Fe(XH,{contentTypes:()=>zR,findBestSerializer:()=>lh,getDeserializer:()=>mc,registerContentHandlers:()=>JR,serialize:()=>_h,serializeMessage:()=>Ji});function Fse(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function JR(e){e.register(kse,{serializers:[{regex:/^application\/json$/,serializer:ch.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Zo.EncoderStream(Zl).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uh.Readable.from((0,An.encodeIter)(t,Zl)):(0,An.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,QR.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,An.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 lh(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 _){let S=h.indexOf("=");f[h.substring(0,S)]=h.substring(S+1)}d=+f.q;let E=xt.get(l);if(E){let h=(E.q||1)*d;h>n&&(s=E,i=E.type||l,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(xt.keys()).join(", "))}};s=xt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function _h(e,t,r){let s=KH&&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=lh(t);if(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>KH?(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;let r=t.serialize;if(r)return r(e);let s=lh(t);return r=t.serialize=s.serializer.serialize,r(e)}function $se(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 mc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=xt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=xt.get(e)?.deserialize||WH(e,s);return o=>$se(o).then(i)}return xt.get(e)?.deserialize||WH(e,s)}function WH(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=>({contentType:e,data:r})}function Vse(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 ch,QR,An,Zo,oi,uh,QH,zH,JH,Zl,xt,zR,YH,jH,xse,kse,KH,lc=ge(()=>{ch=P(KT()),QR=P(ah()),An=require("msgpackr"),Zo=require("cbor-x"),oi=require("zlib"),uh=require("stream");Dr();QH=require("../index"),zH=P(Q()),JH=P(A()),Zl={useRecords:!1,useToJSON:!0},xt=new Map,zR=xt;gt.contentTypes=zR;(0,QH._assignPackageExport)("contentTypes",zR);xt.set("application/json",{serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});YH=new Zo.Encoder(Zl);xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zo.EncoderStream(Zl).end(e)},serialize:YH.encode,deserialize:YH.decode,q:1});xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uh.Readable.from((0,An.encodeIter)(e,Zl)):(0,An.pack)(e)},serialize:An.pack,deserialize:An.unpack,q:.9});xt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,QR.toCsvStream)(e)},q:.1});xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});xt.set("text/event-stream",{serializeStream:function(e){return uh.Readable.from(Vse(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+`
14
+ `,""):null}catch(f){f.stderr?i[u].npm_error=FB(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 $l.info(`finished installModules with response ${i}`),i}a(ere,"installModules");function FB(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
15
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(FB,"parseNPMStdErr");async function tre(e){$l.info(`starting auditModules for request: ${e}`);let t=kB(e);if(t)throw dc(t,t.message,fc.BAD_REQUEST);let{projects:r}=e;await YE(),await xB(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=VE.join(bR,o);s[o]={npm_output:null,npm_error:null};try{let u=await Yl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=FB(u.stderr)}}return $l.info(`finished auditModules with response ${s}`),s}a(tre,"auditModules");async function YE(){try{return await Yl("npm -v"),!0}catch{throw dc(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",fc.BAD_REQUEST,void 0,void 0,!0)}}a(YE,"checkNPMInstalled");async function xB(e){if(!Array.isArray(e)||e.length===0)throw dc(new Error,"projects argument must be an array with at least 1 element",fc.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=VE.join(bR,i.toString());if(!await HB.pathExists(o)){t.push(i);continue}let u=VE.join(o,"package.json");await HB.pathExists(u)||r.push(i)}if(t.length>0)throw dc(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,fc.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw dc(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,fc.BAD_REQUEST,void 0,void 0,!0)}a(xB,"checkProjectPaths");function kB(e){let t=$E.object({projects:$E.array().min(1).items($E.string()).required(),dry_run:$E.boolean().default(!1)});return jte.validateBySchema(e,t)}a(kB,"modulesValidator")});var IR=T((oRe,QB)=>{"use strict";var Ec=require("fs-extra"),yR=require("path"),WE=U(),VB=G(),QE=A(),WB=Q(),rre=tt();QB.exports=sre;async function sre(){let e=nre(),t=WB.get(QE.CONFIG_PARAMS.ROOTPATH),r=yR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+QE.PACKAGE_ROOT}},n=yR.join(t,"node_modules");await Ec.ensureDir(n);let i,o=!0,c=!1;try{i=await Ec.readJson(r)}catch(u){if(VB.isEmptyOrZeroLength(e))return;if(u.code!==QE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!VB.isEmptyOrZeroLength(e)){for(let{name:u,package:_}of e){let l=await YB(_);s.dependencies[u]=l+_}if(!o){WE.notify("Installing components"),await KB(r,s,null);return}for(let{name:u,package:_}of e){let l=i.dependencies[u],d=await YB(_);if(l===void 0||l!==d+_){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(WE.notify("Removing component",u),c=!0);c&&(WE.notify("Updating components."),await KB(r,s,i))}a(sre,"installComponents");function nre(){let e=rre.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(nre,"getComponentsConfig");async function YB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":yR.extname(e)||await Ec.pathExists(e)?"file:":"github:"}a(YB,"getPkgPrefix");async function KB(e,t,r){WE.trace("npm installing components package.json",t),await Ec.writeFile(e,JSON.stringify(t,null," "));try{await KE().installAllRootModules(WB.get(QE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}catch(s){throw r?await Ec.writeFile(e,JSON.stringify(r,null," ")):await Ec.unlink(e),s}}a(KB,"installPackages")});var zE=T((uRe,JB)=>{"use strict";var He=require("fs-extra"),wR=require("fast-glob"),he=require("path"),zB=require("tar-fs"),cRe=require("uuid").v4,CR=require("normalize-path"),gn=BB(),It=U(),ke=A(),dt=Q(),jE=tt(),ire=G(),{PACKAGE_ROOT:ore}=A(),{handleHDBError:wt,hdb_errors:are}=Z(),{basename:cre}=require("path"),ure=IR(),lre=Q(),_re=A(),{Readable:dre}=require("stream"),{HDB_ERROR_MSGS:Jo,HTTP_STATUS_CODES:Ct}=are,fre=he.join(ore,"application-template"),jB=he.join(dt.get(ke.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function Ere(){It.trace("getting custom api status");let e={};try{e={port:dt.get(ke.CONFIG_PARAMS.HTTP_PORT),directory:dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),is_enabled:!0}}catch(t){throw wt(new Error,Jo.FUNCTION_STATUS,Ct.INTERNAL_SERVER_ERROR,It.ERR,t)}return e}a(Ere,"customFunctionsStatus");function hre(){It.trace("getting custom api endpoints");let e={},t=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT);try{wR.sync(CR(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:wR.sync(CR(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:wR.sync(CR(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw wt(new Error,Jo.GET_FUNCTIONS,Ct.INTERNAL_SERVER_ERROR,It.ERR,r)}return e}a(hre,"getCustomFunctions");function mre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("getting custom api endpoint file content");let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e,o=he.join(r,s,n,i+".js");try{return He.readFileSync(o,{encoding:"utf8"})}catch(c){throw wt(new Error,Jo.GET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(mre,"getCustomFunction");function pre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.setCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("setting custom function file content");let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i,function_content:o}=e;try{return He.outputFileSync(he.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw wt(new Error,Jo.SET_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,c)}}a(pre,"setCustomFunction");function Sre(e){e.project&&(e.project=he.parse(e.project).name),e.file&&(e.file=he.parse(e.file).name);let t=gn.getDropCustomFunctionValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function file");let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s,type:n,file:i}=e;try{return He.unlinkSync(he.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw wt(new Error,Jo.DROP_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,o)}}a(Sre,"dropCustomFunction");function Tre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.addComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("adding component");let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;try{let n=he.join(r,s);return He.mkdirSync(n,{recursive:!0}),He.copySync(fre,n),`Successfully added project: ${s}`}catch(n){throw wt(new Error,Jo.ADD_FUNCTION,Ct.INTERNAL_SERVER_ERROR,It.ERR,n)}}a(Tre,"addComponent");function gre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.dropCustomFunctionProjectValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);It.trace("dropping custom function project");let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e,n=dt.get(ke.CONFIG_PARAMS.APPS);if(!ire.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 jE.updateConfigValue(ke.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=he.join(r,s);return He.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw wt(new Error,Jo.DROP_FUNCTION_PROJECT,Ct.INTERNAL_SERVER_ERROR,It.ERR,i)}}a(gre,"dropCustomFunctionProject");async function Rre(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.packageComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s}=e;It.trace("packaging component",s);let n;try{n=await He.realpath(he.join(r,s))}catch(u){if(u.code!==ke.NODE_ERROR_CODES.ENOENT)throw u;try{n=await He.realpath(he.join(dt.get(ke.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(_){if(_.code===ke.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await He.ensureDir(jB);let i=he.join(jB,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(he.join(n,"node_modules"))}),zB.pack(n,o).pipe(He.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=He.readFileSync(i,{encoding:"base64"});return await He.remove(i),{project:s,payload:c}}a(Rre,"packageComponent");async function Are(e){e.project&&(e.project=he.parse(e.project).name);let t=gn.deployComponentValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{project:s,payload:n,package:i}=e;if(It.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");let o;if(n){o=he.join(r,s),i="file:"+o,await He.ensureDir(o);let f=dre.from(Buffer.from(n,"base64"));await new Promise((h,p)=>{f.pipe(zB.extract(o,{finish:h})).on("error",p)});let E=await He.readdir(o);E.length===1&&E[0]==="package"&&(await He.copy(he.join(o,"package"),o),await He.remove(he.join(o,"package")))}if(jE.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),!n){await ure();let f=lre.get(_re.CONFIG_PARAMS.ROOTPATH);o=he.join(f,"node_modules",s)}let c=new Map;c.isWorker=!0;let u=(XE(),te(JE)),_;u.setErrorReporter(f=>_=f);let l=cre(o),d=u.component_errors.get(l);try{await u.loadComponent(o,c)}finally{u.component_errors.set(l,d)}if(_)throw _;return It.info("Installed component"),`Successfully deployed: ${s}`}a(Are,"deployComponent");async function Ore(){let e=jE.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 He.readdir(o,{withFileTypes:!0});for(let _ of u){let l=_.name;if(l.startsWith(".")||l==="node_modules")continue;let d=he.join(o,l);if(_.isDirectory()||_.isSymbolicLink()){let f={name:l,entries:[]};c.entries.push(f),await r(d,f)}else{let f=await He.stat(d),E={name:he.basename(l),mtime:f.mtime,size:f.size};c.entries.push(E)}}return c},"walk_dir"),s=await r(dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),{name:dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT).split(he.sep).slice(-1).pop(),entries:t});for(let o of s.entries)if(o.package){let c=await r(he.join(dt.get(ke.CONFIG_PARAMS.ROOTPATH),"node_modules",o.name),{name:o.name,entries:[]});Object.assign(o,c)}let i=(XE(),te(JE)).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(Ore,"getComponents");async function Nre(e){let t=gn.getComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await He.readFile(he.join(dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file),r)}catch(s){throw s.code===ke.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${he.join(e.project,e.file)}'`):s}}a(Nre,"getComponentFile");async function bre(e){let t=gn.setComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=he.join(dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),e.project,e.file);return e.payload!==void 0?(await He.ensureFile(s),await He.outputFile(s,e.payload,r)):await He.ensureDir(s),"Successfully set component: "+e.file}a(bre,"setComponentFile");async function yre(e){let t=gn.dropComponentFileValidator(e);if(t)throw wt(t,t.message,Ct.BAD_REQUEST);let r=e.file?he.join(e.project,e.file):e.project,s=he.join(dt.get(ke.CONFIG_PARAMS.COMPONENTSROOT),r);return await He.pathExists(s)&&await He.remove(s),jE.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(yre,"dropComponent");JB.exports={customFunctionsStatus:Ere,getCustomFunctions:hre,getCustomFunction:mre,setCustomFunction:pre,dropCustomFunction:Sre,addComponent:Tre,dropCustomFunctionProject:gre,packageComponent:Rre,deployComponent:Are,getComponents:Ore,getComponentFile:Nre,setComponentFile:bre,dropComponent:yre}});var LR=T((_Re,ZB)=>{"use strict";var Rn=require("joi"),XB=Ve();ZB.exports={readTransactionLogValidator:Ire,deleteTransactionLogsBeforeValidator:wre};function Ire(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),from:Rn.date().timestamp(),to:Rn.date().timestamp(),limit:Rn.number().min(1)});return XB.validateBySchema(e,t)}a(Ire,"readTransactionLogValidator");function wre(e){let t=Rn.object({schema:Rn.string().required(),table:Rn.string().required(),timestamp:Rn.date().timestamp().required()});return XB.validateBySchema(e,t)}a(wre,"deleteTransactionLogsBeforeValidator")});var eh=T((fRe,nH)=>{"use strict";var DR=A(),ZE=st(),eH=G(),tH=Q(),rH=jn(),{handleHDBError:hc,hdb_errors:Cre}=Z(),{HTTP_STATUS_CODES:mc}=Cre,{readTransactionLogValidator:Lre,deleteTransactionLogsBeforeValidator:Dre}=LR(),sH="This operation relies on clustering and cannot run with it disable.",Pre="Logs successfully deleted from transaction log.",Mre="All logs successfully deleted from transaction log.";nH.exports={readTransactionLog:Ure,deleteTransactionLogsBefore:vre};async function*Ure(e){let t=Lre(e);if(t)throw hc(t,t.message,mc.BAD_REQUEST,void 0,void 0,!0);if(!tH.get(DR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw hc(new Error,sH,mc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=eH.checkSchemaTableExist(r,s);if(n)throw hc(new Error,n,mc.NOT_FOUND,void 0,void 0,!0);let i=rH.createNatsTableStreamName(r,s),o=await ZE.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===DR.OPERATIONS_ENUM.DELETE&&(_.hash_values=c?.entry?.hash_values),yield _}}a(Ure,"readTransactionLog");async function vre(e){let t=Dre(e);if(t)throw hc(t,t.message,mc.BAD_REQUEST,void 0,void 0,!0);if(!tH.get(DR.CONFIG_PARAMS.CLUSTERING_ENABLED))throw hc(new Error,sH,mc.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=eH.checkSchemaTableExist(r,s);if(i)throw hc(new Error,i,mc.NOT_FOUND,void 0,void 0,!0);let o=rH.createNatsTableStreamName(r,s),{jsm:c}=await ZE.getNATSReferences(),u=await ZE.getStreamInfo(o),_=new Date(u.state.first_ts).getTime();if(n<=_)return`No transactions exist before: ${n}`;let l=Pre,d,f=new Date(u.state.last_ts).getTime();return n>f?(d=u.state.last_seq+1,l=Mre):d=(await ZE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),l}a(vre,"deleteTransactionLogsBefore")});var oH=T((hRe,iH)=>{"use strict";var PR=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}};iH.exports=PR});var cH=T((pRe,aH)=>{"use strict";var MR=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};aH.exports=MR});var vR=T((TRe,lH)=>{"use strict";var uH=oH(),Bre=cH(),{HDB_ERROR_MSGS:Hre}=Mr(),UR=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Hre.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 uH(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Bre(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 uH(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}};lH.exports=UR});var nh=T((RRe,yH)=>{"use strict";var BR=Er(),th=fr(),hs=Kf(),Ql=vi(),HR=Ho(),qre=og(),Gre=bM(),jl=hr(),rh=Jf(),Rt=U(),Fre=pg(),xre=Nl(),kre=zg(),$re=EE(),Vre=mE(),Yre=Jg(),Kre=TE(),Wre=RE(),qR=OE(),ni=G(),Qre=Rv(),GR=bE(),fH=Qo(),Es=A(),EH=gB(),jre=Jn(),hH=gl(),mH=(xE(),te(Fl)),pH=tt(),Qr=zE(),zre=require("alasql"),SH=eh(),TH=KE(),gH=vR(),{handleHDBError:br,hdb_errors:RH}=Z(),{HDB_ERROR_MSGS:Ft,HTTP_STATUS_CODES:Kl}=RH,H=new Map,AH="delete",Xi="insert",ii="read",Xo="update",Wl="describe",_H=Ql.describeSchema.name,dH=Ql.describeTable.name,OH={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Jre="catchup",Xre="handleGetJob",Zre="handleGetJobsByStartDate",sh={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},ese=[hs.createTable.name,hs.createAttribute.name,hs.dropTable.name,hs.dropAttribute.name],NH={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(BR.insert.name,new x(!1,[Xi]));H.set(BR.update.name,new x(!1,[Xo]));H.set(BR.upsert.name,new x(!1,[Xi,Xo]));H.set(th.searchByConditions.name,new x(!1,[ii]));H.set(th.searchByHash.name,new x(!1,[ii]));H.set(th.searchByValue.name,new x(!1,[ii]));H.set(th.search.name,new x(!1,[ii]));H.set(hs.createSchema.name,new x(!0,[]));H.set(hs.createTable.name,new x(!0,[]));H.set(hs.createAttribute.name,new x(!1,[Xi]));H.set(hs.dropSchema.name,new x(!0,[]));H.set(hs.dropTable.name,new x(!0,[]));H.set(hs.dropAttribute.name,new x(!0,[]));H.set(Ql.describeSchema.name,new x(!1,[ii]));H.set(Ql.describeTable.name,new x(!1,[ii]));H.set(HR.deleteRecord.name,new x(!1,[AH]));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(rh.listRoles.name,new x(!0,[]));H.set(rh.addRole.name,new x(!0,[]));H.set(rh.alterRole.name,new x(!0,[]));H.set(rh.dropRole.name,new x(!0,[]));H.set(Fre.name,new x(!0,[]));H.set(xre.name,new x(!0,[]));H.set(kre.name,new x(!0,[]));H.set($re.name,new x(!0,[]));H.set(Vre.name,new x(!0,[]));H.set(Yre.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(pH.setConfiguration.name,new x(!0,[]));H.set(Kre.clusterStatus.name,new x(!0,[]));H.set(Wre.name,new x(!0,[]));H.set(GR.getFingerprint.name,new x(!0,[]));H.set(GR.setLicense.name,new x(!0,[]));H.set(HR.deleteFilesBefore.name,new x(!0,[]));H.set(HR.deleteAuditLogsBefore.name,new x(!0,[]));H.set(fH.restart.name,new x(!0,[]));H.set(fH.restartService.name,new x(!0,[]));H.set(qre.name,new x(!0,[]));H.set(Gre.name,new x(!0,[ii]));H.set(jre.systemInformation.name,new x(!0,[]));H.set(pH.getConfiguration.name,new x(!0,[]));H.set(SH.readTransactionLog.name,new x(!0,[]));H.set(SH.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(TH.installModules.name,new x(!0,[]));H.set(TH.auditModules.name,new x(!0,[]));H.set(hH.createTokens.name,new x(!1,[]));H.set(hH.refreshOperationToken.name,new x(!1,[]));H.set(mH.login.name,new x(!1,[]));H.set(mH.logout.name,new x(!1,[]));H.set(Qr.customFunctionsStatus.name,new x(!0,[]));H.set(Qr.getCustomFunctions.name,new x(!0,[]));H.set(Qr.getComponents.name,new x(!0,[]));H.set(Qr.getComponentFile.name,new x(!0,[]));H.set(Qr.setComponentFile.name,new x(!0,[]));H.set(Qr.dropComponent.name,new x(!0,[]));H.set(Qr.getCustomFunction.name,new x(!0,[]));H.set(Qr.setCustomFunction.name,new x(!0,[]));H.set(Qr.dropCustomFunction.name,new x(!0,[]));H.set(Qr.addComponent.name,new x(!0,[]));H.set(Qr.dropCustomFunctionProject.name,new x(!0,[]));H.set(Qr.packageComponent.name,new x(!0,[]));H.set(Qr.deployComponent.name,new x(!0,[]));H.set(GR.getRegistrationInfo.name,new x(!1,[]));H.set(jl.userInfo.name,new x(!1,[]));H.set(Ql.describeAll.name,new x(!1,[]));H.set(Xre,new x(!1,[]));H.set(Zre,new x(!0,[]));H.set(Jre,new x(!0,[]));H.set(sh.CSV_DATA_LOAD,new x(!1,[Xi,Xo]));H.set(sh.CSV_URL_LOAD,new x(!1,[Xi,Xo]));H.set(sh.CSV_FILE_LOAD,new x(!1,[Xi,Xo]));H.set(sh.IMPORT_FROM_S3,new x(!1,[Xi,Xo]));H.set(NH.EXPORT_TO_S3,new x(!0,[]));H.set(NH.EXPORT_LOCAL,new x(!0,[]));H.set(Es.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[AH]));H.set(Es.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[ii]));H.set(Es.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Xi]));H.set(Es.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Xo]));yH.exports={verifyPerms:rse,verifyPermsAst:tse,verifyBulkLoadAttributePerms:nse};function tse(e,t,r){if(ni.isEmptyOrZeroLength(e))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(t))throw Rt.info("verify_perms_ast has an empty user parameter"),br(new Error);if(ni.isEmptyOrZeroLength(r))throw Rt.info("verify_perms_ast has a null operation parameter"),br(new Error);try{let s=new gH,n=new Qre(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw Rt.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&&OH[r])throw br(new Error,Ft.DROP_SYSTEM,Kl.FORBIDDEN);if(c&&!u)return null;let _=EH.getRolePermissions(t.role);t.role.permission=_,!c&&e instanceof zre.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=bH(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]),p=xR(t.role.permission,f,d[E]);FR(h,p,r,d[E],f,s)}}),s.getPermsResponse())}catch(s){throw br(s)}}a(tse,"verifyPermsAst");function rse(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw Rt.info("null required parameter in verifyPerms"),br(new Error,Ft.DEFAULT_INVALID_REQUEST,Kl.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 gH;if(ni.isEmptyOrZeroLength(e.hdb_user.role)||ni.isEmptyOrZeroLength(e.hdb_user.role.permission))return Rt.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ft.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(Es.SYSTEM_SCHEMA_NAME)||n===Es.SYSTEM_SCHEMA_NAME;if(l&&OH[r])throw br(new Error,Ft.DROP_SYSTEM,Kl.FORBIDDEN);if(u&&!l||_===!0&&(r===hs.createSchema.name||r===hs.dropSchema.name))return null;if(ese.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=EH.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===_H||r===dH){if(n===Es.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ft.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===_H&&(!d[n]||!d[n][Wl]))return c.handleInvalidItem(Ft.SCHEMA_NOT_FOUND(n));if(r===dH&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Wl]))return c.handleInvalidItem(Ft.TABLE_NOT_FOUND(n,i))}}let f=bH(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&&Es.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],m=d[n].tables[i];m[Es.PERMS_CRUD_ENUM.READ]&&(m.attribute_permissions.length>0?m.attribute_permissions.filter(R=>R[Es.PERMS_CRUD_ENUM.READ]).forEach(R=>{p.push(R.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let E=sse(e),h=xR(e.hdb_user.role.permission,n,i);return FR(E,h,r,i,n,c,s),c.getPermsResponse()}a(rse,"verifyPerms");function bH(e,t,r,s,n){if(ni.arrayHasEmptyValues([e,t,r]))throw Rt.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 Rt.info(`operation ${t} not found.`),br(new Error,Ft.OP_NOT_FOUND(t),Kl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return Rt.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ft.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Wl]===!1){s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ft.SCHEMA_NOT_FOUND(u));continue}let _=r.get(u);for(let l of _){let d=o[u].tables[l];if(!d||d[Wl]===!1)s.addInvalidItem(Ft.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 p=E[h],m=d[p];(m==null||m===!1)&&(Rt.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),f.push(p))}f.length>0&&s.addUnauthorizedTable(u,l,f)}catch(f){let E=Ft.UNKNOWN_OP_AUTH_ERROR(t,u,l);throw Rt.error(E),Rt.error(f),br(RH.CHECK_LOGS_WRAPPER(E))}}}return r.size<2?s.getPermsResponse():null}a(bH,"hasPermissions");function FR(e,t,r,s,n,i,o){if(!e||!t)throw Rt.info("no attributes specified in checkAttributePerms."),br(new Error);let c=H.get(r).perms;if(!c||c==="")throw Rt.info(`no permissions found for ${r} in checkAttributePerms().`),br(new Error);if(ni.isEmptyOrZeroLength(t))return Rt.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[Wl]===!1){i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s);continue}if(c)for(let f of c){if(Es.TIME_STAMP_NAMES.includes(d.attribute_name)&&f!==ii)throw br(new Error,Ft.SYSTEM_TIMESTAMP_PERMS_ERR,Kl.FORBIDDEN);d[f]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(f):u[d.attribute_name]=[f])}}else i.addInvalidItem(Ft.ATTR_NOT_FOUND(n,s,l),n,s)}let _=Object.keys(u);_.length>0&&i.addUnauthorizedAttributes(_,n,s,u)}a(FR,"checkAttributePerms");function sse(e){let t=new Set;try{if(e.action)return t;if(e.operation===Es.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){Rt.info(r)}return t}a(sse,"getRecordAttributes");function xR(e,t,r){let s=new Map;if(ni.isEmpty(e))return Rt.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{Rt.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(xR,"getAttributePermissions");function nse(e,t,r,s,n,i,o){let c=new Set(i),u=xR(e,s,n);FR(c,u,t,n,s,o,r)}a(nse,"verifyBulkLoadAttributePerms")});var oh=T((ORe,DH)=>{"use strict";DH.exports={evaluateSQL:pse,processAST:LH,convertSQLToAST:CH,checkASTPermissions:wH};var ise=Er(),IH=require("util"),ose=IH.callbackify(ise.insert),ase=fr().search,cse=HP().update,use=IH.callbackify(cse),lse=GP().convertDelete,Zi=require("alasql"),_se=nh(),ih=U(),dse=ef(),fse=G(),zl=A(),{hdb_errors:Ese,handleHDBError:kR}=Z(),{HTTP_STATUS_CODES:$R}=Ese;dse(Zi);var hse=403,mse="There was a problem performing this insert. Please check the logs and try again.",VR=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=CH(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:ih.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Zi.yy.Select)&&fse.isEmptyOrZeroLength(s))return t("No schema specified",null)}LH(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(pse,"evaluateSQL");function wH(e,t){let r;try{r=_se.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(wH,"checkASTPermissions");function CH(e){let t=new VR;if(!e)throw kR(new Error,"The 'sql' parameter is missing from the request body",$R.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(`
16
+ `);throw s[1]?kR(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,$R.BAD_REQUEST):kR(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",$R.BAD_REQUEST)}return t}a(CH,"convertSQLToAST");function LH(e,t,r){try{let s=Sse;if(!e.bypass_auth&&!t.permissions_checked){let i=wH(e,t);if(i&&i.length>0)return r(hse,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=Tse;break;case zl.VALID_SQL_OPS_ENUM.UPDATE:s=use;break;case zl.VALID_SQL_OPS_ENUM.DELETE:s=lse;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(LH,"processAST");function Sse(e,t){ih.info(e),t("unknown sql statement")}a(Sse,"nullFunction");function Tse({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=gse(i,e.values)}catch(o){return r(o)}ose(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){ih.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Tse,"convertInsert");function gse(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 [${zl.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw ih.error(r),new Error(mse)}}a(gse,"createDataObjects")});var YR=T((bRe,MH)=>{"use strict";var{S3:Rse,GetObjectCommand:Ase}=require("@aws-sdk/client-s3");MH.exports={getFileStreamFromS3:Ose,getS3AuthObj:PH};async function Ose(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await PH(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Ase(r))).Body}a(Ose,"getFileStreamFromS3");function PH(e,t,r){return new Rse({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(PH,"getS3AuthObj")});var ah=T((IRe,$H)=>{"use strict";var BH=fr(),Nse=oh(),bse=YR(),{AsyncParser:yse,Transform:Ise}=require("json2csv"),Xl=require("stream"),jr=G(),KR=require("fs-extra"),wse=require("path"),ms=U(),{promisify:HH}=require("util"),Jl=G(),{handleHDBError:ft,hdb_errors:Cse}=Z(),{HDB_ERROR_MSGS:yr,HTTP_STATUS_CODES:Et}=Cse,{streamAsJSON:Lse}=YT(),{Upload:Dse}=require("@aws-sdk/lib-storage"),UH=["search_by_value","search_by_hash","sql"],vH=["json","csv"],qH="json",GH="csv",Pse="Successfully exported JSON locally.",Mse="Successfully exported CSV locally.",Use=1e3,vse=BH.searchByHash,Bse=BH.searchByValue,Hse=HH(Nse.evaluateSQL),qse=HH(Xl.finished);$H.exports={export_to_s3:kse,export_local:Gse,toCsvStream:FH};async function Gse(e){ms.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=xH(e);if(!jr.isEmpty(t))throw ms.error(t),ft(new Error,t,Et.BAD_REQUEST,void 0,void 0,!0);if(jr.isEmpty(e.path))throw ms.error(yr.MISSING_VALUE("path")),ft(new Error,yr.MISSING_VALUE("path"),Et.BAD_REQUEST,void 0,void 0,!0);let r=(jr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(wse.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=jr.buildFolderPath(e.path,r);await Fse(e.path);let n=await kH(e);return await xse(s,e.format,n)}a(Gse,"export_local");async function Fse(e){if(ms.trace("in confirmPath"),jr.isEmptyOrZeroLength(e))throw ft(new Error,`Invalid path: ${e}`,Et.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await KR.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,ms.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 ms.error(r),ft(new Error,r,Et.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Fse,"confirmPath");async function xse(e,t,r){if(ms.trace("in saveToLocal"),Jl.isEmptyOrZeroLength(e))throw ft(new Error,yr.INVALID_VALUE("file_path"),Et.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmptyOrZeroLength(t))throw ft(new Error,yr.INVALID_VALUE("Source format"),Et.BAD_REQUEST,void 0,void 0,!0);if(Jl.isEmpty(r))throw ft(new Error,yr.NOT_FOUND("Data"),Et.BAD_REQUEST,void 0,void 0,!0);if(t===qH){let s=KR.createWriteStream(e);return Lse(r).pipe(s),await qse(s),{message:Pse,path:e}}else if(t===GH){let s=KR.createWriteStream(e),n=Xl.Readable.from(r),i={},o={objectMode:!0};return await new yse(i,o).fromInput(n).toOutput(s).promise(!1),{message:Mse,path:e}}throw ft(new Error,yr.INVALID_VALUE("format"),Et.BAD_REQUEST)}a(xse,"saveToLocal");async function kse(e){if(!e.s3||Object.keys(e.s3).length===0)throw ft(new Error,yr.MISSING_VALUE("S3 object"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ft(new Error,yr.MISSING_VALUE("aws_access_key_id"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ft(new Error,yr.MISSING_VALUE("aws_secret_access_key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.bucket))throw ft(new Error,yr.MISSING_VALUE("bucket"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.key))throw ft(new Error,yr.MISSING_VALUE("key"),Et.BAD_REQUEST);if(jr.isEmptyOrZeroLength(e.s3.region))throw ft(new Error,yr.MISSING_VALUE("region"),Et.BAD_REQUEST);let t=xH(e);if(!jr.isEmpty(t))throw ft(new Error,t,Et.BAD_REQUEST);ms.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await kH(e)}catch(u){throw ms.error(u),u}let s,n=await bse.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xl.PassThrough;if(e.format===GH){i=e.s3.key+".csv";let u=FH(r);u.on("error",_=>{throw _}),u.pipe(o)}else if(e.format===qH){i=e.s3.key+".json";let u=new Xl.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%Use===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 Dse({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(kse,"export_to_s3");function FH(e){let t=Xl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Ise(r,s);return t.pipe(n)}a(FH,"toCsvStream");function xH(e){if(ms.trace("in exportCoreValidation"),jr.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(jr.isEmpty(t))return"search_operation.operation missing";if(UH.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${UH.join(", ")}`}a(xH,"exportCoreValidation");async function kH(e){ms.trace("in getRecords");let t,r;if(Jl.isEmpty(e.search_operation)||Jl.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=Bse;break;case"search_by_hash":t=vse;break;case"sql":t=Hse;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,ms.error(r),ft(new Error,r,Et.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(kH,"getRecords")});var JH={};Ge(JH,{contentTypes:()=>QR,findBestSerializer:()=>lh,getDeserializer:()=>pc,registerContentHandlers:()=>jR,serialize:()=>_h,serializeMessage:()=>Ji});function $se(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function jR(e){e.register(Yse,{serializers:[{regex:/^application\/json$/,serializer:ch.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Zo.EncoderStream(Zl).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?uh.Readable.from((0,An.encodeIter)(t,Zl)):(0,An.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,WR.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,An.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 lh(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 p=h.indexOf("=");f[h.substring(0,p)]=h.substring(p+1)}d=+f.q;let E=xt.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(xt.keys()).join(", "))}};s=xt.get("application/json"),i="application/json"}return{serializer:s,type:i,parameters:o}}function _h(e,t,r){let s=YH&&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=lh(t);if(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>YH?(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;let r=t.serialize;if(r)return r(e);let s=lh(t);return r=t.serialize=s.serializer.serialize,r(e)}function Kse(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 pc(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=xt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=xt.get(e)?.deserialize||KH(e,s);return o=>Kse(o).then(i)}return xt.get(e)?.deserialize||KH(e,s)}function KH(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=>({contentType:e,data:r})}function Wse(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 ch,WR,An,Zo,oi,uh,WH,QH,jH,Zl,xt,QR,VH,zH,Vse,Yse,YH,_c=ge(()=>{ch=M(YT()),WR=M(ah()),An=require("msgpackr"),Zo=require("cbor-x"),oi=require("zlib"),uh=require("stream");Pr();WH=require("../index"),QH=M(Q()),jH=M(A()),Zl={useRecords:!1,useToJSON:!0},xt=new Map,QR=xt;Tt.contentTypes=QR;(0,WH._assignPackageExport)("contentTypes",QR);xt.set("application/json",{serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});VH=new Zo.Encoder(Zl);xt.set("application/cbor",{serializeStream(e){return e[Symbol.asyncIterator]&&(e[Symbol.iterator]=null),new Zo.EncoderStream(Zl).end(e)},serialize:VH.encode,deserialize:VH.decode,q:1});xt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?uh.Readable.from((0,An.encodeIter)(e,Zl)):(0,An.pack)(e)},serialize:An.pack,deserialize:An.unpack,q:.9});xt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,WR.toCsvStream)(e)},q:.1});xt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});xt.set("text/event-stream",{serializeStream:function(e){return uh.Readable.from(Wse(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+`
17
17
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
18
18
  `}return e.id&&(t+="id: "+e.id+`
19
19
  `),e.retry&&(t+="retry: "+e.retry+`
@@ -22,89 +22,89 @@
22
22
 
23
23
  `:`data: ${e}
24
24
 
25
- `},q:.8});xt.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()}});jH={type:"application/json",serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:Fse,q:.8};xt.set("*/*",jH);xt.set("",jH);a(Fse,"tryJSONParse");a(JR,"registerContentHandlers");xse=require("fastify-plugin"),kse=xse(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(lh,"findBestSerializer");KH=zH.default.get(JH.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_h,"serialize");a(Ji,"serializeMessage");a($se,"streamToBuffer");a(mc,"getDeserializer");a(WH,"deserializerUnknownType");a(Vse,"transformIterable")});var dh={};Fe(dh,{start:()=>Wse});async function Kse(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&hd(e);let n=new zi;try{e.responseHeaders=n;let i=e.url.slice(1),o=XR.getMatch(i);if(!o)return t(e);e.handlerPath=o.path;let c={url:o.relativeURL,async:!0},u=o.Resource,l=r["cache-control"];if(l){l=l.toLowerCase();let S=l.match(/max-age=(\d+)/)?.[1];S&&(e.expiresAt=S*1e3+Date.now()),l.includes("only-if-cached")&&(e.onlyIfCached=!0),l.includes("no-cache")&&(e.noCache=!0),l.includes("no-store")&&(e.noCacheStore=!0),l.includes("stale-if-error")&&(e.staleIfError=!0),l.includes("must-revalidate")&&(e.mustRevalidate=!0)}let _=await ze(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=mc(r["content-type"],!0)(e.body)}catch(S){throw new t_.ClientError(S,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.set("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 t_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new t_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(_==null)d=s==="GET"||s==="HEAD"?404:204,jR.lastModified&&e.lastModified&&n.set("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Yse[0]=f;let S=String.fromCharCode(34,(kt[0]&63)+62,(kt[0]>>6)+(kt[1]<<2&63)+62,(kt[1]>>4)+(kt[2]<<4&63)+62,(kt[2]>>2)+62,(kt[3]&63)+62,(kt[3]>>6)+(kt[4]<<2&63)+62,(kt[4]>>4)+(kt[5]<<4&63)+62,(kt[5]>>2)+62,(kt[6]&63)+62,(kt[6]>>6)+(kt[7]<<2&63)+62,34),m=r["if-none-match"];m&&S==m?(_?.onDone&&_.onDone(),d=304,_=void 0):n.set("ETag",S),jR.lastModified&&n.set("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.set("Location",e.newLocation);let E={status:d,headers:n,body:void 0},h=_?.wasLoadedFromSource?.();return h!==void 0&&(E.wasCacheMiss=h,!h&&f&&n.set("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),_!==void 0&&(E.body=_h(_,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.set("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=_h(i.contentType?i:i.toString(),e,o),o}}function Wse(e){jR=e,!ZH&&(ZH=!0,XR=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return Kse(t,r)}),e.server.ws(async(t,r,s)=>{e_++;let n=new bs;e0||(e0=!0,ju(_=>{e_>0&&_.push({metric:"ws-connections",connections:e_,byThread:!0})}));let i;t.on("error",_=>{i=!0,ea.warn(_)});let o;t.on("message",a(function(d){o||(o=mc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{e_--,is(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),l=XR.getMatch(u);if(is(!!l,"connection","ws","connect"),!l)t.send(Ji(`No resource was found to handle ${r.pathname}`,r));else{r.handlerPath=l.path,xr(h=>({count:h.count,total:e_}),"connections",r.handlerPath,"connect","ws");let _={url:l.relativeURL,async:!0},d=l.Resource;c=(await ze(r,()=>d.connect(_,n,r)))[Symbol.asyncIterator]();let E;for(;!(E=await c.next()).done;){let h=Ji(E.value,r);t.send(h),xr(h.length,"bytes-sent",r.handlerPath,"message","ws")}}t.close()}))}var ea,t_,kt,Yse,jR,ZH,XR,e0,e_,t0=ge(()=>{lc();Jn();ea=P(M()),t_=P(Z());md();ou();Oo();HE();kt=new Uint8Array(8),Yse=new Float64Array(kt.buffer,0,1),jR={};a(Kse,"http");e_=0;a(Wse,"start")});var ZR=p((xRe,r0)=>{var{recordAction:fh,recordActionBinary:Qse}=(Jn(),te(Xu)),zse=require("fastify-plugin"),Jse=200;r0.exports=zse(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.context.config,l,_,d;u.isOperation?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),fh(o,"duration",l,d,_),Qse(n.raw.statusCode<400,"success",l,d,_);let f=Jse;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{fh(performance.now()-c,"transfer",l,d,_),fh(f,"bytes-sent",l,d,_)})):(f+=i?.length||0,fh(f,"bytes-sent",l,d,_));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var sA=p((kRe,a0)=>{var Sh=require("clone"),Th=Ye(),jse=G(),mh=A(),Xse=M(),Eh=require("fs"),eA=require("joi"),{string:ph}=eA.types(),{hdb_errors:Zse,handleHDBError:r_}=Z(),{HDB_ERROR_MSGS:ene,HTTP_STATUS_CODES:hh}=Zse,{common_validators:pc}=cn(),s0=1e9,n0=" is required",tne=["insert","update","upsert"],tA={database:{presence:!1,format:pc.schema_format,length:pc.schema_length},schema:{presence:!1,format:pc.schema_format,length:pc.schema_length},table:{presence:!0,format:pc.schema_format,length:pc.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:{}},rne={schema:ph.required(),table:ph.required(),action:ph.valid("insert","update","upsert")},{AWS_ACCESS_KEY:sne,AWS_SECRET:nne,AWS_BUCKET:ine,AWS_FILE_KEY:one,REGION:ane}=mh.S3_BUCKET_AUTH_KEYS,cne={s3:{presence:!0},[`s3.${sne}`]:{presence:!0,type:"String"},[`s3.${nne}`]:{presence:!0,type:"String"},[`s3.${ine}`]:{presence:!0,type:"String"},[`s3.${one}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${ane}`]:{presence:!0,type:"String"}},i0=Sh(tA);i0.data.presence={message:n0};var o0=Sh(tA);o0.file_path.presence={message:n0};var une=Object.assign(Sh(tA),cne),rA=Sh(rne);rA.csv_url=ph.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();rA.passthrough_headers=eA.object();function lne(e){let t=Th.validateObject(e,i0);return gh(e,t)}a(lne,"dataObject");function _ne(e){let t=Th.validateBySchema(e,eA.object(rA));return gh(e,t)}a(_ne,"urlObject");function dne(e){let t=Th.validateObject(e,o0);return gh(e,t)}a(dne,"fileObject");function fne(e){let t=Th.validateObject(e,une);return gh(e,t)}a(fne,"s3FileObject");function gh(e,t){if(!t){let r=jse.checkGlobalSchemaTable(e.schema,e.table);if(r)return r_(new Error,r,hh.BAD_REQUEST);if(e.operation===mh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Eh.accessSync(e.file_path,Eh.constants.R_OK|Eh.constants.F_OK)}catch(s){return s.code===mh.NODE_ERROR_CODES.ENOENT?r_(s,`No such file or directory ${s.path}`,hh.BAD_REQUEST):s.code===mh.NODE_ERROR_CODES.EACCES?r_(s,`Permission denied ${s.path}`,hh.BAD_REQUEST):r_(s)}try{let s=Eh.statSync(e.file_path).size;if(s>s0)return r_(new Error,ene.MAX_FILE_SIZE_ERR(s,s0),hh.BAD_REQUEST)}catch(s){Xse.error(s),console.error(s)}}}return t}a(gh,"postValidateChecks");a0.exports={dataObject:lne,urlObject:_ne,fileObject:dne,s3FileObject:fne}});var nA=p((VRe,c0)=>{"use strict";var s_=M(),Rh=A();async function Ene(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===Rh.OPERATIONS_ENUM.INSERT||t.operation===Rh.OPERATIONS_ENUM.UPDATE||t.operation===Rh.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Rh.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(s_.info(i.message),i):i.http_resp_msg?(s_.error(`Error calling operation: ${e.name}`),s_.error(i.http_resp_msg),i):(s_.error(`Error calling operation: ${e.name}`),s_.error(i),i)}}a(Ene,"callOperationFunctionAsAwait");c0.exports={callOperationFunctionAsAwait:Ene}});var l0=p((KRe,u0)=>{"use strict";var iA=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}},oA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};u0.exports={BulkLoadFileObject:iA,BulkLoadDataObject:oA}});var d0=p((QRe,_0)=>{"use strict";var aA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};_0.exports=aA});var fA=p((eAe,C0)=>{"use strict";var Ah=_r(),Nh=sA(),hne=require("needle"),qs=A(),JRe=ke(),Sc=G(),{handleHDBError:et,hdb_errors:R0}=Z(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:Ot,CHECK_LOGS_WRAPPER:ra}=R0,Tc=M(),cA=require("papaparse");Sc.promisifyPapaParse();var Gs=require("fs-extra"),mne=require("path"),{chain:f0}=require("stream-chain"),E0=require("stream-json/streamers/StreamArray"),h0=require("stream-json/utils/Batch"),m0=require("stream-chain/utils/comp"),{finished:p0}=require("stream"),pne=Q(),A0=nA(),Sne=KR(),{BulkLoadFileObject:lA,BulkLoadDataObject:Tne}=l0(),_A=BR(),{verifyBulkLoadAttributePerms:O0}=nh(),jRe=d0(),XRe=nt(),ZRe=zn(),{databases:gne}=(fe(),te(Pe)),{coerceType:Rne}=(wf(),te(DT)),S0="No records parsed from csv file.",ta=`${pne.get("HDB_ROOT")}/tmp`,{schema_regex:Ane}=cn(),T0=1024*1024*2,g0=5e3,One={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};C0.exports={csvDataLoad:Nne,csvURLLoad:bne,csvFileLoad:yne,importFromS3:Ine};async function Nne(e,t){let r=Nh.dataObject(e);if(r)throw et(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=y0(e.schema,e.table),i=cA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:uA.bind(null,n),dynamicTyping:!1}),o=new _A;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&O0(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 et(new Error,c,$t.BAD_REQUEST,void 0,void 0,!0);let u=new Tne(e.action,e.schema,e.table,i.data);return s=await A0.callOperationFunctionAsAwait(I0,u,null),s.message===S0?S0:w0(s.records,s.number_written)}catch(n){throw sa(n)}}a(Nne,"csvDataLoad");async function bne(e){let t=Nh.urlObject(e);if(t)throw et(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ta}/${r}`;try{await wne(e,r)}catch(n){throw Tc.error(Ot.DOWNLOAD_FILE_ERR(r)+" - "+n),et(n,ra(Ot.DOWNLOAD_FILE_ERR(r)))}try{let n=new lA(this.job_operation_function.name,e.action,e.schema,e.table,s,qs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await dA(n);return await Oh(s),i}catch(n){throw await Oh(s),sa(n)}}a(bne,"csvURLLoad");async function yne(e){let t=Nh.fileObject(e);if(t)throw et(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new lA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,qs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await dA(r)}catch(s){throw sa(s)}}a(yne,"csvFileLoad");async function Ine(e){let t=Nh.s3FileObject(e);if(t)throw et(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=mne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ta}/${n}`;let i=new lA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Cne(n,e);let o=await dA(i);return await Oh(r),o}catch(s){throw await Oh(r),sa(s)}}a(Ine,"importFromS3");async function wne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await hne("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 et(s,n,s.statusCode,qs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Dne(r,e.csv_url),await Lne(t,r.raw)}a(wne,"downloadCSVFile");async function Cne(e,t){try{let r=`${ta}/${e}`;await Gs.mkdirp(ta),await Gs.writeFile(`${ta}/${e}`,"",{flag:"a+"});let s=await Gs.createWriteStream(r),n=await Sne.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(){Tc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Tc.error(Ot.S3_DOWNLOAD_ERR+" - "+r),et(r,ra(Ot.S3_DOWNLOAD_ERR))}}a(Cne,"downloadFileFromS3");async function Lne(e,t){try{await Gs.mkdirp(ta),await Gs.writeFile(`${ta}/${e}`,t)}catch(r){throw Tc.error(Ot.WRITE_TEMP_FILE_ERR),et(r,ra(Ot.DEFAULT_BULK_LOAD_ERR))}}a(Lne,"writeFileToTempFolder");async function Oh(e){if(e)try{await Gs.access(e),await Gs.unlink(e)}catch{Tc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Oh,"deleteTempFile");function Dne(e,t){if(e.statusCode!==R0.HTTP_STATUS_CODES.OK)throw et(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!One[e.headers["content-type"]])throw et(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw et(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Dne,"validateURLResponse");async function dA(e){try{let t;switch(e.file_type){case qs.VALID_S3_FILE_TYPES.CSV:t=await Pne(e);break;case qs.VALID_S3_FILE_TYPES.JSON:t=await Mne(e);break;default:throw et(new Error,Ot.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,qs.LOG_LEVELS.ERROR,Ot.INVALID_FILE_EXT_ERR(e))}return w0(t.records,t.number_written)}catch(t){throw sa(t)}}a(dA,"fileLoad");async function N0(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 Ah.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&O0(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=et(c);r(u)}}a(N0,"validateChunk");async function b0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Sc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Sc.isEmpty(c)&&!Sc.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await A0.callOperationFunctionAsAwait(I0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=et(c,ra(Ot.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,qs.LOG_LEVELS.ERROR,Ot.INSERT_CSV_ERR+" - "+c);r(u)}}a(b0,"insertChunk");async function Pne(e){let t={records:0,number_written:0},r=y0(e.schema,e.table);try{let s=new _A,n=Gs.createReadStream(e.file_path,{highWaterMark:T0});n.setEncoding("utf8"),await cA.parsePromise(n,N0.bind(null,e,s),uA.bind(null,r));let i=s.getPermsResponse();if(i)throw et(new Error,i,$t.BAD_REQUEST);return n=Gs.createReadStream(e.file_path,{highWaterMark:T0}),n.setEncoding("utf8"),await cA.parsePromise(n,b0.bind(null,e,t),uA.bind(null,r)),n.destroy(),t}catch(s){throw et(s,ra(Ot.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,qs.LOG_LEVELS.ERROR,Ot.PAPA_PARSE_ERR+s)}}a(Pne,"callPapaParse");function y0(e,t){let r=gne[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Rne(i,n));return s}a(y0,"createTransformMap");function uA(e,t,r){let s=e.get(r);return s?s(t):Sc.autoCast(t)}a(uA,"typeFunction");async function Mne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new _A,n=f0([Gs.createReadStream(e.file_path,{encoding:"utf-8"}),E0.withParser(),c=>c.value,new h0({batchSize:g0}),m0(async c=>{await N0(e,s,r,c)})]);await new Promise((c,u)=>{p0(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw et(new Error,i,$t.BAD_REQUEST);let o=f0([Gs.createReadStream(e.file_path,{encoding:"utf-8"}),E0.withParser(),c=>c.value,new h0({batchSize:g0}),m0(async c=>{await b0(e,t,r,c)})]);return await new Promise((c,u)=>{p0(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw et(s,ra(Ot.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,qs.LOG_LEVELS.ERROR,Ot.INSERT_JSON_ERR+s)}}a(Mne,"insertJson");async function I0(e){let t={};try{e.data&&e.data.length>0&&Une(e.data[0])?t=await vne(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Tc.info(t.message))}catch(r){throw sa(r)}return t}a(I0,"callBulkFileLoad");function Une(e){let t=Object.keys(e);for(let r of t)if(!Ane.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Une,"validateColumnNames");async function vne(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ah.insert;break;case"update":i=Ah.update;break;case"upsert":i=Ah.upsert;break;default:throw et(new Error,Ot.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,qs.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 _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=Sc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw sa(o)}}a(vne,"bulkFileLoad");function w0(e,t){return`successfully loaded ${t} of ${e} records`}a(w0,"buildResponseMsg");function sa(e){return et(e,ra(Ot.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,qs.LOG_LEVELS.ERROR,Ot.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(sa,"buildTopLevelErrMsg")});var D0=p((rAe,L0)=>{"use strict";var EA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};L0.exports=EA});var U0=p((nAe,M0)=>{"use strict";var Bne=A(),P0=require("moment"),Hne=require("uuid").v4,hA=class{static{a(this,"JobObject")}constructor(){this.id=Hne(),this.type=void 0,this.start_datetime=P0().valueOf(),this.created_datetime=P0().valueOf(),this.end_datetime=void 0,this.status=Bne.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};M0.exports=hA});var mA=p((oAe,F0)=>{"use strict";var qne=require("uuid").v4,H0=_r(),q0=lr(),Gne=Ls(),Fne=va(),xne=D0(),tt=A(),kne=U0(),$ne=Zf(),hs=M(),Vne=Nu(),gc=G(),{promisify:Yne}=require("util"),na=require("moment"),Kne=oh(),bh=sA(),v0=tT(),{deleteTransactionLogsBeforeValidator:Wne}=DR(),{handleHDBError:Qne,hdb_errors:zne}=Z(),{HTTP_STATUS_CODES:Jne}=zne,B0=q0.searchByValue,jne=q0.searchByHash,Xne=H0.insert,Zne=Yne(Kne.evaluateSQL),eie=H0.update;F0.exports={addJob:sie,updateJob:iie,handleGetJob:tie,handleGetJobsByStartDate:rie,getJobById:G0};async function tie(e){try{let t=await G0(e.id);return gc.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 hs.error("There was an error getting job",t),new Error(r)}}a(tie,"handleGetJob");async function rie(e){try{let t=await nie(e);if(hs.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 hs.error(r),new Error(r)}}a(rie,"handleGetJobsByStartDate");async function sie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||gc.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return hs.info(_),t.error=_,t}if(!tt.JOB_TYPE_ENUM[e.operation])return hs.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case tt.OPERATIONS_ENUM.CSV_FILE_LOAD:s=bh.fileObject(e);break;case tt.OPERATIONS_ENUM.CSV_URL_LOAD:s=bh.urlObject(e);break;case tt.OPERATIONS_ENUM.CSV_DATA_LOAD:s=bh.dataObject(e);break;case tt.OPERATIONS_ENUM.IMPORT_FROM_S3:s=bh.s3FileObject(e);break;case tt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case tt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=v0(e,"date");break;case tt.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=v0(e,"timestamp");break;case tt.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=Wne(e);break;default:break}if(s)throw Qne(s,s.message,Jne.BAD_REQUEST,void 0,void 0,!0);let n=new kne;n.type=e.operation===tt.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?tt.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Gne(tt.SYSTEM_SCHEMA_NAME,tt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await B0(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return hs.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=qne();try{o=await B0(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return hs.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return hs.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Vne(tt.SYSTEM_SCHEMA_NAME,tt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Xne(u)}catch(_){return hs.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,hs.trace(_)}return t}a(sie,"addJob");async function nie(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 xne(s,e.hdb_user);try{return await Zne(n)}catch(i){throw hs.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(nie,"getJobsInDateRange");async function G0(e){if(gc.isEmptyOrZeroLength(e))return gc.errorizeMessage("Invalid job ID specified.");let t=new Fne(tt.SYSTEM_SCHEMA_NAME,tt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await jne(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return hs.error(s),gc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(G0,"getJobById");async function iie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(gc.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===tt.JOB_STATUS_ENUM.COMPLETE||e.status===tt.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=na().valueOf());let t=new $ne(tt.SYSTEM_SCHEMA_NAME,tt.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await eie(t),r}a(iie,"updateJob")});var K0=p((cAe,Y0)=>{"use strict";var x0=G(),br=A(),oie=require("moment"),yh=fA(),Ih=M(),k0=mA(),$0=ah(),V0=Bo(),aie=Je(),cie=eh(),pA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function uie(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(x0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(x0.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case br.JOB_TYPE_ENUM.csv_file_load:await ai(e,yh.csvFileLoad);break;case br.JOB_TYPE_ENUM.csv_url_load:await ai(e,yh.csvURLLoad);break;case br.JOB_TYPE_ENUM.csv_data_load:await ai(e,yh.csvDataLoad);break;case br.JOB_TYPE_ENUM.import_from_s3:await ai(e,yh.importFromS3);break;case br.JOB_TYPE_ENUM.empty_trash:break;case br.JOB_TYPE_ENUM.export_local:await ai(e,$0.export_local);break;case br.JOB_TYPE_ENUM.export_to_s3:await ai(e,$0.export_to_s3);break;case br.JOB_TYPE_ENUM.delete_files_before:case br.JOB_TYPE_ENUM.delete_records_before:await ai(e,V0.deleteFilesBefore);break;case br.JOB_TYPE_ENUM.delete_audit_logs_before:await ai(e,V0.deleteAuditLogsBefore);break;case br.JOB_TYPE_ENUM.delete_transaction_logs_before:await ai(e,cie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(uie,"parseMessage");async function ai(e,t){try{e.job.status=br.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=oie().valueOf(),await k0.updateJob(e.job),await lie(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):Ih.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ih.error(s),e.job.message=s,e.job.status=br.JOB_STATUS_ENUM.ERROR;try{await k0.updateJob(e.job)}catch(n){throw Ih.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ai,"runJob");async function lie(e){Ih.trace("launching job thread:",e),aie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[br.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(lie,"launchJobThread");Y0.exports={parseMessage:uie,RunnerMessage:pA}});var Q0=p((lAe,W0)=>{"use strict";var SA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};W0.exports=SA});var lq=p((dAe,NA)=>{"use strict";var Dh=lr(),RA=oh(),wh=fA(),ci=Vf(),Ch=Bi(),i_=Bo(),_ie=ag(),n_=dr(),Lh=zf(),Vt=JE(),Nt=M(),die=Sg(),fie=Ol(),Eie=jg(),hie=dE(),mie=EE(),pie=Xg(),Sie=pE(),Tie=TE(),TA=RE(),z0=ah(),gie=nh(),AA=mA(),D=A(),{hdb_errors:a_,handleHDBError:o_}=Z(),{HTTP_STATUS_CODES:J0}=a_,gA=OE(),j0=Qo(),oq=require("util"),Rc=_r(),Rie=ns(),Aie=jn(),X0=K0(),Z0=Tl(),eq=(xE(),te(Fl)),tq=rt(),rq=eh(),sq=KE(),{setServerUtilities:Oie}=(wf(),te(DT)),{CONTEXT:Nie}=(tn(),te(cp)),{_assignPackageExport:bie}=require("../index"),{transformReq:yie}=G(),{server:Iie}=(Dr(),te(po)),wie=nA(),nq=Dh.searchByHash,Cie=Dh.searchByValue,Lie=oq.promisify(Dh.search),Die=oq.promisify(RA.evaluateSQL),Pie={[D.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[D.OPERATIONS_ENUM.CREATE_TABLE]:!0,[D.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[D.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[D.OPERATIONS_ENUM.DROP_TABLE]:!0,[D.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=Q0();async function aq(e,t){try{if(e.body.operation!=="read_log"&&(Nt.log_level===D.LOG_LEVELS.INFO||Nt.log_level===D.LOG_LEVELS.DEBUG||Nt.log_level===D.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 Pie[e.body.operation]&&Rie.setSchemaDataToGlobal(s=>{s&&Nt.error(s)}),r}a(aq,"processLocalTransaction");var iq=Uie();NA.exports={chooseOperation:cq,getOperationFunction:uq,operation:OA,processLocalTransaction:aq};Oie(NA.exports);Iie.operation=OA;function cq(e){let t;try{t=uq(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=RA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=RA.checkASTPermissions(e,i);if(o)throw Nt.error(`${J0.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),o_(new Error,o,a_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==D.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==D.OPERATIONS_ENUM.LOGIN&&e.operation!==D.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(`${J0.FORBIDDEN} from operation ${e.operation}`),Nt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),o_(new Error,o,a_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw o_(n,"There was an error when trying to choose an operation path")}return r}a(cq,"chooseOperation");function uq(e){if(Nt.trace(`getOperationFunction with operation: ${e.operation}`),iq.has(e.operation))return iq.get(e.operation);throw o_(new Error,a_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),a_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(uq,"getOperationFunction");bie("operation",OA);function OA(e,t){e.hdb_user=this[Nie]?.user,e.bypass_auth=!t;let r=cq(e);return aq({body:e},r)}a(OA,"operation");async function Mie(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[D.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case D.OPERATIONS_ENUM.INSERT:o=await Rc.insert(i);break;case D.OPERATIONS_ENUM.UPDATE:o=await Rc.update(i);break;case D.OPERATIONS_ENUM.UPSERT:o=await Rc.upsert(i);break;case D.OPERATIONS_ENUM.DELETE:o=await i_.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(Mie,"catchup");async function On(e){yie(e);let t,r;try{r=await AA.addJob(e),t=r.createdJob,Nt.info("addJob result",r);let s=new X0.RunnerMessage(t,e);return await X0.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),o_(s,n)}}a(On,"executeJob");function Uie(){let e=new Map;return e.set(D.OPERATIONS_ENUM.INSERT,new q(Rc.insert)),e.set(D.OPERATIONS_ENUM.UPDATE,new q(Rc.update)),e.set(D.OPERATIONS_ENUM.UPSERT,new q(Rc.upsert)),e.set(D.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Dh.searchByConditions)),e.set(D.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(nq)),e.set(D.OPERATIONS_ENUM.SEARCH_BY_ID,new q(nq)),e.set(D.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Cie)),e.set(D.OPERATIONS_ENUM.SEARCH,new q(Lie)),e.set(D.OPERATIONS_ENUM.SQL,new q(Die)),e.set(D.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(On,wh.csvDataLoad)),e.set(D.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(On,wh.csvFileLoad)),e.set(D.OPERATIONS_ENUM.CSV_URL_LOAD,new q(On,wh.csvURLLoad)),e.set(D.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(On,wh.importFromS3)),e.set(D.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ci.createSchema)),e.set(D.OPERATIONS_ENUM.CREATE_DATABASE,new q(ci.createSchema)),e.set(D.OPERATIONS_ENUM.CREATE_TABLE,new q(ci.createTable)),e.set(D.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ci.createAttribute)),e.set(D.OPERATIONS_ENUM.DROP_SCHEMA,new q(ci.dropSchema)),e.set(D.OPERATIONS_ENUM.DROP_DATABASE,new q(ci.dropSchema)),e.set(D.OPERATIONS_ENUM.DROP_TABLE,new q(ci.dropTable)),e.set(D.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ci.dropAttribute)),e.set(D.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Ch.describeSchema)),e.set(D.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Ch.describeSchema)),e.set(D.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Ch.describeTable)),e.set(D.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Ch.describeAll)),e.set(D.OPERATIONS_ENUM.DELETE,new q(i_.deleteRecord)),e.set(D.OPERATIONS_ENUM.ADD_USER,new q(n_.addUser)),e.set(D.OPERATIONS_ENUM.ALTER_USER,new q(n_.alterUser)),e.set(D.OPERATIONS_ENUM.DROP_USER,new q(n_.dropUser)),e.set(D.OPERATIONS_ENUM.LIST_USERS,new q(n_.listUsersExternal)),e.set(D.OPERATIONS_ENUM.LIST_ROLES,new q(Lh.listRoles)),e.set(D.OPERATIONS_ENUM.ADD_ROLE,new q(Lh.addRole)),e.set(D.OPERATIONS_ENUM.ALTER_ROLE,new q(Lh.alterRole)),e.set(D.OPERATIONS_ENUM.DROP_ROLE,new q(Lh.dropRole)),e.set(D.OPERATIONS_ENUM.USER_INFO,new q(n_.userInfo)),e.set(D.OPERATIONS_ENUM.READ_LOG,new q(die)),e.set(D.OPERATIONS_ENUM.ADD_NODE,new q(fie)),e.set(D.OPERATIONS_ENUM.UPDATE_NODE,new q(Eie)),e.set(D.OPERATIONS_ENUM.REMOVE_NODE,new q(hie)),e.set(D.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(mie)),e.set(D.OPERATIONS_ENUM.PURGE_STREAM,new q(pie)),e.set(D.OPERATIONS_ENUM.SET_CONFIGURATION,new q(tq.setConfiguration)),e.set(D.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Sie.clusterStatus)),e.set(D.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Tie)),e.set(D.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(TA.setRoutes)),e.set(D.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(TA.getRoutes)),e.set(D.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(TA.deleteRoutes)),e.set(D.OPERATIONS_ENUM.EXPORT_TO_S3,new q(On,z0.export_to_s3)),e.set(D.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(On,i_.deleteFilesBefore)),e.set(D.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(On,i_.deleteFilesBefore)),e.set(D.OPERATIONS_ENUM.EXPORT_LOCAL,new q(On,z0.export_local)),e.set(D.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(AA.handleGetJobsByStartDate)),e.set(D.OPERATIONS_ENUM.GET_JOB,new q(AA.handleGetJob)),e.set(D.OPERATIONS_ENUM.GET_FINGERPRINT,new q(gA.getFingerprint)),e.set(D.OPERATIONS_ENUM.SET_LICENSE,new q(gA.setLicense)),e.set(D.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(gA.getRegistrationInfo)),e.set(D.OPERATIONS_ENUM.RESTART,new q(j0.restart)),e.set(D.OPERATIONS_ENUM.RESTART_SERVICE,new q(j0.restartService)),e.set(D.OPERATIONS_ENUM.CATCHUP,new q(Mie)),e.set(D.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(Aie.systemInformation)),e.set(D.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(On,i_.deleteAuditLogsBefore)),e.set(D.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(_ie)),e.set(D.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(Z0.createTokens)),e.set(D.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(Z0.refreshOperationToken)),e.set(D.OPERATIONS_ENUM.LOGIN,new q(eq.login)),e.set(D.OPERATIONS_ENUM.LOGOUT,new q(eq.logout)),e.set(D.OPERATIONS_ENUM.GET_CONFIGURATION,new q(tq.getConfiguration)),e.set(D.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(Vt.customFunctionsStatus)),e.set(D.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(Vt.getCustomFunctions)),e.set(D.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(Vt.getComponentFile)),e.set(D.OPERATIONS_ENUM.GET_COMPONENTS,new q(Vt.getComponents)),e.set(D.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(Vt.setComponentFile)),e.set(D.OPERATIONS_ENUM.DROP_COMPONENT,new q(Vt.dropComponent)),e.set(D.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(Vt.getCustomFunction)),e.set(D.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(Vt.setCustomFunction)),e.set(D.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(Vt.dropCustomFunction)),e.set(D.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(Vt.addComponent)),e.set(D.OPERATIONS_ENUM.ADD_COMPONENT,new q(Vt.addComponent)),e.set(D.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(Vt.dropCustomFunctionProject)),e.set(D.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(Vt.packageComponent)),e.set(D.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(Vt.packageComponent)),e.set(D.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(Vt.deployComponent)),e.set(D.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(Vt.deployComponent)),e.set(D.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(rq.readTransactionLog)),e.set(D.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(On,rq.deleteTransactionLogsBefore)),e.set(D.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(sq.installModules)),e.set(D.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(sq.auditModules)),e.set(D.OPERATIONS_ENUM.GET_BACKUP,new q(ci.getBackup)),e}a(Uie,"initializeOperationFunctionMap")});var Mh=p((EAe,fq)=>{"use strict";var bA=A(),vie=G(),c_=M(),{handleHDBError:yA,hdb_errors:Ph}=Z(),{isMainThread:Bie}=require("worker_threads"),{Readable:Hie}=require("stream"),_q=require("os"),qie=require("util"),Gie=wg(),Fie=qie.promisify(Gie.authorize),dq=lq(),{createGzip:xie,constants:kie}=require("zlib");function $ie(e){let t=`Found an uncaught exception with message: ${e.message}. ${_q.EOL}Stack: ${e.stack} ${_q.EOL}Terminating ${Bie?"HDB":"thread"}.`;console.error(t),c_.fatal(t),process.exit(1)}a($ie,"handleServerUncaughtException");function Vie(e,t,r){if(c_[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:Ph.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(Vie,"serverErrorHandler");function Yie(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=yA(new Error,"Invalid JSON.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(vie.isEmpty(e.body.operation)){let s=yA(new Error,"Request body must include an 'operation' property.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Yie,"reqBodyValidationHandler");function Kie(e,t,r){let s;e.body.operation!==bA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==bA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==bA.OPERATIONS_ENUM.LOGOUT?Fie(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{c_.warn(n),c_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(yA(n,i,Ph.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(Kie,"authHandler");async function Wie(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=dq.chooseOperation(e.body);let n=await dq.processLocalTransaction(e,s);if(n instanceof Hie&&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(xie({level:kie.Z_BEST_SPEED})))}return n}catch(n){throw c_.error(n),n}}a(Wie,"handlePostRequest");fq.exports={authHandler:Kie,handlePostRequest:Wie,handleServerUncaughtException:$ie,serverErrorHandler:Vie,reqBodyValidationHandler:Yie}});var pq=p((mAe,mq)=>{"use strict";var Qie=require("fastify-plugin"),{handlePostRequest:Eq,authHandler:zie,reqBodyValidationHandler:Jie}=Mh();async function jie(e){e.decorate("hdbCore",{preValidation:[Jie,zie],request:t=>hq(Eq(t,response)),requestWithoutAuthentication:(t,r)=>hq(Eq(t,r,!0))})}a(jie,"hdbCore");async function hq(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(hq,"convertAsyncIterators");mq.exports=Qie(jie)});var Tq=p((SAe,Sq)=>{"use strict";var IA=require("fs"),Ac=Q();Ac.initSync();var{CONFIG_PARAMS:u_}=A(),Xie=1024*1024*1024;function Zie(e){let t=Ac.get(u_.HTTP_TIMEOUT),r=Ac.get(u_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:Xie,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ac.get(u_.TLS_PRIVATEKEY),i=Ac.get(u_.TLS_CERTIFICATE),o=Ac.get(u_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:IA.readFileSync(`${n}`),cert:IA.readFileSync(i)+(o?`
25
+ `},q:.8});xt.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()}});zH={type:"application/json",serializeStream:ch.streamAsJSON,serialize:JSON.stringify,deserialize:$se,q:.8};xt.set("*/*",zH);xt.set("",zH);a($se,"tryJSONParse");a(jR,"registerContentHandlers");Vse=require("fastify-plugin"),Yse=Vse(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=lh(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(lh,"findBestSerializer");YH=QH.default.get(jH.CONFIG_PARAMS.HTTP_COMPRESSIONTHRESHOLD);a(_h,"serialize");a(Ji,"serializeMessage");a(Kse,"streamToBuffer");a(pc,"getDeserializer");a(KH,"deserializerUnknownType");a(Wse,"transformIterable")});var dh={};Ge(dh,{start:()=>zse});async function jse(e,t){let r=e.headers.asObject,s=r.accept==="text/event-stream"?"CONNECT":e.method;e.search&&md(e);let n=new zi;try{e.responseHeaders=n;let i=e.url.slice(1),o=JR.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 p=_.match(/max-age=(\d+)/)?.[1];p&&(e.expiresAt=p*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 Qe(e,()=>{if(s==="POST"||s==="PUT"||s==="PATCH"||s==="QUERY")try{e.data=pc(r["content-type"],!0)(e.body)}catch(p){throw new t_.ClientError(p,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.set("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 t_.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new t_.ServerError(`Method ${s} is not recognized`,501)}}),d=200,f;if(l==null)d=s==="GET"||s==="HEAD"?404:204,zR.lastModified&&e.lastModified&&n.set("Last-Modified",new Date(e.lastModified).toUTCString());else if(f=e.lastModified){Qse[0]=f;let p=String.fromCharCode(34,(kt[0]&63)+62,(kt[0]>>6)+(kt[1]<<2&63)+62,(kt[1]>>4)+(kt[2]<<4&63)+62,(kt[2]>>2)+62,(kt[3]&63)+62,(kt[3]>>6)+(kt[4]<<2&63)+62,(kt[4]>>4)+(kt[5]<<4&63)+62,(kt[5]>>2)+62,(kt[6]&63)+62,(kt[6]>>6)+(kt[7]<<2&63)+62,34),m=r["if-none-match"];m&&p==m?(l?.onDone&&l.onDone(),d=304,l=void 0):n.set("ETag",p),zR.lastModified&&n.set("Last-Modified",new Date(f).toUTCString())}e.createdResource&&(d=201),e.newLocation&&n.set("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.set("Age",Math.round((Date.now()-(e.lastRefreshed||f))/1e3))),l!==void 0&&(E.body=_h(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.set("Allow",i.allow.map(c=>c.toUpperCase()).join(", "))));let o={status:i.statusCode||500,headers:n,body:void 0};return o.body=_h(i.contentType?i:i.toString(),e,o),o}}function zse(e){zR=e,!XH&&(XH=!0,JR=e.resources,e.server.http(async(t,r)=>{if(!t.isWebSocket)return jse(t,r)}),e.server.ws(async(t,r,s)=>{e_++;let n=new ws;ZH||(ZH=!0,Xu(l=>{e_>0&&l.push({metric:"ws-connections",connections:e_,byThread:!0})}));let i;t.on("error",l=>{i=!0,ea.warn(l)});let o;t.on("message",a(function(d){o||(o=pc(r.headers.asObject["content-type"]));let f=o(d);n.push(f)},"message"));let c;t.on("close",()=>{e_--,as(!i,"connection","ws","disconnect"),n.emit("close"),c&&c.return()}),await s;let u=r.url.slice(1),_=JR.getMatch(u);if(as(!!_,"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:e_}),"connections",r.handlerPath,"connect","ws");let l={url:_.relativeURL,async:!0},d=_.Resource;c=(await Qe(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,t_,kt,Qse,zR,XH,JR,ZH,e_,e0=ge(()=>{_c();zn();ea=M(U()),t_=M(Z());pd();au();No();HE();kt=new Uint8Array(8),Qse=new Float64Array(kt.buffer,0,1),zR={};a(jse,"http");e_=0;a(zse,"start")});var XR=T((qRe,t0)=>{var{recordAction:fh,recordActionBinary:Jse}=(zn(),te(Zu)),Xse=require("fastify-plugin"),Zse=200;t0.exports=Xse(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.context.config,_,l,d;u.isOperation?(_=s.body?.operation,l="operation"):(_=u.url,l="fastify-route",d=u.method),fh(o,"duration",_,d,l),Jse(n.raw.statusCode<400,"success",_,d,l);let f=Zse;i?.pipe?(i.on("data",h=>{f+=h.length}),i.on("end",()=>{fh(performance.now()-c,"transfer",_,d,l),fh(f,"bytes-sent",_,d,l)})):(f+=i?.length||0,fh(f,"bytes-sent",_,d,l));let E=o.toFixed(3);n.header("Server-Timing",`db;dur=${E}`)}),r()},{name:"hdb-request-time"})});var rA=T((GRe,o0)=>{var Sh=require("clone"),Th=Ve(),ene=G(),mh=A(),tne=U(),Eh=require("fs"),ZR=require("joi"),{string:ph}=ZR.types(),{hdb_errors:rne,handleHDBError:r_}=Z(),{HDB_ERROR_MSGS:sne,HTTP_STATUS_CODES:hh}=rne,{common_validators:Sc}=cn(),r0=1e9,s0=" is required",nne=["insert","update","upsert"],eA={database:{presence:!1,format:Sc.schema_format,length:Sc.schema_length},schema:{presence:!1,format:Sc.schema_format,length:Sc.schema_length},table:{presence:!0,format:Sc.schema_format,length:Sc.schema_length},action:{inclusion:{within:nne,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},ine={schema:ph.required(),table:ph.required(),action:ph.valid("insert","update","upsert")},{AWS_ACCESS_KEY:one,AWS_SECRET:ane,AWS_BUCKET:cne,AWS_FILE_KEY:une,REGION:lne}=mh.S3_BUCKET_AUTH_KEYS,_ne={s3:{presence:!0},[`s3.${one}`]:{presence:!0,type:"String"},[`s3.${ane}`]:{presence:!0,type:"String"},[`s3.${cne}`]:{presence:!0,type:"String"},[`s3.${une}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${lne}`]:{presence:!0,type:"String"}},n0=Sh(eA);n0.data.presence={message:s0};var i0=Sh(eA);i0.file_path.presence={message:s0};var dne=Object.assign(Sh(eA),_ne),tA=Sh(ine);tA.csv_url=ph.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tA.passthrough_headers=ZR.object();function fne(e){let t=Th.validateObject(e,n0);return gh(e,t)}a(fne,"dataObject");function Ene(e){let t=Th.validateBySchema(e,ZR.object(tA));return gh(e,t)}a(Ene,"urlObject");function hne(e){let t=Th.validateObject(e,i0);return gh(e,t)}a(hne,"fileObject");function mne(e){let t=Th.validateObject(e,dne);return gh(e,t)}a(mne,"s3FileObject");function gh(e,t){if(!t){let r=ene.checkGlobalSchemaTable(e.schema,e.table);if(r)return r_(new Error,r,hh.BAD_REQUEST);if(e.operation===mh.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Eh.accessSync(e.file_path,Eh.constants.R_OK|Eh.constants.F_OK)}catch(s){return s.code===mh.NODE_ERROR_CODES.ENOENT?r_(s,`No such file or directory ${s.path}`,hh.BAD_REQUEST):s.code===mh.NODE_ERROR_CODES.EACCES?r_(s,`Permission denied ${s.path}`,hh.BAD_REQUEST):r_(s)}try{let s=Eh.statSync(e.file_path).size;if(s>r0)return r_(new Error,sne.MAX_FILE_SIZE_ERR(s,r0),hh.BAD_REQUEST)}catch(s){tne.error(s),console.error(s)}}}return t}a(gh,"postValidateChecks");o0.exports={dataObject:fne,urlObject:Ene,fileObject:hne,s3FileObject:mne}});var sA=T((xRe,a0)=>{"use strict";var s_=U(),Rh=A();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===Rh.OPERATIONS_ENUM.INSERT||t.operation===Rh.OPERATIONS_ENUM.UPDATE||t.operation===Rh.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Rh.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(s_.info(i.message),i):i.http_resp_msg?(s_.error(`Error calling operation: ${e.name}`),s_.error(i.http_resp_msg),i):(s_.error(`Error calling operation: ${e.name}`),s_.error(i),i)}}a(pne,"callOperationFunctionAsAwait");a0.exports={callOperationFunctionAsAwait:pne}});var u0=T(($Re,c0)=>{"use strict";var nA=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}},iA=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};c0.exports={BulkLoadFileObject:nA,BulkLoadDataObject:iA}});var _0=T((YRe,l0)=>{"use strict";var oA=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};l0.exports=oA});var dA=T((JRe,w0)=>{"use strict";var Ah=Er(),Nh=rA(),Sne=require("needle"),xs=A(),WRe=xe(),Tc=G(),{handleHDBError:Ze,hdb_errors:g0}=Z(),{HTTP_STATUS_CODES:$t,HDB_ERROR_MSGS:At,CHECK_LOGS_WRAPPER:ra}=g0,gc=U(),aA=require("papaparse");Tc.promisifyPapaParse();var ks=require("fs-extra"),Tne=require("path"),{chain:d0}=require("stream-chain"),f0=require("stream-json/streamers/StreamArray"),E0=require("stream-json/utils/Batch"),h0=require("stream-chain/utils/comp"),{finished:m0}=require("stream"),gne=Q(),R0=sA(),Rne=YR(),{BulkLoadFileObject:uA,BulkLoadDataObject:Ane}=u0(),lA=vR(),{verifyBulkLoadAttributePerms:A0}=nh(),QRe=_0(),jRe=st(),zRe=jn(),{databases:One}=(de(),te(Le)),{coerceType:Nne}=(Cf(),te(DT)),p0="No records parsed from csv file.",ta=`${gne.get("HDB_ROOT")}/tmp`,{schema_regex:bne}=cn(),S0=1024*1024*2,T0=5e3,yne={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};w0.exports={csvDataLoad:Ine,csvURLLoad:wne,csvFileLoad:Cne,importFromS3:Lne};async function Ine(e,t){let r=Nh.dataObject(e);if(r)throw Ze(r,r.message,$t.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=b0(e.schema,e.table),i=aA.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cA.bind(null,n),dynamicTyping:!1}),o=new lA;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&A0(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,$t.BAD_REQUEST,void 0,void 0,!0);let u=new Ane(e.action,e.schema,e.table,i.data);return s=await R0.callOperationFunctionAsAwait(y0,u,null),s.message===p0?p0:I0(s.records,s.number_written)}catch(n){throw sa(n)}}a(Ine,"csvDataLoad");async function wne(e){let t=Nh.urlObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${ta}/${r}`;try{await Dne(e,r)}catch(n){throw gc.error(At.DOWNLOAD_FILE_ERR(r)+" - "+n),Ze(n,ra(At.DOWNLOAD_FILE_ERR(r)))}try{let n=new uA(this.job_operation_function.name,e.action,e.schema,e.table,s,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await _A(n);return await Oh(s),i}catch(n){throw await Oh(s),sa(n)}}a(wne,"csvURLLoad");async function Cne(e){let t=Nh.fileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r=new uA(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,xs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await _A(r)}catch(s){throw sa(s)}}a(Cne,"csvFileLoad");async function Lne(e){let t=Nh.s3FileObject(e);if(t)throw Ze(t,t.message,$t.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=Tne.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${ta}/${n}`;let i=new uA(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Pne(n,e);let o=await _A(i);return await Oh(r),o}catch(s){throw await Oh(r),sa(s)}}a(Lne,"importFromS3");async function Dne(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await Sne("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,xs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Une(r,e.csv_url),await Mne(t,r.raw)}a(Dne,"downloadCSVFile");async function Pne(e,t){try{let r=`${ta}/${e}`;await ks.mkdirp(ta),await ks.writeFile(`${ta}/${e}`,"",{flag:"a+"});let s=await ks.createWriteStream(r),n=await Rne.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(){gc.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw gc.error(At.S3_DOWNLOAD_ERR+" - "+r),Ze(r,ra(At.S3_DOWNLOAD_ERR))}}a(Pne,"downloadFileFromS3");async function Mne(e,t){try{await ks.mkdirp(ta),await ks.writeFile(`${ta}/${e}`,t)}catch(r){throw gc.error(At.WRITE_TEMP_FILE_ERR),Ze(r,ra(At.DEFAULT_BULK_LOAD_ERR))}}a(Mne,"writeFileToTempFolder");async function Oh(e){if(e)try{await ks.access(e),await ks.unlink(e)}catch{gc.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Oh,"deleteTempFile");function Une(e,t){if(e.statusCode!==g0.HTTP_STATUS_CODES.OK)throw Ze(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,$t.BAD_REQUEST);if(!yne[e.headers["content-type"]])throw Ze(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,$t.BAD_REQUEST);if(!e.raw)throw Ze(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,$t.BAD_REQUEST)}a(Une,"validateURLResponse");async function _A(e){try{let t;switch(e.file_type){case xs.VALID_S3_FILE_TYPES.CSV:t=await vne(e);break;case xs.VALID_S3_FILE_TYPES.JSON:t=await Bne(e);break;default:throw Ze(new Error,At.DEFAULT_BULK_LOAD_ERR,$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,At.INVALID_FILE_EXT_ERR(e))}return I0(t.records,t.number_written)}catch(t){throw sa(t)}}a(_A,"fileLoad");async function O0(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 Ah.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&A0(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(O0,"validateChunk");async function N0(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Tc.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Tc.isEmpty(c)&&!Tc.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 R0.callOperationFunctionAsAwait(y0,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ze(c,ra(At.INSERT_CSV_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,At.INSERT_CSV_ERR+" - "+c);r(u)}}a(N0,"insertChunk");async function vne(e){let t={records:0,number_written:0},r=b0(e.schema,e.table);try{let s=new lA,n=ks.createReadStream(e.file_path,{highWaterMark:S0});n.setEncoding("utf8"),await aA.parsePromise(n,O0.bind(null,e,s),cA.bind(null,r));let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);return n=ks.createReadStream(e.file_path,{highWaterMark:S0}),n.setEncoding("utf8"),await aA.parsePromise(n,N0.bind(null,e,t),cA.bind(null,r)),n.destroy(),t}catch(s){throw Ze(s,ra(At.PAPA_PARSE_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,At.PAPA_PARSE_ERR+s)}}a(vne,"callPapaParse");function b0(e,t){let r=One[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>Nne(i,n));return s}a(b0,"createTransformMap");function cA(e,t,r){let s=e.get(r);return s?s(t):Tc.autoCast(t)}a(cA,"typeFunction");async function Bne(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new lA,n=d0([ks.createReadStream(e.file_path,{encoding:"utf-8"}),f0.withParser(),c=>c.value,new E0({batchSize:T0}),h0(async c=>{await O0(e,s,r,c)})]);await new Promise((c,u)=>{m0(n,_=>{_?u(_):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ze(new Error,i,$t.BAD_REQUEST);let o=d0([ks.createReadStream(e.file_path,{encoding:"utf-8"}),f0.withParser(),c=>c.value,new E0({batchSize:T0}),h0(async c=>{await N0(e,t,r,c)})]);return await new Promise((c,u)=>{m0(o,_=>{_?u(_):c()}),o.resume()}),t}catch(s){throw Ze(s,ra(At.INSERT_JSON_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,At.INSERT_JSON_ERR+s)}}a(Bne,"insertJson");async function y0(e){let t={};try{e.data&&e.data.length>0&&Hne(e.data[0])?t=await qne(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",gc.info(t.message))}catch(r){throw sa(r)}return t}a(y0,"callBulkFileLoad");function Hne(e){let t=Object.keys(e);for(let r of t)if(!bne.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Hne,"validateColumnNames");async function qne(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=Ah.insert;break;case"update":i=Ah.update;break;case"upsert":i=Ah.upsert;break;default:throw Ze(new Error,At.INVALID_ACTION_PARAM_ERR(s),$t.BAD_REQUEST,xs.LOG_LEVELS.ERROR,At.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=Tc.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw sa(o)}}a(qne,"bulkFileLoad");function I0(e,t){return`successfully loaded ${t} of ${e} records`}a(I0,"buildResponseMsg");function sa(e){return Ze(e,ra(At.DEFAULT_BULK_LOAD_ERR),$t.INTERNAL_SERVER_ERROR,xs.LOG_LEVELS.ERROR,At.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(sa,"buildTopLevelErrMsg")});var L0=T((ZRe,C0)=>{"use strict";var fA=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};C0.exports=fA});var M0=T((tAe,P0)=>{"use strict";var Gne=A(),D0=require("moment"),Fne=require("uuid").v4,EA=class{static{a(this,"JobObject")}constructor(){this.id=Fne(),this.type=void 0,this.start_datetime=D0().valueOf(),this.created_datetime=D0().valueOf(),this.end_datetime=void 0,this.status=Gne.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};P0.exports=EA});var hA=T((sAe,G0)=>{"use strict";var xne=require("uuid").v4,B0=Er(),H0=fr(),kne=Ms(),$ne=Ua(),Vne=L0(),et=A(),Yne=M0(),Kne=tE(),ps=U(),Wne=bu(),Rc=G(),{promisify:Qne}=require("util"),na=require("moment"),jne=oh(),bh=rA(),U0=tT(),{deleteTransactionLogsBeforeValidator:zne}=LR(),{handleHDBError:Jne,hdb_errors:Xne}=Z(),{HTTP_STATUS_CODES:Zne}=Xne,v0=H0.searchByValue,eie=H0.searchByHash,tie=B0.insert,rie=Qne(jne.evaluateSQL),sie=B0.update;G0.exports={addJob:oie,updateJob:cie,handleGetJob:nie,handleGetJobsByStartDate:iie,getJobById:q0};async function nie(e){try{let t=await q0(e.id);return Rc.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 ps.error("There was an error getting job",t),new Error(r)}}a(nie,"handleGetJob");async function iie(e){try{let t=await aie(e);if(ps.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 ps.error(r),new Error(r)}}a(iie,"handleGetJobsByStartDate");async function oie(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Rc.isEmptyOrZeroLength(e.operation)){let l="job parameter is invalid";return ps.info(l),t.error=l,t}if(!et.JOB_TYPE_ENUM[e.operation])return ps.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case et.OPERATIONS_ENUM.CSV_FILE_LOAD:s=bh.fileObject(e);break;case et.OPERATIONS_ENUM.CSV_URL_LOAD:s=bh.urlObject(e);break;case et.OPERATIONS_ENUM.CSV_DATA_LOAD:s=bh.dataObject(e);break;case et.OPERATIONS_ENUM.IMPORT_FROM_S3:s=bh.s3FileObject(e);break;case et.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case et.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=U0(e,"date");break;case et.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=U0(e,"timestamp");break;case et.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=zne(e);break;default:break}if(s)throw Jne(s,s.message,Zne.BAD_REQUEST,void 0,void 0,!0);let n=new Yne;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 kne(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 ps.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=xne();try{o=await v0(i)}catch(l){let d=`There was an error inserting a new job: ${l}`;return ps.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return ps.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Wne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),_;try{_=await tie(u)}catch(l){return ps.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,ps.trace(l)}return t}a(oie,"addJob");async function aie(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 Vne(s,e.hdb_user);try{return await rie(n)}catch(i){throw ps.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 q0(e){if(Rc.isEmptyOrZeroLength(e))return Rc.errorizeMessage("Invalid job ID specified.");let t=new $ne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await eie(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return ps.error(s),Rc.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(q0,"getJobById");async function cie(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Rc.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 Kne(et.SYSTEM_SCHEMA_NAME,et.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await sie(t),r}a(cie,"updateJob")});var Y0=T((iAe,V0)=>{"use strict";var F0=G(),Ir=A(),uie=require("moment"),yh=dA(),Ih=U(),x0=hA(),k0=ah(),$0=Ho(),lie=je(),_ie=eh(),mA=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function die(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(F0.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(F0.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,yh.csvFileLoad);break;case Ir.JOB_TYPE_ENUM.csv_url_load:await ai(e,yh.csvURLLoad);break;case Ir.JOB_TYPE_ENUM.csv_data_load:await ai(e,yh.csvDataLoad);break;case Ir.JOB_TYPE_ENUM.import_from_s3:await ai(e,yh.importFromS3);break;case Ir.JOB_TYPE_ENUM.empty_trash:break;case Ir.JOB_TYPE_ENUM.export_local:await ai(e,k0.export_local);break;case Ir.JOB_TYPE_ENUM.export_to_s3:await ai(e,k0.export_to_s3);break;case Ir.JOB_TYPE_ENUM.delete_files_before:case Ir.JOB_TYPE_ENUM.delete_records_before:await ai(e,$0.deleteFilesBefore);break;case Ir.JOB_TYPE_ENUM.delete_audit_logs_before:await ai(e,$0.deleteAuditLogsBefore);break;case Ir.JOB_TYPE_ENUM.delete_transaction_logs_before:await ai(e,_ie.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(die,"parseMessage");async function ai(e,t){try{e.job.status=Ir.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=uie().valueOf(),await x0.updateJob(e.job),await fie(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):Ih.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ih.error(s),e.job.message=s,e.job.status=Ir.JOB_STATUS_ENUM.ERROR;try{await x0.updateJob(e.job)}catch(n){throw Ih.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(ai,"runJob");async function fie(e){Ih.trace("launching job thread:",e),lie.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Ir.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(fie,"launchJobThread");V0.exports={parseMessage:die,RunnerMessage:mA}});var W0=T((aAe,K0)=>{"use strict";var pA=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};K0.exports=pA});var uq=T((uAe,OA)=>{"use strict";var Dh=fr(),gA=oh(),wh=dA(),ci=Kf(),Ch=vi(),i_=Ho(),Eie=og(),n_=hr(),Lh=Jf(),Vt=zE(),Ot=U(),hie=pg(),mie=Nl(),pie=zg(),Sie=EE(),Tie=mE(),gie=Jg(),Rie=TE(),Aie=RE(),SA=OE(),Q0=ah(),Oie=nh(),RA=hA(),P=A(),{hdb_errors:a_,handleHDBError:o_}=Z(),{HTTP_STATUS_CODES:j0}=a_,TA=bE(),z0=Qo(),iq=require("util"),Ac=Er(),Nie=os(),bie=Jn(),J0=Y0(),X0=gl(),Z0=(xE(),te(Fl)),eq=tt(),tq=eh(),rq=KE(),{setServerUtilities:yie}=(Cf(),te(DT)),{CONTEXT:Iie}=(tn(),te(ap)),{_assignPackageExport:wie}=require("../index"),{transformReq:Cie}=G(),{server:Lie}=(Pr(),te(So)),Die=sA(),sq=Dh.searchByHash,Pie=Dh.searchByValue,Mie=iq.promisify(Dh.search),Uie=iq.promisify(gA.evaluateSQL),vie={[P.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.CREATE_TABLE]:!0,[P.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[P.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[P.OPERATIONS_ENUM.DROP_TABLE]:!0,[P.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=W0();async function oq(e,t){try{if(e.body.operation!=="read_log"&&(Ot.log_level===P.LOG_LEVELS.INFO||Ot.log_level===P.LOG_LEVELS.DEBUG||Ot.log_level===P.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;Ot.info(o)}}catch(s){Ot.error(s)}let r=await Die.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return vie[e.body.operation]&&Nie.setSchemaDataToGlobal(s=>{s&&Ot.error(s)}),r}a(oq,"processLocalTransaction");var nq=Hie();OA.exports={chooseOperation:aq,getOperationFunction:cq,operation:AA,processLocalTransaction:oq};yie(OA.exports);Lie.operation=AA;function aq(e){let t;try{t=cq(e)}catch(n){throw Ot.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=gA.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=gA.checkASTPermissions(e,i);if(o)throw Ot.error(`${j0.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),o_(new Error,o,a_.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==P.OPERATIONS_ENUM.LOGIN&&e.operation!==P.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=Oie.verifyPerms(i,n);if(o)throw Ot.error(`${j0.FORBIDDEN} from operation ${e.operation}`),Ot.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),o_(new Error,o,a_.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw o_(n,"There was an error when trying to choose an operation path")}return r}a(aq,"chooseOperation");function cq(e){if(Ot.trace(`getOperationFunction with operation: ${e.operation}`),nq.has(e.operation))return nq.get(e.operation);throw o_(new Error,a_.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),a_.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(cq,"getOperationFunction");wie("operation",AA);function AA(e,t){e.hdb_user=this[Iie]?.user,e.bypass_auth=!t;let r=aq(e);return oq({body:e},r)}a(AA,"operation");async function Bie(e){Ot.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[P.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case P.OPERATIONS_ENUM.INSERT:o=await Ac.insert(i);break;case P.OPERATIONS_ENUM.UPDATE:o=await Ac.update(i);break;case P.OPERATIONS_ENUM.UPSERT:o=await Ac.upsert(i);break;case P.OPERATIONS_ENUM.DELETE:o=await i_.deleteRecord(i);break;default:Ot.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){Ot.info("Invalid operation in transaction"),Ot.error(o)}}a(Bie,"catchup");async function On(e){Cie(e);let t,r;try{r=await RA.addJob(e),t=r.createdJob,Ot.info("addJob result",r);let s=new J0.RunnerMessage(t,e);return await J0.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 Ot.error(n),o_(s,n)}}a(On,"executeJob");function Hie(){let e=new Map;return e.set(P.OPERATIONS_ENUM.INSERT,new q(Ac.insert)),e.set(P.OPERATIONS_ENUM.UPDATE,new q(Ac.update)),e.set(P.OPERATIONS_ENUM.UPSERT,new q(Ac.upsert)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(Dh.searchByConditions)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(sq)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_ID,new q(sq)),e.set(P.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Pie)),e.set(P.OPERATIONS_ENUM.SEARCH,new q(Mie)),e.set(P.OPERATIONS_ENUM.SQL,new q(Uie)),e.set(P.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(On,wh.csvDataLoad)),e.set(P.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(On,wh.csvFileLoad)),e.set(P.OPERATIONS_ENUM.CSV_URL_LOAD,new q(On,wh.csvURLLoad)),e.set(P.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(On,wh.importFromS3)),e.set(P.OPERATIONS_ENUM.CREATE_SCHEMA,new q(ci.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_DATABASE,new q(ci.createSchema)),e.set(P.OPERATIONS_ENUM.CREATE_TABLE,new q(ci.createTable)),e.set(P.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(ci.createAttribute)),e.set(P.OPERATIONS_ENUM.DROP_SCHEMA,new q(ci.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_DATABASE,new q(ci.dropSchema)),e.set(P.OPERATIONS_ENUM.DROP_TABLE,new q(ci.dropTable)),e.set(P.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(ci.dropAttribute)),e.set(P.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(Ch.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(Ch.describeSchema)),e.set(P.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(Ch.describeTable)),e.set(P.OPERATIONS_ENUM.DESCRIBE_ALL,new q(Ch.describeAll)),e.set(P.OPERATIONS_ENUM.DELETE,new q(i_.deleteRecord)),e.set(P.OPERATIONS_ENUM.ADD_USER,new q(n_.addUser)),e.set(P.OPERATIONS_ENUM.ALTER_USER,new q(n_.alterUser)),e.set(P.OPERATIONS_ENUM.DROP_USER,new q(n_.dropUser)),e.set(P.OPERATIONS_ENUM.LIST_USERS,new q(n_.listUsersExternal)),e.set(P.OPERATIONS_ENUM.LIST_ROLES,new q(Lh.listRoles)),e.set(P.OPERATIONS_ENUM.ADD_ROLE,new q(Lh.addRole)),e.set(P.OPERATIONS_ENUM.ALTER_ROLE,new q(Lh.alterRole)),e.set(P.OPERATIONS_ENUM.DROP_ROLE,new q(Lh.dropRole)),e.set(P.OPERATIONS_ENUM.USER_INFO,new q(n_.userInfo)),e.set(P.OPERATIONS_ENUM.READ_LOG,new q(hie)),e.set(P.OPERATIONS_ENUM.ADD_NODE,new q(mie)),e.set(P.OPERATIONS_ENUM.UPDATE_NODE,new q(pie)),e.set(P.OPERATIONS_ENUM.REMOVE_NODE,new q(Sie)),e.set(P.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(Tie)),e.set(P.OPERATIONS_ENUM.PURGE_STREAM,new q(gie)),e.set(P.OPERATIONS_ENUM.SET_CONFIGURATION,new q(eq.setConfiguration)),e.set(P.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Rie.clusterStatus)),e.set(P.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Aie)),e.set(P.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(SA.setRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(SA.getRoutes)),e.set(P.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(SA.deleteRoutes)),e.set(P.OPERATIONS_ENUM.EXPORT_TO_S3,new q(On,Q0.export_to_s3)),e.set(P.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(On,i_.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(On,i_.deleteFilesBefore)),e.set(P.OPERATIONS_ENUM.EXPORT_LOCAL,new q(On,Q0.export_local)),e.set(P.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(RA.handleGetJobsByStartDate)),e.set(P.OPERATIONS_ENUM.GET_JOB,new q(RA.handleGetJob)),e.set(P.OPERATIONS_ENUM.GET_FINGERPRINT,new q(TA.getFingerprint)),e.set(P.OPERATIONS_ENUM.SET_LICENSE,new q(TA.setLicense)),e.set(P.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(TA.getRegistrationInfo)),e.set(P.OPERATIONS_ENUM.RESTART,new q(z0.restart)),e.set(P.OPERATIONS_ENUM.RESTART_SERVICE,new q(z0.restartService)),e.set(P.OPERATIONS_ENUM.CATCHUP,new q(Bie)),e.set(P.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(bie.systemInformation)),e.set(P.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(On,i_.deleteAuditLogsBefore)),e.set(P.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(Eie)),e.set(P.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(X0.createTokens)),e.set(P.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(X0.refreshOperationToken)),e.set(P.OPERATIONS_ENUM.LOGIN,new q(Z0.login)),e.set(P.OPERATIONS_ENUM.LOGOUT,new q(Z0.logout)),e.set(P.OPERATIONS_ENUM.GET_CONFIGURATION,new q(eq.getConfiguration)),e.set(P.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(Vt.customFunctionsStatus)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(Vt.getCustomFunctions)),e.set(P.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(Vt.getComponentFile)),e.set(P.OPERATIONS_ENUM.GET_COMPONENTS,new q(Vt.getComponents)),e.set(P.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(Vt.setComponentFile)),e.set(P.OPERATIONS_ENUM.DROP_COMPONENT,new q(Vt.dropComponent)),e.set(P.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(Vt.getCustomFunction)),e.set(P.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(Vt.setCustomFunction)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(Vt.dropCustomFunction)),e.set(P.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(Vt.addComponent)),e.set(P.OPERATIONS_ENUM.ADD_COMPONENT,new q(Vt.addComponent)),e.set(P.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(Vt.dropCustomFunctionProject)),e.set(P.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(Vt.packageComponent)),e.set(P.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(Vt.packageComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(Vt.deployComponent)),e.set(P.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(Vt.deployComponent)),e.set(P.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(tq.readTransactionLog)),e.set(P.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(On,tq.deleteTransactionLogsBefore)),e.set(P.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(rq.installModules)),e.set(P.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(rq.auditModules)),e.set(P.OPERATIONS_ENUM.GET_BACKUP,new q(ci.getBackup)),e}a(Hie,"initializeOperationFunctionMap")});var Mh=T((_Ae,dq)=>{"use strict";var NA=A(),qie=G(),c_=U(),{handleHDBError:bA,hdb_errors:Ph}=Z(),{isMainThread:Gie}=require("worker_threads"),{Readable:Fie}=require("stream"),lq=require("os"),xie=require("util"),kie=Ig(),$ie=xie.promisify(kie.authorize),_q=uq(),{createGzip:Vie,constants:Yie}=require("zlib");function Kie(e){let t=`Found an uncaught exception with message: ${e.message}. ${lq.EOL}Stack: ${e.stack} ${lq.EOL}Terminating ${Gie?"HDB":"thread"}.`;console.error(t),c_.fatal(t),process.exit(1)}a(Kie,"handleServerUncaughtException");function Wie(e,t,r){if(c_[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:Ph.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(Wie,"serverErrorHandler");function Qie(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=bA(new Error,"Invalid JSON.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(qie.isEmpty(e.body.operation)){let s=bA(new Error,"Request body must include an 'operation' property.",Ph.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Qie,"reqBodyValidationHandler");function jie(e,t,r){let s;e.body.operation!==NA.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==NA.OPERATIONS_ENUM.LOGIN&&e.body.operation!==NA.OPERATIONS_ENUM.LOGOUT?$ie(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{c_.warn(n),c_.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(bA(n,i,Ph.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(jie,"authHandler");async function zie(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=_q.chooseOperation(e.body);let n=await _q.processLocalTransaction(e,s);if(n instanceof Fie&&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(Vie({level:Yie.Z_BEST_SPEED})))}return n}catch(n){throw c_.error(n),n}}a(zie,"handlePostRequest");dq.exports={authHandler:jie,handlePostRequest:zie,handleServerUncaughtException:Kie,serverErrorHandler:Wie,reqBodyValidationHandler:Qie}});var mq=T((fAe,hq)=>{"use strict";var Jie=require("fastify-plugin"),{handlePostRequest:fq,authHandler:Xie,reqBodyValidationHandler:Zie}=Mh();async function eoe(e){e.decorate("hdbCore",{preValidation:[Zie,Xie],request:t=>Eq(fq(t,response)),requestWithoutAuthentication:(t,r)=>Eq(fq(t,r,!0))})}a(eoe,"hdbCore");async function Eq(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(Eq,"convertAsyncIterators");hq.exports=Jie(eoe)});var Sq=T((hAe,pq)=>{"use strict";var yA=require("fs"),Oc=Q();Oc.initSync();var{CONFIG_PARAMS:u_}=A(),toe=1024*1024*1024;function roe(e){let t=Oc.get(u_.HTTP_TIMEOUT),r=Oc.get(u_.HTTP_KEEPALIVETIMEOUT),s={bodyLimit:toe,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Oc.get(u_.TLS_PRIVATEKEY),i=Oc.get(u_.TLS_CERTIFICATE),o=Oc.get(u_.TLS_CERTIFICATEAUTHORITY);s.https={allowHTTP1:!0,key:yA.readFileSync(`${n}`),cert:yA.readFileSync(i)+(o?`
26
26
 
27
- `+IA.readFileSync(o):"")},s.http2=!0}return s}a(Zie,"getServerOptions");Sq.exports=Zie});var Aq=p((gAe,Rq)=>{"use strict";var wA=Q();wA.initSync();var{CONFIG_PARAMS:gq}=A();function eoe(){let e=wA.get(gq.HTTP_CORSACCESSLIST),t=wA.get(gq.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(eoe,"getCORSOptions");Rq.exports=eoe});var bq=p((AAe,Nq)=>{"use strict";var Oq=Q();Oq.initSync();var toe=A();function roe(){return Oq.get(toe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(roe,"getHeaderTimeoutConfig");Nq.exports=roe});var DA={};Fe(DA,{customFunctionsServer:()=>ioe,handleFile:()=>noe,ready:()=>coe});async function noe(e,t,r,s){if(!ui){let c=CA.get(LA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);ui=qq(c),gt.http((await ui).server)}let n=await ui,i=(0,Iq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!yq.has(i)){yq.add(i);try{n.register(aoe(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 ioe(){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 ooe();let e=CA.get(LA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=ui=await qq(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 ooe(){try{ve.info("Custom Functions starting configuration."),await Mq.setUsersToGlobal(),ve.info("Custom Functions completed configuration.")}catch(e){ve.error(e)}}function aoe(e,t){return async function(r){try{ve.info("Custom Functions starting buildRoutes"),ve.trace("Loading fastify routes folder "+e),(0,wq.existsSync)(e)&&r.register(Pq.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 qq(e){ve.info("Custom Functions starting buildServer.");let t=(0,Uq.default)(e),r=(0,Cq.default)(t);r.server.headersTimeout=(0,Bq.default)(),r.setErrorHandler(Hq.serverErrorHandler);let s=(0,vq.default)();return s&&r.register(Lq.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Dq.default),await r.register(soe),await r.after(),JR(r),ve.info("Custom Functions completed buildServer."),r}function coe(){if(ui)return ui.then?ui.then(e=>e.ready()):ui.ready()}var Iq,wq,Cq,Lq,Dq,Pq,CA,LA,ve,soe,Mq,Uq,vq,Bq,Hq,ui,yq,Gq=ge(()=>{Iq=require("path"),wq=require("fs"),Cq=P(require("fastify")),Lq=P(require("@fastify/cors")),Dq=P(ZR()),Pq=P(require("@fastify/autoload")),CA=P(Q()),LA=P(A()),ve=P(M()),soe=P(pq()),Mq=P(dr()),Uq=P(Tq()),vq=P(Aq()),Bq=P(bq()),Hq=P(Mh());lc();Dr();yq=new Set;a(noe,"handleFile");a(ioe,"customFunctionsServer");a(ooe,"setUp");a(aoe,"buildRouteFolder");a(qq,"buildServer");a(coe,"ready")});var PA={};Fe(PA,{start:()=>uoe});function uoe(e){return{handleFile(t,r,s){xq||(xq=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Fq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,kq.default)(n,(0,$q.realpathSync)(o))}}return i(n)},{runFirst:!0})),Fq.set(r,s)}}}var kq,$q,Fq,xq,Vq=ge(()=>{kq=P(require("send")),$q=require("fs"),Fq=new Map;a(uoe,"start")});var Qq=p((DAe,Wq)=>{"use strict";var loe=require("cluster"),Fs=Q();Fs.initSync();var Kq=A(),wAe=require("util"),li=M(),MA=require("fs"),_oe=require("fastify"),CAe=ho(),doe=require("@fastify/cors"),foe=require("@fastify/compress"),Eoe=require("@fastify/static"),hoe=ZR(),moe=require("path"),{PACKAGE_ROOT:poe}=A(),Soe=ns(),Toe=G(),goe=dr(),Roe=Yu(),{server:Aoe}=(Dr(),te(po)),{authHandler:Ooe,handlePostRequest:Noe,serverErrorHandler:boe,reqBodyValidationHandler:yoe}=Mh(),LAe=require("net"),{registerContentHandlers:Ioe}=(lc(),te(XH)),woe=6e4,Coe=1024*1024*1024,Loe="TRUE",{CONFIG_PARAMS:_i}=Kq,ia;Wq.exports={hdbServer:Yq,start:Yq};async function Yq(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=loe.isMaster,await Doe();let t=Fs.get(_i.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;ia=Poe(t),await ia.ready(),e||(e={}),e.isOperationsServer=!0,ia.server.cantCleanupProperly=!0;try{Aoe.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(Yq,"operationsServer");async function Doe(){li.trace("Configuring HarperDB process."),Soe.setSchemaDataToGlobal(),await goe.setUsersToGlobal(),await Roe.getLicense()}a(Doe,"setUp");function Poe(e){li.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Moe(e),r=_oe(t);r.server.headersTimeout=voe(),r.setErrorHandler(boe);let s=Uoe();s&&r.register(doe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(hoe),r.register(foe),r.register(Eoe,{root:moe.join(poe,"studio")}),Ioe(r);let n=Fs.get(Kq.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Toe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[yoe,Ooe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Noe(i,o)}),r.get("/health",()=>"HarperDB is running."),li.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(Poe,"buildServer");function Moe(e){let t=Fs.get(_i.OPERATIONSAPI_NETWORK_TIMEOUT),r=Fs.get(_i.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Coe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Fs.get(_i.OPERATIONSAPI_TLS_PRIVATEKEY),i=Fs.get(_i.OPERATIONSAPI_TLS_CERTIFICATE),o=Fs.get(_i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:MA.readFileSync(n),cert:MA.readFileSync(i)+(o?`
27
+ `+yA.readFileSync(o):"")},s.http2=!0}return s}a(roe,"getServerOptions");pq.exports=roe});var Rq=T((pAe,gq)=>{"use strict";var IA=Q();IA.initSync();var{CONFIG_PARAMS:Tq}=A();function soe(){let e=IA.get(Tq.HTTP_CORSACCESSLIST),t=IA.get(Tq.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");gq.exports=soe});var Nq=T((TAe,Oq)=>{"use strict";var Aq=Q();Aq.initSync();var noe=A();function ioe(){return Aq.get(noe.CONFIG_PARAMS.HTTP_HEADERSTIMEOUT)??6e4}a(ioe,"getHeaderTimeoutConfig");Oq.exports=ioe});var LA={};Ge(LA,{customFunctionsServer:()=>coe,handleFile:()=>aoe,ready:()=>_oe});async function aoe(e,t,r,s){if(!ui){let c=wA.get(CA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);ui=Hq(c),Tt.http((await ui).server)}let n=await ui,i=(0,yq.dirname)(r),o=t.replace(/\/routes\/.*/g,"");if(o.startsWith("/")&&(o=o.slice(1)),!bq.has(i)){bq.add(i);try{n.register(loe(i,o))}catch(c){if(c.message==="Root plugin has already booted")Ue.warn(`Could not load root fastify route for ${r}, this may require a restart to install properly`);else throw c}}}async function coe(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await uoe();let e=wA.get(CA.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=ui=await Hq(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function uoe(){try{Ue.info("Custom Functions starting configuration."),await Pq.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function loe(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Iq.existsSync)(e)&&r.register(Dq.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Hq(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Mq.default)(e),r=(0,wq.default)(t);r.server.headersTimeout=(0,vq.default)(),r.setErrorHandler(Bq.serverErrorHandler);let s=(0,Uq.default)();return s&&r.register(Cq.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Lq.default),await r.register(ooe),await r.after(),jR(r),Ue.info("Custom Functions completed buildServer."),r}function _oe(){if(ui)return ui.then?ui.then(e=>e.ready()):ui.ready()}var yq,Iq,wq,Cq,Lq,Dq,wA,CA,Ue,ooe,Pq,Mq,Uq,vq,Bq,ui,bq,qq=ge(()=>{yq=require("path"),Iq=require("fs"),wq=M(require("fastify")),Cq=M(require("@fastify/cors")),Lq=M(XR()),Dq=M(require("@fastify/autoload")),wA=M(Q()),CA=M(A()),Ue=M(U()),ooe=M(mq()),Pq=M(hr()),Mq=M(Sq()),Uq=M(Rq()),vq=M(Nq()),Bq=M(Mh());_c();Pr();bq=new Set;a(aoe,"handleFile");a(coe,"customFunctionsServer");a(uoe,"setUp");a(loe,"buildRouteFolder");a(Hq,"buildServer");a(_oe,"ready")});var DA={};Ge(DA,{start:()=>doe});function doe(e){return{handleFile(t,r,s){Fq||(Fq=!0,e.server.http(async(n,i)=>{if(!n.isWebSocket){let o=Gq.get(n.pathname);if(o)return{handlesHeaders:!0,body:(0,xq.default)(n,(0,kq.realpathSync)(o))}}return i(n)},{runFirst:!0})),Gq.set(r,s)}}}var xq,kq,Gq,Fq,$q=ge(()=>{xq=M(require("send")),kq=require("fs"),Gq=new Map;a(doe,"start")});var Wq=T((wAe,Kq)=>{"use strict";var foe=require("cluster"),$s=Q();$s.initSync();var Yq=A(),bAe=require("util"),li=U(),PA=require("fs"),Eoe=require("fastify"),yAe=mo(),hoe=require("@fastify/cors"),moe=require("@fastify/compress"),poe=require("@fastify/static"),Soe=XR(),Toe=require("path"),{PACKAGE_ROOT:goe}=A(),Roe=os(),Aoe=G(),Ooe=hr(),Noe=Ku(),{server:boe}=(Pr(),te(So)),{authHandler:yoe,handlePostRequest:Ioe,serverErrorHandler:woe,reqBodyValidationHandler:Coe}=Mh(),IAe=require("net"),{registerContentHandlers:Loe}=(_c(),te(JH)),Doe=6e4,Poe=1024*1024*1024,Moe="TRUE",{CONFIG_PARAMS:_i}=Yq,ia;Kq.exports={hdbServer:Vq,start:Vq};async function Vq(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=foe.isMaster,await Uoe();let t=$s.get(_i.OPERATIONSAPI_NETWORK_SECUREPORT)!=null;ia=voe(t),await ia.ready(),e||(e={}),e.isOperationsServer=!0,ia.server.cantCleanupProperly=!0;try{boe.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(Vq,"operationsServer");async function Uoe(){li.trace("Configuring HarperDB process."),Roe.setSchemaDataToGlobal(),await Ooe.setUsersToGlobal(),await Noe.getLicense()}a(Uoe,"setUp");function voe(e){li.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Boe(e),r=Eoe(t);r.server.headersTimeout=qoe(),r.setErrorHandler(woe);let s=Hoe();s&&r.register(hoe,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,_){r.server.emit("unhandled",u.raw,_.raw)}),c()}),r.register(Soe),r.register(moe),r.register(poe,{root:Toe.join(goe,"studio")}),Loe(r);let n=$s.get(Yq.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Aoe.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.sendFile("running.html")}),r.post("/",{preValidation:[Coe,yoe],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Ioe(i,o)}),r.get("/health",()=>"HarperDB is running."),li.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(voe,"buildServer");function Boe(e){let t=$s.get(_i.OPERATIONSAPI_NETWORK_TIMEOUT),r=$s.get(_i.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Poe,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=$s.get(_i.OPERATIONSAPI_TLS_PRIVATEKEY),i=$s.get(_i.OPERATIONSAPI_TLS_CERTIFICATE),o=$s.get(_i.OPERATIONSAPI_TLS_CERTIFICATEAUTHORITY),c={allowHTTP1:!0,key:PA.readFileSync(n),cert:PA.readFileSync(i)+(o?`
28
28
 
29
- `+MA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Moe,"getServerOptions");function Uoe(){let e=Fs.get(_i.OPERATIONSAPI_NETWORK_CORS),t=Fs.get(_i.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Loe)&&(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(Uoe,"getCORSOpts");function voe(){return Fs.get(_i.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??woe}a(voe,"getHeaderTimeoutConfig")});var iG=p((vAe,nG)=>{"use strict";var{decode:Boe}=require("msgpackr"),{isMainThread:Hoe,parentPort:qoe,threadId:MAe}=require("worker_threads"),vA=nt(),di=ke(),Goe=A(),l_=M(),zq=Q(),jq=A();Je();var Foe=zn(),{recordAction:xoe,recordActionBinary:koe}=(Jn(),te(Xu)),{publishToStream:$oe}=vA,UAe={durable:di.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:di.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Voe,Yoe,Koe,Xq,Zq;nG.exports={initialize:eG,workQueueListener:sG,setSubscription:Woe,setIgnoreOrigin:zoe,getDatabaseSubscriptions:Qoe};async function eG(){Zq=!0,l_.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await vA.getNATSReferences();Voe=e,Yoe=e.info.server_name,Koe=t,Xq=r}a(eG,"initialize");var vh=new Map;function Woe(e,t,r){let s=vh.get(e);s||vh.set(e,s=new Map),s.set(t,r),Zq||eG().then(sG)}a(Woe,"setSubscription");function Qoe(){return vh}a(Qoe,"getDatabaseSubscriptions");var tG;function zoe(e){tG=e}a(zoe,"setIgnoreOrigin");var rG=100,Jq=new Array(rG),Uh=0;async function sG(){let t=await(await Xq.consumers.get(di.WORK_QUEUE_CONSUMER_NAMES.stream_name,di.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Jq[Uh],Jq[Uh]=Joe(r).catch(s=>{l_.error(s)}),++Uh>=rG&&(Uh=0)}a(sG,"workQueueListener");Hoe||qoe.on("message",async e=>{let{type:t}=e;t===jq.ITC_EVENT_TYPES.SHUTDOWN&&vA.closeConnection()});async function Joe(e){let t=Boe(e.data);xoe(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=zq.get(Goe.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&&!tG),koe(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:l,records:_,hash_values:d,__origin:f,expiresAt:E}=t;l_.trace("processing message:",o,c,l,(_?"records: "+_.map(O=>O?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),l_.trace(`messageProcessor nats msg id: ${e.headers.get(di.MSG_HEADERS.NATS_MSG_ID)}`);let h;_||(_=d);let{timestamp:S,user:m,node_name:R}=f||{},g=vh.get(c)?.get(l);if(!g)throw new Error("Missing table for replication message",l);if(o==="define_schema")t.type=o,g.send(t);else if(_.length===1&&!u)g.send({type:UA(o),value:_[0],id:d?.[0],expiresAt:E,timestamp:S,table:l,onCommit:h,user:m,nodeName:R});else{let O=_.map((V,$)=>({type:UA(o),value:V,expiresAt:E,id:d?.[$],table:l}));for(;u;)O.push({type:UA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;g.send({type:"transaction",writes:O,table:l,timestamp:S,onCommit:h,user:m,nodeName:R})}zq.get(jq.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&$oe(e.subject.split(".").slice(0,-1).join("."),Foe.createNatsTableStreamName(c,l),e.headers,e.data)}catch(o){l_.error(o)}e.ack()}a(Joe,"messageProcessor");function UA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(UA,"convertOperation")});var xA={};Fe(xA,{disableNATS:()=>Xoe,publishToStream:()=>Gh,setNATSReplicator:()=>BA,setPublishToStream:()=>Zoe,setSubscription:()=>FA,start:()=>joe});function joe(){Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&tae()}function Xoe(e=!0){_G=e}function Zoe(e,t){Gh=e,FA=t}function tae(){if(_G)return;let e=Ps(),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];BA(n,r,i)}}BT((r,s)=>{BA(r.tableName,r.databaseName,r),s&&fG(r)}),!oG&&(oG=!0)}function BA(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[ye],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ye]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ye],record:i})}invalidate(i){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ye]})}static defineSchema(i){fG(i)}static subscribe(){let i=new bs;return FA(t,e,i),i}static subscribeOnThisThread(i){return i<eae}static isEqual(i){return i.isNATSReplicator}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0},{runFirst:!0});function s(n){let i=n?.transaction?.nats;if(!i)if(n?.transaction){n.transaction.nats=i=new Bh(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=dG;return i}a(s,"getNATSTransaction")}function fG(e){let t=Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gh(`${qA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,GA.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 aG,qA,GA,cG,uG,Hh,qh,lG,_G,Gh,FA,eae,dG,oG,Bh,HA,EG=ge(()=>{fe();tn();aG=P(nt()),qA=P(ke()),GA=P(zn());ou();cG=P(iG()),uG=P(or()),Hh=P(Q()),qh=P(A()),lG=P(M());a(joe,"start");a(Xoe,"disableNATS");Gh=aG.publishToStream,FA=cG.setSubscription;a(Zoe,"setPublishToStream");eae=2;a(tae,"assignReplicationSource");a(BA,"setNATSReplicator");a(fG,"publishSchema");Bh=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(t){let r=Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let o=[],c=[],u,l;for(let _ of i){let d=_.table,f=_.operation=="put"?"upsert":_.operation;u||(lG.trace(`Sending transaction event ${f}`),l=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(_.record),c.push(_.id)):l=l.next={operation:f,table:d,id:_.id,record:_.record},_.expiresAt&&(l.expiresAt=_.expiresAt)}u&&s.push(Gh(`${qA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,GA.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},HA=class extends Bh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,uG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};dG=new HA});async function mG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await kA.getResource(e,{});n=new VA(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await kA.get(e);i&&i.delete()}n=new xh(e,t)}return n}function $A(){return Fh++,Fh>65500&&(Fh=1),Fh}var hG,__,kA,Fh,xh,VA,pG=ge(()=>{fe();cu();hG=P(or()),__=P(M());Oo();kA=lt({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(mG,"getSession");Fh=1;a($A,"getNextMessageId");xh=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,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.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,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=Di.getMatch(l);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 S=h.path,m=h.Resource,R=await ze(E,async()=>{let g=await m.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 O of g)try{let V;if(O.type&&O.type!=="put"&&O.type!=="delete"&&O.type!=="message"||s&&!s(O))continue;r?(O.topic=n,V=this.needsAcknowledge(O)):(O.acknowledge?.(),V=$A());let $=O.id;Array.isArray($)&&($=Aa($)),$==null&&($=""),this.listener(S+"/"+$,O.value,V,t)}catch(V){(0,__.warn)(V)}})(),g});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){let r=$A();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;let i=Di.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 ze(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=[]}},VA=class extends xh{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=$A(),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,__.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,hG.getNextMonotonicTime)()),(0,__.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),kA.put(this.sessionRecord)),t.qos}}});var KA={};Fe(KA,{start:()=>sae});async function sae({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:l,onClose:_}=gG(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",l),o.on("close",_),o.on("error",d=>{(0,ms.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;rae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,RG.getSuperUser)());let{onMessage:u,onClose:l}=gG(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,ms.info)("Socket error",_)})},{port:t,securePort:s})}function gG(e,t,r,s,n){TG||(TG=!0,ju(d=>{kh>0&&d.push({metric:"mqtt-connections",connections:kh,byThread:!0})}));let i;kh++;let o,c={protocolVersion:4},u=(0,$h.parser)({protocolVersion:5});function l(d){u.parse(d)}a(l,"onMessage");function _(){kh--,i||(i=!0,o?.disconnect(),is(!1,"connection","mqtt","disconnect"))}return a(_,"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 gt.getUser(d.username,d.password.toString()),(0,YA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&SG.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,YA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&SG.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 is(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=mG({user:s,...d}),o=await o}catch(O){return(0,ms.error)(O),is(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:O.code||5,returnCode:O.code||128})}is(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((O,V,$,F)=>{try{let C=O.indexOf("/",1),Y=C>0?O.slice(0,C):O;f({cmd:"publish",topic:O,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},Y)}catch(C){(0,ms.error)(C),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let O of d.subscriptions){let V;try{V=(await o.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,ms.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let O of d.unsubscriptions)o.removeSubscription(O);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let S=d.qos===2?"pubrec":"puback",m=e.deserialize||(e.deserialize=mc(r?.headers.get?.("content-type"))),R=d.payload?.length>0?m(d.payload):void 0,g;try{g=await o.publish(d,R)}catch(O){(0,ms.warn)(O),d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:S,messageId:d.messageId,reasonCode:g===!1?144:0,returnCode: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(),is(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,ms.error)(h),f({cmd:"disconnect"})}function f(h,S){let m=(0,$h.generate)(h,c);t(m),xr(m.length,"bytes-sent",S,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return r?Ji(h,r):JSON.stringify(h)}a(E,"serialize")}),{onMessage:l,onClose:_}}var $h,RG,YA,fi,ms,SG,rae,TG,kh,AG=ge(()=>{$h=require("mqtt-packet");pG();RG=P(dr());lc();Jn();Dr();YA=P(Q()),fi=P(A()),ms=P(M()),SG=(0,ms.loggerWithTag)("auth-event"),rae=!0;a(sae,"start");kh=0;a(gG,"onSocket")});var NG={};Fe(NG,{Request:()=>WA,createReuseportFd:()=>Vh,node_request_key:()=>Zi});var OG,Zi,WA,QA,zA,Vh,JA=ge(()=>{OG=require("os"),Zi=Symbol("node request"),WA=class{static{a(this,"Request")}[Zi];#e;constructor(t){this.method=t.method;let r=t.url;this[Zi]=t,this.url=r,this.headers=new zA(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[Zi].socket.encrypted?"https":"http"}get ip(){return this[Zi].socket.remoteAddress}get body(){return this.#e||(this.#e=new QA(this[Zi]))}get host(){return this[Zi].authority||this[Zi].headers.host}get isAborted(){return!1}},QA=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},zA=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,OG.platform)()!="win32"&&(Vh=require("node-unix-socket").createReuseportFd)});var jE={};Fe(jE,{component_errors:()=>Oc,loadComponent:()=>Yh,loadComponentDirectories:()=>MG,setErrorReporter:()=>aae});function MG(e,t){t&&(XA=t),e&&(ZA=e);let r=[];if((0,xs.existsSync)(jA)){let n=(0,xs.readdirSync)(jA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lt.join)(jA,o);r.push(Yh(c,XA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Yh(s,XA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{PG=!0})}function aae(e){E_=e}async function Yh(e,t,r,s,n,i){if(!yG.has(e)){yG.set(e,!0),n&&(ZA=n);try{let o;s&&(Oc=new Map);let c=(0,Lt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,xs.existsSync)(c)?o=s?(0,DG.getConfigObj)():(0,IG.parseDocument)((0,xs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=eO;let u=[],l=s;for(let _ in o){let d=o[_];if(Oc.set(s?_:(0,Lt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let g=e,O;for(;!(0,xs.existsSync)(O=(0,Lt.join)(g,"node_modules",_));)if(g=(0,Lt.dirname)(g),g.length<(0,LG.getHdbBasePath)().length){O=null;break}if(O)f=await Yh(O,t,r,!1),l=!0;else throw new Error(`Unable to find package ${_}:${E}`)}else f=oae[_];if(!f)continue;u.push(f);let h=a(g=>(g.origin=r,lt(g)),"ensureTable"),S=d.network||(d.port||d.securePort)&&d,m=S?.securePort||S?.https&&S.port,R=!S?.https&&S?.port;if(d_.isMainThread&&(f=await f.startOnMainThread?.({server:gt,ensureTable:h,port:R,securePort:m,resources:t,...d})||f,s&&S))for(let g of[R,m])try{if(+g&&!bG.includes(g)){let O=tO.get(rO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);O&&f_.default.warn("Session affinity is not recommended and may cause memory leaks"),(O||!Vh)&&(bG.push(g),sO(g,O))}}catch(O){console.error("Error listening on socket",g,O,_)}if(t.isWorker&&(f=await f.start?.({server:gt,ensureTable:h,port:R,securePort:m,resources:t,...d})||f),ZA.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,CG.handleHDBError)("Can not reference parent directories");let g=(0,Lt.join)(e,d.files).replace(/\\/g,"/"),O=g.indexOf("/*");if(O>-1&&d.files!==eO[_]?.files&&!(0,xs.existsSync)(g.slice(0,O)))throw new Error(`The path '${g.slice(0,O)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,wG.default)(g,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;l=!0;let C=(0,Lt.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+="/",C.startsWith(k))C=C.slice(k.length);else throw new Error(`The root path '${d.root}' does not reference a valid part of the file path '${C}'.The root path should be used to indicate the relative path/part of the file path for determining the exported web path.`)}let Y=(0,Lt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+Y+B.slice(2):B==="."?"/"+Y:"/"+Y+"/"+B,B+=(B.endsWith("/")?"":"/")+C;try{if(F.isFile()){let k=await iae($);d_.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else d_.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}`,E_?.(k),((0,Nc.getWorkerIndex)()===0?console:f_.default).error(k),t.set(d.path||"/",new h_(k)),Oc.set(s?_:(0,Lt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${_}' for application '${(0,Lt.basename)(e)}' due to: ${h.message}`,E_?.(h),((0,Nc.getWorkerIndex)()===0?console:f_.default).error(h),t.set(d.path||"/",new h_(h),null,!0),Oc.set(s?_:(0,Lt.basename)(e),h.message)}}if(d_.isMainThread&&!PG&&i&&(0,Nc.watchDir)(e,async()=>MG()),o.extensionModule)return await vf((0,Lt.join)(e,o.extensionModule));if(!l){let _=`${e} did not load any modules, resources, or files, is this a valid component?`;E_?.(new Error(_)),((0,Nc.getWorkerIndex)()===0?console:f_.default).error(_),Oc.set((0,Lt.basename)(e),_)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,E_?.(o),t.set("",new h_(o))}}}var xs,Lt,d_,IG,tO,rO,wG,Nc,f_,CG,LG,nae,DG,iae,jA,ZA,PG,XA,Oc,oae,eO,bG,yG,E_,h_,XE=ge(()=>{xs=require("fs"),Lt=require("path"),d_=require("worker_threads"),IG=require("yaml"),tO=P(Q()),rO=P(A());NP();wP();CP();t0();Gq();Vq();wG=P(require("fast-glob")),Nc=P(Je()),f_=P(M());FT();Dr();CG=P(Z());tn();fe();Kh();LG=P(Q()),nae=P(Qq());xE();EG();AG();DG=P(rt());JA();({readFile:iae}=xs.promises),jA=tO.get(rO.CONFIG_PARAMS.COMPONENTSROOT),ZA=new Map,Oc=new Map;a(MG,"loadComponentDirectories");oae={REST:dh,rest:dh,graphqlSchema:GT,jsResource:kT,fastifyRoutes:DA,login:VT,static:PA,operationsApi:nae,customFunctions:{},http:{},clustering:xA,authentication:Fl,mqtt:KA},eO={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(eO,"static",{value:{files:"web/**"}});bG=[],yG=new Map;a(aae,"setErrorReporter");a(Yh,"loadComponent");h_=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 Wh=p((_Oe,vG)=>{var{isMainThread:UG}=require("worker_threads"),{getTables:cae}=(fe(),te(Pe)),{loadComponentDirectories:uae,loadComponent:lae}=(XE(),te(jE)),{resetResources:_ae}=(cu(),te(my)),dae=wR(),fae=rt(),{dirname:Eae}=require("path"),{getConnection:hae}=nt(),mae=Q(),pae=A(),nO=new Map;async function Sae(e=!1){!UG&&mae.get(pae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&hae();try{UG&&await dae()}catch(s){console.error(s)}let t=_ae();cae(),t.isWorker=e,await lae(Eae(fae.getConfigFilePath()),t,"hdb",!0,nO),await uae(nO,t);let r=[];for(let[s]of nO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Sae,"loadRootComponents");vG.exports.loadRootComponents=Sae});var Je=p((fOe,to)=>{"use strict";var{Worker:Tae,MessageChannel:gae,parentPort:Nn,isMainThread:uO,threadId:Rae,workerData:Ei}=require("worker_threads"),{PACKAGE_ROOT:Aae}=A(),{join:qG,isAbsolute:Oae,extname:Nae}=require("path"),{server:GG}=(Dr(),te(po)),{watch:bae,readdir:yae}=require("fs/promises"),{totalmem:BG}=require("os"),lO=A(),hi=M(),{randomBytes:Iae}=require("crypto"),{_assignPackageExport:wae}=require("../index"),Cae=A(),Lae=1024*1024,eo=[],ps=[],Dae=50,FG=1e4,Pae="restart",xG="request_thread_info",kG="resource_report",$G="thread_info",VG="added-port",Mae="ack",iO;wae("threads",ps);to.exports={startWorker:oO,restartWorkers:dO,shutdownWorkers:Hae,workers:eo,setMonitorListener:Yae,onMessageFromWorkers:qae,onMessageByType:JG,broadcast:Fae,broadcastWithAcknowledgement:kae,setChildListenerByType:Bae,getWorkerIndex:YG,getWorkerCount:KG,getTicketKeys:WG,setMainIsWorker:Uae,restartNumber:Ei?.restartNumber||1};ps.onMessageByType=JG;ps.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=ps.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var _O;function YG(){return Ei?Ei.workerIndex:_O?0:void 0}a(YG,"getWorkerIndex");function KG(){return Ei?Ei.workerCount:_O?1:void 0}a(KG,"getWorkerCount");function Uae(e){_O=e}a(Uae,"setMainIsWorker");var Qh;function WG(){return Qh||(Qh=uO?Iae(48):Ei.ticketKeys,Qh)}a(WG,"getTicketKeys");Object.defineProperty(GG,"workerIndex",{get(){return YG()}});Object.defineProperty(GG,"workerCount",{get(){return KG()}});var QG={[xG](e,t){$ae(t)},[kG](e,t){Vae(t,e)}};function oO(e,t={}){let r=process.constrainedMemory?.()||BG();r=Math.min(r,BG());let s=Math.max(Math.floor(r/Lae/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of ps){let l=new gae;l.existingPort=u,i.push(l),o.push(l.port2)}Nae(e)||(e+=".js");let c=new Tae(Oae(e)?e:qG(Aae,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:WG()},transferList:o},t));for(let{port1:u,existingPort:l}of i)l.postMessage({type:VG,port:u,threadId:c.threadId},[u]);return Jh(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>oO(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<Dae?(t.unexpectedRestarts=c.unexpectedRestarts+1,oO(e,t)):hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{QG[u.type]?.(u,c)}),eo.push(c),Wae(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(oO,"startWorker");var vae=[lO.THREAD_TYPES.HTTP];async function dO(e=null,t=2,r=!0){if(uO){if(r){let{loadRootComponents:o}=Wh();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:lO.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=vae.indexOf(o.name)>-1,u=new Promise(l=>{let _=setTimeout(()=>o.terminate(),FG*2).unref();o.on("exit",()=>{clearTimeout(_),s.splice(s.indexOf(u)),!c&&r&&o.startCopy(),l()})});if(s.push(u),c&&r){let l=o.startCopy(),_=new Promise(d=>{let f=a(E=>{E.type===Cae.ITC_EVENT_TYPES.CHILD_STARTED&&(hi.trace("Worker has started",l.threadId),d(),n.splice(n.indexOf(_)),l.off("message",f))},"startListener");hi.trace("Waiting for worker to start",l.threadId),l.on("message",f)});n.push(_),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)&&await i({service:"clustering"})}else Nn.postMessage({type:Pae,workerType:e})}a(dO,"restartWorkers");function Bae(e,t){QG[e]=t}a(Bae,"setChildListenerByType");function Hae(e){return dO(e,1/0,!1)}a(Hae,"shutdownWorkers");var zG=[];function qae(e){zG.push(e)}a(qae,"onMessageFromWorkers");var aO=new Map;function JG(e,t){let r=aO.get(e);r||aO.set(e,r=[]),r.push(t)}a(JG,"onMessageByType");var Gae=10;async function Fae(e){let t=0;for(let r of ps)try{r.postMessage(e),t++>Gae&&(t=0,await new Promise(setImmediate))}catch(s){hi.error("Unable to send message to worker",s)}}a(Fae,"broadcast");var zh=new Map,xae=1;function kae(e){return new Promise(t=>{let r=0;for(let s of ps)try{let n=xae++,i=a(()=>{zh.delete(n),--r===0&&t(),s!==Nn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,zh.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of zh)o.port===s&&o()})),s.postMessage(e),r++}catch(n){hi.error("Unable to send message to worker",n)}r===0&&t()})}a(kae,"broadcastWithAcknowledgement");function $ae(e){e.postMessage({type:$G,workers:jG()})}a($ae,"sendThreadInfo");function jG(){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(jG,"getChildWorkerInfo");function Vae(e,t){e.resources=t,e.resources.updated=Date.now()}a(Vae,"recordResourceReport");var cO;function Yae(e){cO=e}a(Yae,"setMonitorListener");var Kae=1e3,HG=!1;function Wae(){HG||(HG=!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}cO&&cO()},Kae).unref())}a(Wae,"startMonitoring");var Qae=1e3;if(Nn){Jh(Nn);for(let e=0,t=Ei.addPorts.length;e<t;e++){let r=Ei.addPorts[e];r.threadId=Ei.addThreadIds[e],Jh(r)}setInterval(()=>{let e=process.memoryUsage();Nn.postMessage({type:kG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Qae).unref(),iO=a(()=>new Promise((e,t)=>{Nn.on("message",r),Nn.postMessage({type:xG});function r(s){s.type===$G&&(Nn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else iO=jG;to.exports.getThreadInfo=iO;function Jh(e,t){ps.push(e),e.on("message",r=>{if(r.type===VG)r.port.threadId=r.threadId,Jh(r.port);else if(r.type===Mae){let s=zh.get(r.id);s&&s()}else{for(let n of zG)n(r,e);let s=aO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){hi.error(i)}}}).on("close",()=>{ps.splice(ps.indexOf(e),1)}).on("exit",()=>{ps.splice(ps.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Jh,"addPort");if(uO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await yae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(qG(s,i.name));try{for await(let{filename:i}of bae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await dO(),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 Nn.on("message",async e=>{let{type:t}=e;t===lO.ITC_EVENT_TYPES.SHUTDOWN&&(to.exports.restartNumber=e.restartNumber,Nn.unref(),setTimeout(()=>{hi.warn("Thread did not voluntarily terminate",Rae),process.exit(0)},FG).unref())})});var iF=p(S_=>{"use strict";var{isMainThread:zae,parentPort:p_,threadId:bc}=require("worker_threads"),{Socket:Jae,createServer:jae}=require("net"),{createServer:Xae,IncomingMessage:Zae}=require("http"),{createServer:ece}=require("https"),{readFileSync:yc}=require("fs"),mi=M(),Dt=Q(),pi=A(),{server:Xh}=(Dr(),te(po)),{WebSocketServer:tce}=require("ws"),{createServer:rce}=require("tls"),{getTicketKeys:sce,restartNumber:nce}=Je(),{Headers:ice}=(HE(),te(AB)),{recordAction:m_,recordActionBinary:oce}=(Jn(),te(Xu)),{Request:tF,node_request_key:ace,createReuseportFd:XG}=(JA(),te(NG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){nce<=1&&console.error("Could not start debugging on port 9229, you may already be debugging:",e.message)}process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:hOe,CONFIG_PARAMS:cce}=pi;Dt.initSync();var uce=Dt.get(cce.HTTP_SESSIONAFFINITY),bn={};S_.registerServer=SO;S_.httpServer=TO;S_.deliverSocket=pO;S_.startServers=rF;Xh.http=TO;Xh.request=Ece;Xh.socket=hce;Xh.ws=mce;var fO=[],EO=[],lce,oa={},jh={},_ce=[],hO=[];function rF(){return Wh().loadRootComponents(!0).then(()=>{p_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)pO(s,r,n);else if(t.requestId)dce(t);else if(t.type===pi.ITC_EVENT_TYPES.SHUTDOWN){mi.trace("received shutdown request",bc);for(let i in bn){mi.trace("closing server",i,bc);let o=bn[i],c;o.closeIdleConnections?.(),o.close?.(()=>{mi.trace("closed server",i,bc),clearInterval(c),setTimeout(()=>{console.log("forced close server",i,bc),o.cantCleanupProperly||mi.warn("Had to forcefully exit the thread",bc),process.exit(0)},o.cantCleanupProperly?2500:5e3).unref()}),c=setTimeout(()=>{o.closeAllConnections?.()},1500).unref()}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(XG&&!uce)for(let t in bn){let r=bn[t],s=XG(+t,"::");e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),mi.trace("Listening on port "+t,bc)}).on("error",i)}))}Promise.all(e).then(()=>{p_?.postMessage({type:pi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(rF,"startServers");zae||rF();function pO(e,t,r){let s=e?.read?e:new Jae({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=bn[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=bn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(mi.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(pO,"deliverSocket");var ZG=new Map;function dce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=ZG.get(n),r){case"connection":i=pO(void 0,t),ZG.set(n,i),i.write=(c,u,l)=>(p_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(p_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),p_.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(dce,"proxyRequest");function SO(e,t){+t||(t=parseInt(Dt.get(pi.CONFIG_PARAMS.HTTP_PORT),10));let r=bn[t];if(r){let s=r.lastServer||r;s.off("unhandled",eF),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else bn[t]=e;e.on("unhandled",eF)}a(SO,"registerServer");function sF(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=[],Dt.get(pi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Dt.get(pi.CONFIG_PARAMS.HTTP_PORT),secure:Dt.get(pi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Dt.get(pi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(sF,"getPorts");function TO(e,t){for(let{port:r,secure:s}of sF(t))nF(r,s,t?.isOperationsServer),typeof e=="function"?hO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):SO(e,r),jh[r]=mO(hO,r),lce=mO(_ce,r)}a(TO,"httpServer");function nF(e,t,r){if(!oa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Dt.get(s+"_keepAliveTimeout"),headersTimeout:Dt.get(s+"_headersTimeout"),requestTimeout:Dt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Dt.get(s+"tls_privateKey"),o=Dt.get(s+"tls_certificate"),c=Dt.get(s+"tls_certificateAuthority");Object.assign(n,{key:yc(i),cert:yc(o)+(c?`
29
+ `+PA.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Boe,"getServerOptions");function Hoe(){let e=$s.get(_i.OPERATIONSAPI_NETWORK_CORS),t=$s.get(_i.OPERATIONSAPI_NETWORK_CORSACCESSLIST),r;return e&&(e===!0||e.toUpperCase()===Moe)&&(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(Hoe,"getCORSOpts");function qoe(){return $s.get(_i.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT)??Doe}a(qoe,"getHeaderTimeoutConfig")});var nG=T((PAe,sG)=>{"use strict";var{decode:Goe}=require("msgpackr"),{isMainThread:Foe,parentPort:xoe,threadId:LAe}=require("worker_threads"),UA=st(),di=xe(),koe=A(),l_=U(),Qq=Q(),zq=A();je();var $oe=jn(),{recordAction:Voe,recordActionBinary:Yoe}=(zn(),te(Zu)),{publishToStream:Koe}=UA,DAe={durable:di.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:di.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Woe,Qoe,joe,Jq,Xq;sG.exports={initialize:Zq,workQueueListener:rG,setSubscription:zoe,setIgnoreOrigin:Xoe,getDatabaseSubscriptions:Joe};async function Zq(){Xq=!0,l_.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await UA.getNATSReferences();Woe=e,Qoe=e.info.server_name,joe=t,Jq=r}a(Zq,"initialize");var vh=new Map;function zoe(e,t,r){let s=vh.get(e);s||vh.set(e,s=new Map),s.set(t,r),Xq||Zq().then(rG)}a(zoe,"setSubscription");function Joe(){return vh}a(Joe,"getDatabaseSubscriptions");var eG;function Xoe(e){eG=e}a(Xoe,"setIgnoreOrigin");var tG=100,jq=new Array(tG),Uh=0;async function rG(){let t=await(await Jq.consumers.get(di.WORK_QUEUE_CONSUMER_NAMES.stream_name,di.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await jq[Uh],jq[Uh]=Zoe(r).catch(s=>{l_.error(s)}),++Uh>=tG&&(Uh=0)}a(rG,"workQueueListener");Foe||xoe.on("message",async e=>{let{type:t}=e;t===zq.ITC_EVENT_TYPES.SHUTDOWN&&UA.closeConnection()});async function Zoe(e){let t=Goe(e.data);Voe(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let r=e.headers,s=!1,n=Qq.get(koe.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&&!eG),Yoe(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;l_.trace("processing message:",o,c,_,(l?"records: "+l.map(b=>b?.id):"")+(d?"ids: "+d:""),"with sequence:",e.seq),l_.trace(`messageProcessor nats msg id: ${e.headers.get(di.MSG_HEADERS.NATS_MSG_ID)}`);let h;l||(l=d);let{timestamp:p,user:m,node_name:g}=f||{},R=vh.get(c)?.get(_);if(!R)throw new Error("Missing table for replication message",_);if(o==="define_schema")t.type=o,R.send(t);else if(l.length===1&&!u)R.send({type:MA(o),value:l[0],id:d?.[0],expiresAt:E,timestamp:p,table:_,onCommit:h,user:m,nodeName:g});else{let b=l.map((V,$)=>({type:MA(o),value:V,expiresAt:E,id:d?.[$],table:_}));for(;u;)b.push({type:MA(u.operation),value:u.record,expiresAt:u.expiresAt,id:u.id,table:u.table}),u=u.next;R.send({type:"transaction",writes:b,table:_,timestamp:p,onCommit:h,user:m,nodeName:g})}Qq.get(zq.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Koe(e.subject.split(".").slice(0,-1).join("."),$oe.createNatsTableStreamName(c,_),e.headers,e.data)}catch(o){l_.error(o)}e.ack()}a(Zoe,"messageProcessor");function MA(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(MA,"convertOperation")});var FA={};Ge(FA,{disableNATS:()=>tae,publishToStream:()=>Gh,setNATSReplicator:()=>vA,setPublishToStream:()=>rae,setSubscription:()=>GA,start:()=>eae});function eae(){Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&nae()}function tae(e=!0){lG=e}function rae(e,t){Gh=e,GA=t}function nae(){if(lG||process.env._DISABLE_NATS)return;let e=vs(),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)}}BT((r,s)=>{vA(r.tableName,r.databaseName,r),s&&dG(r)}),!iG&&(iG=!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 vt{static{a(this,"NATSReplicator")}put(i){return s(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[Pe],record:i})}delete(){return s(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[Pe]})}publish(i){return s(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[Pe],record:i})}invalidate(){s(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[Pe]})}static defineSchema(i){dG(i)}static subscribe(){let i=new ws;return GA(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 Bh(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=_G;return i}a(s,"getNATSTransaction")}function dG(e){let t=Hh.default.get(qh.default.CONFIG_PARAMS.CLUSTERING_NODENAME);Gh(`${HA.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,qA.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 oG,HA,qA,aG,cG,Hh,qh,uG,lG,Gh,GA,sae,_G,iG,Bh,BA,fG=ge(()=>{de();tn();oG=M(st()),HA=M(xe()),qA=M(jn());au();aG=M(nG()),cG=M(lr()),Hh=M(Q()),qh=M(A()),uG=M(U());a(eae,"start");a(tae,"disableNATS");Gh=oG.publishToStream,GA=aG.setSubscription;a(rae,"setPublishToStream");sae=2;a(nae,"assignReplicationSource");a(vA,"setNATSReplicator");a(dG,"publishSchema");Bh=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=Hh.default.get(qh.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||(uG.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(Gh(`${HA.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,qA.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},BA=class extends Bh{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,cG.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};_G=new BA});async function hG({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await xA.getResource(e,{});n=new $A(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await xA.get(e);i&&i.delete()}n=new xh(e,t)}return n}function kA(){return Fh++,Fh>65500&&(Fh=1),Fh}var EG,Nc,xA,Fh,xh,$A,mG=ge(()=>{de();uu();EG=M(lr()),Nc=M(U());No();xA=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(hG,"getSession");Fh=1;a(kA,"getNextMessageId");xh=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(R=>R.topic===n);f&&(f.end(),this.subscriptions.splice(this.subscriptions.indexOf(f),1));let E={search:u,async:!0,user:this.user,startTime:o,omitCurrent:i,isCollection:l,shallowWildcard:d,url:""};o&&(0,Nc.trace)("Resuming subscription from",n,"from",o);let h=Li.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 p=h.path,m=h.Resource,g=await Qe(E,async()=>{let R=await m.subscribe(E);if(!R)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!R[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let b of R)try{let V;if(b.type&&b.type!=="put"&&b.type!=="delete"&&b.type!=="message"||s&&!s(b))continue;r?(b.topic=n,V=this.needsAcknowledge(b)):(b.acknowledge?.(),V=kA());let $=b.id;Array.isArray($)&&($=Ra($)),$==null&&($=""),this.listener(p+"/"+$,b.value,V,t)}catch(V){(0,Nc.warn)(V)}})(),R});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){let r=kA();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;let i=Li.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 Qe(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=[]}},$A=class extends xh{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=kA(),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,Nc.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,EG.getNextMonotonicTime)()),(0,Nc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),xA.put(this.sessionRecord)),t.qos}}});var YA={};Ge(YA,{start:()=>oae});async function oae({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}=TG(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,Ss.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;iae&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,gG.getSuperUser)());let{onMessage:u,onClose:_}=TG(o,l=>o.write(l),null,c,i);o.on("data",u),o.on("close",_),o.on("error",l=>{(0,Ss.info)("Socket error",l)})},{port:t,securePort:s})}function TG(e,t,r,s,n){SG||(SG=!0,Xu(d=>{kh>0&&d.push({metric:"mqtt-connections",connections:kh,byThread:!0})}));let i;kh++;let o,c={protocolVersion:4},u=(0,$h.parser)({protocolVersion:5});function _(d){u.parse(d)}a(_,"onMessage");function l(){kh--,i||(i=!0,o?.disconnect(),as(!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,VA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pG.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,VA.get)(fi.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pG.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 as(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:4,returnCode:134});try{n.authorizeClient?.(d,s),o=hG({user:s,...d}),o=await o}catch(b){return(0,Ss.error)(b),as(!1,"connection","mqtt","connect"),f({cmd:"connack",reasonCode:b.code||5,returnCode:b.code||128})}as(!0,"connection","mqtt","connect"),f({cmd:"connack",sessionPresent:o.sessionWasPresent,reasonCode:0,returnCode:0}),o.setListener((b,V,$,F)=>{try{let w=b.indexOf("/",1),W=w>0?b.slice(0,w):b;f({cmd:"publish",topic:b,payload:E(V),messageId:$||Math.floor(Math.random()*1e8),qos:F.qos},W)}catch(w){(0,Ss.error)(w),o?.disconnect()}}),o.sessionWasPresent&&await o.resume();break;case"subscribe":let h=[];for(let b of d.subscriptions){let V;try{V=(await o.addSubscription(b,b.qos>=1)).qos||0}catch($){(0,Ss.error)($),V=128}h.push(V)}await o.committed,f({cmd:"suback",granted:h,messageId:d.messageId});break;case"unsubscribe":for(let b of d.unsubscriptions)o.removeSubscription(b);f({cmd:"unsuback",messageId:d.messageId});break;case"pubrel":f({cmd:"pubcomp",messageId:d.messageId,reasonCode:0});return;case"publish":let p=d.qos===2?"pubrec":"puback",m=e.deserialize||(e.deserialize=pc(r?.headers.get?.("content-type"))),g=d.payload?.length>0?m(d.payload):void 0,R;try{R=await o.publish(d,g)}catch(b){(0,Ss.warn)(b),d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:128,returnCode:128},d.topic)}d.qos>0&&f({cmd:p,messageId:d.messageId,reasonCode:R===!1?144:0,returnCode:R===!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(),as(!0,"connection","mqtt","disconnect"),e.close?e.close():e.end();break}}catch(h){(0,Ss.error)(h),f({cmd:"disconnect"})}function f(h,p){let m=(0,$h.generate)(h,c);t(m),kr(m.length,"bytes-sent",p,h.cmd,"mqtt")}a(f,"sendPacket");function E(h){return r?Ji(h,r):JSON.stringify(h)}a(E,"serialize")}),{onMessage:_,onClose:l}}var $h,gG,VA,fi,Ss,pG,iae,SG,kh,RG=ge(()=>{$h=require("mqtt-packet");mG();gG=M(hr());_c();zn();Pr();VA=M(Q()),fi=M(A()),Ss=M(U()),pG=(0,Ss.loggerWithTag)("auth-event"),iae=!0;a(oae,"start");kh=0;a(TG,"onSocket")});var OG={};Ge(OG,{Request:()=>KA,createReuseportFd:()=>Vh});var AG,KA,WA,QA,Vh,jA=ge(()=>{AG=require("os"),KA=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 QA(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 WA(this._nodeRequest))}get host(){return this._nodeRequest.authority||this._nodeRequest.headers.host}get isAborted(){return!1}},WA=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}},QA=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,AG.platform)()!="win32"&&(Vh=require("node-unix-socket").createReuseportFd)});var JE={};Ge(JE,{component_errors:()=>bc,loadComponent:()=>Yh,loadComponentDirectories:()=>PG,setErrorReporter:()=>lae});function PG(e,t){t&&(JA=t),e&&(XA=e);let r=[];if((0,Vs.existsSync)(zA)){let n=(0,Vs.readdirSync)(zA,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lt.join)(zA,o);r.push(Yh(c,JA,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Yh(s,JA,s,!1,null,process.env.DEV_MODE)),Promise.all(r).then(()=>{DG=!0})}function lae(e){f_=e}async function Yh(e,t,r,s,n,i){if(!bG.has(e)){bG.set(e,!0),n&&(XA=n);try{let o;s&&(bc=new Map);let c=(0,Lt.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Vs.existsSync)(c)?o=s?(0,LG.getConfigObj)():(0,yG.parseDocument)((0,Vs.readFileSync)(c,"utf8"),{simpleKeys:!0}).toJSON():o=ZA;let u=[],_=s;for(let l in o){let d=o[l];if(bc.set(s?l:(0,Lt.basename)(e),!1),!d)continue;let f,E=d.package;try{if(E){let R=e,b;for(;!(0,Vs.existsSync)(b=(0,Lt.join)(R,"node_modules",l));)if(R=(0,Lt.dirname)(R),R.length<(0,CG.getHdbBasePath)().length){b=null;break}if(b)f=await Yh(b,t,r,!1),_=!0;else throw new Error(`Unable to find package ${l}:${E}`)}else f=uae[l];if(!f)continue;u.push(f);let h=a(R=>(R.origin=r,ut(R)),"ensureTable"),p=d.network||(d.port||d.securePort)&&d,m=p?.securePort||p?.https&&p.port,g=!p?.https&&p?.port;if(__.isMainThread&&(f=await f.startOnMainThread?.({server:Tt,ensureTable:h,port:g,securePort:m,resources:t,...d})||f,s&&p))for(let R of[g,m])try{if(+R&&!NG.includes(R)){let b=eO.get(tO.CONFIG_PARAMS.HTTP_SESSIONAFFINITY);b&&d_.default.warn("Session affinity is not recommended and may cause memory leaks"),(b||!Vh)&&(NG.push(R),rO(R,b))}}catch(b){console.error("Error listening on socket",R,b,l)}if(t.isWorker&&(f=await f.start?.({server:Tt,ensureTable:h,port:g,securePort:m,resources:t,...d})||f),XA.set(f,!0),f.handleFile&&d.files){if(d.files.includes(".."))throw(0,wG.handleHDBError)("Can not reference parent directories");let R=(0,Lt.join)(e,d.files).replace(/\\/g,"/"),b=R.indexOf("/*");if(b>-1&&d.files!==ZA[l]?.files&&!(0,Vs.existsSync)(R.slice(0,b)))throw new Error(`The path '${R.slice(0,b)}' does not exist and cannot be used as the base of the resolved 'files' path value '${d.files}'`);for(let V of await(0,IG.default)(R,{onlyFiles:!1,objectMode:!0})){let{path:$,dirent:F}=V;_=!0;let w=(0,Lt.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 W=(0,Lt.basename)(e),B=d.path||"/";B=B.startsWith("/")?B:B.startsWith("./")?"/"+W+B.slice(2):B==="."?"/"+W:"/"+W+"/"+B,B+=(B.endsWith("/")?"":"/")+w;try{if(F.isFile()){let k=await cae($);__.isMainThread&&await f.setupFile?.(k,B,$,t),t.isWorker&&await f.handleFile?.(k,B,$,t)}else __.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}`,f_?.(k),((0,yc.getWorkerIndex)()===0?console:d_.default).error(k),t.set(d.path||"/",new E_(k)),bc.set(s?l:(0,Lt.basename)(e),k.message)}}}}catch(h){h.message=`Could not load component '${l}' for application '${(0,Lt.basename)(e)}' due to: ${h.message}`,f_?.(h),((0,yc.getWorkerIndex)()===0?console:d_.default).error(h),t.set(d.path||"/",new E_(h),null,!0),bc.set(s?l:(0,Lt.basename)(e),h.message)}}if(__.isMainThread&&!DG&&i&&(0,yc.watchDir)(e,async()=>PG()),o.extensionModule)return await Hf((0,Lt.join)(e,o.extensionModule));if(!_){let l=`${e} did not load any modules, resources, or files, is this a valid component?`;f_?.(new Error(l)),((0,yc.getWorkerIndex)()===0?console:d_.default).error(l),bc.set((0,Lt.basename)(e),l)}}catch(o){console.error(`Could not load application directory ${e}`,o),o.message=`Could not load application due to ${o.message}`,f_?.(o),t.set("",new E_(o))}}}var Vs,Lt,__,yG,eO,tO,IG,yc,d_,wG,CG,aae,LG,cae,zA,XA,DG,JA,bc,uae,ZA,NG,bG,f_,E_,XE=ge(()=>{Vs=require("fs"),Lt=require("path"),__=require("worker_threads"),yG=require("yaml"),eO=M(Q()),tO=M(A());NP();wP();CP();e0();qq();$q();IG=M(require("fast-glob")),yc=M(je()),d_=M(U());GT();Pr();wG=M(Z());tn();de();Kh();CG=M(Q()),aae=M(Wq());xE();fG();RG();LG=M(tt());jA();({readFile:cae}=Vs.promises),zA=eO.get(tO.CONFIG_PARAMS.COMPONENTSROOT),XA=new Map,bc=new Map;a(PG,"loadComponentDirectories");uae={REST:dh,rest:dh,graphqlSchema:qT,jsResource:xT,fastifyRoutes:LA,login:$T,static:DA,operationsApi:aae,customFunctions:{},http:{},clustering:FA,authentication:Fl,mqtt:YA},ZA={rest:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}};Object.defineProperty(ZA,"static",{value:{files:"web/**"}});NG=[],bG=new Map;a(lae,"setErrorReporter");a(Yh,"loadComponent");E_=class extends vt{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 Wh=T((cOe,UG)=>{var{isMainThread:MG}=require("worker_threads"),{getTables:_ae}=(de(),te(Le)),{loadComponentDirectories:dae,loadComponent:fae}=(XE(),te(JE)),{resetResources:Eae}=(uu(),te(py)),hae=IR(),mae=tt(),{dirname:pae}=require("path"),{getConnection:Sae}=st(),Tae=Q(),gae=A(),sO=new Map;async function Rae(e=!1){!MG&&Tae.get(gae.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Sae();try{MG&&await hae()}catch(s){console.error(s)}let t=Eae();_ae(),t.isWorker=e,await fae(pae(mae.getConfigFilePath()),t,"hdb",!0,sO),await dae(sO,t);let r=[];for(let[s]of sO)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Rae,"loadRootComponents");UG.exports.loadRootComponents=Rae});var je=T((lOe,to)=>{"use strict";var{Worker:Aae,MessageChannel:Oae,parentPort:Nn,isMainThread:cO,threadId:Nae,workerData:Ei}=require("worker_threads"),{PACKAGE_ROOT:bae}=A(),{join:HG,isAbsolute:yae,extname:Iae}=require("path"),{server:qG}=(Pr(),te(So)),{watch:wae,readdir:Cae}=require("fs/promises"),{totalmem:vG}=require("os"),uO=A(),hi=U(),{randomBytes:Lae}=require("crypto"),{_assignPackageExport:Dae}=require("../index"),Pae=A(),Mae=1024*1024,eo=[],Ts=[],Uae=50,lO=1e4,vae="restart",GG="request_thread_info",FG="resource_report",xG="thread_info",kG="added-port",Bae="ack",nO;Dae("threads",Ts);to.exports={startWorker:iO,restartWorkers:dO,shutdownWorkers:xae,workers:eo,setMonitorListener:jae,onMessageFromWorkers:kae,onMessageByType:QG,broadcast:Vae,broadcastWithAcknowledgement:Kae,setChildListenerByType:Fae,getWorkerIndex:$G,getWorkerCount:VG,getTicketKeys:YG,setMainIsWorker:qae,setTerminateTimeout:Hae,restartNumber:Ei?.restartNumber||1};Ts.onMessageByType=QG;Ts.sendToThread=function(e,t){if(!t?.type)throw new Error("A message with a type must be provided");let r=Ts.find(s=>s.threadId===e);if(r)return r.postMessage(t),!0};var _O;function Hae(e){lO=e}a(Hae,"setTerminateTimeout");function $G(){return Ei?Ei.workerIndex:_O?0:void 0}a($G,"getWorkerIndex");function VG(){return Ei?Ei.workerCount:_O?1:void 0}a(VG,"getWorkerCount");function qae(e){_O=e}a(qae,"setMainIsWorker");var Qh;function YG(){return Qh||(Qh=cO?Lae(48):Ei.ticketKeys,Qh)}a(YG,"getTicketKeys");Object.defineProperty(qG,"workerIndex",{get(){return $G()}});Object.defineProperty(qG,"workerCount",{get(){return VG()}});var KG={[GG](e,t){Wae(t)},[FG](e,t){Qae(t,e)}};function iO(e,t={}){let r=process.constrainedMemory?.()||vG();r=Math.min(r,vG());let s=Math.max(Math.floor(r/Mae/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[],o=[];for(let u of Ts){let _=new Oae;_.existingPort=u,i.push(_),o.push(_.port2)}Iae(e)||(e+=".js");let c=new Aae(yae(e)?e:HG(bae,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:YG()},transferList:o},t));for(let{port1:u,existingPort:_}of i)_.postMessage({type:kG,port:u,threadId:c.threadId},[u]);return zh(c,!0),c.unexpectedRestarts=t.unexpectedRestarts||0,c.startCopy=()=>iO(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<Uae?(t.unexpectedRestarts=c.unexpectedRestarts+1,iO(e,t)):hi.error(`Thread has been restarted ${c.restarts} times and will not be restarted`))}),c.on("message",u=>{KG[u.type]?.(u,c)}),eo.push(c),Jae(),t.onStarted&&t.onStarted(c),c.name=t.name,c}a(iO,"startWorker");var Gae=[uO.THREAD_TYPES.HTTP];async function dO(e=null,t=2,r=!0){if(cO){if(r){let{loadRootComponents:o}=Wh();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:uO.ITC_EVENT_TYPES.SHUTDOWN}),o.wasShutdown=!0,o.emit("shutdown",{});let c=Gae.indexOf(o.name)>-1,u=new Promise(_=>{let l=setTimeout(()=>o.terminate(),lO*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===Pae.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)&&await i({service:"clustering"})}else Nn.postMessage({type:vae,workerType:e})}a(dO,"restartWorkers");function Fae(e,t){KG[e]=t}a(Fae,"setChildListenerByType");function xae(e){return dO(e,1/0,!1)}a(xae,"shutdownWorkers");var WG=[];function kae(e){WG.push(e)}a(kae,"onMessageFromWorkers");var oO=new Map;function QG(e,t){let r=oO.get(e);r||oO.set(e,r=[]),r.push(t)}a(QG,"onMessageByType");var $ae=10;async function Vae(e){let t=0;for(let r of Ts)try{r.postMessage(e),t++>$ae&&(t=0,await new Promise(setImmediate))}catch(s){hi.error("Unable to send message to worker",s)}}a(Vae,"broadcast");var jh=new Map,Yae=1;function Kae(e){return new Promise(t=>{let r=0;for(let s of Ts)try{let n=Yae++,i=a(()=>{jh.delete(n),--r===0&&t(),s!==Nn&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,jh.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of jh)o.port===s&&o()})),s.postMessage(e),r++}catch(n){hi.error("Unable to send message to worker",n)}r===0&&t()})}a(Kae,"broadcastWithAcknowledgement");function Wae(e){e.postMessage({type:xG,workers:jG()})}a(Wae,"sendThreadInfo");function jG(){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(jG,"getChildWorkerInfo");function Qae(e,t){e.resources=t,e.resources.updated=Date.now()}a(Qae,"recordResourceReport");var aO;function jae(e){aO=e}a(jae,"setMonitorListener");var zae=1e3,BG=!1;function Jae(){BG||(BG=!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}aO&&aO()},zae).unref())}a(Jae,"startMonitoring");var Xae=1e3;if(Nn){zh(Nn);for(let e=0,t=Ei.addPorts.length;e<t;e++){let r=Ei.addPorts[e];r.threadId=Ei.addThreadIds[e],zh(r)}setInterval(()=>{let e=process.memoryUsage();Nn.postMessage({type:FG,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Xae).unref(),nO=a(()=>new Promise((e,t)=>{Nn.on("message",r),Nn.postMessage({type:GG});function r(s){s.type===xG&&(Nn.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else nO=jG;to.exports.getThreadInfo=nO;function zh(e,t){Ts.push(e),e.on("message",r=>{if(r.type===kG)r.port.threadId=r.threadId,zh(r.port);else if(r.type===Bae){let s=jh.get(r.id);s&&s()}else{for(let n of WG)n(r,e);let s=oO.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){hi.error(i)}}}).on("close",()=>{Ts.splice(Ts.indexOf(e),1)}).on("exit",()=>{Ts.splice(Ts.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(zh,"addPort");if(cO){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Cae(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(HG(s,i.name));try{for await(let{filename:i}of wae(s,{persistent:!1}))t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await dO(),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 Nn.on("message",async e=>{let{type:t}=e;t===uO.ITC_EVENT_TYPES.SHUTDOWN&&(to.exports.restartNumber=e.restartNumber,Nn.unref(),setTimeout(()=>{hi.warn("Thread did not voluntarily terminate",Nae),process.exit(0)},lO).unref())})});var nF=T(p_=>{"use strict";var{isMainThread:Zae,parentPort:m_,threadId:Ic}=require("worker_threads"),{Socket:ece,createServer:tce}=require("net"),{createServer:rce,IncomingMessage:sce}=require("http"),{createServer:nce}=require("https"),{readFileSync:wc}=require("fs"),bn=U(),Dt=Q(),mi=A(),{server:Xh}=(Pr(),te(So)),{WebSocketServer:ice}=require("ws"),{createServer:oce}=require("tls"),{getTicketKeys:ace,restartNumber:cce}=je(),{Headers:uce}=(HE(),te(RB)),{recordAction:h_,recordActionBinary:lce}=(zn(),te(Zu)),{Request:ZG,node_request_key:dOe,createReuseportFd:zG}=(jA(),te(OG));if(process.env.DEV_MODE)try{require("inspector").open(9229)}catch(e){cce<=1&&bn.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:fOe,CONFIG_PARAMS:_ce}=mi;Dt.initSync();var dce=Dt.get(_ce.HTTP_SESSIONAFFINITY),yn={};p_.registerServer=SO;p_.httpServer=TO;p_.deliverSocket=pO;p_.startServers=eF;Xh.http=TO;Xh.request=mce;Xh.socket=pce;Xh.ws=Sce;var fO=[],EO=[],fce,oa={},Jh={},Ece=[],hO=[];function eF(){return Wh().loadRootComponents(!0).then(()=>{m_?.on("message",t=>{let{port:r,fd:s,data:n}=t;if(s)pO(s,r,n);else if(t.requestId)hce(t);else if(t.type===mi.ITC_EVENT_TYPES.SHUTDOWN){bn.trace("received shutdown request",Ic);for(let i in yn){bn.trace("closing server",i,Ic);let o=yn[i],c;o.closeIdleConnections?.(),o.close?.(()=>{bn.trace("closed server",i,Ic),clearInterval(c),setTimeout(()=>{console.log("forced close server",i,Ic),o.cantCleanupProperly||bn.warn("Had to forcefully exit the thread",Ic),process.exit(0)},o.cantCleanupProperly?2500:5e3).unref()}),c=setTimeout(()=>{o.closeAllConnections?.()},1500).unref()}if(process.env.DEV_MODE)try{require("inspector").close()}catch(i){console.error("Could not close debugger",i)}}}).ref();let e=[];if(zG&&!dce)for(let t in yn){let r=yn[t],s;try{s=zG(+t,"::")}catch(n){console.error(`Unable to bind to port ${t}`,n);continue}e.push(new Promise((n,i)=>{r.listen({fd:s},()=>{n(),bn.trace("Listening on port "+t,Ic)}).on("error",i)}))}Promise.all(e).then(()=>{m_?.postMessage({type:mi.ITC_EVENT_TYPES.CHILD_STARTED})})})}a(eF,"startServers");Zae||eF();function pO(e,t,r){let s=e?.read?e:new ece({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=yn[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=yn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(bn.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(pO,"deliverSocket");var JG=new Map;function hce(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=JG.get(n),r){case"connection":i=pO(void 0,t),JG.set(n,i),i.write=(c,u,_)=>(m_.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),_&&_(),!0),i.end=(c,u,_)=>(m_.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),_&&_(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),m_.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(hce,"proxyRequest");function SO(e,t){+t||(t=parseInt(Dt.get(mi.CONFIG_PARAMS.HTTP_PORT),10));let r=yn[t];if(r){let s=r.lastServer||r;s.off("unhandled",XG),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else yn[t]=e;e.on("unhandled",XG)}a(SO,"registerServer");function tF(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=[],Dt.get(mi.CONFIG_PARAMS.HTTP_PORT)!=null&&t.push({port:Dt.get(mi.CONFIG_PARAMS.HTTP_PORT),secure:Dt.get(mi.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}),Dt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT)!=null&&t.push({port:Dt.get(mi.CONFIG_PARAMS.HTTP_SECUREPORT),secure:!0})),t}a(tF,"getPorts");function TO(e,t){for(let{port:r,secure:s}of tF(t))rF(r,s,t?.isOperationsServer),typeof e=="function"?hO[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):SO(e,r),Jh[r]=mO(hO,r),fce=mO(Ece,r)}a(TO,"httpServer");function rF(e,t,r){if(!oa[e]){let s=r?"operationsApi_network":"http",n={keepAliveTimeout:Dt.get(s+"_keepAliveTimeout"),headersTimeout:Dt.get(s+"_headersTimeout"),requestTimeout:Dt.get(s+"_timeout")};if(t){s=r?"operationsApi_":"";let i=Dt.get(s+"tls_privateKey"),o=Dt.get(s+"tls_certificate"),c=Dt.get(s+"tls_certificateAuthority");Object.assign(n,{key:wc(i),cert:wc(o)+(c?`
30
30
 
31
- `+yc(c):""),ticketKeys:sce()})}oa[e]=(t?ece:Xae)(n,async(i,o)=>{try{let u=performance.now(),l=new tF(i);r&&(l.isOperationsServer=!0);let _=await jh[e](l);if(_.headers?.set?.("Server","HarperDB"),_.status===-1){for(let R of _.headers||[])o.setHeader(R[0],R[1]);return i.baseRequest=l,o.baseResponse=_,oa[e].emit("unhandled",i,o)}let d=_.status||200,f=performance.now(),E=f-u;if(!_.handlesHeaders){let R=_.headers;if(R?.append){let g=`hdb;dur=${E.toFixed(2)}`;_.wasCacheMiss&&(g+=", miss"),R.append("Server-Timing",g,!0)}o.writeHead(d,R&&(R[Symbol.iterator]?Array.from(R):R))}let h=l.handlerPath,S=l.method;m_(E,"duration",h,S,_.wasCacheMiss==null?void 0:_.wasCacheMiss?"cache-miss":"cache-hit"),oce(d<400,"success",h,S);let m=_.body;if(m?.pipe){m.pipe(o),m.destroy&&o.on("close",()=>{m.destroy()});let R=0;m.on("data",g=>{R+=g.length}),m.on("end",()=>{m_(performance.now()-f,"transfer",h,S),m_(R,"bytes-sent",h,S)})}else m?.then?m.then(R=>{o.end(R)},c):o.end(m)}catch(u){c(u)}function c(u){o.writeHead(u.statusCode||500),o.end(u.toString()),u.statusCode?u.statusCode===500?mi.warn(u):mi.info(u):mi.error(u)}a(c,"onError")}),t&&(oa[e].on("secureConnection",i=>{i._parent.startTime&&m_(performance.now()-i._parent.startTime,"tls-handshake",e),m_(i.isSessionReused(),"tls-reused",e)}),oa[e].isSecure=!0),SO(oa[e],e)}return oa[e]}a(nF,"getHTTPServer");function mO(e,t){let r=fce;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(mO,"makeCallbackChain");function fce(e){return e.user&&(e[ace].user=e.user),{status:-1,body:"Not found",headers:new ice}}a(fce,"unhandled");function Ece(e,t){TO(e,{requestOnly:!0,...t})}a(Ece,"onRequest");function hce(e,t){if(t.securePort){let r=Dt.get("tls_privateKey"),s=Dt.get("tls_certificate"),n=Dt.get("tls_certificateAuthority"),i=rce({key:yc(r),cert:yc(s)+(n?`
31
+ `+wc(c):""),ticketKeys:ace()})}oa[e]=(t?nce:rce)(n,async(i,o)=>{try{let u=performance.now(),_=new ZG(i,o);r&&(_.isOperationsServer=!0);let l=await Jh[e](_);if(!l){if(_._nodeResponse.statusCode)return;l=sF(_)}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;if(!l.handlesHeaders){let g=l.headers;if(g?.append){let R=`hdb;dur=${E.toFixed(2)}`;l.wasCacheMiss&&(R+=", miss"),g.append("Server-Timing",R,!0)}o.writeHead(d,g&&(g[Symbol.iterator]?Array.from(g):g))}let h=_.handlerPath,p=_.method;h_(E,"duration",h,p,l.wasCacheMiss==null?void 0:l.wasCacheMiss?"cache-miss":"cache-hit"),lce(d<400,"success",h,p);let m=l.body;if(m?.pipe){m.pipe(o),m.destroy&&o.on("close",()=>{m.destroy()});let g=0;m.on("data",R=>{g+=R.length}),m.on("end",()=>{h_(performance.now()-f,"transfer",h,p),h_(g,"bytes-sent",h,p)})}else m?.then?m.then(g=>{o.end(g)},c):o.end(m)}catch(u){c(u)}function c(u){o.writeHead(u.statusCode||500),o.end(u.toString()),u.statusCode?u.statusCode===500?bn.warn(u):bn.info(u):bn.error(u)}a(c,"onError")}),t&&(oa[e].on("secureConnection",i=>{i._parent.startTime&&h_(performance.now()-i._parent.startTime,"tls-handshake",e),h_(i.isSessionReused(),"tls-reused",e)}),oa[e].isSecure=!0),SO(oa[e],e)}return oa[e]}a(rF,"getHTTPServer");function mO(e,t){let r=sF;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(mO,"makeCallbackChain");function sF(e){return e.user&&(e._nodeRequest.user=e.user),{status:-1,body:"Not found",headers:new uce}}a(sF,"unhandled");function mce(e,t){TO(e,{requestOnly:!0,...t})}a(mce,"onRequest");function pce(e,t){if(t.securePort){let r=Dt.get("tls_privateKey"),s=Dt.get("tls_certificate"),n=Dt.get("tls_certificateAuthority"),i=oce({key:wc(r),cert:wc(s)+(n?`
32
32
 
33
- `+yc(n):"")},e);bn[t.securePort]=i}if(t.port){let r=jae(e);bn[t.port]=r}}a(hce,"onSocket");Object.defineProperty(Zae.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 mce(e,t){for(let{port:r,secure:s}of sF(t)){EO[r]||(EO[r]=new tce({server:nF(r,s)}),EO[r].on("connection",async(i,o)=>{let c=new tF(o);c.isWebSocket=!0;let u=jh[r](c),l=o.headers["sec-websocket-protocol"]||"";for(let _=0;_<fO.length;_++){let d=fO[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";fO.push({listener:e,protocol:n}),jh[r]=mO(hO,r)}}a(mce,"onWebSocket");function eF(e,t){t.writeHead(404),t.end(`Not found
34
- `)}a(eF,"defaultNotFound")});var NO={};Fe(NO,{startHTTPThreads:()=>Sce,startSocketServer:()=>sO,updateWorkerIdleness:()=>_F});async function Sce(e=2,t){if(t)RO(0,1,!0);else{let{loadRootComponents:r}=Wh();if(e===0)return(0,ro.setMainIsWorker)(!0),await iF().startServers(),Promise.resolve([]);await r()}process.env.DEV_MODE&&(e=1);for(let r=0;r<e;r++)RO(r,e);return Promise.all(lF)}function RO(e,t=1,r){if(gO++,(0,ro.startWorker)("server/threads/threadServer.js",{name:tm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===tm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});lF.push(n),await n,Ic.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=em.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ic.indexOf(s);o>-1&&Ic.splice(o,1)}if(a(i,"removeWorker"),wc){let o=wc;wc=[];for(let c of o)uF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{AO?AO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,ro.shutdownWorkers)(),gO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function sO(e=0,t){if(typeof e=="string")try{(0,rm.existsSync)(e)&&(0,rm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Tce:r=gce(t):r=OO;let s=(0,Cc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=uF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),AO=!0,r(o,(c,u)=>{if(!c){if(oF){let _=o._socket||new Cc.Socket({handle:o,writable:!0,readable:!0});oF.deliverSocket(_,e,u),_.resume()}else gO>0?(wc.length===0&&setTimeout(()=>{wc.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,wc.push(o)):(console.log("start up a dynamic thread to handle request"),RO(0));xr(!1,"socket-routed");return}c.requests++;let l=o.fd;if(l>=0)c.postMessage({port:e,fd:l,data:u});else{let _=o._socket||new Cc.Socket({handle:o,writable:!0,readable:!0});Oce(_,c,e)}xr(!0,"socket-routed")})};let n=ho();cF.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 OO(e,t){let r,s=0;for(let n of Ic){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Zh)return Zh=i,t(r);s=i}Zh=0,t(r)}function Tce(e,t){let r={};e.getpeername(r);let s=r.address,n=Lc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);OO(e,o=>{Lc.set(s,{worker:o,lastUsed:i}),t(o)})}function gce(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Cc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],l=Lc.get(u),_=Date.now();if(l&&l.worker.threadId!==-1)return l.lastUsed=_,n(l.worker);OO(s,d=>{Lc.set(u,{worker:d,lastUsed:_}),n(d,o)})})}a(r,"findByHeaderAffinity")}function _F(){Zh=0;for(let e of Ic)e.expectedIdle=e.recentELU.idle+Rce,e.requests=1;Ic.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Oce(e,t,r){let s=Ace++;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(),em.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")),em.delete(s)),n.event=="destroy"&&(e.destroy(),em.delete(s))})}var ro,Cc,tm,cF,rm,pce,Ic,wc,uF,oF,gO,lF,AO,Zh,aF,Lc,Rce,em,Ace,Kh=ge(()=>{ro=P(Je()),Cc=require("net"),tm=P(A()),cF=P(M()),rm=require("fs");Jn();({isMainThread:pce}=require("worker_threads")),Ic=[],wc=[],uF=[],gO=0,lF=[];pce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(Sce,"startHTTPThreads");a(RO,"startHTTPWorker");a(sO,"startSocketServer");Zh=0;a(OO,"findMostIdleWorker");aF=36e5,Lc=new Map;a(Tce,"findByRemoteAddressAffinity");a(gce,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Lc)r.lastUsed+aF<e&&Lc.delete(t)},aF).unref();Rce=1e3;a(_F,"updateWorkerIdleness");(0,ro.setMonitorListener)(_F);em=new Map,Ace=1;a(Oce,"proxySocket")});var yO=p((gOe,dF)=>{"use strict";var T_=Q();T_.initSync();var Dc=require("fs-extra"),bO=require("path"),Pc=A(),Nce=require("crypto"),bce=require("uuid").v4;dF.exports=yce;function yce(){if(T_.getHdbBasePath()!==void 0){let e=bO.join(T_.getHdbBasePath(),Pc.LICENSE_KEY_DIR_NAME,Pc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=bO.join(T_.getHdbBasePath(),Pc.LICENSE_KEY_DIR_NAME,Pc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=bO.join(T_.getHdbBasePath(),Pc.LICENSE_KEY_DIR_NAME,Pc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Dc.accessSync(r),Dc.accessSync(e),Dc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=bce(),i=Nce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Dc.writeFileSync(r,n),Dc.writeFileSync(e,i.privateKey),Dc.writeFileSync(t,i.publicKey)}else throw s}}}a(yce,"checkJWTTokenExist")});var EF=p((AOe,fF)=>{"use strict";var IO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};fF.exports={HdbInfoInsertObject:IO}});var pF=p((NOe,mF)=>{"use strict";var hF=A(),wO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[hF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[hF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};mF.exports={UpgradeObject:wO}});var sm=p((yOe,TF)=>{"use strict";var Ss=require("prompt"),Mc=require("chalk"),SF=M(),ks=require("os"),CO=fo(),LO=["yes","y"];async function Ice(e){let t=`${ks.EOL}`+Mc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${ks.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${ks.EOL}${ks.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${ks.EOL}`;Ss.override=CO(["CONFIRM_UPGRADE"]),Ss.start(),Ss.message=t;let r={properties:{CONFIRM_UPGRADE:{description:Mc.magenta(`${ks.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 Ss.get([r])}catch(n){return SF.error("There was an error when prompting user about an upgrade."),SF.error(n),!1}return LO.includes(s.CONFIRM_UPGRADE)}a(Ice,"forceUpdatePrompt");async function wce(e){let t=`${ks.EOL}`+Mc.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.${ks.EOL}`);Ss.override=CO(["CONFIRM_DOWNGRADE"]),Ss.start(),Ss.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:Mc.magenta(`${ks.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 Ss.get([r]);return LO.includes(s.CONFIRM_DOWNGRADE)}a(wce,"forceDowngradePrompt");async function Cce(){let e=`${ks.EOL}`+Mc.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");Ss.override=CO(["GENERATE_CERTS"]),Ss.start(),Ss.message=e;let t={properties:{GENERATE_CERTS:{description:Mc.magenta(`${ks.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 Ss.get([t]);return LO.includes(r.GENERATE_CERTS)}a(Cce,"upgradeCertsPrompt");TF.exports={forceUpdatePrompt:Ice,forceDowngradePrompt:wce,upgradeCertsPrompt:Cce}});var PO=p((wOe,gF)=>{"use strict";var DO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};gF.exports=DO});var AF=p((UOe,RF)=>{"use strict";var Lce=G(),Dce=rt(),LOe=M(),DOe=require("path"),POe=require("fs"),MOe=A();RF.exports={getOldPropsValue:Pce};function Pce(e,t,r=!1){let s=t.getRaw(e);return Lce.isNotEmptyAndHasValue(s)?s:r?Dce.getDefaultConfig(e):""}a(Pce,"getOldPropsValue")});var yF=p((BOe,bF)=>{"use strict";var so=require("path"),no=require("fs-extra"),Mce=require("properties-reader"),Uce=PO(),pt=M(),{getOldPropsValue:Be}=AF(),{HDB_SETTINGS_NAMES:j,CONFIG_PARAMS:aa}=A(),ca=rt(),nm=Q(),OF=G(),yn=A(),MO=new Uce("3.1.0"),NF=[];function vce(){let e=Mce(nm.get(j.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),pt.info(t);let r=` ;Settings for the HarperDB process.
33
+ `+wc(n):"")},e);yn[t.securePort]=i}if(t.port){let r=tce(e);yn[t.port]=r}}a(pce,"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 Sce(e,t){for(let{port:r,secure:s}of tF(t)){EO[r]||(EO[r]=new ice({server:rF(r,s)}),EO[r].on("connection",async(i,o)=>{let c=new ZG(o);c.isWebSocket=!0;let u=Jh[r](c),_=o.headers["sec-websocket-protocol"]||"";for(let l=0;l<fO.length;l++){let d=fO[l];if(d.protocol){if(d.protocol===_){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";fO.push({listener:e,protocol:n}),Jh[r]=mO(hO,r)}}a(Sce,"onWebSocket");function XG(e,t){t.writeHead(404),t.end(`Not found
34
+ `)}a(XG,"defaultNotFound")});var NO={};Ge(NO,{startHTTPThreads:()=>gce,startSocketServer:()=>rO,updateWorkerIdleness:()=>lF});async function gce(e=2,t){if(t)RO(0,1,!0);else{let{loadRootComponents:r}=Wh();if(e===0)return(0,ro.setMainIsWorker)(!0),await nF().startServers(),Promise.resolve([]);await r()}for(let r=0;r<e;r++)RO(r,e);return Promise.all(uF)}function RO(e,t=1,r){if(gO++,(0,ro.startWorker)("server/threads/threadServer.js",{name:tm.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(_){_.type===tm.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});uF.push(n),await n,Cc.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=em.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Cc.indexOf(s);o>-1&&Cc.splice(o,1)}if(a(i,"removeWorker"),Lc){let o=Lc;Lc=[];for(let c of o)cF[c.localPort](null,c)}}}),r){let s=setInterval(()=>{AO?AO=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,ro.shutdownWorkers)(),gO=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function rO(e=0,t){if(typeof e=="string")try{(0,rm.existsSync)(e)&&(0,rm.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Rce:r=Ace(t):r=OO;let s=(0,Dc.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData}).listen(e);if(s._handle){s._handle.onconnection=cF[e]=function(i,o){r.readsData||(o.reading=!1,o.readStop()),AO=!0,r(o,(c,u)=>{if(!c){if(iF){let l=o._socket||new Dc.Socket({handle:o,writable:!0,readable:!0});iF.deliverSocket(l,e,u),l.resume()}else gO>0?(Lc.length===0&&setTimeout(()=>{Lc.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,Lc.push(o)):(console.log("start up a dynamic thread to handle request"),RO(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 Dc.Socket({handle:o,writable:!0,readable:!0});bce(l,c,e)}kr(!0,"socket-routed")})};let n=mo();aF.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 OO(e,t){let r,s=0;for(let n of Cc){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Zh)return Zh=i,t(r);s=i}Zh=0,t(r)}function Rce(e,t){let r={};e.getpeername(r);let s=r.address,n=Pc.get(s),i=Date.now();if(n&&n.worker.threadId!==-1)return n.lastUsed=i,t(n.worker);OO(e,o=>{Pc.set(s,{worker:o,lastUsed:i}),t(o)})}function Ace(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){let i=new Dc.Socket({handle:s,readable:!0,writable:!0});s._socket=i,i.on("data",o=>{s.readStop();let u=o.toString("latin1").match(t)?.[1],_=Pc.get(u),l=Date.now();if(_&&_.worker.threadId!==-1)return _.lastUsed=l,n(_.worker);OO(s,d=>{Pc.set(u,{worker:d,lastUsed:l}),n(d,o)})})}a(r,"findByHeaderAffinity")}function lF(){Zh=0;for(let e of Cc)e.expectedIdle=e.recentELU.idle+Oce,e.requests=1;Cc.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function bce(e,t,r){let s=Nce++;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(),em.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")),em.delete(s)),n.event=="destroy"&&(e.destroy(),em.delete(s))})}var ro,Dc,tm,aF,rm,Tce,Cc,Lc,cF,iF,gO,uF,AO,Zh,oF,Pc,Oce,em,Nce,Kh=ge(()=>{ro=M(je()),Dc=require("net"),tm=M(A()),aF=M(U()),rm=require("fs");zn();({isMainThread:Tce}=require("worker_threads")),Cc=[],Lc=[],cF=[],gO=0,uF=[];Tce&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&e.message!=="write EIO"&&console.error("uncaughtException",e)});a(gce,"startHTTPThreads");a(RO,"startHTTPWorker");a(rO,"startSocketServer");Zh=0;a(OO,"findMostIdleWorker");oF=36e5,Pc=new Map;a(Rce,"findByRemoteAddressAffinity");a(Ace,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Pc)r.lastUsed+oF<e&&Pc.delete(t)},oF).unref();Oce=1e3;a(lF,"updateWorkerIdleness");(0,ro.setMonitorListener)(lF);em=new Map,Nce=1;a(bce,"proxySocket")});var yO=T((SOe,_F)=>{"use strict";var S_=Q();S_.initSync();var Mc=require("fs-extra"),bO=require("path"),Uc=A(),yce=require("crypto"),Ice=require("uuid").v4;_F.exports=wce;function wce(){if(S_.getHdbBasePath()!==void 0){let e=bO.join(S_.getHdbBasePath(),Uc.LICENSE_KEY_DIR_NAME,Uc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=bO.join(S_.getHdbBasePath(),Uc.LICENSE_KEY_DIR_NAME,Uc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=bO.join(S_.getHdbBasePath(),Uc.LICENSE_KEY_DIR_NAME,Uc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{Mc.accessSync(r),Mc.accessSync(e),Mc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Ice(),i=yce.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});Mc.writeFileSync(r,n),Mc.writeFileSync(e,i.privateKey),Mc.writeFileSync(t,i.publicKey)}else throw s}}}a(wce,"checkJWTTokenExist")});var fF=T((gOe,dF)=>{"use strict";var IO=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};dF.exports={HdbInfoInsertObject:IO}});var mF=T((AOe,hF)=>{"use strict";var EF=A(),wO=class{static{a(this,"UpgradeObject")}constructor(t,r){this[EF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[EF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};hF.exports={UpgradeObject:wO}});var sm=T((NOe,SF)=>{"use strict";var gs=require("prompt"),vc=require("chalk"),pF=U(),Ys=require("os"),CO=Eo(),LO=["yes","y"];async function Cce(e){let t=`${Ys.EOL}`+vc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${Ys.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${Ys.EOL}${Ys.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${Ys.EOL}`;gs.override=CO(["CONFIRM_UPGRADE"]),gs.start(),gs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:vc.magenta(`${Ys.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 gs.get([r])}catch(n){return pF.error("There was an error when prompting user about an upgrade."),pF.error(n),!1}return LO.includes(s.CONFIRM_UPGRADE)}a(Cce,"forceUpdatePrompt");async function Lce(e){let t=`${Ys.EOL}`+vc.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.${Ys.EOL}`);gs.override=CO(["CONFIRM_DOWNGRADE"]),gs.start(),gs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:vc.magenta(`${Ys.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 gs.get([r]);return LO.includes(s.CONFIRM_DOWNGRADE)}a(Lce,"forceDowngradePrompt");async function Dce(){let e=`${Ys.EOL}`+vc.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");gs.override=CO(["GENERATE_CERTS"]),gs.start(),gs.message=e;let t={properties:{GENERATE_CERTS:{description:vc.magenta(`${Ys.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 gs.get([t]);return LO.includes(r.GENERATE_CERTS)}a(Dce,"upgradeCertsPrompt");SF.exports={forceUpdatePrompt:Cce,forceDowngradePrompt:Lce,upgradeCertsPrompt:Dce}});var PO=T((yOe,TF)=>{"use strict";var DO=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};TF.exports=DO});var RF=T((POe,gF)=>{"use strict";var Pce=G(),Mce=tt(),wOe=U(),COe=require("path"),LOe=require("fs"),DOe=A();gF.exports={getOldPropsValue:Uce};function Uce(e,t,r=!1){let s=t.getRaw(e);return Pce.isNotEmptyAndHasValue(s)?s:r?Mce.getDefaultConfig(e):""}a(Uce,"getOldPropsValue")});var bF=T((UOe,NF)=>{"use strict";var so=require("path"),no=require("fs-extra"),vce=require("properties-reader"),Bce=PO(),ht=U(),{getOldPropsValue:ve}=RF(),{HDB_SETTINGS_NAMES:X,CONFIG_PARAMS:aa}=A(),ca=tt(),nm=Q(),AF=G(),In=A(),MO=new Bce("3.1.0"),OF=[];function Hce(){let e=vce(nm.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
35
 
36
36
  ;The directory selected during install where the database files reside.
37
- ${j.HDB_ROOT_KEY} = ${Be(j.HDB_ROOT_KEY,e)}
37
+ ${X.HDB_ROOT_KEY} = ${ve(X.HDB_ROOT_KEY,e)}
38
38
  ;The port the HarperDB REST interface will listen on.
39
- ${j.SERVER_PORT_KEY} = ${Be(j.SERVER_PORT_KEY,e)}
39
+ ${X.SERVER_PORT_KEY} = ${ve(X.SERVER_PORT_KEY,e)}
40
40
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
41
- ${j.HTTP_SECURE_ENABLED_KEY} = ${Be(j.HTTP_SECURE_ENABLED_KEY,e)}
41
+ ${X.HTTP_SECURE_ENABLED_KEY} = ${ve(X.HTTP_SECURE_ENABLED_KEY,e)}
42
42
  ;The path to the SSL certificate used when running with HTTPS enabled.
43
- ${j.CERT_KEY} = ${Be(j.CERT_KEY,e)}
43
+ ${X.CERT_KEY} = ${ve(X.CERT_KEY,e)}
44
44
  ;The path to the SSL private key used when running with HTTPS enabled.
45
- ${j.PRIVATE_KEY_KEY} = ${Be(j.PRIVATE_KEY_KEY,e)}
45
+ ${X.PRIVATE_KEY_KEY} = ${ve(X.PRIVATE_KEY_KEY,e)}
46
46
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
47
- ${j.CORS_ENABLED_KEY} = ${Be(j.CORS_ENABLED_KEY,e)}
47
+ ${X.CORS_ENABLED_KEY} = ${ve(X.CORS_ENABLED_KEY,e)}
48
48
  ;Allows for setting allowable domains with CORS. Comma separated list.
49
- ${j.CORS_WHITELIST_KEY} = ${Be(j.CORS_WHITELIST_KEY,e)}
49
+ ${X.CORS_WHITELIST_KEY} = ${ve(X.CORS_WHITELIST_KEY,e)}
50
50
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
51
- ${j.SERVER_TIMEOUT_KEY} = ${Be(j.SERVER_TIMEOUT_KEY,e,!0)}
51
+ ${X.SERVER_TIMEOUT_KEY} = ${ve(X.SERVER_TIMEOUT_KEY,e,!0)}
52
52
  ;The number of milliseconds of inactivity a server needs to wait for additional incoming data, after it has finished writing the last response. Defaults to 5,000 ms (5 seconds).
53
- ${j.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Be(j.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
53
+ ${X.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${ve(X.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
54
54
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
55
- ${j.SERVER_HEADERS_TIMEOUT_KEY} = ${Be(j.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
55
+ ${X.SERVER_HEADERS_TIMEOUT_KEY} = ${ve(X.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
56
56
  ;Define whether to log to file or not.
57
- ${j.LOG_TO_FILE} = ${ca.getDefaultConfig(aa.LOGGING_FILE)}
57
+ ${X.LOG_TO_FILE} = ${ca.getDefaultConfig(aa.LOGGING_FILE)}
58
58
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
59
- ${j.LOG_TO_STDSTREAMS} = ${ca.getDefaultConfig(aa.LOGGING_STDSTREAMS)}
59
+ ${X.LOG_TO_STDSTREAMS} = ${ca.getDefaultConfig(aa.LOGGING_STDSTREAMS)}
60
60
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
61
- ${j.LOG_LEVEL_KEY} = ${Be(j.LOG_LEVEL_KEY,e)}
61
+ ${X.LOG_LEVEL_KEY} = ${ve(X.LOG_LEVEL_KEY,e)}
62
62
  ;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'
63
- ${j.LOG_PATH_KEY} = ${Be(j.LOG_PATH_KEY,e)}
63
+ ${X.LOG_PATH_KEY} = ${ve(X.LOG_PATH_KEY,e)}
64
64
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
65
- ${j.LOG_DAILY_ROTATE_KEY} = ${Be(j.LOG_DAILY_ROTATE_KEY,e)}
65
+ ${X.LOG_DAILY_ROTATE_KEY} = ${ve(X.LOG_DAILY_ROTATE_KEY,e)}
66
66
  ;Set the number of daily log files to maintain when LOG_DAILY_ROTATE is enabled. If no integer value is set, no limit will be set for
67
67
  ;daily log files which may consume a large amount of storage depending on your log settings.
68
- ${j.LOG_MAX_DAILY_FILES_KEY} = ${Be(j.LOG_MAX_DAILY_FILES_KEY,e)}
68
+ ${X.LOG_MAX_DAILY_FILES_KEY} = ${ve(X.LOG_MAX_DAILY_FILES_KEY,e)}
69
69
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
70
- ${j.PROPS_ENV_KEY} = ${Be(j.PROPS_ENV_KEY,e)}
70
+ ${X.PROPS_ENV_KEY} = ${ve(X.PROPS_ENV_KEY,e)}
71
71
  ;This allows self signed certificates to be used in clustering. This is a security risk
72
72
  ;as clustering will not validate the cert, so should only be used internally.
73
73
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
74
- ${j.ALLOW_SELF_SIGNED_SSL_CERTS} = ${Be(j.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
74
+ ${X.ALLOW_SELF_SIGNED_SSL_CERTS} = ${ve(X.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
75
75
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
76
- ${j.MAX_HDB_PROCESSES} = ${Be(j.MAX_HDB_PROCESSES,e)}
76
+ ${X.MAX_HDB_PROCESSES} = ${ve(X.MAX_HDB_PROCESSES,e)}
77
77
  ;Set to true to enable clustering. Requires a valid enterprise license.
78
- ${j.CLUSTERING_ENABLED_KEY} = ${Be(j.CLUSTERING_ENABLED_KEY,e,!0)}
78
+ ${X.CLUSTERING_ENABLED_KEY} = ${ve(X.CLUSTERING_ENABLED_KEY,e,!0)}
79
79
  ;The port that will be used for HarperDB clustering.
80
- ${j.CLUSTERING_PORT_KEY} = ${Be(j.CLUSTERING_PORT_KEY,e)}
80
+ ${X.CLUSTERING_PORT_KEY} = ${ve(X.CLUSTERING_PORT_KEY,e)}
81
81
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
82
- ${j.CLUSTERING_NODE_NAME_KEY} = ${Be(j.CLUSTERING_NODE_NAME_KEY,e)}
82
+ ${X.CLUSTERING_NODE_NAME_KEY} = ${ve(X.CLUSTERING_NODE_NAME_KEY,e)}
83
83
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
84
- ${j.CLUSTERING_USER_KEY} = ${Be(j.CLUSTERING_USER_KEY,e)}
84
+ ${X.CLUSTERING_USER_KEY} = ${ve(X.CLUSTERING_USER_KEY,e)}
85
85
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
86
- ${j.DISABLE_TRANSACTION_LOG_KEY} = ${Be(j.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
86
+ ${X.DISABLE_TRANSACTION_LOG_KEY} = ${ve(X.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
87
87
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
88
- ${j.OPERATION_TOKEN_TIMEOUT_KEY} = ${Be(j.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
88
+ ${X.OPERATION_TOKEN_TIMEOUT_KEY} = ${ve(X.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
89
89
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
90
- ${j.REFRESH_TOKEN_TIMEOUT_KEY} = ${Be(j.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
90
+ ${X.REFRESH_TOKEN_TIMEOUT_KEY} = ${ve(X.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
91
91
  ;The port the IPC server will run on.
92
- ${j.IPC_SERVER_PORT} = ${ca.getDefaultConfig(aa.IPC_NETWORK_PORT)}
92
+ ${X.IPC_SERVER_PORT} = ${ca.getDefaultConfig(aa.IPC_NETWORK_PORT)}
93
93
  ;Run HDB in the foreground.
94
- ${j.RUN_IN_FOREGROUND} = ${ca.getDefaultConfig(aa.OPERATIONSAPI_FOREGROUND)}
94
+ ${X.RUN_IN_FOREGROUND} = ${ca.getDefaultConfig(aa.OPERATIONSAPI_FOREGROUND)}
95
95
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
96
- ${j.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ca.getDefaultConfig(aa.CUSTOMFUNCTIONS_ENABLED)}
96
+ ${X.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${ca.getDefaultConfig(aa.CUSTOMFUNCTIONS_ENABLED)}
97
97
  ;The port used to access the custom functions server.
98
- ${j.CUSTOM_FUNCTIONS_PORT_KEY} = ${ca.getDefaultConfig(aa.HTTP_PORT)}
98
+ ${X.CUSTOM_FUNCTIONS_PORT_KEY} = ${ca.getDefaultConfig(aa.HTTP_PORT)}
99
99
  ;The path to the folder containing HarperDB custom function files.
100
- ${j.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${so.join(Be(j.HDB_ROOT_KEY,e),"custom_functions")}
100
+ ${X.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${so.join(ve(X.HDB_ROOT_KEY,e),"custom_functions")}
101
101
  ;Set the max number of processes HarperDB will start for the Custom Functions server
102
- ${j.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ca.getDefaultConfig(aa.HTTP_THREADS)}
103
- `,s=nm.get("settings_path"),n=so.dirname(s),i=so.join(n,"3_1_0_upgrade_settings.bak");try{pt.info(`Backing up old settings file to: ${i}`),no.copySync(s,i)}catch(c){throw pt.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{pt.info("New settings file values for 3.1.0 upgrade:",r),pt.info(`Creating new/upgraded settings file at '${s}'`),no.writeFileSync(s,r),pt.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."),pt.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),pt.error(c),no.copySync(i,s),c}nm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),pt.info(o),o}a(vce,"updateSettingsFile_3_1_0");function Bce(){let e=so.join(OF.getHomeDir(),yn.HDB_HOME_DIR_NAME,yn.LICENSE_KEY_DIR_NAME,yn.LICENSE_FILE_NAME),t=so.join(OF.getHomeDir(),yn.HDB_HOME_DIR_NAME,yn.LICENSE_KEY_DIR_NAME,yn.REG_KEY_FILE_NAME),r=so.join(nm.getHdbBasePath(),yn.LICENSE_KEY_DIR_NAME,yn.LICENSE_FILE_NAME),s=so.join(r,yn.LICENSE_FILE_NAME),n=so.join(r,yn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),pt.info(i);let o="Creating .license directory";console.log(o),pt.info(o),no.mkdirpSync(r);try{no.accessSync(e);try{let c="Moving licence file";console.log(c),pt.info(c),no.moveSync(e,s);let u="License file successfully moved.";console.log(u),pt.info(u)}catch{let u="moving license file failed";console.error(u),pt.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),pt.warn(u)}try{no.accessSync(t);try{let c="Moving registration file";console.log(c),pt.info(c),no.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),pt.info(u)}catch{let u="moving registration file failed";console.error(u),pt.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),pt.warn(u)}}a(Bce,"moveLicenseFiles");MO.sync_functions.push(vce);MO.sync_functions.push(Bce);NF.push(MO);bF.exports=NF});var DF=p((qOe,LF)=>{"use strict";var Qr=Ue(),{insertRecords:Hce}=yo(),qce=or(),io=We(),Gce=G(),Si=M(),Fce=G(),In=require("fs-extra"),Ti=require("path"),xce=require("cli-progress"),g_=require("assert"),kce=require("pino"),$ce=Q();LF.exports=Vce;var im,IF,om,UO,jt,R_=!1;async function Vce(e=!0){return im=$ce.getHdbBasePath(),IF=Ti.join(im,"schema"),om=Ti.join(im,"4_0_0_upgrade_tmp"),UO=Ti.join(im,"transactions"),console.info("Reindexing upgrade started for schemas"),Si.notify("Reindexing upgrade started for schemas"),await wF(IF,!1,e),await In.pathExists(UO)&&(console.info(`
102
+ ${X.MAX_CUSTOM_FUNCTION_PROCESSES} = ${ca.getDefaultConfig(aa.HTTP_THREADS)}
103
+ `,s=nm.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}nm.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ht.info(o),o}a(Hce,"updateSettingsFile_3_1_0");function qce(){let e=so.join(AF.getHomeDir(),In.HDB_HOME_DIR_NAME,In.LICENSE_KEY_DIR_NAME,In.LICENSE_FILE_NAME),t=so.join(AF.getHomeDir(),In.HDB_HOME_DIR_NAME,In.LICENSE_KEY_DIR_NAME,In.REG_KEY_FILE_NAME),r=so.join(nm.getHdbBasePath(),In.LICENSE_KEY_DIR_NAME,In.LICENSE_FILE_NAME),s=so.join(r,In.LICENSE_FILE_NAME),n=so.join(r,In.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(qce,"moveLicenseFiles");MO.sync_functions.push(Hce);MO.sync_functions.push(qce);OF.push(MO);NF.exports=OF});var LF=T((BOe,CF)=>{"use strict";var zr=Me(),{insertRecords:Gce}=Io(),Fce=lr(),io=Ke(),xce=G(),pi=U(),kce=G(),wn=require("fs-extra"),Si=require("path"),$ce=require("cli-progress"),T_=require("assert"),Vce=require("pino"),Yce=Q();CF.exports=Kce;var im,yF,om,UO,er,g_=!1;async function Kce(e=!0){return im=Yce.getHdbBasePath(),yF=Si.join(im,"schema"),om=Si.join(im,"4_0_0_upgrade_tmp"),UO=Si.join(im,"transactions"),console.info("Reindexing upgrade started for schemas"),pi.notify("Reindexing upgrade started for schemas"),await IF(yF,!1,e),await wn.pathExists(UO)&&(console.info(`
104
104
 
105
- Reindexing upgrade started for transaction logs`),Si.notify("Reindexing upgrade started for transaction logs"),await wF(UO,!0,e)),Si.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(R_?", but errors occurred":"")}a(Vce,"reindexUpgrade");async function wF(e,t,r){let s=await In.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 In.readdir(c),l=u.length;for(let _=0;_<l;_++){let d=u[_];if(d!==".DS_Store"&&In.statSync(Ti.join(c,d)).isDirectory())try{await Yce(o,d,t),jt.info(`Reindexing started for ${o}.${d}`),Si.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Wce(o,d,c,t,r),jt.info(`Reindexing completed for ${o}.${d}`),Si.notify(`Reindexing completed for ${o}.${d}`)}catch(f){R_=!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),jt.error(f),console.error(f)}}}if(!R_)try{await In.rm(om,{recursive:!0})}catch{}}a(wF,"processTables");async function Yce(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Ti.join(om,n);await In.ensureDir(om),await In.writeFile(i,""),jt=kce({level:"debug",formatters:{bindings(){}}},i)}a(Yce,"initPinoLogger");var Kce=20;async function Wce(e,t,r,s,n){let i;try{i=await Qr.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`),jt.error(g);return}throw g}let o=Jce(i.dbis),c=Qr.openDBI(i,o),u=Object.keys(i.dbis),l=Qr.statDBI(i,o);jt.info(`Old environment stats: ${JSON.stringify(l)}`);let _=new xce.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});_.start(l.entryCount,0,{});let d=await Qr.createEnvironment(r,t,!1);Qr.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>Kce&&await E();await E()}catch(g){throw R_=!0,jt.error(g),g}async function E(){let g,O=f.map(({value:$})=>$);s?g=await Promise.all(O.map($=>Qce(d,$))):g=await Hce(d,o,u.filter($=>$!=="__blob__"),O,!1);for(let $=0,F=f.length;$<F;$++){let{key:C,value:Y}=f[$];jt.info(`Record hash value: ${C} hash: ${o}`);let B;s?B=g[$]:B=g.written_hashes.indexOf(C)>-1,g_(B,!0),zce(d,o,Y[o],s),jt.info(`Insert success, written hashes: ${g.written_hashes}`),_.increment()}f=[],_.value/_.total*100%10===0&&Si.notify(`${e}.${t} ${_.value}/${_.total} records inserted`),jt.info(`${_.value}/${_.total} records inserted`)}a(E,"finishOutstanding"),_.stop();let h=Qr.statDBI(i,o),S=Qr.statDBI(d,o);if(jt.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${S.entryCount}`),g_.deepStrictEqual(h.entryCount,S.entryCount),await Qr.closeEnvironment(i),await Qr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Ti.join(r,t),O=Ti.join(g,"data.mdb"),V=Ti.join(g,"lock.mdb");await In.unlink(O),await In.unlink(V),await In.rmdir(g),jt.info(`Deleted old environment files from schema folder: ${O}, ${V}`)}let m=await Qr.openEnvironment(r,t),R=Qr.statDBI(m,o);jt.info(`New stats: ${JSON.stringify(S)}. New stats after move: ${JSON.stringify(R)}`),g_.deepStrictEqual(R.entryCount,S.entryCount),await Qr.closeEnvironment(m),delete global.lmdb_map[`${e}.${t}`]}a(Wce,"processTable");async function Qce(e,t){Qr.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),Fce.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(Qce,"insertTransaction");function zce(e,t,r,s){let i=e.dbis[t].get(r);g_.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&&!Gce.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let l=0,_=u.length;l<_;l++){let d=u[l];CF(e,c,d,r)}else CF(e,c,u,r)}a(zce,"validateIndices");function CF(e,t,r,s){try{let n=!1,i=qce.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||jt.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),g_.deepStrictEqual(n,!0)}catch(n){R_=!0,jt.error(n),console.error(n)}}a(CF,"validateIndex");function Jce(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(Jce,"getHashDBI")});var qO=p((FOe,MF)=>{"use strict";var jce=require("mkcert"),am=require("path"),vO=require("fs-extra"),BO=M(),Xce=Q(),HO=A(),Uc=Ym(),Zce=fo(),eue=rt();MF.exports={generateKeys:tue,updateConfigCert:PF};async function tue(){let e=Xce.getHdbBasePath(),t=am.join(e,HO.LICENSE_KEY_DIR_NAME),r=await jce.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Uc.CERTIFICATE_VALUES.key,caCert:Uc.CERTIFICATE_VALUES.cert}),s=am.join(t,Uc.CERTIFICATE_PEM_NAME),n=am.join(t,Uc.PRIVATEKEY_PEM_NAME),i=am.join(t,Uc.CA_PEM_NAME);try{await vO.writeFile(s,r.cert)}catch(o){throw BO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await vO.writeFile(n,r.key)}catch(o){throw BO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await vO.writeFile(i,Uc.CERTIFICATE_VALUES.cert)}catch(o){throw BO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}PF(s,n,i)}a(tue,"generateKeys");function PF(e,t,r){let s=Zce(Object.keys(HO.CONFIG_PARAM_MAP),!0),n=HO.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()]),eue.updateConfigValue(void 0,void 0,i,!1,!0)}a(PF,"updateConfigCert")});var qF=p(($Oe,HF)=>{"use strict";var cm=require("path"),oo=require("fs-extra"),rue=PO(),ua=M(),UF=rt(),GO=Q(),$s=A(),um=G(),sue=require("properties-reader"),nue=Ls(),iue=Zf(),oue=lr(),kOe=require("util"),aue=oue.searchByValue,cue=_r(),uue=RE(),lue=ke(),_ue=DF(),vF=qO(),due=sm(),N_=new rue("4.0.0"),BF=[],A_,O_;async function fue(){try{if(await due.upgradeCertsPrompt()){if(console.log("Generating new certificates."),A_){let t=um.changeExtension(A_,".bak");await oo.move(A_,t)}if(O_){let t=um.changeExtension(O_,".bak");await oo.move(O_,t)}await vF.generateKeys()}else console.log("Using existing certificates."),vF.updateConfigCert(A_,O_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(fue,"generateNewKeys");async function Eue(){console.log("Updating HarperDB nodes."),ua.info("Updating HarperDB nodes.");let e=[];try{let t=new nue($s.SYSTEM_SCHEMA_NAME,$s.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(!lue.NATS_TERM_CONSTRAINTS_RX.test(c.name)){let _=`Node name '${c.name}' is invalid, must not contain ., * or >. Please change name and try again.`;throw console.error(_),_}let u={host:c.host,port:c.port};e.push(u);let l=[];for(let _=0,d=c.subscriptions.length;_<d;_++){let f=c.subscriptions[_],E=f.channel.split(":");l.push({schema:E[0],table:E[1],publish:f.publish,subscribe:f.subscribe})}s.push({name:c.name,subscriptions:l,system_info:{hdb_version:$s.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(um.isEmptyOrZeroLength(s))return;let n=new iue($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await cue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{uue.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(Eue,"updateNodes");async function hue(){let e=GO.get($s.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(cm.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=cm.dirname(e),s=GO.get($s.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=cm.join(s,"backup","4_0_0_upgrade_settings.bak"),i=cm.join(s,$s.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=UF.initOldConfig(e);A_=d[$s.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],O_=d[$s.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],UF.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=um.getPropsFilePath();oo.accessSync(o,oo.constants.F_OK|oo.constants.R_OK);let u=sue(o).get($s.HDB_SETTINGS_NAMES.INSTALL_USER),l=`settings_path = ${i}
106
- install_user = ${u}`;try{oo.writeFileSync(o,l)}catch(d){throw console.log("There was a problem updating the HarperDB boot properties file. Please check the log for details."),d}try{GO.initSync(!0)}catch(d){throw console.error("Unable to initialize new properties. Please check the log for details."),d}let _="New settings file for 4.0.0 upgrade successfully created.";try{oo.removeSync(r),console.log(_),ua.info(_)}catch(d){throw console.error("There was a problem deleting the old settings file and directory. Please check the log for details."),d}}a(hue,"updateSettingsFile_4_0_0");N_.async_functions.push(hue);N_.async_functions.push(fue);N_.async_functions.push(_ue);N_.async_functions.push(Eue);BF.push(N_);HF.exports=BF});var FO=p((YOe,kF)=>{"use strict";var la=G(),mue=A(),GF=M(),{DATA_VERSION:pue,UPGRADE_VERSION:Sue}=mue.UPGRADE_JSON_FIELD_NAMES_ENUM,FF=yF(),lm=qF(),_a=new Map;FF&&FF.forEach(e=>{_a.set(e.version,e)});lm&&lm.forEach(e=>{_a.set(e.version,e)});lm&&lm.forEach(e=>{_a.set(e.version,e)});function Tue(){return[..._a.keys()].sort(la.compareVersions)}a(Tue,"getSortedVersions");function xF(e){let t=e[pue],r=e[Sue];return la.isEmptyOrZeroLength(t)||la.isEmptyOrZeroLength(r)?(GF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),GF.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 gue(e){return xF(e).length>0}a(gue,"hasUpgradesRequired");function Rue(e){return la.isEmptyOrZeroLength(e)?null:_a.has(e)?_a.get(e):null}a(Rue,"getDirectiveByVersion");kF.exports={getSortedVersions:Tue,getDirectiveByVersion:Rue,getVersionsForUpgrade:xF,hasUpgradesRequired:gue}});var _m=p((WOe,WF)=>{"use strict";var Aue=require("util"),xO=require("chalk"),Oue=require("os"),VF=_r(),Nue=lr(),zr=A(),YF=EF(),$O=oT(),{UpgradeObject:$F}=pF(),{forceDowngradePrompt:bue}=sm(),yue=mo(),b_=M(),vc=G(),VO=ns(),Iue=(fe(),te(Pe)),wue=FO(),Cue=Aue.promisify(VO.setSchemaDataToGlobal),Lue=Nue.searchByValue,Due="info_id",Pue="2.9.9",Mue="3.0.0";async function Uue(e){let t=new YF.HdbInfoInsertObject(1,e,e),r=new $O.InsertObject(zr.OPERATIONS_ENUM.INSERT,zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return VO.setSchemaDataToGlobal(),VF.insert(r)}a(Uue,"insertHdbInstallInfo");async function kO(e){let t,r=await KF(),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 YF.HdbInfoInsertObject(i,e,e);let o=new $O.InsertObject(zr.OPERATIONS_ENUM.INSERT,zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Cue(),VF.insert(o)}a(kO,"insertHdbUpgradeInfo");async function KF(){let e=new $O.NoSQLSeachObject(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Due,zr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Lue(e))}catch(r){b_.info(r)}return t}a(KF,"getAllHdbInfoRecords");async function vue(){let e=await KF();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(vue,"getLatestHdbInfoRecord");async function Bue(){b_.info("Checking if HDB software has been updated");try{let e=yue.version(),t=await vue(),r;if(vc.isEmpty(t))r=Pue;else if(r=t.data_version_num,vc.compareVersions(r.toString(),e.toString())>0){if(!vc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(xO.yellow(`This instance's data was last run on version ${r}`)),console.error(xO.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.${Oue.EOL}${zr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");vc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(xO.yellow(`This instance's data was last run on version ${r}`)),await bue(new $F(r,e))?await kO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(VO.setSchemaDataToGlobal(),Hue(r),e.toString()===r.toString())return;let s=new $F(r,e);if(wue.hasUpgradesRequired(s))return s;vc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await kO(s.upgrade_version),b_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw b_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),b_.fatal(e),e}}a(Bue,"getVersionUpdateInfo");function Hue(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 ${zr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Iue.databases.system))throw console.log(t),new Error(t);if(!vc.isEmpty(e)&&e<Mue)throw console.log(t),new Error(t)}a(Hue,"checkIfInstallIsSupported");WF.exports={insertHdbInstallInfo:Uue,insertHdbUpgradeInfo:kO,getVersionUpdateInfo:Bue}});var XF=p((zOe,jF)=>{"use strict";var YO=require("joi"),{boolean:que,string:QF,number:Gue}=YO.types(),zF=require("fs-extra"),y_=A(),JF=require("path"),Fue=Ye();jF.exports=xue;function xue(e){let t=QF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=YO.object({[y_.INSTALL_PROMPTS.ROOTPATH]:YO.custom(kue),[y_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:Gue.min(0),[y_.INSTALL_PROMPTS.TC_AGREEMENT]:QF.valid("yes","YES","Yes"),[y_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[y_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:que});return Fue.validateBySchema(e,r)}a(xue,"installValidator");function kue(e,t){if(zF.existsSync(JF.join(e,"system/hdb_user/data.mdb"))||zF.existsSync(JF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(kue,"validateRootAvailable")});var ex=p((jOe,ZF)=>{"use strict";var{mkdirpSync:$ue}=require("fs-extra"),wn=require("path"),Bc=A(),WO=M(),Vue=ss(),KO=kn(),Yue=qe();ZF.exports=Kue;async function Kue(e){WO.trace("Mounting HarperDB"),Vs(e),Vs(wn.join(e,"backup")),Vs(wn.join(e,"trash")),Vs(wn.join(e,"keys")),Vs(wn.join(e,"keys",Bc.LICENSE_FILE_NAME)),Vs(wn.join(e,"log")),Vs(wn.join(e,"doc")),Vs(wn.join(e,"database")),Vs(wn.join(e,Bc.TRANSACTIONS_DIR_NAME)),Vs(wn.join(e,"clustering","leaf")),Vs(wn.join(e,"components")),await Wue()}a(Kue,"mountHdb");async function Wue(){let e=Bu(),t=Object.keys(KO);for(let r=0;r<t.length;r++){let s=t[r],n=KO[s].hash_attribute;try{Yue.initSystemSchemaPaths(Bc.SYSTEM_SCHEMA_NAME,s);let i=new e(Bc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=KO[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await Vue.createTable(s,i)}catch(i){throw WO.error(`issue creating environment for ${Bc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(Wue,"createLMDBTables");function Vs(e){$ue(e,{mode:Bc.HDB_FILE_PERMISSIONS}),WO.info(`Directory ${e} created`)}a(Vs,"makeDirectory")});var fm=p((ZOe,_x)=>{"use strict";var zO=require("os"),nx=require("inquirer"),Ts=require("fs-extra"),Que=require("properties-reader"),da=require("chalk"),Dn=require("path"),zue=require("human-readable-ids").hri,Jue=require("ora"),jue=require("yaml"),St=M(),uo=Q(),I_=G(),dm=fo(),ix=_m(),ox=mo(),ee=A(),Xue=XF(),Zue=ex(),JO=rt(),ele=dr(),tle=zf(),rle=yO(),sle=ns(),nle=require("util").promisify,ile=nle(sle.setSchemaDataToGlobal),ole=qO(),Hc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Xt=a(e=>da.magenta.bold(e),"HDB_PROMPT_MSG"),ale="https://harperdb.io/legal/end-user-license-agreement",lo=zO.EOL,ao="",cle="yes",tx="Starting HarperDB install...",rx="HarperDB installation was successful.",sx="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",ule="An out of date version of HarperDB is already installed.",QO="It appears that HarperDB is already installed. Exiting install...",lle="Aborting install",_le=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])$/),dle=new RegExp(/^[^\s.,*>]+$/),fle=zO.homedir(),Ele=Dn.join(fle,ee.HDB_ROOT_DIR_NAME),hle=9925,mle="HDB_ADMIN",ple="CLUSTER_USER",yr={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:"},qc=dm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Ln,ax=!1;_x.exports=cx;cx.createSuperUser=lx;async function cx(){console.log(Xt(lo+tx+lo)),St.notify(tx);let e;qc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=Sle());let t=gle();Object.assign(t,e);let r=Xue(t);if(r)throw r.message;await Rle(),await Ale(t);let s=await Tle(t);Ln=s[ee.INSTALL_PROMPTS.ROOTPATH],qc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Dn.dirname(qc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Ln&&(ax=!0),!qc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Ts.pathExists(Dn.join(Ln,ee.HDB_CONFIG_FILE))&&(console.error(QO),process.exit());let n=Jue({prefixText:Xt("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),I_.isEmpty(Ln))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");uo.setHdbBasePath(Ln),await Zue(Ln),await Ole(),await Nle(s),St.initLogSettings(!0),await lx(s),await yle(s),await ole.generateKeys(),await Ile(),rle(),n.stop(),console.log(Xt(lo+rx+lo)),St.notify(rx)}a(cx,"install");function Sle(){let e=jue.parseDocument(Ts.readFileSync(qc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=JO.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(Sle,"getConfigFromFile");async function Tle(e){St.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Hc,when:co(e[ee.INSTALL_PROMPTS.ROOTPATH],yr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:ao,default:Ele,validate:async n=>Cn(n)?Cn(n):await Ts.pathExists(Dn.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Xt(yr.DESTINATION)},{type:"input",transformer:Hc,when:co(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],yr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ao,default:hle,validate:n=>_le.test(n)?!0:"Invalid port.",message:Xt(yr.HDB_PORT)},{type:"input",transformer:Hc,when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],yr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ao,default:mle,validate:n=>Cn(n)?Cn(n):(t=n,!0),message:Xt(yr.HDB_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],yr.HDB_PASS),name:ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:ao,validate:n=>Cn(n)?Cn(n):!0,message:Xt(yr.HDB_PASS)}];if(I_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Hc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],yr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ao,default:zue.random(),validate:i=>dle.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Xt(yr.NODE_NAME)},{type:"input",transformer:Hc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],yr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ao,default:ple,validate:i=>Cn(i)?Cn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Xt(yr.CLUSTER_USERNAME)},{type:"password",when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD],yr.CLUSTER_PASS),name:ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:ao,validate:i=>Cn(i)?Cn(i):!0,message:Xt(yr.CLUSTER_PASS)}];r.push(...n)}let s=await nx.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(Tle,"installPrompts");function co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Xt(t)} ${da.gray("[hidden]")}`),St.trace(`${Xt(t)} [hidden]`)):(console.log(`${Xt(t)} ${e}`),St.trace(`${Xt(t)} ${e}`)),!1):!0}a(co,"displayCmdEnvVar");function Cn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Cn,"checkForEmptyValue");function gle(){let e=Object.keys(ee.INSTALL_PROMPTS),t=dm(e),r=dm(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(gle,"checkForPromptOverride");async function Rle(){St.trace("Checking for existing install.");let e=I_.getPropsFilePath(),t=await Ts.pathExists(e),r;if(t){St.trace(`Install found an existing boot prop file at:${e}`);let s=Que(e),n=JO.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Ts.pathExists(n)}if(!t&&I_.noBootFile()&&(r=!0),r){if(St.trace(`Install found existing HDB config at:${e}`),await ix.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${ox.version()}. Exiting install...`;console.log(lo+da.magenta.bold(ule)),console.log(da.magenta.bold(n)),St.error(n)}else console.log(lo+da.magenta.bold(QO)),St.error(QO);process.exit(0)}}a(Rle,"checkForExistingInstall");async function Ale(e){St.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${ale}${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:Hc,when:co(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:Xt(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:da.yellow("Please enter 'yes' or 'no'")},s=await nx.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==cle&&(console.log(da.yellow(sx)),St.error(sx),process.exit(0))}a(Ale,"termsAgreement");async function Ole(){let e=Dn.join(Ln,ee.HDB_CONFIG_FILE),t;try{t=zO.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}
107
- install_user = ${t}`,s=I_.getHomeDir(),n=Dn.join(s,ee.HDB_HOME_DIR_NAME),i=Dn.join(n,ee.LICENSE_KEY_DIR_NAME);try{Ts.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Ts.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=Dn.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Ts.writeFile(o,r)}catch(c){throw St.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(Ole,"createBootPropertiesFile");async function Nle(e){St.trace("Creating HarperDB config file");let t=dm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{JO.createConfigFile(t),uo.initSync()}catch(r){ble(r)}}a(Nle,"createConfigFile");function ble(e){St.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(lle);let t=Dn.resolve(uo.get(uo.BOOT_PROPS_FILE_PATH),"../");t&&Ts.removeSync(t),Ln&&(ax?Ts.readdirSync(Ln,{withFileTypes:!0}).forEach(s=>{let n=Dn.join(s.path,s.name);n!==qc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Ts.removeSync(n)}):Ts.removeSync(Ln)),process.exit(1)}a(ble,"rollbackInstall");async function ux(e,t){St.trace("Creating admin user"),await ile();let r;try{r=await tle.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 ele.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(ux,"createAdminUser");async function lx(e){St.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 ux(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(lx,"createSuperUser");async function yle(e){St.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 ux({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(yle,"createClusterUser");async function Ile(){let e=ox.version();if(e)await ix.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Ile,"insertHdbVersionInfo")});var Ex=p((tNe,fx)=>{"use strict";var jO=G(),Jr=M(),dx=FO();fx.exports={processDirectives:wle};async function wle(e){console.log("Starting upgrade process...");let t=dx.getVersionsForUpgrade(e),r=Dle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Jr.notify(c),console.log(c);let u=[],l=[];try{u=Cle(o.sync_functions)}catch(_){throw Jr.error(`Error while running an upgrade script for ${o.version}`),_}try{l=await Lle(o.async_functions)}catch(_){throw Jr.error(`Error while running an upgrade script for ${o.version}`),_}s.push(...u,...l)}return s}a(wle,"processDirectives");function Cle(e){if(jO.isEmptyOrZeroLength(e))return Jr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Jr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Jr.info(`Running function ${r.name}`),!(r instanceof Function)){Jr.info("Variable being processed is not a function");continue}let s=r();Jr.info(s),t.push(s)}return t}a(Cle,"runSyncFunctions");async function Lle(e){if(jO.isEmptyOrZeroLength(e))return Jr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Jr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Jr.info(`Running function ${n.name}`),!(n instanceof Function)){Jr.info("Variable being processed is not a function");continue}let i=await n();Jr.info(i),t.push(i)}return t}a(Lle,"runAsyncFunctions");function Dle(e){if(jO.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=dx.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Dle,"getUpgradeDirectivesToInstall")});var eN=p((sNe,gx)=>{"use strict";var Em=Q();Em.initSync();var Sx=require("chalk"),hx=require("fs-extra"),Ri=M(),gi=A(),mx=mo(),Ple=Ex(),XO=G(),Tx=_m(),Mle=sm(),px=Gm(),Ule=ns(),vle=require("util").promisify,Ble=vle(Ule.setSchemaDataToGlobal),ZO,{UPGRADE_VERSION:hm}=gi.UPGRADE_JSON_FIELD_NAMES_ENUM;gx.exports={upgrade:Hle};async function Hle(e){await Ble(),ZO===void 0&&(ZO=ac()),hx.existsSync(Em.get(Em.BOOT_PROPS_FILE_PATH))||(w_("The hdb_boot_properties file was not found. Please install HDB.",gi.LOG_LEVELS.ERROR),process.exit(1)),hx.existsSync(Em.get(gi.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(w_("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 Tx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),w_(`This version of HarperDB is ${mx.version()}`,gi.LOG_LEVELS.INFO);let r=t[hm]?t[hm]:mx.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 qle();let s,n=0;try{s=await Mle.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 Gle(t),w_(`HarperDB was successfully upgraded to version ${t[hm]}`,gi.LOG_LEVELS.INFO)}a(Hle,"upgrade");async function qle(){let e=!1,t=await px.findPs(gi.HDB_PROC_NAME);if(XO.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await px.findPs("hdb_express");XO.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZO.list();XO.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(Sx.red(r)),Ri.error(r),process.exit(1)}}a(qle,"checkIfRunning");async function Gle(e){try{await Ple.processDirectives(e)}catch(t){throw w_("There was an error during the data upgrade. Please check the logs.",gi.LOG_LEVELS.ERROR),t}try{await Tx.insertHdbUpgradeInfo(e[hm])}catch(t){Ri.error("Error updating the 'hdb_info' system table."),Ri.error(t)}}a(Gle,"runUpgrade");function w_(e,t=void 0){t||(t=Ri.info),Ri[t](e),console.log(Sx.magenta(e))}a(w_,"printToLogAndConsole")});var bx=p((iNe,Nx)=>{"use strict";var{promises:rN,createReadStream:Fle,createWriteStream:xle}=require("fs"),{createGzip:kle}=require("zlib"),{promisify:$le}=require("util"),{pipeline:Vle}=require("stream"),Yle=$le(Vle),Kle=require("path"),Ea=Q();Ea.initSync();var fa=M(),{CONFIG_PARAMS:C_,ITC_EVENT_TYPES:Wle}=A(),{onMessageFromWorkers:Qle}=Je(),zle=6e4,Jle="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",jle="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",tN,Ax;Nx.exports=Ox;Qle(e=>{e.type===Wle.RESTART&&(Ea.initSync(!0),clearInterval(Ax),Ea.get(C_.LOGGING_ROTATION_ENABLED)&&Ox())});async function Ox(){try{let e=fa.getLogFilePath(),t=Ea.get(C_.LOGGING_ROTATION_MAXSIZE),r=Ea.get(C_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){fa.error(Jle);return}let s=Ea.get(C_.LOGGING_ROTATION_PATH);if(!s){fa.error(jle);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}tN=Date.now()/6e4,fa.trace("Log rotate enabled, maxSize:",t,"interval:",r),Ax=setInterval(async()=>{if(n){let o;o=await rN.stat(e),o.size>=n&&await Rx(e,s)}i&&Date.now()/6e4-tN>=i&&(await Rx(e,s),tN=Date.now()/6e4)},zle).unref()}catch(e){fa.error(e)}}a(Ox,"logRotator");async function Rx(e,t){let r=Ea.get(C_.LOGGING_ROTATION_COMPRESS),s=Kle.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Yle(Fle(e),kle(),xle(s)),await rN.unlink(e)):await rN.rename(e,s),fa.closeLogFile(),fa.notify(`hdb.log rotated, old log moved to ${s}`)}a(Rx,"moveLogFile")});var Gc=p((hNe,Dx)=>{"use strict";var Ks=Q();Ks.initSync();var aNe=Qo(),ot=A(),Ir=M(),Ai=require("fs-extra"),_o=require("path"),Xle=require("systeminformation"),Zle=yO(),e_e=fm(),sN=require("chalk"),t_e=ho(),Pn=G(),yx=rt(),Ix=fo(),r_e=LE(),s_e=eN(),n_e=bx(),i_e=require("minimist"),{PACKAGE_ROOT:o_e}=A(),{startHTTPThreads:a_e,startSocketServer:cNe,mostIdleRouting:uNe,remoteAffinityRouting:lNe}=(Kh(),te(NO)),c_e=_m(),{isMainThread:u_e}=require("worker_threads"),_Ne=kn(),dNe=Bi(),fNe=bS(),ENe=Bu(),nN=A(),Ys,l_e="Upgrade complete. Starting HarperDB.",__e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",d_e="HarperDB not found, starting install process.",f_e="There was an error during install, check install_log.log for more details. Exiting.",E_e="HarperDB successfully started.";function h_e(){let e=a(()=>{Ai.removeSync(_o.join(Ks.get(ot.CONFIG_PARAMS.ROOTPATH),ot.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(h_e,"addExitListeners");async function wx(e=!1,t=!1){if(console.log(sN.magenta("Starting HarperDB...")),await Lx()===!1){console.log(d_e);try{await e_e()}catch(n){console.error(f_e,n),Ir.error(n),process.exit(1)}}try{let n=Number.parseInt(await Ai.readFile(_o.join(Ks.get(ot.CONFIG_PARAMS.ROOTPATH),ot.HDB_PID_FILE),"utf8")),i=await Xle.processes();for(let o of i.list)o.pid===n&&(console.log("HarperDB is already running"),process.exit(0))}catch{}h_e(),await Ai.writeFile(_o.join(Ks.get(nN.CONFIG_PARAMS.ROOTPATH),nN.HDB_PID_FILE),`${process.pid}`),Ir.info("HarperDB PID",process.pid),Ys===void 0&&(Ys=ac());let r;try{let n=await c_e.getVersionUpdateInfo();n!==void 0&&(r=n[ot.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await s_e.upgrade(n),console.log(l_e))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),Ir.error(n)):(console.error(__e),Ir.error(n)),process.exit(1)}if(!e){let n=Ix(Object.keys(ot.CONFIG_PARAM_MAP),!0);!Pn.isEmpty(n)&&!Pn.isEmptyOrZeroLength(Object.keys(n))&&yx.updateConfigValue(void 0,void 0,n,!0,!0)}Zle(),S_e(),Pn.autoCastBoolean(Ks.get(ot.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&u_e&&await r_e.generateNatsConfig(t)}a(wx,"initialize");async function m_e(e=!1){try{let t=i_e(process.argv);t.ROOTPATH&&yx.updateConfigObject("settings_path",_o.join(t.ROOTPATH,ot.HDB_CONFIG_FILE)),await wx(e,!0);let r=Pn.autoCastBoolean(Ks.get(ot.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r;if(Pn.isEmpty(t.service))n&&(s||await Ys.startClusteringProcesses(),await Ys.startClusteringThreads()),await a_e(Ks.get(nN.CONFIG_PARAMS.THREADS));else{if(typeof t.service!="string"){let o=`Run service argument expected a string but received: ${t.service}`;Ir.error(o),console.log(o),process.exit(1)}let i=t.service.split(",");for(let o of i){let c=o.toLowerCase();if(ot.PROCESS_DESCRIPTORS_VALIDATE[c]===void 0){Ir.error(`Run received unrecognized service command argument: ${c}`);continue}if(c.includes("clustering")&&!r){Ir.error(`${c} is not enabled in settings`);continue}c==="clustering"?await Ys.startClusteringProcesses():await Ys.startService(ot.PROCESS_DESCRIPTORS_VALIDATE[c]);let u=`${ot.PROCESS_DESCRIPTORS_VALIDATE[c]} successfully started.`;Ir.notify(u),console.log(u)}}Ks.get(ot.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await n_e(),s||Cx()}catch(t){console.error(t),Ir.error(t),process.exit(1)}}a(m_e,"main");function Cx(){Ir.suppressLogging(()=>{console.log(sN.magenta(""+Ai.readFileSync(_o.join(o_e,"utility/install/ascii_logo.txt")))),console.log(sN.magenta(`|------------- HarperDB ${t_e.version} successfully started ------------|`))}),Ir.notify(E_e)}a(Cx,"started");async function p_e(){try{Ys===void 0&&(Ys=ac()),Ys.enterPM2Mode(),await wx(),Pn.autoCastBoolean(Ks.get(ot.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Ys.startClusteringProcesses(),await Ys.startService(ot.PROCESS_DESCRIPTORS.HDB),Cx(),process.exit(0)}catch(e){console.error(e),Ir.error(e),process.exit(1)}}a(p_e,"launch");function S_e(){let e=_o.join(Ks.getHdbBasePath(),ot.LICENSE_KEY_DIR_NAME,ot.LICENSE_FILE_NAME),t=_o.join(e,ot.LICENSE_FILE_NAME),r=_o.join(e,ot.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Ix(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(Pn.isEmpty(s)||Pn.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),Ir.error(n)}}a(S_e,"writeLicenseFromVars");Dx.exports={launch:p_e,main:m_e,isHdbInstalled:Lx};async function Lx(){try{await Ai.stat(Pn.getPropsFilePath()),await Ai.stat(Ks.get(ot.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Pn.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Ir.error(`Error checking for HDB install - ${e}`),e}return!0}a(Lx,"isHdbInstalled")});var Mx=p((pNe,Px)=>{var T_e=fm(),g_e=M();Px.exports=R_e;async function R_e(){try{await T_e()}catch(e){console.error("There was an error during the install."),console.error(e),g_e.error(e),process.exit(1)}}a(R_e,"install")});var Bx=p((TNe,vx)=>{"use strict";var A_e=OE(),O_e=M(),Ux="Registration failed.";async function N_e(){let e;try{e=await A_e.register()}catch(t){return O_e.error(`Registration error ${t}`),Ux}return e||Ux}a(N_e,"register");vx.exports={register:N_e}});var Fx=p((RNe,Gx)=>{"use strict";var b_e=M(),y_e=A(),I_e=require("util"),w_e=require("child_process"),Hx=I_e.promisify(w_e.exec),C_e=jn(),L_=ac(),qx="Stopping HarperDB.";Gx.exports=L_e;async function L_e(){if(console.log(qx),b_e.notify(qx),await L_.isServiceRegistered(y_e.HDB_PROC_DESCRIPTOR)){L_.enterPM2Mode();let r=await L_.getUniqueServicesList();for(let s in r)await L_.stop(s)}await L_.kill();let t=await C_e.getHDBProcessInfo();t.clustering.forEach(r=>{Hx(`kill ${r.pid}`)}),t.core.forEach(r=>{Hx(`kill ${r.pid}`)})}a(L_e,"stop")});var Yx=p((ONe,Vx)=>{"use strict";var iN=require("fs-extra"),oN=require("path"),D_e=require("yaml"),D_=nt(),P_=A(),xx=ke(),kx=M(),P_e=dr(),M_e=TE(),U_e=pE(),v_e=jn(),$x=Q();$x.initSync();var Mn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},wr={LEAF:"leaf server",HUB:"hub server"},mm;Vx.exports=B_e;async function B_e(){mm=$x.get(P_.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:Mn.STOPPED}},t;try{t=Number.parseInt(await iN.readFile(oN.join(mm,P_.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===P_.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await v_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=Mn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await H_e(r),e.clustering[wr.HUB].status===Mn.RUNNING&&e.clustering[wr.LEAF].status===Mn.RUNNING){let s=[],n=await M_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 U_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 D_.closeConnection()}console.log(D_e.stringify(e)),process.exit()}a(B_e,"status");async function H_e(e){let t={[wr.HUB]:{},[wr.LEAF]:{}};if(e.clustering.length===0)return t[wr.HUB].status=Mn.STOPPED,t[wr.LEAF].status=Mn.STOPPED,t;let{port:r}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await P_e.getClusterUser();try{(await D_.createConnection(r,s,n,!1)).close(),t[wr.HUB].status=Mn.RUNNING}catch{t[wr.HUB].status=Mn.ERRORED}let{port:i}=D_.getServerConfig(P_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await D_.createConnection(i,s,n,!1)).close(),t[wr.LEAF].status=Mn.RUNNING}catch{t[wr.LEAF].status=Mn.ERRORED}try{t[wr.HUB].pid=Number.parseInt(await iN.readFile(oN.join(mm,"clustering",xx.PID_FILES.HUB),"utf8"))}catch(o){kx.error(o),t[wr.HUB].pid=void 0}try{t[wr.LEAF].pid=Number.parseInt(await iN.readFile(oN.join(mm,"clustering",xx.PID_FILES.LEAF),"utf8"))}catch(o){kx.error(o),t[wr.LEAF].pid=void 0}return t}a(H_e,"getHubLeafStatus")});var Zx=p(()=>{"use strict";var q_e=require("os"),Tm=require("https"),Kx=require("http"),Oi=require("fs-extra"),G_e=require("yaml"),F_e=require("human-readable-ids").hri,{pipeline:Wx}=require("stream/promises"),{createWriteStream:gm,ensureDir:Rm}=require("fs-extra"),{join:Qs}=require("path"),uN=require("lodash"),x_e=Q(),k_e=jn(),jx=M(),pm=rt(),{restart:$_e}=Qo(),Xx=G(),Qx=nt(),V_e=ns(),{isHdbInstalled:Y_e,main:K_e}=Gc(),W_e=fm(),lN=A(),{SYSTEM_TABLE_NAMES:zx,SYSTEM_SCHEMA_NAME:Q_e,CONFIG_PARAMS:M_,OPERATIONS_ENUM:Zt}=lN,z_e=9925,J_e="info",j_e=1e4,X_e="clone-node-config.yaml",_N=[zx.ROLE_TABLE_NAME,zx.USER_TABLE_NAME],U_=process.env.HDB_LEADER_USERNAME,v_=process.env.HDB_LEADER_PASSWORD,B_=process.env.HDB_LEADER_URL,aN=process.env.HDB_LEADER_CLUSTERING_HOST,Z_e=process.env.HDB_LEADER_CLUSTERING_PORT,ede=process.env.HDB_FULLY_CONNECTED,cN,Le,at,ct,dN,Fc,jr,Ws;async function tde(){if(await Y_e())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+B_),Le?.rootPath)Fc=Le.rootPath;else try{Fc=process.env.ROOTPATH?process.env.ROOTPATH:Qs(q_e.homedir(),lN.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=Qs(Fc,X_e),Le=G_e.parseDocument(Oi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}dN=Le?.clustering?.nodeName??F_e.random(),at=await H_({operation:Zt.GET_CONFIGURATION}),at=await JSON.parse(at.body),process.env.HDB_FETCH==="true"?(await ide(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await nde(),await sde(),await rde(),await ode(),await ade(),console.info("Successfully cloned node: "+B_)}a(tde,"cloneNode");async function rde(){console.info("Cloning configuration"),cN=at?.clustering?.enabled;let e={[M_.ROOTPATH]:Fc};if(cN&&Le?.clustering?.enabled!==!1){if(aN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[M_.CLUSTERING_ENABLED]=!0;let s=at?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(Z_e)||at?.clustering?.hubServer?.cluster?.network?.port;e[M_.CLUSTERING_USER]=at?.clustering?.user;let i=x_e.get(M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:aN,port:n}):i=[{host:aN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[M_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=Le?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in at)at[s]?.package&&!t[s]&&await pm.addConfig(s,at[s]);Le?.databases&&await pm.addConfig("databases",at?.schemas);let r;Le&&(r=pm.flattenConfig(Le));for(let s in r){let n=lN.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=dN),jx.info("Cloning config:",e),uN.isEmpty(e)||pm.updateConfigValue(void 0,void 0,e,!1,!0)}a(rde,"cloneConfig");async function sde(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Fc,!U_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=U_,!v_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=v_,process.env.OPERATIONSAPI_NETWORK_PORT=Le?.operationsApi?.network?.port??z_e,process.env.CLUSTERING_NODENAME=dN,process.env.CLUSTERING_LOGLEVEL=Le?.clustering?.logLevel??J_e,await W_e()}a(sde,"installHDB");async function nde(){console.info("Cloning system database");let e=ha("system");await Rm(e);let t=Qs(e,"system.mdb"),r=gm(t,{overwrite:!0}),s=await Jx({operation:Zt.GET_BACKUP,database:"system",tables:_N},r);if(await Oi.utimes(t,Date.now(),new Date(s.date)),ct=await H_({operation:Zt.DESCRIBE_ALL}),ct=await JSON.parse(ct.body),jr=Le?.databaseConfig?.excludeDatabases,jr=jr?jr.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},at.schemas)for(let n in at.schemas)Object.keys(at.schemas[n]).includes("tables")&&(jr[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Ws=Le?.databaseConfig?.excludeTables,Ws=Ws?Ws.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in ct){if(jr[n]){ct[n]="excluded";continue}if(uN.isEmpty(ct[n]))continue;let i=[],o=!1;for(let f in ct[n])Ws[n+f]?(o=!0,ct[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:Zt.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:Zt.GET_BACKUP,database:n});let u=ha(n);await Rm(u);let l=Qs(u,n+".mdb"),_=gm(l,{overwrite:!0}),d=await Jx(c,_);await Oi.utimes(l,Date.now(),new Date(d.date))}}a(nde,"cloneTables");async function ide(){console.info("Cloning system database using fetch");let e=await Sm({operation:Zt.GET_BACKUP,database:"system",tables:_N},!0),t=ha("system");await Rm(t);let r=Qs(t,"system.mdb");if(await Wx(e.body,gm(r,{overwrite:!0})),await Oi.utimes(r,Date.now(),new Date(e.headers.get("date"))),ct=await Sm({operation:Zt.DESCRIBE_ALL}),ct=await ct.json(),jr=Le?.databaseConfig?.excludeDatabases,jr=jr?jr.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},at.schemas)for(let s in at.schemas)Object.keys(at.schemas[s]).includes("tables")&&(jr[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Ws=Le?.databaseConfig?.excludeTables,Ws=Ws?Ws.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in ct){if(jr[s]){ct[s]="excluded";continue}if(uN.isEmpty(ct[s]))continue;let n=[],i=!1;for(let d in ct[s])Ws[s+d]?(i=!0,ct[s][d]="excluded"):n.push(d);if(n.length===0)return;let o;i?(console.info(`Cloning database: ${s} tables: ${n}`),o=await Sm({operation:Zt.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await Sm({operation:Zt.GET_BACKUP,database:s},!0));let c=ha(s);await Rm(c);let u=new Date(o.headers.get("date")),l=Qs(c,`${u.getTime()}-${s}.mdb`);await Wx(o.body,gm(l,{overwrite:!0}));let _=Qs(c,s+".mdb");await Oi.rename(l,_),await Oi.utimes(_,Date.now(),u)}}a(ide,"cloneTablesFetch");async function Sm(e,t=!1){let r=Le?.httpsRejectUnauthorized??!1,s=new Tm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(B_,{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(Sm,"leaderHttpReqFetch");function ha(e){return Le?.databases&&Le?.databases[e]?.path||Le?.storage&&Le?.storage?.path||Qs(Fc,"database")}a(ha,"getDbFileDir");async function ode(){let{deployComponent:e}=JE(),t=await H_({operation:Zt.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(Le?.componentConfig?.exclude){for(let o of Le.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=Le?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await H_({operation:Zt.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(ode,"cloneComponents");async function ade(){if(!cN)return;let e=await k_e.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await K_e():(console.info(await $_e({operation:Zt.RESTART})),await Xx.async_set_timeout(j_e)),console.info("Clustering cloned tables");let t=Le?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Le?.clusteringConfig?.publishToLeaderNode!==!1;await V_e.setSchemaDataToGlobalAsync();let s=Ol(),n=await H_({operation:Zt.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Oi.stat(Qs(ha("system"),"system.mdb"));for(let c of _N)i.push({schema:Q_e,table:c,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let c in ct){if(ct[c]==="excluded")continue;let u=await Oi.stat(Qs(ha(c),c+".mdb"));for(let l in ct[c])ct[c][l]!=="excluded"&&i.push({schema:c,table:l,subscribe:t,publish:r,start_time:u.mtime.toISOString()})}if(await Qx.createTableStreams(i),jx.info("Sending add_node request to node:",at?.clustering?.nodeName,"with subscriptions:",i),ede==="true"&&n.connections.length>0){let c=EE(),u=[{node_name:at?.clustering?.nodeName,subscriptions:i}],l=!0;for(let d of n.connections){let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(jr[E.schema]||Ws[E.schema+E.table])continue;l=!1;let h=await Oi.stat(Qs(ha(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}u.push(f)}if(l)return;let _=await c({operation:Zt.CONFIGURE_CLUSTER,connections:u});console.info(JSON.stringify(_))}else await s({operation:Zt.ADD_NODE,node_name:at?.clustering?.nodeName,subscriptions:i},!0);await Qx.closeConnection()}a(ade,"clusterTables");async function H_(e){let t=new Tm.Agent({rejectUnauthorized:Le?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},n=new URL(B_),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 Xx.httpRequest(i,e)}a(H_,"leaderHttpReq");async function Jx(e,t){let r=new Tm.Agent({rejectUnauthorized:Le?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(U_+":"+v_).toString("base64"),"Content-Type":"application/json"},i=new URL(B_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,Kx=Tm),i.port&&(o.port=i.port),new Promise((c,u)=>{let l=Kx.request(o,_=>{_.statusCode!==200&&u("Request to leader node failed with code: "+_.statusCode),_.pipe(t),_.on("end",()=>{t.close(),c(_.headers)})});l.on("error",_=>{u(_)}),l.write(JSON.stringify(e)),l.end()})}a(Jx,"leaderHttpStream");tde().then().catch(e=>{console.log(e)})});var xc=M(),cde=mo(),fN=A(),Am=require("fs"),ek=require("path"),wNe=require("os"),{PACKAGE_ROOT:ude}=A(),lde=jN(),CNe=(Kh(),te(NO)),{SERVICE_ACTIONS_ENUM:zs}=fN;_de();function _de(){let e=lde();if(e)if(e.error){console.error(e.error),xc.error(e.error);return}else e.warn&&(console.warn(e.warn),xc.warn(e.warn));let t;Am.readdir(ek.join(ude,"bin"),r=>{if(r)return xc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case zs.DEV:process.env.DEV_MODE=!0;case zs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Am.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Am.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Am.existsSync(ek.join(n,fN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),Gc().main();break;case zs.START:s=Gc().launch();break;case zs.INSTALL:Mx()().then(()=>Gc().main(!0)).catch(f=>{console.error(f)});break;case zs.REGISTER:Bx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case zs.STOP:Fx()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case zs.RESTART:Qo().restart({}).then().catch(f=>{xc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case zs.VERSION:cde.printVersion();break;case zs.UPGRADE:xc.setLogLevel(fN.LOG_LEVELS.INFO),eN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{xc.error(`Got an error during upgrade ${f}`)});break;case zs.STATUS:Yx()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?Zx():Gc().main();break;default:console.warn(`The "${t}" command is not understood.`);case zs.HELP:console.log(`
105
+ Reindexing upgrade started for transaction logs`),pi.notify("Reindexing upgrade started for transaction logs"),await IF(UO,!0,e)),pi.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(g_?", but errors occurred":"")}a(Kce,"reindexUpgrade");async function IF(e,t,r){let s=await wn.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 wn.readdir(c),_=u.length;for(let l=0;l<_;l++){let d=u[l];if(d!==".DS_Store"&&wn.statSync(Si.join(c,d)).isDirectory())try{await Wce(o,d,t),er.info(`Reindexing started for ${o}.${d}`),pi.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await jce(o,d,c,t,r),er.info(`Reindexing completed for ${o}.${d}`),pi.notify(`Reindexing completed for ${o}.${d}`)}catch(f){g_=!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),er.error(f),console.error(f)}}}if(!g_)try{await wn.rm(om,{recursive:!0})}catch{}}a(IF,"processTables");async function Wce(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Si.join(om,n);await wn.ensureDir(om),await wn.writeFile(i,""),er=Vce({level:"debug",formatters:{bindings(){}}},i)}a(Wce,"initPinoLogger");var Qce=20;async function jce(e,t,r,s,n){let i;try{i=await zr.openEnvironment(r,t,s)}catch(R){if(R.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`),er.error(R);return}throw R}let o=Xce(i.dbis),c=zr.openDBI(i,o),u=Object.keys(i.dbis),_=zr.statDBI(i,o);er.info(`Old environment stats: ${JSON.stringify(_)}`);let l=new $ce.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});l.start(_.entryCount,0,{});let d=await zr.createEnvironment(r,t,!1);zr.createDBI(d,o,!1,!0);let f=[];try{for(let R of c.getRange({start:!1}))R.value=Object.assign({},R.value),f.push(R),s||e==="system"&&(t==="hdb_schema"&&(R.key=R.key.toString(),R.value.name=R.value.name.toString()),t==="hdb_table"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.name=R.value.name.toString()),t==="hdb_attribute"&&(R.key=R.key.toString(),R.value.schema=R.value.schema.toString(),R.value.table=R.value.table.toString(),R.value.attribute=R.value.attribute.toString())),f.length>Qce&&await E();await E()}catch(R){throw g_=!0,er.error(R),R}async function E(){let R,b=f.map(({value:$})=>$);s?R=await Promise.all(b.map($=>zce(d,$))):R=await Gce(d,o,u.filter($=>$!=="__blob__"),b,!1);for(let $=0,F=f.length;$<F;$++){let{key:w,value:W}=f[$];er.info(`Record hash value: ${w} hash: ${o}`);let B;s?B=R[$]:B=R.written_hashes.indexOf(w)>-1,T_(B,!0),Jce(d,o,W[o],s),er.info(`Insert success, written hashes: ${R.written_hashes}`),l.increment()}f=[],l.value/l.total*100%10===0&&pi.notify(`${e}.${t} ${l.value}/${l.total} records inserted`),er.info(`${l.value}/${l.total} records inserted`)}a(E,"finishOutstanding"),l.stop();let h=zr.statDBI(i,o),p=zr.statDBI(d,o);if(er.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),T_.deepStrictEqual(h.entryCount,p.entryCount),await zr.closeEnvironment(i),await zr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let R=Si.join(r,t),b=Si.join(R,"data.mdb"),V=Si.join(R,"lock.mdb");await wn.unlink(b),await wn.unlink(V),await wn.rmdir(R),er.info(`Deleted old environment files from schema folder: ${b}, ${V}`)}let m=await zr.openEnvironment(r,t),g=zr.statDBI(m,o);er.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(g)}`),T_.deepStrictEqual(g.entryCount,p.entryCount),await zr.closeEnvironment(m),delete global.lmdb_map[`${e}.${t}`]}a(jce,"processTable");async function zce(e,t){zr.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),kce.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(zce,"insertTransaction");function Jce(e,t,r,s){let i=e.dbis[t].get(r);T_.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&&!xce.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let _=0,l=u.length;_<l;_++){let d=u[_];wF(e,c,d,r)}else wF(e,c,u,r)}a(Jce,"validateIndices");function wF(e,t,r,s){try{let n=!1,i=Fce.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||er.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),T_.deepStrictEqual(n,!0)}catch(n){g_=!0,er.error(n),console.error(n)}}a(wF,"validateIndex");function Xce(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(Xce,"getHashDBI")});var qO=T((qOe,PF)=>{"use strict";var Zce=require("mkcert"),am=require("path"),vO=require("fs-extra"),BO=U(),eue=Q(),HO=A(),Bc=Vm(),tue=Eo(),rue=tt();PF.exports={generateKeys:sue,updateConfigCert:DF};async function sue(){let e=eue.getHdbBasePath(),t=am.join(e,HO.LICENSE_KEY_DIR_NAME),r=await Zce.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:Bc.CERTIFICATE_VALUES.key,caCert:Bc.CERTIFICATE_VALUES.cert}),s=am.join(t,Bc.CERTIFICATE_PEM_NAME),n=am.join(t,Bc.PRIVATEKEY_PEM_NAME),i=am.join(t,Bc.CA_PEM_NAME);try{await vO.writeFile(s,r.cert)}catch(o){throw BO.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await vO.writeFile(n,r.key)}catch(o){throw BO.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await vO.writeFile(i,Bc.CERTIFICATE_VALUES.cert)}catch(o){throw BO.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}DF(s,n,i)}a(sue,"generateKeys");function DF(e,t,r){let s=tue(Object.keys(HO.CONFIG_PARAM_MAP),!0),n=HO.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()]),rue.updateConfigValue(void 0,void 0,i,!1,!0)}a(DF,"updateConfigCert")});var HF=T((xOe,BF)=>{"use strict";var cm=require("path"),oo=require("fs-extra"),nue=PO(),ua=U(),MF=tt(),GO=Q(),Ks=A(),um=G(),iue=require("properties-reader"),oue=Ms(),aue=tE(),cue=fr(),FOe=require("util"),uue=cue.searchByValue,lue=Er(),_ue=OE(),due=xe(),fue=LF(),UF=qO(),Eue=sm(),O_=new nue("4.0.0"),vF=[],R_,A_;async function hue(){try{if(await Eue.upgradeCertsPrompt()){if(console.log("Generating new certificates."),R_){let t=um.changeExtension(R_,".bak");await oo.move(R_,t)}if(A_){let t=um.changeExtension(A_,".bak");await oo.move(A_,t)}await UF.generateKeys()}else console.log("Using existing certificates."),UF.updateConfigCert(R_,A_,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(hue,"generateNewKeys");async function mue(){console.log("Updating HarperDB nodes."),ua.info("Updating HarperDB nodes.");let e=[];try{let t=new oue(Ks.SYSTEM_SCHEMA_NAME,Ks.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await uue(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!due.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:Ks.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(um.isEmptyOrZeroLength(s))return;let n=new aue(Ks.SYSTEM_SCHEMA_NAME,Ks.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await lue.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{_ue.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(mue,"updateNodes");async function pue(){let e=GO.get(Ks.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(cm.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=cm.dirname(e),s=GO.get(Ks.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=cm.join(s,"backup","4_0_0_upgrade_settings.bak"),i=cm.join(s,Ks.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=MF.initOldConfig(e);R_=d[Ks.CONFIG_PARAMS.TLS_CERTIFICATE.toLowerCase()],A_=d[Ks.CONFIG_PARAMS.TLS_PRIVATEKEY.toLowerCase()],MF.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=um.getPropsFilePath();oo.accessSync(o,oo.constants.F_OK|oo.constants.R_OK);let u=iue(o).get(Ks.HDB_SETTINGS_NAMES.INSTALL_USER),_=`settings_path = ${i}
106
+ 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{GO.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(pue,"updateSettingsFile_4_0_0");O_.async_functions.push(pue);O_.async_functions.push(hue);O_.async_functions.push(fue);O_.async_functions.push(mue);vF.push(O_);BF.exports=vF});var FO=T(($Oe,xF)=>{"use strict";var la=G(),Sue=A(),qF=U(),{DATA_VERSION:Tue,UPGRADE_VERSION:gue}=Sue.UPGRADE_JSON_FIELD_NAMES_ENUM,GF=bF(),lm=HF(),_a=new Map;GF&&GF.forEach(e=>{_a.set(e.version,e)});lm&&lm.forEach(e=>{_a.set(e.version,e)});lm&&lm.forEach(e=>{_a.set(e.version,e)});function Rue(){return[..._a.keys()].sort(la.compareVersions)}a(Rue,"getSortedVersions");function FF(e){let t=e[Tue],r=e[gue];return la.isEmptyOrZeroLength(t)||la.isEmptyOrZeroLength(r)?(qF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),qF.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(FF,"getVersionsForUpgrade");function Aue(e){return FF(e).length>0}a(Aue,"hasUpgradesRequired");function Oue(e){return la.isEmptyOrZeroLength(e)?null:_a.has(e)?_a.get(e):null}a(Oue,"getDirectiveByVersion");xF.exports={getSortedVersions:Rue,getDirectiveByVersion:Oue,getVersionsForUpgrade:FF,hasUpgradesRequired:Aue}});var _m=T((YOe,KF)=>{"use strict";var Nue=require("util"),xO=require("chalk"),bue=require("os"),$F=Er(),yue=fr(),Jr=A(),VF=fF(),$O=oT(),{UpgradeObject:kF}=mF(),{forceDowngradePrompt:Iue}=sm(),wue=po(),N_=U(),Hc=G(),VO=os(),Cue=(de(),te(Le)),Lue=FO(),Due=Nue.promisify(VO.setSchemaDataToGlobal),Pue=yue.searchByValue,Mue="info_id",Uue="2.9.9",vue="3.0.0";async function Bue(e){let t=new VF.HdbInfoInsertObject(1,e,e),r=new $O.InsertObject(Jr.OPERATIONS_ENUM.INSERT,Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return VO.setSchemaDataToGlobal(),$F.insert(r)}a(Bue,"insertHdbInstallInfo");async function kO(e){let t,r=await YF(),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 VF.HdbInfoInsertObject(i,e,e);let o=new $O.InsertObject(Jr.OPERATIONS_ENUM.INSERT,Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Due(),$F.insert(o)}a(kO,"insertHdbUpgradeInfo");async function YF(){let e=new $O.NoSQLSeachObject(Jr.SYSTEM_SCHEMA_NAME,Jr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Mue,Jr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Pue(e))}catch(r){N_.info(r)}return t}a(YF,"getAllHdbInfoRecords");async function Hue(){let e=await YF();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(Hue,"getLatestHdbInfoRecord");async function que(){N_.info("Checking if HDB software has been updated");try{let e=wue.version(),t=await Hue(),r;if(Hc.isEmpty(t))r=Uue;else if(r=t.data_version_num,Hc.compareVersions(r.toString(),e.toString())>0){if(!Hc.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(xO.yellow(`This instance's data was last run on version ${r}`)),console.error(xO.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.${bue.EOL}${Jr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");Hc.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(xO.yellow(`This instance's data was last run on version ${r}`)),await Iue(new kF(r,e))?await kO(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(VO.setSchemaDataToGlobal(),Gue(r),e.toString()===r.toString())return;let s=new kF(r,e);if(Lue.hasUpgradesRequired(s))return s;Hc.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await kO(s.upgrade_version),N_.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw N_.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),N_.fatal(e),e}}a(que,"getVersionUpdateInfo");function Gue(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 ${Jr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Cue.databases.system))throw console.log(t),new Error(t);if(!Hc.isEmpty(e)&&e<vue)throw console.log(t),new Error(t)}a(Gue,"checkIfInstallIsSupported");KF.exports={insertHdbInstallInfo:Bue,insertHdbUpgradeInfo:kO,getVersionUpdateInfo:que}});var JF=T((WOe,zF)=>{"use strict";var YO=require("joi"),{boolean:Fue,string:WF,number:xue}=YO.types(),QF=require("fs-extra"),b_=A(),jF=require("path"),kue=Ve();zF.exports=$ue;function $ue(e){let t=WF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=YO.object({[b_.INSTALL_PROMPTS.ROOTPATH]:YO.custom(Vue),[b_.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:xue.min(0),[b_.INSTALL_PROMPTS.TC_AGREEMENT]:WF.valid("yes","YES","Yes"),[b_.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[b_.INSTALL_PROMPTS.CLUSTERING_ENABLED]:Fue});return kue.validateBySchema(e,r)}a($ue,"installValidator");function Vue(e,t){if(QF.existsSync(jF.join(e,"system/hdb_user/data.mdb"))||QF.existsSync(jF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(Vue,"validateRootAvailable")});var ZF=T((jOe,XF)=>{"use strict";var{mkdirpSync:Yue}=require("fs-extra"),Cn=require("path"),qc=A(),WO=U(),Kue=is(),KO=kn(),Wue=Be();XF.exports=Que;async function Que(e){WO.trace("Mounting HarperDB"),Ws(e),Ws(Cn.join(e,"backup")),Ws(Cn.join(e,"trash")),Ws(Cn.join(e,"keys")),Ws(Cn.join(e,"keys",qc.LICENSE_FILE_NAME)),Ws(Cn.join(e,"log")),Ws(Cn.join(e,"doc")),Ws(Cn.join(e,"database")),Ws(Cn.join(e,qc.TRANSACTIONS_DIR_NAME)),Ws(Cn.join(e,"clustering","leaf")),Ws(Cn.join(e,"components")),await jue()}a(Que,"mountHdb");async function jue(){let e=Hu(),t=Object.keys(KO);for(let r=0;r<t.length;r++){let s=t[r],n=KO[s].hash_attribute;try{Wue.initSystemSchemaPaths(qc.SYSTEM_SCHEMA_NAME,s);let i=new e(qc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=KO[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await Kue.createTable(s,i)}catch(i){throw WO.error(`issue creating environment for ${qc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(jue,"createLMDBTables");function Ws(e){Yue(e,{mode:qc.HDB_FILE_PERMISSIONS}),WO.info(`Directory ${e} created`)}a(Ws,"makeDirectory")});var fm=T((JOe,lx)=>{"use strict";var jO=require("os"),sx=require("inquirer"),Rs=require("fs-extra"),zue=require("properties-reader"),da=require("chalk"),Pn=require("path"),Jue=require("human-readable-ids").hri,Xue=require("ora"),Zue=require("yaml"),mt=U(),uo=Q(),y_=G(),dm=Eo(),nx=_m(),ix=po(),ee=A(),ele=JF(),tle=ZF(),zO=tt(),rle=hr(),sle=Jf(),nle=yO(),ile=os(),ole=require("util").promisify,ale=ole(ile.setSchemaDataToGlobal),cle=qO(),Gc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),tr=a(e=>da.magenta.bold(e),"HDB_PROMPT_MSG"),ule="https://harperdb.io/legal/end-user-license-agreement",lo=jO.EOL,ao="",lle="yes",ex="Starting HarperDB install...",tx="HarperDB installation was successful.",rx="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",_le="An out of date version of HarperDB is already installed.",QO="It appears that HarperDB is already installed. Exiting install...",dle="Aborting install",fle=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])$/),Ele=new RegExp(/^[^\s.,*>]+$/),hle=jO.homedir(),mle=Pn.join(hle,ee.HDB_ROOT_DIR_NAME),ple=9925,Sle="HDB_ADMIN",Tle="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:"},Fc=dm([ee.INSTALL_PROMPTS.HDB_CONFIG]),Dn,ox=!1;lx.exports=ax;ax.createSuperUser=ux;async function ax(){console.log(tr(lo+ex+lo)),mt.notify(ex);let e;Fc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&(e=gle());let t=Ale();Object.assign(t,e);let r=ele(t);if(r)throw r.message;await Ole(),await Nle(t);let s=await Rle(t);Dn=s[ee.INSTALL_PROMPTS.ROOTPATH],Fc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Pn.dirname(Fc[ee.INSTALL_PROMPTS.HDB_CONFIG])===Dn&&(ox=!0),!Fc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&await Rs.pathExists(Pn.join(Dn,ee.HDB_CONFIG_FILE))&&(console.error(QO),process.exit());let n=Xue({prefixText:tr("Installing"),color:"magenta",spinner:"simpleDots"});if(n.start(),y_.isEmpty(Dn))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");uo.setHdbBasePath(Dn),await tle(Dn),await ble(),await yle(s),mt.initLogSettings(!0),await ux(s),await wle(s),await cle.generateKeys(),await Cle(),nle(),n.stop(),console.log(tr(lo+tx+lo)),mt.notify(tx)}a(ax,"install");function gle(){let e=Zue.parseDocument(Rs.readFileSync(Fc[ee.INSTALL_PROMPTS.HDB_CONFIG],"utf8"),{simpleKeys:!0}),t=zO.flattenConfig(e.toJSON());return t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]&&(t.ROOTPATH=t[ee.CONFIG_PARAMS.ROOTPATH.toLowerCase()]),t}a(gle,"getConfigFromFile");async function Rle(e){mt.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:Gc,when:co(e[ee.INSTALL_PROMPTS.ROOTPATH],wr.DESTINATION),name:ee.INSTALL_PROMPTS.ROOTPATH,prefix:ao,default:mle,validate:async n=>Ln(n)?Ln(n):await Rs.pathExists(Pn.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:tr(wr.DESTINATION)},{type:"input",transformer:Gc,when:co(e[ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],wr.HDB_PORT),name:ee.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:ao,default:ple,validate:n=>fle.test(n)?!0:"Invalid port.",message:tr(wr.HDB_PORT)},{type:"input",transformer:Gc,when:co(e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],wr.HDB_USERNAME),name:ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:ao,default:Sle,validate:n=>Ln(n)?Ln(n):(t=n,!0),message:tr(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=>Ln(n)?Ln(n):!0,message:tr(wr.HDB_PASS)}];if(y_.autoCastBoolean(e[ee.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:Gc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_NODENAME],wr.NODE_NAME),name:ee.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:ao,default:Jue.random(),validate:i=>Ele.test(i)?!0:"Invalid node name, must not contain ., * or >",message:tr(wr.NODE_NAME)},{type:"input",transformer:Gc,when:co(e[ee.INSTALL_PROMPTS.CLUSTERING_USER],wr.CLUSTER_USERNAME),name:ee.INSTALL_PROMPTS.CLUSTERING_USER,prefix:ao,default:Tle,validate:i=>Ln(i)?Ln(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:tr(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=>Ln(i)?Ln(i):!0,message:tr(wr.CLUSTER_PASS)}];r.push(...n)}let s=await sx.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(Rle,"installPrompts");function co(e,t){return e!==void 0?(t.includes("password")?(console.log(`${tr(t)} ${da.gray("[hidden]")}`),mt.trace(`${tr(t)} [hidden]`)):(console.log(`${tr(t)} ${e}`),mt.trace(`${tr(t)} ${e}`)),!1):!0}a(co,"displayCmdEnvVar");function Ln(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(Ln,"checkForEmptyValue");function Ale(){let e=Object.keys(ee.INSTALL_PROMPTS),t=dm(e),r=dm(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(Ale,"checkForPromptOverride");async function Ole(){mt.trace("Checking for existing install.");let e=y_.getPropsFilePath(),t=await Rs.pathExists(e),r;if(t){mt.trace(`Install found an existing boot prop file at:${e}`);let s=zue(e),n=zO.getConfigValue(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(ee.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Rs.pathExists(n)}if(!t&&y_.noBootFile()&&(r=!0),r){if(mt.trace(`Install found existing HDB config at:${e}`),await nx.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${ix.version()}. Exiting install...`;console.log(lo+da.magenta.bold(_le)),console.log(da.magenta.bold(n)),mt.error(n)}else console.log(lo+da.magenta.bold(QO)),mt.error(QO);process.exit(0)}}a(Ole,"checkForExistingInstall");async function Nle(e){mt.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${ule}${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:Gc,when:co(e[ee.INSTALL_PROMPTS.TC_AGREEMENT],t),name:ee.INSTALL_PROMPTS.TC_AGREEMENT,message:tr(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:da.yellow("Please enter 'yes' or 'no'")},s=await sx.prompt([r]);s[ee.INSTALL_PROMPTS.TC_AGREEMENT]&&s[ee.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==lle&&(console.log(da.yellow(rx)),mt.error(rx),process.exit(0))}a(Nle,"termsAgreement");async function ble(){let e=Pn.join(Dn,ee.HDB_CONFIG_FILE),t;try{t=jO.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}
107
+ install_user = ${t}`,s=y_.getHomeDir(),n=Pn.join(s,ee.HDB_HOME_DIR_NAME),i=Pn.join(n,ee.LICENSE_KEY_DIR_NAME);try{Rs.mkdirpSync(n,{mode:ee.HDB_FILE_PERMISSIONS}),Rs.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=Pn.join(n,ee.BOOT_PROPS_FILE_NAME);try{await Rs.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(ble,"createBootPropertiesFile");async function yle(e){mt.trace("Creating HarperDB config file");let t=dm(Object.keys(ee.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{zO.createConfigFile(t),uo.initSync()}catch(r){Ile(r)}}a(yle,"createConfigFile");function Ile(e){mt.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(dle);let t=Pn.resolve(uo.get(uo.BOOT_PROPS_FILE_PATH),"../");t&&Rs.removeSync(t),Dn&&(ox?Rs.readdirSync(Dn,{withFileTypes:!0}).forEach(s=>{let n=Pn.join(s.path,s.name);n!==Fc[ee.INSTALL_PROMPTS.HDB_CONFIG]&&Rs.removeSync(n)}):Rs.removeSync(Dn)),process.exit(1)}a(Ile,"rollbackInstall");async function cx(e,t){mt.trace("Creating admin user"),await ale();let r;try{r=await sle.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 rle.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(cx,"createAdminUser");async function ux(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 cx(t,r),delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[ee.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(ux,"createSuperUser");async function wle(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 cx({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[ee.INSTALL_PROMPTS.CLUSTERING_USER],delete e[ee.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(wle,"createClusterUser");async function Cle(){let e=ix.version();if(e)await nx.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Cle,"insertHdbVersionInfo")});var fx=T((ZOe,dx)=>{"use strict";var JO=G(),Xr=U(),_x=FO();dx.exports={processDirectives:Lle};async function Lle(e){console.log("Starting upgrade process...");let t=_x.getVersionsForUpgrade(e),r=Mle(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Xr.notify(c),console.log(c);let u=[],_=[];try{u=Dle(o.sync_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}try{_=await Ple(o.async_functions)}catch(l){throw Xr.error(`Error while running an upgrade script for ${o.version}`),l}s.push(...u,..._)}return s}a(Lle,"processDirectives");function Dle(e){if(JO.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Xr.info(`Running function ${r.name}`),!(r instanceof Function)){Xr.info("Variable being processed is not a function");continue}let s=r();Xr.info(s),t.push(s)}return t}a(Dle,"runSyncFunctions");async function Ple(e){if(JO.isEmptyOrZeroLength(e))return Xr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Xr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Xr.info(`Running function ${n.name}`),!(n instanceof Function)){Xr.info("Variable being processed is not a function");continue}let i=await n();Xr.info(i),t.push(i)}return t}a(Ple,"runAsyncFunctions");function Mle(e){if(JO.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=_x.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Mle,"getUpgradeDirectivesToInstall")});var eN=T((tNe,Tx)=>{"use strict";var Em=Q();Em.initSync();var px=require("chalk"),Ex=require("fs-extra"),gi=U(),Ti=A(),hx=po(),Ule=fx(),XO=G(),Sx=_m(),vle=sm(),mx=qm(),Ble=os(),Hle=require("util").promisify,qle=Hle(Ble.setSchemaDataToGlobal),ZO,{UPGRADE_VERSION:hm}=Ti.UPGRADE_JSON_FIELD_NAMES_ENUM;Tx.exports={upgrade:Gle};async function Gle(e){await qle(),ZO===void 0&&(ZO=cc()),Ex.existsSync(Em.get(Em.BOOT_PROPS_FILE_PATH))||(I_("The hdb_boot_properties file was not found. Please install HDB.",Ti.LOG_LEVELS.ERROR),process.exit(1)),Ex.existsSync(Em.get(Ti.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(I_("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 Sx.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),I_(`This version of HarperDB is ${hx.version()}`,Ti.LOG_LEVELS.INFO);let r=t[hm]?t[hm]:hx.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 Fle();let s,n=0;try{s=await vle.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 xle(t),I_(`HarperDB was successfully upgraded to version ${t[hm]}`,Ti.LOG_LEVELS.INFO)}a(Gle,"upgrade");async function Fle(){let e=!1,t=await mx.findPs(Ti.HDB_PROC_NAME);if(XO.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await mx.findPs("hdb_express");XO.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await ZO.list();XO.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(px.red(r)),gi.error(r),process.exit(1)}}a(Fle,"checkIfRunning");async function xle(e){try{await Ule.processDirectives(e)}catch(t){throw I_("There was an error during the data upgrade. Please check the logs.",Ti.LOG_LEVELS.ERROR),t}try{await Sx.insertHdbUpgradeInfo(e[hm])}catch(t){gi.error("Error updating the 'hdb_info' system table."),gi.error(t)}}a(xle,"runUpgrade");function I_(e,t=void 0){t||(t=gi.info),gi[t](e),console.log(px.magenta(e))}a(I_,"printToLogAndConsole")});var Nx=T((sNe,Ox)=>{"use strict";var{promises:rN,createReadStream:kle,createWriteStream:$le}=require("fs"),{createGzip:Vle}=require("zlib"),{promisify:Yle}=require("util"),{pipeline:Kle}=require("stream"),Wle=Yle(Kle),Qle=require("path"),Ea=Q();Ea.initSync();var fa=U(),{CONFIG_PARAMS:w_,ITC_EVENT_TYPES:jle}=A(),{onMessageFromWorkers:zle}=je(),Jle=6e4,Xle="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",Zle="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",tN,Rx;Ox.exports=Ax;zle(e=>{e.type===jle.RESTART&&(Ea.initSync(!0),clearInterval(Rx),Ea.get(w_.LOGGING_ROTATION_ENABLED)&&Ax())});async function Ax(){try{let e=fa.getLogFilePath(),t=Ea.get(w_.LOGGING_ROTATION_MAXSIZE),r=Ea.get(w_.LOGGING_ROTATION_INTERVAL);if(!t&&!r){fa.error(Xle);return}let s=Ea.get(w_.LOGGING_ROTATION_PATH);if(!s){fa.error(Zle);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}tN=Date.now()/6e4,fa.trace("Log rotate enabled, maxSize:",t,"interval:",r),Rx=setInterval(async()=>{if(n){let o;o=await rN.stat(e),o.size>=n&&await gx(e,s)}i&&Date.now()/6e4-tN>=i&&(await gx(e,s),tN=Date.now()/6e4)},Jle).unref()}catch(e){fa.error(e)}}a(Ax,"logRotator");async function gx(e,t){let r=Ea.get(w_.LOGGING_ROTATION_COMPRESS),s=Qle.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await Wle(kle(e),Vle(),$le(s)),await rN.unlink(e)):await rN.rename(e,s),fa.closeLogFile(),fa.notify(`hdb.log rotated, old log moved to ${s}`)}a(gx,"moveLogFile")});var kc=T((fNe,Dx)=>{"use strict";var As=Q();As.initSync();var iNe=Qo(),Nt=A(),Un=U(),Ri=require("fs-extra"),_o=require("path"),e_e=require("systeminformation"),t_e=yO(),r_e=fm(),sN=require("chalk"),s_e=mo(),Ai=G(),yx=tt(),Ix=Eo(),bx=LE(),n_e=eN(),i_e=Nx(),o_e=require("minimist"),{PACKAGE_ROOT:a_e}=A(),{startHTTPThreads:c_e,startSocketServer:oNe,mostIdleRouting:aNe,remoteAffinityRouting:cNe}=(Kh(),te(NO)),u_e=_m(),{isMainThread:l_e}=require("worker_threads"),uNe=kn(),lNe=vi(),_Ne=bS(),dNe=Hu(),nN=A(),Mn,xc,__e="Upgrade complete. Starting HarperDB.",d_e="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",f_e="HarperDB not found, starting install process.",E_e="There was an error during install, check install_log.log for more details. Exiting.",h_e="HarperDB successfully started.";function m_e(){let e=a(()=>{Ri.removeSync(_o.join(As.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.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(m_e,"addExitListeners");async function wx(e=!1,t=!1){if(console.log(sN.magenta("Starting HarperDB...")),await Lx()===!1){console.log(f_e);try{await r_e()}catch(o){console.error(E_e,o),Un.error(o),process.exit(1)}}let r,s=xc?.service==="clustering";xc?.service&&!s&&(console.error("Unrecognized service argument"),process.exit(1));try{let o=Number.parseInt(await Ri.readFile(_o.join(As.get(Nt.CONFIG_PARAMS.ROOTPATH),Nt.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{}Mn===void 0&&(Mn=cc()),s&&(r||(console.error("HarperDB must be running to start clustering."),process.exit()),As.get(Nt.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 Mn.startClusteringProcesses(!0),process.exit()),m_e(),await Ri.writeFile(_o.join(As.get(nN.CONFIG_PARAMS.ROOTPATH),nN.HDB_PID_FILE),`${process.pid}`),Un.info("HarperDB PID",process.pid);let n;try{let o=await u_e.getVersionUpdateInfo();o!==void 0&&(n=o[Nt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await n_e.upgrade(o),console.log(__e))}catch(o){n?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${n}. Exiting HarperDB.`),Un.error(o)):(console.error(d_e),Un.error(o)),process.exit(1)}if(!e){let o=Ix(Object.keys(Nt.CONFIG_PARAM_MAP),!0);!Ai.isEmpty(o)&&!Ai.isEmptyOrZeroLength(Object.keys(o))&&yx.updateConfigValue(void 0,void 0,o,!0,!0)}t_e(),T_e(),Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&l_e&&await bx.generateNatsConfig(t)}a(wx,"initialize");async function p_e(e=!1){try{xc=o_e(process.argv),xc.ROOTPATH&&yx.updateConfigObject("settings_path",_o.join(xc.ROOTPATH,Nt.HDB_CONFIG_FILE)),await wx(e,!0);let t=process.env.IS_SCRIPTED_SERVICE&&!xc.service;Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&(t||await Mn.startClusteringProcesses(),await Mn.startClusteringThreads()),await c_e(process.env.DEV_MODE?1:As.get(nN.CONFIG_PARAMS.THREADS)),As.get(Nt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await i_e(),t||Cx()}catch(t){console.error(t),Un.error(t),process.exit(1)}}a(p_e,"main");function Cx(){Un.suppressLogging(()=>{console.log(sN.magenta(""+Ri.readFileSync(_o.join(a_e,"utility/install/ascii_logo.txt")))),console.log(sN.magenta(`|------------- HarperDB ${s_e.version} successfully started ------------|`))}),Un.notify(h_e)}a(Cx,"started");async function S_e(){try{Mn===void 0&&(Mn=cc()),Mn.enterPM2Mode(),await wx(),Ai.autoCastBoolean(As.get(Nt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Mn.startClusteringProcesses(),await Mn.startService(Nt.PROCESS_DESCRIPTORS.HDB),Cx(),process.exit(0)}catch(e){console.error(e),Un.error(e),process.exit(1)}}a(S_e,"launch");function T_e(){let e=_o.join(As.getHdbBasePath(),Nt.LICENSE_KEY_DIR_NAME,Nt.LICENSE_FILE_NAME),t=_o.join(e,Nt.LICENSE_FILE_NAME),r=_o.join(e,Nt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=Ix(["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),Un.error(n)}}a(T_e,"writeLicenseFromVars");Dx.exports={launch:S_e,main:p_e,isHdbInstalled:Lx};async function Lx(){try{await Ri.stat(Ai.getPropsFilePath()),await Ri.stat(As.get(Nt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(Ai.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Un.error(`Error checking for HDB install - ${e}`),e}return!0}a(Lx,"isHdbInstalled")});var Mx=T((hNe,Px)=>{var g_e=fm(),R_e=U();Px.exports=A_e;async function A_e(){try{await g_e()}catch(e){console.error("There was an error during the install."),console.error(e),R_e.error(e),process.exit(1)}}a(A_e,"install")});var Bx=T((pNe,vx)=>{"use strict";var O_e=bE(),N_e=U(),Ux="Registration failed.";async function b_e(){let e;try{e=await O_e.register()}catch(t){return N_e.error(`Registration error ${t}`),Ux}return e||Ux}a(b_e,"register");vx.exports={register:b_e}});var Fx=T((TNe,Gx)=>{"use strict";var y_e=U(),I_e=A(),w_e=require("util"),C_e=require("child_process"),Hx=w_e.promisify(C_e.exec),L_e=Jn(),C_=cc(),qx="Stopping HarperDB.";Gx.exports=D_e;async function D_e(){if(console.log(qx),y_e.notify(qx),await C_.isServiceRegistered(I_e.HDB_PROC_DESCRIPTOR)){C_.enterPM2Mode();let r=await C_.getUniqueServicesList();for(let s in r)await C_.stop(s)}await C_.kill();let t=await L_e.getHDBProcessInfo();t.clustering.forEach(r=>{Hx(`kill ${r.pid}`)}),t.core.forEach(r=>{Hx(`kill ${r.pid}`)})}a(D_e,"stop")});var Yx=T((RNe,Vx)=>{"use strict";var iN=require("fs-extra"),oN=require("path"),P_e=require("yaml"),L_=st(),D_=A(),xx=xe(),kx=U(),M_e=hr(),U_e=RE(),v_e=TE(),B_e=Jn(),$x=Q();$x.initSync();var vn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Cr={LEAF:"leaf server",HUB:"hub server"},mm;Vx.exports=H_e;async function H_e(){mm=$x.get(D_.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:vn.STOPPED}},t;try{t=Number.parseInt(await iN.readFile(oN.join(mm,D_.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===D_.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await B_e.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=vn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await q_e(r),e.clustering[Cr.HUB].status===vn.RUNNING&&e.clustering[Cr.LEAF].status===vn.RUNNING){let s=[],n=await U_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 v_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 L_.closeConnection()}console.log(P_e.stringify(e)),process.exit()}a(H_e,"status");async function q_e(e){let t={[Cr.HUB]:{},[Cr.LEAF]:{}};if(e.clustering.length===0)return t[Cr.HUB].status=vn.STOPPED,t[Cr.LEAF].status=vn.STOPPED,t;let{port:r}=L_.getServerConfig(D_.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await M_e.getClusterUser();try{(await L_.createConnection(r,s,n,!1)).close(),t[Cr.HUB].status=vn.RUNNING}catch{t[Cr.HUB].status=vn.ERRORED}let{port:i}=L_.getServerConfig(D_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await L_.createConnection(i,s,n,!1)).close(),t[Cr.LEAF].status=vn.RUNNING}catch{t[Cr.LEAF].status=vn.ERRORED}try{t[Cr.HUB].pid=Number.parseInt(await iN.readFile(oN.join(mm,"clustering",xx.PID_FILES.HUB),"utf8"))}catch(o){kx.error(o),t[Cr.HUB].pid=void 0}try{t[Cr.LEAF].pid=Number.parseInt(await iN.readFile(oN.join(mm,"clustering",xx.PID_FILES.LEAF),"utf8"))}catch(o){kx.error(o),t[Cr.LEAF].pid=void 0}return t}a(q_e,"getHubLeafStatus")});var Zx=T(()=>{"use strict";var G_e=require("os"),Tm=require("https"),Kx=require("http"),Oi=require("fs-extra"),F_e=require("yaml"),x_e=require("human-readable-ids").hri,{pipeline:Wx}=require("stream/promises"),{createWriteStream:gm,ensureDir:Rm}=require("fs-extra"),{join:js}=require("path"),uN=require("lodash"),k_e=Q(),$_e=Jn(),Jx=U(),pm=tt(),{restart:V_e}=Qo(),Xx=G(),Qx=st(),Y_e=os(),{isHdbInstalled:K_e,main:W_e}=kc(),Q_e=fm(),lN=A(),{SYSTEM_TABLE_NAMES:jx,SYSTEM_SCHEMA_NAME:j_e,CONFIG_PARAMS:P_,OPERATIONS_ENUM:rr}=lN,z_e=9925,J_e="info",X_e=1e4,Z_e="clone-node-config.yaml",_N=[jx.ROLE_TABLE_NAME,jx.USER_TABLE_NAME],M_=process.env.HDB_LEADER_USERNAME,U_=process.env.HDB_LEADER_PASSWORD,v_=process.env.HDB_LEADER_URL,aN=process.env.HDB_LEADER_CLUSTERING_HOST,ede=process.env.HDB_LEADER_CLUSTERING_PORT,tde=process.env.HDB_FULLY_CONNECTED,cN,Ce,ot,at,dN,$c,Zr,Qs;async function rde(){if(await K_e())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+v_),Ce?.rootPath)$c=Ce.rootPath;else try{$c=process.env.ROOTPATH?process.env.ROOTPATH:js(G_e.homedir(),lN.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=js($c,Z_e),Ce=F_e.parseDocument(Oi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}dN=Ce?.clustering?.nodeName??x_e.random(),ot=await B_({operation:rr.GET_CONFIGURATION}),ot=await JSON.parse(ot.body),process.env.HDB_FETCH==="true"?(await ode(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await ide(),await nde(),await sde(),await ade(),await cde(),console.info("Successfully cloned node: "+v_)}a(rde,"cloneNode");async function sde(){console.info("Cloning configuration"),cN=ot?.clustering?.enabled;let e={[P_.ROOTPATH]:$c};if(cN&&Ce?.clustering?.enabled!==!1){if(aN==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[P_.CLUSTERING_ENABLED]=!0;let s=ot?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(ede)||ot?.clustering?.hubServer?.cluster?.network?.port;e[P_.CLUSTERING_USER]=ot?.clustering?.user;let i=k_e.get(P_.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:aN,port:n}):i=[{host:aN,port:n}],Array.isArray(s)&&(i=i.concat(s)),e[P_.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 pm.addConfig(s,ot[s]);Ce?.databases&&await pm.addConfig("databases",ot?.schemas);let r;Ce&&(r=pm.flattenConfig(Ce));for(let s in r){let n=lN.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=dN),Jx.info("Cloning config:",e),uN.isEmpty(e)||pm.updateConfigValue(void 0,void 0,e,!1,!0)}a(sde,"cloneConfig");async function nde(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=$c,!M_)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=M_,!U_)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=U_,process.env.OPERATIONSAPI_NETWORK_PORT=Ce?.operationsApi?.network?.port??z_e,process.env.CLUSTERING_NODENAME=dN,process.env.CLUSTERING_LOGLEVEL=Ce?.clustering?.logLevel??J_e,await Q_e()}a(nde,"installHDB");async function ide(){console.info("Cloning system database");let e=ha("system");await Rm(e);let t=js(e,"system.mdb"),r=gm(t,{overwrite:!0}),s=await zx({operation:rr.GET_BACKUP,database:"system",tables:_N},r);if(await Oi.utimes(t,Date.now(),new Date(s.date)),at=await B_({operation:rr.DESCRIBE_ALL}),at=await JSON.parse(at.body),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((n,i)=>({...n,[i.database]:!0}),{}):{},ot.schemas)for(let n in ot.schemas)Object.keys(ot.schemas[n]).includes("tables")&&(Zr[n]=!0,console.info(`Excluding database '${n}' from clone because leader node has custom pathing configured for one or more of its tables`));Qs=Ce?.databaseConfig?.excludeTables,Qs=Qs?Qs.reduce((n,i)=>({...n,[i.database==null?null:i.database+i.table]:!0}),{}):{};for(let n in at){if(Zr[n]){at[n]="excluded";continue}if(uN.isEmpty(at[n]))continue;let i=[],o=!1;for(let f in at[n])Qs[n+f]?(o=!0,at[n][f]="excluded"):i.push(f);let c;o?(console.info(`Cloning database: ${n} tables: ${i}`),c={operation:rr.GET_BACKUP,database:n,tables:i}):(console.info(`Cloning database: ${n}`),c={operation:rr.GET_BACKUP,database:n});let u=ha(n);await Rm(u);let _=js(u,n+".mdb"),l=gm(_,{overwrite:!0}),d=await zx(c,l);await Oi.utimes(_,Date.now(),new Date(d.date))}}a(ide,"cloneTables");async function ode(){console.info("Cloning system database using fetch");let e=await Sm({operation:rr.GET_BACKUP,database:"system",tables:_N},!0),t=ha("system");await Rm(t);let r=js(t,"system.mdb");if(await Wx(e.body,gm(r,{overwrite:!0})),await Oi.utimes(r,Date.now(),new Date(e.headers.get("date"))),at=await Sm({operation:rr.DESCRIBE_ALL}),at=await at.json(),Zr=Ce?.databaseConfig?.excludeDatabases,Zr=Zr?Zr.reduce((s,n)=>({...s,[n.database]:!0}),{}):{},ot.schemas)for(let s in ot.schemas)Object.keys(ot.schemas[s]).includes("tables")&&(Zr[s]=!0,console.info(`Excluding database '${s}' from clone because leader node has custom pathing configured for one or more of its tables`));Qs=Ce?.databaseConfig?.excludeTables,Qs=Qs?Qs.reduce((s,n)=>({...s,[n.database==null?null:n.database+n.table]:!0}),{}):{};for(let s in at){if(Zr[s]){at[s]="excluded";continue}if(uN.isEmpty(at[s]))continue;let n=[],i=!1;for(let d in at[s])Qs[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 Sm({operation:rr.GET_BACKUP,database:s,tables:n},!0)):(console.info(`Cloning database: ${s}`),o=await Sm({operation:rr.GET_BACKUP,database:s},!0));let c=ha(s);await Rm(c);let u=new Date(o.headers.get("date")),_=js(c,`${u.getTime()}-${s}.mdb`);await Wx(o.body,gm(_,{overwrite:!0}));let l=js(c,s+".mdb");await Oi.rename(_,l),await Oi.utimes(l,Date.now(),u)}}a(ode,"cloneTablesFetch");async function Sm(e,t=!1){let r=Ce?.httpsRejectUnauthorized??!1,s=new Tm.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(M_+":"+U_).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(v_,{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(Sm,"leaderHttpReqFetch");function ha(e){return Ce?.databases&&Ce?.databases[e]?.path||Ce?.storage&&Ce?.storage?.path||js($c,"database")}a(ha,"getDbFileDir");async function ade(){let{deployComponent:e}=zE(),t=await B_({operation:rr.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 B_({operation:rr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(ade,"cloneComponents");async function cde(){if(!cN)return;let e=await $_e.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await W_e():(console.info(await V_e({operation:rr.RESTART})),await Xx.async_set_timeout(X_e)),console.info("Clustering cloned tables");let t=Ce?.clusteringConfig?.subscribeToLeaderNode!==!1,r=Ce?.clusteringConfig?.publishToLeaderNode!==!1;await Y_e.setSchemaDataToGlobalAsync();let s=Nl(),n=await B_({operation:rr.CLUSTER_STATUS});n=await JSON.parse(n.body);let i=[],o=await Oi.stat(js(ha("system"),"system.mdb"));for(let c of _N)i.push({schema:j_e,table:c,subscribe:t,publish:r,start_time:o.mtime.toISOString()});for(let c in at){if(at[c]==="excluded")continue;let u=await Oi.stat(js(ha(c),c+".mdb"));for(let _ in at[c])at[c][_]!=="excluded"&&i.push({schema:c,table:_,subscribe:t,publish:r,start_time:u.mtime.toISOString()})}if(await Qx.createTableStreams(i),Jx.info("Sending add_node request to node:",ot?.clustering?.nodeName,"with subscriptions:",i),tde==="true"&&n.connections.length>0){let c=mE(),u=[{node_name:ot?.clustering?.nodeName,subscriptions:i}],_=!0;for(let d of n.connections){let f={node_name:d.node_name,subscriptions:[]};for(let E of d.subscriptions){if(Zr[E.schema]||Qs[E.schema+E.table])continue;_=!1;let h=await Oi.stat(js(ha(E.schema),E.schema+".mdb"));h.mtime.setSeconds(h.mtime.getSeconds()-10),E.start_time=h.mtime.toISOString(),f.subscriptions.push(E)}u.push(f)}if(_)return;let l=await c({operation:rr.CONFIGURE_CLUSTER,connections:u});console.info(JSON.stringify(l))}else await s({operation:rr.ADD_NODE,node_name:ot?.clustering?.nodeName,subscriptions:i},!0);await Qx.closeConnection()}a(cde,"clusterTables");async function B_(e){let t=new Tm.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(M_+":"+U_).toString("base64"),"Content-Type":"application/json"},n=new URL(v_),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 Xx.httpRequest(i,e)}a(B_,"leaderHttpReq");async function zx(e,t){let r=new Tm.Agent({rejectUnauthorized:Ce?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(M_+":"+U_).toString("base64"),"Content-Type":"application/json"},i=new URL(v_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r,Kx=Tm),i.port&&(o.port=i.port),new Promise((c,u)=>{let _=Kx.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(zx,"leaderHttpStream");rde().then().catch(e=>{console.log(e)})});var Vc=U(),ude=po(),fN=A(),Am=require("fs"),ek=require("path"),yNe=require("os"),{PACKAGE_ROOT:lde}=A(),_de=XN(),INe=(Kh(),te(NO)),{SERVICE_ACTIONS_ENUM:zs}=fN;dde();function dde(){let e=_de();if(e)if(e.error){console.error(e.error),Vc.error(e.error);return}else e.warn&&(console.warn(e.warn),Vc.warn(e.warn));let t;Am.readdir(ek.join(lde,"bin"),r=>{if(r)return Vc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case zs.DEV:process.env.DEV_MODE=!0;case zs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Am.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Am.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Am.existsSync(ek.join(n,fN.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),kc().main();break;case zs.START:s=kc().launch();break;case zs.INSTALL:Mx()().then(()=>kc().main(!0)).catch(f=>{console.error(f)});break;case zs.REGISTER:Bx().register().then(f=>{console.log(f)}).catch(f=>{console.error(f)});break;case zs.STOP:Fx()().then(()=>{process.exit(0)}).catch(f=>{console.error(f)});break;case zs.RESTART:Qo().restart({}).then().catch(f=>{Vc.error(f),console.error(`There was an error restarting harperdb. ${f}`),process.exit(1)});break;case zs.VERSION:ude.printVersion();break;case zs.UPGRADE:Vc.setLogLevel(fN.LOG_LEVELS.INFO),eN().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(f=>{Vc.error(`Got an error during upgrade ${f}`)});break;case zs.STATUS:Yx()().then().catch(f=>{console.error(f)});break;case void 0:process.env.HDB_LEADER_URL?Zx():kc().main();break;default:console.warn(`The "${t}" command is not understood.`);case zs.HELP:console.log(`
108
108
  Usage: harperdb [command]
109
109
 
110
110
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -119,4 +119,4 @@ Commands:
119
119
  install - Install harperdb
120
120
  register - Register harperdb
121
121
  upgrade - Upgrade harperdb
122
- status - Print the status of HarperDB and clustering`)}})}a(_de,"harperDBService");
122
+ status - Print the status of HarperDB and clustering`)}})}a(dde,"harperDBService");