harperdb 4.2.0-alpha.14 → 4.2.0-alpha.15

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,108 +1,108 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var xG=Object.create;var hc=Object.defineProperty;var kG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var VG=Object.getPrototypeOf,YG=Object.prototype.hasOwnProperty;var a=(e,t)=>hc(e,"name",{value:t,configurable:!0});var Te=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ke=(e,t)=>{for(var r in t)hc(e,r,{get:t[r],enumerable:!0})},pO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of $G(t))!YG.call(e,n)&&n!==r&&hc(e,n,{get:()=>t[n],enumerable:!(s=kG(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?xG(VG(e)):{},pO(t||!e||!e.__esModule?hc(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>pO(hc({},"__esModule",{value:!0}),e);var gO=m((wle,TO)=>{var KG=require("fast-glob"),{statSync:Bh,existsSync:Hh,readFileSync:WG,writeFileSync:QG}=require("fs"),{spawnSync:zG,spawn:JG}=require("child_process"),{isMainThread:jG}=require("worker_threads"),{join:nn,relative:SO}=require("path"),{PACKAGE_ROOT:qr}=R(),{tmpdir:XG}=require("os");require("source-map-support").install();var ZG=["resources","server","dataLayer"],mc="ts-build",qh,ex=__filename.endsWith("tsBuild.js");if(ex){if(jG){let r;try{Bh(nn(qr,mc)),r=!0}catch{}if(r)for(let s of KG.sync(ZG.map(n=>n+"/**/*.ts"),{cwd:qr})){let n=0,i=0;try{n=Bh(nn(qr,s)).mtimeMs-5e3,i=Bh(nn(qr,mc,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."),qh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),qh=!0;if(qh){let s=zG(process.argv[0],[nn(qr,"node_modules/.bin/tsc")],{cwd:qr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=nn(XG(),"harperdb-tsc.pid"),i;if(Hh(n))try{process.kill(+WG(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=JG(process.argv[0],[nn(qr,"node_modules/.bin/tsc"),"--watch"],{cwd:qr,detached:!0,stdio:"ignore"});QG(n,o.pid.toString()),o.unref()}}}}let e=TO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(qr)&&!s[0].includes("node_modules")){let i=SO(qr,s[0]),o;i.startsWith(mc)?o=nn(qr,SO(mc,i)):o=nn(qr,mc,i);let c=nn(o,r),u=c+".js";if(Hh(u))return u;if(c.includes(".")&&Hh(c))return c}return t(r,s,n)}}});var R=m((Dle,PO)=>{"use strict";var Fr=require("path"),tx=require("fs"),{relative:Cle,join:Lle}=Fr,{existsSync:rx}=tx;function sx(){let e=__dirname;for(;!rx(Fr.join(e,"package.json"));){let t=Fr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(sx,"getHDBPackageRoot");var Wn=sx(),RO="js",r_=RO,nx="harperdb-config.yaml",ix="defaultConfig.yaml",ox="hdb",AO=`harperdb.${r_}`,OO=`customFunctionsServer.${r_}`,ax=`restartHdb.${r_}`,Gh="HarperDB",t_="Custom Functions",s_="Clustering Hub",n_="Clustering Leaf",cx="Clustering Ingest Service",ux="Clustering Reply Service",lx="foreground.pid",_x="hdb.pid",dx="data",Ex={HDB:Gh,CLUSTERING_HUB:s_,CLUSTERING_LEAF:n_,CLUSTERING_INGEST_SERVICE:cx,CLUSTERING_REPLY_SERVICE:ux,CUSTOM_FUNCTIONS:t_,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"},fx={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},hx={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},mx={harperdb:Gh,"clustering hub":s_,"clustering leaf":n_,"custom functions":t_,custom_functions:t_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},px={CLUSTERING_HUB_PROC_DESCRIPTOR:s_,CLUSTERING_LEAF_PROC_DESCRIPTOR:n_},Fh={HDB:Fr.join(Wn,"server/harperdb"),CUSTOM_FUNCTIONS:Fr.join(Wn,"server/customFunctions"),CLUSTERING_HUB:Fr.join(Wn,"server/nats"),CLUSTERING_LEAF:Fr.join(Wn,"server/nats")},Sx={HDB:Fr.join(Fh.HDB,AO),CUSTOM_FUNCTIONS:Fr.join(Fh.CUSTOM_FUNCTIONS,OO)},Tx={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Fr.join(Wn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Fr.join(Wn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Fr.join(Wn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},gx={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},NO="support@harperdb.io",Rx="customer-success@harperdb.io",bO=1,Ax=4141,yO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",Ox="https://www.harperdb.io/product",Nx=`For support, please submit a request at ${yO} or contact ${NO}`,IO=`For license support, please contact ${Rx}`,bx="None of the specified records were found.",yx="hash attribute not found",Ix=`Your current license only supports ${bO} role. ${IO}`,wx="Your current license only supports 3 connections to a node.",Cx="127.0.0.1",Lx=1,Dx=/^\.$/,Ux=/^\.\.$/,Mx="U+002E",Px=/\//g,vx="U+002F",Bx=/U\+002F/g,Hx=/^U\+002E$/,qx=/^U\+002EU\+002E$/,Fx="d",Gx=999999,xx="*",kx="--max-old-space-size=",$x="system",Vx="__hdb_hash",Yx=".harperdb",Kx=".hdb",Wx="keys",Qx="hdb_boot_properties.file",zx=".updateConfig.json",Jx="SIGTSTP",jx=24,Xx=6e4,Zx=448,ek="blob",tk="trash",rk="database",sk="schema",nk="transactions",ik=".count",ok="id",ak="PROCESS_NAME",wO={SETTINGS_PATH_KEY:"settings_path"},CO=require("lodash"),ck={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},uk={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},lk={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},_k={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},dk={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"},Tr="hdb_internal:",Ek={CREATE_SCHEMA:Tr+"create_schema",CREATE_TABLE:Tr+"create_table",CREATE_ATTRIBUTE:Tr+"create_attribute",ADD_USER:Tr+"add_user",ALTER_USER:Tr+"alter_user",DROP_USER:Tr+"drop_user",HDB_NODES:Tr+"hdb_nodes",HDB_USERS:Tr+"hdb_users",HDB_WORKERS:Tr+"hdb_workers",CATCHUP:Tr+"catchup",SCHEMA_CATCHUP:Tr+"schema_catchup",WORKER_ROOM:Tr+"cluster_workers"},fk={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"},hk="060493.ks",mk=".license",pk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},W={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"},Sk={CSV:".csv",JSON:".json"},Tk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},gk={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},pc={};pc[W.INSERT]=W.INSERT;pc[W.UPDATE]=W.UPDATE;pc[W.UPSERT]=W.UPSERT;pc[W.DELETE]=W.DELETE;var Oe=Object.create(null);Oe[W.DESCRIBE_ALL]=W.DESCRIBE_ALL;Oe[W.DESCRIBE_TABLE]=W.DESCRIBE_TABLE;Oe[W.DESCRIBE_SCHEMA]=W.DESCRIBE_SCHEMA;Oe[W.READ_LOG]=W.READ_LOG;Oe[W.ADD_NODE]=W.ADD_NODE;Oe[W.LIST_USERS]=W.LIST_USERS;Oe[W.LIST_ROLES]=W.LIST_ROLES;Oe[W.USER_INFO]=W.USER_INFO;Oe[W.SQL]=W.SQL;Oe[W.GET_JOB]=W.GET_JOB;Oe[W.SEARCH_JOBS_BY_START_DATE]=W.SEARCH_JOBS_BY_START_DATE;Oe[W.DELETE_FILES_BEFORE]=W.DELETE_FILES_BEFORE;Oe[W.EXPORT_LOCAL]=W.EXPORT_LOCAL;Oe[W.EXPORT_TO_S3]=W.EXPORT_TO_S3;Oe[W.CLUSTER_STATUS]=W.CLUSTER_STATUS;Oe[W.REMOVE_NODE]=W.REMOVE_NODE;Oe[W.RESTART]=W.RESTART;Oe[W.CUSTOM_FUNCTIONS_STATUS]=W.CUSTOM_FUNCTIONS_STATUS;Oe[W.GET_CUSTOM_FUNCTIONS]=W.GET_CUSTOM_FUNCTIONS;Oe[W.GET_CUSTOM_FUNCTION]=W.GET_CUSTOM_FUNCTION;Oe[W.SET_CUSTOM_FUNCTION]=W.SET_CUSTOM_FUNCTION;Oe[W.DROP_CUSTOM_FUNCTION]=W.DROP_CUSTOM_FUNCTION;Oe[W.ADD_CUSTOM_FUNCTION_PROJECT]=W.ADD_CUSTOM_FUNCTION_PROJECT;Oe[W.DROP_CUSTOM_FUNCTION_PROJECT]=W.DROP_CUSTOM_FUNCTION_PROJECT;Oe[W.PACKAGE_CUSTOM_FUNCTION_PROJECT]=W.PACKAGE_CUSTOM_FUNCTION_PROJECT;Oe[W.DEPLOY_CUSTOM_FUNCTION_PROJECT]=W.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Rk={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Ak={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},LO={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"},Ok=CO.invert(LO),O={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_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",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",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_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",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",SCHEMAS:"schemas",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},DO={settings_path:wO.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.OPERATIONSAPI_TLS_CERTIFICATE,certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,props_env_key:O.OPERATIONSAPI_NODEENV,node_env:O.OPERATIONSAPI_NODEENV,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.HTTP_THREADS,max_hdb_processes:O.HTTP_THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:O.CUSTOMFUNCTIONS_ENABLED,custom_functions:O.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:O.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:O.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:O.HTTP_THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,run_in_foreground:O.OPERATIONSAPI_FOREGROUND,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_enabled:O.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:O.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:O.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:O.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:O.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:O.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:O.CUSTOMFUNCTIONS_NODEENV,http_threads:O.HTTP_THREADS,http_session_affinity:O.HTTP_SESSION_AFFINITY,customfunctions_processes:O.HTTP_THREADS,customfunctions_root:O.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:O.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:O.OPERATIONSAPI_NODEENV,operationsapi_root:O.ROOTPATH,schemas:O.SCHEMAS,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in O){let t=O[e];DO[t.toLowerCase()]=t}var Nk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},bk={csv_file_load:"csv_file_load",csv_data_load:W.CSV_DATA_LOAD,csv_url_load:W.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"},yk={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"},Ik={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},wk={VERSION_DEFAULT:"2.2.0"},Ck={DEVELOPMENT:8192,DEFAULT:512},Lk={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"},Dk={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"},Uk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},UO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Mk=Symbol("metadata"),Pk="__clustering__",vk=Object.values(UO),Bk=15984864e5,MO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Hk=CO.invert(MO),qk={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"},Fk=111,Gk=`\r
3
- `,xk={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},kk=["*","%"],$k="unauthorized_access",Vk="func_val",Yk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Kk={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},Wk={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"},Qk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},zk={HTTP:"http"},Jk={STOPPED:"stopped",ONLINE:"online"},jk="3.x.x",Xk={SUCCESS:"success",FAILURE:"failure"},Zk={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};PO.exports={LOCAL_HARPERDB_OPERATIONS:Oe,HDB_SUPPORT_ADDRESS:NO,HDB_SUPPORT_URL:yO,HDB_PRICING_URL:Ox,SUPPORT_HELP_MSG:Nx,LICENSE_HELP_MSG:IO,HDB_PROC_NAME:AO,HDB_PROC_DESCRIPTOR:Gh,CLUSTERING_LEAF_PROC_DESCRIPTOR:n_,CLUSTERING_HUB_PROC_DESCRIPTOR:s_,SYSTEM_SCHEMA_NAME:$x,HASH_FOLDER_NAME:Vx,HDB_HOME_DIR_NAME:Yx,UPDATE_FILE_NAME:zx,LICENSE_KEY_DIR_NAME:Wx,BOOT_PROPS_FILE_NAME:Qx,JOB_TYPE_ENUM:bk,JOB_STATUS_ENUM:pk,SYSTEM_TABLE_NAMES:_k,SYSTEM_TABLE_HASH_ATTRIBUTES:dk,OPERATIONS_ENUM:W,VALID_S3_FILE_TYPES:Sk,S3_BUCKET_AUTH_KEYS:Tk,VALID_SQL_OPS_ENUM:gk,GEO_CONVERSION_ENUM:Ak,HDB_SETTINGS_NAMES:LO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:Ok,SERVICE_ACTIONS_ENUM:Rk,CLUSTER_MESSAGE_TYPE_ENUM:yk,CLUSTER_CONNECTION_DIRECTION_ENUM:Ik,CLUSTER_EVENTS_DEFS_ENUM:Lk,PERIOD_REGEX:Dx,DOUBLE_PERIOD_REGEX:Ux,UNICODE_PERIOD:Mx,FORWARD_SLASH_REGEX:Px,UNICODE_FORWARD_SLASH:vx,ESCAPED_FORWARD_SLASH_REGEX:Bx,ESCAPED_PERIOD_REGEX:Hx,ESCAPED_DOUBLE_PERIOD_REGEX:qx,REG_KEY_FILE_NAME:hk,RESTART_TIMEOUT_MS:Xx,HDB_FILE_PERMISSIONS:Zx,DATABASES_DIR_NAME:rk,LEGACY_DATABASES_DIR_NAME:sk,TRANSACTIONS_DIR_NAME:nk,LIMIT_COUNT_NAME:ik,ID_ATTRIBUTE_STRING:ok,INSERT_MODULE_ENUM:uk,UPGRADE_JSON_FIELD_NAMES_ENUM:lk,RESTART_CODE:Jx,RESTART_CODE_NUM:jx,CLUSTER_OPERATIONS:pc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:fk,HDB_INTERNAL_SC_CHANNEL_PREFIX:Tr,INTERNAL_SC_CHANNELS:Ek,CLUSTERING_MESSAGE_TYPES:qk,HDB_FILE_SUFFIX:Kx,BLOB_FOLDER_NAME:ek,HDB_TRASH_DIR:tk,ORIGINATOR_SET_VALUE:Fk,LICENSE_VALUES:wk,RAM_ALLOCATION_ENUM:Ck,TIME_STAMP_NAMES_ENUM:UO,TIME_STAMP_NAMES:vk,PERMS_UPDATE_RELEASE_TIMESTAMP:Bk,SEARCH_NOT_FOUND_MESSAGE:bx,SEARCH_ATTRIBUTE_NOT_FOUND:yx,LICENSE_ROLE_DENIED_RESPONSE:Ix,LICENSE_MAX_CONNS_REACHED:wx,BASIC_LICENSE_MAX_NON_CU_ROLES:bO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Ax,VALUE_SEARCH_COMPARATORS:MO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Hk,LICENSE_FILE_NAME:mk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Dk,NEW_LINE:Gk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Lx,MOMENT_DAYS_TAG:Fx,API_TURNOVER_SEC:Gx,LOOPBACK:Cx,CODE_EXTENSION:r_,WILDCARD_SEARCH_VALUE:xx,NODE_ERROR_CODES:Uk,JAVASCRIPT_EXTENSION:RO,PERMS_CRUD_ENUM:xk,UNAUTHORIZED_PERMISSION_NAME:$k,SEARCH_WILDCARDS:kk,FUNC_VAL:Vk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Yk,JWT_ENUM:Kk,CLUSTERING_FLAG:Pk,ITC_EVENT_TYPES:Wk,CUSTOM_FUNCTION_PROC_NAME:OO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:t_,SERVICES:Qk,THREAD_TYPES:zk,MEM_SETTING_KEY:kx,HDB_RESTART_SCRIPT:ax,PROCESS_DESCRIPTORS:Ex,SERVICE_SERVERS:Sx,SERVICE_SERVERS_CWD:Fh,PROCESS_DESCRIPTORS_VALIDATE:mx,LAUNCH_SERVICE_SCRIPTS:Tx,LOG_LEVELS:hx,PROCESS_NAME_ENV_PROP:ak,LOG_NAMES:fx,PM2_PROCESS_STATUSES:Jk,CONFIG_PARAM_MAP:DO,CONFIG_PARAMS:O,HDB_CONFIG_FILE:nx,HDB_DEFAULT_CONFIG_FILE:ix,ROLE_TYPES_ENUM:gx,BOOT_PROP_PARAMS:wO,INSTALL_PROMPTS:ck,HDB_ROOT_DIR_NAME:ox,CLUSTERING_PROCESSES:px,FOREGROUND_PID_FILE:lx,PACKAGE_ROOT:Wn,PRE_4_0_0_VERSION:jk,SCHEMAS_PARAM_CONFIG:Nk,METADATA_PROPERTY:Mk,AUTH_AUDIT_STATUS:Xk,AUTH_AUDIT_TYPES:Zk,HDB_PID_FILE:_x,DEFAULT_DATABASE_NAME:dx};gO()});var Fi=m((Mle,HO)=>{"use strict";var vO=require("minimist");HO.exports=e$;function e$(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BO(process.env),s=BO(vO(process.argv))):(r=process.env,s=vO(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(e$,"assignCMDENVVariables");function BO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(BO,"objKeysToLowerCase")});var C=m((vle,Wh)=>{"use strict";var Gi=require("fs-extra"),{workerData:t$,threadId:r$}=require("worker_threads"),cn=require("path"),GO=require("yaml"),xO=require("properties-reader"),dt=R(),qO=Fi(),s$=require("os"),{PACKAGE_ROOT:kh}=R(),{_assignPackageExport:n$}=require("../index"),Tc={};for(let e in console)Tc[e]||(Tc[e]=console[e]);var Wt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kO={STDOUT:"stdOut",STDERR:"stdErr"},i$=cn.join(kh,"logs"),o$=cn.join(kh,"config/yaml/",dt.HDB_DEFAULT_CONFIG_FILE),a$=1e4,on,an,Kt,i_,o_,gc,Ko,Sc;Sc===void 0&&$O();Wh.exports={notify:KO,fatal:WO,error:Rc,warn:Kh,info:a_,debug:Yh,trace:Vh,setLogLevel:f$,log_level:Kt,loggerWithTag:c$,suppressLogging:u$,initLogSettings:$O,setupConsoleLogging:VO,logCustomLevel:d$,closeLogFile:$h,getLogFilePath:()=>gc,OUTPUTS:kO,AuthAuditLog:p$};n$("logger",Wh.exports);function $O(e=!1){try{if(Sc===void 0||e){$h();let t=E$(),r=qO(["ROOTPATH"]);try{Sc=xO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Gi.pathExistsSync(cn.join(r.ROOTPATH,dt.HDB_CONFIG_FILE)))throw s}({level:Kt,config_log_path:o_,to_file:on,to_stream:an}=h$(r.ROOTPATH?cn.join(r.ROOTPATH,dt.HDB_CONFIG_FILE):Sc.get("settings_path"))),i_=dt.LOG_NAMES.HDB,gc=cn.join(o_,i_)}}catch(t){if(Sc=void 0,t.code===dt.NODE_ERROR_CODES.ENOENT){let r=qO(Object.keys(dt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=dt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===dt.CONFIG_PARAMS.LOGGING_LEVEL){Kt=u;continue}if(c===dt.CONFIG_PARAMS.LOGGING_STDSTREAMS){an=u;continue}c===dt.CONFIG_PARAMS.LOGGING_FILE&&(on=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=m$();on=on===void 0?n:on,on=FO(on),an=an===void 0?i:an,an=FO(an),Kt=Kt===void 0?s:Kt,o_=i$,i_=dt.LOG_NAMES.INSTALL,gc=cn.join(o_,i_);return}throw Rc("Error initializing log settings"),Rc(t),t}VO()}a($O,"initLogSettings");var xh=!0;function VO(){Yo("error",Rc),Yo("warn",Kh),Yo("log",a_),Yo("info",a_),Yo("debug",Yh),Yo("trace",Vh)}a(VO,"setupConsoleLogging");function Yo(e,t){console[e]=function(...r){if(xh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Tc[e](...r)}}a(Yo,"logConsole");function c$(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(KO),fatal:r(WO),error:r(Rc),warn:r(Kh),info:r(a_),debug:r(Yh),trace:r(Vh)};function r(s){return function(...n){return s(t,...n)}}}a(c$,"loggerWithTag");function u$(e){try{xh=!1,e()}finally{xh=!0}}a(u$,"suppressLogging");var l$=t$?.name?.replace(/ /g,"-")||"main";function un(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||l$+"/"+r$);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(un,"createLogRecord");function Ac(e){on&&YO(e),an&&process.stdout.write(e)}a(Ac,"logStdOut");function c_(e){on&&YO(e),an&&process.stderr.write(e)}a(c_,"logStdErr");function YO(e){_$(),Ko?Gi.appendFileSync(Ko,e):Tc.log(e)}a(YO,"logToFile");function $h(){try{Gi.closeSync(Ko)}catch{}Ko=null}a($h,"closeLogFile");function _$(){if(!Ko){try{if(!gc)debugger;Ko=Gi.openSync(gc,"a")}catch(e){Tc.error(e)}setTimeout(()=>{$h()},a$).unref()}}a(_$,"openLogFile");function a_(...e){Wt[Kt]<=Wt.info&&Ac(un("info",e))}a(a_,"info");function Vh(...e){Wt[Kt]<=Wt.trace&&Ac(un("trace",e))}a(Vh,"trace");function Rc(...e){Wt[Kt]<=Wt.error&&c_(un("error",e))}a(Rc,"error");function Yh(...e){Wt[Kt]<=Wt.debug&&Ac(un("debug",e))}a(Yh,"debug");function KO(...e){Wt[Kt]<=Wt.notify&&Ac(un("notify",e))}a(KO,"notify");function WO(...e){Wt[Kt]<=Wt.fatal&&c_(un("fatal",e))}a(WO,"fatal");function Kh(...e){Wt[Kt]<=Wt.warn&&c_(un("warn",e))}a(Kh,"warn");function d$(e,t,...r){t===kO.STDERR?c_(un(e,r)):Ac(un(e,r))}a(d$,"logCustomLevel");function E$(){let e;try{e=s$.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=cn.join(e,dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return Gi.existsSync(t)||(t=cn.join(kh,"utility/hdb_boot_properties.file")),t}a(E$,"getPropsFilePath");function f$(e){Kt=e}a(f$,"setLogLevel");function FO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(FO,"autoCastBoolean");function h$(e){try{if(e.includes("config/settings.js")){let o=xO(e);return{level:o.get(dt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:cn.dirname(o.get(dt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=GO.parseDocument(Gi.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===dt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(h$,"getLogConfig");function m$(){try{let e=GO.parseDocument(Gi.readFileSync(o$,"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(m$,"getDefaultConfig");function p$(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(p$,"AuthAuditLog")});var xi=m((Hle,S$)=>{S$.exports={name:"harperdb",version:"4.2.0-alpha.14",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 ki=m((Gle,QO)=>{"use strict";var qle=require("fs-extra"),Fle=C();QO.exports={version:T$,printVersion:R$,nodeVersion:g$};var Qn=xi();function T$(){if(Qn)return Qn.version}a(T$,"version");function g$(){if(Qn&&Qn.engines&&Qn.engines["preferred-node"])return Qn.engines["preferred-node"]}a(g$,"nodeVersion");function R$(){Qn&&console.log(`HarperDB Version ${Qn.version}`)}a(R$,"printVersion")});var XO=m((kle,jO)=>{"use strict";var zO=require("semver/functions/major"),A$=require("semver/functions/satisfies"),JO=xi(),Oc=process.versions&&process.versions.node?process.versions.node:void 0;jO.exports=O$;function O$(){let e=JO.engines.node,t=JO.engines["preferred-node"];if(Oc){if(e&&!A$(Oc,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${Oc}. Please install a version of Node.js that is withing the defined range.`};if(t&&zO(Oc)!==zO(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${Oc}. Some issues may occur with untested versions of Node.js.`}}}a(O$,"checkNodeVersion")});var Qh=m((Vle,ZO)=>{"use strict";var N$=require("util"),b$=require("path"),y$=require("child_process"),I$=N$.promisify(y$.execFile),w$=1e3*1e3*10;ZO.exports={findPs:C$};async function C$(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await I$("ps",["wwxo",`pid,${r}`],{maxBuffer:w$});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:b$.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(C$,"findPs")});var Ge=m((Kle,tN)=>{"use strict";var L$="__dbis__",D$="__txns__",U$="__environment_name__",M$="__dbi_defintion__",P$={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"},v$=["__createdtime__","__updatedtime__"],B$="\uFFFF",eN={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},H$=Object.values(eN);tN.exports={AUDIT_STORE_NAME:D$,INTERNAL_DBIS_NAME:L$,DBI_DEFINITION_NAME:M$,SEARCH_TYPES:P$,TIMESTAMP_NAMES:v$,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:U$,TRANSACTIONS_DBI_NAMES_ENUM:eN,TRANSACTIONS_DBIS:H$,OVERFLOW_MARKER:B$}});var gr=m((Wle,lN)=>{"use strict";var rN=R(),sN=Ge(),nN={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},iN=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),oN={500:iN("There was an error processing your request."),400:"Invalid request"},q$=oN[nN.INTERNAL_SERVER_ERROR],F$={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.`},G$={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},x$={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"},k$={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 ${sN.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${sN.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"},$$={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rN.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 ${rN.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"},aN={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"},V$={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`},K$={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"},W$={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Q$={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`},cN={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.`},uN={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}`},z$={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."},J$={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},j$={...aN,...x$,...F$,...V$,...Y$,...K$,...W$,...Q$,...$$,...cN,...uN,...z$,...J$,...G$};lN.exports={CHECK_LOGS_WRAPPER:iN,HDB_ERROR_MSGS:j$,DEFAULT_ERROR_MSGS:oN,DEFAULT_ERROR_RESP:q$,HTTP_STATUS_CODES:nN,LMDB_ERRORS_ENUM:k$,AUTHENTICATION_ERROR_MSGS:aN,VALIDATION_ERROR_MSGS:cN,ITC_ERRORS:uN}});var z=m((zle,EN)=>{"use strict";var Wo=gr(),X$=C(),Z$=R(),u_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,_N),this.statusCode=s||Wo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Wo.DEFAULT_ERROR_MSGS[s]?Wo.DEFAULT_ERROR_MSGS[s]:Wo.DEFAULT_ERROR_MSGS[Wo.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&&X$[n](i)}},zh=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}},Jh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _N(e,t,r,s=Z$.LOG_LEVELS.ERROR,n=null,i=!1){if(dN(e))return e;let o=new u_(e,t,r,s,n);return i&&delete o.stack,o}a(_N,"handleHDBError");function dN(e){return e.__proto__.constructor.name===u_.name}a(dN,"isHDBError");EN.exports={isHDBError:dN,handleHDBError:_N,ClientError:zh,ServerError:Jh,hdb_errors:Wo}});var De=m((jle,gN)=>{"use strict";var wc=R(),eV=F(),Qt=Y(),Cc=require("path"),tV=require("minimist"),fN=require("fs-extra"),hN=require("lodash");Qt.initSync();var{CONFIG_PARAMS:zn,SCHEMAS_PARAM_CONFIG:Nc,SYSTEM_SCHEMA_NAME:l_}=wc,bc,yc,Ic;function mN(){if(bc!==void 0)return bc;if(Qt.getHdbBasePath()!==void 0)return bc=Qt.get(zn.STORAGE_PATH)||Cc.join(Qt.getHdbBasePath(),wc.DATABASES_DIR_NAME),bc}a(mN,"getBaseSchemaPath");function pN(){if(yc!==void 0)return yc;if(Qt.getHdbBasePath()!==void 0)return yc=TN(l_),yc}a(pN,"getSystemSchemaPath");function SN(){if(Ic!==void 0)return Ic;if(Qt.getHdbBasePath()!==void 0)return Ic=Qt.get(wc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Cc.join(Qt.getHdbBasePath(),wc.TRANSACTIONS_DIR_NAME),Ic}a(SN,"getTransactionAuditStoreBasePath");function rV(e,t){let r=Qt.get(zn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Cc.join(SN(),e.toString())}a(rV,"getTransactionAuditStorePath");function TN(e,t){e=e.toString(),t=t&&t.toString();let r=Qt.get(wc.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Cc.join(mN(),e)}a(TN,"getSchemaPath");function sV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,tV(process.argv));let s=r[zn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!eV.isObject(s))throw o;i=s}for(let o of i){let c=o[l_];if(!c)continue;let u=Qt.get(zn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Nc.PATH];if(l)return hN.set(u,[l_,Nc.TABLES,t,Nc.PATH],l),Qt.setProperty(zn.SCHEMAS,u),l;let _=c?.[Nc.PATH];if(_)return hN.set(u,[l_,Nc.PATH],_),Qt.setProperty(zn.SCHEMAS,u),_}}let n=r[zn.STORAGE_PATH.toUpperCase()];if(n){if(!fN.pathExistsSync(n))throw new Error(n+" does not exist");let i=Cc.join(n,e);return fN.mkdirsSync(i),Qt.setProperty(zn.STORAGE_PATH,n),i}return pN()}a(sV,"initSystemSchemaPaths");function nV(){bc=void 0,yc=void 0,Ic=void 0}a(nV,"resetPaths");gN.exports={getBaseSchemaPath:mN,getSystemSchemaPath:pN,getTransactionAuditStorePath:rV,getTransactionAuditStoreBasePath:SN,getSchemaPath:TN,initSystemSchemaPaths:sV,resetPaths:nV}});var Ht=m((t_e,bN)=>{"use strict";var iV=gr().LMDB_ERRORS_ENUM,Zle=require("lmdb"),oV=Ge(),e_e=require("buffer").Buffer,{OVERFLOW_MARKER:RN,MAX_SEARCH_KEY_LENGTH:__}=oV,AN=["number","string","symbol","boolean","bigint"];function aV(e){if(e=e?.primaryStore||e,!e)throw new Error(iV.ENV_REQUIRED)}a(aV,"validateEnv");function cV(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(cV,"stringifyData");function uV(e){return e instanceof Date?e.valueOf():e}a(uV,"convertKeyValueToWrite");function lV(e){if(e==null)return;if(AN.includes(typeof e))return e.length>__?[e.slice(0,__)+RN]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AN.includes(typeof n))n.length>__?t.push(n.slice(0,__)+RN):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(lV,"getIndexedValues");var d_=0,ON=0;function NN(){ON=Date.now()-performance.now()}a(NN,"adjustStartTime");NN();var _V=6e4;setInterval(NN,_V).unref();function dV(){let e=performance.now()+ON;return e>d_?(d_=e,e):(d_+=488e-6,d_)}a(dV,"getNextMonotonicTime");bN.exports={validateEnv:aV,stringifyData:cV,convertKeyValueToWrite:uV,getNextMonotonicTime:dV,getIndexedValues:lV}});var yN,ys,jh,Lc=Te(()=>{yN=require("events"),ys=class extends yN.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new jh;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){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)}},jh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Dc(e){return e[Nt]||(e[Nt]=Object.create(null))}function p_(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[Nt];if(l&&c in l)return l[c];let _=this[le]?.[c];if(_&&typeof _=="object"){let d=IN(_,o);if(d)return l||(l=this[Nt]=Object.create(null)),l[c]=d}return _},set(l){Dc(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,E_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Dc(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,E_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Dc(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[le]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new E_.ClientError("Can not add a property to a sealed table schema");Dc(this)[o]=c}),i("deleteProperty",function(o){Dc(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let l in o)c||(c=Object.assign({},this[le])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[le])),Object.assign(c,this)),c||this[le]}),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 IN(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[le]=n}},p_(r,t)),new r(e)):new f_(e);case Array:let s=new m_(e.length);s[le]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IN(o,t?.elements)),s[n]=o}return s}}function S_(e){let t=e[Nt],r;for(let n in t){r||(r=Object.assign({},e[le]));let i=t[n];i&&typeof i=="object"&&(i=S_(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[le])),Object.assign(r,e)),r||e[le]}function Uc(e){let t;if(e[le]&&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=Uc(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Nt];for(let s in r){t||(t=Object.assign({},e[le]));let n=r[s];n&&typeof n=="object"&&(n=Uc(n)),t[s]=n}return t?Object.freeze(t):e[le]||Object.freeze(e)}function h_(e){let t=e[le];if(!t)return!0;if(e.constructor===Array){if(e[$i]||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?.[le]===n){if(h_(i))return!0}else return!0}}else{let r=e[Nt];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[le]===i){if(h_(n))return!0}else return!0}else return!0}}return!1}var E_,Nt,f_,$i,m_,T_=Te(()=>{Is();E_=D(z()),Nt=Symbol("own-data");a(Dc,"getChanges");a(p_,"assignTrackedAccessors");a(IN,"trackObject");f_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[le]=t}};p_(f_,{});a(S_,"collapseData");a(Uc,"deepFreeze");a(h_,"hasChanges");$i=Symbol.for("has-array-changes"),m_=class extends Array{static{a(this,"TrackedArray")}[$i];constructor(t){super(t)}splice(...t){return this[$i]=!0,super.splice(...t)}push(...t){return this[$i]=!0,super.push(...t)}pop(){return this[$i]=!0,super.pop()}unshift(...t){return this[$i]=!0,super.unshift(...t)}shift(){return this[$i]=!0,super.shift()}};m_.prototype.constructor=Array});function Xe(e,t){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 r=e.transaction=new Xh;e.timestamp&&(r.timestamp=e.timestamp),r[Ne]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var wN,CN,Xh,Vi=Te(()=>{wN=D(Ht()),CN=require("../index");Is();a(Xe,"transaction");(0,CN._assignPackageExport)("transaction",Xe);Xe.commit=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Xe.abort=function(e){let t=(e[Ne]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};Xh=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,wN.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function tm(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,E;switch(fV[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]=Cs.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 Rt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new Zh.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=rm(e);if(!T)throw new Zh.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise(x=>setImmediate(()=>x(T(g)?A:DN.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function rm(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case Rt.SEARCH_TYPES.EQUALS:case void 0:return ws(r,n=>n===s);case Rt.SEARCH_TYPES.CONTAINS:return ws(r,n=>n?.toString().includes(s));case Rt.SEARCH_TYPES.ENDS_WITH:case Rt.SEARCH_TYPES._ENDS_WITH:return ws(r,n=>n?.toString().endsWith(s));case Rt.SEARCH_TYPES.STARTS_WITH:case Rt.SEARCH_TYPES._STARTS_WITH:return ws(r,n=>typeof n=="string"&&n.startsWith(s));case Rt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ws(r,n=>(0,Cs.compareKeys)(n,s[0])>=0&&(0,Cs.compareKeys)(n,s[1])<=0);case"gt":case Rt.SEARCH_TYPES.GREATER_THAN:case Rt.SEARCH_TYPES._GREATER_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)>0);case"ge":case Rt.SEARCH_TYPES.GREATER_THAN_EQUAL:case Rt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)>=0);case Rt.SEARCH_TYPES.LESS_THAN:case"lt":case Rt.SEARCH_TYPES._LESS_THAN:return ws(r,n=>(0,Cs.compareKeys)(n,s)<0);case"le":case Rt.SEARCH_TYPES.LESS_THAN_EQUAL:case Rt.SEARCH_TYPES._LESS_THAN_EQUAL:return ws(r,n=>(0,Cs.compareKeys)(n,s)<=0);case"ne":return ws(r,n=>(0,Cs.compareKeys)(n,s)!==0);default:return}}function ws(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 g_(e){if(!e)return;let t=new em,r,s,n,i,o;for(;r=LN.exec(e);){i=LN.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.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}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=EV[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Zh,Rt,Cs,DN,LN,EV,fV,em,R_=Te(()=>{Zh=D(z()),Rt=D(Ge()),Cs=require("ordered-binary"),DN=require("lmdb"),LN=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,EV={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(tm,"idsForCondition");fV={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(rm,"filterByType");a(ws,"attributeComparator");a(g_,"parseQuery");em=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 im={};Ke(im,{CONTEXT:()=>Ne,ID_PROPERTY:()=>ue,IS_COLLECTION:()=>ln,RECORD_PROPERTY:()=>le,Resource:()=>bt,SAVE_UPDATES_PROPERTY:()=>HN,snake_case:()=>mV});function mV(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UN(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 nm(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Gr(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[Ne]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ne]||i):l=i:(l=n,c=l[ue]??l[this.primaryKey]??null):i?o=i[Ne]||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 E of n){if(typeof E=="object"&&E)break;c.push(E)}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 E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Xe(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[HN]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new A_(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new A_(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function xr(e,t){let r=new BN.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 sm(e){let t=e[le];if(t){let r=e[Nt];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 MN(e){if(typeof e=="string")return t=>sm(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=sm(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=sm(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 PN,vN,BN,Ne,ue,ln,HN,le,hV,bt,A_,nm,Is=Te(()=>{PN=require("crypto");Lc();vN=require("../index"),BN=D(z());T_();Vi();R_();Ne=Symbol.for("context"),ue=Symbol.for("primary-key"),ln=Symbol("is-collection"),HN=Symbol("save-updates"),le=Symbol("stored-record"),hV={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},bt=class{static{a(this,"Resource")}[Ne];[ue];static transactions;constructor(t,r){this[ue]=t;let s=r?.[Ne];this[Ne]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Gr(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=MN(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Gr(function(t,r,s,n){if(Array.isArray(n)&&t[ln]){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):xr(t,"put")},{hasContent:!0,type:"update"});static delete=Gr(function(t,r,s,n){return t.delete?t.delete(r):xr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,PN.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),Xe(s,()=>{let i=new this(n,s),o=i.put?i.put(r):xr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Gr(function(t,r,s,n){return t.invalidate?t.invalidate(r):xr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Gr(function(t,r,s,n){return t[ue]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Gr(function(t,r,s,n){return t.connect?t.connect(r):xr(t,"connect")},{type:"read"});static subscribe=Gr(function(t,r,s,n){return t.subscribe?t.subscribe(r):xr(t,"subscribe")},{type:"read"});static publish=Gr(function(t,r,s,n){return t[ue]!=null&&t.update(),t.publish?t.publish(n,r):xr(t,"publish")},{hasContent:!0,type:"create"});static search=Gr(function(t,r,s,n){let i=t.search?t.search(s):xr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=MN(o);return i.map(c)}return i},{type:"read"});static query=Gr(function(t,r,s,n){return t.search?t.search(n,r):xr(t,"search")},{hasContent:!0,type:"read"});static copy=Gr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):xr(t,"copy")},{type:"create"});static move=Gr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):xr(t,"move")},{type:"delete"});post(t){if(this[ln])return this.constructor.create(this[ue],t,this[Ne]);xr(this,"post")}static isCollection(t){return t?.[ln]}static coerceId(t){return t}static parseQuery(t){return g_(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&&hV[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:UN(t,this)}}return UN(t,this)}static getResource(t,r,s){let n,i=r[Ne],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[ue]===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=_[ue],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[ln]=!0),n}connect(t){let r=new ys;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}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[ue]}getContext(){return this[Ne]}};bt.prototype[Ne]=null;(0,vN._assignPackageExport)("Resource",bt);a(mV,"snake_case");A_=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(UN,"pathToId");nm=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Gr,"transactional");a(xr,"missingMethod");a(sm,"selectFromObject");a(MN,"transformForSelect")});var Mc={};Ke(Mc,{server:()=>Et});var qN,Et,rs=Te(()=>{qN=require("../index"),Et={};(0,qN._assignPackageExport)("server",Et)});var cm={};Ke(cm,{loadGQLSchema:()=>SV,start:()=>am,startOnMainThread:()=>pV});function am({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)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let V=function(I){if(I.kind==="NonNullType"){let M=V(I.type);return M.nullable=!0,M}return I.kind==="ListType"?{type:"array",elements:V(I.type)}:{type:I.name?.value}};a(V,"getProperty");let T=p.name.value,A=[],g={table:null,database:null,properties:A};E.set(T,g);for(let I of p.directives){if(I.name.value==="table"){for(let N of I.arguments)g[N.name.value]=N.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=T),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,f.push(g)}if(I.name.value==="sealed"&&(g.sealed=!0),I.name.value==="export"){g.export=!0;for(let N of I.arguments)N.name.value==="name"&&(g.export={name:N.value.value})}}let x=!1;for(let I of p.fields){let N=V(I.type);N.name=I.name.value,A.push(N);for(let M of I.directives)if(M.name.value==="primaryKey")x?console.warn("Can not define two attributes as a primary key"):(N.isPrimaryKey=!0,x=!0);else if(M.name.value==="indexed")N.indexed=!0;else if(M.name.value==="createdTime")N.assignCreatedTime=!0;else if(M.name.value==="updatedTime")N.assignUpdatedTime=!0;else if(M.name.value==="expiresAt")N.expiresAt=!0;else if(M.name.value==="allow"){let J=N.authorizedRoles=[];for(let B of M.arguments)B.name.value==="role"&&J.push(B.value.value)}}g.typeName=T,T==="Query"&&(h=g)}for(let[p,T]of E)for(let A of T.properties){let g=E.get(A.type);g&&(A.properties=g.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,om.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,om.dirname)(s)+"/"+p.name,T.tableClass)}}}var om,pV,SV,FN=Te(()=>{om=require("path");_e();a(am,"start");pV=am,SV=am({ensureTable:ft}).handleFile});async function O_(e){return TV?(Pc||(Pc=gV(AV)),(await(await Pc).import(e)).namespace):import(e)}async function gV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),Pc=new Compartment({console,Math,Date,fetch:RV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xN.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:bt,tables:Rr,databases:xe})}};let s=await(0,GN.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),Pc}function RV(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 AV(){return{Resource:bt,tables:Rr}}var GN,xN,TV,Pc,um=Te(()=>{Is();_e();GN=require("fs/promises"),xN=require("path"),TV=!1;a(O_,"secureImport");a(gV,"getCompartment");a(RV,"secureOnlyFetch");a(AV,"getGlobalVars")});var _m={};Ke(_m,{handleFile:()=>OV});async function OV(e,t,r,s){let n=new Map,i=(0,kN.pathToFileURL)(r).toString(),o=await O_(i);u(o.default)&&s.set((0,lm.dirname)(t),o.default),c(o,(0,lm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+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 kN,lm,$N=Te(()=>{kN=require("url");um();lm=require("path");a(OV,"handleFile")});var Em={};Ke(Em,{start:()=>NV});function NV({resources:e}){e.set("login",dm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dm,VN=Te(()=>{Is();a(NV,"start");dm=class extends bt{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 hm=m((C_e,WN)=>{"use strict";var{Readable:bV}=require("stream"),yV=1e4;WN.exports={streamAsJSON(e){return new fm({value:e})}};var fm=class extends bV{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),YN)}catch(n){yield YN(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);KN(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>yV?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 KN(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 YN(e){return console.error(e),JSON.stringify(e.toString())}a(YN,"handleError");function KN(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(KN,"when")});var ob=m((U_e,ib)=>{"use strict";var mm=require("recursive-iterator"),IV=require("alasql"),pm=require("clone"),QN=F(),{handleHDBError:zN,hdb_errors:wV}=z(),{HDB_ERROR_MSGS:JN,HTTP_STATUS_CODES:jN}=wV,{getDatabases:CV}=(_e(),re(be)),LV=["DISTINCT_ARRAY"],XN=Symbol("validateTables"),Sm=Symbol("validateTable"),D_e=Symbol("getAllColumns"),ZN=Symbol("validateAllColumns"),N_=Symbol("findColumn"),eb=Symbol("validateOrderBy"),vc=Symbol("validateSegment"),Tm=Symbol("validateColumn"),tb=Symbol("setColumnsForTable"),rb=Symbol("checkColumnsForAsterisk"),sb=Symbol("validateGroupBy"),nb=Symbol("hasColumns"),gm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[XN](),this[rb](),this[ZN]()}[XN](){if(this[nb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Sm](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Sm](t.table)})}}[nb](){let t=!1,r=new mm(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Sm](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=CV();if(!r[t.databaseid])throw zN(new Error,JN.SCHEMA_NOT_FOUND(t.databaseid),jN.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zN(new Error,JN.TABLE_NOT_FOUND(t.databaseid,t.tableid),jN.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=pm(n);i.table=pm(t),this.attributes.push(i)})}[N_](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)}[rb](){let t=new mm(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tb](r.tableid)}[tb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new IV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZN](){this[vc](this.statement.columns,!1),this[vc](this.statement.joins,!1),this[vc](this.statement.where,!1),this[sb](this.statement.group,!1),this[vc](this.statement.order,!0)}[vc](t,r){if(!t)return;let s=new mm(t),n=[];for(let{node:i,path:o}of s)!QN.isEmpty(i)&&!QN.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eb](i):n.push(this[Tm](i)));return n}[sb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&LV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=pm(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[N_](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[N_](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`}[eb](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[Tm](t)}[Tm](t){let r=this[N_](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]}};ib.exports=gm});var cb=m((P_e,ab)=>{"use strict";var Rm=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")}};ab.exports=Rm});var lb=m((B_e,ub)=>{"use strict";var Am=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ub.exports=Am});var b_=m((q_e,_b)=>{"use strict";var Nm=Y(),bm=R();Nm.initSync();var DV=Nm.get(bm.CONFIG_PARAMS.STORAGE_COMPRESSION),UV=Nm.get(bm.CONFIG_PARAMS.STORAGE_CACHING)!==!1,MV=bm.UPDATES_PROPERTY,Om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=DV&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=UV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===MV)}};_b.exports=Om});var I_=m((G_e,Eb)=>{"use strict";var Qo=Y(),Bc=R();Qo.initSync();var PV=Qo.get(Bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Qo.get(Bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Qo.get(Bc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",db=Qo.get(Bc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),vV=Qo.get(Bc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),y_=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=PV,this.noFSAccess=!0,db!==void 0&&(this.overlappingSync=db),this.noReadAhead=vV}};Eb.exports=y_;y_.MAX_DBS=1e4});var we=m((k_e,Ob)=>{"use strict";var Im=require("lmdb"),ss=require("fs-extra"),Ar=require("path"),w_=Ht(),mb=C(),zt=gr().LMDB_ERRORS_ENUM,C_=lb(),wm=b_(),pb=I_(),Jn=Ge(),fb=R(),{table:BV,resetDatabases:HV}=(_e(),re(be)),hb=Y(),ns=Jn.INTERNAL_DBIS_NAME,Sb=Jn.DBI_DEFINITION_NAME,qV="data.mdb",FV="lock.mdb",Hc=".mdb",GV="-lock",ym=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=kr(t,r),this.key_type=this.dbi[Jn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[Jn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function L_(e,t){if(e===void 0)throw new Error(zt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(zt.ENV_NAME_REQUIRED)}a(L_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await ss.access(e)}catch(s){throw s.code==="ENOENT"?new Error(zt.INVALID_BASE_PATH):s}try{let s=Ar.join(e,t+Hc);return await ss.access(s,ss.constants.R_OK|ss.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await ss.access(Ar.join(e,t,qV),ss.constants.R_OK|ss.constants.F_OK),Ar.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(zt.INVALID_ENVIRONMENT)}else throw new Error(zt.INVALID_ENVIRONMENT);throw s}}a(Cm,"validateEnvironmentPath");function D_(e,t){if(w_.validateEnv(e),t===void 0)throw new Error(zt.DBI_NAME_REQUIRED)}a(D_,"validateEnvDBIName");async function xV(e,t,r=!1,s=!1){L_(e,t);let n=Ar.basename(e);t=t.toString();let i=hb.get(fb.CONFIG_PARAMS.SCHEMAS);i||hb.setProperty(fb.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Cm(e,t,s),Tb(e,t,r)}catch(o){if(o.message===zt.INVALID_ENVIRONMENT){let c=Ar.join(e,t);await ss.mkdirp(s?c:e);let u=new pb(s?c:c+Hc,!1),l=Im.open(u);l.dbis=Object.create(null);let _=new wm(!1);l.openDB(ns,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Lm(e,t,r);return l[Jn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(xV,"createEnvironment");async function kV(e,t,r,s=!0){L_(e,t),t=t.toString();let n=Ar.join(e,t);return BV({table:t,database:Ar.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(kV,"copyEnvironment");async function Tb(e,t,r=!1){L_(e,t),t=t.toString();let s=Lm(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 Cm(e,t),i=Ar.join(e,t+Hc),o=n!=i,c=new pb(n,o),u=Im.open(c);u.dbis=Object.create(null);let l=Rb(u);for(let _=0;_<l.length;_++)kr(u,l[_]);return u[Jn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Tb,"openEnvironment");async function $V(e,t,r=!1){L_(e,t),t=t.toString();let s=Ar.join(e,t+Hc),n=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Lm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await gb(o),delete global.lmdb_map[i]}}await ss.remove(n),await ss.remove(n===s?n+GV:Ar.join(Ar.dirname(n),FV))}a($V,"deleteEnvironment");async function gb(e){w_.validateEnv(e);let t=e[Jn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(gb,"closeEnvironment");function Lm(e,t,r=!1){let n=`${Ar.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Lm,"getCachedEnvironmentName");function VV(e){w_.validateEnv(e);let t=Object.create(null),r=kr(e,ns);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==ns)try{t[s]=Object.assign(new C_,n)}catch{mb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(VV,"listDBIDefinitions");function Rb(e){w_.validateEnv(e);let t=[],r=kr(e,ns);for(let{key:s}of r.getRange({start:!1}))s!==ns&&t.push(s);return t}a(Rb,"listDBIs");function YV(e,t){let s=kr(e,ns).getEntry(t),n=new C_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(YV,"getDBIDefinition");function Ab(e,t,r,s=!r){if(D_(e,t),t=t.toString(),t===ns)throw new Error(zt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return kr(e,t)}catch(n){if(n.message===zt.DBI_DOES_NOT_EXIST){let i=new wm(r,s===!0),o=e.openDB(t,i),c=new C_(r===!0,s);return o[Sb]=c,kr(e,ns).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Ab,"createDBI");function kr(e,t){if(D_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==ns?r=YV(e,t):r=new C_,r===void 0)throw new Error(zt.DBI_DOES_NOT_EXIST);let s;try{let n=new wm(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(zt.DBI_DOES_NOT_EXIST):n}return s[Sb]=r,e.dbis[t]=s,s}a(kr,"openDBI");function KV(e,t){D_(e,t),t=t.toString();let r=kr(e,t),s=r.getStats();return r[Jn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(KV,"statDBI");async function WV(e,t){try{let r=Ar.join(e,t+Hc);return(await ss.stat(r)).size}catch{throw new Error(zt.INVALID_ENVIRONMENT)}}a(WV,"environmentDataSize");function QV(e,t){if(D_(e,t),t=t.toString(),t===ns)throw new Error(zt.CANNOT_DROP_INTERNAL_DBIS_NAME);kr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],kr(e,ns).removeSync(t)}a(QV,"dropDBI");function zV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{kr(e,i)}catch(o){if(o.message===zt.DBI_DOES_NOT_EXIST)Ab(e,i,i!==t,i===t),s=!0;else throw o}}s&&HV()}a(zV,"initializeDBIs");Ob.exports={openDBI:kr,openEnvironment:Tb,createEnvironment:xV,listDBIs:Rb,listDBIDefinitions:VV,createDBI:Ab,dropDBI:QV,statDBI:KV,deleteEnvironment:$V,initializeDBIs:zV,TransactionCursor:ym,environmentDataSize:WV,copyEnvironment:kV,closeEnvironment:gb}});var bb=m((V_e,Nb)=>{"use strict";var Dm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Nb.exports=Dm});var Ib=m((K_e,yb)=>{"use strict";var Um=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}};yb.exports=Um});var Cb=m((Q_e,wb)=>{"use strict";var Mm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wb.exports=Mm});var Ki=m((Z_e,Ub)=>{"use strict";var JV=we(),jV=bb(),XV=Ib(),ZV=Cb(),Ls=Ht(),qc=gr().LMDB_ERRORS_ENUM,eY=Ge(),_n=R(),tY=F(),rY=require("uuid"),J_e=require("lmdb"),{handleHDBError:sY,hdb_errors:nY}=z(),{OVERFLOW_MARKER:j_e,MAX_SEARCH_KEY_LENGTH:X_e}=eY,Lb=Y();Lb.initSync();var U_=Lb.get(_n.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Pm=_n.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yi=_n.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function iY(e,t,r,s,n=Ls.getNextMonotonicTime()){qm(e,t,r,s),vm(e,t,r);let i=new jV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];Db(l,!0,n);let _=oY(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Bm(o,c,s,i,n)}a(iY,"insertRecords");function oY(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=Ls.getIndexedValues(c),l=e.dbis[o];if(u){U_&&l.prefetch(u.map(_=>({key:_,value:n})),M_);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}U_&&e.dbis[t].prefetch([n],M_),e.dbis[t].put(n,s,s[Yi])})}a(oY,"insertRecord");function aY(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(aY,"removeSkippedRecords");function Db(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yi]))&&(e[Yi]=r||(r=Ls.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Pm]))&&(e[Pm]=r||Ls.getNextMonotonicTime()):delete e[Pm]}a(Db,"setTimestamps");function vm(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),JV.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function cY(e,t,r,s,n=Ls.getNextMonotonicTime()){qm(e,t,r,s),vm(e,t,r);let i=new XV,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Hm(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Bm(c,u,s,i,n,o)}a(cY,"updateRecords");async function uY(e,t,r,s,n=Ls.getNextMonotonicTime()){try{qm(e,t,r,s)}catch(u){throw sY(u,u.message,nY.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new ZV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;tY.isEmpty(l[t])?(_=rY.v4(),l[t]=_):_=l[t];let d=Hm(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Bm(o,c,s,i,n)}a(uY,"upsertRecords");async function Bm(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||Ls.getNextMonotonicTime(),aY(r,i),s}a(Bm,"finalizeWrite");function Hm(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(Db(r,!_,o),Number.isInteger(r[Yi])&&l[Yi]>r[Yi])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let A=l[h];if(typeof p=="function"){let x=p([[l]]);Array.isArray(x)&&(p=x[0][_n.FUNC_VAL],r[h]=p)}if(p===A)continue;let g=Ls.getIndexedValues(A);if(g){U_&&T.prefetch(g.map(x=>({key:x,value:s})),M_);for(let x=0,V=g.length;x<V;x++)T.remove(g[x],s)}if(g=Ls.getIndexedValues(p),g){U_&&T.prefetch(g.map(x=>({key:x,value:s})),M_);for(let x=0,V=g.length;x<V;x++)T.put(g[x],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yi])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Hm(e,t,r,s,n,i,o))}a(Hm,"updateUpsertRecord");function lY(e,t,r){if(Ls.validateEnv(e),t===void 0)throw new Error(qc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(qc.WRITE_ATTRIBUTES_REQUIRED):new Error(qc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(lY,"validateBasic");function qm(e,t,r,s){if(lY(e,t,r),!Array.isArray(s))throw s===void 0?new Error(qc.RECORDS_REQUIRED):new Error(qc.RECORDS_MUST_BE_ARRAY)}a(qm,"validateWrite");function M_(){}a(M_,"noop");Ub.exports={insertRecords:iY,updateRecords:cY,upsertRecords:uY}});var dn=m((tde,_Y)=>{_Y.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",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ds=m((rde,vb)=>{"use strict";var Pb=F(),Mb=R(),zo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,En=require("joi"),jn={schema_format:{pattern:zo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},dY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(zo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()).required(),EY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(zo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()),fY=En.alternatives(En.string().min(1).max(jn.schema_length.maximum).pattern(zo).messages({"string.pattern.base":"{:#label} "+jn.schema_format.message}),En.number()).required();function hY(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>jn.schema_length.maximum?`'${e}' maximum of 250 characters`:zo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(hY,"checkValidTable");function mY(e,t){return Pb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(mY,"validateSchemaExists");function pY(e,t){let r=t.state.ancestors[0].schema;return Pb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(pY,"validateTableExists");function SY(e,t){return e.toLowerCase()===Mb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Mb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(SY,"validateSchemaName");vb.exports={common_validators:jn,schema_regex:zo,hdb_schema_table:dY,validateSchemaExists:mY,validateTableExists:pY,validateSchemaName:SY,checkValidTable:hY,hdb_database:EY,hdb_table:fY}});var He=m((nde,Bb)=>{"use strict";var Jt=require("validate.js");Jt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Jt.validators.type.checks={Object:function(e){return Jt.isObject(e)&&!Jt.isArray(e)},Array:Jt.isArray,Integer:Jt.isInteger,Number:Jt.isNumber,String:Jt.isString,Date:Jt.isDate,Boolean:function(e){return typeof e=="boolean"}};Jt.validators.hasValidFileExt=function(e,t){return Jt.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};Bb.exports={validateObject:TY,validateObjectAsync:gY,validateBySchema:RY};function TY(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Jt(e,t,{format:"flat"});return r?new Error(r):null}a(TY,"validateObject");async function gY(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Jt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(gY,"validateObjectAsync");function RY(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(RY,"validateBySchema")});var P_=m((ode,Hb)=>{var{common_validators:Us}=Ds(),Gc=He(),Fc="is required",Ze={database:{presence:!1,format:Us.schema_format,length:Us.schema_length},schema:{presence:!1,format:Us.schema_format,length:Us.schema_length},table:{presence:!0,format:Us.schema_format,length:Us.schema_length},attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length},hash_attribute:{presence:!0,format:Us.schema_format,length:Us.schema_length}};function xc(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(xc,"makeAttributesStrings");function AY(e){return e=xc(e),Ze.table.presence=!1,Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,Gc.validateObject(e,Ze)}a(AY,"schema_object");function OY(e){return e=xc(e),Ze.table.presence={message:Fc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,Gc.validateObject(e,Ze)}a(OY,"table_object");function NY(e){return e=xc(e),Ze.table.presence={message:Fc},Ze.attribute.presence=!1,Gc.validateObject(e,Ze)}a(NY,"create_table_object");function bY(e){return e=xc(e),Ze.table.presence={message:Fc},Ze.attribute.presence={message:Fc},Ze.hash_attribute.presence=!1,Gc.validateObject(e,Ze)}a(bY,"attribute_object");function yY(e){return e=xc(e),Ze.table.presence={message:Fc},Ze.attribute.presence=!1,Ze.hash_attribute.presence=!1,Gc.validateObject(e,Ze)}a(yY,"describe_table");function IY(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(IY,"validateTableResidence");Hb.exports={schema_object:AY,create_table_object:NY,table_object:OY,attribute_object:bY,describe_table:yY,validateTableResidence:IY}});var Fb=m((cde,qb)=>{"use strict";var wY=require("uuid"),Fm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||wY.v4(),this.schema_table=`${this.schema}.${this.table}`}};qb.exports=Fm});var v_=m((lde,Gb)=>{"use strict";var CY=Fb(),Gm=class extends CY{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}};Gb.exports=Gm});var kb=m((dde,xb)=>{"use strict";xb.exports=DY;var LY="inserted";function DY(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===LY?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(DY,"returnObject")});var B_=m((fde,Wb)=>{"use strict";var UY=R(),xm=we(),MY=Ki(),{getSystemSchemaPath:PY,getSchemaPath:vY}=De(),BY=dn(),HY=P_(),qY=v_(),FY=kb(),{handleHDBError:$b,hdb_errors:Yb}=z(),Vb=F(),{HTTP_STATUS_CODES:GY}=Yb,km=BY.hdb_attribute,Kb=[];for(let e=0;e<km.attributes.length;e++)Kb.push(km.attributes[e].attribute);var xY="inserted";Wb.exports=kY;async function kY(e){let t=HY.attribute_object(e);if(t)throw $b(new Error,t.message,Yb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Vb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $b(new Error,r,GY.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Vb.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 qY(e.schema,e.table,e.attribute,e.id);try{let i=await xm.openEnvironment(vY(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}`);xm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await xm.openEnvironment(PY(),UY.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await MY.insertRecords(o,km.hash_attribute,Kb,[n]);return FY(xY,c,{records:[n]},u)}catch(i){throw i}}a(kY,"lmdbCreateAttribute")});var Vm=m((mde,zb)=>{var{hdb_table:$Y,hdb_database:Qb}=Ds(),VY=He(),$m=require("joi"),YY={undefined:"undefined",null:"null"},KY=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||YY[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"),WY=$m.object({database:Qb,schema:Qb,table:$Y,records:$m.array().items($m.object().custom(KY)).required()});zb.exports=function(e){return VY.validateBySchema(e,WY)}});var kc=m((Tde,jb)=>{"use strict";var fn=F(),Jb=C(),Sde=Vm(),{getDatabases:QY}=(_e(),re(be)),{ClientError:Wi}=z();jb.exports=zY;function zY(e){if(fn.isEmpty(e))throw new Wi("invalid update parameters defined.");if(fn.isEmptyOrZeroLength(e.schema))throw new Wi("invalid schema specified.");if(fn.isEmptyOrZeroLength(e.table))throw new Wi("invalid table specified.");if(!Array.isArray(e.records))throw new Wi("records must be an array");let t=QY()[e.schema]?.[e.table];if(fn.isEmpty(t))throw new Wi(`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&&fn.isEmptyOrZeroLength(o[r]))throw Jb.error("a valid hash attribute must be provided with update record:",o),new Wi("a valid hash attribute must be provided with update record, check log for more info");if(!fn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Jb.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wi(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!fn.isEmpty(o[r])&&o[r]!==""&&s.has(fn.autoCast(o[r]))&&(o.skip=!0),s.add(fn.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(zY,"insertUpdateValidate")});var $c=m((Rde,Xb)=>{"use strict";var JY=R().OPERATIONS_ENUM,Ym=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=JY.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};Xb.exports=Ym});var Wc=m((Nde,Zb)=>{"use strict";var Ode=$c(),H_=R(),Wm=F(),Km=C(),jY=require("uuid"),{handleHDBError:Vc,hdb_errors:XY}=z(),{HDB_ERROR_MSGS:Yc,HTTP_STATUS_CODES:Kc}=XY;Zb.exports=ZY;function ZY(e,t,r){for(let n=0;n<t.length;n++)eK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];tK(i,r,e.operation)}}a(ZY,"processRows");function eK(e){if(Buffer.byteLength(String(e))>H_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Vc(new Error,Yc.ATTR_NAME_LENGTH_ERR(e),Kc.BAD_REQUEST,void 0,void 0,!0);if(Wm.isEmptyOrZeroLength(e)||Wm.isEmpty(e.trim()))throw Vc(new Error,Yc.ATTR_NAME_NULLISH_ERR,Kc.BAD_REQUEST,void 0,void 0,!0)}a(eK,"validateAttribute");function tK(e,t,r){if(!e.hasOwnProperty(t)||Wm.isEmptyOrZeroLength(e[t])){if(r===H_.OPERATIONS_ENUM.INSERT||r===H_.OPERATIONS_ENUM.UPSERT){e[t]=jY.v4();return}throw Km.error("Update transaction aborted due to record with no hash value:",e),Vc(new Error,Yc.RECORD_MISSING_HASH_ERR,Kc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>H_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Km.error(e),Vc(new Error,Yc.HASH_VAL_LENGTH_ERR,Kc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Km.error(e),Vc(new Error,Yc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Kc.BAD_REQUEST,void 0,void 0,!0)}a(tK,"validateHash")});var ty=m((yde,ey)=>{"use strict";var Qm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ey.exports=Qm});var ny=m((wde,sy)=>{"use strict";var zm=we(),rK=C(),ry=gr().LMDB_ERRORS_ENUM;sy.exports=sK;async function sK(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 zm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ry.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await zm.closeEnvironment(global.lmdb_map[s]),await zm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==ry.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){rK.error(t)}}a(sK,"cleanLMDBMap")});var hn=m((Lde,cy)=>{"use strict";var Qc=require("crypto"),nK=Y(),{CONFIG_PARAMS:iK}=R(),oy="aes-256-cbc",oK=32,aK=16,Jm=64,ay=32,cK=Jm+ay,iy=new Map;cy.exports={encrypt:uK,decrypt:lK,createNatsTableStreamName:_K};function uK(e){let t=Qc.randomBytes(oK),r=Qc.randomBytes(aK),s=Qc.createCipheriv(oy,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(uK,"encrypt");function lK(e){let t=e.substr(0,Jm),r=e.substr(Jm,ay),s=e.substr(cK,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Qc.createDecipheriv(oy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(lK,"decrypt");function _K(e,t){let r=nK.get(iK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=iy.get(r);return s||(s=Qc.createHash("md5").update(r).digest("hex"),iy.set(r,s)),s}a(_K,"createNatsTableStreamName")});var Xn=m((Mde,ly)=>{"use strict";var Ude=jt(),q_=C(),uy=P_(),dK=hn(),F_=F(),{handleHDBError:G_,hdb_errors:EK}=z(),{HDB_ERROR_MSGS:x_,HTTP_STATUS_CODES:jm}=EK,fK=Y();fK.initSync();var{getDatabases:Xm}=(_e(),re(be));ly.exports={describeAll:hK,describeTable:k_,describeSchema:mK};async function hK(e){try{let t=F_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Xm(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await k_({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await k_({schema:l,table:d},f)}E&&c.push(E)}catch(E){q_.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return q_.error("Got an error in describeAll"),q_.error(t),G_(new Error,x_.DESCRIBE_ALL_ERR)}}a(hK,"describeAll");async function k_(e,t){F_.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=uy.describe_table(e);if(i)throw i;let c=Xm()[r];if(!c)throw G_(new Error,x_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let u=c[s];if(!u)throw G_(new Error,x_.TABLE_NOT_FOUND(e.schema,e.table),jm.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=dK.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){q_.warn(`unable to stat table dbi due to ${d}`)}return _}a(k_,"descTable");async function mK(e){F_.transformReq(e);let t=uy.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=Xm()[s];if(!i)throw G_(new Error,x_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let l=await k_({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(mK,"describeSchema")});var $r=m((Hde,hy)=>{var pK=dn(),{callbackify:dy,promisify:SK}=require("util"),{getDatabases:Ey}=(_e(),re(be));hy.exports={setSchemaDataToGlobal:_y,getTableSchema:TK,getSystemSchema:gK,setSchemaDataToGlobalAsync:SK(_y)};var fy=Xn(),vde=dy(fy.describeAll),Bde=dy(fy.describeTable);function _y(e){global.hdb_schema=Ey(),e&&e()}a(_y,"setSchemaDataToGlobal");function TK(e,t,r){let s=Ey()[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(TK,"getTableSchema");function gK(){return pK}a(gK,"getSystemSchema")});var Xt=m((Fde,Ty)=>{"use strict";var V_=Vm(),yt=F(),RK=require("util"),Y_=Vr(),AK=$r(),my=C(),{handleHDBError:Qi,hdb_errors:OK}=z(),{HTTP_STATUS_CODES:zi}=OK,NK=RK.promisify(AK.getTableSchema),bK="updated",py="inserted",Sy="upserted";Ty.exports={insert:IK,update:wK,upsert:CK,validation:yK,flush:LK};async function yK(e){if(yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await NK(e.schema,e.table),r=V_(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&&yt.isEmptyOrZeroLength(c[s]))throw my.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!yt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw my.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!yt.isEmpty(c[s])&&c[s]!==""&&n.has(yt.autoCast(c[s]))&&(c.skip=!0),n.add(yt.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(yK,"validation");async function IK(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=V_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await Y_.createRecords(e);return $_(py,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(IK,"insertData");async function wK(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=V_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await Y_.updateRecords(e);return yt.isEmpty(s.existing_rows)?$_(bK,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):$_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(wK,"updateData");async function CK(e){if(e.operation!=="upsert")throw Qi(new Error,"invalid operation, must be upsert",zi.INTERNAL_SERVER_ERROR);let t=V_(e);if(t)throw Qi(new Error,t.message,zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qi(new Error,r,zi.BAD_REQUEST);let s=await Y_.upsertRecords(e);return $_(Sy,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(CK,"upsertData");function $_(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===py?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Sy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a($_,"returnObject");function LK(e){return yt.transformReq(e),Y_.flush(e.schema,e.table)}a(LK,"flush")});var ep=m((xde,Ay)=>{var DK=He(),Zm=require("joi"),{hdb_table:UK,hdb_database:gy}=Ds(),Ry={schema:gy,database:gy,table:UK},MK={date:Zm.date().iso().required()},PK={timestamp:Zm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ay.exports=function(e,t){let r=t==="timestamp"?{...Ry,...PK}:{...Ry,...MK},s=Zm.object(r);return DK.validateBySchema(e,s)}});var by=m((kde,Ny)=>{var vK=He(),tp=require("joi"),{hdb_table:BK,hdb_database:Oy}=Ds(),HK=tp.object({schema:Oy,database:Oy,table:BK,hash_values:tp.array().required(),ids:tp.array()});Ny.exports=function(e){return vK.validateBySchema(e,HK)}});var ip=m(($de,yy)=>{"use strict";var rp=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}},sp=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}},np=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yy.exports={InsertObject:rp,NoSQLSeachObject:sp,DeleteResponseObject:np}});var Xi=m((Yde,Dy)=>{"use strict";var wy=ep(),qK=by(),Ji=F(),Iy=require("moment"),Cy=C(),{promisify:FK,callbackify:GK}=require("util"),ji=R(),xK=$r(),op=FK(xK.getTableSchema),ap=Vr(),{DeleteResponseObject:kK}=ip(),{handleHDBError:Zn,hdb_errors:$K}=z(),{HDB_ERROR_MSGS:K_,HTTP_STATUS_CODES:ei}=$K,VK="records successfully deleted",YK=GK(Ly);Dy.exports={delete:YK,deleteRecord:Ly,deleteFilesBefore:KK,deleteAuditLogsBefore:WK};async function KK(e){let t=wy(e,"date");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Ji.transformReq(e),!Iy(e.date,Iy.ISO_8601).isValid())throw Zn(new Error,K_.INVALID_DATE,ei.BAD_REQUEST,ji.LOG_LEVELS.ERROR,K_.INVALID_DATE,!0);let s=Ji.checkSchemaTableExist(e.schema,e.table);if(s)throw Zn(new Error,s,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,s,!0);let n=await ap.deleteRecordsBefore(e);if(await op(e.schema,e.table),Cy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(KK,"deleteFilesBefore");async function WK(e){let t=wy(e,"timestamp");if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);if(Ji.transformReq(e),isNaN(e.timestamp))throw Zn(new Error,K_.INVALID_VALUE("Timestamp"),ei.BAD_REQUEST,ji.LOG_LEVELS.ERROR,K_.INVALID_VALUE("Timestamp"),!0);let r=Ji.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,r,!0);let s=await ap.deleteAuditLogsBefore(e);return await op(e.schema,e.table),Cy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(WK,"deleteAuditLogsBefore");async function Ly(e){e.ids&&(e.hash_values=e.ids);let t=qK(e);if(t)throw Zn(t,t.message,ei.BAD_REQUEST,void 0,void 0,!0);Ji.transformReq(e);let r=Ji.checkSchemaTableExist(e.schema,e.table);if(r)throw Zn(new Error,r,ei.NOT_FOUND,ji.LOG_LEVELS.ERROR,r,!0);try{await op(e.schema,e.table);let s=await ap.deleteRecords(e);return Ji.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${VK}`),s}catch(s){if(s.message===ji.SEARCH_NOT_FOUND_MESSAGE){let n=new kK;return n.message=ji.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Ly,"deleteRecord")});var W_=m((Wde,Py)=>{var QK=require("crypto"),Uy=9;function zK(e){let t=jK(Uy),r=My(e+t);return t+r}a(zK,"createHash");function JK(e,t){let r=e.substr(0,Uy),s=r+My(t+r);return e===s}a(JK,"validateHash");function jK(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(jK,"generateSalt");function My(e){return QK.createHash("md5").update(e).digest("hex")}a(My,"md5");Py.exports={hash:zK,validate:JK}});var By=m((zde,vy)=>{var cp=He(),qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function XK(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,cp.validateObject(e,qt)}a(XK,"addUserValidation");function ZK(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,cp.validateObject(e,qt)}a(ZK,"alterUserValidation");function e1(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,cp.validateObject(e,qt)}a(e1,"dropUserValidation");vy.exports={addUserValidation:XK,alterUserValidation:ZK,dropUserValidation:e1}});var Me=m((Xde,qy)=>{"use strict";var{platform:jde}=require("os"),t1="nats-server.zip",up="nats-server",r1=process.platform==="win32"?`${up}.exe`:up,lp="HDB",s1=/^[^\s.,*>]+$/,Hy="__request__",n1=a(e=>`${e}.${Hy}`,"REQUEST_SUBJECT"),i1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},o1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},a1={HUB:"hub.pid",LEAF:"leaf.pid"},c1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},u1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:lp,deliver_subject:"__HDB__.WORKQUEUE"},l1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:lp,deliver_subject:"HDB.SCHEMAQUEUE"},_1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:lp,deliver_subject:"HDB.USERQUEUE"},d1={SUCCESS:"success",ERROR:"error"},E1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},f1={TXN:"txn",MSGID:"msgid"},Jo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},h1={[Jo.ERR]:1,[Jo.WRN]:2,[Jo.INF]:3,[Jo.DBG]:4,[Jo.TRC]:5},m1={debug:"-D",trace:"-DVV"};qy.exports={NATS_SERVER_ZIP:t1,NATS_SERVER_NAME:up,NATS_BINARY_NAME:r1,PID_FILES:a1,NATS_CONFIG_FILES:o1,SERVER_SUFFIX:c1,WORK_QUEUE_CONSUMER_NAMES:u1,SCHEMA_QUEUE_CONSUMER_NAMES:l1,USER_QUEUE_CONSUMER_NAMES:_1,NATS_TERM_CONSTRAINTS_RX:s1,REQUEST_SUFFIX:Hy,UPDATE_REMOTE_RESPONSE_STATUSES:d1,CLUSTER_STATUS_STATUSES:E1,REQUEST_SUBJECT:n1,SUBJECT_PREFIXES:f1,MSG_HEADERS:i1,LOG_LEVELS:Jo,LOG_LEVEL_FLAGS:m1,LOG_LEVEL_HIERARCHY:h1}});var _p=m((eEe,Fy)=>{"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";Fy.exports={CERTIFICATE_VALUES:p1,CERTIFICATE_PEM_NAME:S1,PRIVATEKEY_PEM_NAME:T1,CA_PEM_NAME:g1}});var Ep=m((rEe,Yy)=>{"use strict";var $y=require("fs-extra"),se=require("joi"),R1=require("os"),{boolean:ge,string:pn,number:Or,array:dp}=se.types(),{totalmem:Gy}=require("os"),jo=require("path"),A1=C(),z_=F(),tEe=_p(),xy=R(),O1=He(),ky="log",N1="components",b1="Invalid logging.rotation.maxSize unit. Available units are G, M or K",y1="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",I1="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",w1="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",C1="rootPath config parameter is undefined",L1="clustering.enabled config parameter is undefined",mn=Or.min(0).required(),J_=dp.items({host:pn.required(),port:mn}).empty(null),Sn;Yy.exports={configValidator:D1,routesValidator:H1,route_constraints:J_};function D1(e){if(Sn=e.rootPath,z_.isEmpty(Sn))throw C1;let t=ge.required(),r=se.valid("production","development").required(),s=Or.min(0).max(1e3).empty(null).default(B1),n=pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Q_),i=se.custom(U1).messages({"any.custom":"{:#label} {:#error}"}),o=pn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=se.string().empty(null).default(Q_),u=se.custom(M1).empty(null).default(Q_),l=e.clustering?.enabled;if(z_.isEmpty(l))throw L1;let _;return l===!0?_=se.object({enabled:t,hubServer:se.object({cluster:se.object({name:se.required().empty(null),network:se.object({port:mn,routes:J_}).required()}).required(),leafNodes:se.object({network:se.object({port:mn}).required()}).required(),network:se.object({port:mn}).required()}).required(),leafServer:se.object({network:se.object({port:mn,routes:J_}).required(),streams:se.object({maxAge:Or.min(120).allow(null).optional(),maxBytes:Or.min(1).allow(null).optional(),maxMsgs:Or.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:se.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:ge.optional(),databaseLevel:ge.optional(),tls:se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ge.required(),verify:ge.optional()}),user:pn.optional().empty(null)}).required():_=se.object({enabled:t,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:ge.required()})}).required(),se.object({authentication:se.object({authorizeLocal:ge,cacheTTL:Or.required(),enableSessions:ge,operationTokenTimeout:se.required(),refreshTokenTimeout:se.required()}),analytics:se.object({aggregatePeriod:Or}),clustering:_,customFunctions:se.object({enabled:t,network:se.object({cors:ge.required(),corsAccessList:dp.required(),headersTimeout:Or.min(1).required(),https:ge.required(),keepAliveTimeout:Or.min(1).required(),port:mn,timeout:Or.min(1).required()}),nodeEnv:r,root:n,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:se.object({enabled:t}).required(),logging:se.object({auditAuthEvents:se.object({logFailed:ge,logSuccessful:ge}),file:ge.required(),level:se.valid("notify","fatal","error","warn","info","debug","trace"),rotation:se.object({enabled:ge.optional(),compress:ge.optional(),interval:pn.custom(v1).optional().empty(null),maxSize:pn.custom(P1).optional().empty(null),path:pn.optional().empty(null).default(Q_)}).required(),root:n,stdStreams:ge.required(),auditLog:ge.required()}).required(),operationsApi:se.object({foreground:ge.required(),network:se.object({cors:ge.required(),corsAccessList:dp.required(),headersTimeout:Or.min(1).required(),https:ge.required(),keepAliveTimeout:Or.min(1).required(),port:mn,timeout:Or.min(1).required()}).required(),nodeEnv:r,tls:se.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:se.object({network:se.object({port:mn,securePort:mn}).required(),webSocket:ge.optional(),requireAuthentication:ge.optional()}),http:se.object({threads:s}).required(),storage:se.object({writeAsync:ge.required(),overlappingSync:ge.optional(),caching:ge.optional(),compression:ge.optional(),noReadAhead:ge.optional(),path:u,prefetchWrites:ge.optional()}).required(),ignoreScripts:ge.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(D1,"configValidator");function Vy(e){return $y.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Vy,"doesPathExist");function U1(e,t){if(e===null)return;let r=Vy(e);return r?t.message(r):e}a(U1,"validatePemFile");function M1(e,t){se.assert(e,pn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Vy(e);if(r)return t.message(r)}a(M1,"validatePath");function P1(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(b1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(I1):e}a(P1,"validateRotationMaxSize");function v1(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(y1);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(w1):e}a(v1,"validateRotationInterval");function B1(e,t){let r=t.state.path.join("."),s=R1.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Gy();return i=Math.round(Math.min(i,Gy())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),A1.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(B1,"setDefaultThreads");function Q_(e,t){if(!z_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(z_.isEmpty(Sn))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return jo.join(Sn,N1);case"logging.root":return jo.join(Sn,ky);case"clustering.leafServer.streams.path":return jo.join(Sn,"clustering","leaf");case"storage.path":let s=jo.join(Sn,xy.LEGACY_DATABASES_DIR_NAME);return $y.existsSync(s)?s:jo.join(Sn,xy.DATABASES_DIR_NAME);case"logging.rotation.path":return jo.join(Sn,ky);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Q_,"setDefaultRoot");function H1(e){let t=se.object({routes:J_});return O1.validateBySchema({routes:e},t)}a(H1,"routesValidator")});var et=m((iEe,tI)=>{"use strict";var Yr=R(),At=F(),ht=C(),{configValidator:q1,routesValidator:Ky}=Ep(),Zt=require("fs-extra"),F1=require("yaml"),is=require("path"),G1=require("is-number"),Qy=require("properties-reader"),x1=require("lodash"),{handleHDBError:k1}=z(),{HTTP_STATUS_CODES:$1,HDB_ERROR_MSGS:j_}=gr(),nEe=require("minimist"),{server:V1}=(rs(),re(Mc)),{SCHEMAS_PARAM_CONFIG:zc,CONFIG_PARAMS:ti,CONFIG_PARAM_MAP:Tn}=Yr,Y1="Unable to get config value because config is uninitialized",K1="Config successfully initialized",W1="Error backing up config file",Q1="Empty parameter sent to getConfigValue",zy=is.join(Yr.PACKAGE_ROOT,"config","yaml",Yr.HDB_DEFAULT_CONFIG_FILE),z1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Wy={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"},X_,It;tI.exports={createConfigFile:J1,getDefaultConfig:j1,getConfigValue:jy,initConfig:Xy,flattenConfig:eo,updateConfigValue:Zy,updateConfigObject:Z1,getConfiguration:rW,setConfiguration:sW,readConfigFile:mp,getClusteringRoutes:nW,initOldConfig:eI,getConfigFromFile:iW,getConfigFilePath:Zi,addConfig:oW,deleteConfigFromFile:aW};function J1(e){let t=ri(zy);X_=eo(t.toJSON());let r;for(let o in e){let c=Tn[o.toLowerCase()];if(c===ti.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=fp(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){ht.error(_)}}}r&&Jy(t,r),hp(t);let s=t.toJSON();It=eo(s);let n=t.getIn(["rootPath"]),i=is.join(n,Yr.HDB_CONFIG_FILE);Zt.createFileSync(i),Zt.writeFileSync(i,String(t)),ht.trace(`Config file written to ${i}`)}a(J1,"createConfigFile");function Jy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!At.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=[ti.SCHEMAS,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=[ti.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){ht.error("Error parsing schemas CLI/env config arguments",s)}}a(Jy,"setSchemasConfig");function j1(e){if(X_===void 0){let r=ri(zy);X_=eo(r.toJSON())}let t=Tn[e.toLowerCase()];if(t!==void 0)return X_[t.toLowerCase()]}a(j1,"getDefaultConfig");function jy(e){if(e==null){ht.error(Q1);return}if(It===void 0){ht.trace(Y1);return}let t=Tn[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(jy,"getConfigValue");function Zi(e=At.getPropsFilePath()){let t=At.getEnvCliRootPath();return t?is.join(t,Yr.HDB_CONFIG_FILE):Qy(e).get(Yr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Zi,"getConfigFilePath");function Xy(e=!1){if(It===void 0||e){let t;if(!At.noBootFile()){t=At.getPropsFilePath();try{Zt.accessSync(t,Zt.constants.F_OK|Zt.constants.R_OK)}catch(i){throw ht.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Zi(t),s;if(r.includes("config/settings.js"))try{eI(r);return}catch(i){if(i.code!==Yr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ri(r)}catch(i){if(i.code===Yr.NODE_ERROR_CODES.ENOENT){ht.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 ht.error(i),new Error(`Error reading HarperDB config file at ${r}`)}X1(s,r),hp(s);let n=s.toJSON();if(V1.config=n,It=eo(n),It.logging_rotation_rotate)for(let i in Wy)It[i]&&ht.error(`Config ${Wy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ht.trace(K1)}}a(Xy,"initConfig");function X1(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],is.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],is.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],is.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(ht.trace("Updating config file with missing config params"),Zt.writeFileSync(t,String(e)))}a(X1,"checkForUpdatedConfig");function hp(e){let t=e.toJSON(),r=q1(t);if(r.error)throw j_.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),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(hp,"validateConfig");function Z1(e,t){It===void 0&&(It={});let r=Tn[e.toLowerCase()];if(r===void 0){ht.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(Z1,"updateConfigObject");function Zy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Xy();let o=jy(Tn.hdb_root),c=is.join(o,Yr.HDB_CONFIG_FILE),u=ri(c),l;if(r===void 0&&e.toLowerCase()===ti.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Tn[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=fp(E,t);u.setIn([...f],h)}else for(let E in r){let f=Tn[E.toLowerCase()];if(f===ti.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=fp(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){ht.error(T)}}}l&&Jy(u,l),hp(u);let _=u.getIn(["rootPath"]),d=is.join(_,Yr.HDB_CONFIG_FILE);s===!0&&eW(c,_),Zt.writeFileSync(d,String(u)),n&&(It=eo(u.toJSON())),ht.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Zy,"updateConfigValue");function eW(e,t){try{let r=is.join(t,"backup",`${Yr.HDB_CONFIG_FILE}.bak`);Zt.copySync(e,r),ht.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ht.error(W1),ht.error(r)}}a(eW,"backupConfigFile");var tW=["schemas"];function eo(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!tW.includes(r)){let s=eo(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(eo,"flattenConfig");function fp(e,t){if(e===ti.CLUSTERING_NODENAME||e===ti.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(G1(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||At.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 At.autoCast(t)}a(fp,"castConfigValue");function rW(){let e=At.getPropsFilePath(),t=Zi(e);return ri(t).toJSON()}a(rW,"getConfiguration");async function sW(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Zy(void 0,void 0,n,!0),z1}catch(i){throw typeof i=="string"||i instanceof String?k1(i,i,$1.BAD_REQUEST,void 0,void 0,!0):i}}a(sW,"setConfiguration");function mp(){let e=At.getPropsFilePath();try{Zt.accessSync(e,Zt.constants.F_OK|Zt.constants.R_OK)}catch(s){if(!At.noBootFile())throw ht.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Zi(e);return ri(t).toJSON()}a(mp,"readConfigFile");function ri(e){return F1.parseDocument(Zt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ri,"parseYamlDoc");function nW(){let e=mp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=At.isEmptyOrZeroLength(t)?[]:t;let r=Ky(t);if(r)throw j_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=At.isEmptyOrZeroLength(s)?[]:s;let n=Ky(s);if(n)throw j_.CONFIG_VALIDATION(n.message);if(!At.isEmptyOrZeroLength(s)&&!At.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!At.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw j_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(nW,"getClusteringRoutes");function eI(e){let t=Qy(e);It={};for(let r in Tn){let s=t.get(r.toUpperCase());if(At.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Tn[r].toLowerCase();n===ti.LOGGING_ROOT?It[n]=is.dirname(s):It[n]=s}return It}a(eI,"initOldConfig");function iW(e){let t=mp();return x1.get(t,e.replaceAll("_","."))}a(iW,"getConfigFromFile");async function oW(e,t){let r=ri(Zi());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Zt.writeFile(Zi(),String(r))}a(oW,"addConfig");function aW(e){let t=Zi(At.getPropsFilePath()),r=ri(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=is.join(s,Yr.HDB_CONFIG_FILE);Zt.writeFileSync(n,String(r))}a(aW,"deleteConfigFromFile")});var sI=m((aEe,rI)=>{"use strict";var Z_=R(),ed=class{static{a(this,"BaseLicense")}constructor(t=0,r=Z_.RAM_ALLOCATION_ENUM.DEFAULT,s=Z_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},pp=class extends ed{static{a(this,"ExtendedLicense")}constructor(t=0,r=Z_.RAM_ALLOCATION_ENUM.DEFAULT,s=Z_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rI.exports={BaseLicense:ed,ExtendedLicense:pp}});var Jc=m((uEe,uI)=>{"use strict";var Zo=require("fs-extra"),nI=W_(),iI=require("crypto"),cW=require("moment"),uW=require("uuid").v4,Ft=C(),Tp=require("path"),lW=F(),si=R(),_W=sI().ExtendedLicense,Xo="invalid license key format",dW="061183",EW="mofi25",fW="aes-256-cbc",hW=16,mW=32,oI=Y();oI.initSync();var Sp;uI.exports={validateLicense:aI,generateFingerPrint:SW,licenseSearch:cI,getLicense:RW};function gp(){return Tp.join(oI.getHdbBasePath(),si.LICENSE_KEY_DIR_NAME,si.LICENSE_FILE_NAME)}a(gp,"getLicenseDirPath");function pW(){let e=gp();return Tp.join(e,si.LICENSE_FILE_NAME)}a(pW,"getLicenseFilePath");function Rp(){let e=gp();return Tp.join(e,si.REG_KEY_FILE_NAME)}a(Rp,"getFingerPrintFilePath");async function SW(){let e=Rp();try{return await Zo.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await TW();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(SW,"generateFingerPrint");async function TW(){let e=uW(),t=nI.hash(e),r=Rp();try{await Zo.mkdirp(gp()),await Zo.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(TW,"writeFingerprint");function aI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:si.RAM_ALLOCATION_ENUM.DEFAULT,version:si.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Rp(),n=!1;try{n=Zo.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=Zo.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(EW),c=o[1];c=Buffer.concat([Buffer.from(c)],hW);let u=Buffer.concat([Buffer.from(i)],mW),l=iI.createDecipheriv(fW,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 f=gW(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Xo),Ft.error(Xo),new Error(Xo)}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(Xo),Ft.error(Xo),new Error(Xo)}else r.exp_date=_;r.exp_date<cW().valueOf()&&(r.valid_date=!1),nI.validate(o[1],`${dW}${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||Ft.error("Invalid licence"),r}a(aI,"validateLicense");function gW(e,t){try{let r=iI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(gW,"checkOldLicense");function cI(){let e=new _W,t=[];try{t=Zo.readFileSync(pW(),"utf-8").split(si.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(lW.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=aI(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){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=si.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Sp=e,e}a(cI,"licenseSearch");async function RW(){return Sp||await cI(),Sp}a(RW,"getLicense")});var er=m((fEe,bI)=>{"use strict";var fI="username is required",hI="nothing to update, must supply active, role or password to update",mI="password cannot be an empty string",pI="If role is specified, it cannot be empty.",SI="active must be true or false";bI.exports={addUser:LW,alterUser:DW,dropUser:MW,getSuperUser:HW,userInfo:PW,listUsers:rd,listUsersExternal:vW,setUsersToGlobal:ta,findAndValidateUser:NI,getClusterUser:qW,USERNAME_REQUIRED:fI,ALTERUSER_NOTHING_TO_UPDATE:hI,EMPTY_PASSWORD:mI,EMPTY_ROLE:pI,ACTIVE_BOOLEAN:SI};var TI=Xt(),AW=Xi(),Op=W_(),gI=By(),RI=jt(),Np=gn(),Nr=F(),AI=require("validate.js"),de=C(),{promisify:OW}=require("util"),bp=hn(),lI=R(),_I=Me(),NW=et(),_Ee=Y(),dEe=Jc(),bW=dn(),{table:EEe}=(_e(),re(be)),{handleHDBError:Ms,hdb_errors:yW}=z(),{HTTP_STATUS_CODES:Ps,AUTHENTICATION_ERROR_MSGS:Ap,HDB_ERROR_MSGS:ea}=yW,{UserEventMsg:yp}=os(),dI=require("lodash"),{_assignPackageExport:IW}=require("../index");IW("getUser",NI);var OI={username:!0,active:!0,role:!0,password:!0},EI=new Map,td=RI.searchByValue,wW=RI.searchByHash,CW=OW(AW.delete);async function LW(e){let t=AI.cleanAttributes(e,OI),r=gI.addUserValidation(t);if(r)throw Ms(new Error,r.message,Ps.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 td(s),n=n&&Array.from(n)}catch(u){throw de.error("There was an error searching for a role in add user"),de.error(u),u}if(!n||n.length<1)throw Ms(new Error,ea.ROLE_NAME_NOT_FOUND(t.role),Ps.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Ms(new Error,ea.DUP_ROLES_FOUND(t.role),Ps.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bp.encrypt(t.password)),t.password=Op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await TI.insert(i)}catch(u){throw de.error("There was an error searching for a user."),de.error(u),u}de.debug(o);try{await ta()}catch(u){throw de.error("Got an error setting users to global"),de.error(u),u}if(o.skipped_hashes.length===1)throw Ms(new Error,ea.USER_ALREADY_EXISTS(t.username),Ps.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Np.signalUserChange(new yp(process.pid)),`${c.username} successfully added`}a(LW,"addUser");async function DW(e){let t=AI.cleanAttributes(e,OI);if(Nr.isEmptyOrZeroLength(t.username))throw new Error(fI);if(Nr.isEmptyOrZeroLength(t.password)&&Nr.isEmptyOrZeroLength(t.role)&&Nr.isEmptyOrZeroLength(t.active))throw new Error(hI);if(!Nr.isEmpty(t.password)&&Nr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mI);if(!Nr.isEmpty(t.active)&&!Nr.isBoolean(t.active))throw new Error(SI);let r=UW(t.username);if(!Nr.isEmpty(t.password)&&!Nr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bp.encrypt(t.password)),t.password=Op.hash(t.password)),t.role==="")throw new Error(pI);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 td(i)||[])}catch(c){throw de.error("Got an error searching for a role."),de.error(c),c}if(!o||o.length===0){let c=ea.ALTER_USER_ROLE_NOT_FOUND(t.role);throw de.error(c),Ms(new Error,c,Ps.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ea.ALTER_USER_DUP_ROLES(t.role);throw de.error(c),Ms(new Error,c,Ps.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 TI.update(s)}catch(i){throw de.error("Error during update."),de.error(i),i}try{await ta()}catch(i){throw de.error("Got an error setting users to global"),de.error(i),i}return Np.signalUserChange(new yp(process.pid)),n}a(DW,"alterUser");function UW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(UW,"isClusterUser");async function MW(e){try{let t=gI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(Nr.isEmpty(global.hdb_users.get(e.username)))throw Ms(new Error,ea.USER_NOT_EXIST(e.username),Ps.NOT_FOUND,void 0,void 0,!0);let s;try{s=await CW(r)}catch(n){throw de.error("Got an error deleting a user."),de.error(n),n}de.debug(s);try{await ta()}catch(n){throw de.error("Got an error setting users to global."),de.error(n),n}return Np.signalUserChange(new yp(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(MW,"dropUser");async function PW(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 wW(r)}catch(n){throw de.error("Got an error searching for a role."),de.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw de.error(r),r}return t}a(PW,"userInfo");async function vW(){let e;try{e=await rd()}catch(t){throw de.error("Got an error listing users."),de.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(vW,"listUsersExternal");async function rd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await td(e)}catch(o){throw de.error("Got an error searching for roles."),de.error(o),o}let r={};for(let o of t)r[o.id]=dI.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 td(s)}catch(o){throw de.error("Got an error searching for users."),de.error(o),o}let i=new Map;for(let o of n)o=dI.cloneDeep(o),o.role=r[o.role],BW(o.role),i.set(o.username,o);return i}catch(e){throw de.error("got an error listing users"),de.error(e),Nr.errorizeMessage(e)}return null}a(rd,"listUsers");function BW(e){try{if(!e){de.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(bW)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){de.error("Got an error trying to set system permissions."),de.error(t)}}a(BW,"appendSystemTablesToRole");async function ta(){try{let e=await rd();global.hdb_users=e}catch(e){throw de.error(e),e}}a(ta,"setUsersToGlobal");async function NI(e,t,r=!0){global.hdb_users||await ta();let s=global.hdb_users.get(e);if(!s)throw Ms(new Error,Ap.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Ms(new Error,Ap.USER_INACTIVE,Ps.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(EI.get(t)===s.password)return n;if(Op.validate(s.password,t))EI.set(t,s.password);else throw Ms(new Error,Ap.GENERIC_AUTH_FAIL,Ps.UNAUTHORIZED,void 0,void 0,!0)}return n}a(NI,"findAndValidateUser");async function HW(){global.hdb_users||await ta();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(HW,"getSuperUser");async function qW(){let e=await rd(),t=NW.getConfigFromFile(lI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!Nr.isEmpty(r)&&r?.role?.role===lI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=bp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_I.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_I.SERVER_SUFFIX.ADMIN,r}a(qW,"getClusterUser")});var Xc=m((SEe,CI)=>{"use strict";var to=C(),br=R(),FW=ny(),mEe=$r(),pEe=Xn(),GW=er(),{validateEvent:yI}=os(),jc=Vr(),xW=require("process"),{resetDatabases:kW}=(_e(),re(be)),$W={[br.ITC_EVENT_TYPES.SCHEMA]:VW,[br.ITC_EVENT_TYPES.USER]:wI};async function VW(e){let t=yI(e);if(t){to.error(t);return}to.trace("ITC schemaHandler received schema event:",e),await FW(e.message),await YW(e.message)}a(VW,"schemaHandler");async function YW(e){try{jc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),jc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),jc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=kW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){to.error(t)}}a(YW,"syncSchemaMetadata");var II=[];async function wI(e){try{try{jc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),jc.resetReadTxn(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){to.warn(r)}let t=yI(e);if(t){to.error(t);return}to.trace(`ITC userHandler ${br.HDB_ITC_CLIENT_PREFIX}${xW.pid} received user event:`,e),await GW.setUsersToGlobal();for(let r of II)r()}catch(t){to.error(t)}}a(wI,"userHandler");wI.addListener=function(e){II.push(e)};CI.exports=$W});var os=m((NEe,DI)=>{"use strict";var gEe=C(),Ip=F(),KW=R(),{ITC_ERRORS:Zc}=gr(),{parentPort:REe,threadId:WW,isMainThread:QW,workerData:AEe}=require("worker_threads"),{onMessageFromWorkers:zW,broadcast:OEe,broadcastWithAcknowledgement:JW}=tt();DI.exports={sendItcEvent:jW,validateEvent:LI,SchemaEventMsg:XW,UserEventMsg:ZW};var sd;zW(async(e,t)=>{sd=sd||Xc(),LI(e),sd[e.type]&&await sd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function jW(e){return!QW&&e.message&&(e.message.originator=WW),JW(e)}a(jW,"sendItcEvent");function LI(e){if(typeof e!="object")return Zc.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ip.isEmpty(e.type))return Zc.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ip.isEmpty(e.message))return Zc.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ip.isEmpty(e.message.originator))return Zc.MISSING_ORIGIN;if(KW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Zc.INVALID_EVENT(e.type)}a(LI,"validateEvent");function XW(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(XW,"SchemaEventMsg");function ZW(e){this.originator=e}a(ZW,"UserEventMsg")});var gn=m((IEe,vI)=>{"use strict";var UI=R(),yEe=F(),nd=C(),MI=ty(),ra,{sendItcEvent:PI}=os();function eQ(e){try{nd.trace("signalSchemaChange called with message:",e),ra=ra||Xc();let t=new MI(UI.ITC_EVENT_TYPES.SCHEMA,e);return ra.schema(t),PI(t)}catch(t){nd.error(t)}}a(eQ,"signalSchemaChange");function tQ(e){try{nd.trace("signalUserChange called with message:",e),ra=ra||Xc();let t=new MI(UI.ITC_EVENT_TYPES.USER,e);return ra.user(t),PI(t)}catch(t){nd.error(t)}}a(tQ,"signalUserChange");vI.exports={signalSchemaChange:eQ,signalUserChange:tQ}});var id=m((CEe,HI)=>{"use strict";var BI=F(),rQ=R(),sQ=C(),nQ=B_(),iQ=v_(),oQ=gn(),{SchemaEventMsg:aQ}=os(),cQ="already exists in";HI.exports=uQ;async function uQ(e,t,r){if(BI.isEmptyOrZeroLength(r))return r;let s=[];BI.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(uQ,"lmdbCheckForNewAttributes");async function lQ(e,t,r,s){let n=new iQ(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await _Q(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(cQ))sQ.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(lQ,"createNewAttribute");async function _Q(e){let t;return t=await nQ(e),oQ.signalSchemaChange(new aQ(process.pid,rQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(_Q,"createAttribute")});var sa=m((DEe,qI)=>{"use strict";var wp=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}};qI.exports=wp});var GI=m((MEe,FI)=>{"use strict";var dQ=sa(),EQ=R().OPERATIONS_ENUM,Cp=class extends dQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(EQ.INSERT,r,s,n,i),this.records=t}};FI.exports=Cp});var kI=m((vEe,xI)=>{"use strict";var fQ=sa(),hQ=R().OPERATIONS_ENUM,Lp=class extends fQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(hQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};xI.exports=Lp});var VI=m((HEe,$I)=>{"use strict";var mQ=sa(),pQ=R().OPERATIONS_ENUM,Dp=class extends mQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(pQ.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$I.exports=Dp});var KI=m((FEe,YI)=>{"use strict";var SQ=sa(),TQ=R().OPERATIONS_ENUM,Up=class extends SQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(TQ.DELETE,s,n,t,i),this.original_records=r}};YI.exports=Up});var eu=m((kEe,JI)=>{"use strict";var xEe=require("path"),WI=we(),gQ=GI(),RQ=kI(),AQ=VI(),OQ=KI(),na=Ge(),QI=F(),{CONFIG_PARAMS:NQ}=R(),zI=Y();zI.initSync();var od=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:bQ}=De();JI.exports=yQ;async function yQ(e,t){if(zI.get(NQ.LOGGING_AUDITLOG)===!1)return;let r=bQ(e.schema,e.table),s=await WI.openEnvironment(r,e.table,!0),n=IQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){WI.initializeDBIs(s,na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,na.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),QI.isEmpty(n.user_name)||s.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[na.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(yQ,"writeTransaction");function IQ(e,t){let r=QI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===od.INSERT)return new gQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.UPDATE)return new RQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.UPSERT)return new AQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.DELETE)return new OQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(IQ,"createTransactionObject")});var Mp=m((YEe,jI)=>{"use strict";var wQ=kc(),VEe=$c(),tu=R(),CQ=Wc(),LQ=Ki().insertRecords,DQ=we(),UQ=C(),MQ=id(),{getSchemaPath:PQ}=De(),vQ=eu();jI.exports=BQ;async function BQ(e){try{let{schema_table:t,attributes:r}=wQ(e);CQ(e,r,t.hash_attribute),e.schema!==tu.SYSTEM_SCHEMA_NAME&&(r.includes(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(tu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await MQ(e.hdb_auth_header,t,r),n=PQ(e.schema,e.table),i=await DQ.openEnvironment(n,e.table),o=await LQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await vQ(e,o)}catch(c){UQ.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(BQ,"lmdbCreateRecords")});var ew=m((WEe,ZI)=>{"use strict";var XI=R(),HQ=Mp(),qQ=$c(),FQ=require("fs-extra"),{getSchemaPath:GQ}=De();ZI.exports=xQ;async function xQ(e){let t=[{name:e.schema,createddate:Date.now()}],r=new qQ(XI.SYSTEM_SCHEMA_NAME,XI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await HQ(r),await FQ.mkdirp(GQ(e.schema))}a(xQ,"lmdbCreateSchema")});var rw=m((zEe,tw)=>{"use strict";var Pp=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}};tw.exports=Pp});var ow=m((efe,iw)=>{"use strict";var sw=we(),vp=Ht(),Bp=gr().LMDB_ERRORS_ENUM,kQ=Ge(),nw=C(),jEe=F(),$Q=require("lmdb"),VQ=rw(),YQ=R(),{OVERFLOW_MARKER:XEe,MAX_SEARCH_KEY_LENGTH:ZEe}=kQ,KQ=YQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WQ(e,t,r,s){if(vp.validateEnv(e),t===void 0)throw new Error(Bp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bp.IDS_REQUIRED):new Error(Bp.IDS_MUST_BE_ITERABLE);try{let n=sw.listDBIs(e);sw.initializeDBIs(e,t,n);let i=new VQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[KQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,$Q.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let A=n[T];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],x=h[A];if(x!=null)try{let V=vp.getIndexedValues(x);if(V)for(let I=0,N=V.length;I<N;I++)g.remove(V[I],o)}catch{nw.warn(`cannot delete from attribute: ${A}, ${x}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){nw.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=vp.getNextMonotonicTime(),i}catch(n){throw n}}a(WQ,"deleteRecords");iw.exports={deleteRecords:WQ}});var ru=m((rfe,cw)=>{"use strict";var ia=F(),QQ=ow(),zQ=we(),{getSchemaPath:JQ}=De(),jQ=eu(),XQ=C();cw.exports=ZQ;async function ZQ(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(ia.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(ia.isEmptyOrZeroLength(e.hash_values)&&!ia.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];ia.isEmpty(u)||e.hash_values.push(u)}}if(ia.isEmptyOrZeroLength(e.hash_values))return aw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(ia.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=JQ(e.schema,e.table),i=await zQ.openEnvironment(n,e.table),o=await QQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await jQ(e,o)}catch(c){XQ.error(`unable to write transaction due to ${c.message}`)}return aw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(ZQ,"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 qp=m((ife,uw)=>{"use strict";var ez=R(),nfe=Ht();function Hp(e,t){let r=Object.create(null);if(t.length===1&&ez.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(Hp,"parseRow");function tz(e,t,r,s){let n=Hp(r,e);s.push(n)}a(tz,"searchAll");function rz(e,t,r,s){let n=Hp(r,e);s[t]=n}a(rz,"searchAllToMap");function sz(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(sz,"iterateDBI");function ro(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(ro,"pushResults");function nz(e,t,r,s,n,i){t.toString().endsWith(e)&&ro(t,r,s,n,i)}a(nz,"endsWith");function iz(e,t,r,s,n,i){t.toString().includes(e)&&ro(t,r,s,n,i)}a(iz,"contains");function oz(e,t,r,s,n,i){t>e&&ro(t,r,s,n,i)}a(oz,"greaterThanCompare");function az(e,t,r,s,n,i){t>=e&&ro(t,r,s,n,i)}a(az,"greaterThanEqualCompare");function cz(e,t,r,s,n,i){t<e&&ro(t,r,s,n,i)}a(cz,"lessThanCompare");function uz(e,t,r,s,n,i){t<=e&&ro(t,r,s,n,i)}a(uz,"lessThanEqualCompare");uw.exports={parseRow:Hp,searchAll:tz,searchAllToMap:rz,iterateDBI:sz,endsWith:nz,contains:iz,greaterThanCompare:oz,greaterThanEqualCompare:az,lessThanCompare:cz,lessThanEqualCompare:uz,pushResults:ro}});var oa=m((lfe,mw)=>{"use strict";var ni=we(),afe=C(),yr=Ht(),ad=Ge(),We=gr().LMDB_ERRORS_ENUM,cfe=F(),lz=R(),cd=qp(),{parseRow:_z}=cd,ufe=require("lmdb"),{OVERFLOW_MARKER:lw,MAX_SEARCH_KEY_LENGTH:dz}=ad;function _w(e,t,r,s=!1,n=void 0,i=void 0){return so(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(_w,"iterateFullIndex");function su(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return so(e,t,r,(_,d,E,f)=>{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 f===r?(g.values=!1,d.getRange(g).map(x=>({value:x}))):d.getRange(g)})}a(su,"iterateRangeBetween");function so(e,t,r,s){let n=e.database||e,i=ni.openDBI(n,r);i[ad.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ni.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(so,"setupTransaction");function dw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(lw)){if(!n)if(r)n=ni.openDBI(e,r);else{let u=ni.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=ni.openDBI(e,u[l]),!n[ad.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(dw,"getOverflowCheck");function Ez(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);return so(e,t,t,(o,c,u)=>(ud(r),r=nu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>_z(l.value,r))))}a(Ez,"searchAll");function fz(e,t,r,s=!1,n=void 0,i=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);ud(r),r=nu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of _w(e,t,t,s,n,i))o.set(c,cd.parseRow(u,r));return o}a(fz,"searchAllToMap");function hz(e,t,r=!1,s=void 0,n=void 0){if(yr.validateEnv(e),t===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=_w(e,void 0,t,r,s,n),c=o.transaction,u=dw(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(hz,"iterateDBI");function mz(e,t){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);return ni.statDBI(e,t).entryCount}a(mz,"countAll");function pz(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),so(e,t,r,(c,u,l,_)=>(s=yr.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(pz,"equals");function Sz(e,t,r){return ii(e,t,r),ni.openDBI(e,t).getValuesCount(r)}a(Sz,"count");function Tz(e,t,r,s,n=!1,i=void 0,o=void 0){return ii(e,r,s),so(e,null,r,(c,u)=>{s=yr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;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(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}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(Tz,"startsWith");function gz(e,t,r,s,n=!1,i=void 0,o=void 0){return Ew(e,t,r,s,n,i,o,!0)}a(gz,"endsWith");function Ew(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ii(e,r,s),so(e,null,r,(u,l,_,d)=>{let E=dw(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(lw)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[ad.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ew,"contains");function Rz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),su(e,t,r,s,u,n,i,o,!0,!1)}a(Rz,"greaterThan");function Az(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),su(e,t,r,s,u,n,i,o,!1,!1)}a(Az,"greaterThanEqual");function Oz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),su(e,t,r,u,s,n,i,o,!1,!0)}a(Oz,"lessThan");function Nz(e,t,r,s,n=!1,i=void 0,o=void 0){ii(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),su(e,t,r,u,s,n,i,o,!1,!1)}a(Nz,"lessThanEqual");function bz(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(yr.validateEnv(e),r===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(We.START_VALUE_REQUIRED);if(n===void 0)throw new Error(We.END_VALUE_REQUIRED);if(s=yr.convertKeyValueToWrite(s),n=yr.convertKeyValueToWrite(n),s>n)throw new Error(We.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return su(e,t,r,s,n,i,o,c)}a(bz,"between");function yz(e,t,r,s){yr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(ud(r),r=nu(n,r),s===void 0)throw new Error(We.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=cd.parseRow(c,r)),o}a(yz,"searchByHash");function Iz(e,t,r){yr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(We.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Iz,"checkHashExists");function wz(e,t,r,s,n=[]){return hw(e,t,r,s,n),fw(e,t,r,s,n).map(i=>i[1])}a(wz,"batchSearchByHash");function Cz(e,t,r,s,n=[]){hw(e,t,r,s,n);let i=new Map;for(let[o,c]of fw(e,t,r,s,n))i.set(o,c);return i}a(Cz,"batchSearchByHashToMap");function fw(e,t,r,s,n=[]){return so(e,t,t,(i,o,c)=>{r=nu(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,cd.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(fw,"batchHashSearch");function hw(e,t,r,s,n){if(yr.validateEnv(e),t===void 0)throw new Error(We.HASH_ATTRIBUTE_REQUIRED);if(ud(r),s==null)throw new Error(We.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(We.IDS_MUST_BE_ITERABLE)}a(hw,"initializeBatchSearchByHash");function ud(e){if(!Array.isArray(e))throw e===void 0?new Error(We.FETCH_ATTRIBUTES_REQUIRED):new Error(We.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ud,"validateFetchAttributes");function ii(e,t,r){if(yr.validateEnv(e),t===void 0)throw new Error(We.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(We.SEARCH_VALUE_REQUIRED);if(r?.length>dz)throw new Error(We.SEARCH_VALUE_TOO_LARGE)}a(ii,"validateComparisonFunctions");function nu(e,t){return t.length===1&&lz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ni.listDBIs(e)),t}a(nu,"setGetWholeRowAttributes");mw.exports={searchAll:Ez,searchAllToMap:fz,count:Sz,countAll:mz,equals:pz,startsWith:Tz,endsWith:gz,contains:Ew,searchByHash:yz,setGetWholeRowAttributes:nu,batchSearchByHash:wz,batchSearchByHashToMap:Cz,checkHashExists:Iz,iterateDBI:hz,greaterThan:Rz,greaterThanEqual:Az,lessThan:Oz,lessThanEqual:Nz,between:bz}});var aa=m((dfe,Rw)=>{var pw=require("lodash"),Sw=He(),Pe=require("joi"),Lz=F(),{hdb_schema_table:ld,checkValidTable:Tw,hdb_table:gw,hdb_database:_d}=Ds(),{handleHDBError:Dz,hdb_errors:Uz}=z(),{getDatabases:Mz}=(_e(),re(be)),{HTTP_STATUS_CODES:Pz}=Uz,vz=Pe.object({database:_d,schema:_d,table:gw,search_attribute:ld,search_value:Pe.any().required(),get_attributes:Pe.array().min(1).items(ld).optional(),desc:Pe.bool(),limit:Pe.number().integer().min(1),offset:Pe.number().integer().min(0)}),Bz=Pe.object({database:_d,schema:_d,table:gw,operator:Pe.string().valid("and","or").default("and").lowercase(),offset:Pe.number().integer().min(0),limit:Pe.number().integer().min(1),get_attributes:Pe.array().min(1).items(ld).optional(),conditions:Pe.array().min(1).items(Pe.object({search_attribute:ld,search_type:Pe.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Pe.when("search_type",{switch:[{is:"equals",then:Pe.any()},{is:"between",then:Pe.array().items(Pe.alternatives([Pe.string(),Pe.number()])).length(2)}],otherwise:Pe.alternatives(Pe.string(),Pe.number())}).required()})).required()});Rw.exports=function(e,t){let r=null;switch(t){case"value":r=Sw.validateBySchema(e,vz);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Tw("database",e.schema)),i(Tw("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=Sw.validateBySchema(e,Bz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Lz.checkGlobalSchemaTable(e.schema,e.table);if(n)return Dz(new Error,n,Pz.NOT_FOUND);let o=Mz()[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 Fp=m((ffe,Aw)=>{"use strict";var Hz=we(),qz=aa(),{getSchemaPath:Fz}=De();Aw.exports=Gz;function Gz(e){let t=qz(e,"hashes");if(t)throw t;let r=Fz(e.schema,e.table);return Hz.openEnvironment(r,e.table)}a(Gz,"initialize")});var Gp=m((mfe,Ow)=>{"use strict";var xz=oa(),kz=Fp();Ow.exports=$z;async function $z(e){let t=await kz(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return xz.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a($z,"lmdbGetDataByHash")});var ca=m((Sfe,Nw)=>{"use strict";var xp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Nw.exports=xp});var yw=m((Rfe,bw)=>{"use strict";var gfe=ca(),Vz=oa(),Yz=Fp();bw.exports=Kz;async function Kz(e){let t=await Yz(e),r=global.hdb_schema[e.schema][e.table];return Vz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Kz,"lmdbSearchByHash")});var as=m((Ofe,Iw)=>{"use strict";var kp=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=_}};Iw.exports=kp});var dd=m((bfe,Mw)=>{"use strict";var Gt=oa(),Wz=we(),Qz=F(),ae=Ge(),no=R(),zz=dn(),ww=gr().LMDB_ERRORS_ENUM,{getSchemaPath:Jz}=De(),Rn=no.SEARCH_WILDCARDS;async function jz(e,t,r){let s;e.schema===no.SYSTEM_SCHEMA_NAME?s=zz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Uw(e,s.hash_attribute,r,t);return Lw(e,n,s.hash_attribute,r)}a(jz,"prepSearch");async function Lw(e,t,r,s){let n=Jz(e.schema,e.table),i=await Wz.openEnvironment(n,e.table),o=Dw(i,e,t,r),c=o.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(Xz(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Cw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Cw(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,l):Gt.batchSearchByHash(c,r,e.get_attributes,l)}a(Lw,"executeSearch");function Dw(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 ae.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Dw,"searchByType");function Cw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Cw,"createMapFromIterable");function Xz(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(Xz,"checkToFetchMore");function Uw(e,t,r,s){if(Qz.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),Rn.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Rn[0])<0&&n.indexOf(Rn[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(Rn.indexOf(i)>=0&&Rn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(Rn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(Rn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(Rn[0])||n.includes(Rn[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(ww.UNKNOWN_SEARCH_TYPE)}else switch(s){case no.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case no.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case no.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case no.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case no.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ww.UNKNOWN_SEARCH_TYPE)}}a(Uw,"createSearchTypeFromSearchObject");Mw.exports={executeSearch:Lw,createSearchTypeFromSearchObject:Uw,prepSearch:jz,searchByType:Dw}});var vw=m((wfe,Pw)=>{"use strict";var Ife=as(),Zz=aa(),eJ=F(),tJ=R(),rJ=dd();Pw.exports=sJ;function sJ(e,t){if(!eJ.isEmpty(t)&&tJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=Zz(e,"value");if(s)throw s;let n=!0;return rJ.prepSearch(e,t,n)}a(sJ,"lmdbGetDataByValue")});var iu=m((Dfe,Bw)=>{"use strict";var Lfe=as(),nJ=aa(),iJ=F(),oJ=R(),aJ=dd();Bw.exports=cJ;async function cJ(e,t){if(!iJ.isEmpty(t)&&oJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=nJ(e,"value");if(s)throw s;return aJ.prepSearch(e,t,!1)}a(cJ,"lmdbSearchByValue")});var qw=m((Pfe,Hw)=>{"use strict";var Mfe=Ge(),$p=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}},Vp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Yp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Hw.exports={SearchByConditionsObject:$p,SearchCondition:Vp,SortAttribute:Yp}});var $w=m((qfe,kw)=>{"use strict";var Bfe=qw().SearchByConditionsObject,uJ=as(),lJ=aa(),Kp=oa(),Ed=Ge(),{Resource:Hfe}=(Is(),re(im)),xw=dd(),_J=qp(),dJ=require("lodash"),{getSchemaPath:EJ}=De(),Fw=we(),{handleHDBError:fJ,hdb_errors:hJ}=z(),{HTTP_STATUS_CODES:mJ}=hJ,pJ=1e8;kw.exports=SJ;async function SJ(e){let t=lJ(e,"conditions");if(t)throw fJ(t,t.message,mJ.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=EJ(e.schema,e.table),s=await Fw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Fw.openDBI(s,l.search_attribute);let i=dJ.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Ed.SEARCH_TYPES.EQUALS?l.estimated_count=Kp.count(s,l.search_attribute,l.search_value):_===Ed.SEARCH_TYPES.CONTAINS||_===Ed.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=pJ}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Gw(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(xw.filterByType),d=_.length,E=Kp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>_J.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Gw(o,e,E,n.hash_attribute);c=c.concat(f)}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=Kp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(SJ,"lmdbSearchByConditions");async function Gw(e,t,r,s){let n=new uJ(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ed.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,xw.searchByType(e,n,i,s).map(o=>o.value)}a(Gw,"executeConditionSearch")});var ou=m((Gfe,Vw)=>{"use strict";var TJ=R().OPERATIONS_ENUM,Wp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=TJ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Vw.exports=Wp});var Qp=m((kfe,Xw)=>{"use strict";var Qw=as(),zw=ou(),Jw=iu(),jw=ru(),tr=R(),Yw=F(),Kw=we(),{getTransactionAuditStorePath:gJ,getSchemaPath:RJ}=De(),Ww=C();Xw.exports=AJ;async function AJ(e){try{if(Yw.isEmpty(global.hdb_schema[e.schema])||Yw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await OJ(e),await NJ(e);let t=RJ(e.schema,e.table);try{await Kw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ww.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=gJ(e.schema,e.table);await Kw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ww.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(AJ,"lmdbDropTable");async function OJ(e){let t=new Qw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Jw(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 zw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jw(n)}a(OJ,"deleteAttributesFromSystem");async function NJ(e){let t=new Qw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,tr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Jw(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 zw(tr.SYSTEM_SCHEMA_NAME,tr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jw(n)}catch(i){throw i}}a(NJ,"dropTableFromSystem")});var eC=m((Vfe,Zw)=>{"use strict";var bJ=require("fs-extra"),yJ=as(),IJ=ca(),wJ=ou(),CJ=Qp(),LJ=ru(),DJ=Gp(),UJ=iu(),An=R(),{getSchemaPath:MJ}=De(),{handleHDBError:PJ,hdb_errors:vJ}=z(),{HDB_ERROR_MSGS:BJ,HTTP_STATUS_CODES:HJ}=vJ;Zw.exports=qJ;async function qJ(e){let t;try{t=await FJ(e.schema);let r=new yJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await UJ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await CJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new wJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await LJ(n);let i=MJ(t);await bJ.remove(i)}catch(r){throw r}}a(qJ,"lmdbDropSchema");async function FJ(e){let t=new IJ(An.SYSTEM_SCHEMA_NAME,An.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[An.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await DJ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw PJ(new Error,BJ.SCHEMA_NOT_FOUND(e),HJ.NOT_FOUND,void 0,void 0,!0);return s}a(FJ,"validateDropSchema")});var au=m((Kfe,tC)=>{"use strict";var zp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};tC.exports=zp});var jp=m((zfe,rC)=>{"use strict";var GJ=require("fs-extra"),fd=we(),{getTransactionAuditStorePath:xJ}=De(),Jp=Ge(),Qfe=au();rC.exports=kJ;async function kJ(e){let t;try{let r=xJ(e.schema,e.table);await GJ.mkdirp(r),t=await fd.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{fd.createDBI(t,Jp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),fd.createDBI(t,Jp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),fd.createDBI(t,Jp.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(kJ,"createTransactionsAuditEnvironment")});var oC=m((jfe,iC)=>{"use strict";var Xp=R(),sC=we(),$J=Ki(),{getSystemSchemaPath:VJ,getSchemaPath:YJ}=De(),KJ=dn(),WJ=B_(),Zp=v_(),QJ=C(),zJ=jp(),tS=KJ.hdb_table,nC=[];for(let e=0;e<tS.attributes.length;e++)nC.push(tS.attributes[e].attribute);iC.exports=JJ;async function JJ(e,t){let r=YJ(t.schema,t.table),s=new Zp(t.schema,t.table,Xp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Zp(t.schema,t.table,Xp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Zp(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(VJ(),Xp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await $J.insertRecords(o,tS.hash_attribute,nC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await eS(s),await eS(n),await eS(i)}await zJ(t)}catch(o){throw o}}a(JJ,"lmdbCreateTable");async function eS(e){try{await WJ(e)}catch(t){QJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(eS,"createAttribute")});var cC=m((Zfe,aC)=>{"use strict";var jJ=kc(),XJ=Wc(),ZJ=id(),cu=R(),ej=Ki().updateRecords,tj=we(),{getSchemaPath:rj}=De(),sj=eu(),nj=C();aC.exports=ij;async function ij(e){try{let{schema_table:t,attributes:r}=jJ(e);XJ(e,r,t.hash_attribute),e.schema!==cu.SYSTEM_SCHEMA_NAME&&(r.includes(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(cu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await ZJ(e.hdb_auth_header,t,r),n=rj(e.schema,e.table),i=await tj.openEnvironment(n,e.table),o=await ej(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await sj(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(ij,"lmdbUpdateRecords")});var lC=m((the,uC)=>{"use strict";var oj=R().OPERATIONS_ENUM,rS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=oj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uC.exports=rS});var dC=m((nhe,_C)=>{"use strict";var she=lC(),aj=kc(),cj=Wc(),uj=id(),uu=R(),lj=Ki().upsertRecords,_j=we(),{getSchemaPath:dj}=De(),Ej=eu(),fj=C(),{handleHDBError:hj,hdb_errors:mj}=z();_C.exports=pj;async function pj(e){let t;try{t=aj(e)}catch(u){throw hj(u,u.message,mj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;cj(e,s,r.hash_attribute),e.schema!==uu.SYSTEM_SCHEMA_NAME&&(s.includes(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await uj(e.hdb_auth_header,r,s),i=dj(e.schema,e.table),o=await _j.openEnvironment(i,e.table),c=await lj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await Ej(e,c)}catch(u){fj.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(pj,"lmdbUpsertRecords")});var fC=m((ohe,EC)=>{"use strict";var sS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};EC.exports=sS});var mC=m((che,hC)=>{"use strict";var nS=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}};hC.exports=nS});var TC=m((_he,SC)=>{"use strict";var iS=we(),{getTransactionAuditStorePath:Sj}=De(),lhe=fC(),lu=Ge(),Tj=F(),pC=mC(),gj=require("util").promisify,Rj=gj(setTimeout),Aj=1e4,Oj=100;SC.exports=Nj;async function Nj(e){let t=Sj(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),s=iS.listDBIs(r);iS.initializeDBIs(r,lu.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new pC;do n=await bj(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 Rj(Oj);while(n.transactions_deleted>0);return i}a(Nj,"deleteAuditLogsBefore");async function bj(e,t){let r=new pC;try{let s=e.dbis[lu.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[lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Tj.isEmpty(c)||(n=e.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[lu.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Aj)break}return await n,r}catch(s){throw s}}a(bj,"deleteTransactions")});var RC=m((Ehe,gC)=>{"use strict";var oS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};gC.exports=oS});var OC=m((mhe,AC)=>{"use strict";var yj=as(),Ij=ou(),hhe=RC(),vs=R(),wj=F(),aS=we(),Cj=dn(),Lj=iu(),Dj=ru(),{getSchemaPath:Uj}=De();AC.exports=Mj;async function Mj(e,t=!0){let r;e.schema===vs.SYSTEM_SCHEMA_NAME?r=Cj[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await vj(e),n=Uj(e.schema,e.table),i=await aS.openEnvironment(n,e.table);return t===!0&&await Pj(e,i,r.hash_attribute),aS.dropDBI(i,e.attribute),s}a(Mj,"lmdbDropAttribute");async function Pj(e,t,r){let s=aS.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(Pj,"removeAttributeFromAllObjects");async function vj(e){let t=new yj(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Lj(t)).filter(o=>o[vs.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[vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Ij(vs.SYSTEM_SCHEMA_NAME,vs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Dj(i)}a(vj,"dropAttributeFromSystem")});var CC=m((The,wC)=>{"use strict";var cS=we(),ua=Ge(),She=Ht(),uS=R(),NC=F(),{getTransactionAuditStorePath:Bj}=De(),Hj=oa(),hd=sa(),qj=C();wC.exports=Fj;async function Fj(e){let t=Bj(e.schema,e.table),r=await cS.openEnvironment(t,e.table,!0),s=cS.listDBIs(r);cS.initializeDBIs(r,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return bC(r,e.search_values);case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,xj(r,e.search_values,n);case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return Gj(r,e.search_values);default:return bC(r)}}a(Fj,"readAuditLog");function bC(e,t=[0,Date.now()]){NC.isEmpty(t[0])&&(t[0]=0),NC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ua.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 hd,n))}a(bC,"searchTransactionsByTimestamp");function Gj(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[ua.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IC(e,i))}return Object.fromEntries(r)}a(Gj,"searchTransactionsByUsername");function xj(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=Hj.equals(e,ua.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ua.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=IC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);yC(u,"records",r,_,o),yC(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(xj,"searchTransactionsByHashValues");function yC(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 hd(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new hd(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(yC,"loopRecords");function IC(e,t){let r=[];try{let s=e.dbis[ua.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 hd,i);r.push(o)}}catch(i){qj.warn(i)}return r}catch(s){throw s}}a(IC,"batchSearchTransactions")});var DC=m((Ohe,LC)=>{"use strict";var{getSchemaPath:Rhe}=De(),Ahe=we(),{database:kj}=(_e(),re(be));LC.exports={writeTransaction:$j};async function $j(e,t,r){return kj({database:e,table:t}).transaction(r)}a($j,"writeTransaction")});var vC=m((bhe,PC)=>{"use strict";var{getSchemaPath:UC}=De(),MC=we();PC.exports={flush:Vj,resetReadTxn:Yj};async function Vj(e,t){return(await MC.openEnvironment(UC(e,t),t.toString())).flushed}a(Vj,"flush");async function Yj(e,t){try{(await MC.openEnvironment(UC(e,t),t.toString())).resetReadTxn()}catch{}}a(Yj,"resetReadTxn")});var FC=m((Ihe,qC)=>{"use strict";var{Readable:Kj}=require("stream"),{getDatabases:Wj}=(_e(),re(be)),{readSync:Qj,openSync:zj,createReadStream:BC}=require("fs"),{open:Jj}=require("lmdb"),HC=b_(),jj=I_(),{INTERNAL_DBIS_NAME:Xj}=Ge();qC.exports=e2;var lS=32768,Zj=100;async function e2(e){let t=e.database||e.schema||"data",r=Wj()[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=Jj({noSync:!0,maxDbs:jj.MAX_DBS}),E,f=d.openDB(Xj,new HC(!1)),h=_.useReadTransaction(),p=0;for(let{key:A,value:g}of _.getRange({transaction:h,start:!1}))if(n.some(x=>A.startsWith?.(x+"/"))){f.put(A,g);let[,x]=A.split("/"),V=!x,I=new HC(!V,V);I.encoding="binary";let N=d.openDB(A,I),M=_.openDB(A,I);for(let{key:J,version:B,value:Ie}of M.getRange({transaction:h,versions:V}))E=N.put(J,Ie,B),p++%Zj===0&&await new Promise(_t=>setTimeout(_t,20))}await E;let T=BC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=zj(o.path);return o.transaction(()=>{let l=Buffer.alloc(lS);Qj(c,l,0,lS);let _=o.useReadTransaction(),d=BC(null,{fd:c,start:lS}),E=new Kj.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});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(e2,"getBackup")});var kC=m((Che,xC)=>{"use strict";var t2=C(),{handleHDBError:r2}=z(),s2=cb(),n2=B_(),i2=Mp(),o2=ew(),a2=ru(),c2=Gp(),u2=yw(),l2=vw(),_2=iu(),d2=$w(),E2=eC(),f2=oC(),h2=cC(),m2=dC(),p2=TC(),S2=Qp(),T2=OC(),g2=CC(),R2=DC(),GC=vC(),A2=FC(),_S=class extends s2{static{a(this,"LMDBBridge")}async searchByConditions(t){return d2(t)}async getDataByHash(t){return await c2(t)}async searchByHash(t){return await u2(t)}async getDataByValue(t,r){return await l2(t,r)}async searchByValue(t){return await _2(t)}async createSchema(t){return await o2(t)}async dropSchema(t){return await E2(t)}async createTable(t,r){return await f2(t,r)}async dropTable(t){return await S2(t)}async createAttribute(t){return await n2(t)}async createRecords(t){return await i2(t)}async updateRecords(t){return await h2(t)}async upsertRecords(t){try{return await m2(t)}catch(r){throw r2(r,null,null,t2.ERR,r)}}async deleteRecords(t){return await a2(t)}async dropAttribute(t){return await T2(t)}async deleteAuditLogsBefore(t){return await p2(t)}async readAuditLog(t){return await g2(t)}writeTransaction(t,r,s){return R2.writeTransaction(t,r,s)}flush(t,r){return GC.flush(t,r)}resetReadTxn(t,r){return GC.resetReadTxn(t,r)}getBackup(t){return A2(t)}};xC.exports=_S});var jC={};Ke(jC,{ResourceBridge:()=>fS});function hS({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function VC(e,t){let r=Bs(e),s=hS(e,r);if(!r)throw new cs.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};return Xe(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&S_(u),t?yield{key:c,value:u}:yield u}})}function Bs(e){let t=e.database||e.schema||N2,r=us()[t];if(!r)throw(0,cs.handleHDBError)(new Error,O2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function YC(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*KC(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,timestamp: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 WC,md,cs,QC,zC,ls,dS,ES,JC,O2,N2,b2,y2,$C,fS,XC=Te(()=>{"use strict";WC=D(kC()),md=D(aa()),cs=D(z());_e();QC=D(kc()),zC=D(Wc()),ls=D(R()),dS=D(gn()),ES=D(os()),JC=D(F());Vi();T_();({HDB_ERROR_MSGS:O2}=cs.hdb_errors),N2="data",b2=1e4,y2=10,fS=class extends WC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$C=this}async searchByConditions(t){let r=(0,md.default)(t,"conditions");if(r)throw(0,cs.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Bs(t);if(!s)throw new cs.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:hS(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 cs.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}]}ft({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Bs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Bs(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){Bs(t).dropTable()}createSchema(t){return _u({database:t.schema,table:null}),dS.signalSchemaChange(new ES.SchemaEventMsg(process.pid,ls.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new ES.SchemaEventMsg(process.pid,ls.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,$C.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,QC.default)(t);(0,zC.default)(t,s,r.primaryKey);let n,i=us()[t.schema][t.table],o={user:t.hdb_user};return Xe(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.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=S_(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);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=us()[t.schema][t.table],s={user:t.hdb_user};return Xe(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 YC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=us()[t.schema][t.table];if(!r.createdTimeProperty)throw new cs.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:ls.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,JC.async_set_timeout)(y2),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%b2===0&&await l();return u.length>0&&await l(),n?YC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,md.default)(t,"hashes");if(r)throw r;return VC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of VC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ls.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,md.default)(t,"value");if(s)throw s;let n=Bs(t);if(!n)throw new cs.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===ls.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:hS(t,n)})}async getDataByValue(t,r){let s=new Map,n=Bs(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){Bs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Bs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Bs(t),s={};switch(t.search_type){case ls.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,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ls.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of KC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return KC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(VC,"getRecords");a(Bs,"getTable");a(YC,"createDeleteResponse");a(KC,"groupRecordsInHistory")});var Vr=m((vhe,ZC)=>{"use strict";var{ResourceBridge:I2}=(XC(),re(jC)),w2=Y();w2.initSync();var pd;function C2(){return pd||(pd=new I2,pd)}a(C2,"getBridge");ZC.exports=C2()});var sL=m((Hhe,rL)=>{"use strict";var eL=require("lodash"),du=require("mathjs"),L2=require("jsonata"),tL=F();rL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?eL.uniqWith(e,eL.isEqual):e,searchJSON:D2,mad:Eu.bind(null,du.mad),mean:Eu.bind(null,du.mean),mode:Eu.bind(null,du.mode),prod:Eu.bind(null,du.prod),median:Eu.bind(null,du.median)};function Eu(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(Eu,"aggregateFunction");function D2(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(tL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),tL.isEmpty(this.__ala__.res[r])){let s=L2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(D2,"searchJSON")});var iL=m((Fhe,nL)=>{"use strict";var rt=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";rt.suppressDeprecationWarnings=!0;nL.exports={current_date:()=>rt().utc().format("YYYY-MM-DD"),current_time:()=>rt().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return rt(e).utc().format("YYYY");case"month":return rt(e).utc().format("MM");case"day":return rt(e).utc().format("DD");case"hour":return rt(e).utc().format("HH");case"minute":return rt(e).utc().format("mm");case"second":return rt(e).utc().format("ss");case"millisecond":return rt(e).utc().format("SSS");default:break}},date:e=>rt(e).utc().format(pS),date_format:(e,t)=>rt(e).utc().format(t),date_add:(e,t,r)=>rt(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>rt(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=rt(e).utc(),n=rt(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>rt().utc().valueOf(),get_server_time:()=>rt().format(pS),offset_utc:(e,t)=>rt(e).utc().utcOffset(t).format(pS)}});var uL=m((Ghe,cL)=>{"use strict";var U2=require("@turf/area"),M2=require("@turf/length"),P2=require("@turf/circle"),v2=require("@turf/difference"),B2=require("@turf/distance"),H2=require("@turf/boolean-contains"),q2=require("@turf/boolean-equal"),F2=require("@turf/boolean-disjoint"),G2=require("@turf/helpers"),oL=R(),Ee=F();cL.exports={geoArea:x2,geoLength:k2,geoCircle:$2,geoDifference:V2,geoDistance:aL,geoNear:Y2,geoContains:K2,geoEqual:W2,geoCrosses:Q2,geoConvert:z2};var SS="geo1 is required",TS="geo2 is required";function x2(e){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),U2.default(e)}a(x2,"geoArea");function k2(e,t){if(Ee.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=Ee.autoCastJSON(e)),M2.default(e,{units:t||"kilometers"})}a(k2,"geoLength");function $2(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)),P2.default(e,t,{units:r||"kilometers"})}a($2,"geoCircle");function V2(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)),v2(e,t)}a(V2,"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)),B2.default(e,t,{units:r||"kilometers"})}a(aL,"geoDistance");function Y2(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(Y2,"geoNear");function K2(e,t){if(Ee.isEmpty(e))throw new Error(SS);if(Ee.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),H2.default(e,t)}a(K2,"geoContains");function W2(e,t){if(Ee.isEmpty(e))throw new Error(SS);if(Ee.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),q2.default(e,t)}a(W2,"geoEqual");function Q2(e,t){if(Ee.isEmpty(e))throw new Error(SS);if(Ee.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=Ee.autoCastJSON(e)),typeof t=="string"&&(t=Ee.autoCastJSON(t)),!F2.default(e,t)}a(Q2,"geoCrosses");function z2(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(oL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(oL.GEO_CONVERSION_ENUM).join(",")}`);return G2[t](e,r)}a(z2,"geoConvert")});var Sd=m((khe,lL)=>{var io=sL(),Ir=iL(),Hs=uL();lL.exports=e=>{e.aggr.mad=e.aggr.MAD=io.mad,e.aggr.mean=e.aggr.MEAN=io.mean,e.aggr.mode=e.aggr.MODE=io.mode,e.aggr.prod=e.aggr.PROD=io.prod,e.aggr.median=e.aggr.MEDIAN=io.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=io.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=io.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Ir.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Ir.current_time,e.fn.extract=e.fn.EXTRACT=Ir.extract,e.fn.date=e.fn.DATE=Ir.date,e.fn.date_format=e.fn.DATE_FORMAT=Ir.date_format,e.fn.date_add=e.fn.DATE_ADD=Ir.date_add,e.fn.date_sub=e.fn.DATE_SUB=Ir.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Ir.date_diff,e.fn.now=e.fn.NOW=Ir.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Ir.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Ir.get_server_time,e.fn.getdate=e.fn.GETDATE=Ir.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Ir.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Hs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Hs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Hs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Hs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Hs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Hs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Hs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Hs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Hs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Hs.geoNear}});var fL=m(($he,EL)=>{"use strict";var fu=require("lodash"),wt=require("alasql");wt.options.cache=!1;var J2=Sd(),_L=require("clone"),Td=require("recursive-iterator"),ie=C(),oe=F(),la=Vr(),j2=R(),{hdb_errors:X2}=z(),{getDatabases:dL}=(_e(),re(be)),Z2="IS NULL",_s="There was a problem performing this search. Please check the logs and try again.";J2(wt);var gS=class{static{a(this,"SQLSearch")}constructor(t,r){if(oe.isEmpty(t))throw ie.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(),oe.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!oe.isEmptyOrZeroLength(s))return ie.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ie.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ie.error(s),new Error(_s)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ie.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ie.error(s),new Error(_s)}if(Object.keys(this.data).length===0)return ie.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ie.error("Error thrown from processJoins in SQLSearch class method search."),ie.error(s),new Error(_s)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ie.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ie.error(s),new Error(_s)}try{return t=await this._finalSQL(),t}catch(s){throw ie.error("Error thrown from finalSQL in SQLSearch class method search."),ie.error(s),new Error(_s)}}_getColumns(){let t=new Td(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(_L(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=fu.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=dL()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(oe.isEmpty(this.statement.where)){ie.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Td(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!oe.isEmpty(r)&&r.right)if(oe.isNotEmptyAndHasValue(r.right.value)){let s=oe.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new wt.yy.LogicValue({value:s}):r.right instanceof wt.yy.StringValue&&!oe.isEmpty(s)&&oe.autoCasterIsNumberCheck(s.toString())&&(r.right=new wt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=oe.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new wt.yy.LogicValue({value:i}):s instanceof wt.yy.StringValue&&oe.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new wt.yy.NumValue({value:i}))});if(t){ie.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Td(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(!oe.isEmpty(j2.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(oe.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(oe.isEmptyOrZeroLength(r.left.columnid)||oe.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(oe.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"=":!oe.isEmpty(r.right.value)||!oe.isEmpty(r.left.value)?s.add(oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from)&&oe.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&&fu.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(oe.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);oe.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(oe.isEmptyOrZeroLength(this.all_table_attributes)&&!oe.isEmptyOrZeroLength(this.columns.columns))return t;if(oe.isEmptyOrZeroLength(this.all_table_attributes)&&oe.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await wt.promise(r)}catch(r){throw ie.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ie.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(_L(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(oe.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(Z2)>-1&&this.tables.forEach(n=>{let i={columnid:dL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=fu.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),!oe.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!oe.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await la.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 ie.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(_s)}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 E=await la.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,oe.autoCast(f)))}))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ie.error(_),new Error(_s)}else if(!oe.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!oe.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await la.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,oe.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,oe.autoCast(p)))}}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ie.error(_),new Error(_s)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await la.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,oe.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,oe.autoCast(d)))}catch(_){throw ie.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ie.error(_),new Error(_s)}}}_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 wt.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 wt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new wt.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 wt.yy.FuncValue:new wt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await wt.promise(h,t),t=null}catch(f){throw ie.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ie.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=fu.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,A=p.length;T<A;T++){let g=p[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Td(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=fu.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 ie.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ie.error(i),new Error(_s)}}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 la.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw ie.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ie.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();ie.trace(`Final SQL: ${n}`),s=await wt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ie.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ie.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ie.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 ie.error(X2.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ie.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 la.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 ie.error("There was an error when processing this SQL operation. Check your logs"),ie.error(o),new Error(_s)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EL.exports=gS});var jt=m((Yhe,hL)=>{"use strict";var e3=ob();hL.exports={searchByConditions:r3,searchByHash:s3,searchByValue:n3,search:i3};var RS=Vr(),{transformReq:AS}=F(),t3=fL();async function r3(e){return AS(e),RS.searchByConditions(e)}a(r3,"searchByConditions");async function s3(e){AS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of RS.searchByHash(e))r&&t.push(r);return t}a(s3,"searchByHash");async function n3(e){AS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of RS.searchByValue(e))t.push(r);return t}a(n3,"searchByValue");function i3(e,t){try{let r=new e3(e);r.validate(),new t3(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(i3,"search")});var gd=m((Whe,mL)=>{"use strict";var o3=Vr();mL.exports={writeTransaction:a3};function a3(e,t,r){return o3.writeTransaction(e,t,r)}a(a3,"writeTransaction")});var gL=m((Jhe,TL)=>{"use strict";var c3=jt(),u3=$r(),pL=C(),l3=Xt(),zhe=gd(),_3=require("clone"),NS=require("alasql"),d3=Sd(),SL=require("util"),E3=SL.promisify(u3.getTableSchema),f3=SL.promisify(c3.search),h3=R(),OS=F();d3(NS);TL.exports={update:p3};var m3="There was a problem performing this update. Please check the logs and try again.";async function p3({statement:e,hdb_user:t}){let r=await E3(e.table.databaseid,e.table.tableid),s=S3(e.columns);OS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=_3(n),c=OS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=NS.parse(u).statements[0],_=await f3(l),d=T3(s,_);return g3(o,d,t)}a(p3,"update");function S3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=NS.compile(`SELECT ${r.expression.toString()} AS [${h3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw pL.error(t),new Error(m3)}}a(S3,"createUpdateRecord");function T3(e,t){return OS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(T3,"buildUpdateRecords");async function g3(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await l3.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){pL.error(`Error delete new_attributes from update response: ${i}`)}return n}a(g3,"updateRecords")});var AL=m((eme,RL)=>{var R3=require("alasql"),A3=jt(),O3=C(),N3=Vr(),yS=require("util"),bS=F(),b3=R(),y3=$r(),Xhe=gd(),Zhe=Xt(),I3="record",w3="successfully deleted",C3=yS.callbackify(M3),L3=yS.promisify(A3.search),D3=yS.promisify(y3.getTableSchema);RL.exports={convertDelete:C3};function U3(e){return`${e.deleted_hashes.length} ${I3}${e.deleted_hashes.length===1?"":"s"} ${w3}`}a(U3,"generateReturnMessage");async function M3({statement:e,hdb_user:t}){let r=await D3(e.table.databaseid,e.table.tableid);bS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=bS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=R3.parse(o).statements[0],u={operation:b3.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await L3(c);let l=await N3.deleteRecords(u);return bS.isEmptyOrZeroLength(l.message)&&(l.message=U3(l)),delete l.txn_time,l}catch(l){throw O3.error(l),l.hdb_code?l.message:l}}a(M3,"convertDelete")});var IL=m((rme,yL)=>{"use strict";var P3=Xn(),{hdb_errors:OL}=z(),{getDatabases:NL}=(_e(),re(be));yL.exports={checkSchemaExists:bL,checkSchemaTableExists:v3,schema_describe:P3};async function bL(e){if(!NL()[e])return OL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bL,"checkSchemaExists");async function v3(e,t){let r=await bL(e);if(r)return r;if(!NL()[e][t])return OL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(v3,"checkSchemaTableExists")});var pu={};Ke(pu,{addAnalyticsListener:()=>DS,recordAction:()=>ao,recordActionBinary:()=>LS,setAnalyticsEnabled:()=>B3});function B3(e){BL=e}function ao(e,t,r,s,n){if(!BL)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Od.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Od.set(i,o)),Ad||H3()}function LS(e,t,r,s,n){ao(e?1:0,t,r,s,n)}function DS(e){qL.push(e)}function H3(){Ad=performance.now(),setTimeout(()=>{let e=performance.now()-Ad;Ad=0;let t=[],r={time:Date.now(),period:e,threadId:oo.threadId,metrics:t};for(let[n,i]of Od)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p1:i[Math.floor(o*.01)],p10:i[Math.floor(o*.1)],p25:i[Math.floor(o*.25)],p75:i[Math.floor(o*.75)],p90:i[Math.floor(o*.9)],p95:i[Math.floor(o*.95)],p99:i[Math.floor(o*.99)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:oo.threadId,...s});for(let n of qL)n(t);Od=new Map,oo.parentPort?oo.parentPort.postMessage({type:HL,report:r}):GL({report:r})},wS).unref()}async function q3(e,t=6e4){let r=US(),s;for(let _ of r.primaryStore.getRange({start:Rd+"z",end:Rd,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:p,type:T,metric:A,count:g,threadId:x,...V}=f;g||(g=1);let I=A+(h?"-"+h:"");p&&(I+="-"+p);let N=i.get(I);if(N){N.count||(N.count=1);let M=N.count;for(let J in V){let B=V[J];typeof B=="number"&&(N[J]=(N[J]*M+B*g)/(M+g))}N.count+=g}else N=Object.assign({period:t},f),i.set(I,N)}await F3()}for(let[_,d]of i)d.id=Rd+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Rd+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-wL,active:l-CL,time:c}),wL=u,CL=l}async function G3(e,t){let r=US(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function US(){return LL||(LL=ft({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function k3(){FL=!0;let e=(0,mu.get)(CS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await q3(wS,e),await G3(x3,wS)},e/2).unref()}function GL(e,t){let r=e.report;r.threadId=t?.threadId||oo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(DL+=s.mean*s.count);r.totalBytesProcessed=DL,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(UL.get(t))}),UL.set(t,t.performance.eventLoopUtilization())),r.id=(0,vL.getNextMonotonicTime)(),US().put(r),FL||k3(),$3&&(xL=Y3(r))}async function Y3(e){if(await xL,!oi){let r=(0,hu.dirname)((0,PL.getLogFilePath)());try{oi=await(0,IS.open)((0,hu.join)(r,"analytics.log"),"r+")}catch{oi=await(0,IS.open)((0,hu.join)(r,"analytics.log"),"w+")}}let t=(await oi.stat()).size;if(t>V3){let r=Buffer.alloc(t);await oi.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await oi.write(r,{position:0}),await oi.truncate(r.length),t=r.length}await oi.write(JSON.stringify(e)+`
7
- `,t)}var oo,ML,PL,hu,IS,vL,mu,CS,Od,BL,Ad,wS,HL,qL,Rd,wL,CL,F3,x3,LL,FL,DL,UL,$3,xL,oi,V3,co=Te(()=>{oo=require("worker_threads"),ML=D(tt());_e();PL=D(C()),hu=require("path"),IS=require("fs/promises"),vL=D(Ht()),mu=D(Y()),CS=D(R());rs();(0,mu.initSync)();Od=new Map,BL=(0,mu.get)(CS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(B3,"setAnalyticsEnabled");a(ao,"recordAction");Et.recordAnalytics=ao;a(LS,"recordActionBinary");Ad=0,wS=1e3,HL="analytics-report",qL=[];a(DS,"addAnalyticsListener");a(H3,"sendAnalytics");Rd="sum-";a(q3,"aggregation");wL=0,CL=0,F3=a(()=>new Promise(setImmediate),"rest");a(G3,"cleanup");x3=36e5;a(US,"getAnalyticsTable");(0,ML.setChildListenerByType)(HL,GL);a(k3,"startScheduledTasks");DL=0,UL=new Map,$3=!1;a(GL,"recordAnalytics");V3=1e6;a(Y3,"logAnalytics")});var Qe=m((pme,oD)=>{"use strict";var Ct=Y();Ct.initSync();var K3=require("fs-extra"),W3=require("semver"),Ru=require("path"),{monotonicFactory:Q3}=require("ulidx"),BS=Q3(),z3=require("util"),$L=require("child_process"),J3=z3.promisify($L.exec),j3=$L.spawn,fe=Me(),Re=R(),Nd=F(),Kr=C(),bd=hn(),X3=gd(),Su=et(),{Encoder:Z3,decode:HS}=require("msgpackr"),VL=new Z3,{isEmpty:uo}=Nd,YL=er(),KL=12e10,e4=48*36e11,t4=5e9,{connect:r4,StorageType:WL,RetentionPolicy:QL,AckPolicy:yd,DeliverPolicy:Id,DiscardPolicy:s4,NatsConnection:Eme,JetStreamManager:fme,JetStreamClient:hme,StringCodec:mme,JSONCodec:n4,createInbox:qS,headers:i4,ErrorCode:kL}=require("nats"),{PACKAGE_ROOT:o4}=R(),a4=xi(),{recordAction:c4}=(co(),re(pu)),zL=n4(),u4="clustering",l4=a4.engines[fe.NATS_SERVER_NAME],_4=Ru.join(o4,"dependencies"),vS=Ru.join(_4,`${process.platform}-${process.arch}`,fe.NATS_BINARY_NAME),MS,PS,Tu,_a,da;oD.exports={runCommand:JL,checkNATSServerInstalled:d4,createConnection:FS,getConnection:wd,getJetStreamManager:Au,getJetStream:jL,getNATSReferences:rr,getServerList:f4,createLocalStream:GS,listStreams:XL,deleteLocalStream:h4,getServerConfig:Ou,listRemoteStreams:m4,viewStream:p4,viewStreamIterator:S4,publishToStream:T4,createWorkQueueStream:g4,addSourceToWorkStream:eD,request:A4,removeSourceFromWorkStream:rD,reloadNATS:xS,reloadNATSHub:O4,reloadNATSLeaf:N4,extractServerName:tD,requestErrorHandler:b4,updateWorkStream:y4,createLocalTableStream:nD,createTableStreams:I4,purgeTableStream:iD,purgeSchemaTableStreams:w4,getStreamInfo:C4,updateLocalStreams:D4,closeConnection:E4,getJsmServerName:Nu,addNatsMsgHeader:ZL,updateIngestStreamConsumer:R4};async function JL(e,t=void 0){let{stdout:r,stderr:s}=await J3(e,{cwd:t});if(s)throw new Error(s.replace(`
2
+ "use strict";var $G=Object.create;var mc=Object.defineProperty;var VG=Object.getOwnPropertyDescriptor;var YG=Object.getOwnPropertyNames;var KG=Object.getPrototypeOf,WG=Object.prototype.hasOwnProperty;var a=(e,t)=>mc(e,"name",{value:t,configurable:!0});var ge=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),We=(e,t)=>{for(var r in t)mc(e,r,{get:t[r],enumerable:!0})},pO=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of YG(t))!WG.call(e,n)&&n!==r&&mc(e,n,{get:()=>t[n],enumerable:!(s=VG(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?$G(KG(e)):{},pO(t||!e||!e.__esModule?mc(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>pO(mc({},"__esModule",{value:!0}),e);var gO=m((Cle,TO)=>{var QG=require("fast-glob"),{statSync:Bh,existsSync:Hh,readFileSync:zG,writeFileSync:JG}=require("fs"),{spawnSync:jG,spawn:XG}=require("child_process"),{isMainThread:ZG}=require("worker_threads"),{join:un,relative:SO}=require("path"),{PACKAGE_ROOT:Gr}=R(),{tmpdir:ex}=require("os");require("source-map-support").install();var tx=["resources","server","dataLayer"],pc="ts-build",qh,rx=__filename.endsWith("tsBuild.js");if(rx){if(ZG){let r;try{Bh(un(Gr,pc)),r=!0}catch{}if(r)for(let s of QG.sync(tx.map(n=>n+"/**/*.ts"),{cwd:Gr})){let n=0,i=0;try{n=Bh(un(Gr,s)).mtimeMs-5e3,i=Bh(un(Gr,pc,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."),qh=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),qh=!0;if(qh){let s=jG(process.argv[0],[un(Gr,"node_modules/.bin/tsc")],{cwd:Gr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=un(ex(),"harperdb-tsc.pid"),i;if(Hh(n))try{process.kill(+zG(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=XG(process.argv[0],[un(Gr,"node_modules/.bin/tsc"),"--watch"],{cwd:Gr,detached:!0,stdio:"ignore"});JG(n,o.pid.toString()),o.unref()}}}}let e=TO.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Gr)&&!s[0].includes("node_modules")){let i=SO(Gr,s[0]),o;i.startsWith(pc)?o=un(Gr,SO(pc,i)):o=un(Gr,pc,i);let c=un(o,r),u=c+".js";if(Hh(u))return u;if(c.includes(".")&&Hh(c))return c}return t(r,s,n)}}});var R=m((Ule,PO)=>{"use strict";var xr=require("path"),sx=require("fs"),{relative:Lle,join:Dle}=xr,{existsSync:nx}=sx;function ix(){let e=__dirname;for(;!nx(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(ix,"getHDBPackageRoot");var jn=ix(),RO="js",r_=RO,ox="harperdb-config.yaml",ax="defaultConfig.yaml",cx="hdb",AO=`harperdb.${r_}`,OO=`customFunctionsServer.${r_}`,ux=`restartHdb.${r_}`,Gh="HarperDB",t_="Custom Functions",s_="Clustering Hub",n_="Clustering Leaf",lx="Clustering Ingest Service",_x="Clustering Reply Service",dx="foreground.pid",Ex="hdb.pid",fx="data",hx={HDB:Gh,CLUSTERING_HUB:s_,CLUSTERING_LEAF:n_,CLUSTERING_INGEST_SERVICE:lx,CLUSTERING_REPLY_SERVICE:_x,CUSTOM_FUNCTIONS:t_,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"},mx={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},px={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},Sx={harperdb:Gh,"clustering hub":s_,"clustering leaf":n_,"custom functions":t_,custom_functions:t_,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},Tx={CLUSTERING_HUB_PROC_DESCRIPTOR:s_,CLUSTERING_LEAF_PROC_DESCRIPTOR:n_},Fh={HDB:xr.join(jn,"server/harperdb"),CUSTOM_FUNCTIONS:xr.join(jn,"server/customFunctions"),CLUSTERING_HUB:xr.join(jn,"server/nats"),CLUSTERING_LEAF:xr.join(jn,"server/nats")},gx={HDB:xr.join(Fh.HDB,AO),CUSTOM_FUNCTIONS:xr.join(Fh.CUSTOM_FUNCTIONS,OO)},Rx={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:xr.join(jn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:xr.join(jn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:xr.join(jn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},Ax={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},NO="support@harperdb.io",Ox="customer-success@harperdb.io",bO=1,Nx=4141,yO="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",bx="https://www.harperdb.io/product",yx=`For support, please submit a request at ${yO} or contact ${NO}`,IO=`For license support, please contact ${Ox}`,Ix="None of the specified records were found.",wx="hash attribute not found",Cx=`Your current license only supports ${bO} role. ${IO}`,Lx="Your current license only supports 3 connections to a node.",Dx="127.0.0.1",Ux=1,Mx=/^\.$/,Px=/^\.\.$/,vx="U+002E",Bx=/\//g,Hx="U+002F",qx=/U\+002F/g,Fx=/^U\+002E$/,Gx=/^U\+002EU\+002E$/,xx="d",kx=999999,$x="*",Vx="--max-old-space-size=",Yx="system",Kx="__hdb_hash",Wx=".harperdb",Qx=".hdb",zx="keys",Jx="hdb_boot_properties.file",jx=".updateConfig.json",Xx="SIGTSTP",Zx=24,ek=6e4,tk=448,rk="blob",sk="trash",nk="database",ik="schema",ok="transactions",ak=".count",ck="id",uk="PROCESS_NAME",wO={SETTINGS_PATH_KEY:"settings_path"},CO=require("lodash"),lk={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",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},_k={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},dk={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},Ek={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"},fk={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"},Rr="hdb_internal:",hk={CREATE_SCHEMA:Rr+"create_schema",CREATE_TABLE:Rr+"create_table",CREATE_ATTRIBUTE:Rr+"create_attribute",ADD_USER:Rr+"add_user",ALTER_USER:Rr+"alter_user",DROP_USER:Rr+"drop_user",HDB_NODES:Rr+"hdb_nodes",HDB_USERS:Rr+"hdb_users",HDB_WORKERS:Rr+"hdb_workers",CATCHUP:Rr+"catchup",SCHEMA_CATCHUP:Rr+"schema_catchup",WORKER_ROOM:Rr+"cluster_workers"},mk={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"},pk="060493.ks",Sk=".license",Tk={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},W={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"},gk={CSV:".csv",JSON:".json"},Rk={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},Ak={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Sc={};Sc[W.INSERT]=W.INSERT;Sc[W.UPDATE]=W.UPDATE;Sc[W.UPSERT]=W.UPSERT;Sc[W.DELETE]=W.DELETE;var Ne=Object.create(null);Ne[W.DESCRIBE_ALL]=W.DESCRIBE_ALL;Ne[W.DESCRIBE_TABLE]=W.DESCRIBE_TABLE;Ne[W.DESCRIBE_SCHEMA]=W.DESCRIBE_SCHEMA;Ne[W.READ_LOG]=W.READ_LOG;Ne[W.ADD_NODE]=W.ADD_NODE;Ne[W.LIST_USERS]=W.LIST_USERS;Ne[W.LIST_ROLES]=W.LIST_ROLES;Ne[W.USER_INFO]=W.USER_INFO;Ne[W.SQL]=W.SQL;Ne[W.GET_JOB]=W.GET_JOB;Ne[W.SEARCH_JOBS_BY_START_DATE]=W.SEARCH_JOBS_BY_START_DATE;Ne[W.DELETE_FILES_BEFORE]=W.DELETE_FILES_BEFORE;Ne[W.EXPORT_LOCAL]=W.EXPORT_LOCAL;Ne[W.EXPORT_TO_S3]=W.EXPORT_TO_S3;Ne[W.CLUSTER_STATUS]=W.CLUSTER_STATUS;Ne[W.REMOVE_NODE]=W.REMOVE_NODE;Ne[W.RESTART]=W.RESTART;Ne[W.CUSTOM_FUNCTIONS_STATUS]=W.CUSTOM_FUNCTIONS_STATUS;Ne[W.GET_CUSTOM_FUNCTIONS]=W.GET_CUSTOM_FUNCTIONS;Ne[W.GET_CUSTOM_FUNCTION]=W.GET_CUSTOM_FUNCTION;Ne[W.SET_CUSTOM_FUNCTION]=W.SET_CUSTOM_FUNCTION;Ne[W.DROP_CUSTOM_FUNCTION]=W.DROP_CUSTOM_FUNCTION;Ne[W.ADD_CUSTOM_FUNCTION_PROJECT]=W.ADD_CUSTOM_FUNCTION_PROJECT;Ne[W.DROP_CUSTOM_FUNCTION_PROJECT]=W.DROP_CUSTOM_FUNCTION_PROJECT;Ne[W.PACKAGE_CUSTOM_FUNCTION_PROJECT]=W.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ne[W.DEPLOY_CUSTOM_FUNCTION_PROJECT]=W.DEPLOY_CUSTOM_FUNCTION_PROJECT;var Ok={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},Nk={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},LO={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"},bk=CO.invert(LO),O={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_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",HTTP_THREADS:"http_threads",HTTP_SESSION_AFFINITY:"http_sessionAffinity",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_AUTHENTICATION_OPERATIONTOKENTIMEOUT:"operationsApi_authentication_operationTokenTimeout",OPERATIONSAPI_AUTHENTICATION_REFRESHTOKENTIMEOUT:"operationsApi_authentication_refreshTokenTimeout",OPERATIONSAPI_FOREGROUND:"operationsApi_foreground",OPERATIONSAPI_TLS_CERTIFICATE:"operationsApi_tls_certificate",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_TLS_PRIVATEKEY:"operationsApi_tls_privateKey",OPERATIONSAPI_TLS_CERT_AUTH:"operationsApi_tls_certificateAuthority",OPERATIONSAPI_NETWORK_TIMEOUT:"operationsApi_network_timeout",OPERATIONSAPI_NODEENV:"operationsApi_nodeEnv",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",SCHEMAS:"schemas",IGNORE_SCRIPTS:"ignoreScripts",MQTT_NETWORK_PORT:"mqtt_network_port",MQTT_WEBSOCKET:"mqtt_webSocket",MQTT_NETWORK_SECUREPORT:"mqtt_network_securePort",MQTT_REQUIREAUTHENTICATION:"mqtt_requireAuthentication"},DO={settings_path:wO.SETTINGS_PATH_KEY,hdb_root_key:O.ROOTPATH,hdb_root:O.ROOTPATH,server_port_key:O.OPERATIONSAPI_NETWORK_PORT,server_port:O.OPERATIONSAPI_NETWORK_PORT,cert_key:O.OPERATIONSAPI_TLS_CERTIFICATE,certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:O.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:O.OPERATIONSAPI_NETWORK_HTTPS,https_on:O.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:O.OPERATIONSAPI_NETWORK_CORS,cors_on:O.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:O.LOGGING_LEVEL,log_level:O.LOGGING_LEVEL,log_path_key:O.LOGGING_ROOT,log_path:O.LOGGING_ROOT,props_env_key:O.OPERATIONSAPI_NODEENV,node_env:O.OPERATIONSAPI_NODEENV,clustering_node_name_key:O.CLUSTERING_NODENAME,node_name:O.CLUSTERING_NODENAME,clustering_enabled_key:O.CLUSTERING_ENABLED,clustering:O.CLUSTERING_ENABLED,max_http_threads:O.HTTP_THREADS,max_hdb_processes:O.HTTP_THREADS,server_timeout_key:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:O.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:O.LOGGING_AUDITLOG,disable_transaction_log:O.LOGGING_AUDITLOG,operation_token_timeout_key:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:O.CUSTOMFUNCTIONS_ENABLED,custom_functions:O.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:O.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:O.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:O.HTTP_THREADS,log_to_file:O.LOGGING_FILE,log_to_stdstreams:O.LOGGING_STDSTREAMS,run_in_foreground:O.OPERATIONSAPI_FOREGROUND,local_studio_on:O.LOCALSTUDIO_ENABLED,clustering_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:O.CLUSTERING_USER,clustering_enabled:O.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:O.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:O.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:O.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:O.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:O.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:O.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:O.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:O.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:O.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:O.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:O.CLUSTERING_NODENAME,clustering_tls_certificate:O.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:O.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:O.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:O.CLUSTERING_TLS_INSECURE,clustering_tls_verify:O.CLUSTERING_TLS_VERIFY,clustering_loglevel:O.CLUSTERING_LOGLEVEL,clustering_republishmessages:O.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:O.CLUSTERING_DATABASELEVEL,customfunctions_enabled:O.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:O.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:O.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:O.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:O.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:O.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:O.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:O.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:O.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:O.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:O.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:O.CUSTOMFUNCTIONS_NODEENV,http_threads:O.HTTP_THREADS,http_session_affinity:O.HTTP_SESSION_AFFINITY,customfunctions_processes:O.HTTP_THREADS,customfunctions_root:O.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:O.LOCALSTUDIO_ENABLED,logging_file:O.LOGGING_FILE,logging_level:O.LOGGING_LEVEL,logging_root:O.LOGGING_ROOT,logging_rotation_enabled:O.LOGGING_ROTATION_ENABLED,logging_rotation_compress:O.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:O.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:O.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:O.LOGGING_ROTATION_PATH,logging_stdstreams:O.LOGGING_STDSTREAMS,logging_auditlog:O.LOGGING_AUDITLOG,logging_auditretention:O.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:O.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:O.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:O.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:O.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:O.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:O.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:O.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:O.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:O.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:O.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:O.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:O.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:O.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:O.OPERATIONSAPI_NODEENV,operationsapi_root:O.ROOTPATH,schemas:O.SCHEMAS,storage_path:O.STORAGE_PATH,ignorescripts:O.IGNORE_SCRIPTS,mqtt_network_port:O.MQTT_NETWORK_PORT,mqtt_websocket:O.MQTT_WEBSOCKET,mqtt_network_secureport:O.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:O.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:O.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:O.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:O.AUTHENTICATION_CACHETTL,authentication_enablesessions:O.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:O.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:O.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in O){let t=O[e];DO[t.toLowerCase()]=t}var yk={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},Ik={csv_file_load:"csv_file_load",csv_data_load:W.CSV_DATA_LOAD,csv_url_load:W.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"},wk={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"},Ck={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},Lk={VERSION_DEFAULT:"2.2.0"},Dk={DEVELOPMENT:8192,DEFAULT:512},Uk={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"},Mk={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"},Pk={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},UO={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},vk=Symbol("metadata"),Bk="__clustering__",Hk=Object.values(UO),qk=15984864e5,MO={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},Fk=CO.invert(MO),Gk={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},xk=111,kk=`\r
3
+ `,$k={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Vk=["*","%"],Yk="unauthorized_access",Kk="func_val",Wk={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},Qk={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},zk={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"},Jk={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},jk={HTTP:"http"},Xk={STOPPED:"stopped",ONLINE:"online"},Zk="3.x.x",e$={SUCCESS:"success",FAILURE:"failure"},t$={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};PO.exports={LOCAL_HARPERDB_OPERATIONS:Ne,HDB_SUPPORT_ADDRESS:NO,HDB_SUPPORT_URL:yO,HDB_PRICING_URL:bx,SUPPORT_HELP_MSG:yx,LICENSE_HELP_MSG:IO,HDB_PROC_NAME:AO,HDB_PROC_DESCRIPTOR:Gh,CLUSTERING_LEAF_PROC_DESCRIPTOR:n_,CLUSTERING_HUB_PROC_DESCRIPTOR:s_,SYSTEM_SCHEMA_NAME:Yx,HASH_FOLDER_NAME:Kx,HDB_HOME_DIR_NAME:Wx,UPDATE_FILE_NAME:jx,LICENSE_KEY_DIR_NAME:zx,BOOT_PROPS_FILE_NAME:Jx,JOB_TYPE_ENUM:Ik,JOB_STATUS_ENUM:Tk,SYSTEM_TABLE_NAMES:Ek,SYSTEM_TABLE_HASH_ATTRIBUTES:fk,OPERATIONS_ENUM:W,VALID_S3_FILE_TYPES:gk,S3_BUCKET_AUTH_KEYS:Rk,VALID_SQL_OPS_ENUM:Ak,GEO_CONVERSION_ENUM:Nk,HDB_SETTINGS_NAMES:LO,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:bk,SERVICE_ACTIONS_ENUM:Ok,CLUSTER_MESSAGE_TYPE_ENUM:wk,CLUSTER_CONNECTION_DIRECTION_ENUM:Ck,CLUSTER_EVENTS_DEFS_ENUM:Uk,PERIOD_REGEX:Mx,DOUBLE_PERIOD_REGEX:Px,UNICODE_PERIOD:vx,FORWARD_SLASH_REGEX:Bx,UNICODE_FORWARD_SLASH:Hx,ESCAPED_FORWARD_SLASH_REGEX:qx,ESCAPED_PERIOD_REGEX:Fx,ESCAPED_DOUBLE_PERIOD_REGEX:Gx,REG_KEY_FILE_NAME:pk,RESTART_TIMEOUT_MS:ek,HDB_FILE_PERMISSIONS:tk,DATABASES_DIR_NAME:nk,LEGACY_DATABASES_DIR_NAME:ik,TRANSACTIONS_DIR_NAME:ok,LIMIT_COUNT_NAME:ak,ID_ATTRIBUTE_STRING:ck,INSERT_MODULE_ENUM:_k,UPGRADE_JSON_FIELD_NAMES_ENUM:dk,RESTART_CODE:Xx,RESTART_CODE_NUM:Zx,CLUSTER_OPERATIONS:Sc,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:mk,HDB_INTERNAL_SC_CHANNEL_PREFIX:Rr,INTERNAL_SC_CHANNELS:hk,CLUSTERING_MESSAGE_TYPES:Gk,HDB_FILE_SUFFIX:Qx,BLOB_FOLDER_NAME:rk,HDB_TRASH_DIR:sk,ORIGINATOR_SET_VALUE:xk,LICENSE_VALUES:Lk,RAM_ALLOCATION_ENUM:Dk,TIME_STAMP_NAMES_ENUM:UO,TIME_STAMP_NAMES:Hk,PERMS_UPDATE_RELEASE_TIMESTAMP:qk,SEARCH_NOT_FOUND_MESSAGE:Ix,SEARCH_ATTRIBUTE_NOT_FOUND:wx,LICENSE_ROLE_DENIED_RESPONSE:Cx,LICENSE_MAX_CONNS_REACHED:Lx,BASIC_LICENSE_MAX_NON_CU_ROLES:bO,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:Nx,VALUE_SEARCH_COMPARATORS:MO,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:Fk,LICENSE_FILE_NAME:Sk,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:Mk,NEW_LINE:kk,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:Ux,MOMENT_DAYS_TAG:xx,API_TURNOVER_SEC:kx,LOOPBACK:Dx,CODE_EXTENSION:r_,WILDCARD_SEARCH_VALUE:$x,NODE_ERROR_CODES:Pk,JAVASCRIPT_EXTENSION:RO,PERMS_CRUD_ENUM:$k,UNAUTHORIZED_PERMISSION_NAME:Yk,SEARCH_WILDCARDS:Vk,FUNC_VAL:Kk,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:Wk,JWT_ENUM:Qk,CLUSTERING_FLAG:Bk,ITC_EVENT_TYPES:zk,CUSTOM_FUNCTION_PROC_NAME:OO,CUSTOM_FUNCTION_PROC_DESCRIPTOR:t_,SERVICES:Jk,THREAD_TYPES:jk,MEM_SETTING_KEY:Vx,HDB_RESTART_SCRIPT:ux,PROCESS_DESCRIPTORS:hx,SERVICE_SERVERS:gx,SERVICE_SERVERS_CWD:Fh,PROCESS_DESCRIPTORS_VALIDATE:Sx,LAUNCH_SERVICE_SCRIPTS:Rx,LOG_LEVELS:px,PROCESS_NAME_ENV_PROP:uk,LOG_NAMES:mx,PM2_PROCESS_STATUSES:Xk,CONFIG_PARAM_MAP:DO,CONFIG_PARAMS:O,HDB_CONFIG_FILE:ox,HDB_DEFAULT_CONFIG_FILE:ax,ROLE_TYPES_ENUM:Ax,BOOT_PROP_PARAMS:wO,INSTALL_PROMPTS:lk,HDB_ROOT_DIR_NAME:cx,CLUSTERING_PROCESSES:Tx,FOREGROUND_PID_FILE:dx,PACKAGE_ROOT:jn,PRE_4_0_0_VERSION:Zk,SCHEMAS_PARAM_CONFIG:yk,METADATA_PROPERTY:vk,AUTH_AUDIT_STATUS:e$,AUTH_AUDIT_TYPES:t$,HDB_PID_FILE:Ex,DEFAULT_DATABASE_NAME:fx};gO()});var $i=m((Ple,HO)=>{"use strict";var vO=require("minimist");HO.exports=r$;function r$(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=BO(process.env),s=BO(vO(process.argv))):(r=process.env,s=vO(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(r$,"assignCMDENVVariables");function BO(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(BO,"objKeysToLowerCase")});var C=m((Ble,Wh)=>{"use strict";var Vi=require("fs-extra"),{workerData:s$,threadId:n$}=require("worker_threads"),dn=require("path"),GO=require("yaml"),xO=require("properties-reader"),dt=R(),qO=$i(),i$=require("os"),{PACKAGE_ROOT:kh}=R(),{_assignPackageExport:o$}=require("../index"),gc={};for(let e in console)gc[e]||(gc[e]=console[e]);var Qt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},kO={STDOUT:"stdOut",STDERR:"stdErr"},a$=dn.join(kh,"logs"),c$=dn.join(kh,"config/yaml/",dt.HDB_DEFAULT_CONFIG_FILE),u$=1e4,ln,_n,Wt,i_,o_,Rc,Qo,Tc;Tc===void 0&&$O();Wh.exports={notify:KO,fatal:WO,error:Ac,warn:Kh,info:a_,debug:Yh,trace:Vh,setLogLevel:m$,log_level:Wt,loggerWithTag:l$,suppressLogging:_$,initLogSettings:$O,setupConsoleLogging:VO,logCustomLevel:f$,closeLogFile:$h,getLogFilePath:()=>Rc,OUTPUTS:kO,AuthAuditLog:T$};o$("logger",Wh.exports);function $O(e=!1){try{if(Tc===void 0||e){$h();let t=h$(),r=qO(["ROOTPATH"]);try{Tc=xO(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Vi.pathExistsSync(dn.join(r.ROOTPATH,dt.HDB_CONFIG_FILE)))throw s}({level:Wt,config_log_path:o_,to_file:ln,to_stream:_n}=p$(r.ROOTPATH?dn.join(r.ROOTPATH,dt.HDB_CONFIG_FILE):Tc.get("settings_path"))),i_=dt.LOG_NAMES.HDB,Rc=dn.join(o_,i_)}}catch(t){if(Tc=void 0,t.code===dt.NODE_ERROR_CODES.ENOENT){let r=qO(Object.keys(dt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=dt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===dt.CONFIG_PARAMS.LOGGING_LEVEL){Wt=u;continue}if(c===dt.CONFIG_PARAMS.LOGGING_STDSTREAMS){_n=u;continue}c===dt.CONFIG_PARAMS.LOGGING_FILE&&(ln=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=S$();ln=ln===void 0?n:ln,ln=FO(ln),_n=_n===void 0?i:_n,_n=FO(_n),Wt=Wt===void 0?s:Wt,o_=a$,i_=dt.LOG_NAMES.INSTALL,Rc=dn.join(o_,i_);return}throw Ac("Error initializing log settings"),Ac(t),t}VO()}a($O,"initLogSettings");var xh=!0;function VO(){Wo("error",Ac),Wo("warn",Kh),Wo("log",a_),Wo("info",a_),Wo("debug",Yh),Wo("trace",Vh)}a(VO,"setupConsoleLogging");function Wo(e,t){console[e]=function(...r){if(xh&&t(...r),!/PM2 log:|App \[/.test(r[0]))return gc[e](...r)}}a(Wo,"logConsole");function l$(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(KO),fatal:r(WO),error:r(Ac),warn:r(Kh),info:r(a_),debug:r(Yh),trace:r(Vh)};function r(s){return function(...n){return s(t,...n)}}}a(l$,"loggerWithTag");function _$(e){try{xh=!1,e()}finally{xh=!0}}a(_$,"suppressLogging");var d$=s$?.name?.replace(/ /g,"-")||"main";function En(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||d$+"/"+n$);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(En,"createLogRecord");function Oc(e){ln&&YO(e),_n&&process.stdout.write(e)}a(Oc,"logStdOut");function c_(e){ln&&YO(e),_n&&process.stderr.write(e)}a(c_,"logStdErr");function YO(e){E$(),Qo?Vi.appendFileSync(Qo,e):gc.log(e)}a(YO,"logToFile");function $h(){try{Vi.closeSync(Qo)}catch{}Qo=null}a($h,"closeLogFile");function E$(){if(!Qo){try{if(!Rc)debugger;Qo=Vi.openSync(Rc,"a")}catch(e){gc.error(e)}setTimeout(()=>{$h()},u$).unref()}}a(E$,"openLogFile");function a_(...e){Qt[Wt]<=Qt.info&&Oc(En("info",e))}a(a_,"info");function Vh(...e){Qt[Wt]<=Qt.trace&&Oc(En("trace",e))}a(Vh,"trace");function Ac(...e){Qt[Wt]<=Qt.error&&c_(En("error",e))}a(Ac,"error");function Yh(...e){Qt[Wt]<=Qt.debug&&Oc(En("debug",e))}a(Yh,"debug");function KO(...e){Qt[Wt]<=Qt.notify&&Oc(En("notify",e))}a(KO,"notify");function WO(...e){Qt[Wt]<=Qt.fatal&&c_(En("fatal",e))}a(WO,"fatal");function Kh(...e){Qt[Wt]<=Qt.warn&&c_(En("warn",e))}a(Kh,"warn");function f$(e,t,...r){t===kO.STDERR?c_(En(e,r)):Oc(En(e,r))}a(f$,"logCustomLevel");function h$(){let e;try{e=i$.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=dn.join(e,dt.HDB_HOME_DIR_NAME,dt.BOOT_PROPS_FILE_NAME);return Vi.existsSync(t)||(t=dn.join(kh,"utility/hdb_boot_properties.file")),t}a(h$,"getPropsFilePath");function m$(e){Wt=e}a(m$,"setLogLevel");function FO(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(FO,"autoCastBoolean");function p$(e){try{if(e.includes("config/settings.js")){let o=xO(e);return{level:o.get(dt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:dn.dirname(o.get(dt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(dt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=GO.parseDocument(Vi.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===dt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(p$,"getLogConfig");function S$(){try{let e=GO.parseDocument(Vi.readFileSync(c$,"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(S$,"getDefaultConfig");function T$(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(T$,"AuthAuditLog")});var Yi=m((qle,g$)=>{g$.exports={name:"harperdb",version:"4.2.0-alpha.15",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:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},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":"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:"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":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.388.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.19.1","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","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.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.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.18.15","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},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",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:"^4.9.4","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 Ki=m((xle,QO)=>{"use strict";var Fle=require("fs-extra"),Gle=C();QO.exports={version:R$,printVersion:O$,nodeVersion:A$};var Xn=Yi();function R$(){if(Xn)return Xn.version}a(R$,"version");function A$(){if(Xn&&Xn.engines&&Xn.engines["preferred-node"])return Xn.engines["preferred-node"]}a(A$,"nodeVersion");function O$(){Xn&&console.log(`HarperDB Version ${Xn.version}`)}a(O$,"printVersion")});var XO=m(($le,jO)=>{"use strict";var zO=require("semver/functions/major"),N$=require("semver/functions/satisfies"),JO=Yi(),Nc=process.versions&&process.versions.node?process.versions.node:void 0;jO.exports=b$;function b$(){let e=JO.engines.node,t=JO.engines["preferred-node"];if(Nc){if(e&&!N$(Nc,e))return{error:`This version of HarperDB supports Node.js versions: ${e}, the currently installed Node.js version is: ${Nc}. Please install a version of Node.js that is withing the defined range.`};if(t&&zO(Nc)!==zO(t))return{warn:`This version of HarperDB is tested against Node.js version ${t}, the currently installed Node.js version is: ${Nc}. Some issues may occur with untested versions of Node.js.`}}}a(b$,"checkNodeVersion")});var Qh=m((Yle,ZO)=>{"use strict";var y$=require("util"),I$=require("path"),w$=require("child_process"),C$=y$.promisify(w$.execFile),L$=1e3*1e3*10;ZO.exports={findPs:D$};async function D$(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await C$("ps",["wwxo",`pid,${r}`],{maxBuffer:L$});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:I$.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(D$,"findPs")});var xe=m((Wle,tN)=>{"use strict";var U$="__dbis__",M$="__txns__",P$="__environment_name__",v$="__dbi_defintion__",B$={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"},H$=["__createdtime__","__updatedtime__"],q$="\uFFFF",eN={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},F$=Object.values(eN);tN.exports={AUDIT_STORE_NAME:M$,INTERNAL_DBIS_NAME:U$,DBI_DEFINITION_NAME:v$,SEARCH_TYPES:B$,TIMESTAMP_NAMES:H$,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:P$,TRANSACTIONS_DBI_NAMES_ENUM:eN,TRANSACTIONS_DBIS:F$,OVERFLOW_MARKER:q$}});var Ar=m((Qle,lN)=>{"use strict";var rN=R(),sN=xe(),nN={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},iN=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),oN={500:iN("There was an error processing your request."),400:"Invalid request"},G$=oN[nN.INTERNAL_SERVER_ERROR],x$={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.`},k$={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},$$={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"},V$={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 ${sN.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${sN.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"},Y$={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${rN.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 ${rN.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"},aN={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"},K$={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."},W$={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`},Q$={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"},z$={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},J$={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`},cN={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.`},uN={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}`},j$={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."},X$={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Z$={...aN,...$$,...x$,...K$,...W$,...Q$,...z$,...J$,...Y$,...cN,...uN,...j$,...X$,...k$};lN.exports={CHECK_LOGS_WRAPPER:iN,HDB_ERROR_MSGS:Z$,DEFAULT_ERROR_MSGS:oN,DEFAULT_ERROR_RESP:G$,HTTP_STATUS_CODES:nN,LMDB_ERRORS_ENUM:V$,AUTHENTICATION_ERROR_MSGS:aN,VALIDATION_ERROR_MSGS:cN,ITC_ERRORS:uN}});var z=m((Jle,EN)=>{"use strict";var zo=Ar(),eV=C(),tV=R(),u_=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,_N),this.statusCode=s||zo.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(zo.DEFAULT_ERROR_MSGS[s]?zo.DEFAULT_ERROR_MSGS[s]:zo.DEFAULT_ERROR_MSGS[zo.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&&eV[n](i)}},zh=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}},Jh=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function _N(e,t,r,s=tV.LOG_LEVELS.ERROR,n=null,i=!1){if(dN(e))return e;let o=new u_(e,t,r,s,n);return i&&delete o.stack,o}a(_N,"handleHDBError");function dN(e){return e.__proto__.constructor.name===u_.name}a(dN,"isHDBError");EN.exports={isHDBError:dN,handleHDBError:_N,ClientError:zh,ServerError:Jh,hdb_errors:zo}});var Ue=m((Xle,gN)=>{"use strict";var Cc=R(),rV=G(),zt=Y(),Lc=require("path"),sV=require("minimist"),fN=require("fs-extra"),hN=require("lodash");zt.initSync();var{CONFIG_PARAMS:Zn,SCHEMAS_PARAM_CONFIG:bc,SYSTEM_SCHEMA_NAME:l_}=Cc,yc,Ic,wc;function mN(){if(yc!==void 0)return yc;if(zt.getHdbBasePath()!==void 0)return yc=zt.get(Zn.STORAGE_PATH)||Lc.join(zt.getHdbBasePath(),Cc.DATABASES_DIR_NAME),yc}a(mN,"getBaseSchemaPath");function pN(){if(Ic!==void 0)return Ic;if(zt.getHdbBasePath()!==void 0)return Ic=TN(l_),Ic}a(pN,"getSystemSchemaPath");function SN(){if(wc!==void 0)return wc;if(zt.getHdbBasePath()!==void 0)return wc=zt.get(Cc.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||Lc.join(zt.getHdbBasePath(),Cc.TRANSACTIONS_DIR_NAME),wc}a(SN,"getTransactionAuditStoreBasePath");function nV(e,t){let r=zt.get(Zn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||Lc.join(SN(),e.toString())}a(nV,"getTransactionAuditStorePath");function TN(e,t){e=e.toString(),t=t&&t.toString();let r=zt.get(Cc.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||Lc.join(mN(),e)}a(TN,"getSchemaPath");function iV(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,sV(process.argv));let s=r[Zn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!rV.isObject(s))throw o;i=s}for(let o of i){let c=o[l_];if(!c)continue;let u=zt.get(Zn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[bc.PATH];if(l)return hN.set(u,[l_,bc.TABLES,t,bc.PATH],l),zt.setProperty(Zn.SCHEMAS,u),l;let _=c?.[bc.PATH];if(_)return hN.set(u,[l_,bc.PATH],_),zt.setProperty(Zn.SCHEMAS,u),_}}let n=r[Zn.STORAGE_PATH.toUpperCase()];if(n){if(!fN.pathExistsSync(n))throw new Error(n+" does not exist");let i=Lc.join(n,e);return fN.mkdirsSync(i),zt.setProperty(Zn.STORAGE_PATH,n),i}return pN()}a(iV,"initSystemSchemaPaths");function oV(){yc=void 0,Ic=void 0,wc=void 0}a(oV,"resetPaths");gN.exports={getBaseSchemaPath:mN,getSystemSchemaPath:pN,getTransactionAuditStorePath:nV,getTransactionAuditStoreBasePath:SN,getSchemaPath:TN,initSystemSchemaPaths:iV,resetPaths:oV}});var Ht=m((r_e,bN)=>{"use strict";var aV=Ar().LMDB_ERRORS_ENUM,e_e=require("lmdb"),cV=xe(),t_e=require("buffer").Buffer,{OVERFLOW_MARKER:RN,MAX_SEARCH_KEY_LENGTH:__}=cV,AN=["number","string","symbol","boolean","bigint"];function uV(e){if(e=e?.primaryStore||e,!e)throw new Error(aV.ENV_REQUIRED)}a(uV,"validateEnv");function lV(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(lV,"stringifyData");function _V(e){return e instanceof Date?e.valueOf():e}a(_V,"convertKeyValueToWrite");function dV(e){if(e==null)return;if(AN.includes(typeof e))return e.length>__?[e.slice(0,__)+RN]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(AN.includes(typeof n))n.length>__?t.push(n.slice(0,__)+RN):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(dV,"getIndexedValues");var d_=0,ON=0;function NN(){ON=Date.now()-performance.now()}a(NN,"adjustStartTime");NN();var EV=6e4;setInterval(NN,EV).unref();function fV(){let e=performance.now()+ON;return e>d_?(d_=e,e):(d_+=488e-6,d_)}a(fV,"getNextMonotonicTime");bN.exports={validateEnv:uV,stringifyData:lV,convertKeyValueToWrite:_V,getNextMonotonicTime:fV,getIndexedValues:dV}});var yN,Cs,jh,Dc=ge(()=>{yN=require("events"),Cs=class extends yN.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new jh;return t.queue=this,t}push(t){this.send(t)}send(t){this.resolveNext?(this.resolveNext({value:t}),this.resolveNext=null):this.hasDataListeners?this.emit("data",t):(this.queue||(this.queue=[]),this.queue.push(t))}getNextMessage(){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)}},jh=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function Uc(e){return e[Nt]||(e[Nt]=Object.create(null))}function p_(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[Nt];if(l&&c in l)return l[c];let _=this[_e]?.[c];if(_&&typeof _=="object"){let d=IN(_,o);if(d)return l||(l=this[Nt]=Object.create(null)),l[c]=d}return _},set(l){Uc(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,E_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Uc(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,E_.ClientError)(`${c} must be a string, attempt to assign ${l}`);Uc(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[Nt];return u?.[o]!==void 0?u[o]:this[_e]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new E_.ClientError("Can not add a property to a sealed table schema");Uc(this)[o]=c}),i("deleteProperty",function(o){Uc(this)[o]=void 0}),i("toJSON",function(){let o=this[Nt],c;for(let l in o)c||(c=Object.assign({},this[_e])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[_e])),Object.assign(c,this)),c||this[_e]}),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 IN(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[_e]=n}},p_(r,t)),new r(e)):new f_(e);case Array:let s=new m_(e.length);s[_e]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=IN(o,t?.elements)),s[n]=o}return s}}function S_(e){let t=e[Nt],r;for(let n in t){r||(r=Object.assign({},e[_e]));let i=t[n];i&&typeof i=="object"&&(i=S_(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[_e])),Object.assign(r,e)),r||e[_e]}function Mc(e){let t;if(e[_e]&&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=Mc(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[Nt];for(let s in r){t||(t=Object.assign({},e[_e]));let n=r[s];n&&typeof n=="object"&&(n=Mc(n)),t[s]=n}return t?Object.freeze(t):e[_e]||Object.freeze(e)}function h_(e){let t=e[_e];if(!t)return!0;if(e.constructor===Array){if(e[Wi]||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?.[_e]===n){if(h_(i))return!0}else return!0}}else{let r=e[Nt];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[_e]===i){if(h_(n))return!0}else return!0}else return!0}}return!1}var E_,Nt,f_,Wi,m_,T_=ge(()=>{Ls();E_=D(z()),Nt=Symbol("own-data");a(Uc,"getChanges");a(p_,"assignTrackedAccessors");a(IN,"trackObject");f_=class{static{a(this,"GenericTrackedObject")}constructor(t){this[_e]=t}};p_(f_,{});a(S_,"collapseData");a(Mc,"deepFreeze");a(h_,"hasChanges");Wi=Symbol.for("has-array-changes"),m_=class extends Array{static{a(this,"TrackedArray")}[Wi];constructor(t){super(t)}splice(...t){return this[Wi]=!0,super.splice(...t)}push(...t){return this[Wi]=!0,super.push(...t)}pop(){return this[Wi]=!0,super.pop()}unshift(...t){return this[Wi]=!0,super.unshift(...t)}shift(){return this[Wi]=!0,super.shift()}};m_.prototype.constructor=Array});function Ze(e,t){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 r=e.transaction=new Xh;e.timestamp&&(r.timestamp=e.timestamp),r[be]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var wN,CN,Xh,Qi=ge(()=>{wN=D(Ht()),CN=require("../index");Ls();a(Ze,"transaction");(0,CN._assignPackageExport)("transaction",Ze);Ze.commit=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ze.abort=function(e){let t=(e[be]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};Xh=class extends Array{static{a(this,"TransactionSet")}commit(t=!0){let r=[],s=this.length;for(let n=0;n<s;n++)this[n].validate?.();this.timestamp||(this.timestamp=(0,wN.getNextMonotonicTime)());for(let n=0;n<s;n++){let o=this[n].commit(this.timestamp,t);o?.then&&r.push(o)}return r.length>0?Promise.all(r).then(()=>(this.splice(0,s),this.commit(t))):this.length>s?(this.splice(0,s),this.commit(t)):(this.length=0,{txnTime:this.timestamp})}abort(){for(let t of this)t.abort?.()}doneReading(){for(let t of this)t.doneReading?.()}}});function tm(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,E;switch(mV[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]=Us.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 Rt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new Zh.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=rm(e);if(!T)throw new Zh.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:A,value:g})=>new Promise(v=>setImmediate(()=>v(T(g)?A:DN.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function rm(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case Rt.SEARCH_TYPES.EQUALS:case void 0:return Ds(r,n=>n===s);case Rt.SEARCH_TYPES.CONTAINS:return Ds(r,n=>n?.toString().includes(s));case Rt.SEARCH_TYPES.ENDS_WITH:case Rt.SEARCH_TYPES._ENDS_WITH:return Ds(r,n=>n?.toString().endsWith(s));case Rt.SEARCH_TYPES.STARTS_WITH:case Rt.SEARCH_TYPES._STARTS_WITH:return Ds(r,n=>typeof n=="string"&&n.startsWith(s));case Rt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Ds(r,n=>(0,Us.compareKeys)(n,s[0])>=0&&(0,Us.compareKeys)(n,s[1])<=0);case"gt":case Rt.SEARCH_TYPES.GREATER_THAN:case Rt.SEARCH_TYPES._GREATER_THAN:return Ds(r,n=>(0,Us.compareKeys)(n,s)>0);case"ge":case Rt.SEARCH_TYPES.GREATER_THAN_EQUAL:case Rt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Ds(r,n=>(0,Us.compareKeys)(n,s)>=0);case Rt.SEARCH_TYPES.LESS_THAN:case"lt":case Rt.SEARCH_TYPES._LESS_THAN:return Ds(r,n=>(0,Us.compareKeys)(n,s)<0);case"le":case Rt.SEARCH_TYPES.LESS_THAN_EQUAL:case Rt.SEARCH_TYPES._LESS_THAN_EQUAL:return Ds(r,n=>(0,Us.compareKeys)(n,s)<=0);case"ne":return Ds(r,n=>(0,Us.compareKeys)(n,s)!==0);default:return}}function Ds(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 g_(e){if(!e)return;let t=new em,r,s,n,i,o;for(;r=LN.exec(e);){i=LN.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.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}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=hV[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var Zh,Rt,Us,DN,LN,hV,mV,em,R_=ge(()=>{Zh=D(z()),Rt=D(xe()),Us=require("ordered-binary"),DN=require("lmdb"),LN=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,hV={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(tm,"idsForCondition");mV={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(rm,"filterByType");a(Ds,"attributeComparator");a(g_,"parseQuery");em=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 im={};We(im,{CONTEXT:()=>be,ID_PROPERTY:()=>le,IS_COLLECTION:()=>fn,RECORD_PROPERTY:()=>_e,Resource:()=>bt,SAVE_UPDATES_PROPERTY:()=>HN,snake_case:()=>SV});function SV(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function UN(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 nm(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function kr(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[be]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[be]||i):l=i:(l=n,c=l[le]??l[this.primaryKey]??null):i?o=i[be]||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 E of n){if(typeof E=="object"&&E)break;c.push(E)}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 E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ze(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[HN]=!1),o.authorize){o.authorize=!1;let f=t.type==="read"?E.allowRead(o.user,o):t.type==="update"?E.doesExist?.()===!1?E.allowCreate(o.user,o):E.allowUpdate(o.user,o):t.type==="create"?E.allowCreate(o.user,o):E.allowDelete(o.user,o);if(f?.then)return f.then(h=>{if(!h)throw new A_(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new A_(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function $r(e,t){let r=new BN.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 sm(e){let t=e[_e];if(t){let r=e[Nt];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 MN(e){if(typeof e=="string")return t=>sm(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=sm(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=sm(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 PN,vN,BN,be,le,fn,HN,_e,pV,bt,A_,nm,Ls=ge(()=>{PN=require("crypto");Dc();vN=require("../index"),BN=D(z());T_();Qi();R_();be=Symbol.for("context"),le=Symbol.for("primary-key"),fn=Symbol("is-collection"),HN=Symbol("save-updates"),_e=Symbol("stored-record"),pV={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},bt=class{static{a(this,"Resource")}[be];[le];static transactions;constructor(t,r){this[le]=t;let s=r?.[be];this[be]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=kr(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=MN(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=kr(function(t,r,s,n){if(Array.isArray(n)&&t[fn]){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):$r(t,"put")},{hasContent:!0,type:"update"});static delete=kr(function(t,r,s,n){return t.delete?t.delete(r):$r(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,PN.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):$r(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=kr(function(t,r,s,n){return t.invalidate?t.invalidate(r):$r(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=kr(function(t,r,s,n){return t[le]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=kr(function(t,r,s,n){return t.connect?t.connect(r):$r(t,"connect")},{type:"read"});static subscribe=kr(function(t,r,s,n){return t.subscribe?t.subscribe(r):$r(t,"subscribe")},{type:"read"});static publish=kr(function(t,r,s,n){return t[le]!=null&&t.update?.(),t.publish?t.publish(n,r):$r(t,"publish")},{hasContent:!0,type:"create"});static search=kr(function(t,r,s,n){let i=t.search?t.search(s):$r(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=MN(o);return i.map(c)}return i},{type:"read"});static query=kr(function(t,r,s,n){return t.search?t.search(n,r):$r(t,"search")},{hasContent:!0,type:"read"});static copy=kr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):$r(t,"copy")},{type:"create"});static move=kr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):$r(t,"move")},{type:"delete"});post(t){if(this[fn])return this.constructor.create(this[le],t,this[be]);$r(this,"post")}static isCollection(t){return t?.[fn]}static coerceId(t){return t}static parseQuery(t){return g_(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&&pV[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:UN(t,this)}}return UN(t,this)}static getResource(t,r,s){let n,i=r[be],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[le]===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=_[le],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[fn]=!0),n}connect(t){let r=new Cs;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[le]}getContext(){return this[be]}};bt.prototype[be]=null;(0,vN._assignPackageExport)("Resource",bt);a(SV,"snake_case");A_=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(UN,"pathToId");nm=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(kr,"transactional");a($r,"missingMethod");a(sm,"selectFromObject");a(MN,"transformForSelect")});var Pc={};We(Pc,{server:()=>Et});var qN,Et,ns=ge(()=>{qN=require("../index"),Et={};(0,qN._assignPackageExport)("server",Et)});var cm={};We(cm,{loadGQLSchema:()=>gV,start:()=>am,startOnMainThread:()=>TV});function am({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)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let V=function(b){if(b.kind==="NonNullType"){let U=V(b.type);return U.nullable=!0,U}return b.kind==="ListType"?{type:"array",elements:V(b.type)}:{type:b.name?.value}};a(V,"getProperty");let T=p.name.value,A=[],g={table:null,database:null,properties:A};E.set(T,g);for(let b of p.directives){if(b.name.value==="table"){for(let I of b.arguments)g[I.name.value]=I.value.value;g.schema&&(g.database=g.schema),g.table||(g.table=T),g.audit&&(g.audit=g.audit!=="false"),g.attributes=g.properties,f.push(g)}if(b.name.value==="sealed"&&(g.sealed=!0),b.name.value==="export"){g.export=!0;for(let I of b.arguments)I.name.value==="name"&&(g.export={name:I.value.value})}}let v=!1;for(let b of p.fields){let I=V(b.type);I.name=b.name.value,A.push(I);for(let U of b.directives)if(U.name.value==="primaryKey")v?console.warn("Can not define two attributes as a primary key"):(I.isPrimaryKey=!0,v=!0);else if(U.name.value==="indexed")I.indexed=!0;else if(U.name.value==="createdTime")I.assignCreatedTime=!0;else if(U.name.value==="updatedTime")I.assignUpdatedTime=!0;else if(U.name.value==="expiresAt")I.expiresAt=!0;else if(U.name.value==="allow"){let J=I.authorizedRoles=[];for(let M of U.arguments)M.name.value==="role"&&J.push(M.value.value)}}g.typeName=T,T==="Query"&&(h=g)}for(let[p,T]of E)for(let A of T.properties){let g=E.get(A.type);g&&(A.properties=g.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,om.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,om.dirname)(s)+"/"+p.name,T.tableClass)}}}var om,TV,gV,FN=ge(()=>{om=require("path");de();a(am,"start");TV=am,gV=am({ensureTable:ft}).handleFile});async function O_(e){return RV?(vc||(vc=AV(NV)),(await(await vc).import(e)).namespace):import(e)}async function AV(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),vc=new Compartment({console,Math,Date,fetch:OV,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xN.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:bt,tables:Or,databases:ke})}};let s=await(0,GN.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),vc}function OV(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 NV(){return{Resource:bt,tables:Or}}var GN,xN,RV,vc,um=ge(()=>{Ls();de();GN=require("fs/promises"),xN=require("path"),RV=!1;a(O_,"secureImport");a(AV,"getCompartment");a(OV,"secureOnlyFetch");a(NV,"getGlobalVars")});var _m={};We(_m,{handleFile:()=>bV});async function bV(e,t,r,s){let n=new Map,i=(0,kN.pathToFileURL)(r).toString(),o=await O_(i);u(o.default)&&s.set((0,lm.dirname)(t),o.default),c(o,(0,lm.dirname)(t));function c(l,_){for(let d in l){let E=l[d];u(E)?s.set(_+"/"+d,E):typeof E=="object"&&c(E,_+"/"+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 kN,lm,$N=ge(()=>{kN=require("url");um();lm=require("path");a(bV,"handleFile")});var Em={};We(Em,{start:()=>yV});function yV({resources:e}){e.set("login",dm),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var dm,VN=ge(()=>{Ls();a(yV,"start");dm=class extends bt{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 hm=m((L_e,WN)=>{"use strict";var{Readable:IV}=require("stream"),wV=1e4;WN.exports={streamAsJSON(e){return new fm({value:e})}};var fm=class extends IV{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),YN)}catch(n){yield YN(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);KN(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>wV?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 KN(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 YN(e){return console.error(e),JSON.stringify(e.toString())}a(YN,"handleError");function KN(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(KN,"when")});var ob=m((M_e,ib)=>{"use strict";var mm=require("recursive-iterator"),CV=require("alasql"),pm=require("clone"),QN=G(),{handleHDBError:zN,hdb_errors:LV}=z(),{HDB_ERROR_MSGS:JN,HTTP_STATUS_CODES:jN}=LV,{getDatabases:DV}=(de(),re(Ie)),UV=["DISTINCT_ARRAY"],XN=Symbol("validateTables"),Sm=Symbol("validateTable"),U_e=Symbol("getAllColumns"),ZN=Symbol("validateAllColumns"),N_=Symbol("findColumn"),eb=Symbol("validateOrderBy"),Bc=Symbol("validateSegment"),Tm=Symbol("validateColumn"),tb=Symbol("setColumnsForTable"),rb=Symbol("checkColumnsForAsterisk"),sb=Symbol("validateGroupBy"),nb=Symbol("hasColumns"),gm=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[XN](),this[rb](),this[ZN]()}[XN](){if(this[nb]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Sm](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Sm](t.table)})}}[nb](){let t=!1,r=new mm(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Sm](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=DV();if(!r[t.databaseid])throw zN(new Error,JN.SCHEMA_NOT_FOUND(t.databaseid),jN.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zN(new Error,JN.TABLE_NOT_FOUND(t.databaseid,t.tableid),jN.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=pm(n);i.table=pm(t),this.attributes.push(i)})}[N_](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)}[rb](){let t=new mm(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tb](r.tableid)}[tb](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new CV.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[ZN](){this[Bc](this.statement.columns,!1),this[Bc](this.statement.joins,!1),this[Bc](this.statement.where,!1),this[sb](this.statement.group,!1),this[Bc](this.statement.order,!0)}[Bc](t,r){if(!t)return;let s=new mm(t),n=[];for(let{node:i,path:o}of s)!QN.isEmpty(i)&&!QN.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eb](i):n.push(this[Tm](i)));return n}[sb](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&UV.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=pm(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[N_](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[N_](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`}[eb](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[Tm](t)}[Tm](t){let r=this[N_](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]}};ib.exports=gm});var cb=m((v_e,ab)=>{"use strict";var Rm=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")}};ab.exports=Rm});var lb=m((H_e,ub)=>{"use strict";var Am=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};ub.exports=Am});var b_=m((F_e,_b)=>{"use strict";var Nm=Y(),bm=R();Nm.initSync();var MV=Nm.get(bm.CONFIG_PARAMS.STORAGE_COMPRESSION),PV=Nm.get(bm.CONFIG_PARAMS.STORAGE_CACHING)!==!1,vV=bm.UPDATES_PROPERTY,Om=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=MV&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=PV&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===vV)}};_b.exports=Om});var I_=m((x_e,Eb)=>{"use strict";var Jo=Y(),Hc=R();Jo.initSync();var BV=Jo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Jo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Jo.get(Hc.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",db=Jo.get(Hc.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),HV=Jo.get(Hc.CONFIG_PARAMS.STORAGE_NOREADAHEAD),y_=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=BV,this.noFSAccess=!0,db!==void 0&&(this.overlappingSync=db),this.noReadAhead=HV}};Eb.exports=y_;y_.MAX_DBS=1e4});var Ce=m(($_e,Ob)=>{"use strict";var Im=require("lmdb"),is=require("fs-extra"),Nr=require("path"),w_=Ht(),mb=C(),Jt=Ar().LMDB_ERRORS_ENUM,C_=lb(),wm=b_(),pb=I_(),ei=xe(),fb=R(),{table:qV,resetDatabases:FV}=(de(),re(Ie)),hb=Y(),os=ei.INTERNAL_DBIS_NAME,Sb=ei.DBI_DEFINITION_NAME,GV="data.mdb",xV="lock.mdb",qc=".mdb",kV="-lock",ym=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Vr(t,r),this.key_type=this.dbi[ei.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ei.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new Im.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function L_(e,t){if(e===void 0)throw new Error(Jt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Jt.ENV_NAME_REQUIRED)}a(L_,"pathEnvNameValidation");async function Cm(e,t,r=!0){try{await is.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Jt.INVALID_BASE_PATH):s}try{let s=Nr.join(e,t+qc);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(Nr.join(e,t,GV),is.constants.R_OK|is.constants.F_OK),Nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Jt.INVALID_ENVIRONMENT)}else throw new Error(Jt.INVALID_ENVIRONMENT);throw s}}a(Cm,"validateEnvironmentPath");function D_(e,t){if(w_.validateEnv(e),t===void 0)throw new Error(Jt.DBI_NAME_REQUIRED)}a(D_,"validateEnvDBIName");async function $V(e,t,r=!1,s=!1){L_(e,t);let n=Nr.basename(e);t=t.toString();let i=hb.get(fb.CONFIG_PARAMS.SCHEMAS);i||hb.setProperty(fb.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await Cm(e,t,s),Tb(e,t,r)}catch(o){if(o.message===Jt.INVALID_ENVIRONMENT){let c=Nr.join(e,t);await is.mkdirp(s?c:e);let u=new pb(s?c:c+qc,!1),l=Im.open(u);l.dbis=Object.create(null);let _=new wm(!1);l.openDB(os,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Lm(e,t,r);return l[ei.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a($V,"createEnvironment");async function VV(e,t,r,s=!0){L_(e,t),t=t.toString();let n=Nr.join(e,t);return qV({table:t,database:Nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(VV,"copyEnvironment");async function Tb(e,t,r=!1){L_(e,t),t=t.toString();let s=Lm(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 Cm(e,t),i=Nr.join(e,t+qc),o=n!=i,c=new pb(n,o),u=Im.open(c);u.dbis=Object.create(null);let l=Rb(u);for(let _=0;_<l.length;_++)Vr(u,l[_]);return u[ei.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(Tb,"openEnvironment");async function YV(e,t,r=!1){L_(e,t),t=t.toString();let s=Nr.join(e,t+qc),n=await Cm(e,t);if(global.lmdb_map!==void 0){let i=Lm(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await gb(o),delete global.lmdb_map[i]}}await is.remove(n),await is.remove(n===s?n+kV:Nr.join(Nr.dirname(n),xV))}a(YV,"deleteEnvironment");async function gb(e){w_.validateEnv(e);let t=e[ei.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(gb,"closeEnvironment");function Lm(e,t,r=!1){let n=`${Nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Lm,"getCachedEnvironmentName");function KV(e){w_.validateEnv(e);let t=Object.create(null),r=Vr(e,os);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==os)try{t[s]=Object.assign(new C_,n)}catch{mb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(KV,"listDBIDefinitions");function Rb(e){w_.validateEnv(e);let t=[],r=Vr(e,os);for(let{key:s}of r.getRange({start:!1}))s!==os&&t.push(s);return t}a(Rb,"listDBIs");function WV(e,t){let s=Vr(e,os).getEntry(t),n=new C_;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mb.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(WV,"getDBIDefinition");function Ab(e,t,r,s=!r){if(D_(e,t),t=t.toString(),t===os)throw new Error(Jt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Vr(e,t)}catch(n){if(n.message===Jt.DBI_DOES_NOT_EXIST){let i=new wm(r,s===!0),o=e.openDB(t,i),c=new C_(r===!0,s);return o[Sb]=c,Vr(e,os).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Ab,"createDBI");function Vr(e,t){if(D_(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==os?r=WV(e,t):r=new C_,r===void 0)throw new Error(Jt.DBI_DOES_NOT_EXIST);let s;try{let n=new wm(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(Jt.DBI_DOES_NOT_EXIST):n}return s[Sb]=r,e.dbis[t]=s,s}a(Vr,"openDBI");function QV(e,t){D_(e,t),t=t.toString();let r=Vr(e,t),s=r.getStats();return r[ei.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(QV,"statDBI");async function zV(e,t){try{let r=Nr.join(e,t+qc);return(await is.stat(r)).size}catch{throw new Error(Jt.INVALID_ENVIRONMENT)}}a(zV,"environmentDataSize");function JV(e,t){if(D_(e,t),t=t.toString(),t===os)throw new Error(Jt.CANNOT_DROP_INTERNAL_DBIS_NAME);Vr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Vr(e,os).removeSync(t)}a(JV,"dropDBI");function jV(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Vr(e,i)}catch(o){if(o.message===Jt.DBI_DOES_NOT_EXIST)Ab(e,i,i!==t,i===t),s=!0;else throw o}}s&&FV()}a(jV,"initializeDBIs");Ob.exports={openDBI:Vr,openEnvironment:Tb,createEnvironment:$V,listDBIs:Rb,listDBIDefinitions:KV,createDBI:Ab,dropDBI:JV,statDBI:QV,deleteEnvironment:YV,initializeDBIs:jV,TransactionCursor:ym,environmentDataSize:zV,copyEnvironment:VV,closeEnvironment:gb}});var bb=m((Y_e,Nb)=>{"use strict";var Dm=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};Nb.exports=Dm});var Ib=m((W_e,yb)=>{"use strict";var Um=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}};yb.exports=Um});var Cb=m((z_e,wb)=>{"use strict";var Mm=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wb.exports=Mm});var Ji=m((ede,Ub)=>{"use strict";var XV=Ce(),ZV=bb(),eY=Ib(),tY=Cb(),Ms=Ht(),Fc=Ar().LMDB_ERRORS_ENUM,rY=xe(),hn=R(),sY=G(),nY=require("uuid"),j_e=require("lmdb"),{handleHDBError:iY,hdb_errors:oY}=z(),{OVERFLOW_MARKER:X_e,MAX_SEARCH_KEY_LENGTH:Z_e}=rY,Lb=Y();Lb.initSync();var U_=Lb.get(hn.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Pm=hn.TIME_STAMP_NAMES_ENUM.CREATED_TIME,zi=hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function aY(e,t,r,s,n=Ms.getNextMonotonicTime()){qm(e,t,r,s),vm(e,t,r);let i=new ZV,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];Db(l,!0,n);let _=cY(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Bm(o,c,s,i,n)}a(aY,"insertRecords");function cY(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][hn.FUNC_VAL],s[o]=c)}let u=Ms.getIndexedValues(c),l=e.dbis[o];if(u){U_&&l.prefetch(u.map(_=>({key:_,value:n})),M_);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}U_&&e.dbis[t].prefetch([n],M_),e.dbis[t].put(n,s,s[zi])})}a(cY,"insertRecord");function uY(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(uY,"removeSkippedRecords");function Db(e,t,r){let s=r>0;(s||!Number.isInteger(e[zi]))&&(e[zi]=r||(r=Ms.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Pm]))&&(e[Pm]=r||Ms.getNextMonotonicTime()):delete e[Pm]}a(Db,"setTimestamps");function vm(e,t,r){r.indexOf(hn.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(hn.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(hn.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),XV.initializeDBIs(e,t,r)}a(vm,"initializeTransaction");async function lY(e,t,r,s,n=Ms.getNextMonotonicTime()){qm(e,t,r,s),vm(e,t,r);let i=new eY,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Hm(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Bm(c,u,s,i,n,o)}a(lY,"updateRecords");async function _Y(e,t,r,s,n=Ms.getNextMonotonicTime()){try{qm(e,t,r,s)}catch(u){throw iY(u,u.message,oY.HTTP_STATUS_CODES.BAD_REQUEST)}vm(e,t,r);let i=new tY,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;sY.isEmpty(l[t])?(_=nY.v4(),l[t]=_):_=l[t];let d=Hm(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Bm(o,c,s,i,n)}a(_Y,"upsertRecords");async function Bm(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||Ms.getNextMonotonicTime(),uY(r,i),s}a(Bm,"finalizeWrite");function Hm(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(Db(r,!_,o),Number.isInteger(r[zi])&&l[zi]>r[zi])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let A=l[h];if(typeof p=="function"){let v=p([[l]]);Array.isArray(v)&&(p=v[0][hn.FUNC_VAL],r[h]=p)}if(p===A)continue;let g=Ms.getIndexedValues(A);if(g){U_&&T.prefetch(g.map(v=>({key:v,value:s})),M_);for(let v=0,V=g.length;v<V;v++)T.remove(g[v],s)}if(g=Ms.getIndexedValues(p),g){U_&&T.prefetch(g.map(v=>({key:v,value:s})),M_);for(let v=0,V=g.length;v<V;v++)T.put(g[v],s)}}let f=Object.assign({},l,r);c.put(s,f,f[zi])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Hm(e,t,r,s,n,i,o))}a(Hm,"updateUpsertRecord");function dY(e,t,r){if(Ms.validateEnv(e),t===void 0)throw new Error(Fc.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Fc.WRITE_ATTRIBUTES_REQUIRED):new Error(Fc.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(dY,"validateBasic");function qm(e,t,r,s){if(dY(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Fc.RECORDS_REQUIRED):new Error(Fc.RECORDS_MUST_BE_ARRAY)}a(qm,"validateWrite");function M_(){}a(M_,"noop");Ub.exports={insertRecords:aY,updateRecords:lY,upsertRecords:_Y}});var mn=m((rde,EY)=>{EY.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",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var Ps=m((sde,vb)=>{"use strict";var Pb=G(),Mb=R(),jo=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,pn=require("joi"),ti={schema_format:{pattern:jo,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},fY=pn.alternatives(pn.string().min(1).max(ti.schema_length.maximum).pattern(jo).messages({"string.pattern.base":"{:#label} "+ti.schema_format.message}),pn.number()).required(),hY=pn.alternatives(pn.string().min(1).max(ti.schema_length.maximum).pattern(jo).messages({"string.pattern.base":"{:#label} "+ti.schema_format.message}),pn.number()),mY=pn.alternatives(pn.string().min(1).max(ti.schema_length.maximum).pattern(jo).messages({"string.pattern.base":"{:#label} "+ti.schema_format.message}),pn.number()).required();function pY(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>ti.schema_length.maximum?`'${e}' maximum of 250 characters`:jo.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(pY,"checkValidTable");function SY(e,t){return Pb.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(SY,"validateSchemaExists");function TY(e,t){let r=t.state.ancestors[0].schema;return Pb.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(TY,"validateTableExists");function gY(e,t){return e.toLowerCase()===Mb.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${Mb.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(gY,"validateSchemaName");vb.exports={common_validators:ti,schema_regex:jo,hdb_schema_table:fY,validateSchemaExists:SY,validateTableExists:TY,validateSchemaName:gY,checkValidTable:pY,hdb_database:hY,hdb_table:mY}});var qe=m((ide,Bb)=>{"use strict";var jt=require("validate.js");jt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||jt.validators.type.checks[t](e)?null:` must be a '${t}' value`};jt.validators.type.checks={Object:function(e){return jt.isObject(e)&&!jt.isArray(e)},Array:jt.isArray,Integer:jt.isInteger,Number:jt.isNumber,String:jt.isString,Date:jt.isDate,Boolean:function(e){return typeof e=="boolean"}};jt.validators.hasValidFileExt=function(e,t){return jt.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};Bb.exports={validateObject:RY,validateObjectAsync:AY,validateBySchema:OY};function RY(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=jt(e,t,{format:"flat"});return r?new Error(r):null}a(RY,"validateObject");async function AY(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await jt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(AY,"validateObjectAsync");function OY(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(OY,"validateBySchema")});var P_=m((ade,Hb)=>{var{common_validators:vs}=Ps(),xc=qe(),Gc="is required",et={database:{presence:!1,format:vs.schema_format,length:vs.schema_length},schema:{presence:!1,format:vs.schema_format,length:vs.schema_length},table:{presence:!0,format:vs.schema_format,length:vs.schema_length},attribute:{presence:!0,format:vs.schema_format,length:vs.schema_length},hash_attribute:{presence:!0,format:vs.schema_format,length:vs.schema_length}};function kc(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(kc,"makeAttributesStrings");function NY(e){return e=kc(e),et.table.presence=!1,et.attribute.presence=!1,et.hash_attribute.presence=!1,xc.validateObject(e,et)}a(NY,"schema_object");function bY(e){return e=kc(e),et.table.presence={message:Gc},et.attribute.presence=!1,et.hash_attribute.presence=!1,xc.validateObject(e,et)}a(bY,"table_object");function yY(e){return e=kc(e),et.table.presence={message:Gc},et.attribute.presence=!1,xc.validateObject(e,et)}a(yY,"create_table_object");function IY(e){return e=kc(e),et.table.presence={message:Gc},et.attribute.presence={message:Gc},et.hash_attribute.presence=!1,xc.validateObject(e,et)}a(IY,"attribute_object");function wY(e){return e=kc(e),et.table.presence={message:Gc},et.attribute.presence=!1,et.hash_attribute.presence=!1,xc.validateObject(e,et)}a(wY,"describe_table");function CY(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(CY,"validateTableResidence");Hb.exports={schema_object:NY,create_table_object:yY,table_object:bY,attribute_object:IY,describe_table:wY,validateTableResidence:CY}});var Fb=m((ude,qb)=>{"use strict";var LY=require("uuid"),Fm=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||LY.v4(),this.schema_table=`${this.schema}.${this.table}`}};qb.exports=Fm});var v_=m((_de,Gb)=>{"use strict";var DY=Fb(),Gm=class extends DY{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}};Gb.exports=Gm});var kb=m((Ede,xb)=>{"use strict";xb.exports=MY;var UY="inserted";function MY(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===UY?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(MY,"returnObject")});var B_=m((hde,Wb)=>{"use strict";var PY=R(),xm=Ce(),vY=Ji(),{getSystemSchemaPath:BY,getSchemaPath:HY}=Ue(),qY=mn(),FY=P_(),GY=v_(),xY=kb(),{handleHDBError:$b,hdb_errors:Yb}=z(),Vb=G(),{HTTP_STATUS_CODES:kY}=Yb,km=qY.hdb_attribute,Kb=[];for(let e=0;e<km.attributes.length;e++)Kb.push(km.attributes[e].attribute);var $Y="inserted";Wb.exports=VY;async function VY(e){let t=FY.attribute_object(e);if(t)throw $b(new Error,t.message,Yb.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&Vb.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $b(new Error,r,kY.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=Vb.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 GY(e.schema,e.table,e.attribute,e.id);try{let i=await xm.openEnvironment(HY(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}`);xm.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await xm.openEnvironment(BY(),PY.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await vY.insertRecords(o,km.hash_attribute,Kb,[n]);return xY($Y,c,{records:[n]},u)}catch(i){throw i}}a(VY,"lmdbCreateAttribute")});var Vm=m((pde,zb)=>{var{hdb_table:YY,hdb_database:Qb}=Ps(),KY=qe(),$m=require("joi"),WY={undefined:"undefined",null:"null"},QY=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||WY[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"),zY=$m.object({database:Qb,schema:Qb,table:YY,records:$m.array().items($m.object().custom(QY)).required()});zb.exports=function(e){return KY.validateBySchema(e,zY)}});var $c=m((gde,jb)=>{"use strict";var Sn=G(),Jb=C(),Tde=Vm(),{getDatabases:JY}=(de(),re(Ie)),{ClientError:ji}=z();jb.exports=jY;function jY(e){if(Sn.isEmpty(e))throw new ji("invalid update parameters defined.");if(Sn.isEmptyOrZeroLength(e.schema))throw new ji("invalid schema specified.");if(Sn.isEmptyOrZeroLength(e.table))throw new ji("invalid table specified.");if(!Array.isArray(e.records))throw new ji("records must be an array");let t=JY()[e.schema]?.[e.table];if(Sn.isEmpty(t))throw new ji(`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&&Sn.isEmptyOrZeroLength(o[r]))throw Jb.error("a valid hash attribute must be provided with update record:",o),new ji("a valid hash attribute must be provided with update record, check log for more info");if(!Sn.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw Jb.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ji(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Sn.isEmpty(o[r])&&o[r]!==""&&s.has(Sn.autoCast(o[r]))&&(o.skip=!0),s.add(Sn.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(jY,"insertUpdateValidate")});var Vc=m((Ade,Xb)=>{"use strict";var XY=R().OPERATIONS_ENUM,Ym=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=XY.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};Xb.exports=Ym});var Qc=m((bde,Zb)=>{"use strict";var Nde=Vc(),H_=R(),Wm=G(),Km=C(),ZY=require("uuid"),{handleHDBError:Yc,hdb_errors:eK}=z(),{HDB_ERROR_MSGS:Kc,HTTP_STATUS_CODES:Wc}=eK;Zb.exports=tK;function tK(e,t,r){for(let n=0;n<t.length;n++)rK(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];sK(i,r,e.operation)}}a(tK,"processRows");function rK(e){if(Buffer.byteLength(String(e))>H_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Yc(new Error,Kc.ATTR_NAME_LENGTH_ERR(e),Wc.BAD_REQUEST,void 0,void 0,!0);if(Wm.isEmptyOrZeroLength(e)||Wm.isEmpty(e.trim()))throw Yc(new Error,Kc.ATTR_NAME_NULLISH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}a(rK,"validateAttribute");function sK(e,t,r){if(!e.hasOwnProperty(t)||Wm.isEmptyOrZeroLength(e[t])){if(r===H_.OPERATIONS_ENUM.INSERT||r===H_.OPERATIONS_ENUM.UPSERT){e[t]=ZY.v4();return}throw Km.error("Update transaction aborted due to record with no hash value:",e),Yc(new Error,Kc.RECORD_MISSING_HASH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>H_.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Km.error(e),Yc(new Error,Kc.HASH_VAL_LENGTH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Km.error(e),Yc(new Error,Kc.INVALID_FORWARD_SLASH_IN_HASH_ERR,Wc.BAD_REQUEST,void 0,void 0,!0)}a(sK,"validateHash")});var ty=m((Ide,ey)=>{"use strict";var Qm=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ey.exports=Qm});var ny=m((Cde,sy)=>{"use strict";var zm=Ce(),nK=C(),ry=Ar().LMDB_ERRORS_ENUM;sy.exports=iK;async function iK(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 zm.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ry.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await zm.closeEnvironment(global.lmdb_map[s]),await zm.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==ry.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){nK.error(t)}}a(iK,"cleanLMDBMap")});var Tn=m((Dde,cy)=>{"use strict";var zc=require("crypto"),oK=Y(),{CONFIG_PARAMS:aK}=R(),oy="aes-256-cbc",cK=32,uK=16,Jm=64,ay=32,lK=Jm+ay,iy=new Map;cy.exports={encrypt:_K,decrypt:dK,createNatsTableStreamName:EK};function _K(e){let t=zc.randomBytes(cK),r=zc.randomBytes(uK),s=zc.createCipheriv(oy,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(_K,"encrypt");function dK(e){let t=e.substr(0,Jm),r=e.substr(Jm,ay),s=e.substr(lK,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=zc.createDecipheriv(oy,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(dK,"decrypt");function EK(e,t){let r=oK.get(aK.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=iy.get(r);return s||(s=zc.createHash("md5").update(r).digest("hex"),iy.set(r,s)),s}a(EK,"createNatsTableStreamName")});var ri=m((Pde,ly)=>{"use strict";var Mde=Xt(),q_=C(),uy=P_(),fK=Tn(),F_=G(),{handleHDBError:G_,hdb_errors:hK}=z(),{HDB_ERROR_MSGS:x_,HTTP_STATUS_CODES:jm}=hK,mK=Y();mK.initSync();var{getDatabases:Xm}=(de(),re(Ie));ly.exports={describeAll:pK,describeTable:k_,describeSchema:SK};async function pK(e){try{let t=F_.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Xm(),i={},o={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(o[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await k_({schema:l,table:d});else if(r&&r[l].describe&&r[l].tables[d].describe){let f=r[l].tables[d].attribute_permissions;E=await k_({schema:l,table:d},f)}E&&c.push(E)}catch(E){q_.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return q_.error("Got an error in describeAll"),q_.error(t),G_(new Error,x_.DESCRIBE_ALL_ERR)}}a(pK,"describeAll");async function k_(e,t){F_.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=uy.describe_table(e);if(i)throw i;let c=Xm()[r];if(!c)throw G_(new Error,x_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let u=c[s];if(!u)throw G_(new Error,x_.TABLE_NOT_FOUND(e.schema,e.table),jm.NOT_FOUND);let l=[];if(n){let d={};n.forEach(E=>{E.describe&&(d[E.attribute_name]=!0)}),u.attributes.forEach(E=>{d[E.name]&&l.push(E)})}else l=u.attributes;let _={schema:r,name:u.tableName,attributes:l,hash_attribute:u.attributes.find(d=>d.isPrimaryKey||d.is_hash_attribute)?.name};_.clustering_stream_name=fK.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){q_.warn(`unable to stat table dbi due to ${d}`)}return _}a(k_,"descTable");async function SK(e){F_.transformReq(e);let t=uy.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=Xm()[s];if(!i)throw G_(new Error,x_.SCHEMA_NOT_FOUND(e.schema),jm.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),F_.isEmpty(u)||u.describe){let l=await k_({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(SK,"describeSchema")});var Yr=m((qde,hy)=>{var TK=mn(),{callbackify:dy,promisify:gK}=require("util"),{getDatabases:Ey}=(de(),re(Ie));hy.exports={setSchemaDataToGlobal:_y,getTableSchema:RK,getSystemSchema:AK,setSchemaDataToGlobalAsync:gK(_y)};var fy=ri(),Bde=dy(fy.describeAll),Hde=dy(fy.describeTable);function _y(e){global.hdb_schema=Ey(),e&&e()}a(_y,"setSchemaDataToGlobal");function RK(e,t,r){let s=Ey()[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(RK,"getTableSchema");function AK(){return TK}a(AK,"getSystemSchema")});var Zt=m((Gde,Ty)=>{"use strict";var V_=Vm(),yt=G(),OK=require("util"),Y_=Kr(),NK=Yr(),my=C(),{handleHDBError:Xi,hdb_errors:bK}=z(),{HTTP_STATUS_CODES:Zi}=bK,yK=OK.promisify(NK.getTableSchema),IK="updated",py="inserted",Sy="upserted";Ty.exports={insert:CK,update:LK,upsert:DK,validation:wK,flush:UK};async function wK(e){if(yt.isEmpty(e))throw new Error("invalid update parameters defined.");if(yt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(yt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await yK(e.schema,e.table),r=V_(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&&yt.isEmptyOrZeroLength(c[s]))throw my.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!yt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw my.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!yt.isEmpty(c[s])&&c[s]!==""&&n.has(yt.autoCast(c[s]))&&(c.skip=!0),n.add(yt.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(wK,"validation");async function CK(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=V_(e);if(t)throw Xi(new Error,t.message,Zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.BAD_REQUEST);let s=await Y_.createRecords(e);return $_(py,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(CK,"insertData");async function LK(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=V_(e);if(t)throw Xi(new Error,t.message,Zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.BAD_REQUEST);let s=await Y_.updateRecords(e);return yt.isEmpty(s.existing_rows)?$_(IK,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):$_(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(LK,"updateData");async function DK(e){if(e.operation!=="upsert")throw Xi(new Error,"invalid operation, must be upsert",Zi.INTERNAL_SERVER_ERROR);let t=V_(e);if(t)throw Xi(new Error,t.message,Zi.BAD_REQUEST);yt.transformReq(e);let r=yt.checkSchemaTableExist(e.schema,e.table);if(r)throw Xi(new Error,r,Zi.BAD_REQUEST);let s=await Y_.upsertRecords(e);return $_(Sy,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(DK,"upsertData");function $_(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===py?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===Sy?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a($_,"returnObject");function UK(e){return yt.transformReq(e),Y_.flush(e.schema,e.table)}a(UK,"flush")});var ep=m((kde,Ay)=>{var MK=qe(),Zm=require("joi"),{hdb_table:PK,hdb_database:gy}=Ps(),Ry={schema:gy,database:gy,table:PK},vK={date:Zm.date().iso().required()},BK={timestamp:Zm.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Ay.exports=function(e,t){let r=t==="timestamp"?{...Ry,...BK}:{...Ry,...vK},s=Zm.object(r);return MK.validateBySchema(e,s)}});var by=m(($de,Ny)=>{var HK=qe(),tp=require("joi"),{hdb_table:qK,hdb_database:Oy}=Ps(),FK=tp.object({schema:Oy,database:Oy,table:qK,hash_values:tp.array().required(),ids:tp.array()});Ny.exports=function(e){return HK.validateBySchema(e,FK)}});var ip=m((Vde,yy)=>{"use strict";var rp=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}},sp=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}},np=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};yy.exports={InsertObject:rp,NoSQLSeachObject:sp,DeleteResponseObject:np}});var ro=m((Kde,Dy)=>{"use strict";var wy=ep(),GK=by(),eo=G(),Iy=require("moment"),Cy=C(),{promisify:xK,callbackify:kK}=require("util"),to=R(),$K=Yr(),op=xK($K.getTableSchema),ap=Kr(),{DeleteResponseObject:VK}=ip(),{handleHDBError:si,hdb_errors:YK}=z(),{HDB_ERROR_MSGS:K_,HTTP_STATUS_CODES:ni}=YK,KK="records successfully deleted",WK=kK(Ly);Dy.exports={delete:WK,deleteRecord:Ly,deleteFilesBefore:QK,deleteAuditLogsBefore:zK};async function QK(e){let t=wy(e,"date");if(t)throw si(t,t.message,ni.BAD_REQUEST,void 0,void 0,!0);if(eo.transformReq(e),!Iy(e.date,Iy.ISO_8601).isValid())throw si(new Error,K_.INVALID_DATE,ni.BAD_REQUEST,to.LOG_LEVELS.ERROR,K_.INVALID_DATE,!0);let s=eo.checkSchemaTableExist(e.schema,e.table);if(s)throw si(new Error,s,ni.NOT_FOUND,to.LOG_LEVELS.ERROR,s,!0);let n=await ap.deleteRecordsBefore(e);if(await op(e.schema,e.table),Cy.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(QK,"deleteFilesBefore");async function zK(e){let t=wy(e,"timestamp");if(t)throw si(t,t.message,ni.BAD_REQUEST,void 0,void 0,!0);if(eo.transformReq(e),isNaN(e.timestamp))throw si(new Error,K_.INVALID_VALUE("Timestamp"),ni.BAD_REQUEST,to.LOG_LEVELS.ERROR,K_.INVALID_VALUE("Timestamp"),!0);let r=eo.checkSchemaTableExist(e.schema,e.table);if(r)throw si(new Error,r,ni.NOT_FOUND,to.LOG_LEVELS.ERROR,r,!0);let s=await ap.deleteAuditLogsBefore(e);return await op(e.schema,e.table),Cy.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(zK,"deleteAuditLogsBefore");async function Ly(e){e.ids&&(e.hash_values=e.ids);let t=GK(e);if(t)throw si(t,t.message,ni.BAD_REQUEST,void 0,void 0,!0);eo.transformReq(e);let r=eo.checkSchemaTableExist(e.schema,e.table);if(r)throw si(new Error,r,ni.NOT_FOUND,to.LOG_LEVELS.ERROR,r,!0);try{await op(e.schema,e.table);let s=await ap.deleteRecords(e);return eo.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${KK}`),s}catch(s){if(s.message===to.SEARCH_NOT_FOUND_MESSAGE){let n=new VK;return n.message=to.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(Ly,"deleteRecord")});var W_=m((Qde,Py)=>{var JK=require("crypto"),Uy=9;function jK(e){let t=ZK(Uy),r=My(e+t);return t+r}a(jK,"createHash");function XK(e,t){let r=e.substr(0,Uy),s=r+My(t+r);return e===s}a(XK,"validateHash");function ZK(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(ZK,"generateSalt");function My(e){return JK.createHash("md5").update(e).digest("hex")}a(My,"md5");Py.exports={hash:jK,validate:XK}});var By=m((Jde,vy)=>{var cp=qe(),qt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function e1(e){return qt.password.presence=!0,qt.username.presence=!0,qt.role.presence=!0,qt.active.presence=!0,cp.validateObject(e,qt)}a(e1,"addUserValidation");function t1(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,cp.validateObject(e,qt)}a(t1,"alterUserValidation");function r1(e){return qt.password.presence=!1,qt.username.presence=!0,qt.role.presence=!1,qt.active.presence=!1,cp.validateObject(e,qt)}a(r1,"dropUserValidation");vy.exports={addUserValidation:e1,alterUserValidation:t1,dropUserValidation:r1}});var Pe=m((Zde,qy)=>{"use strict";var{platform:Xde}=require("os"),s1="nats-server.zip",up="nats-server",n1=process.platform==="win32"?`${up}.exe`:up,lp="HDB",i1=/^[^\s.,*>]+$/,Hy="__request__",o1=a(e=>`${e}.${Hy}`,"REQUEST_SUBJECT"),a1={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},c1={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},u1={HUB:"hub.pid",LEAF:"leaf.pid"},l1={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},_1={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:lp,deliver_subject:"__HDB__.WORKQUEUE"},d1={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:lp,deliver_subject:"HDB.SCHEMAQUEUE"},E1={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:lp,deliver_subject:"HDB.USERQUEUE"},f1={SUCCESS:"success",ERROR:"error"},h1={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},m1={TXN:"txn",MSGID:"msgid"},Xo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},p1={[Xo.ERR]:1,[Xo.WRN]:2,[Xo.INF]:3,[Xo.DBG]:4,[Xo.TRC]:5},S1={debug:"-D",trace:"-DVV"};qy.exports={NATS_SERVER_ZIP:s1,NATS_SERVER_NAME:up,NATS_BINARY_NAME:n1,PID_FILES:u1,NATS_CONFIG_FILES:c1,SERVER_SUFFIX:l1,WORK_QUEUE_CONSUMER_NAMES:_1,SCHEMA_QUEUE_CONSUMER_NAMES:d1,USER_QUEUE_CONSUMER_NAMES:E1,NATS_TERM_CONSTRAINTS_RX:i1,REQUEST_SUFFIX:Hy,UPDATE_REMOTE_RESPONSE_STATUSES:f1,CLUSTER_STATUS_STATUSES:h1,REQUEST_SUBJECT:o1,SUBJECT_PREFIXES:m1,MSG_HEADERS:a1,LOG_LEVELS:Xo,LOG_LEVEL_FLAGS:S1,LOG_LEVEL_HIERARCHY:p1}});var _p=m((tEe,Fy)=>{"use strict";var T1={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))},g1="certificate.pem",R1="privateKey.pem",A1="ca.pem";Fy.exports={CERTIFICATE_VALUES:T1,CERTIFICATE_PEM_NAME:g1,PRIVATEKEY_PEM_NAME:R1,CA_PEM_NAME:A1}});var Ep=m((sEe,Yy)=>{"use strict";var $y=require("fs-extra"),ne=require("joi"),O1=require("os"),{boolean:Re,string:Rn,number:br,array:dp}=ne.types(),{totalmem:Gy}=require("os"),Zo=require("path"),N1=C(),z_=G(),rEe=_p(),xy=R(),b1=qe(),ky="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",U1="clustering.enabled config parameter is undefined",gn=br.min(0).required(),J_=dp.items({host:Rn.required(),port:gn}).empty(null),An;Yy.exports={configValidator:M1,routesValidator:F1,route_constraints:J_};function M1(e){if(An=e.rootPath,z_.isEmpty(An))throw D1;let t=Re.required(),r=ne.valid("production","development").required(),s=br.min(0).max(1e3).empty(null).default(q1),n=Rn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Q_),i=ne.custom(P1).messages({"any.custom":"{:#label} {:#error}"}),o=Rn.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ne.string().empty(null).default(Q_),u=ne.custom(v1).empty(null).default(Q_),l=e.clustering?.enabled;if(z_.isEmpty(l))throw U1;let _;return l===!0?_=ne.object({enabled:t,hubServer:ne.object({cluster:ne.object({name:ne.required().empty(null),network:ne.object({port:gn,routes:J_}).required()}).required(),leafNodes:ne.object({network:ne.object({port:gn}).required()}).required(),network:ne.object({port:gn}).required()}).required(),leafServer:ne.object({network:ne.object({port:gn,routes:J_}).required(),streams:ne.object({maxAge:br.min(120).allow(null).optional(),maxBytes:br.min(1).allow(null).optional(),maxMsgs:br.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ne.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Re.optional(),databaseLevel:Re.optional(),tls:ne.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Re.required(),verify:Re.optional()}),user:Rn.optional().empty(null)}).required():_=ne.object({enabled:t,tls:ne.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Re.required()})}).required(),ne.object({authentication:ne.object({authorizeLocal:Re,cacheTTL:br.required(),enableSessions:Re,operationTokenTimeout:ne.required(),refreshTokenTimeout:ne.required()}),analytics:ne.object({aggregatePeriod:br}),clustering:_,customFunctions:ne.object({enabled:t,network:ne.object({cors:Re.required(),corsAccessList:dp.required(),headersTimeout:br.min(1).required(),https:Re.required(),keepAliveTimeout:br.min(1).required(),port:gn,timeout:br.min(1).required()}),nodeEnv:r,root:n,tls:ne.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ne.object({enabled:t}).required(),logging:ne.object({auditAuthEvents:ne.object({logFailed:Re,logSuccessful:Re}),file:Re.required(),level:ne.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ne.object({enabled:Re.optional(),compress:Re.optional(),interval:Rn.custom(H1).optional().empty(null),maxSize:Rn.custom(B1).optional().empty(null),path:Rn.optional().empty(null).default(Q_)}).required(),root:n,stdStreams:Re.required(),auditLog:Re.required()}).required(),operationsApi:ne.object({foreground:Re.required(),network:ne.object({cors:Re.required(),corsAccessList:dp.required(),headersTimeout:br.min(1).required(),https:Re.required(),keepAliveTimeout:br.min(1).required(),port:gn,timeout:br.min(1).required()}).required(),nodeEnv:r,tls:ne.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Rn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ne.object({network:ne.object({port:gn,securePort:gn}).required(),webSocket:Re.optional(),requireAuthentication:Re.optional()}),http:ne.object({threads:s}).required(),storage:ne.object({writeAsync:Re.required(),overlappingSync:Re.optional(),caching:Re.optional(),compression:Re.optional(),noReadAhead:Re.optional(),path:u,prefetchWrites:Re.optional()}).required(),ignoreScripts:Re.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(M1,"configValidator");function Vy(e){return $y.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Vy,"doesPathExist");function P1(e,t){if(e===null)return;let r=Vy(e);return r?t.message(r):e}a(P1,"validatePemFile");function v1(e,t){ne.assert(e,Rn.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Vy(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?.()||Gy();return i=Math.round(Math.min(i,Gy())/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 Q_(e,t){if(!z_.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(z_.isEmpty(An))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Zo.join(An,y1);case"logging.root":return Zo.join(An,ky);case"clustering.leafServer.streams.path":return Zo.join(An,"clustering","leaf");case"storage.path":let s=Zo.join(An,xy.LEGACY_DATABASES_DIR_NAME);return $y.existsSync(s)?s:Zo.join(An,xy.DATABASES_DIR_NAME);case"logging.rotation.path":return Zo.join(An,ky);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Q_,"setDefaultRoot");function F1(e){let t=ne.object({routes:J_});return b1.validateBySchema({routes:e},t)}a(F1,"routesValidator")});var tt=m((oEe,tI)=>{"use strict";var Wr=R(),At=G(),ht=C(),{configValidator:G1,routesValidator:Ky}=Ep(),er=require("fs-extra"),x1=require("yaml"),as=require("path"),k1=require("is-number"),Qy=require("properties-reader"),$1=require("lodash"),{handleHDBError:V1}=z(),{HTTP_STATUS_CODES:Y1,HDB_ERROR_MSGS:j_}=Ar(),iEe=require("minimist"),{server:K1}=(ns(),re(Pc)),{SCHEMAS_PARAM_CONFIG:Jc,CONFIG_PARAMS:ii,CONFIG_PARAM_MAP:On}=Wr,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",zy=as.join(Wr.PACKAGE_ROOT,"config","yaml",Wr.HDB_DEFAULT_CONFIG_FILE),j1="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Wy={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"},X_,It;tI.exports={createConfigFile:X1,getDefaultConfig:Z1,getConfigValue:jy,initConfig:Xy,flattenConfig:no,updateConfigValue:Zy,updateConfigObject:tW,getConfiguration:nW,setConfiguration:iW,readConfigFile:mp,getClusteringRoutes:oW,initOldConfig:eI,getConfigFromFile:aW,getConfigFilePath:so,addConfig:cW,deleteConfigFromFile:uW};function X1(e){let t=oi(zy);X_=no(t.toJSON());let r;for(let o in e){let c=On[o.toLowerCase()];if(c===ii.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=fp(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){ht.error(_)}}}r&&Jy(t,r),hp(t);let s=t.toJSON();It=no(s);let n=t.getIn(["rootPath"]),i=as.join(n,Wr.HDB_CONFIG_FILE);er.createFileSync(i),er.writeFileSync(i,String(t)),ht.trace(`Config file written to ${i}`)}a(X1,"createConfigFile");function Jy(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!At.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Jc.TABLES))for(let i in s[n][Jc.TABLES])for(let o in s[n][Jc.TABLES][i]){let c=s[n][Jc.TABLES][i][o],u=[ii.SCHEMAS,n,Jc.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=[ii.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){ht.error("Error parsing schemas CLI/env config arguments",s)}}a(Jy,"setSchemasConfig");function Z1(e){if(X_===void 0){let r=oi(zy);X_=no(r.toJSON())}let t=On[e.toLowerCase()];if(t!==void 0)return X_[t.toLowerCase()]}a(Z1,"getDefaultConfig");function jy(e){if(e==null){ht.error(J1);return}if(It===void 0){ht.trace(W1);return}let t=On[e.toLowerCase()];if(t!==void 0)return It[t.toLowerCase()]}a(jy,"getConfigValue");function so(e=At.getPropsFilePath()){let t=At.getEnvCliRootPath();return t?as.join(t,Wr.HDB_CONFIG_FILE):Qy(e).get(Wr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(so,"getConfigFilePath");function Xy(e=!1){if(It===void 0||e){let t;if(!At.noBootFile()){t=At.getPropsFilePath();try{er.accessSync(t,er.constants.F_OK|er.constants.R_OK)}catch(i){throw ht.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=so(t),s;if(r.includes("config/settings.js"))try{eI(r);return}catch(i){if(i.code!==Wr.NODE_ERROR_CODES.ENOENT)throw i}try{s=oi(r)}catch(i){if(i.code===Wr.NODE_ERROR_CODES.ENOENT){ht.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 ht.error(i),new Error(`Error reading HarperDB config file at ${r}`)}eW(s,r),hp(s);let n=s.toJSON();if(K1.config=n,It=no(n),It.logging_rotation_rotate)for(let i in Wy)It[i]&&ht.error(`Config ${Wy[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);ht.trace(Q1)}}a(Xy,"initConfig");function eW(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&&(ht.trace("Updating config file with missing config params"),er.writeFileSync(t,String(e)))}a(eW,"checkForUpdatedConfig");function hp(e){let t=e.toJSON(),r=G1(t);if(r.error)throw j_.CONFIG_VALIDATION(r.error.message);e.setIn(["http","threads"],r.value.http.threads),e.setIn(["customFunctions","root"],r.value.customFunctions.root),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(hp,"validateConfig");function tW(e,t){It===void 0&&(It={});let r=On[e.toLowerCase()];if(r===void 0){ht.trace(`Unable to update config object because config param '${e}' does not exist`);return}It[r.toLowerCase()]=t}a(tW,"updateConfigObject");function Zy(e,t,r=void 0,s=!1,n=!1,i=!1){It===void 0&&Xy();let o=jy(On.hdb_root),c=as.join(o,Wr.HDB_CONFIG_FILE),u=oi(c),l;if(r===void 0&&e.toLowerCase()===ii.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=On[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=fp(E,t);u.setIn([...f],h)}else for(let E in r){let f=On[E.toLowerCase()];if(f===ii.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=fp(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){ht.error(T)}}}l&&Jy(u,l),hp(u);let _=u.getIn(["rootPath"]),d=as.join(_,Wr.HDB_CONFIG_FILE);s===!0&&rW(c,_),er.writeFileSync(d,String(u)),n&&(It=no(u.toJSON())),ht.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Zy,"updateConfigValue");function rW(e,t){try{let r=as.join(t,"backup",`${Wr.HDB_CONFIG_FILE}.bak`);er.copySync(e,r),ht.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){ht.error(z1),ht.error(r)}}a(rW,"backupConfigFile");var sW=["schemas"];function no(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!sW.includes(r)){let s=no(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(no,"flattenConfig");function fp(e,t){if(e===ii.CLUSTERING_NODENAME||e===ii.CLUSTERING_USER){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)||At.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 At.autoCast(t)}a(fp,"castConfigValue");function nW(){let e=At.getPropsFilePath(),t=so(e);return oi(t).toJSON()}a(nW,"getConfiguration");async function iW(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Zy(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(iW,"setConfiguration");function mp(){let e=At.getPropsFilePath();try{er.accessSync(e,er.constants.F_OK|er.constants.R_OK)}catch(s){if(!At.noBootFile())throw ht.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=so(e);return oi(t).toJSON()}a(mp,"readConfigFile");function oi(e){return x1.parseDocument(er.readFileSync(e,"utf8"),{simpleKeys:!0})}a(oi,"parseYamlDoc");function oW(){let e=mp(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=At.isEmptyOrZeroLength(t)?[]:t;let r=Ky(t);if(r)throw j_.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=At.isEmptyOrZeroLength(s)?[]:s;let n=Ky(s);if(n)throw j_.CONFIG_VALIDATION(n.message);if(!At.isEmptyOrZeroLength(s)&&!At.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!At.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw j_.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(oW,"getClusteringRoutes");function eI(e){let t=Qy(e);It={};for(let r in On){let s=t.get(r.toUpperCase());if(At.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=On[r].toLowerCase();n===ii.LOGGING_ROOT?It[n]=as.dirname(s):It[n]=s}return It}a(eI,"initOldConfig");function aW(e){let t=mp();return $1.get(t,e.replaceAll("_","."))}a(aW,"getConfigFromFile");async function cW(e,t){let r=oi(so());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await er.writeFile(so(),String(r))}a(cW,"addConfig");function uW(e){let t=so(At.getPropsFilePath()),r=oi(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=as.join(s,Wr.HDB_CONFIG_FILE);er.writeFileSync(n,String(r))}a(uW,"deleteConfigFromFile")});var sI=m((cEe,rI)=>{"use strict";var Z_=R(),ed=class{static{a(this,"BaseLicense")}constructor(t=0,r=Z_.RAM_ALLOCATION_ENUM.DEFAULT,s=Z_.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},pp=class extends ed{static{a(this,"ExtendedLicense")}constructor(t=0,r=Z_.RAM_ALLOCATION_ENUM.DEFAULT,s=Z_.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};rI.exports={BaseLicense:ed,ExtendedLicense:pp}});var jc=m((lEe,uI)=>{"use strict";var ta=require("fs-extra"),nI=W_(),iI=require("crypto"),lW=require("moment"),_W=require("uuid").v4,Ft=C(),Tp=require("path"),dW=G(),ai=R(),EW=sI().ExtendedLicense,ea="invalid license key format",fW="061183",hW="mofi25",mW="aes-256-cbc",pW=16,SW=32,oI=Y();oI.initSync();var Sp;uI.exports={validateLicense:aI,generateFingerPrint:gW,licenseSearch:cI,getLicense:OW};function gp(){return Tp.join(oI.getHdbBasePath(),ai.LICENSE_KEY_DIR_NAME,ai.LICENSE_FILE_NAME)}a(gp,"getLicenseDirPath");function TW(){let e=gp();return Tp.join(e,ai.LICENSE_FILE_NAME)}a(TW,"getLicenseFilePath");function Rp(){let e=gp();return Tp.join(e,ai.REG_KEY_FILE_NAME)}a(Rp,"getFingerPrintFilePath");async function gW(){let e=Rp();try{return await ta.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await RW();throw Ft.error(`Error writing fingerprint file to ${e}`),Ft.error(t),new Error("There was an error generating the fingerprint")}}a(gW,"generateFingerPrint");async function RW(){let e=_W(),t=nI.hash(e),r=Rp();try{await ta.mkdirp(gp()),await ta.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ft.error(`Error writing fingerprint file to ${r}`),Ft.error(s),new Error("There was an error generating the fingerprint")}return t}a(RW,"writeFingerprint");function aI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:ai.RAM_ALLOCATION_ENUM.DEFAULT,version:ai.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ft.error("empty license key passed to validate."),r;let s=Rp(),n=!1;try{n=ta.statSync(s)}catch(i){Ft.error(i)}if(n){let i;try{i=ta.readFileSync(s,"utf8")}catch{Ft.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(hW),c=o[1];c=Buffer.concat([Buffer.from(c)],pW);let u=Buffer.concat([Buffer.from(i)],SW),l=iI.createDecipheriv(mW,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 f=AW(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ea),Ft.error(ea),new Error(ea)}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(ea),Ft.error(ea),new Error(ea)}else r.exp_date=_;r.exp_date<lW().valueOf()&&(r.valid_date=!1),nI.validate(o[1],`${fW}${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||Ft.error("Invalid licence"),r}a(aI,"validateLicense");function AW(e,t){try{let r=iI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ft.warn("Check old license failed")}}a(AW,"checkOldLicense");function cI(){let e=new EW,t=[];try{t=ta.readFileSync(TW(),"utf-8").split(ai.NEW_LINE)}catch(r){r.code==="ENOENT"?Ft.info("no license file found"):Ft.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(dW.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=aI(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){Ft.error("There was an error parsing the license string."),Ft.error(n),e.ram_allocation=ai.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Sp=e,e}a(cI,"licenseSearch");async function OW(){return Sp||await cI(),Sp}a(OW,"getLicense")});var tr=m((hEe,bI)=>{"use strict";var fI="username is required",hI="nothing to update, must supply active, role or password to update",mI="password cannot be an empty string",pI="If role is specified, it cannot be empty.",SI="active must be true or false";bI.exports={addUser:UW,alterUser:MW,dropUser:vW,getSuperUser:FW,userInfo:BW,listUsers:rd,listUsersExternal:HW,setUsersToGlobal:sa,findAndValidateUser:NI,getClusterUser:GW,USERNAME_REQUIRED:fI,ALTERUSER_NOTHING_TO_UPDATE:hI,EMPTY_PASSWORD:mI,EMPTY_ROLE:pI,ACTIVE_BOOLEAN:SI};var TI=Zt(),NW=ro(),Op=W_(),gI=By(),RI=Xt(),Np=Nn(),yr=G(),AI=require("validate.js"),Ee=C(),{promisify:bW}=require("util"),bp=Tn(),lI=R(),_I=Pe(),yW=tt(),dEe=Y(),EEe=jc(),IW=mn(),{table:fEe}=(de(),re(Ie)),{handleHDBError:Bs,hdb_errors:wW}=z(),{HTTP_STATUS_CODES:Hs,AUTHENTICATION_ERROR_MSGS:Ap,HDB_ERROR_MSGS:ra}=wW,{UserEventMsg:yp}=cs(),dI=require("lodash"),{_assignPackageExport:CW}=require("../index");CW("getUser",NI);var OI={username:!0,active:!0,role:!0,password:!0},EI=new Map,td=RI.searchByValue,LW=RI.searchByHash,DW=bW(NW.delete);async function UW(e){let t=AI.cleanAttributes(e,OI),r=gI.addUserValidation(t);if(r)throw Bs(new Error,r.message,Hs.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 td(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 Bs(new Error,ra.ROLE_NAME_NOT_FOUND(t.role),Hs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw Bs(new Error,ra.DUP_ROLES_FOUND(t.role),Hs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=bp.encrypt(t.password)),t.password=Op.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await TI.insert(i)}catch(u){throw Ee.error("There was an error searching for a user."),Ee.error(u),u}Ee.debug(o);try{await sa()}catch(u){throw Ee.error("Got an error setting users to global"),Ee.error(u),u}if(o.skipped_hashes.length===1)throw Bs(new Error,ra.USER_ALREADY_EXISTS(t.username),Hs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Np.signalUserChange(new yp(process.pid)),`${c.username} successfully added`}a(UW,"addUser");async function MW(e){let t=AI.cleanAttributes(e,OI);if(yr.isEmptyOrZeroLength(t.username))throw new Error(fI);if(yr.isEmptyOrZeroLength(t.password)&&yr.isEmptyOrZeroLength(t.role)&&yr.isEmptyOrZeroLength(t.active))throw new Error(hI);if(!yr.isEmpty(t.password)&&yr.isEmptyOrZeroLength(t.password.trim()))throw new Error(mI);if(!yr.isEmpty(t.active)&&!yr.isBoolean(t.active))throw new Error(SI);let r=PW(t.username);if(!yr.isEmpty(t.password)&&!yr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=bp.encrypt(t.password)),t.password=Op.hash(t.password)),t.role==="")throw new Error(pI);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 td(i)||[])}catch(c){throw Ee.error("Got an error searching for a role."),Ee.error(c),c}if(!o||o.length===0){let c=ra.ALTER_USER_ROLE_NOT_FOUND(t.role);throw Ee.error(c),Bs(new Error,c,Hs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=ra.ALTER_USER_DUP_ROLES(t.role);throw Ee.error(c),Bs(new Error,c,Hs.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 TI.update(s)}catch(i){throw Ee.error("Error during update."),Ee.error(i),i}try{await sa()}catch(i){throw Ee.error("Got an error setting users to global"),Ee.error(i),i}return Np.signalUserChange(new yp(process.pid)),n}a(MW,"alterUser");function PW(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(PW,"isClusterUser");async function vW(e){try{let t=gI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(yr.isEmpty(global.hdb_users.get(e.username)))throw Bs(new Error,ra.USER_NOT_EXIST(e.username),Hs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await DW(r)}catch(n){throw Ee.error("Got an error deleting a user."),Ee.error(n),n}Ee.debug(s);try{await sa()}catch(n){throw Ee.error("Got an error setting users to global."),Ee.error(n),n}return Np.signalUserChange(new yp(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(vW,"dropUser");async function BW(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 LW(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(BW,"userInfo");async function HW(){let e;try{e=await rd()}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(HW,"listUsersExternal");async function rd(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await td(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]=dI.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 td(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=dI.cloneDeep(o),o.role=r[o.role],qW(o.role),i.set(o.username,o);return i}catch(e){throw Ee.error("got an error listing users"),Ee.error(e),yr.errorizeMessage(e)}return null}a(rd,"listUsers");function qW(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(IW)){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(qW,"appendSystemTablesToRole");async function sa(){try{let e=await rd();global.hdb_users=e}catch(e){throw Ee.error(e),e}}a(sa,"setUsersToGlobal");async function NI(e,t,r=!0){global.hdb_users||await sa();let s=global.hdb_users.get(e);if(!s)throw Bs(new Error,Ap.GENERIC_AUTH_FAIL,Hs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw Bs(new Error,Ap.USER_INACTIVE,Hs.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(EI.get(t)===s.password)return n;if(Op.validate(s.password,t))EI.set(t,s.password);else throw Bs(new Error,Ap.GENERIC_AUTH_FAIL,Hs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(NI,"findAndValidateUser");async function FW(){global.hdb_users||await sa();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(FW,"getSuperUser");async function GW(){let e=await rd(),t=yW.getConfigFromFile(lI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!yr.isEmpty(r)&&r?.role?.role===lI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=bp.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+_I.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+_I.SERVER_SUFFIX.ADMIN,r}a(GW,"getClusterUser")});var Zc=m((TEe,CI)=>{"use strict";var io=C(),Ir=R(),xW=ny(),pEe=Yr(),SEe=ri(),kW=tr(),{validateEvent:yI}=cs(),Xc=Kr(),$W=require("process"),{resetDatabases:VW}=(de(),re(Ie)),YW={[Ir.ITC_EVENT_TYPES.SCHEMA]:KW,[Ir.ITC_EVENT_TYPES.USER]:wI};async function KW(e){let t=yI(e);if(t){io.error(t);return}io.trace("ITC schemaHandler received schema event:",e),await xW(e.message),await WW(e.message)}a(KW,"schemaHandler");async function WW(e){try{Xc.resetReadTxn(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Xc.resetReadTxn(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Xc.resetReadTxn(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=VW();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){io.error(t)}}a(WW,"syncSchemaMetadata");var II=[];async function wI(e){try{try{Xc.resetReadTxn(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Xc.resetReadTxn(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){io.warn(r)}let t=yI(e);if(t){io.error(t);return}io.trace(`ITC userHandler ${Ir.HDB_ITC_CLIENT_PREFIX}${$W.pid} received user event:`,e),await kW.setUsersToGlobal();for(let r of II)r()}catch(t){io.error(t)}}a(wI,"userHandler");wI.addListener=function(e){II.push(e)};CI.exports=YW});var cs=m((bEe,DI)=>{"use strict";var REe=C(),Ip=G(),QW=R(),{ITC_ERRORS:eu}=Ar(),{parentPort:AEe,threadId:zW,isMainThread:JW,workerData:OEe}=require("worker_threads"),{onMessageFromWorkers:jW,broadcast:NEe,broadcastWithAcknowledgement:XW}=rt();DI.exports={sendItcEvent:ZW,validateEvent:LI,SchemaEventMsg:eQ,UserEventMsg:tQ};var sd;jW(async(e,t)=>{sd=sd||Zc(),LI(e),sd[e.type]&&await sd[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function ZW(e){return!JW&&e.message&&(e.message.originator=zW),XW(e)}a(ZW,"sendItcEvent");function LI(e){if(typeof e!="object")return eu.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Ip.isEmpty(e.type))return eu.MISSING_TYPE;if(!e.hasOwnProperty("message")||Ip.isEmpty(e.message))return eu.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Ip.isEmpty(e.message.originator))return eu.MISSING_ORIGIN;if(QW.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return eu.INVALID_EVENT(e.type)}a(LI,"validateEvent");function eQ(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(eQ,"SchemaEventMsg");function tQ(e){this.originator=e}a(tQ,"UserEventMsg")});var Nn=m((wEe,vI)=>{"use strict";var UI=R(),IEe=G(),nd=C(),MI=ty(),na,{sendItcEvent:PI}=cs();function rQ(e){try{nd.trace("signalSchemaChange called with message:",e),na=na||Zc();let t=new MI(UI.ITC_EVENT_TYPES.SCHEMA,e);return na.schema(t),PI(t)}catch(t){nd.error(t)}}a(rQ,"signalSchemaChange");function sQ(e){try{nd.trace("signalUserChange called with message:",e),na=na||Zc();let t=new MI(UI.ITC_EVENT_TYPES.USER,e);return na.user(t),PI(t)}catch(t){nd.error(t)}}a(sQ,"signalUserChange");vI.exports={signalSchemaChange:rQ,signalUserChange:sQ}});var id=m((LEe,HI)=>{"use strict";var BI=G(),nQ=R(),iQ=C(),oQ=B_(),aQ=v_(),cQ=Nn(),{SchemaEventMsg:uQ}=cs(),lQ="already exists in";HI.exports=_Q;async function _Q(e,t,r){if(BI.isEmptyOrZeroLength(r))return r;let s=[];BI.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 dQ(e,t.schema,t.name,i)})),n}a(_Q,"lmdbCheckForNewAttributes");async function dQ(e,t,r,s){let n=new aQ(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await EQ(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(lQ))iQ.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(dQ,"createNewAttribute");async function EQ(e){let t;return t=await oQ(e),cQ.signalSchemaChange(new uQ(process.pid,nQ.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(EQ,"createAttribute")});var ia=m((UEe,qI)=>{"use strict";var wp=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}};qI.exports=wp});var GI=m((PEe,FI)=>{"use strict";var fQ=ia(),hQ=R().OPERATIONS_ENUM,Cp=class extends fQ{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(hQ.INSERT,r,s,n,i),this.records=t}};FI.exports=Cp});var kI=m((BEe,xI)=>{"use strict";var mQ=ia(),pQ=R().OPERATIONS_ENUM,Lp=class extends mQ{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(pQ.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};xI.exports=Lp});var VI=m((qEe,$I)=>{"use strict";var SQ=ia(),TQ=R().OPERATIONS_ENUM,Dp=class extends SQ{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(TQ.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};$I.exports=Dp});var KI=m((GEe,YI)=>{"use strict";var gQ=ia(),RQ=R().OPERATIONS_ENUM,Up=class extends gQ{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(RQ.DELETE,s,n,t,i),this.original_records=r}};YI.exports=Up});var tu=m(($Ee,JI)=>{"use strict";var kEe=require("path"),WI=Ce(),AQ=GI(),OQ=kI(),NQ=VI(),bQ=KI(),oa=xe(),QI=G(),{CONFIG_PARAMS:yQ}=R(),zI=Y();zI.initSync();var od=R().OPERATIONS_ENUM,{getTransactionAuditStorePath:IQ}=Ue();JI.exports=wQ;async function wQ(e,t){if(zI.get(yQ.LOGGING_AUDITLOG)===!1)return;let r=IQ(e.schema,e.table),s=await WI.openEnvironment(r,e.table,!0),n=CQ(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){WI.initializeDBIs(s,oa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,oa.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[oa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[oa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),QI.isEmpty(n.user_name)||s.dbis[oa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[oa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(wQ,"writeTransaction");function CQ(e,t){let r=QI.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===od.INSERT)return new AQ(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.UPDATE)return new OQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.UPSERT)return new NQ(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===od.DELETE)return new bQ(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(CQ,"createTransactionObject")});var Mp=m((KEe,jI)=>{"use strict";var LQ=$c(),YEe=Vc(),ru=R(),DQ=Qc(),UQ=Ji().insertRecords,MQ=Ce(),PQ=C(),vQ=id(),{getSchemaPath:BQ}=Ue(),HQ=tu();jI.exports=qQ;async function qQ(e){try{let{schema_table:t,attributes:r}=LQ(e);DQ(e,r,t.hash_attribute),e.schema!==ru.SYSTEM_SCHEMA_NAME&&(r.includes(ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(ru.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(ru.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await vQ(e.hdb_auth_header,t,r),n=BQ(e.schema,e.table),i=await MQ.openEnvironment(n,e.table),o=await UQ(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await HQ(e,o)}catch(c){PQ.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(qQ,"lmdbCreateRecords")});var ew=m((QEe,ZI)=>{"use strict";var XI=R(),FQ=Mp(),GQ=Vc(),xQ=require("fs-extra"),{getSchemaPath:kQ}=Ue();ZI.exports=$Q;async function $Q(e){let t=[{name:e.schema,createddate:Date.now()}],r=new GQ(XI.SYSTEM_SCHEMA_NAME,XI.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await FQ(r),await xQ.mkdirp(kQ(e.schema))}a($Q,"lmdbCreateSchema")});var rw=m((JEe,tw)=>{"use strict";var Pp=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}};tw.exports=Pp});var ow=m((tfe,iw)=>{"use strict";var sw=Ce(),vp=Ht(),Bp=Ar().LMDB_ERRORS_ENUM,VQ=xe(),nw=C(),XEe=G(),YQ=require("lmdb"),KQ=rw(),WQ=R(),{OVERFLOW_MARKER:ZEe,MAX_SEARCH_KEY_LENGTH:efe}=VQ,QQ=WQ.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zQ(e,t,r,s){if(vp.validateEnv(e),t===void 0)throw new Error(Bp.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Bp.IDS_REQUIRED):new Error(Bp.IDS_MUST_BE_ITERABLE);try{let n=sw.listDBIs(e);sw.initializeDBIs(e,t,n);let i=new KQ,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[QQ]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,YQ.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let A=n[T];if(!h.hasOwnProperty(A)||A===t)continue;let g=e.dbis[A],v=h[A];if(v!=null)try{let V=vp.getIndexedValues(v);if(V)for(let b=0,I=V.length;b<I;b++)g.remove(V[b],o)}catch{nw.warn(`cannot delete from attribute: ${A}, ${v}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){nw.warn(h),i.skipped.push(o)}let l=[],_=await Promise.all(c);for(let E=0,f=_.length;E<f;E++)_[E]===!0?i.deleted.push(u[E]):(i.skipped.push(u[E]),l.push(E));let d=0;for(let E=0;E<l.length;E++){let f=l[E];i.original_records.splice(f-d,1),d++}return i.txn_time=vp.getNextMonotonicTime(),i}catch(n){throw n}}a(zQ,"deleteRecords");iw.exports={deleteRecords:zQ}});var su=m((sfe,cw)=>{"use strict";var aa=G(),JQ=ow(),jQ=Ce(),{getSchemaPath:XQ}=Ue(),ZQ=tu(),ez=C();cw.exports=tz;async function tz(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(aa.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(aa.isEmptyOrZeroLength(e.hash_values)&&!aa.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];aa.isEmpty(u)||e.hash_values.push(u)}}if(aa.isEmptyOrZeroLength(e.hash_values))return aw([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(aa.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=XQ(e.schema,e.table),i=await jQ.openEnvironment(n,e.table),o=await JQ.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await ZQ(e,o)}catch(c){ez.error(`unable to write transaction due to ${c.message}`)}return aw(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(tz,"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 qp=m((ofe,uw)=>{"use strict";var rz=R(),ife=Ht();function Hp(e,t){let r=Object.create(null);if(t.length===1&&rz.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(Hp,"parseRow");function sz(e,t,r,s){let n=Hp(r,e);s.push(n)}a(sz,"searchAll");function nz(e,t,r,s){let n=Hp(r,e);s[t]=n}a(nz,"searchAllToMap");function iz(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(iz,"iterateDBI");function oo(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(oo,"pushResults");function oz(e,t,r,s,n,i){t.toString().endsWith(e)&&oo(t,r,s,n,i)}a(oz,"endsWith");function az(e,t,r,s,n,i){t.toString().includes(e)&&oo(t,r,s,n,i)}a(az,"contains");function cz(e,t,r,s,n,i){t>e&&oo(t,r,s,n,i)}a(cz,"greaterThanCompare");function uz(e,t,r,s,n,i){t>=e&&oo(t,r,s,n,i)}a(uz,"greaterThanEqualCompare");function lz(e,t,r,s,n,i){t<e&&oo(t,r,s,n,i)}a(lz,"lessThanCompare");function _z(e,t,r,s,n,i){t<=e&&oo(t,r,s,n,i)}a(_z,"lessThanEqualCompare");uw.exports={parseRow:Hp,searchAll:sz,searchAllToMap:nz,iterateDBI:iz,endsWith:oz,contains:az,greaterThanCompare:cz,greaterThanEqualCompare:uz,lessThanCompare:lz,lessThanEqualCompare:_z,pushResults:oo}});var ca=m((_fe,mw)=>{"use strict";var ci=Ce(),cfe=C(),wr=Ht(),ad=xe(),Qe=Ar().LMDB_ERRORS_ENUM,ufe=G(),dz=R(),cd=qp(),{parseRow:Ez}=cd,lfe=require("lmdb"),{OVERFLOW_MARKER:lw,MAX_SEARCH_KEY_LENGTH:fz}=ad;function _w(e,t,r,s=!1,n=void 0,i=void 0){return ao(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(_w,"iterateFullIndex");function nu(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ao(e,t,r,(_,d,E,f)=>{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 f===r?(g.values=!1,d.getRange(g).map(v=>({value:v}))):d.getRange(g)})}a(nu,"iterateRangeBetween");function ao(e,t,r,s){let n=e.database||e,i=ci.openDBI(n,r);i[ad.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&ci.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(ao,"setupTransaction");function dw(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(lw)){if(!n)if(r)n=ci.openDBI(e,r);else{let u=ci.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=ci.openDBI(e,u[l]),!n[ad.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(dw,"getOverflowCheck");function hz(e,t,r,s=!1,n=void 0,i=void 0){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);return ao(e,t,t,(o,c,u)=>(ud(r),r=iu(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>Ez(l.value,r))))}a(hz,"searchAll");function mz(e,t,r,s=!1,n=void 0,i=void 0){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);ud(r),r=iu(e.database||e,r);let o=new Map;for(let{key:c,value:u}of _w(e,t,t,s,n,i))o.set(c,cd.parseRow(u,r));return o}a(mz,"searchAllToMap");function pz(e,t,r=!1,s=void 0,n=void 0){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=_w(e,void 0,t,r,s,n),c=o.transaction,u=dw(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(pz,"iterateDBI");function Sz(e,t){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);return ci.statDBI(e,t).entryCount}a(Sz,"countAll");function Tz(e,t,r,s,n=!1,i=void 0,o=void 0){return ui(e,r,s),ao(e,t,r,(c,u,l,_)=>(s=wr.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(Tz,"equals");function gz(e,t,r){return ui(e,t,r),ci.openDBI(e,t).getValuesCount(r)}a(gz,"count");function Rz(e,t,r,s,n=!1,i=void 0,o=void 0){return ui(e,r,s),ao(e,null,r,(c,u)=>{s=wr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;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(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}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(Rz,"startsWith");function Az(e,t,r,s,n=!1,i=void 0,o=void 0){return Ew(e,t,r,s,n,i,o,!0)}a(Az,"endsWith");function Ew(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return ui(e,r,s),ao(e,null,r,(u,l,_,d)=>{let E=dw(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(lw)?l.getValues(f,{transaction:u}).map(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[ad.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(Ew,"contains");function Oz(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),nu(e,t,r,s,u,n,i,o,!0,!1)}a(Oz,"greaterThan");function Nz(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),nu(e,t,r,s,u,n,i,o,!1,!1)}a(Nz,"greaterThanEqual");function bz(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),nu(e,t,r,u,s,n,i,o,!1,!0)}a(bz,"lessThan");function yz(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),nu(e,t,r,u,s,n,i,o,!1,!1)}a(yz,"lessThanEqual");function Iz(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(wr.validateEnv(e),r===void 0)throw new Error(Qe.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Qe.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Qe.END_VALUE_REQUIRED);if(s=wr.convertKeyValueToWrite(s),n=wr.convertKeyValueToWrite(n),s>n)throw new Error(Qe.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return nu(e,t,r,s,n,i,o,c)}a(Iz,"between");function wz(e,t,r,s){wr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);if(ud(r),r=iu(n,r),s===void 0)throw new Error(Qe.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=cd.parseRow(c,r)),o}a(wz,"searchByHash");function Cz(e,t,r){wr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qe.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(Cz,"checkHashExists");function Lz(e,t,r,s,n=[]){return hw(e,t,r,s,n),fw(e,t,r,s,n).map(i=>i[1])}a(Lz,"batchSearchByHash");function Dz(e,t,r,s,n=[]){hw(e,t,r,s,n);let i=new Map;for(let[o,c]of fw(e,t,r,s,n))i.set(o,c);return i}a(Dz,"batchSearchByHashToMap");function fw(e,t,r,s,n=[]){return ao(e,t,t,(i,o,c)=>{r=iu(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,cd.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(fw,"batchHashSearch");function hw(e,t,r,s,n){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.HASH_ATTRIBUTE_REQUIRED);if(ud(r),s==null)throw new Error(Qe.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Qe.IDS_MUST_BE_ITERABLE)}a(hw,"initializeBatchSearchByHash");function ud(e){if(!Array.isArray(e))throw e===void 0?new Error(Qe.FETCH_ATTRIBUTES_REQUIRED):new Error(Qe.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ud,"validateFetchAttributes");function ui(e,t,r){if(wr.validateEnv(e),t===void 0)throw new Error(Qe.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Qe.SEARCH_VALUE_REQUIRED);if(r?.length>fz)throw new Error(Qe.SEARCH_VALUE_TOO_LARGE)}a(ui,"validateComparisonFunctions");function iu(e,t){return t.length===1&&dz.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=ci.listDBIs(e)),t}a(iu,"setGetWholeRowAttributes");mw.exports={searchAll:hz,searchAllToMap:mz,count:gz,countAll:Sz,equals:Tz,startsWith:Rz,endsWith:Az,contains:Ew,searchByHash:wz,setGetWholeRowAttributes:iu,batchSearchByHash:Lz,batchSearchByHashToMap:Dz,checkHashExists:Cz,iterateDBI:pz,greaterThan:Oz,greaterThanEqual:Nz,lessThan:bz,lessThanEqual:yz,between:Iz}});var ua=m((Efe,Rw)=>{var pw=require("lodash"),Sw=qe(),ve=require("joi"),Uz=G(),{hdb_schema_table:ld,checkValidTable:Tw,hdb_table:gw,hdb_database:_d}=Ps(),{handleHDBError:Mz,hdb_errors:Pz}=z(),{getDatabases:vz}=(de(),re(Ie)),{HTTP_STATUS_CODES:Bz}=Pz,Hz=ve.object({database:_d,schema:_d,table:gw,search_attribute:ld,search_value:ve.any().required(),get_attributes:ve.array().min(1).items(ld).optional(),desc:ve.bool(),limit:ve.number().integer().min(1),offset:ve.number().integer().min(0)}),qz=ve.object({database:_d,schema:_d,table:gw,operator:ve.string().valid("and","or").default("and").lowercase(),offset:ve.number().integer().min(0),limit:ve.number().integer().min(1),get_attributes:ve.array().min(1).items(ld).optional(),conditions:ve.array().min(1).items(ve.object({search_attribute:ld,search_type:ve.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:ve.when("search_type",{switch:[{is:"equals",then:ve.any()},{is:"between",then:ve.array().items(ve.alternatives([ve.string(),ve.number()])).length(2)}],otherwise:ve.alternatives(ve.string(),ve.number())}).required()})).required()});Rw.exports=function(e,t){let r=null;switch(t){case"value":r=Sw.validateBySchema(e,Hz);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(Tw("database",e.schema)),i(Tw("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=Sw.validateBySchema(e,qz);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=Uz.checkGlobalSchemaTable(e.schema,e.table);if(n)return Mz(new Error,n,Bz.NOT_FOUND);let o=vz()[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 Fp=m((hfe,Aw)=>{"use strict";var Fz=Ce(),Gz=ua(),{getSchemaPath:xz}=Ue();Aw.exports=kz;function kz(e){let t=Gz(e,"hashes");if(t)throw t;let r=xz(e.schema,e.table);return Fz.openEnvironment(r,e.table)}a(kz,"initialize")});var Gp=m((pfe,Ow)=>{"use strict";var $z=ca(),Vz=Fp();Ow.exports=Yz;async function Yz(e){let t=await Vz(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return $z.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(Yz,"lmdbGetDataByHash")});var la=m((Tfe,Nw)=>{"use strict";var xp=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};Nw.exports=xp});var yw=m((Afe,bw)=>{"use strict";var Rfe=la(),Kz=ca(),Wz=Fp();bw.exports=Qz;async function Qz(e){let t=await Wz(e),r=global.hdb_schema[e.schema][e.table];return Kz.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(Qz,"lmdbSearchByHash")});var us=m((Nfe,Iw)=>{"use strict";var kp=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=_}};Iw.exports=kp});var dd=m((yfe,Mw)=>{"use strict";var Gt=ca(),zz=Ce(),Jz=G(),ce=xe(),co=R(),jz=mn(),ww=Ar().LMDB_ERRORS_ENUM,{getSchemaPath:Xz}=Ue(),bn=co.SEARCH_WILDCARDS;async function Zz(e,t,r){let s;e.schema===co.SYSTEM_SCHEMA_NAME?s=jz[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Uw(e,s.hash_attribute,r,t);return Lw(e,n,s.hash_attribute,r)}a(Zz,"prepSearch");async function Lw(e,t,r,s){let n=Xz(e.schema,e.table),i=await zz.openEnvironment(n,e.table),o=Dw(i,e,t,r),c=o.transaction||i;if([ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ce.SEARCH_TYPES.SEARCH_ALL,ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(eJ(e,r)===!1){let _=e.search_attribute;if(_===r)return s?Cw(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?Cw(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Gt.batchSearchByHashToMap(c,r,e.get_attributes,l):Gt.batchSearchByHash(c,r,e.get_attributes,l)}a(Lw,"executeSearch");function Dw(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ce.SEARCH_TYPES.EQUALS:n=Gt.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.CONTAINS:n=Gt.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.ENDS_WITH:case ce.SEARCH_TYPES._ENDS_WITH:n=Gt.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.STARTS_WITH:case ce.SEARCH_TYPES._STARTS_WITH:n=Gt.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Gt.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Gt.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ce.SEARCH_TYPES.SEARCH_ALL:return Gt.searchAll(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Gt.searchAllToMap(e,s,t.get_attributes,o,c,u);case ce.SEARCH_TYPES.BETWEEN:n=Gt.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN:case ce.SEARCH_TYPES._GREATER_THAN:n=Gt.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.GREATER_THAN_EQUAL:case ce.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Gt.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN:case ce.SEARCH_TYPES._LESS_THAN:n=Gt.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ce.SEARCH_TYPES.LESS_THAN_EQUAL:case ce.SEARCH_TYPES._LESS_THAN_EQUAL:n=Gt.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Dw,"searchByType");function Cw(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(Cw,"createMapFromIterable");function eJ(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(eJ,"checkToFetchMore");function Uw(e,t,r,s){if(Jz.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),bn.indexOf(n)>-1)return r===!0?ce.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ce.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(bn[0])<0&&n.indexOf(bn[1])<0)return c===!0?r===!0?ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ce.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ce.SEARCH_TYPES.EQUALS;if(bn.indexOf(i)>=0&&bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ce.SEARCH_TYPES.CONTAINS;if(bn.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ce.SEARCH_TYPES.ENDS_WITH;if(bn.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ce.SEARCH_TYPES.STARTS_WITH;if(n.includes(bn[0])||n.includes(bn[1]))return ce.SEARCH_TYPES.EQUALS;throw new Error(ww.UNKNOWN_SEARCH_TYPE)}else switch(s){case co.VALUE_SEARCH_COMPARATORS.BETWEEN:return ce.SEARCH_TYPES.BETWEEN;case co.VALUE_SEARCH_COMPARATORS.GREATER:return ce.SEARCH_TYPES.GREATER_THAN;case co.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ce.SEARCH_TYPES.GREATER_THAN_EQUAL;case co.VALUE_SEARCH_COMPARATORS.LESS:return ce.SEARCH_TYPES.LESS_THAN;case co.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ce.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ww.UNKNOWN_SEARCH_TYPE)}}a(Uw,"createSearchTypeFromSearchObject");Mw.exports={executeSearch:Lw,createSearchTypeFromSearchObject:Uw,prepSearch:Zz,searchByType:Dw}});var vw=m((Cfe,Pw)=>{"use strict";var wfe=us(),tJ=ua(),rJ=G(),sJ=R(),nJ=dd();Pw.exports=iJ;function iJ(e,t){if(!rJ.isEmpty(t)&&sJ.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=tJ(e,"value");if(s)throw s;let n=!0;return nJ.prepSearch(e,t,n)}a(iJ,"lmdbGetDataByValue")});var ou=m((Ufe,Bw)=>{"use strict";var Dfe=us(),oJ=ua(),aJ=G(),cJ=R(),uJ=dd();Bw.exports=lJ;async function lJ(e,t){if(!aJ.isEmpty(t)&&cJ.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 uJ.prepSearch(e,t,!1)}a(lJ,"lmdbSearchByValue")});var qw=m((vfe,Hw)=>{"use strict";var Pfe=xe(),$p=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}},Vp=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Yp=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Hw.exports={SearchByConditionsObject:$p,SearchCondition:Vp,SortAttribute:Yp}});var $w=m((Ffe,kw)=>{"use strict";var Hfe=qw().SearchByConditionsObject,_J=us(),dJ=ua(),Kp=ca(),Ed=xe(),{Resource:qfe}=(Ls(),re(im)),xw=dd(),EJ=qp(),fJ=require("lodash"),{getSchemaPath:hJ}=Ue(),Fw=Ce(),{handleHDBError:mJ,hdb_errors:pJ}=z(),{HTTP_STATUS_CODES:SJ}=pJ,TJ=1e8;kw.exports=gJ;async function gJ(e){let t=dJ(e,"conditions");if(t)throw mJ(t,t.message,SJ.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=hJ(e.schema,e.table),s=await Fw.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Fw.openDBI(s,l.search_attribute);let i=fJ.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Ed.SEARCH_TYPES.EQUALS?l.estimated_count=Kp.count(s,l.search_attribute,l.search_value):_===Ed.SEARCH_TYPES.CONTAINS||_===Ed.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=TJ}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Gw(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(xw.filterByType),d=_.length,E=Kp.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:o,lazy:!0})),d>0&&(u=u.filter(f=>{for(let h=0;h<d;h++)if(!_[h](f))return!1;return!0})),(e.offset||e.limit!==void 0)&&(u=u.slice(e.offset,e.limit!==void 0?(e.offset||0)+e.limit:void 0)),u=u.map(f=>EJ.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Gw(o,e,E,n.hash_attribute);c=c.concat(f)}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=Kp.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(gJ,"lmdbSearchByConditions");async function Gw(e,t,r,s){let n=new _J(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ed.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,xw.searchByType(e,n,i,s).map(o=>o.value)}a(Gw,"executeConditionSearch")});var au=m((xfe,Vw)=>{"use strict";var RJ=R().OPERATIONS_ENUM,Wp=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=RJ.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Vw.exports=Wp});var Qp=m(($fe,Xw)=>{"use strict";var Qw=us(),zw=au(),Jw=ou(),jw=su(),rr=R(),Yw=G(),Kw=Ce(),{getTransactionAuditStorePath:AJ,getSchemaPath:OJ}=Ue(),Ww=C();Xw.exports=NJ;async function NJ(e){try{if(Yw.isEmpty(global.hdb_schema[e.schema])||Yw.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await bJ(e),await yJ(e);let t=OJ(e.schema,e.table);try{await Kw.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ww.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=AJ(e.schema,e.table);await Kw.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ww.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(NJ,"lmdbDropTable");async function bJ(e){let t=new Qw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Jw(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 zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await jw(n)}a(bJ,"deleteAttributesFromSystem");async function yJ(e){let t=new Qw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,rr.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Jw(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 zw(rr.SYSTEM_SCHEMA_NAME,rr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await jw(n)}catch(i){throw i}}a(yJ,"dropTableFromSystem")});var eC=m((Yfe,Zw)=>{"use strict";var IJ=require("fs-extra"),wJ=us(),CJ=la(),LJ=au(),DJ=Qp(),UJ=su(),MJ=Gp(),PJ=ou(),yn=R(),{getSchemaPath:vJ}=Ue(),{handleHDBError:BJ,hdb_errors:HJ}=z(),{HDB_ERROR_MSGS:qJ,HTTP_STATUS_CODES:FJ}=HJ;Zw.exports=GJ;async function GJ(e){let t;try{t=await xJ(e.schema);let r=new wJ(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await PJ(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await DJ(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new LJ(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await UJ(n);let i=vJ(t);await IJ.remove(i)}catch(r){throw r}}a(GJ,"lmdbDropSchema");async function xJ(e){let t=new CJ(yn.SYSTEM_SCHEMA_NAME,yn.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[yn.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await MJ(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw BJ(new Error,qJ.SCHEMA_NOT_FOUND(e),FJ.NOT_FOUND,void 0,void 0,!0);return s}a(xJ,"validateDropSchema")});var cu=m((Wfe,tC)=>{"use strict";var zp=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};tC.exports=zp});var jp=m((Jfe,rC)=>{"use strict";var kJ=require("fs-extra"),fd=Ce(),{getTransactionAuditStorePath:$J}=Ue(),Jp=xe(),zfe=cu();rC.exports=VJ;async function VJ(e){let t;try{let r=$J(e.schema,e.table);await kJ.mkdirp(r),t=await fd.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{fd.createDBI(t,Jp.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),fd.createDBI(t,Jp.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),fd.createDBI(t,Jp.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(VJ,"createTransactionsAuditEnvironment")});var oC=m((Xfe,iC)=>{"use strict";var Xp=R(),sC=Ce(),YJ=Ji(),{getSystemSchemaPath:KJ,getSchemaPath:WJ}=Ue(),QJ=mn(),zJ=B_(),Zp=v_(),JJ=C(),jJ=jp(),tS=QJ.hdb_table,nC=[];for(let e=0;e<tS.attributes.length;e++)nC.push(tS.attributes[e].attribute);iC.exports=XJ;async function XJ(e,t){let r=WJ(t.schema,t.table),s=new Zp(t.schema,t.table,Xp.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Zp(t.schema,t.table,Xp.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Zp(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(KJ(),Xp.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await YJ.insertRecords(o,tS.hash_attribute,nC,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await eS(s),await eS(n),await eS(i)}await jJ(t)}catch(o){throw o}}a(XJ,"lmdbCreateTable");async function eS(e){try{await zJ(e)}catch(t){JJ.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(eS,"createAttribute")});var cC=m((ehe,aC)=>{"use strict";var ZJ=$c(),ej=Qc(),tj=id(),uu=R(),rj=Ji().updateRecords,sj=Ce(),{getSchemaPath:nj}=Ue(),ij=tu(),oj=C();aC.exports=aj;async function aj(e){try{let{schema_table:t,attributes:r}=ZJ(e);ej(e,r,t.hash_attribute),e.schema!==uu.SYSTEM_SCHEMA_NAME&&(r.includes(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(uu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await tj(e.hdb_auth_header,t,r),n=nj(e.schema,e.table),i=await sj.openEnvironment(n,e.table),o=await rj(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await ij(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(aj,"lmdbUpdateRecords")});var lC=m((rhe,uC)=>{"use strict";var cj=R().OPERATIONS_ENUM,rS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=cj.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};uC.exports=rS});var dC=m((ihe,_C)=>{"use strict";var nhe=lC(),uj=$c(),lj=Qc(),_j=id(),lu=R(),dj=Ji().upsertRecords,Ej=Ce(),{getSchemaPath:fj}=Ue(),hj=tu(),mj=C(),{handleHDBError:pj,hdb_errors:Sj}=z();_C.exports=Tj;async function Tj(e){let t;try{t=uj(e)}catch(u){throw pj(u,u.message,Sj.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;lj(e,s,r.hash_attribute),e.schema!==lu.SYSTEM_SCHEMA_NAME&&(s.includes(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(lu.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(lu.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await _j(e.hdb_auth_header,r,s),i=fj(e.schema,e.table),o=await Ej.openEnvironment(i,e.table),c=await dj(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await hj(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(Tj,"lmdbUpsertRecords")});var fC=m((ahe,EC)=>{"use strict";var sS=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};EC.exports=sS});var mC=m((uhe,hC)=>{"use strict";var nS=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}};hC.exports=nS});var TC=m((dhe,SC)=>{"use strict";var iS=Ce(),{getTransactionAuditStorePath:gj}=Ue(),_he=fC(),_u=xe(),Rj=G(),pC=mC(),Aj=require("util").promisify,Oj=Aj(setTimeout),Nj=1e4,bj=100;SC.exports=yj;async function yj(e){let t=gj(e.schema,e.table),r=await iS.openEnvironment(t,e.table,!0),s=iS.listDBIs(r);iS.initializeDBIs(r,_u.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new pC;do n=await Ij(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 Oj(bj);while(n.transactions_deleted>0);return i}a(yj,"deleteAuditLogsBefore");async function Ij(e,t){let r=new pC;try{let s=e.dbis[_u.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[_u.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];Rj.isEmpty(c)||(n=e.dbis[_u.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[_u.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>Nj)break}return await n,r}catch(s){throw s}}a(Ij,"deleteTransactions")});var RC=m((fhe,gC)=>{"use strict";var oS=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};gC.exports=oS});var OC=m((phe,AC)=>{"use strict";var wj=us(),Cj=au(),mhe=RC(),qs=R(),Lj=G(),aS=Ce(),Dj=mn(),Uj=ou(),Mj=su(),{getSchemaPath:Pj}=Ue();AC.exports=vj;async function vj(e,t=!0){let r;e.schema===qs.SYSTEM_SCHEMA_NAME?r=Dj[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Hj(e),n=Pj(e.schema,e.table),i=await aS.openEnvironment(n,e.table);return t===!0&&await Bj(e,i,r.hash_attribute),aS.dropDBI(i,e.attribute),s}a(vj,"lmdbDropAttribute");async function Bj(e,t,r){let s=aS.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(Bj,"removeAttributeFromAllObjects");async function Hj(e){let t=new wj(qs.SYSTEM_SCHEMA_NAME,qs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await Uj(t)).filter(o=>o[qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(Lj.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[qs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new Cj(qs.SYSTEM_SCHEMA_NAME,qs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return Mj(i)}a(Hj,"dropAttributeFromSystem")});var CC=m((ghe,wC)=>{"use strict";var cS=Ce(),_a=xe(),The=Ht(),uS=R(),NC=G(),{getTransactionAuditStorePath:qj}=Ue(),Fj=ca(),hd=ia(),Gj=C();wC.exports=xj;async function xj(e){let t=qj(e.schema,e.table),r=await cS.openEnvironment(t,e.table,!0),s=cS.listDBIs(r);cS.initializeDBIs(r,_a.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return bC(r,e.search_values);case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,$j(r,e.search_values,n);case uS.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return kj(r,e.search_values);default:return bC(r)}}a(xj,"readAuditLog");function bC(e,t=[0,Date.now()]){NC.isEmpty(t[0])&&(t[0]=0),NC.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[_a.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 hd,n))}a(bC,"searchTransactionsByTimestamp");function kj(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[_a.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,IC(e,i))}return Object.fromEntries(r)}a(kj,"searchTransactionsByUsername");function $j(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=Fj.equals(e,_a.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,_a.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=IC(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);yC(u,"records",r,_,o),yC(u,"original_records",r,_,o)}return Object.fromEntries(o)}a($j,"searchTransactionsByHashValues");function yC(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 hd(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new hd(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(yC,"loopRecords");function IC(e,t){let r=[];try{let s=e.dbis[_a.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 hd,i);r.push(o)}}catch(i){Gj.warn(i)}return r}catch(s){throw s}}a(IC,"batchSearchTransactions")});var DC=m((Nhe,LC)=>{"use strict";var{getSchemaPath:Ahe}=Ue(),Ohe=Ce(),{database:Vj}=(de(),re(Ie));LC.exports={writeTransaction:Yj};async function Yj(e,t,r){return Vj({database:e,table:t}).transaction(r)}a(Yj,"writeTransaction")});var vC=m((yhe,PC)=>{"use strict";var{getSchemaPath:UC}=Ue(),MC=Ce();PC.exports={flush:Kj,resetReadTxn:Wj};async function Kj(e,t){return(await MC.openEnvironment(UC(e,t),t.toString())).flushed}a(Kj,"flush");async function Wj(e,t){try{(await MC.openEnvironment(UC(e,t),t.toString())).resetReadTxn()}catch{}}a(Wj,"resetReadTxn")});var FC=m((whe,qC)=>{"use strict";var{Readable:Qj}=require("stream"),{getDatabases:zj}=(de(),re(Ie)),{readSync:Jj,openSync:jj,createReadStream:BC}=require("fs"),{open:Xj}=require("lmdb"),HC=b_(),Zj=I_(),{INTERNAL_DBIS_NAME:e2}=xe();qC.exports=r2;var lS=32768,t2=100;async function r2(e){let t=e.database||e.schema||"data",r=zj()[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=Xj({noSync:!0,maxDbs:Zj.MAX_DBS}),E,f=d.openDB(e2,new HC(!1)),h=_.useReadTransaction(),p=0;for(let{key:A,value:g}of _.getRange({transaction:h,start:!1}))if(n.some(v=>A.startsWith?.(v+"/"))){f.put(A,g);let[,v]=A.split("/"),V=!v,b=new HC(!V,V);b.encoding="binary";let I=d.openDB(A,b),U=_.openDB(A,b);for(let{key:J,version:M,value:se}of U.getRange({transaction:h,versions:V}))E=I.put(J,se,M),p++%t2===0&&await new Promise(ye=>setTimeout(ye,20))}await E;let T=BC(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=jj(o.path);return o.transaction(()=>{let l=Buffer.alloc(lS);Jj(c,l,0,lS);let _=o.useReadTransaction(),d=BC(null,{fd:c,start:lS}),E=new Qj.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});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 kC=m((Lhe,xC)=>{"use strict";var s2=C(),{handleHDBError:n2}=z(),i2=cb(),o2=B_(),a2=Mp(),c2=ew(),u2=su(),l2=Gp(),_2=yw(),d2=vw(),E2=ou(),f2=$w(),h2=eC(),m2=oC(),p2=cC(),S2=dC(),T2=TC(),g2=Qp(),R2=OC(),A2=CC(),O2=DC(),GC=vC(),N2=FC(),_S=class extends i2{static{a(this,"LMDBBridge")}async searchByConditions(t){return f2(t)}async getDataByHash(t){return await l2(t)}async searchByHash(t){return await _2(t)}async getDataByValue(t,r){return await d2(t,r)}async searchByValue(t){return await E2(t)}async createSchema(t){return await c2(t)}async dropSchema(t){return await h2(t)}async createTable(t,r){return await m2(t,r)}async dropTable(t){return await g2(t)}async createAttribute(t){return await o2(t)}async createRecords(t){return await a2(t)}async updateRecords(t){return await p2(t)}async upsertRecords(t){try{return await S2(t)}catch(r){throw n2(r,null,null,s2.ERR,r)}}async deleteRecords(t){return await u2(t)}async dropAttribute(t){return await R2(t)}async deleteAuditLogsBefore(t){return await T2(t)}async readAuditLog(t){return await A2(t)}writeTransaction(t,r,s){return O2.writeTransaction(t,r,s)}flush(t,r){return GC.flush(t,r)}resetReadTxn(t,r){return GC.resetReadTxn(t,r)}getBackup(t){return N2(t)}};xC.exports=_S});var jC={};We(jC,{ResourceBridge:()=>fS});function hS({get_attributes:e},t){if(e){if(e[0]==="*"){if(t.schemaDefined)return;e=t.attributes.map(r=>r.name)}return e.forceNulls=!0,e}}function VC(e,t){let r=Fs(e),s=hS(e,r);if(!r)throw new ls.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};return Ze(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&S_(u),t?yield{key:c,value:u}:yield u}})}function Fs(e){let t=e.database||e.schema||y2,r=_s()[t];if(!r)throw(0,ls.handleHDBError)(new Error,b2.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function YC(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*KC(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,timestamp: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 WC,md,ls,QC,zC,ds,dS,ES,JC,b2,y2,I2,w2,$C,fS,XC=ge(()=>{"use strict";WC=D(kC()),md=D(ua()),ls=D(z());de();QC=D($c()),zC=D(Qc()),ds=D(R()),dS=D(Nn()),ES=D(cs()),JC=D(G());Qi();T_();({HDB_ERROR_MSGS:b2}=ls.hdb_errors),y2="data",I2=1e4,w2=10,fS=class extends WC.default{static{a(this,"ResourceBridge")}constructor(t){super(t),$C=this}async searchByConditions(t){let r=(0,md.default)(t,"conditions");if(r)throw(0,ls.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=Fs(t);if(!s)throw new ls.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:hS(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 ls.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}]}ft({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await Fs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=Fs(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){Fs(t).dropTable()}createSchema(t){return du({database:t.schema,table:null}),dS.signalSchemaChange(new ES.SchemaEventMsg(process.pid,ds.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await mS(t.schema),dS.signalSchemaChange(new ES.SchemaEventMsg(process.pid,ds.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,$C.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,QC.default)(t);(0,zC.default)(t,s,r.primaryKey);let n,i=_s()[t.schema][t.table],o={user:t.hdb_user};return Ze(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.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=S_(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);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=_s()[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 YC(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=_s()[t.schema][t.table];if(!r.createdTimeProperty)throw new ls.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:ds.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,JC.async_set_timeout)(w2),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%I2===0&&await l();return u.length>0&&await l(),n?YC(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,md.default)(t,"hashes");if(r)throw r;return VC(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of VC(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&ds.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,md.default)(t,"value");if(s)throw s;let n=Fs(t);if(!n)throw new ls.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===ds.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:hS(t,n)})}async getDataByValue(t,r){let s=new Map,n=Fs(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){Fs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return Fs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=Fs(t),s={};switch(t.search_type){case ds.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,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case ds.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of KC(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return KC(r,t.search_values?.[0],t.search_values?.[1])}}};a(hS,"getSelect");a(VC,"getRecords");a(Fs,"getTable");a(YC,"createDeleteResponse");a(KC,"groupRecordsInHistory")});var Kr=m((Bhe,ZC)=>{"use strict";var{ResourceBridge:C2}=(XC(),re(jC)),L2=Y();L2.initSync();var pd;function D2(){return pd||(pd=new C2,pd)}a(D2,"getBridge");ZC.exports=D2()});var sL=m((qhe,rL)=>{"use strict";var eL=require("lodash"),Eu=require("mathjs"),U2=require("jsonata"),tL=G();rL.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?eL.uniqWith(e,eL.isEqual):e,searchJSON:M2,mad:fu.bind(null,Eu.mad),mean:fu.bind(null,Eu.mean),mode:fu.bind(null,Eu.mode),prod:fu.bind(null,Eu.prod),median:fu.bind(null,Eu.median)};function fu(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(fu,"aggregateFunction");function M2(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(tL.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),tL.isEmpty(this.__ala__.res[r])){let s=U2(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(M2,"searchJSON")});var iL=m((Ghe,nL)=>{"use strict";var st=require("moment"),pS="YYYY-MM-DDTHH:mm:ss.SSSZZ";st.suppressDeprecationWarnings=!0;nL.exports={current_date:()=>st().utc().format("YYYY-MM-DD"),current_time:()=>st().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return st(e).utc().format("YYYY");case"month":return st(e).utc().format("MM");case"day":return st(e).utc().format("DD");case"hour":return st(e).utc().format("HH");case"minute":return st(e).utc().format("mm");case"second":return st(e).utc().format("ss");case"millisecond":return st(e).utc().format("SSS");default:break}},date:e=>st(e).utc().format(pS),date_format:(e,t)=>st(e).utc().format(t),date_add:(e,t,r)=>st(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>st(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=st(e).utc(),n=st(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>st().utc().valueOf(),get_server_time:()=>st().format(pS),offset_utc:(e,t)=>st(e).utc().utcOffset(t).format(pS)}});var uL=m((xhe,cL)=>{"use strict";var P2=require("@turf/area"),v2=require("@turf/length"),B2=require("@turf/circle"),H2=require("@turf/difference"),q2=require("@turf/distance"),F2=require("@turf/boolean-contains"),G2=require("@turf/boolean-equal"),x2=require("@turf/boolean-disjoint"),k2=require("@turf/helpers"),oL=R(),fe=G();cL.exports={geoArea:$2,geoLength:V2,geoCircle:Y2,geoDifference:K2,geoDistance:aL,geoNear:W2,geoContains:Q2,geoEqual:z2,geoCrosses:J2,geoConvert:j2};var SS="geo1 is required",TS="geo2 is required";function $2(e){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),P2.default(e)}a($2,"geoArea");function V2(e,t){if(fe.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=fe.autoCastJSON(e)),v2.default(e,{units:t||"kilometers"})}a(V2,"geoLength");function Y2(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)),B2.default(e,t,{units:r||"kilometers"})}a(Y2,"geoCircle");function K2(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)),H2(e,t)}a(K2,"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)),q2.default(e,t,{units:r||"kilometers"})}a(aL,"geoDistance");function W2(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(W2,"geoNear");function Q2(e,t){if(fe.isEmpty(e))throw new Error(SS);if(fe.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),F2.default(e,t)}a(Q2,"geoContains");function z2(e,t){if(fe.isEmpty(e))throw new Error(SS);if(fe.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),G2.default(e,t)}a(z2,"geoEqual");function J2(e,t){if(fe.isEmpty(e))throw new Error(SS);if(fe.isEmpty(e))throw new Error(TS);return typeof e=="string"&&(e=fe.autoCastJSON(e)),typeof t=="string"&&(t=fe.autoCastJSON(t)),!x2.default(e,t)}a(J2,"geoCrosses");function j2(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(oL.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(oL.GEO_CONVERSION_ENUM).join(",")}`);return k2[t](e,r)}a(j2,"geoConvert")});var Sd=m(($he,lL)=>{var uo=sL(),Cr=iL(),Gs=uL();lL.exports=e=>{e.aggr.mad=e.aggr.MAD=uo.mad,e.aggr.mean=e.aggr.MEAN=uo.mean,e.aggr.mode=e.aggr.MODE=uo.mode,e.aggr.prod=e.aggr.PROD=uo.prod,e.aggr.median=e.aggr.MEDIAN=uo.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=uo.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=uo.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=Cr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=Cr.current_time,e.fn.extract=e.fn.EXTRACT=Cr.extract,e.fn.date=e.fn.DATE=Cr.date,e.fn.date_format=e.fn.DATE_FORMAT=Cr.date_format,e.fn.date_add=e.fn.DATE_ADD=Cr.date_add,e.fn.date_sub=e.fn.DATE_SUB=Cr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=Cr.date_diff,e.fn.now=e.fn.NOW=Cr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=Cr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=Cr.get_server_time,e.fn.getdate=e.fn.GETDATE=Cr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=Cr.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=Gs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Gs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Gs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Gs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Gs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Gs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Gs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Gs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Gs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Gs.geoNear}});var fL=m((Vhe,EL)=>{"use strict";var hu=require("lodash"),wt=require("alasql");wt.options.cache=!1;var X2=Sd(),_L=require("clone"),Td=require("recursive-iterator"),oe=C(),ae=G(),da=Kr(),Z2=R(),{hdb_errors:e3}=z(),{getDatabases:dL}=(de(),re(Ie)),t3="IS NULL",Es="There was a problem performing this search. Please check the logs and try again.";X2(wt);var gS=class{static{a(this,"SQLSearch")}constructor(t,r){if(ae.isEmpty(t))throw oe.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 oe.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw oe.error("Error thrown from checkEmptySQL in SQLSearch class method search."),oe.error(s),new Error(Es)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw oe.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),oe.error(s),new Error(Es)}if(Object.keys(this.data).length===0)return oe.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw oe.error("Error thrown from processJoins in SQLSearch class method search."),oe.error(s),new Error(Es)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw oe.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),oe.error(s),new Error(Es)}try{return t=await this._finalSQL(),t}catch(s){throw oe.error("Error thrown from finalSQL in SQLSearch class method search."),oe.error(s),new Error(Es)}}_getColumns(){let t=new Td(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(_L(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=hu.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=dL()[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)){oe.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Td(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 wt.yy.LogicValue({value:s}):r.right instanceof wt.yy.StringValue&&!ae.isEmpty(s)&&ae.autoCasterIsNumberCheck(s.toString())&&(r.right=new wt.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 wt.yy.LogicValue({value:i}):s instanceof wt.yy.StringValue&&ae.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new wt.yy.NumValue({value:i}))});if(t){oe.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Td(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(Z2.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 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(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&&hu.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 wt.promise(r)}catch(r){throw oe.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),oe.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(_L(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(t3)>-1&&this.tables.forEach(n=>{let i={columnid:dL()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=hu.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),!ae.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ae.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await da.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 oe.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),oe.error(_),new Error(Es)}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 E=await da.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(f)))}))}catch(_){throw oe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),oe.error(_),new Error(Es)}else if(!ae.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ae.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await da.getDataByValue(c,f.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,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(p)))}}catch(_){throw oe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),oe.error(_),new Error(Es)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await da.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,ae.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ae.autoCast(d)))}catch(_){throw oe.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),oe.error(_),new Error(Es)}}}_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 wt.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 wt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new wt.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 wt.yy.FuncValue:new wt.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(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",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(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",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 E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await wt.promise(h,t),t=null}catch(f){throw oe.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),oe.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=hu.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,A=p.length;T<A;T++){let g=p[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[g]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Td(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=hu.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 oe.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),oe.error(i),new Error(Es)}}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 da.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw oe.error("Error thrown from getDataByHash function in SQLSearch class method getData."),oe.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();oe.trace(`Final SQL: ${n}`),s=await wt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),oe.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw oe.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),oe.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 oe.error(e3.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),oe.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 da.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 oe.error("There was an error when processing this SQL operation. Check your logs"),oe.error(o),new Error(Es)}}return Object.values(Object.values(this.data)[0].__merged_data)}};EL.exports=gS});var Xt=m((Khe,hL)=>{"use strict";var r3=ob();hL.exports={searchByConditions:n3,searchByHash:i3,searchByValue:o3,search:a3};var RS=Kr(),{transformReq:AS}=G(),s3=fL();async function n3(e){return AS(e),RS.searchByConditions(e)}a(n3,"searchByConditions");async function i3(e){AS(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of RS.searchByHash(e))r&&t.push(r);return t}a(i3,"searchByHash");async function o3(e){AS(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of RS.searchByValue(e))t.push(r);return t}a(o3,"searchByValue");function a3(e,t){try{let r=new r3(e);r.validate(),new s3(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(a3,"search")});var gd=m((Qhe,mL)=>{"use strict";var c3=Kr();mL.exports={writeTransaction:u3};function u3(e,t,r){return c3.writeTransaction(e,t,r)}a(u3,"writeTransaction")});var gL=m((jhe,TL)=>{"use strict";var l3=Xt(),_3=Yr(),pL=C(),d3=Zt(),Jhe=gd(),E3=require("clone"),NS=require("alasql"),f3=Sd(),SL=require("util"),h3=SL.promisify(_3.getTableSchema),m3=SL.promisify(l3.search),p3=R(),OS=G();f3(NS);TL.exports={update:T3};var S3="There was a problem performing this update. Please check the logs and try again.";async function T3({statement:e,hdb_user:t}){let r=await h3(e.table.databaseid,e.table.tableid),s=g3(e.columns);OS.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=E3(n),c=OS.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=NS.parse(u).statements[0],_=await m3(l),d=R3(s,_);return A3(o,d,t)}a(T3,"update");function g3(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=NS.compile(`SELECT ${r.expression.toString()} AS [${p3.FUNC_VAL}] FROM ?`)}),t}catch(t){throw pL.error(t),new Error(S3)}}a(g3,"createUpdateRecord");function R3(e,t){return OS.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(R3,"buildUpdateRecords");async function A3(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await d3.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){pL.error(`Error delete new_attributes from update response: ${i}`)}return n}a(A3,"updateRecords")});var AL=m((tme,RL)=>{var O3=require("alasql"),N3=Xt(),b3=C(),y3=Kr(),yS=require("util"),bS=G(),I3=R(),w3=Yr(),Zhe=gd(),eme=Zt(),C3="record",L3="successfully deleted",D3=yS.callbackify(v3),U3=yS.promisify(N3.search),M3=yS.promisify(w3.getTableSchema);RL.exports={convertDelete:D3};function P3(e){return`${e.deleted_hashes.length} ${C3}${e.deleted_hashes.length===1?"":"s"} ${L3}`}a(P3,"generateReturnMessage");async function v3({statement:e,hdb_user:t}){let r=await M3(e.table.databaseid,e.table.tableid);bS.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=bS.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=O3.parse(o).statements[0],u={operation:I3.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await U3(c);let l=await y3.deleteRecords(u);return bS.isEmptyOrZeroLength(l.message)&&(l.message=P3(l)),delete l.txn_time,l}catch(l){throw b3.error(l),l.hdb_code?l.message:l}}a(v3,"convertDelete")});var IL=m((sme,yL)=>{"use strict";var B3=ri(),{hdb_errors:OL}=z(),{getDatabases:NL}=(de(),re(Ie));yL.exports={checkSchemaExists:bL,checkSchemaTableExists:H3,schema_describe:B3};async function bL(e){if(!NL()[e])return OL.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bL,"checkSchemaExists");async function H3(e,t){let r=await bL(e);if(r)return r;if(!NL()[e][t])return OL.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(H3,"checkSchemaTableExists")});var Su={};We(Su,{addAnalyticsListener:()=>DS,recordAction:()=>_o,recordActionBinary:()=>LS,setAnalyticsEnabled:()=>q3});function q3(e){BL=e}function _o(e,t,r,s,n){if(!BL)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Od.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]=Math.random(),o.total+=e}else if(typeof e=="boolean")e&&o.total++,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 throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},Od.set(i,o)}Ad||F3()}function LS(e,t,r,s,n){_o(!!e,t,r,s,n)}function DS(e){qL.push(e)}function F3(){Ad=performance.now(),setTimeout(async()=>{let e=performance.now()-Ad;Ad=0;let t=[],r={time:Date.now(),period:e,threadId:lo.threadId,metrics:t};for(let[n,i]of Od){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 FL){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;f===_?l[l.length-1].count+=h:(l.push(h>1?{value:f,count:h}:f),_=f),u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:l,count:c}))}else t.push(i);await GL()}let s=process.memoryUsage();t.push({metric:"memory",threadId:lo.threadId,...s});for(let n of qL)n(t);Od=new Map,lo.parentPort?lo.parentPort.postMessage({type:HL,report:r}):kL({report:r})},wS).unref()}async function G3(e,t=6e4){let r=US(),s;for(let E of r.primaryStore.getRange({start:Rd+"z",end:Rd,reverse:!0}))if(E.value?.time){s=E.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o=new Map,c;for(let{key:E,value:f}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!f)continue;if(n){if(E>n+t)break}else n=E;c=E;let{metrics:h,threadId:p}=f;for(let T of h||[]){let{path:A,method:g,type:v,metric:V,count:b,total:I,distribution:U,...J}=T;b||(b=1);let M=V+(A?"-"+A:"");g&&(M+="-"+g);let se=i.get(M);if(se){se.count||(se.count=1);let ye=se.count;for(let Kt in J){let gr=J[Kt];typeof gr=="number"&&(se[Kt]=(se[Kt]*ye+gr*b)/(ye+b))}se.count+=b,I>=0&&(se.total+=I,se.ratio=se.total/se.count)}else se=Object.assign({period:t},T),delete se.distribution,i.set(M,se);if(U){U=U.map(Kt=>typeof Kt=="number"?{value:Kt,count:1}:Kt);let ye=o.get(M);ye?ye.push(...U):o.set(M,U)}}await GL()}for(let[E,f]of o){let h=i.get(E);f.sort((gr,ws)=>gr.value>ws.value?1:-1);let p=h.count-1,T=[],A=0,g=0,v;for(let gr of FL){let ws=p*gr;for(;A<ws;)v=f[g++],A+=v.count,g===1&&A--;let cn=f[g>1?g-2:0];v||(v=f[0]),T.push(v.value-(v.value-cn.value)*(A-ws)/v.count)}let[V,b,I,U,J,M,se,ye,Kt]=T;Object.assign(h,{p1:V,p10:b,p25:I,median:U,p75:J,p90:M,p95:se,p99:ye,p999:Kt})}let u;for(let[E,f]of i)f.id=Rd+Math.round(c)+"-"+E,f.time=c,r.put(f),u=!0;let l=Date.now(),{idle:_,active:d}=performance.eventLoopUtilization();(u||d*10>_)&&r.put({id:Rd+Math.round(l)+"-main-thread-utilization",metric:"main-thread-utilization",idle:_-wL,active:d-CL,time:l}),wL=_,CL=d}async function x3(e,t){let r=US(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function US(){return LL||(LL=ft({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function $3(){xL=!0;let e=(0,pu.get)(CS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await G3(wS,e),await x3(k3,wS)},e/2).unref()}function kL(e,t){let r=e.report;r.threadId=t?.threadId||lo.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(DL+=s.mean*s.count);r.totalBytesProcessed=DL,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(UL.get(t))}),UL.set(t,t.performance.eventLoopUtilization())),r.id=(0,vL.getNextMonotonicTime)(),US().put(r),xL||$3(),V3&&($L=K3(r))}async function K3(e){if(await $L,!li){let r=(0,mu.dirname)((0,PL.getLogFilePath)());try{li=await(0,IS.open)((0,mu.join)(r,"analytics.log"),"r+")}catch{li=await(0,IS.open)((0,mu.join)(r,"analytics.log"),"w+")}}let t=(await li.stat()).size;if(t>Y3){let r=Buffer.alloc(t);await li.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await li.write(r,{position:0}),await li.truncate(r.length),t=r.length}await li.write(JSON.stringify(e)+`
7
+ `,t)}var lo,ML,PL,mu,IS,vL,pu,CS,Od,BL,Ad,wS,HL,qL,FL,Rd,wL,CL,GL,k3,LL,xL,DL,UL,V3,$L,li,Y3,Eo=ge(()=>{lo=require("worker_threads"),ML=D(rt());de();PL=D(C()),mu=require("path"),IS=require("fs/promises"),vL=D(Ht()),pu=D(Y()),CS=D(R());ns();(0,pu.initSync)();Od=new Map,BL=(0,pu.get)(CS.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(q3,"setAnalyticsEnabled");a(_o,"recordAction");Et.recordAnalytics=_o;a(LS,"recordActionBinary");Ad=0,wS=1e3,HL="analytics-report",qL=[];a(DS,"addAnalyticsListener");FL=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(F3,"sendAnalytics");Rd="sum-";a(G3,"aggregation");wL=0,CL=0,GL=a(()=>new Promise(setImmediate),"rest");a(x3,"cleanup");k3=36e5;a(US,"getAnalyticsTable");(0,ML.setChildListenerByType)(HL,kL);a($3,"startScheduledTasks");DL=0,UL=new Map,V3=!1;a(kL,"recordAnalytics");Y3=1e6;a(K3,"logAnalytics")});var ze=m((Sme,cD)=>{"use strict";var Ct=Y();Ct.initSync();var W3=require("fs-extra"),Q3=require("semver"),Au=require("path"),{monotonicFactory:z3}=require("ulidx"),BS=z3(),J3=require("util"),YL=require("child_process"),j3=J3.promisify(YL.exec),X3=YL.spawn,he=Pe(),Ae=R(),Nd=G(),Qr=C(),bd=Tn(),Z3=gd(),Tu=tt(),{Encoder:e4,decode:HS}=require("msgpackr"),KL=new e4,{isEmpty:fo}=Nd,WL=tr(),QL=12e10,t4=48*36e11,r4=5e9,{connect:s4,StorageType:zL,RetentionPolicy:JL,AckPolicy:yd,DeliverPolicy:Id,DiscardPolicy:n4,NatsConnection:fme,JetStreamManager:hme,JetStreamClient:mme,StringCodec:pme,JSONCodec:i4,createInbox:qS,headers:o4,ErrorCode:VL}=require("nats"),{PACKAGE_ROOT:a4}=R(),c4=Yi(),{recordAction:u4}=(Eo(),re(Su)),jL=i4(),l4="clustering",_4=c4.engines[he.NATS_SERVER_NAME],d4=Au.join(a4,"dependencies"),vS=Au.join(d4,`${process.platform}-${process.arch}`,he.NATS_BINARY_NAME),MS,PS,gu,Ea,fa;cD.exports={runCommand:XL,checkNATSServerInstalled:E4,createConnection:FS,getConnection:wd,getJetStreamManager:Ou,getJetStream:ZL,getNATSReferences:sr,getServerList:h4,createLocalStream:GS,listStreams:eD,deleteLocalStream:m4,getServerConfig:Nu,listRemoteStreams:p4,viewStream:S4,viewStreamIterator:T4,publishToStream:g4,createWorkQueueStream:R4,addSourceToWorkStream:rD,request:O4,removeSourceFromWorkStream:nD,reloadNATS:xS,reloadNATSHub:N4,reloadNATSLeaf:b4,extractServerName:sD,requestErrorHandler:y4,updateWorkStream:I4,createLocalTableStream:oD,createTableStreams:w4,purgeTableStream:aD,purgeSchemaTableStreams:C4,getStreamInfo:L4,updateLocalStreams:U4,closeConnection:f4,getJsmServerName:bu,addNatsMsgHeader:tD,updateIngestStreamConsumer:A4};async function XL(e,t=void 0){let{stdout:r,stderr:s}=await j3(e,{cwd:t});if(s)throw new Error(s.replace(`
8
8
  `,""));return r.replace(`
9
- `,"")}a(JL,"runCommand");async function d4(){try{await K3.access(vS)}catch{return!1}let e=await JL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return W3.eq(t,l4)}a(d4,"checkNATSServerInstalled");async function FS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await YL.getClusterUser();if(uo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Kr.trace("create nats connection called");let i=await r4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ct.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Kr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(FS,"createConnection");async function E4(){qs&&(await qs.drain(),qs=void 0,_a=void 0,da=void 0,gu=void 0)}a(E4,"closeConnection");var qs,gu;async function wd(){return gu||(gu=FS(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),qs=await gu),qs||gu}a(wd,"getConnection");async function Au(){if(_a)return _a;uo(qs)&&await wd();let{domain:e}=Ou(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _a=await qs.jetstreamManager({domain:e}),_a}a(Au,"getJetStreamManager");async function jL(){if(da)return da;uo(qs)&&await wd();let{domain:e}=Ou(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(uo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return da=qs.jetstream({domain:e}),da}a(jL,"getJetStream");async function rr(){let e=qs||await wd(),t=_a||await Au(),r=da||await jL();return{connection:e,jsm:t,js:r}}a(rr,"getNATSReferences");async function f4(e){let t=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await YL.getClusterUser(),n=await FS(t,r,s),i=qS(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=zL.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 Nd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(f4,"getServerList");async function GS(e,t){let{jsm:r}=await rr(),s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:WL.File,retention:QL.Limits,subjects:t,discard:s4.Old,duplicate_window:KL,max_msgs:n,max_bytes:i,max_age:s})}a(GS,"createLocalStream");async function XL(){let{jsm:e}=await rr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(XL,"listStreams");async function h4(e){let{jsm:t}=await rr();await t.streams.delete(e)}a(h4,"deleteLocalStream");async function m4(e){let{connection:t}=await rr(),r=[],s=qS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(zL.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(m4,"listRemoteStreams");async function p4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=BS(),o={durable_name:i,ack_policy:yd.Explicit};t&&(o.deliver_policy=Id.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=HS(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(p4,"viewStream");async function*S4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await rr(),i=BS(),o={durable_name:i,ack_policy:yd.Explicit};t&&(o.deliver_policy=Id.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 _=HS(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(fe.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(fe.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(S4,"viewStreamIterator");async function T4(e,t,r,s){Kr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=ZL(s,r);let{js:n}=await rr(),i=await Nu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:VL.encode(s);try{Kr.trace(`publishToStream publishing to subject: ${o}`),c4(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 sD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Kr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await GS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(T4,"publishToStream");function ZL(e,t){t===void 0&&(t=i4());let r=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(fe.MSG_HEADERS.NATS_MSG_ID)){let s=Nd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${BS()}`;t.append(fe.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(fe.MSG_HEADERS.ORIGIN)||t.append(fe.MSG_HEADERS.ORIGIN,r),t}a(ZL,"addNatsMsgHeader");function Ou(e){e=e.toLowerCase();let t=Ru.join(Ct.get(Re.CONFIG_PARAMS.ROOTPATH),u4);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return uo(PS)&&(PS={port:Su.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Su.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.HUB,config_file:fe.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ru.join(t,fe.PID_FILES.HUB),hdb_nats_path:t}),PS;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return uo(MS)&&(MS={port:Su.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Su.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,config_file:fe.NATS_CONFIG_FILES.LEAF_SERVER,domain:Su.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+fe.SERVER_SUFFIX.LEAF,pid_file_path:Ru.join(t,fe.PID_FILES.LEAF),hdb_nats_path:t}),MS;Kr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ou,"getServerConfig");async function g4(e){let{jsm:t}=await rr(),r=await Nu();try{await t.streams.add({name:e.stream_name,storage:WL.File,retention:QL.Limits,duplicate_window:KL,max_age:e4,max_bytes:t4,subjects:[`${fe.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:yd.Explicit,durable_name:e.durable_name,deliver_policy:Id.All,max_ack_pending:1e4});else throw s}}a(g4,"createWorkQueueStream");async function R4(){let{jsm:e}=await rr();(await e.consumers.info(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Kr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,fe.WORK_QUEUE_CONSUMER_NAMES.durable_name),Kr.info("Adding pull consumer to ingest stream"),await e.consumers.add(fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:yd.Explicit,durable_name:fe.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Id.All,max_ack_pending:1e4}))}a(R4,"updateIngestStreamConsumer");async function eD(e,t,r){let{jsm:s}=await rr(),n=await s.streams.info(t),i=tD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=bd.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${fe.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(eD,"addSourceToWorkStream");function tD(e){return e.split(".")[1]}a(tD,"extractServerName");async function rD(e,t,r){let{schema:s,table:n}=r,i=bd.createNatsTableStreamName(s,n),{jsm:o}=await rr(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(rD,"removeSourceFromWorkStream");async function A4(e,t,r=2e4,s=qS()){if(!Nd.isObject(t))throw new Error("data param must be an object");let n=VL.encode(t),{connection:i}=await rr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return HS(c.data)}a(A4,"request");function xS(e){return new Promise(async(t,r)=>{let s=j3(vS,["--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(xS,"reloadNATS");async function O4(){let{pid_file_path:e}=Ou(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await xS(e)}a(O4,"reloadNATSHub");async function N4(){let{pid_file_path:e}=Ou(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await xS(e)}a(N4,"reloadNATSLeaf");function b4(e,t,r){let s;switch(e.code){case kL.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case kL.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(b4,"requestErrorHandler");async function y4(e,t){let r=t+fe.SERVER_SUFFIX.LEAF;await sD(async()=>{e.subscribe===!0?await eD(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await rD(r,fe.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(y4,"updateWorkStream");function sD(e){return X3.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(sD,"exclusiveLock");async function nD(e,t){let r=bd.createNatsTableStreamName(e,t),s=await Nu(),n=L4(e,t,s);await GS(r,[n])}a(nD,"createLocalTableStream");async function I4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await nD(s,n)}}a(I4,"createTableStreams");async function iD(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=bd.createNatsTableStreamName(e,t),{jsm:s}=await rr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Kr.warn(r);else throw r}}a(iD,"purgeTableStream");async function w4(e,t){if(Ct.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await iD(e,t[r])}a(w4,"purgeSchemaTableStreams");async function C4(e){return(await Au()).streams.info(e)}a(C4,"getStreamInfo");function L4(e,t,r){return`${fe.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(L4,"createSubjectName");async function Nu(){if(Tu)return Tu;if(Tu=(await Au())?.nc?.info?.server_name,Tu===void 0)throw new Error("Unable to get jetstream manager server name");return Tu}a(Nu,"getJsmServerName");async function D4(){let e=await Au(),t=await Nu(),r=await XL();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=U4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Kr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${fe.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Kr.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(".");Kr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(D4,"updateLocalStreams");function U4(e){let{config:t}=e,r=!1;if(t.name===fe.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===fe.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ct.get(Re.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(U4,"updateStreamLimits")});var Ud=m((gme,lD)=>{"use strict";var Ea=P_(),fa=IL(),M4=C(),P4=require("uuid").v4,Tme=require("clone"),Ld=gn(),ha=R(),v4=require("util"),ai=Vr(),{handleHDBError:sr,hdb_errors:B4}=z(),{HDB_ERROR_MSGS:Cd,HTTP_STATUS_CODES:nr}=B4,{SchemaEventMsg:Dd}=os(),aD=Qe(),{getDatabases:H4}=(_e(),re(be)),{transformReq:ma}=F();lD.exports={createSchema:q4,createSchemaStructure:cD,createTable:F4,createTableStructure:uD,createAttribute:V4,dropSchema:G4,dropTable:x4,dropAttribute:k4,getBackup:Y4};async function q4(e){let t=await cD(e);return Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema)),t}a(q4,"createSchema");async function cD(e){let t=Ea.schema_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(ma(e),!await fa.checkSchemaExists(e.schema))throw sr(new Error,Cd.SCHEMA_EXISTS_ERR(e.schema),nr.BAD_REQUEST,ha.LOG_LEVELS.ERROR,Cd.SCHEMA_EXISTS_ERR(e.schema),!0);return await ai.createSchema(e),`database '${e.schema}' successfully created`}a(cD,"createSchemaStructure");async function F4(e){return ma(e),await uD(e)}a(F4,"createTable");async function uD(e){let t=Ea.create_table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);if(Ea.validateTableResidence(e.residence),!await fa.checkSchemaTableExists(e.schema,e.table))throw sr(new Error,Cd.TABLE_EXISTS_ERR(e.schema,e.table),nr.BAD_REQUEST,ha.LOG_LEVELS.ERROR,Cd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:P4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await ai.createTable(s,e);else throw sr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",nr.BAD_REQUEST);else await ai.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uD,"createTableStructure");async function G4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Ea.schema_object(e),s=t??r;if(s)throw sr(s,s.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let n=await fa.checkSchemaExists(e.schema);if(n)throw sr(new Error,n,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,n,!0);let i=await fa.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await ai.dropSchema(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema)),await aD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(G4,"dropSchema");async function x4(e){let t=Ea.table_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let r=await fa.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,r,!0);return await ai.dropTable(e),await aD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(x4,"dropTable");async function k4(e){let t=Ea.attribute_object(e);if(t)throw sr(t,t.message,nr.BAD_REQUEST,void 0,void 0,!0);ma(e);let r=await fa.checkSchemaTableExists(e.schema,e.table);if(r)throw sr(new Error,r,nr.NOT_FOUND,ha.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw sr(new Error,"You cannot drop a hash attribute",nr.BAD_REQUEST,void 0,void 0,!0);if(ha.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw sr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,nr.BAD_REQUEST,void 0,void 0,!0);try{return await ai.dropAttribute(e),$4(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw M4.error(`Got an error deleting attribute ${v4.inspect(e)}.`),s}}a(k4,"dropAttribute");function $4(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($4,"dropAttributeFromGlobal");async function V4(e){ma(e);let t=H4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw sr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,nr.BAD_REQUEST,void 0,void 0,!0);return await ai.createAttribute(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(V4,"createAttribute");function Y4(e){return ai.getBackup(e)}a(Y4,"getBackup")});var dD=m((Ame,_D)=>{"use strict";var{OPERATIONS_ENUM:K4}=R(),kS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=K4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_D.exports=kS});var $S=m((bme,pD)=>{"use strict";var W4=Vr(),Nme=dD(),Md=F(),Pd=R(),Q4=Y(),{handleHDBError:ED,hdb_errors:z4}=z(),{HDB_ERROR_MSGS:fD,HTTP_STATUS_CODES:hD}=z4,J4=Object.values(Pd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mD="To use this operation audit log must be enabled in harperdb-config.yaml";pD.exports=j4;async function j4(e){if(Md.isEmpty(e.schema))throw new Error(fD.SCHEMA_REQUIRED_ERR);if(Md.isEmpty(e.table))throw new Error(fD.TABLE_REQUIRED_ERR);if(!Q4.get(Pd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ED(new Error,mD,hD.BAD_REQUEST,Pd.LOG_LEVELS.ERROR,mD,!0);let t=Md.checkSchemaTableExist(e.schema,e.table);if(t)throw ED(new Error,t,hD.NOT_FOUND,Pd.LOG_LEVELS.ERROR,t,!0);if(!Md.isEmpty(e.search_type)&&J4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await W4.readAuditLog(e)}a(j4,"readAuditLog")});var TD=m((Ime,SD)=>{"use strict";var{OPERATIONS_ENUM:X4}=R(),VS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=X4.GET_BACKUP,this.schema=t,this.table=r}};SD.exports=VS});var AD=m((Dme,RD)=>{"use strict";var Z4=Vr(),Cme=TD(),YS=F(),eX=R(),Lme=Y(),{handleHDBError:tX,hdb_errors:rX}=z(),{HDB_ERROR_MSGS:gD,HTTP_STATUS_CODES:sX}=rX;RD.exports=nX;async function nX(e){if(YS.isEmpty(e.schema))throw new Error(gD.SCHEMA_REQUIRED_ERR);if(YS.isEmpty(e.table))throw new Error(gD.TABLE_REQUIRED_ERR);let t=YS.checkSchemaTableExist(e.schema,e.table);if(t)throw tX(new Error,t,sX.NOT_FOUND,eX.LOG_LEVELS.ERROR,t,!0);return await Z4.getBackup(read_audit_log_object)}a(nX,"getBackup")});var wD=m((Mme,ID)=>{var ci=require("validate.js"),ND=He(),pa=R(),{handleHDBError:iX,hdb_errors:oX}=z(),{HDB_ERROR_MSGS:ze,HTTP_STATUS_CODES:aX}=oX,KS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),cX={STRUCTURE_USER:"structure_user"},OD=Object.values(pa.ROLE_TYPES_ENUM),uX="attribute_permissions",lX="attribute_name",{PERMS_CRUD_ENUM:Sa}=pa,_X=[uX,...Object.values(Sa)],bD=[Sa.READ,Sa.INSERT,Sa.UPDATE],dX=[lX,...bD];function EX(e){let t=KS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yD(e,t)}a(EX,"addRoleValidation");function fX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yD(e,t)}a(fX,"alterRoleValidation");function hX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ND.validateObject(e,t)}a(hX,"dropRoleValidation");var mX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)mX.includes(s[o])||n.push(s[o]);n.length>0&&st(ze.INVALID_ROLE_JSON_KEYS(n),r);let i=ND.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{st(o,r)}),e.permission){let o=pX(e);o&&st(o,r),OD.forEach(c=>{e.permission[c]&&!ci.isBoolean(e.permission[c])&&st(ze.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OD.indexOf(o)<0){if(o===cX.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]||st(ze.SCHEMA_NOT_FOUND(d),r)}continue}st(ze.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){st(ze.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]){st(ze.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{_X.includes(_)||st(ze.INVALID_PERM_KEY(_),r,o,u)}),Object.values(Sa).forEach(_=>{ci.isDefined(l[_])?ci.isBoolean(l[_])||st(ze.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):st(ze.TABLE_PERM_MISSING(_),r,o,u)}),ci.isDefined(l.attribute_permissions)){if(!ci.isArray(l.attribute_permissions)){st(ze.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{st(ze.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!dX.includes(p)&&p!==Sa.DELETE&&st(ze.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!ci.isDefined(f.attribute_name)){st(ze.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){st(ze.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bD.forEach(p=>{ci.isDefined(f[p])?ci.isBoolean(f[p])||st(ze.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):st(ze.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;st(ze.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return SX(r)}a(yD,"customValidate");ID.exports={addRoleValidation:EX,alterRoleValidation:fX,dropRoleValidation:hX};function pX(e){let{operation:t,permission:r}=e;if(t===pa.OPERATIONS_ENUM.ADD_ROLE||t===pa.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 ze.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?pa.ROLE_TYPES_ENUM.SUPER_USER:pa.ROLE_TYPES_ENUM.CLUSTER_USER;return ze.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(pX,"validateNoSUPerms");function SX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:ze.ROLE_PERMS_ERROR,...e};return iX(new Error,s,aX.BAD_REQUEST)}else return null}a(SX,"generateRolePermResponse");function st(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(st,"addPermError")});var Hd=m((vme,UD)=>{"use strict";var CD=Xt(),LD=jt(),TX=Xi(),QS=wD(),zS=gn(),gX=require("uuid").v4,RX=require("util"),vd=R(),AX=F(),JS=LD.searchByValue,OX=LD.searchByHash,NX=RX.promisify(TX.delete),bX=as(),yX=ca(),{hdb_errors:IX,handleHDBError:Ta}=z(),{HDB_ERROR_MSGS:DD,HTTP_STATUS_CODES:Bd}=IX,{UserEventMsg:jS}=os();UD.exports={addRole:wX,alterRole:CX,dropRole:LX,listRoles:DX};function WS(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(WS,"scrubRoleDetails");async function wX(e){let t=QS.addRoleValidation(e);if(t)throw t;e=WS(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 JS(r)||[])}catch(i){throw Ta(i)}if(s&&s.length>0)throw Ta(new Error,DD.ROLE_ALREADY_EXISTS(e.role),Bd.CONFLICT,void 0,void 0,!0);e.id||(e.id=gX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CD.insert(n),zS.signalUserChange(new jS(process.pid)),e=WS(e),e}a(wX,"addRole");async function CX(e){let t=QS.alterRoleValidation(e);if(t)throw t;e=WS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CD.update(r)}catch(n){throw Ta(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ta(new Error,"Invalid role id",Bd.BAD_REQUEST,void 0,void 0,!0);return await zS.signalUserChange(new jS(process.pid)),e}a(CX,"alterRole");async function LX(e){let t=QS.dropRoleValidation(e);if(t)throw Ta(new Error,t,Bd.BAD_REQUEST,void 0,void 0,!0);let r=new yX(vd.SYSTEM_SCHEMA_NAME,vd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await OX(r));if(s.length===0)throw Ta(new Error,DD.ROLE_NOT_FOUND,Bd.NOT_FOUND,void 0,void 0,!0);let n=new bX(vd.SYSTEM_SCHEMA_NAME,vd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await JS(n)),o=!1;if(AX.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 NX(c),zS.signalUserChange(new jS(process.pid)),`${s[0].role} successfully deleted`}a(LX,"dropRole");async function DX(){return JS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(DX,"listRoles")});var BD=m((Hme,vD)=>{"use strict";var UX=Y(),ui=require("joi"),MX=He(),MD=require("moment"),PX=require("fs-extra"),XS=require("path"),vX=require("lodash"),bu=R(),{LOG_LEVELS:lo}=R(),BX="YYYY-MM-DD hh:mm:ss",HX=XS.resolve(__dirname,"../logs");vD.exports=function(e){return MX.validateBySchema(e,qX)};var qX=ui.object({from:ui.custom(PD),until:ui.custom(PD),level:ui.valid(lo.NOTIFY,lo.FATAL,lo.ERROR,lo.WARN,lo.INFO,lo.DEBUG,lo.TRACE),order:ui.valid("asc","desc"),limit:ui.number().min(1),start:ui.number().min(0),log_name:ui.custom(FX)});function PD(e,t){if(MD(e,MD.ISO_8601).format(BX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PD,"validateDatetime");function FX(e,t){if(vX.invert(bu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=UX.get(bu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?bu.LOG_NAMES.HDB:e,i=n===bu.LOG_NAMES.INSTALL?XS.join(HX,bu.LOG_NAMES.INSTALL):XS.join(s,n);return PX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(FX,"validateReadLogPath")});var eT=m((Fme,qD)=>{"use strict";var qd=R(),GX=C(),xX=Y(),kX=BD(),ZS=require("path"),HD=require("fs-extra"),{once:$X}=require("events"),{handleHDBError:VX,hdb_errors:YX}=z(),{PACKAGE_ROOT:KX}=R(),WX=ZS.join(KX,"logs"),QX=1e3,zX=200;qD.exports=JX;async function JX(e){let t=kX(e);if(t)throw VX(t,t.message,YX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=xX.get(qd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?qd.LOG_NAMES.HDB:e.log_name,n=s===qd.LOG_NAMES.INSTALL?ZS.join(WX,qd.LOG_NAMES.INSTALL):ZS.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?QX:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(HD.statSync(n).size-(h+5)*zX,0));let T=HD.createReadStream(n,{start:p});T.on("error",N=>{GX.error(N)});let A=0,g=[],x="",V;T.on("data",N=>{let M=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;N=x+N;let J=0,B;for(;(B=M.exec(N))&&!T.destroyed;){V&&(V.message=N.slice(J,B.index),I(V));let[Ie,_t,e_]=B,Vo=e_.split("] ["),fc=Vo[0],qi=Vo[1];Vo.splice(0,2),V={timestamp:_t,thread:fc,level:qi,tags:Vo,message:""},J=B.index+Ie.length}x=N.slice(J)}),T.on("end",N=>{T.destroyed||V&&(V.message=x.trim(),I(V))}),T.resume();function I(N){let M,J,B;switch(!0){case(i&&c&&l):M=new Date(N.timestamp),J=new Date(u),B=new Date(_),N.level===o&&M>=J&&M<=B&&A<f?A++:N.level===o&&M>=J&&M<=B&&(li(N,E,g),A++,A===h&&T.destroy());break;case(i&&c):M=new Date(N.timestamp),J=new Date(u),N.level===o&&M>=J&&A<f?A++:N.level===o&&M>=J&&(li(N,E,g),A++,A===h&&T.destroy());break;case(i&&l):M=new Date(N.timestamp),B=new Date(_),N.level===o&&M<=B&&A<f?A++:N.level===o&&M<=B&&(li(N,E,g),A++,A===h&&T.destroy());break;case(c&&l):M=new Date(N.timestamp),J=new Date(u),B=new Date(_),M>=J&&M<=B&&A<f?A++:M>=J&&M<=B&&(li(N,E,g),A++,A===h&&T.destroy());break;case i:N.level===o&&A<f?A++:N.level===o&&(li(N,E,g),A++,A===h&&T.destroy());break;case c:M=new Date(N.timestamp),J=new Date(u),M>=J&&A<f?A++:M>=J&&A>=f&&(li(N,E,g),A++,A===h&&T.destroy());break;case l:M=new Date(N.timestamp),B=new Date(_),M<=B&&A<f?A++:M<=B&&A>=f&&(li(N,E,g),A++,A===h&&T.destroy());break;default:A<f?A++:(li(N,E,g),A++,A===h&&T.destroy())}}return a(I,"onLogMessage"),await $X(T,"close"),g}a(JX,"readLog");function li(e,t,r){t==="desc"?jX(e,r):t==="asc"?XX(e,r):r.push(e)}a(li,"pushLineToResult");function jX(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(jX,"insertDescending");function XX(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(XX,"insertAscending")});var Gd=m((Vme,kD)=>{"use strict";var tT=require("joi"),{string:Fd,boolean:FD,date:ZX}=tT.types(),eZ=He(),{validateSchemaExists:xme,validateTableExists:kme,validateSchemaName:$me}=Ds(),tZ=R(),rZ=Me(),GD=Y();GD.initSync();var sZ=Fd.invalid(GD.get(tZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(rZ.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(),xD={operation:Fd.valid("add_node","update_node"),node_name:sZ,subscriptions:tT.array().items({table:Fd.optional(),schema:Fd.required(),subscribe:FD.required(),publish:FD.required().custom(iZ),start_time:ZX.iso()}).min(1).required()};function nZ(e){return eZ.validateBySchema(e,tT.object(xD))}a(nZ,"addUpdateNodeValidator");function iZ(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(iZ,"checkForFalsy");kD.exports={addUpdateNodeValidator:nZ,validation_schema:xD}});var VD=m((Kme,$D)=>{var oZ=He(),aZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};$D.exports=function(e){return oZ.validateObject(e,aZ)}});var xd=m((Wme,YD)=>{"use strict";var cZ=R().OPERATIONS_ENUM,rT=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=cZ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YD.exports=rT});var WD=m((zme,KD)=>{"use strict";var uZ={OPERATION:"operation",REFRESH:"refresh"},sT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},nT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KD.exports={JWTTokens:sT,TOKEN_TYPE_ENUM:uZ,JWTRSAKeys:nT}});var wu=m((jme,jD)=>{"use strict";var Iu=require("jsonwebtoken"),iT=require("fs-extra"),oT=F(),Wr=R(),{handleHDBError:ir,hdb_errors:lZ}=z(),{HTTP_STATUS_CODES:or,AUTHENTICATION_ERROR_MSGS:ar}=lZ,yu=C(),QD=W_(),uT=er(),_Z=Xt().update,dZ=xd(),EZ=gn(),{UserEventMsg:fZ}=os(),_i=Y();_i.initSync();var aT=require("path"),{JWTTokens:hZ,JWTRSAKeys:mZ,TOKEN_TYPE_ENUM:kd}=WD(),pZ=_i.get(Wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?_i.get(Wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",SZ=_i.get(Wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?_i.get(Wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",$d="RS256",cT;jD.exports={createTokens:TZ,validateOperationToken:RZ,refreshOperationToken:gZ,validateRefreshToken:JD};async function TZ(e){if(oT.isEmpty(e)||typeof e!="object")throw ir(new Error,ar.INVALID_AUTH_OBJECT,or.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.username))throw ir(new Error,ar.USERNAME_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.password))throw ir(new Error,ar.PASSWORD_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await uT.findAndValidateUser(e.username,e.password),!t)throw ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw yu.error(E),ir(new Error,ar.INVALID_CREDENTIALS,or.UNAUTHORIZED,void 0,void 0,!0)}let r=await Vd(),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 zD(i,r.private_key,r.passphrase),c=await Iu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:SZ,algorithm:$d,subject:kd.REFRESH}),u=QD.hash(c),l=new dZ(Wr.SYSTEM_SCHEMA_NAME,Wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await _Z(l)}catch(E){yu.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw ir(new Error,ar.REFRESH_TOKEN_SAVE_FAILED,or.INTERNAL_SERVER_ERROR);return EZ.signalUserChange(new fZ(process.pid)),new hZ(o,c)}a(TZ,"createTokens");async function zD(e,t,r){return await Iu.sign(e,{key:t,passphrase:r},{expiresIn:pZ,algorithm:$d,subject:kd.OPERATION})}a(zD,"signOperationToken");async function Vd(){if(cT===void 0)try{let e=aT.join(_i.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=aT.join(_i.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=aT.join(_i.getHdbBasePath(),Wr.LICENSE_KEY_DIR_NAME,Wr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await iT.readFile(e)).toString(),n=(await iT.readFile(t)).toString(),i=(await iT.readFile(r)).toString();cT=new mZ(i,n,s)}catch(e){throw yu.error(e),ir(new Error,ar.NO_ENCRYPTION_KEYS,or.INTERNAL_SERVER_ERROR)}return cT}a(Vd,"getJWTRSAKeys");async function gZ(e){if(!e)throw ir(new Error,ar.INVALID_BODY,or.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw ir(new Error,ar.REFRESH_TOKEN_REQUIRED,or.BAD_REQUEST,void 0,void 0,!0);await JD(e.refresh_token);let t=await Vd(),r=await Iu.decode(e.refresh_token);return{operation_token:await zD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(gZ,"refreshOperationToken");async function RZ(e){try{let t=await Vd(),r=await Iu.verify(e,t.public_key,{algorithms:$d,subject:kd.OPERATION});return await uT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw yu.warn(t),t.name&&t.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}}a(RZ,"validateOperationToken");async function JD(e){let t;try{let r=await Vd(),s=await Iu.verify(e,r.public_key,{algorithms:$d,subject:kd.REFRESH});t=await uT.findAndValidateUser(s.username,void 0,!1)}catch(r){throw yu.warn(r),r.name&&r.name==="TokenExpiredError"?ir(new Error,ar.TOKEN_EXPIRED,or.FORBIDDEN):ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED)}if(!QD.validate(t.refresh_token,e))throw ir(new Error,ar.INVALID_TOKEN,or.UNAUTHORIZED);return t}a(JD,"validateRefreshToken")});var lT=m((epe,eU)=>{"use strict";var AZ=VD(),ga=require("passport"),OZ=require("passport-local").Strategy,NZ=require("passport-http").BasicStrategy,bZ=require("util"),yZ=er(),ZD=bZ.callbackify(yZ.findAndValidateUser),Zme=gr(),IZ=R(),XD=wu();ga.use(new OZ(function(e,t,r){ZD(e,t,r)}));ga.use(new NZ(function(e,t,r){ZD(e,t,r)}));ga.serializeUser(function(e,t){t(null,e)});ga.deserializeUser(function(e,t){t(null,e)});function wZ(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":ga.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===IZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?XD.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):XD.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:ga.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(wZ,"authorize");function CZ(e,t){let r=AZ(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(CZ,"checkPermissions");eU.exports={authorize:wZ,checkPermissions:CZ}});var Ra=m((rpe,tU)=>{"use strict";var _T=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},dT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tU.exports={Node:_T,NodeSubscription:dT}});var sU=m((npe,rU)=>{"use strict";var LZ=R().OPERATIONS_ENUM,ET=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=LZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rU.exports=ET});var Cu=m((ope,nU)=>{"use strict";var fT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},hT=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)}};nU.exports={RemotePayloadObject:fT,RemotePayloadSubscription:hT}});var oU=m((cpe,iU)=>{"use strict";var mT=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}};iU.exports=mT});var uU=m((Epe,cU)=>{"use strict";var DZ=oU(),lpe=Ge(),aU=we(),UZ=C(),{getSchemaPath:_pe,getTransactionAuditStorePath:dpe}=De(),{getDatabases:MZ}=(_e(),re(be));cU.exports=PZ;async function PZ(e){let t=new DZ;try{let r=MZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aU.environmentDataSize(schema_path,e.name),o=await aU.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){UZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(PZ,"lmdbGetTableSize")});var _U=m((hpe,lU)=>{"use strict";var pT=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}};lU.exports=pT});var On=m((Tpe,hU)=>{"use strict";var vZ=require("fs-extra"),BZ=require("path"),xt=require("systeminformation"),di=C(),HZ=Qe(),ST=Me(),Kd=R(),qZ=uU(),fU=Xn(),{getThreadInfo:dU}=tt(),wT=Y();wT.initSync();var FZ=_U(),{openEnvironment:ppe}=we(),{getSchemaPath:Spe}=De(),{database:GZ}=(_e(),re(be)),Yd;hU.exports={getHDBProcessInfo:AT,getNetworkInfo:NT,getDiskInfo:OT,getMemoryInfo:RT,getCPUInfo:gT,getTimeInfo:TT,getSystemInformation:bT,systemInformation:xZ,getTableSize:yT,getMetrics:IT};function TT(){return xt.time()}a(TT,"getTimeInfo");async function gT(){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();_.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:T,cpus:A,...g}=await xt.currentLoad();return g.cpus=[],A.forEach(x=>{let{raw_load:V,raw_load_idle:I,raw_load_irq:N,raw_load_nice:M,raw_load_system:J,raw_load_user:B,...Ie}=x;g.cpus.push(Ie)}),_.current_load=g,_}catch(e){return di.error(`error in getCPUInfo: ${e}`),{}}}a(gT,"getCPUInfo");async function RT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return di.error(`error in getMemoryInfo: ${e}`),{}}}a(RT,"getMemoryInfo");async function AT(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await vZ.readFile(BZ.join(wT.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Kd.NODE_ERROR_CODES.ENOENT)di.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 di.error(`error in getHDBProcessInfo: ${t}`),e}}a(AT,"getHDBProcessInfo");async function OT(){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,...l}=await xt.fsStats();return e.read_write=l,e.size=await xt.fsSize(),e}catch(t){return di.error(`error in getDiskInfo: ${t}`),e}}a(OT,"getDiskInfo");async function NT(){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:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return di.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function bT(){if(Yd!==void 0)return Yd;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,Yd=e,Yd}catch(t){return di.error(`error in getSystemInformation: ${t}`),e}}a(bT,"getSystemInformation");async function yT(){let e=[],t=await fU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await qZ(s));return e}a(yT,"getTableSize");async function IT(){let e=await fU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=GZ({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){di.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(IT,"getMetrics");async function EU(){if(wT.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await HZ.getNATSReferences(),r=await t.streams.info(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name,ST.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(EU,"getNatsStreamInfo");async function xZ(e){let t=new FZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await bT(),t.time=TT(),t.cpu=await gT(),t.memory=await RT(),t.disk=await OT(),t.network=await NT(),t.harperdb_processes=await AT(),t.table_size=await yT(),t.metrics=await IT(),t.threads=await dU(),t.replication=await EU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await bT();break;case"time":t.time=TT();break;case"cpu":t.cpu=await gT();break;case"memory":t.memory=await RT();break;case"disk":t.disk=await OT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await AT();break;case"table_size":t.table_size=await yT();break;case"database_metrics":case"metrics":t.metrics=await IT();break;case"threads":t.threads=await dU();break;case"replication":t.replication=await EU();break;default:break}return t}a(xZ,"systemInformation")});var Nn=m((Ope,TU)=>{"use strict";var kZ=Xt(),CT=F(),$Z=require("util"),_o=R(),mU=Y();mU.initSync();var VZ=lT(),pU=jt(),{Node:Rpe,NodeSubscription:Ape}=Ra(),YZ=ca(),KZ=sU(),{RemotePayloadObject:WZ,RemotePayloadSubscription:QZ}=Cu(),{handleHDBError:zZ,hdb_errors:JZ}=z(),{HTTP_STATUS_CODES:jZ,HDB_ERROR_MSGS:XZ}=JZ,ZZ=as(),e5=On(),t5=ki(),{getDatabases:r5}=(_e(),re(be)),s5=$Z.promisify(VZ.authorize),n5=pU.searchByHash,i5=pU.searchByValue;TU.exports={authHeaderToUser:o5,isEmpty:a5,getNodeRecord:c5,upsertNodeRecord:u5,buildNodePayloads:l5,checkClusteringEnabled:_5,getAllNodeRecords:d5,getSystemInfo:E5,reverseSubscription:SU};async function o5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await s5(t,null),e}a(o5,"authHeaderToUser");function a5(e){return e==null}a(a5,"isEmpty");async function c5(e){let t=new YZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n5(t)}a(c5,"getNodeRecord");async function u5(e){let t=new KZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return kZ.upsert(t)}a(u5,"upsertNodeRecord");function SU(e){if(CT.isEmpty(e.subscribe)||CT.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(SU,"reverseSubscription");function l5(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,_=CT.getTableHashAttribute(u,l),{subscribe:d,publish:E}=SU(c),f=r5()[u]?.[l],h=new QZ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new WZ(r,t,n,s)}a(l5,"buildNodePayloads");function _5(){if(!mU.get(_o.CONFIG_PARAMS.CLUSTERING_ENABLED))throw zZ(new Error,XZ.CLUSTERING_NOT_ENABLED,jZ.BAD_REQUEST,void 0,void 0,!0)}a(_5,"checkClusteringEnabled");async function d5(){let e=new ZZ(_o.SYSTEM_SCHEMA_NAME,_o.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await i5(e))}a(d5,"getAllNodeRecords");async function E5(){let e=await e5.getSystemInformation();return{hdb_version:t5.version(),node_version:e.node_version,platform:e.platform}}a(E5,"getSystemInfo")});var LT=m((bpe,IU)=>{"use strict";var Wd=Qe(),gU=F(),RU=Me(),AU=R(),Qd=C(),OU=Ud(),f5=au(),{RemotePayloadObject:h5}=Cu(),{handleHDBError:NU,hdb_errors:m5}=z(),{HTTP_STATUS_CODES:bU}=m5,{NodeSubscription:yU}=Ra();IU.exports=p5;async function p5(e,t){let r;try{r=await Wd.request(`${t}.${RU.REQUEST_SUFFIX}`,new h5(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Qd.trace("Response from remote describe all request:",r)}catch(o){Qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Wd.requestErrorHandler(o,"add_node",t);throw NU(new Error,c,bU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===RU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw NU(new Error,o,bU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===AU.SYSTEM_SCHEMA_NAME){await Wd.createLocalTableStream(c,u);let h=new yU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gU.doesSchemaExist(c),_=s[c]!==void 0,d=u?gU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(Qd.trace(`addNode creating schema: ${c}`),await OU.createSchema({operation:"create_schema",schema:c})),!d&&E){Qd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new f5(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await OU.createTable(h)}await Wd.createLocalTableStream(c,u);let f=new yU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(p5,"reviewSubscriptions")});var Uu=m((Ipe,LU)=>{"use strict";var{handleHDBError:zd,hdb_errors:S5}=z(),{HTTP_STATUS_CODES:Jd}=S5,{addUpdateNodeValidator:T5}=Gd(),Lu=C(),CU=R(),wU=Me(),g5=F(),DT=Qe(),Du=Nn(),R5=Y(),A5=LT(),{Node:O5,NodeSubscription:N5}=Ra(),{broadcast:b5}=tt(),y5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",I5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w5=R5.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);LU.exports=C5;async function C5(e,t=!1){Lu.trace("addNode called with:",e),Du.checkClusteringEnabled();let r=T5(e);if(r)throw zd(r,r.message,Jd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Du.getNodeRecord(s);if(!g5.isEmptyOrZeroLength(d))throw zd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Jd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await A5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=y5,o;let c=Du.buildNodePayloads(n,w5,CU.OPERATIONS_ENUM.ADD_NODE,await Du.getSystemInfo());Lu.trace("addNode sending remote payload:",c);let u;try{u=await DT.request(`${s}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Lu.error(`addNode received error from request: ${d}`);let E=DT.requestErrorHandler(d,"add_node",s);throw zd(new Error,E,Jd.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw zd(new Error,d,Jd.INTERNAL_SERVER_ERROR,"error",d)}Lu.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Lu.trace("Add node updating work stream for node:",s,"subscriptions:",f),await DT.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new N5(f.schema,f.table,f.publish,f.subscribe))}let _=new O5(s,l,u.system_info);return await Du.upsertNodeRecord(_),b5({type:"nats_update"}),i.length>0?o.message=I5:o.message=`Successfully added '${s}' to manifest`,o}a(C5,"addNode")});var MT=m((Cpe,MU)=>{"use strict";var{handleHDBError:jd,hdb_errors:L5}=z(),{HTTP_STATUS_CODES:Xd}=L5,{addUpdateNodeValidator:D5}=Gd(),Mu=C(),UU=R(),DU=Me(),U5=F(),UT=Qe(),Pu=Nn(),M5=Y(),{cloneDeep:P5}=require("lodash"),v5=LT(),{NodeSubscription:B5}=Ra(),{broadcast:H5}=tt(),q5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",F5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G5=M5.get(UU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=x5;async function x5(e){Mu.trace("updateNode called with:",e),Pu.checkClusteringEnabled();let t=D5(e);if(t)throw jd(t,t.message,Xd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=P5(await Pu.getNodeRecord(r));if(U5.isEmptyOrZeroLength(s))throw jd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await v5(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=q5,o;let c=Pu.buildNodePayloads(n,G5,UU.OPERATIONS_ENUM.UPDATE_NODE,await Pu.getSystemInfo());Mu.trace("updateNode sending remote payload:",c);let u;try{u=await UT.request(`${r}.${DU.REQUEST_SUFFIX}`,c)}catch(l){Mu.error(`updateNode received error from request: ${l}`);let _=UT.requestErrorHandler(l,"update_node",r);throw jd(new Error,_,Xd.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw jd(new Error,l,Xd.INTERNAL_SERVER_ERROR,"error",l)}Mu.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Mu.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await UT.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await k5(s[0],n,u.system_info),i.length>0?o.message=F5:o.message=`Successfully updated '${r}'`,o}a(x5,"updateNode");async function k5(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 B5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Pu.upsertNodeRecord(s),H5({type:"nats_update"})}a(k5,"updateNodeTable")});var qU=m((Dpe,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),$5=He(),vU=R(),V5=Y(),Y5=Me();HU.exports=K5;function K5(e){let t=PU.invalid(V5.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y5.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=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return $5.validateBySchema(e,r)}a(K5,"removeNodeValidator")});var eE=m((Mpe,VU)=>{"use strict";var{handleHDBError:FU,hdb_errors:W5}=z(),{HTTP_STATUS_CODES:GU}=W5,Q5=qU(),vu=C(),xU=Nn(),z5=F(),Zd=R(),kU=Me(),$U=Qe(),J5=Y(),{RemotePayloadObject:j5}=Cu(),{NodeSubscription:X5}=Ra(),Z5=ou(),e6=Xi(),{broadcast:t6}=tt(),r6=J5.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);VU.exports=s6;async function s6(e){vu.trace("removeNode called with:",e),xU.checkClusteringEnabled();let t=Q5(e);if(t)throw FU(t,t.message,GU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await xU.getNodeRecord(r);if(z5.isEmptyOrZeroLength(s))throw FU(new Error,`Node '${r}' was not found.`,GU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new j5(Zd.OPERATIONS_ENUM.REMOVE_NODE,r6,[]),i,o=!1;try{i=await $U.request(`${r}.${kU.REQUEST_SUFFIX}`,n),vu.trace("Remove node reply from remote node:",r,i)}catch(u){vu.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];vu.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new X5(_.schema,_.table,!1,!1);await $U.updateWorkStream(d,r)}let c=new Z5(Zd.SYSTEM_SCHEMA_NAME,Zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await e6.deleteRecord(c),t6({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(vu.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(s6,"removeNode")});var WU=m((vpe,KU)=>{"use strict";var YU=require("joi"),{string:n6,array:i6}=YU.types(),o6=He(),a6=Gd();KU.exports=c6;function c6(e){let t=YU.object({operation:n6.valid("configure_cluster").required(),connections:i6.items(a6.validation_schema).required()});return o6.validateBySchema(e,t)}a(c6,"configureClusterValidator")});var PT=m((Hpe,XU)=>{"use strict";var u6=R(),tE=C(),l6=F(),_6=eE(),d6=Uu(),QU=Nn(),E6=WU(),{handleHDBError:zU,hdb_errors:f6}=z(),{HTTP_STATUS_CODES:JU}=f6,h6="Configure cluster complete.",m6="Failed to configure the cluster. Check the logs for more details.",p6="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";XU.exports=S6;async function S6(e){tE.trace("configure cluster called with:",e),QU.checkClusteringEnabled();let t=E6(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=await QU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(jU(_6,{operation:u6.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);tE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(jU(d6,f,f.node_name))}let c=await Promise.allSettled(i);tE.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(tE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(l6.isEmptyOrZeroLength(u))return{message:h6,connections:l};if(_)return{message:p6,failed_nodes:u,connections:l};throw zU(new Error,m6,JU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(S6,"configureCluster");async function jU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(jU,"functionWrapper")});var eM=m((Fpe,ZU)=>{"use strict";var rE=require("joi"),T6=He(),{validateSchemaExists:g6,validateTableExists:R6,validateSchemaName:A6}=Ds(),O6=rE.object({operation:rE.string().valid("purge_stream"),schema:rE.string().custom(g6).custom(A6).required(),table:rE.string().custom(R6).required()});function N6(e){return T6.validateBySchema(e,O6)}a(N6,"purgeStreamValidator");ZU.exports=N6});var vT=m((xpe,tM)=>{"use strict";var{handleHDBError:b6,hdb_errors:y6}=z(),{HTTP_STATUS_CODES:I6}=y6,w6=eM(),C6=Qe(),L6=Nn();tM.exports=D6;async function D6(e){let t=w6(e);if(t)throw b6(t,t.message,I6.BAD_REQUEST,void 0,void 0,!0);L6.checkClusteringEnabled();let{schema:r,table:s}=e;return await C6.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(D6,"purgeStream")});var nE=m(($pe,aM)=>{"use strict";var HT=Nn(),U6=Qe(),nM=Y(),sE=R(),Eo=Me(),M6=F(),BT=C(),{RemotePayloadObject:P6}=Cu(),{ErrorCode:rM}=require("nats"),sM=nM.get(sE.CONFIG_PARAMS.CLUSTERING_ENABLED),iM=nM.get(sE.CONFIG_PARAMS.CLUSTERING_NODENAME);aM.exports={clusterStatus:v6,buildNodeStatus:oM};async function v6(){let e={node_name:iM,is_enabled:sM,connections:[]};if(!sM)return e;let t=await HT.getAllNodeRecords();if(M6.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(oM(t[s],e.connections));return await Promise.allSettled(r),e}a(v6,"clusterStatus");async function oM(e,t){let r=e.name,s=new P6(sE.OPERATIONS_ENUM.CLUSTER_STATUS,iM,void 0,await HT.getSystemInfo()),n,i,o=Eo.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await U6.request(Eo.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Eo.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Eo.CLUSTER_STATUS_STATUSES.CLOSED,BT.error(`Error getting node status from ${r} `,n))}catch(u){BT.warn(`Error getting node status from ${r}`,u),u.code===rM.NoResponders?o=Eo.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===rM.Timeout?o=Eo.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Eo.CLUSTER_STATUS_STATUSES.CLOSED}let c=new B6(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 HT.upsertNodeRecord(u)}catch(u){BT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(oM,"buildNodeStatus");function B6(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(B6,"NodeStatusObject")});var oE=m((Ype,cM)=>{"use strict";var{handleHDBError:H6,hdb_errors:q6}=z(),{HTTP_STATUS_CODES:F6}=q6,G6=Qe(),x6=Nn(),qT=F(),iE=require("joi"),k6=He(),$6=2e3,V6=iE.object({timeout:iE.number().min(1),connected_nodes:iE.boolean(),routes:iE.boolean()});cM.exports=Y6;async function Y6(e){x6.checkClusteringEnabled();let t=k6.validateBySchema(e,V6);if(t)throw H6(t,t.message,F6.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||qT.autoCastBoolean(s),o=n===void 0||qT.autoCastBoolean(n),c={nodes:[]},u=await G6.getServerList(r??$6),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:qT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(Y6,"clusterNetwork")});var dM=m((Wpe,_M)=>{"use strict";var FT=require("joi"),uM=He(),{route_constraints:lM}=Ep();_M.exports={setRoutesValidator:K6,deleteRoutesValidator:W6};function K6(e){let t=FT.object({server:FT.valid("hub","leaf").required(),routes:lM.required()});return uM.validateBySchema(e,t)}a(K6,"setRoutesValidator");function W6(e){let t=FT.object({routes:lM.required()});return uM.validateBySchema(e,t)}a(W6,"deleteRoutesValidator")});var cE=m((zpe,mM)=>{"use strict";var fo=et(),GT=F(),aE=R(),EM=dM(),{handleHDBError:fM,hdb_errors:Q6}=z(),{HTTP_STATUS_CODES:hM}=Q6,z6="cluster routes successfully set",J6="cluster routes successfully deleted";mM.exports={setRoutes:j6,getRoutes:X6,deleteRoutes:Z6};function j6(e){let t=EM.setRoutesValidator(e);if(t)throw fM(t,t.message,hM.BAD_REQUEST,void 0,void 0,!0);let r=fo.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=GT.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?fo.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):fo.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:z6,set:o,skipped:i}}a(j6,"setRoutes");function X6(){let e=fo.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(X6,"getRoutes");function Z6(e){let t=EM.deleteRoutesValidator(e);if(t)throw fM(t,t.message,hM.BAD_REQUEST,void 0,void 0,!0);let r=fo.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],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=GT.isEmptyOrZeroLength(s)?null:s,fo.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=GT.isEmptyOrZeroLength(n)?null:n,fo.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:J6,deleted:i,skipped:o}}a(Z6,"deleteRoutes")});var SM=m((jpe,pM)=>{"use strict";var Bu=require("alasql"),ho=require("recursive-iterator"),ds=C(),e8=F(),Hu=R(),xT=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,r8(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=>Hu.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=>!Hu.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][Hu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=t8(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=>!Hu.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Bu.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 t8(e){return e.filter(t=>t[Hu.PERMS_CRUD_ENUM.READ])}a(t8,"filterReadRestrictedAttrs");function r8(e,t,r,s,n){s8(e,t,r,s,n)}a(r8,"interpretAST");function qu(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(qu,"addSchemaTableToMap");function s8(e,t,r,s,n){if(!e){ds.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Bu.yy.Insert?a8(e,t,r):e instanceof Bu.yy.Select?n8(e,t,r,s,n):e instanceof Bu.yy.Update?i8(e,t,r):e instanceof Bu.yy.Delete?o8(e,t,r):ds.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(s8,"getRecordAttributesAST");function n8(e,t,r,s,n){if(!e){ds.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(e8.isEmptyOrZeroLength(i)){ds.error("No schema specified");return}e.from.forEach(c=>{qu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),qu(c.table,t,r,s,n)});let o=new ho(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{ds.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 ho(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{ds.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 ho(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{ds.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 ho(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{ds.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(n8,"getSelectAttributes");function i8(e,t,r){if(!e){ds.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.table.databaseid;qu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(i8,"getUpdateAttributes");function o8(e,t,r){if(!e){ds.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ho(e.where),n=e.table.databaseid;qu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(o8,"getDeleteAttributes");function a8(e,t,r){if(!e){ds.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ho(e.columns),n=e.into.databaseid;qu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.into.tableid,n,i.columnid,t,r)}a(a8,"getInsertAttributes");function kT(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(kT,"pushAttribute");pM.exports=xT});var lE=m((Zpe,AM)=>{var uE=Jc(),TM=require("chalk"),wr=C(),gM=require("prompt"),{promisify:c8}=require("util"),$T=R(),u8=require("fs-extra"),l8=require("path"),_8=F(),d8=ki(),RM=Y();RM.initSync();var E8=require("moment"),f8=c8(gM.get),h8=l8.join(RM.getHdbBasePath(),$T.LICENSE_KEY_DIR_NAME,$T.LICENSE_FILE_NAME,$T.LICENSE_FILE_NAME);AM.exports={getFingerprint:p8,setLicense:m8,parseLicense:VT,register:S8,getRegistrationInfo:g8};async function m8(e){if(e&&e.key&&e.company){try{wr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await VT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw wr.error(r),wr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(m8,"setLicense");async function p8(){let e={};try{e=await uE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw wr.error(r),wr.error(t),new Error(r)}return e}a(p8,"getFingerprint");async function VT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");wr.info("Validating license input...");let r=uE.validateLicense(e,t);if(wr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(wr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(wr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{wr.info("writing license to disk"),await u8.writeFile(h8,JSON.stringify({license_key:e,company:t}))}catch(s){throw wr.error("Failed to write License"),s}return"Registration successful."}a(VT,"parseLicense");async function S8(){let e=await T8();return VT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(S8,"register");async function T8(){let e=await uE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gM.start()}catch(s){wr.error(s)}let r;try{r=await f8(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(T8,"promptForRegistration");async function g8(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await uE.getLicense()}catch(r){throw wr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(_8.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=d8.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=E8.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(g8,"getRegistrationInfo")});var NM=m((tSe,OM)=>{"use strict";var R8=Me(),YT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+R8.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:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};OM.exports=YT});var IM=m((sSe,yM)=>{"use strict";var bM=Me(),KT=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+bM.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bM.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"}};yM.exports=KT});var CM=m((iSe,wM)=>{"use strict";var WT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wM.exports=WT});var DM=m((aSe,LM)=>{"use strict";var A8=Me(),QT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+A8.SERVER_SUFFIX.ADMIN,this.password=r}};LM.exports=QT});var pE=m((uSe,PM)=>{"use strict";var Fu=require("path"),fE=require("fs-extra"),O8=NM(),N8=IM(),b8=CM(),y8=DM(),zT=er(),Aa=F(),cr=et(),EE=R(),_E=Me(),{CONFIG_PARAMS:nt}=EE,xu=C(),hE=Y(),UM=hn(),JT=Qe(),Gu="clustering",I8=1e4,MM=5;PM.exports={generateNatsConfig:w8,removeNatsConfig:C8};async function w8(e=!1,t=void 0){hE.initSync();let r=hE.get(nt.ROOTPATH),s=Fu.join(r,Gu,_E.PID_FILES.HUB),n=Fu.join(r,Gu,_E.PID_FILES.LEAF),i=cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Fu.join(r,Gu,_E.NATS_CONFIG_FILES.HUB_SERVER),c=Fu.join(r,Gu,_E.NATS_CONFIG_FILES.LEAF_SERVER),u=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERTIFICATE),l=cr.getConfigFromFile(nt.CLUSTERING_TLS_PRIVATEKEY),_=cr.getConfigFromFile(nt.CLUSTERING_TLS_CERT_AUTH),d=cr.getConfigFromFile(nt.CLUSTERING_TLS_INSECURE),E=cr.getConfigFromFile(nt.CLUSTERING_TLS_VERIFY),f=cr.getConfigFromFile(nt.CLUSTERING_NODENAME),h=cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await JT.checkNATSServerInstalled()||mE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await zT.listUsers(),T=cr.getConfigFromFile(nt.CLUSTERING_USER),A=await zT.getClusterUser();(Aa.isEmpty(A)||A.active!==!0)&&mE(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await dE(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await dE(nt.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await dE(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),await dE(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],x=[];for(let[Ie,_t]of p.entries())_t.role.role===EE.ROLE_TYPES_ENUM.CLUSTER_USER&&_t.active&&(g.push(new y8(_t.username,UM.decrypt(_t.hash))),x.push(new b8(_t.username,UM.decrypt(_t.hash))));let V=[],{hub_routes:I}=cr.getClusteringRoutes();if(!Aa.isEmptyOrZeroLength(I))for(let Ie of I)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${Ie.host}:${Ie.port}`);let N=new O8(cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NAME),cr.getConfigFromFile(nt.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,x);_==null&&(delete N.tls.ca_file,delete N.leafnodes.tls.ca_file),t=Aa.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===EE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await fE.writeJson(o,N),xu.trace(`Hub server config written to ${o}`));let M=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,J=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,B=new N8(cr.getConfigFromFile(nt.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[M],[J],g,x,u,l,_,d);_==null&&delete B.tls.ca_file,(t===void 0||t===EE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await fE.writeJson(c,B),xu.trace(`Leaf server config written to ${c}`))}a(w8,"generateNatsConfig");async function dE(e){let t=hE.get(e);return Aa.isEmpty(t)&&mE(`port undefined for '${e}'`),await Aa.isPortTaken(t)&&mE(`'${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(dE,"isPortAvailable");function mE(e){let t=`Error generating clustering config: ${e}`;xu.error(t),console.error(t),process.exit(1)}a(mE,"generateNatsConfigError");async function C8(e){let{port:t,config_file:r}=JT.getServerConfig(e),{username:s,decrypt_hash:n}=await zT.getClusterUser(),i=0,o=500;for(;i<MM;){try{let l=await JT.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){xu.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=MM)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Aa.async_set_timeout(o*i)}let c="0".repeat(I8),u=Fu.join(hE.get(nt.ROOTPATH),Gu,r);await fE.writeFile(u,c),await fE.remove(u),xu.notify(e,"started.")}a(C8,"removeNatsConfig")});var GM=m((_Se,FM)=>{"use strict";var Cr=Y(),L8=Jc(),ce=R(),ku=Me(),bn=require("path"),{PACKAGE_ROOT:TE}=R(),vM=Y(),SE=F(),Oa="/dev/null",D8=bn.join(TE,"launchServiceScripts"),BM=bn.join(TE,"utility/scripts"),U8=bn.join(BM,ce.HDB_RESTART_SCRIPT),HM=bn.resolve(TE,"dependencies",`${process.platform}-${process.arch}`,ku.NATS_BINARY_NAME);function qM(){let t=L8.licenseSearch().ram_allocation||ce.RAM_ALLOCATION_ENUM.DEFAULT,r=ce.MEM_SETTING_KEY+t,s={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return SE.noBootFile()&&(s[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=SE.getEnvCliRootPath()),{name:ce.PROCESS_DESCRIPTORS.HDB,script:ce.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:TE}}a(qM,"generateMainServerConfig");var M8=9930;function P8(){Cr.initSync(!0);let e=Cr.get(ce.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",ku.NATS_CONFIG_FILES.HUB_SERVER),r=bn.join(Cr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=vM.get(ce.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=ku.LOG_LEVEL_FLAGS[Cr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==M8?"-"+s:""),script:HM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a(P8,"generateNatsHubServerConfig");var v8=9940;function B8(){Cr.initSync(!0);let e=Cr.get(ce.CONFIG_PARAMS.ROOTPATH),t=bn.join(e,"clustering",ku.NATS_CONFIG_FILES.LEAF_SERVER),r=bn.join(Cr.get(ce.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ce.LOG_NAMES.HDB),s=vM.get(ce.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=ku.LOG_LEVEL_FLAGS[Cr.get(ce.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==v8?"-"+s:""),script:HM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Oa,i.error_file=Oa),i}a(B8,"generateNatsLeafServerConfig");function H8(){Cr.initSync();let e=bn.join(Cr.get(ce.CONFIG_PARAMS.LOGGING_ROOT),ce.LOG_NAMES.HDB),t={name:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ce.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:D8,autorestart:!1};return Cr.get(ce.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Oa,t.error_file=Oa),t}a(H8,"generateClusteringUpgradeV4ServiceConfig");function q8(){let e={[ce.PROCESS_NAME_ENV_PROP]:ce.PROCESS_DESCRIPTORS.RESTART_HDB};return SE.noBootFile()&&(e[ce.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=SE.getEnvCliRootPath()),{...{name:ce.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BM},script:U8}}a(q8,"generateRestart");function F8(){return{apps:[qM()]}}a(F8,"generateAllServiceConfigs");FM.exports={generateAllServiceConfigs:F8,generateMainServerConfig:qM,generateRestart:q8,generateNatsHubServerConfig:P8,generateNatsLeafServerConfig:B8,generateClusteringUpgradeV4ServiceConfig:H8}});var Na=m((SSe,eP)=>{"use strict";var Ae=R(),G8=F(),$u=pE(),Vu=Qe(),Fs=Me(),Ei=GM(),gE=Y(),yn=C(),x8=Nn(),{startWorker:xM,onMessageFromWorkers:k8}=tt(),$8=On(),V8=require("util"),$M=require("child_process"),{execFile:Y8}=$M,ESe=V8.promisify($M.exec),fSe=require("systeminformation"),me;eP.exports={enterPM2Mode:K8,start:mo,stop:jT,reload:VM,restart:YM,list:XT,describe:WM,connect:In,kill:j8,startAllServices:X8,startService:ZT,getUniqueServicesList:QM,restartAllServices:Z8,isServiceRegistered:zM,reloadStopStart:JM,restartHdb:KM,deleteProcess:z8,startClusteringProcesses:XM,startClusteringThreads:ZM,isHdbRestartRunning:J8,isClusteringRunning:t9,stopClustering:e9,reloadClustering:r9};var{PACKAGE_ROOT:hSe}=R(),mSe=R(),{loggerWithTag:pSe}=yn,Yu=!1;k8(e=>{e.type==="restart"&&gE.initSync(!0)});function K8(){Yu=!0}a(K8,"enterPM2Mode");function In(){return me||(me=require("pm2")),new Promise((e,t)=>{me.connect((r,s)=>{yn.setupConsoleLogging(),r&&t(r),e(s)})})}a(In,"connect");var ur,W8=10,kM;function mo(e){if(Yu)return Q8(e);let t=Y8(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=ur.indexOf(t);i>-1&&ur.splice(i,1),!kM&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<W8&&mo(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=gE.get(Ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Fs.LOG_LEVEL_HIERARCHY[i]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?yn.OUTPUTS.STDERR:yn.OUTPUTS.STDOUT;yn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Fs.LOG_LEVELS[d]}if(Fs.LOG_LEVEL_HIERARCHY[i]>=Fs.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Fs.LOG_LEVELS.ERR||l===Fs.LOG_LEVELS.WRN?yn.OUTPUTS.STDERR:yn.OUTPUTS.STDOUT;yn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!ur){ur=[];let n=a(()=>{kM=!0,ur&&(ur.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)}ur.push(t)}a(mo,"start");function Q8(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.start(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(Q8,"startWithPM2");function jT(e){if(!Yu){for(let t of ur||[])t.name===e&&(ur.splice(ur.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.stop(e,async(s,n)=>{s&&(me.disconnect(),r(s)),me.delete(e,(i,o)=>{i&&(me.disconnect(),r(s)),me.disconnect(),t(o)})})})}a(jT,"stop");function VM(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.reload(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(VM,"reload");function YM(e){if(!Yu)for(let t of ur||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.restart(e,(s,n)=>{me.disconnect(),t(n)})})}a(YM,"restart");function z8(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.delete(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(z8,"deleteProcess");async function KM(){await mo(Ei.generateRestart())}a(KM,"restartHdb");async function J8(){let e=await XT();for(let t in e)if(e[t].name===Ae.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(J8,"isHdbRestartRunning");function XT(){return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}me.list((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(XT,"list");function WM(e){return new Promise(async(t,r)=>{try{await In()}catch(s){r(s)}me.describe(e,(s,n)=>{s&&(me.disconnect(),r(s)),me.disconnect(),t(n)})})}a(WM,"describe");function j8(){if(!Yu){for(let e of ur||[])e.kill();ur=[];return}return new Promise(async(e,t)=>{try{await In()}catch(r){t(r)}me.killDaemon((r,s)=>{r&&(me.disconnect(),t(r)),me.disconnect(),e(s)})})}a(j8,"kill");async function X8(){try{await XM(),await ZM(),await mo(Ei.generateAllServiceConfigs())}catch(e){throw me.disconnect(),e}}a(X8,"startAllServices");async function ZT(e){try{let t;switch(e=e.toLowerCase(),e){case Ae.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Ei.generateMainServerConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Ei.generateNatsIngestServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Ei.generateNatsReplyServiceConfig();break;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Ei.generateNatsHubServerConfig(),await mo(t),await $u.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Ei.generateNatsLeafServerConfig(),await mo(t),await $u.removeNatsConfig(e);return;case Ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Ei.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await mo(t)}catch(t){throw me.disconnect(),t}}a(ZT,"startService");async function QM(){try{let e=await XT(),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 me.disconnect(),e}}a(QM,"getUniqueServicesList");async function Z8(e=[]){try{let t=!1,r=await QM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Ae.PROCESS_DESCRIPTORS.HDB?t=!0:await YM(o))}t&&await JM(Ae.PROCESS_DESCRIPTORS.HDB)}catch(t){throw me.disconnect(),t}}a(Z8,"restartAllServices");async function zM(e){if(ur?.find(r=>r.name===e))return!0;let t=await $8.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zM,"isServiceRegistered");async function JM(e){let t=e===Ae.PROCESS_DESCRIPTORS.HDB?gE.get(Ae.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):gE.get(Ae.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await WM(e),s=G8.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await jT(e),await ZT(e)):e===Ae.PROCESS_DESCRIPTORS.HDB?await KM():await VM(e)}a(JM,"reloadStopStart");var jM;async function XM(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];await ZT(t)}}a(XM,"startClusteringProcesses");async function ZM(){jM=xM(Ae.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Ae.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Vu.createWorkQueueStream(Fs.WORK_QUEUE_CONSUMER_NAMES),await Vu.updateIngestStreamConsumer(),await Vu.updateLocalStreams();let e=await x8.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Ae.PRE_4_0_0_VERSION){yn.info("Starting clustering upgrade 4.0.0 process"),xM(Ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(ZM,"startClusteringThreads");async function e9(){for(let e in Ae.CLUSTERING_PROCESSES)if(e!==Ae.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Ae.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await jM.terminate();else{let t=Ae.CLUSTERING_PROCESSES[e];await jT(t)}}a(e9,"stopClustering");async function t9(){for(let e in Ae.CLUSTERING_PROCESSES){let t=Ae.CLUSTERING_PROCESSES[e];if(await zM(t)===!1)return!1}return!0}a(t9,"isClusteringRunning");async function r9(){await $u.generateNatsConfig(!0),await Vu.reloadNATSHub(),await Vu.reloadNATSLeaf(),await $u.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await $u.removeNatsConfig(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(r9,"reloadClustering")});var ya=m((gSe,oP)=>{"use strict";var s9=require("minimist"),{isMainThread:rg,parentPort:sP}=require("worker_threads"),ke=R(),{PROCESS_DESCRIPTORS_VALIDATE:Ku}=ke,Gs=C(),sg=F(),RE=pE(),ba=Qe(),eg=Me(),nP=et(),xs=Na(),tP=On(),n9=Fi(),{restartWorkers:AE,onMessageByType:i9}=tt(),{handleHDBError:o9,hdb_errors:a9}=z(),{HTTP_STATUS_CODES:c9}=a9,OE=Y();OE.initSync();var Wu=`Restarting HarperDB. This may take up to ${ke.RESTART_TIMEOUT_MS/1e3} seconds.`,u9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",rP="Clustering is not enabled so cannot be restarted",l9="Invalid service",po,Es;oP.exports={restart:iP,restartService:ng};rg&&i9(ke.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ng({service:e.workerType}):iP({operation:"restart"})});async function iP(e){Es=Object.keys(e).length===0,po=await xs.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR);let t=s9(process.argv);if(t.service){await ng(t);return}if(Es&&!po){console.error(u9);return}if(Es&&console.log(Wu),po){xs.enterPM2Mode(),Gs.notify(Wu);let r=n9(Object.keys(ke.CONFIG_PARAM_MAP),!0);return sg.isEmptyOrZeroLength(Object.keys(r))||nP.updateConfigValue(void 0,void 0,r,!0,!0),d9(),Wu}return rg?(Gs.notify(Wu),await ig(),setTimeout(()=>{AE()},50)):sP.postMessage({type:ke.ITC_EVENT_TYPES.RESTART}),Wu}a(iP,"restart");async function ng(e){let{service:t}=e;if(ke.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw o9(new Error,l9,c9.BAD_REQUEST,void 0,void 0,!0);if(po=await xs.isServiceRegistered(ke.HDB_PROC_DESCRIPTOR),!rg)return sP.postMessage({type:ke.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Ku.clustering:if(!OE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rP;break}Es&&console.log("Restarting clustering"),Gs.notify("Restarting clustering"),await ig();break;case Ku.clustering_config:case Ku["clustering config"]:if(!OE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=rP;break}Es&&console.log("Restarting clustering_config"),Gs.notify("Restarting clustering_config"),await xs.reloadClustering();break;case"custom_functions":case"custom functions":case Ku.harperdb:case Ku.http_workers:if(Es&&!po){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Es&&console.log("Restarting http_workers"),Gs.notify("Restarting http_workers"),po?await xs.restart(ke.HDB_PROC_DESCRIPTOR):setTimeout(()=>{AE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Gs.error(r),Es&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ng,"restartService");async function _9(){await ba.publishToStream(`${eg.SUBJECT_PREFIXES.TXN}.${eg.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,eg.WORK_QUEUE_CONSUMER_NAMES.stream_name,ba.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_9,"postDummyNatsMsg");async function d9(){await ig(),await xs.restart(ke.HDB_PROC_DESCRIPTOR),await sg.async_set_timeout(2e3),OE.get(ke.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await tg(),Es&&(await ba.closeConnection(),process.exit(0))}a(d9,"restartPM2Mode");async function ig(){if(!nP.getConfigFromFile(ke.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await tP.getHDBProcessInfo()).clustering.length===0)Gs.trace("Clustering not running, restart will start clustering services"),await RE.generateNatsConfig(!0),await xs.startClusteringProcesses(),await xs.startClusteringThreads(),await tg(),Es&&await ba.closeConnection();else{await _9(),await RE.generateNatsConfig(!0),po?(Gs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await xs.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await xs.restart(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await tP.getHDBProcessInfo()).clustering.forEach(n=>{Gs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await sg.async_set_timeout(3e3),await tg(),await ba.updateLocalStreams(),Es&&await ba.closeConnection(),Gs.trace("Restart clustering restarting ingest and reply service threads");let t=AE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=AE(ke.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(ig,"restartClustering");async function tg(){await RE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await RE.removeNatsConfig(ke.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(tg,"removeNatsConfig")});var pP=m((OSe,mP)=>{"use strict";var ASe=require("lodash"),lr=R(),{handleHDBError:aP,hdb_errors:E9}=z(),{HDB_ERROR_MSGS:f9,HTTP_STATUS_CODES:h9}=E9,og=C();mP.exports={getRolePermissions:p9};var So=Object.create(null),m9=a(e=>({key:e,perms:{}}),"perms_template_obj"),_P=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),dP=a((e=!1,t=!1,r=!1,s=!1)=>({[lr.PERMS_CRUD_ENUM.READ]:e,[lr.PERMS_CRUD_ENUM.INSERT]:t,[lr.PERMS_CRUD_ENUM.UPDATE]:r,[lr.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ag=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...dP(t,r,s,n)}),"table_perms_template"),cP=a((e,t=dP())=>({attribute_name:e,describe:hP(t),[Qu]:t[Qu],[cg]:t[cg],[ug]:t[ug]}),"attr_perms_template"),uP=a((e,t=!1)=>({attribute_name:e,describe:t,[Qu]:t}),"timestamp_attr_perms_template"),{READ:Qu,INSERT:cg,UPDATE:ug}=lr.PERMS_CRUD_ENUM,EP=Object.values(lr.PERMS_CRUD_ENUM),fP=[Qu,cg,ug];function p9(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[lr.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(So[t]&&So[t].key===s)return So[t].perms;let n=S9(e,r);return So[t]?So[t].key=s:So[t]=m9(s),So[t].perms=n,n}catch(r){if(!e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[lr.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<lr.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 og.error(s),og.debug(r),aP(new Error,f9.OUTDATED_PERMS_TRANSLATION_ERROR,h9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
10
- ${r.stack}`;throw og.error(s),aP(new Error)}}}a(p9,"getRolePermissions");function S9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[lr.SYSTEM_SCHEMA_NAME]=s[lr.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]=T9(t[i]);return}r[i]=_P(),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=g9(c,u);r[i].describe||EP.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=ag()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ag()})}),r}a(S9,"translateRolePermissions");function T9(e){let t=_P(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ag(!0,!0,!0,!0,!0)}),t}a(T9,"createStructureUserPermissions");function g9(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}=_,E=_;return lr.TIME_STAMP_NAMES.includes(d)&&(E=uP(d,_[Qu])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=cP(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=hP(_),n.attribute_permissions.push(_),c||R9(_,u)}else if(l!==o){let _;lr.TIME_STAMP_NAMES.includes(l)?_=uP(l):_=cP(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=lP(n),n}else return e.describe=lP(e),e}a(g9,"getTableAttrPerms");function lP(e){return EP.filter(t=>e[t]).length>0}a(lP,"getSchemaTableDescribePerm");function hP(e){return fP.filter(t=>e[t]).length>0}a(hP,"getAttributeDescribePerm");function R9(e,t){fP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(R9,"checkForHashPerms")});var SP={};Ke(SP,{Resources:()=>NE,keyArrayToString:()=>Ia,resetResources:()=>A9,resources:()=>fi});function A9(){return fi=new NE}function Ia(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var NE,fi,zu=Te(()=>{Vi();NE=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 Xe(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(A9,"resetResources");a(Ia,"keyArrayToString")});var TP={};Ke(TP,{Headers:()=>To});var To,bE=Te(()=>{To=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 Ju={};Ke(Ju,{authentication:()=>bP,login:()=>D9,logout:()=>U9,start:()=>L9});async function bP(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?y9?b9:[]:N9?O9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return yE&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),yE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(yE){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,p===-1?n.length:p),u=await RP.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let T=new CE.AuthAuditLog(f,h,Lt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=p,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Lt.AUTH_AUDIT_STATUS.SUCCESS?gP.notify(T):gP.error(T)},"authAuditLog"),_;if(s){if(_=wa.get(s),!_){let[f,h]=s.split(" "),p,T;try{switch(f){case"Basic":[p,T]=atob(h).split(":"),_=p||T?await Et.auth(p,T):null;break;case"Bearer":try{_=await(0,wE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,wE.validateRefreshToken)(h),{status:-1}}catch{throw A}}break}}catch(A){return C9&&(wa.get(h)||(wa.set(h,h),l(p,Lt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:wn({error:A.message},e)}}wa.set(s,_),w9&&l(_.username,Lt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await Et.auth(u.user,null,!1):I9&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,IE.getSuperUser)());yE&&(e.session.update=function(f){if(!c){c=(0,OP.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 f.id=c,RP.put(f)},e.login=async function(f,h){e.user=await Et.auth(f,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")&&fi.loginPath?(d.status=302,d.headers.set("Location",fi.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new To);for(let h=0;h<E;){let p=o[h++];f.set(p,o[h++])}}return o=null,d}function L9({server:e,port:t}){e.request(bP,{port:t||"all"}),AP||(AP=!0,setInterval(()=>{wa=new Map},Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NP.user.addListener(()=>{wa=new Map}))}async function D9(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 U9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var IE,wE,OP,Qr,Lt,CE,NP,gP,O9,N9,b9,y9,RP,yE,I9,w9,C9,wa,AP,LE=Te(()=>{IE=D(er());rs();zu();wE=D(wu());_e();OP=require("uuid"),Qr=D(Y()),Lt=D(R()),CE=D(C());Ca();NP=D(Xc());bE();gP=(0,CE.loggerWithTag)("auth-event");Qr.initSync();O9=Qr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),N9=Qr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),b9=Qr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),y9=Qr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);Et.auth=IE.findAndValidateUser;RP=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yE=Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,I9=Qr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,w9=Qr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,C9=Qr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,wa=new Map;a(bP,"authentication");a(L9,"start");a(D9,"login");a(U9,"logout")});var UP=m((PSe,DP)=>{"use strict";var pe=require("joi"),yP=require("fs-extra"),IP=require("path"),Ln=He(),wP=Y(),CP=R(),LP=C(),{hdb_errors:M9}=z(),{HDB_ERROR_MSGS:kt}=M9,Cn=/^[a-zA-Z0-9-_]+$/;DP.exports={getDropCustomFunctionValidator:v9,setCustomFunctionValidator:B9,addComponentValidator:G9,dropCustomFunctionProjectValidator:x9,packageComponentValidator:k9,deployComponentValidator:$9,setComponentFileValidator:H9,getComponentFileValidator:F9,dropComponentFileValidator:q9};function DE(e,t,r){try{let s=wP.get(CP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=IP.join(s,t);return yP.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return LP.error(s),r.message(kt.VALIDATION_ERR)}}a(DE,"checkProjectExists");function ju(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(ju,"checkFilePath");function P9(e,t,r,s){try{let n=wP.get(CP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=IP.join(n,e,t,r+".js");return yP.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return LP.error(n),s.message(kt.VALIDATION_ERR)}}a(P9,"checkFileExists");function v9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().pattern(Cn).custom(P9.bind(null,e.project,e.type)).custom(ju).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Ln.validateBySchema(e,t)}a(v9,"getDropCustomFunctionValidator");function B9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:pe.string().valid("helpers","routes").required(),file:pe.string().custom(ju).required(),function_content:pe.string().required()});return Ln.validateBySchema(e,t)}a(B9,"setCustomFunctionValidator");function H9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(ju).required(),payload:pe.string().allow("").optional(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(H9,"setComponentFileValidator");function q9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:pe.string().custom(ju).optional()});return Ln.validateBySchema(e,t)}a(q9,"dropComponentFileValidator");function F9(e){let t=pe.object({project:pe.string().required(),file:pe.string().custom(ju).required(),encoding:pe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ln.validateBySchema(e,t)}a(F9,"getComponentFileValidator");function G9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(DE.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(G9,"addComponentValidator");function x9(e){let t=pe.object({project:pe.string().pattern(Cn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Ln.validateBySchema(e,t)}a(x9,"dropCustomFunctionProjectValidator");function k9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:pe.boolean()});return Ln.validateBySchema(e,t)}a(k9,"packageComponentValidator");function $9(e){let t=pe.object({project:pe.string().pattern(Cn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:pe.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:pe.string().optional()});return Ln.validateBySchema(e,t)}a($9,"deployComponentValidator")});var ME=m((BSe,vP)=>{"use strict";var Ce=require("fs-extra"),lg=require("fast-glob"),Se=require("path"),MP=require("tar-fs"),V9=require("uuid").v4,_g=require("normalize-path"),ks=UP(),Dt=C(),Ue=R(),Je=Y(),UE=et(),Y9=F(),{PACKAGE_ROOT:K9}=R(),{handleHDBError:mt,hdb_errors:W9}=z(),{HDB_ERROR_MSGS:hi,HTTP_STATUS_CODES:pt}=W9,Q9=Se.join(K9,"application-template"),dg=Se.join(Je.get(Ue.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function PP(){let e=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw mt(new Error,hi.NOT_ENABLED,pt.BAD_REQUEST,void 0,void 0,!0)}a(PP,"isCFEnabled");function z9(){Dt.trace("getting custom api status");let e={};try{e={is_enabled:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw mt(new Error,hi.FUNCTION_STATUS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,t)}return e}a(z9,"customFunctionsStatus");function J9(){Dt.trace("getting custom api endpoints");let e={},t=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{lg.sync(_g(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:lg.sync(_g(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:lg.sync(_g(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw mt(new Error,hi.GET_FUNCTIONS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,r)}return e}a(J9,"getCustomFunctions");function j9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("getting custom api endpoint file content");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return Ce.readFileSync(o,{encoding:"utf8"})}catch(c){throw mt(new Error,hi.GET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(j9,"getCustomFunction");function X9(e){PP(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ks.setCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("setting custom function file content");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Ce.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw mt(new Error,hi.SET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(X9,"setCustomFunction");function Z9(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=ks.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function file");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Ce.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw mt(new Error,hi.DROP_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,o)}}a(Z9,"dropCustomFunction");function e7(e){PP(),e.project&&(e.project=Se.parse(e.project).name);let t=ks.addComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("adding component");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return Ce.mkdirSync(n,{recursive:!0}),Ce.copySync(Q9,n),`Successfully added project: ${s}`}catch(n){throw mt(new Error,hi.ADD_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,n)}}a(e7,"addComponent");function t7(e){e.project&&(e.project=Se.parse(e.project).name);let t=ks.dropCustomFunctionProjectValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function project");let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Je.get(Ue.CONFIG_PARAMS.APPS);if(!Y9.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 UE.updateConfigValue(Ue.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return Ce.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw mt(new Error,hi.DROP_FUNCTION_PROJECT,pt.INTERNAL_SERVER_ERROR,Dt.ERR,i)}}a(t7,"dropCustomFunctionProject");async function r7(e){e.project&&(e.project=Se.parse(e.project).name);let t=ks.packageComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Dt.trace("packaging component",s);let n;try{n=await Ce.realpath(Se.join(r,s))}catch(u){if(u.code!==Ue.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Ce.realpath(Se.join(Je.get(Ue.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ue.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Ce.ensureDir(dg);let i=Se.join(dg,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),MP.pack(n,o).pipe(Ce.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Ce.readFileSync(i,{encoding:"base64"});return await Ce.remove(i),{project:s,payload:c}}a(r7,"packageComponent");async function s7(e){e.project&&(e.project=Se.parse(e.project).name);let t=ks.deployComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=Je.get(Ue.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Dt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=Se.join(r,s);i="file:"+o,await Ce.ensureDir(o);let c,u;do c=Se.join(dg,V9()+".tar"),u=await Ce.pathExists(c);while(u);await Ce.outputFile(c,n,{encoding:"base64"});let l=Ce.createReadStream(c);l.pipe(MP.extract(o)),await new Promise(_=>l.on("end",_)),await Ce.unlink(c)}return UE.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(s7,"deployComponent");async function n7(){let e=UE.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await Ce.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=Se.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await Ce.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(n7,"getComponents");async function i7(e){let t=ks.getComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Ce.readFile(Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ue.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(i7,"getComponentFile");async function o7(e){let t=ks.setComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await Ce.ensureFile(s),await Ce.outputFile(s,e.payload,r)):await Ce.ensureDir(s),"Successfully set component: "+e.file}a(o7,"setComponentFile");async function a7(e){let t=ks.dropComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(Je.get(Ue.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await Ce.pathExists(s)&&await Ce.remove(s),UE.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(a7,"dropComponent");vP.exports={customFunctionsStatus:z9,getCustomFunctions:J9,getCustomFunction:j9,setCustomFunction:X9,dropCustomFunction:Z9,addComponent:e7,dropCustomFunctionProject:t7,packageComponent:r7,deployComponent:s7,getComponents:n7,getComponentFile:i7,setComponentFile:o7,dropComponent:a7}});var Eg=m((qSe,HP)=>{"use strict";var $s=require("joi"),BP=He();HP.exports={readTransactionLogValidator:c7,deleteTransactionLogsBeforeValidator:u7};function c7(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),from:$s.date().timestamp(),to:$s.date().timestamp(),limit:$s.number().min(1)});return BP.validateBySchema(e,t)}a(c7,"readTransactionLogValidator");function u7(e){let t=$s.object({schema:$s.string().required(),table:$s.string().required(),timestamp:$s.date().timestamp().required()});return BP.validateBySchema(e,t)}a(u7,"deleteTransactionLogsBeforeValidator")});var vE=m((GSe,kP)=>{"use strict";var fg=R(),PE=Qe(),qP=F(),FP=Y(),GP=hn(),{handleHDBError:La,hdb_errors:l7}=z(),{HTTP_STATUS_CODES:Da}=l7,{readTransactionLogValidator:_7,deleteTransactionLogsBeforeValidator:d7}=Eg(),xP="This operation relies on clustering and cannot run with it disable.",E7="Logs successfully deleted from transaction log.",f7="All logs successfully deleted from transaction log.";kP.exports={readTransactionLog:h7,deleteTransactionLogsBefore:m7};async function*h7(e){let t=_7(e);if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(!FP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw La(new Error,xP,Da.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qP.checkSchemaTableExist(r,s);if(n)throw La(new Error,n,Da.NOT_FOUND,void 0,void 0,!0);let i=GP.createNatsTableStreamName(r,s),o=await PE.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===fg.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(h7,"readTransactionLog");async function m7(e){let t=d7(e);if(t)throw La(t,t.message,Da.BAD_REQUEST,void 0,void 0,!0);if(!FP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw La(new Error,xP,Da.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qP.checkSchemaTableExist(r,s);if(i)throw La(new Error,i,Da.NOT_FOUND,void 0,void 0,!0);let o=GP.createNatsTableStreamName(r,s),{jsm:c}=await PE.getNATSReferences(),u=await PE.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=E7,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=f7):d=(await PE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(m7,"deleteTransactionLogsBefore")});var FE=m((kSe,zP)=>{"use strict";var BE=require("joi"),HE=require("path"),$P=require("fs-extra"),{exec:p7}=require("child_process"),S7=require("util"),VP=S7.promisify(p7),Xu=R(),{handleHDBError:Ua,hdb_errors:T7}=z(),{HTTP_STATUS_CODES:Ma}=T7,el=Y(),g7=He(),Zu=C();el.initSync();var hg=el.get(Xu.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),YP="npm install --omit=dev --json",R7=`${YP} --dry-run`;zP.exports={installModules:b7,auditModules:y7,installAllRootModules:A7,uninstallRootModule:O7,linkHarperdb:N7};async function A7(e=!1){await qE(),await tl(e?"npm install --ignore-scripts":"npm install",el.get(Xu.CONFIG_PARAMS.ROOTPATH))}a(A7,"installAllRootModules");async function O7(e){await tl(`npm uninstall ${e}`,el.get(Xu.CONFIG_PARAMS.ROOTPATH))}a(O7,"uninstallRootModule");async function N7(){await qE(),await tl(`npm link ${Xu.PACKAGE_ROOT}`,el.get(Xu.CONFIG_PARAMS.ROOTPATH))}a(N7,"linkHarperdb");async function tl(e,t=void 0){let{stdout:r,stderr:s}=await VP(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
11
- `,""));return Zu.trace(r,s),r.replace(`
12
- `,"")}a(tl,"runCommand");async function b7(e){Zu.info(`starting installModules for request: ${e}`);let t=QP(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?R7:YP;await qE(),await WP(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=HE.join(hg,u),_,d=null;try{let{stdout:E,stderr:f}=await VP(n,{cwd:l});_=E?E.replace(`
9
+ `,"")}a(XL,"runCommand");async function E4(){try{await W3.access(vS)}catch{return!1}let e=await XL(`${vS} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return Q3.eq(t,_4)}a(E4,"checkNATSServerInstalled");async function FS(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await WL.getClusterUser();if(fo(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Qr.trace("create nats connection called");let i=await s4({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Qr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(FS,"createConnection");async function f4(){xs&&(await xs.drain(),xs=void 0,Ea=void 0,fa=void 0,Ru=void 0)}a(f4,"closeConnection");var xs,Ru;async function wd(){return Ru||(Ru=FS(Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),xs=await Ru),xs||Ru}a(wd,"getConnection");async function Ou(){if(Ea)return Ea;fo(xs)&&await wd();let{domain:e}=Nu(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(fo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Ea=await xs.jetstreamManager({domain:e}),Ea}a(Ou,"getJetStreamManager");async function ZL(){if(fa)return fa;fo(xs)&&await wd();let{domain:e}=Nu(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(fo(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fa=xs.jetstream({domain:e}),fa}a(ZL,"getJetStream");async function sr(){let e=xs||await wd(),t=Ea||await Ou(),r=fa||await ZL();return{connection:e,jsm:t,js:r}}a(sr,"getNATSReferences");async function h4(e){let t=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await WL.getClusterUser(),n=await FS(t,r,s),i=qS(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=jL.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 Nd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(h4,"getServerList");async function GS(e,t){let{jsm:r}=await sr(),s=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:zL.File,retention:JL.Limits,subjects:t,discard:n4.Old,duplicate_window:QL,max_msgs:n,max_bytes:i,max_age:s})}a(GS,"createLocalStream");async function eD(){let{jsm:e}=await sr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(eD,"listStreams");async function m4(e){let{jsm:t}=await sr();await t.streams.delete(e)}a(m4,"deleteLocalStream");async function p4(e){let{connection:t}=await sr(),r=[],s=qS(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(jL.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(p4,"listRemoteStreams");async function S4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await sr(),i=BS(),o={durable_name:i,ack_policy:yd.Explicit};t&&(o.deliver_policy=Id.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=HS(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(he.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(he.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(S4,"viewStream");async function*T4(e,t=void 0,r=void 0){let{jsm:s,js:n}=await sr(),i=BS(),o={durable_name:i,ack_policy:yd.Explicit};t&&(o.deliver_policy=Id.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 _=HS(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(he.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(he.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(T4,"viewStreamIterator");async function g4(e,t,r,s){Qr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=tD(s,r);let{js:n}=await sr(),i=await bu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:KL.encode(s);try{Qr.trace(`publishToStream publishing to subject: ${o}`),u4(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 iD(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Qr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await GS(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(g4,"publishToStream");function tD(e,t){t===void 0&&(t=o4());let r=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(he.MSG_HEADERS.NATS_MSG_ID)){let s=Nd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${BS()}`;t.append(he.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(he.MSG_HEADERS.ORIGIN)||t.append(he.MSG_HEADERS.ORIGIN,r),t}a(tD,"addNatsMsgHeader");function Nu(e){e=e.toLowerCase();let t=Au.join(Ct.get(Ae.CONFIG_PARAMS.ROOTPATH),l4);if(e===Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return fo(PS)&&(PS={port:Tu.getConfigFromFile(Ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ae.CONFIG_PARAMS.CLUSTERING_NODENAME)+he.SERVER_SUFFIX.HUB,config_file:he.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Au.join(t,he.PID_FILES.HUB),hdb_nats_path:t}),PS;if(e===Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return fo(MS)&&(MS={port:Tu.getConfigFromFile(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Tu.getConfigFromFile(Ae.CONFIG_PARAMS.CLUSTERING_NODENAME)+he.SERVER_SUFFIX.LEAF,config_file:he.NATS_CONFIG_FILES.LEAF_SERVER,domain:Tu.getConfigFromFile(Ae.CONFIG_PARAMS.CLUSTERING_NODENAME)+he.SERVER_SUFFIX.LEAF,pid_file_path:Au.join(t,he.PID_FILES.LEAF),hdb_nats_path:t}),MS;Qr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Nu,"getServerConfig");async function R4(e){let{jsm:t}=await sr(),r=await bu();try{await t.streams.add({name:e.stream_name,storage:zL.File,retention:JL.Limits,duplicate_window:QL,max_age:t4,max_bytes:r4,subjects:[`${he.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:yd.Explicit,durable_name:e.durable_name,deliver_policy:Id.All,max_ack_pending:1e4});else throw s}}a(R4,"createWorkQueueStream");async function A4(){let{jsm:e}=await sr();(await e.consumers.info(he.WORK_QUEUE_CONSUMER_NAMES.stream_name,he.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Qr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(he.WORK_QUEUE_CONSUMER_NAMES.stream_name,he.WORK_QUEUE_CONSUMER_NAMES.durable_name),Qr.info("Adding pull consumer to ingest stream"),await e.consumers.add(he.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:yd.Explicit,durable_name:he.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Id.All,max_ack_pending:1e4}))}a(A4,"updateIngestStreamConsumer");async function rD(e,t,r){let{jsm:s}=await sr(),n=await s.streams.info(t),i=sD(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=bd.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${he.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(rD,"addSourceToWorkStream");function sD(e){return e.split(".")[1]}a(sD,"extractServerName");async function nD(e,t,r){let{schema:s,table:n}=r,i=bd.createNatsTableStreamName(s,n),{jsm:o}=await sr(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(nD,"removeSourceFromWorkStream");async function O4(e,t,r=2e4,s=qS()){if(!Nd.isObject(t))throw new Error("data param must be an object");let n=KL.encode(t),{connection:i}=await sr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return HS(c.data)}a(O4,"request");function xS(e){return new Promise(async(t,r)=>{let s=X3(vS,["--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(xS,"reloadNATS");async function N4(){let{pid_file_path:e}=Nu(Ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await xS(e)}a(N4,"reloadNATSHub");async function b4(){let{pid_file_path:e}=Nu(Ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await xS(e)}a(b4,"reloadNATSLeaf");function y4(e,t,r){let s;switch(e.code){case VL.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case VL.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(y4,"requestErrorHandler");async function I4(e,t){let r=t+he.SERVER_SUFFIX.LEAF;await iD(async()=>{e.subscribe===!0?await rD(r,he.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await nD(r,he.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(I4,"updateWorkStream");function iD(e){return Z3.writeTransaction(Ae.SYSTEM_SCHEMA_NAME,Ae.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(iD,"exclusiveLock");async function oD(e,t){let r=bd.createNatsTableStreamName(e,t),s=await bu(),n=D4(e,t,s);await GS(r,[n])}a(oD,"createLocalTableStream");async function w4(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await oD(s,n)}}a(w4,"createTableStreams");async function aD(e,t){if(Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=bd.createNatsTableStreamName(e,t),{jsm:s}=await sr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Qr.warn(r);else throw r}}a(aD,"purgeTableStream");async function C4(e,t){if(Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await aD(e,t[r])}a(C4,"purgeSchemaTableStreams");async function L4(e){return(await Ou()).streams.info(e)}a(L4,"getStreamInfo");function D4(e,t,r){return`${he.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(D4,"createSubjectName");async function bu(){if(gu)return gu;if(gu=(await Ou())?.nc?.info?.server_name,gu===void 0)throw new Error("Unable to get jetstream manager server name");return gu}a(bu,"getJsmServerName");async function U4(){let e=await Ou(),t=await bu(),r=await eD();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=M4(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===he.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${he.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Qr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===he.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${he.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Qr.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(".");Qr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(U4,"updateLocalStreams");function M4(e){let{config:t}=e,r=!1;if(t.name===he.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===he.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Ct.get(Ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Ct.get(Ae.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(M4,"updateStreamLimits")});var Ud=m((Rme,dD)=>{"use strict";var ha=P_(),ma=IL(),P4=C(),v4=require("uuid").v4,gme=require("clone"),Ld=Nn(),pa=R(),B4=require("util"),_i=Kr(),{handleHDBError:nr,hdb_errors:H4}=z(),{HDB_ERROR_MSGS:Cd,HTTP_STATUS_CODES:ir}=H4,{SchemaEventMsg:Dd}=cs(),uD=ze(),{getDatabases:q4}=(de(),re(Ie)),{transformReq:Sa}=G();dD.exports={createSchema:F4,createSchemaStructure:lD,createTable:G4,createTableStructure:_D,createAttribute:Y4,dropSchema:x4,dropTable:k4,dropAttribute:$4,getBackup:K4};async function F4(e){let t=await lD(e);return Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema)),t}a(F4,"createSchema");async function lD(e){let t=ha.schema_object(e);if(t)throw nr(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);if(Sa(e),!await ma.checkSchemaExists(e.schema))throw nr(new Error,Cd.SCHEMA_EXISTS_ERR(e.schema),ir.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Cd.SCHEMA_EXISTS_ERR(e.schema),!0);return await _i.createSchema(e),`database '${e.schema}' successfully created`}a(lD,"createSchemaStructure");async function G4(e){return Sa(e),await _D(e)}a(G4,"createTable");async function _D(e){let t=ha.create_table_object(e);if(t)throw nr(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);if(ha.validateTableResidence(e.residence),!await ma.checkSchemaTableExists(e.schema,e.table))throw nr(new Error,Cd.TABLE_EXISTS_ERR(e.schema,e.table),ir.BAD_REQUEST,pa.LOG_LEVELS.ERROR,Cd.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:v4(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await _i.createTable(s,e);else throw nr(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",ir.BAD_REQUEST);else await _i.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(_D,"createTableStructure");async function x4(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ha.schema_object(e),s=t??r;if(s)throw nr(s,s.message,ir.BAD_REQUEST,void 0,void 0,!0);Sa(e);let n=await ma.checkSchemaExists(e.schema);if(n)throw nr(new Error,n,ir.NOT_FOUND,pa.LOG_LEVELS.ERROR,n,!0);let i=await ma.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await _i.dropSchema(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema)),await uD.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(x4,"dropSchema");async function k4(e){let t=ha.table_object(e);if(t)throw nr(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw nr(new Error,r,ir.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);return await _i.dropTable(e),await uD.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(k4,"dropTable");async function $4(e){let t=ha.attribute_object(e);if(t)throw nr(t,t.message,ir.BAD_REQUEST,void 0,void 0,!0);Sa(e);let r=await ma.checkSchemaTableExists(e.schema,e.table);if(r)throw nr(new Error,r,ir.NOT_FOUND,pa.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw nr(new Error,"You cannot drop a hash attribute",ir.BAD_REQUEST,void 0,void 0,!0);if(pa.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw nr(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,ir.BAD_REQUEST,void 0,void 0,!0);try{return await _i.dropAttribute(e),V4(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw P4.error(`Got an error deleting attribute ${B4.inspect(e)}.`),s}}a($4,"dropAttribute");function V4(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(V4,"dropAttributeFromGlobal");async function Y4(e){Sa(e);let t=q4()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw nr(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,ir.BAD_REQUEST,void 0,void 0,!0);return await _i.createAttribute(e),Ld.signalSchemaChange(new Dd(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Y4,"createAttribute");function K4(e){return _i.getBackup(e)}a(K4,"getBackup")});var fD=m((Ome,ED)=>{"use strict";var{OPERATIONS_ENUM:W4}=R(),kS=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=W4.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};ED.exports=kS});var $S=m((yme,TD)=>{"use strict";var Q4=Kr(),bme=fD(),Md=G(),Pd=R(),z4=Y(),{handleHDBError:hD,hdb_errors:J4}=z(),{HDB_ERROR_MSGS:mD,HTTP_STATUS_CODES:pD}=J4,j4=Object.values(Pd.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SD="To use this operation audit log must be enabled in harperdb-config.yaml";TD.exports=X4;async function X4(e){if(Md.isEmpty(e.schema))throw new Error(mD.SCHEMA_REQUIRED_ERR);if(Md.isEmpty(e.table))throw new Error(mD.TABLE_REQUIRED_ERR);if(!z4.get(Pd.CONFIG_PARAMS.LOGGING_AUDITLOG))throw hD(new Error,SD,pD.BAD_REQUEST,Pd.LOG_LEVELS.ERROR,SD,!0);let t=Md.checkSchemaTableExist(e.schema,e.table);if(t)throw hD(new Error,t,pD.NOT_FOUND,Pd.LOG_LEVELS.ERROR,t,!0);if(!Md.isEmpty(e.search_type)&&j4.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Q4.readAuditLog(e)}a(X4,"readAuditLog")});var RD=m((wme,gD)=>{"use strict";var{OPERATIONS_ENUM:Z4}=R(),VS=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Z4.GET_BACKUP,this.schema=t,this.table=r}};gD.exports=VS});var ND=m((Ume,OD)=>{"use strict";var eX=Kr(),Lme=RD(),YS=G(),tX=R(),Dme=Y(),{handleHDBError:rX,hdb_errors:sX}=z(),{HDB_ERROR_MSGS:AD,HTTP_STATUS_CODES:nX}=sX;OD.exports=iX;async function iX(e){if(YS.isEmpty(e.schema))throw new Error(AD.SCHEMA_REQUIRED_ERR);if(YS.isEmpty(e.table))throw new Error(AD.TABLE_REQUIRED_ERR);let t=YS.checkSchemaTableExist(e.schema,e.table);if(t)throw rX(new Error,t,nX.NOT_FOUND,tX.LOG_LEVELS.ERROR,t,!0);return await eX.getBackup(read_audit_log_object)}a(iX,"getBackup")});var LD=m((Pme,CD)=>{var di=require("validate.js"),yD=qe(),Ta=R(),{handleHDBError:oX,hdb_errors:aX}=z(),{HDB_ERROR_MSGS:Je,HTTP_STATUS_CODES:cX}=aX,KS=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),uX={STRUCTURE_USER:"structure_user"},bD=Object.values(Ta.ROLE_TYPES_ENUM),lX="attribute_permissions",_X="attribute_name",{PERMS_CRUD_ENUM:ga}=Ta,dX=[lX,...Object.values(ga)],ID=[ga.READ,ga.INSERT,ga.UPDATE],EX=[_X,...ID];function fX(e){let t=KS();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,wD(e,t)}a(fX,"addRoleValidation");function hX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,wD(e,t)}a(hX,"alterRoleValidation");function mX(e){let t=KS();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,yD.validateObject(e,t)}a(mX,"dropRoleValidation");var pX=["operation","role","id","permission","hdb_user","hdb_auth_header"];function wD(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)pX.includes(s[o])||n.push(s[o]);n.length>0&&nt(Je.INVALID_ROLE_JSON_KEYS(n),r);let i=yD.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{nt(o,r)}),e.permission){let o=SX(e);o&&nt(o,r),bD.forEach(c=>{e.permission[c]&&!di.isBoolean(e.permission[c])&&nt(Je.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(bD.indexOf(o)<0){if(o===uX.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]||nt(Je.SCHEMA_NOT_FOUND(d),r)}continue}nt(Je.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){nt(Je.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]){nt(Je.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{dX.includes(_)||nt(Je.INVALID_PERM_KEY(_),r,o,u)}),Object.values(ga).forEach(_=>{di.isDefined(l[_])?di.isBoolean(l[_])||nt(Je.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):nt(Je.TABLE_PERM_MISSING(_),r,o,u)}),di.isDefined(l.attribute_permissions)){if(!di.isArray(l.attribute_permissions)){nt(Je.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{nt(Je.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!EX.includes(p)&&p!==ga.DELETE&&nt(Je.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!di.isDefined(f.attribute_name)){nt(Je.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){nt(Je.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}ID.forEach(p=>{di.isDefined(f[p])?di.isBoolean(f[p])||nt(Je.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):nt(Je.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;nt(Je.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return TX(r)}a(wD,"customValidate");CD.exports={addRoleValidation:fX,alterRoleValidation:hX,dropRoleValidation:mX};function SX(e){let{operation:t,permission:r}=e;if(t===Ta.OPERATIONS_ENUM.ADD_ROLE||t===Ta.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 Je.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ta.ROLE_TYPES_ENUM.SUPER_USER:Ta.ROLE_TYPES_ENUM.CLUSTER_USER;return Je.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(SX,"validateNoSUPerms");function TX(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Je.ROLE_PERMS_ERROR,...e};return oX(new Error,s,cX.BAD_REQUEST)}else return null}a(TX,"generateRolePermResponse");function nt(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(nt,"addPermError")});var Hd=m((Bme,PD)=>{"use strict";var DD=Zt(),UD=Xt(),gX=ro(),QS=LD(),zS=Nn(),RX=require("uuid").v4,AX=require("util"),vd=R(),OX=G(),JS=UD.searchByValue,NX=UD.searchByHash,bX=AX.promisify(gX.delete),yX=us(),IX=la(),{hdb_errors:wX,handleHDBError:Ra}=z(),{HDB_ERROR_MSGS:MD,HTTP_STATUS_CODES:Bd}=wX,{UserEventMsg:jS}=cs();PD.exports={addRole:CX,alterRole:LX,dropRole:DX,listRoles:UX};function WS(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(WS,"scrubRoleDetails");async function CX(e){let t=QS.addRoleValidation(e);if(t)throw t;e=WS(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 JS(r)||[])}catch(i){throw Ra(i)}if(s&&s.length>0)throw Ra(new Error,MD.ROLE_ALREADY_EXISTS(e.role),Bd.CONFLICT,void 0,void 0,!0);e.id||(e.id=RX());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await DD.insert(n),zS.signalUserChange(new jS(process.pid)),e=WS(e),e}a(CX,"addRole");async function LX(e){let t=QS.alterRoleValidation(e);if(t)throw t;e=WS(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await DD.update(r)}catch(n){throw Ra(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ra(new Error,"Invalid role id",Bd.BAD_REQUEST,void 0,void 0,!0);return await zS.signalUserChange(new jS(process.pid)),e}a(LX,"alterRole");async function DX(e){let t=QS.dropRoleValidation(e);if(t)throw Ra(new Error,t,Bd.BAD_REQUEST,void 0,void 0,!0);let r=new IX(vd.SYSTEM_SCHEMA_NAME,vd.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await NX(r));if(s.length===0)throw Ra(new Error,MD.ROLE_NOT_FOUND,Bd.NOT_FOUND,void 0,void 0,!0);let n=new yX(vd.SYSTEM_SCHEMA_NAME,vd.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await JS(n)),o=!1;if(OX.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 bX(c),zS.signalUserChange(new jS(process.pid)),`${s[0].role} successfully deleted`}a(DX,"dropRole");async function UX(){return JS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(UX,"listRoles")});var qD=m((qme,HD)=>{"use strict";var MX=Y(),Ei=require("joi"),PX=qe(),vD=require("moment"),vX=require("fs-extra"),XS=require("path"),BX=require("lodash"),yu=R(),{LOG_LEVELS:ho}=R(),HX="YYYY-MM-DD hh:mm:ss",qX=XS.resolve(__dirname,"../logs");HD.exports=function(e){return PX.validateBySchema(e,FX)};var FX=Ei.object({from:Ei.custom(BD),until:Ei.custom(BD),level:Ei.valid(ho.NOTIFY,ho.FATAL,ho.ERROR,ho.WARN,ho.INFO,ho.DEBUG,ho.TRACE),order:Ei.valid("asc","desc"),limit:Ei.number().min(1),start:Ei.number().min(0),log_name:Ei.custom(GX)});function BD(e,t){if(vD(e,vD.ISO_8601).format(HX)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(BD,"validateDatetime");function GX(e,t){if(BX.invert(yu.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=MX.get(yu.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?yu.LOG_NAMES.HDB:e,i=n===yu.LOG_NAMES.INSTALL?XS.join(qX,yu.LOG_NAMES.INSTALL):XS.join(s,n);return vX.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(GX,"validateReadLogPath")});var eT=m((Gme,GD)=>{"use strict";var qd=R(),xX=C(),kX=Y(),$X=qD(),ZS=require("path"),FD=require("fs-extra"),{once:VX}=require("events"),{handleHDBError:YX,hdb_errors:KX}=z(),{PACKAGE_ROOT:WX}=R(),QX=ZS.join(WX,"logs"),zX=1e3,JX=200;GD.exports=jX;async function jX(e){let t=$X(e);if(t)throw YX(t,t.message,KX.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=kX.get(qd.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?qd.LOG_NAMES.HDB:e.log_name,n=s===qd.LOG_NAMES.INSTALL?ZS.join(QX,qd.LOG_NAMES.INSTALL):ZS.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?zX:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(FD.statSync(n).size-(h+5)*JX,0));let T=FD.createReadStream(n,{start:p});T.on("error",I=>{xX.error(I)});let A=0,g=[],v="",V;T.on("data",I=>{let U=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;I=v+I;let J=0,M;for(;(M=U.exec(I))&&!T.destroyed;){V&&(V.message=I.slice(J,M.index),b(V));let[se,ye,Kt]=M,gr=Kt.split("] ["),ws=gr[0],cn=gr[1];gr.splice(0,2),V={timestamp:ye,thread:ws,level:cn,tags:gr,message:""},J=M.index+se.length}v=I.slice(J)}),T.on("end",I=>{T.destroyed||V&&(V.message=v.trim(),b(V))}),T.resume();function b(I){let U,J,M;switch(!0){case(i&&c&&l):U=new Date(I.timestamp),J=new Date(u),M=new Date(_),I.level===o&&U>=J&&U<=M&&A<f?A++:I.level===o&&U>=J&&U<=M&&(fi(I,E,g),A++,A===h&&T.destroy());break;case(i&&c):U=new Date(I.timestamp),J=new Date(u),I.level===o&&U>=J&&A<f?A++:I.level===o&&U>=J&&(fi(I,E,g),A++,A===h&&T.destroy());break;case(i&&l):U=new Date(I.timestamp),M=new Date(_),I.level===o&&U<=M&&A<f?A++:I.level===o&&U<=M&&(fi(I,E,g),A++,A===h&&T.destroy());break;case(c&&l):U=new Date(I.timestamp),J=new Date(u),M=new Date(_),U>=J&&U<=M&&A<f?A++:U>=J&&U<=M&&(fi(I,E,g),A++,A===h&&T.destroy());break;case i:I.level===o&&A<f?A++:I.level===o&&(fi(I,E,g),A++,A===h&&T.destroy());break;case c:U=new Date(I.timestamp),J=new Date(u),U>=J&&A<f?A++:U>=J&&A>=f&&(fi(I,E,g),A++,A===h&&T.destroy());break;case l:U=new Date(I.timestamp),M=new Date(_),U<=M&&A<f?A++:U<=M&&A>=f&&(fi(I,E,g),A++,A===h&&T.destroy());break;default:A<f?A++:(fi(I,E,g),A++,A===h&&T.destroy())}}return a(b,"onLogMessage"),await VX(T,"close"),g}a(jX,"readLog");function fi(e,t,r){t==="desc"?XX(e,r):t==="asc"?ZX(e,r):r.push(e)}a(fi,"pushLineToResult");function XX(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(XX,"insertDescending");function ZX(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(ZX,"insertAscending")});var Gd=m((Yme,VD)=>{"use strict";var tT=require("joi"),{string:Fd,boolean:xD,date:eZ}=tT.types(),tZ=qe(),{validateSchemaExists:kme,validateTableExists:$me,validateSchemaName:Vme}=Ps(),rZ=R(),sZ=Pe(),kD=Y();kD.initSync();var nZ=Fd.invalid(kD.get(rZ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(sZ.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null).required(),$D={operation:Fd.valid("add_node","update_node"),node_name:nZ,subscriptions:tT.array().items({table:Fd.optional(),schema:Fd.required(),subscribe:xD.required(),publish:xD.required().custom(oZ),start_time:eZ.iso()}).min(1).required()};function iZ(e){return tZ.validateBySchema(e,tT.object($D))}a(iZ,"addUpdateNodeValidator");function oZ(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(oZ,"checkForFalsy");VD.exports={addUpdateNodeValidator:iZ,validation_schema:$D}});var KD=m((Wme,YD)=>{var aZ=qe(),cZ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};YD.exports=function(e){return aZ.validateObject(e,cZ)}});var xd=m((Qme,WD)=>{"use strict";var uZ=R().OPERATIONS_ENUM,rT=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=uZ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};WD.exports=rT});var zD=m((Jme,QD)=>{"use strict";var lZ={OPERATION:"operation",REFRESH:"refresh"},sT=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},nT=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};QD.exports={JWTTokens:sT,TOKEN_TYPE_ENUM:lZ,JWTRSAKeys:nT}});var Cu=m((Xme,ZD)=>{"use strict";var wu=require("jsonwebtoken"),iT=require("fs-extra"),oT=G(),zr=R(),{handleHDBError:or,hdb_errors:_Z}=z(),{HTTP_STATUS_CODES:ar,AUTHENTICATION_ERROR_MSGS:cr}=_Z,Iu=C(),JD=W_(),uT=tr(),dZ=Zt().update,EZ=xd(),fZ=Nn(),{UserEventMsg:hZ}=cs(),hi=Y();hi.initSync();var aT=require("path"),{JWTTokens:mZ,JWTRSAKeys:pZ,TOKEN_TYPE_ENUM:kd}=zD(),SZ=hi.get(zr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?hi.get(zr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",TZ=hi.get(zr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?hi.get(zr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",$d="RS256",cT;ZD.exports={createTokens:gZ,validateOperationToken:AZ,refreshOperationToken:RZ,validateRefreshToken:XD};async function gZ(e){if(oT.isEmpty(e)||typeof e!="object")throw or(new Error,cr.INVALID_AUTH_OBJECT,ar.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.username))throw or(new Error,cr.USERNAME_REQUIRED,ar.BAD_REQUEST,void 0,void 0,!0);if(oT.isEmpty(e.password))throw or(new Error,cr.PASSWORD_REQUIRED,ar.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await uT.findAndValidateUser(e.username,e.password),!t)throw or(new Error,cr.INVALID_CREDENTIALS,ar.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Iu.error(E),or(new Error,cr.INVALID_CREDENTIALS,ar.UNAUTHORIZED,void 0,void 0,!0)}let r=await Vd(),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 jD(i,r.private_key,r.passphrase),c=await wu.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:TZ,algorithm:$d,subject:kd.REFRESH}),u=JD.hash(c),l=new EZ(zr.SYSTEM_SCHEMA_NAME,zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await dZ(l)}catch(E){Iu.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw or(new Error,cr.REFRESH_TOKEN_SAVE_FAILED,ar.INTERNAL_SERVER_ERROR);return fZ.signalUserChange(new hZ(process.pid)),new mZ(o,c)}a(gZ,"createTokens");async function jD(e,t,r){return await wu.sign(e,{key:t,passphrase:r},{expiresIn:SZ,algorithm:$d,subject:kd.OPERATION})}a(jD,"signOperationToken");async function Vd(){if(cT===void 0)try{let e=aT.join(hi.getHdbBasePath(),zr.LICENSE_KEY_DIR_NAME,zr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=aT.join(hi.getHdbBasePath(),zr.LICENSE_KEY_DIR_NAME,zr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=aT.join(hi.getHdbBasePath(),zr.LICENSE_KEY_DIR_NAME,zr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await iT.readFile(e)).toString(),n=(await iT.readFile(t)).toString(),i=(await iT.readFile(r)).toString();cT=new pZ(i,n,s)}catch(e){throw Iu.error(e),or(new Error,cr.NO_ENCRYPTION_KEYS,ar.INTERNAL_SERVER_ERROR)}return cT}a(Vd,"getJWTRSAKeys");async function RZ(e){if(!e)throw or(new Error,cr.INVALID_BODY,ar.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw or(new Error,cr.REFRESH_TOKEN_REQUIRED,ar.BAD_REQUEST,void 0,void 0,!0);await XD(e.refresh_token);let t=await Vd(),r=await wu.decode(e.refresh_token);return{operation_token:await jD({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(RZ,"refreshOperationToken");async function AZ(e){try{let t=await Vd(),r=await wu.verify(e,t.public_key,{algorithms:$d,subject:kd.OPERATION});return await uT.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Iu.warn(t),t.name&&t.name==="TokenExpiredError"?or(new Error,cr.TOKEN_EXPIRED,ar.FORBIDDEN):or(new Error,cr.INVALID_TOKEN,ar.UNAUTHORIZED)}}a(AZ,"validateOperationToken");async function XD(e){let t;try{let r=await Vd(),s=await wu.verify(e,r.public_key,{algorithms:$d,subject:kd.REFRESH});t=await uT.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Iu.warn(r),r.name&&r.name==="TokenExpiredError"?or(new Error,cr.TOKEN_EXPIRED,ar.FORBIDDEN):or(new Error,cr.INVALID_TOKEN,ar.UNAUTHORIZED)}if(!JD.validate(t.refresh_token,e))throw or(new Error,cr.INVALID_TOKEN,ar.UNAUTHORIZED);return t}a(XD,"validateRefreshToken")});var lT=m((tpe,rU)=>{"use strict";var OZ=KD(),Aa=require("passport"),NZ=require("passport-local").Strategy,bZ=require("passport-http").BasicStrategy,yZ=require("util"),IZ=tr(),tU=yZ.callbackify(IZ.findAndValidateUser),epe=Ar(),wZ=R(),eU=Cu();Aa.use(new NZ(function(e,t,r){tU(e,t,r)}));Aa.use(new bZ(function(e,t,r){tU(e,t,r)}));Aa.serializeUser(function(e,t){t(null,e)});Aa.deserializeUser(function(e,t){t(null,e)});function CZ(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":Aa.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===wZ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?eU.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):eU.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Aa.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(CZ,"authorize");function LZ(e,t){let r=OZ(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(LZ,"checkPermissions");rU.exports={authorize:CZ,checkPermissions:LZ}});var Oa=m((spe,sU)=>{"use strict";var _T=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},dT=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};sU.exports={Node:_T,NodeSubscription:dT}});var iU=m((ipe,nU)=>{"use strict";var DZ=R().OPERATIONS_ENUM,ET=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=DZ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};nU.exports=ET});var Lu=m((ape,oU)=>{"use strict";var fT=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},hT=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)}};oU.exports={RemotePayloadObject:fT,RemotePayloadSubscription:hT}});var cU=m((upe,aU)=>{"use strict";var mT=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}};aU.exports=mT});var _U=m((fpe,lU)=>{"use strict";var UZ=cU(),_pe=xe(),uU=Ce(),MZ=C(),{getSchemaPath:dpe,getTransactionAuditStorePath:Epe}=Ue(),{getDatabases:PZ}=(de(),re(Ie));lU.exports=vZ;async function vZ(e){let t=new UZ;try{let r=PZ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await uU.environmentDataSize(schema_path,e.name),o=await uU.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){MZ.warn(`unable to stat table dbi due to ${r}`)}return t}a(vZ,"lmdbGetTableSize")});var EU=m((mpe,dU)=>{"use strict";var pT=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}};dU.exports=pT});var In=m((gpe,pU)=>{"use strict";var BZ=require("fs-extra"),HZ=require("path"),xt=require("systeminformation"),mi=C(),qZ=ze(),ST=Pe(),Kd=R(),FZ=_U(),mU=ri(),{getThreadInfo:fU}=rt(),wT=Y();wT.initSync();var GZ=EU(),{openEnvironment:Spe}=Ce(),{getSchemaPath:Tpe}=Ue(),{database:xZ}=(de(),re(Ie)),Yd;pU.exports={getHDBProcessInfo:AT,getNetworkInfo:NT,getDiskInfo:OT,getMemoryInfo:RT,getCPUInfo:gT,getTimeInfo:TT,getSystemInformation:bT,systemInformation:kZ,getTableSize:yT,getMetrics:IT};function TT(){return xt.time()}a(TT,"getTimeInfo");async function gT(){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();_.cpu_speed=await xt.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:p,raw_currentload_user:T,cpus:A,...g}=await xt.currentLoad();return g.cpus=[],A.forEach(v=>{let{raw_load:V,raw_load_idle:b,raw_load_irq:I,raw_load_nice:U,raw_load_system:J,raw_load_user:M,...se}=v;g.cpus.push(se)}),_.current_load=g,_}catch(e){return mi.error(`error in getCPUInfo: ${e}`),{}}}a(gT,"getCPUInfo");async function RT(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await xt.mem();return Object.assign(n,process.memoryUsage())}catch(e){return mi.error(`error in getMemoryInfo: ${e}`),{}}}a(RT,"getMemoryInfo");async function AT(){let e={core:[],clustering:[]};try{let t=await xt.processes(),r;try{r=Number.parseInt(await BZ.readFile(HZ.join(wT.get(Kd.CONFIG_PARAMS.ROOTPATH),Kd.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Kd.NODE_ERROR_CODES.ENOENT)mi.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 mi.error(`error in getHDBProcessInfo: ${t}`),e}}a(AT,"getHDBProcessInfo");async function OT(){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,...l}=await xt.fsStats();return e.read_write=l,e.size=await xt.fsSize(),e}catch(t){return mi.error(`error in getDiskInfo: ${t}`),e}}a(OT,"getDiskInfo");async function NT(){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:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await xt.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return mi.error(`error in getNetworkInfo: ${t}`),e}}a(NT,"getNetworkInfo");async function bT(){if(Yd!==void 0)return Yd;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,Yd=e,Yd}catch(t){return mi.error(`error in getSystemInformation: ${t}`),e}}a(bT,"getSystemInformation");async function yT(){let e=[],t=await mU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await FZ(s));return e}a(yT,"getTableSize");async function IT(){let e=await mU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=xZ({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){mi.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(IT,"getMetrics");async function hU(){if(wT.get(Kd.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await qZ.getNATSReferences(),r=await t.streams.info(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(ST.WORK_QUEUE_CONSUMER_NAMES.stream_name,ST.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(hU,"getNatsStreamInfo");async function kZ(e){let t=new GZ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await bT(),t.time=TT(),t.cpu=await gT(),t.memory=await RT(),t.disk=await OT(),t.network=await NT(),t.harperdb_processes=await AT(),t.table_size=await yT(),t.metrics=await IT(),t.threads=await fU(),t.replication=await hU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await bT();break;case"time":t.time=TT();break;case"cpu":t.cpu=await gT();break;case"memory":t.memory=await RT();break;case"disk":t.disk=await OT();break;case"network":t.network=await NT();break;case"harperdb_processes":t.harperdb_processes=await AT();break;case"table_size":t.table_size=await yT();break;case"database_metrics":case"metrics":t.metrics=await IT();break;case"threads":t.threads=await fU();break;case"replication":t.replication=await hU();break;default:break}return t}a(kZ,"systemInformation")});var wn=m((Npe,RU)=>{"use strict";var $Z=Zt(),CT=G(),VZ=require("util"),mo=R(),SU=Y();SU.initSync();var YZ=lT(),TU=Xt(),{Node:Ape,NodeSubscription:Ope}=Oa(),KZ=la(),WZ=iU(),{RemotePayloadObject:QZ,RemotePayloadSubscription:zZ}=Lu(),{handleHDBError:JZ,hdb_errors:jZ}=z(),{HTTP_STATUS_CODES:XZ,HDB_ERROR_MSGS:ZZ}=jZ,e5=us(),t5=In(),r5=Ki(),{getDatabases:s5}=(de(),re(Ie)),n5=VZ.promisify(YZ.authorize),i5=TU.searchByHash,o5=TU.searchByValue;RU.exports={authHeaderToUser:a5,isEmpty:c5,getNodeRecord:u5,upsertNodeRecord:l5,buildNodePayloads:_5,checkClusteringEnabled:d5,getAllNodeRecords:E5,getSystemInfo:f5,reverseSubscription:gU};async function a5(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await n5(t,null),e}a(a5,"authHeaderToUser");function c5(e){return e==null}a(c5,"isEmpty");async function u5(e){let t=new KZ(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return i5(t)}a(u5,"getNodeRecord");async function l5(e){let t=new WZ(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return $Z.upsert(t)}a(l5,"upsertNodeRecord");function gU(e){if(CT.isEmpty(e.subscribe)||CT.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(gU,"reverseSubscription");function _5(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,_=CT.getTableHashAttribute(u,l),{subscribe:d,publish:E}=gU(c),f=s5()[u]?.[l],h=new zZ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new QZ(r,t,n,s)}a(_5,"buildNodePayloads");function d5(){if(!SU.get(mo.CONFIG_PARAMS.CLUSTERING_ENABLED))throw JZ(new Error,ZZ.CLUSTERING_NOT_ENABLED,XZ.BAD_REQUEST,void 0,void 0,!0)}a(d5,"checkClusteringEnabled");async function E5(){let e=new e5(mo.SYSTEM_SCHEMA_NAME,mo.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await o5(e))}a(E5,"getAllNodeRecords");async function f5(){let e=await t5.getSystemInformation();return{hdb_version:r5.version(),node_version:e.node_version,platform:e.platform}}a(f5,"getSystemInfo")});var LT=m((ype,CU)=>{"use strict";var Wd=ze(),AU=G(),OU=Pe(),NU=R(),Qd=C(),bU=Ud(),h5=cu(),{RemotePayloadObject:m5}=Lu(),{handleHDBError:yU,hdb_errors:p5}=z(),{HTTP_STATUS_CODES:IU}=p5,{NodeSubscription:wU}=Oa();CU.exports=S5;async function S5(e,t){let r;try{r=await Wd.request(`${t}.${OU.REQUEST_SUFFIX}`,new m5(NU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),Qd.trace("Response from remote describe all request:",r)}catch(o){Qd.error(`addNode received error from describe all request to remote node: ${o}`);let c=Wd.requestErrorHandler(o,"add_node",t);throw yU(new Error,c,IU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===OU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw yU(new Error,o,IU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===NU.SYSTEM_SCHEMA_NAME){await Wd.createLocalTableStream(c,u);let h=new wU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=AU.doesSchemaExist(c),_=s[c]!==void 0,d=u?AU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(Qd.trace(`addNode creating schema: ${c}`),await bU.createSchema({operation:"create_schema",schema:c})),!d&&E){Qd.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new h5(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await bU.createTable(h)}await Wd.createLocalTableStream(c,u);let f=new wU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(S5,"reviewSubscriptions")});var Mu=m((wpe,UU)=>{"use strict";var{handleHDBError:zd,hdb_errors:T5}=z(),{HTTP_STATUS_CODES:Jd}=T5,{addUpdateNodeValidator:g5}=Gd(),Du=C(),DU=R(),LU=Pe(),R5=G(),DT=ze(),Uu=wn(),A5=Y(),O5=LT(),{Node:N5,NodeSubscription:b5}=Oa(),{broadcast:y5}=rt(),I5="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",w5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",C5=A5.get(DU.CONFIG_PARAMS.CLUSTERING_NODENAME);UU.exports=L5;async function L5(e,t=!1){Du.trace("addNode called with:",e),Uu.checkClusteringEnabled();let r=g5(e);if(r)throw zd(r,r.message,Jd.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Uu.getNodeRecord(s);if(!R5.isEmptyOrZeroLength(d))throw zd(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Jd.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await O5(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=I5,o;let c=Uu.buildNodePayloads(n,C5,DU.OPERATIONS_ENUM.ADD_NODE,await Uu.getSystemInfo());Du.trace("addNode sending remote payload:",c);let u;try{u=await DT.request(`${s}.${LU.REQUEST_SUFFIX}`,c)}catch(d){Du.error(`addNode received error from request: ${d}`);let E=DT.requestErrorHandler(d,"add_node",s);throw zd(new Error,E,Jd.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===LU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw zd(new Error,d,Jd.INTERNAL_SERVER_ERROR,"error",d)}Du.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Du.trace("Add node updating work stream for node:",s,"subscriptions:",f),await DT.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new b5(f.schema,f.table,f.publish,f.subscribe))}let _=new N5(s,l,u.system_info);return await Uu.upsertNodeRecord(_),y5({type:"nats_update"}),i.length>0?o.message=w5:o.message=`Successfully added '${s}' to manifest`,o}a(L5,"addNode")});var MT=m((Lpe,vU)=>{"use strict";var{handleHDBError:jd,hdb_errors:D5}=z(),{HTTP_STATUS_CODES:Xd}=D5,{addUpdateNodeValidator:U5}=Gd(),Pu=C(),PU=R(),MU=Pe(),M5=G(),UT=ze(),vu=wn(),P5=Y(),{cloneDeep:v5}=require("lodash"),B5=LT(),{NodeSubscription:H5}=Oa(),{broadcast:q5}=rt(),F5="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",G5="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",x5=P5.get(PU.CONFIG_PARAMS.CLUSTERING_NODENAME);vU.exports=k5;async function k5(e){Pu.trace("updateNode called with:",e),vu.checkClusteringEnabled();let t=U5(e);if(t)throw jd(t,t.message,Xd.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=v5(await vu.getNodeRecord(r));if(M5.isEmptyOrZeroLength(s))throw jd(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,Xd.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await B5(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=F5,o;let c=vu.buildNodePayloads(n,x5,PU.OPERATIONS_ENUM.UPDATE_NODE,await vu.getSystemInfo());Pu.trace("updateNode sending remote payload:",c);let u;try{u=await UT.request(`${r}.${MU.REQUEST_SUFFIX}`,c)}catch(l){Pu.error(`updateNode received error from request: ${l}`);let _=UT.requestErrorHandler(l,"update_node",r);throw jd(new Error,_,Xd.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===MU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw jd(new Error,l,Xd.INTERNAL_SERVER_ERROR,"error",l)}Pu.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Pu.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await UT.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await $5(s[0],n,u.system_info),i.length>0?o.message=G5:o.message=`Successfully updated '${r}'`,o}a(k5,"updateNode");async function $5(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 H5(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await vu.upsertNodeRecord(s),q5({type:"nats_update"})}a($5,"updateNodeTable")});var GU=m((Upe,FU)=>{"use strict";var qU=require("joi"),{string:BU}=qU.types(),V5=qe(),HU=R(),Y5=Y(),K5=Pe();FU.exports=W5;function W5(e){let t=BU.invalid(Y5.get(HU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(K5.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=qU.object({operation:BU.valid(HU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return V5.validateBySchema(e,r)}a(W5,"removeNodeValidator")});var eE=m((Ppe,KU)=>{"use strict";var{handleHDBError:xU,hdb_errors:Q5}=z(),{HTTP_STATUS_CODES:kU}=Q5,z5=GU(),Bu=C(),$U=wn(),J5=G(),Zd=R(),VU=Pe(),YU=ze(),j5=Y(),{RemotePayloadObject:X5}=Lu(),{NodeSubscription:Z5}=Oa(),e8=au(),t8=ro(),{broadcast:r8}=rt(),s8=j5.get(Zd.CONFIG_PARAMS.CLUSTERING_NODENAME);KU.exports=n8;async function n8(e){Bu.trace("removeNode called with:",e),$U.checkClusteringEnabled();let t=z5(e);if(t)throw xU(t,t.message,kU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await $U.getNodeRecord(r);if(J5.isEmptyOrZeroLength(s))throw xU(new Error,`Node '${r}' was not found.`,kU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new X5(Zd.OPERATIONS_ENUM.REMOVE_NODE,s8,[]),i,o=!1;try{i=await YU.request(`${r}.${VU.REQUEST_SUFFIX}`,n),Bu.trace("Remove node reply from remote node:",r,i)}catch(u){Bu.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Bu.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Z5(_.schema,_.table,!1,!1);await YU.updateWorkStream(d,r)}let c=new e8(Zd.SYSTEM_SCHEMA_NAME,Zd.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await t8.deleteRecord(c),r8({type:"nats_update"}),i?.status===VU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Bu.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(n8,"removeNode")});var zU=m((Bpe,QU)=>{"use strict";var WU=require("joi"),{string:i8,array:o8}=WU.types(),a8=qe(),c8=Gd();QU.exports=u8;function u8(e){let t=WU.object({operation:i8.valid("configure_cluster").required(),connections:o8.items(c8.validation_schema).required()});return a8.validateBySchema(e,t)}a(u8,"configureClusterValidator")});var PT=m((qpe,eM)=>{"use strict";var l8=R(),tE=C(),_8=G(),d8=eE(),E8=Mu(),JU=wn(),f8=zU(),{handleHDBError:jU,hdb_errors:h8}=z(),{HTTP_STATUS_CODES:XU}=h8,m8="Configure cluster complete.",p8="Failed to configure the cluster. Check the logs for more details.",S8="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";eM.exports=T8;async function T8(e){tE.trace("configure cluster called with:",e),JU.checkClusteringEnabled();let t=f8(e);if(t)throw jU(t,t.message,XU.BAD_REQUEST,void 0,void 0,!0);let r=await JU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(ZU(d8,{operation:l8.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);tE.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(ZU(E8,f,f.node_name))}let c=await Promise.allSettled(i);tE.trace("All results from configure_cluster add node:",c);let u=[],l=[],_=!1,d=n.concat(c);for(let E=0,f=d.length;E<f;E++){let h=d[E];h.status==="rejected"&&(tE.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(_8.isEmptyOrZeroLength(u))return{message:m8,connections:l};if(_)return{message:S8,failed_nodes:u,connections:l};throw jU(new Error,p8,XU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(T8,"configureCluster");async function ZU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(ZU,"functionWrapper")});var rM=m((Gpe,tM)=>{"use strict";var rE=require("joi"),g8=qe(),{validateSchemaExists:R8,validateTableExists:A8,validateSchemaName:O8}=Ps(),N8=rE.object({operation:rE.string().valid("purge_stream"),schema:rE.string().custom(R8).custom(O8).required(),table:rE.string().custom(A8).required()});function b8(e){return g8.validateBySchema(e,N8)}a(b8,"purgeStreamValidator");tM.exports=b8});var vT=m((kpe,sM)=>{"use strict";var{handleHDBError:y8,hdb_errors:I8}=z(),{HTTP_STATUS_CODES:w8}=I8,C8=rM(),L8=ze(),D8=wn();sM.exports=U8;async function U8(e){let t=C8(e);if(t)throw y8(t,t.message,w8.BAD_REQUEST,void 0,void 0,!0);D8.checkClusteringEnabled();let{schema:r,table:s}=e;return await L8.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(U8,"purgeStream")});var nE=m((Vpe,uM)=>{"use strict";var HT=wn(),M8=ze(),oM=Y(),sE=R(),po=Pe(),P8=G(),BT=C(),{RemotePayloadObject:v8}=Lu(),{ErrorCode:nM}=require("nats"),iM=oM.get(sE.CONFIG_PARAMS.CLUSTERING_ENABLED),aM=oM.get(sE.CONFIG_PARAMS.CLUSTERING_NODENAME);uM.exports={clusterStatus:B8,buildNodeStatus:cM};async function B8(){let e={node_name:aM,is_enabled:iM,connections:[]};if(!iM)return e;let t=await HT.getAllNodeRecords();if(P8.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(cM(t[s],e.connections));return await Promise.allSettled(r),e}a(B8,"clusterStatus");async function cM(e,t){let r=e.name,s=new v8(sE.OPERATIONS_ENUM.CLUSTER_STATUS,aM,void 0,await HT.getSystemInfo()),n,i,o=po.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await M8.request(po.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===po.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=po.CLUSTER_STATUS_STATUSES.CLOSED,BT.error(`Error getting node status from ${r} `,n))}catch(u){BT.warn(`Error getting node status from ${r}`,u),u.code===nM.NoResponders?o=po.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===nM.Timeout?o=po.CLUSTER_STATUS_STATUSES.TIMEOUT:o=po.CLUSTER_STATUS_STATUSES.CLOSED}let c=new H8(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 HT.upsertNodeRecord(u)}catch(u){BT.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(cM,"buildNodeStatus");function H8(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(H8,"NodeStatusObject")});var oE=m((Kpe,lM)=>{"use strict";var{handleHDBError:q8,hdb_errors:F8}=z(),{HTTP_STATUS_CODES:G8}=F8,x8=ze(),k8=wn(),qT=G(),iE=require("joi"),$8=qe(),V8=2e3,Y8=iE.object({timeout:iE.number().min(1),connected_nodes:iE.boolean(),routes:iE.boolean()});lM.exports=K8;async function K8(e){k8.checkClusteringEnabled();let t=$8.validateBySchema(e,Y8);if(t)throw q8(t,t.message,G8.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||qT.autoCastBoolean(s),o=n===void 0||qT.autoCastBoolean(n),c={nodes:[]},u=await x8.getServerList(r??V8),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:qT.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(K8,"clusterNetwork")});var fM=m((Qpe,EM)=>{"use strict";var FT=require("joi"),_M=qe(),{route_constraints:dM}=Ep();EM.exports={setRoutesValidator:W8,deleteRoutesValidator:Q8};function W8(e){let t=FT.object({server:FT.valid("hub","leaf").required(),routes:dM.required()});return _M.validateBySchema(e,t)}a(W8,"setRoutesValidator");function Q8(e){let t=FT.object({routes:dM.required()});return _M.validateBySchema(e,t)}a(Q8,"deleteRoutesValidator")});var cE=m((Jpe,SM)=>{"use strict";var So=tt(),GT=G(),aE=R(),hM=fM(),{handleHDBError:mM,hdb_errors:z8}=z(),{HTTP_STATUS_CODES:pM}=z8,J8="cluster routes successfully set",j8="cluster routes successfully deleted";SM.exports={setRoutes:X8,getRoutes:Z8,deleteRoutes:e6};function X8(e){let t=hM.setRoutesValidator(e);if(t)throw mM(t,t.message,pM.BAD_REQUEST,void 0,void 0,!0);let r=So.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=GT.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?So.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):So.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:J8,set:o,skipped:i}}a(X8,"setRoutes");function Z8(){let e=So.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Z8,"getRoutes");function e6(e){let t=hM.deleteRoutesValidator(e);if(t)throw mM(t,t.message,pM.BAD_REQUEST,void 0,void 0,!0);let r=So.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],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=GT.isEmptyOrZeroLength(s)?null:s,So.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=GT.isEmptyOrZeroLength(n)?null:n,So.updateConfigValue(aE.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:j8,deleted:i,skipped:o}}a(e6,"deleteRoutes")});var gM=m((Xpe,TM)=>{"use strict";var Hu=require("alasql"),To=require("recursive-iterator"),hs=C(),t6=G(),qu=R(),xT=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,s6(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=>qu.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=>!qu.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][qu.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=r6(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=>!qu.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Hu.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 r6(e){return e.filter(t=>t[qu.PERMS_CRUD_ENUM.READ])}a(r6,"filterReadRestrictedAttrs");function s6(e,t,r,s,n){n6(e,t,r,s,n)}a(s6,"interpretAST");function Fu(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(Fu,"addSchemaTableToMap");function n6(e,t,r,s,n){if(!e){hs.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Hu.yy.Insert?c6(e,t,r):e instanceof Hu.yy.Select?i6(e,t,r,s,n):e instanceof Hu.yy.Update?o6(e,t,r):e instanceof Hu.yy.Delete?a6(e,t,r):hs.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(n6,"getRecordAttributesAST");function i6(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(t6.isEmptyOrZeroLength(i)){hs.error("No schema specified");return}e.from.forEach(c=>{Fu(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Fu(c.table,t,r,s,n)});let o=new To(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 To(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 To(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 To(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(i6,"getSelectAttributes");function o6(e,t,r){if(!e){hs.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new To(e.columns),n=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(o6,"getUpdateAttributes");function a6(e,t,r){if(!e){hs.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new To(e.where),n=e.table.databaseid;Fu(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.table.tableid,n,i.columnid,t,r)}a(a6,"getDeleteAttributes");function c6(e,t,r){if(!e){hs.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new To(e.columns),n=e.into.databaseid;Fu(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&kT(e.into.tableid,n,i.columnid,t,r)}a(c6,"getInsertAttributes");function kT(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(kT,"pushAttribute");TM.exports=xT});var lE=m((eSe,NM)=>{var uE=jc(),RM=require("chalk"),Lr=C(),AM=require("prompt"),{promisify:u6}=require("util"),$T=R(),l6=require("fs-extra"),_6=require("path"),d6=G(),E6=Ki(),OM=Y();OM.initSync();var f6=require("moment"),h6=u6(AM.get),m6=_6.join(OM.getHdbBasePath(),$T.LICENSE_KEY_DIR_NAME,$T.LICENSE_FILE_NAME,$T.LICENSE_FILE_NAME);NM.exports={getFingerprint:S6,setLicense:p6,parseLicense:VT,register:T6,getRegistrationInfo:R6};async function p6(e){if(e&&e.key&&e.company){try{Lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await VT(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw Lr.error(r),Lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(p6,"setLicense");async function S6(){let e={};try{e=await uE.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw Lr.error(r),Lr.error(t),new Error(r)}return e}a(S6,"getFingerprint");async function VT(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");Lr.info("Validating license input...");let r=uE.validateLicense(e,t);if(Lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(Lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(Lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{Lr.info("writing license to disk"),await l6.writeFile(m6,JSON.stringify({license_key:e,company:t}))}catch(s){throw Lr.error("Failed to write License"),s}return"Registration successful."}a(VT,"parseLicense");async function T6(){let e=await g6();return VT(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(T6,"register");async function g6(){let e=await uE.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:RM.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:RM.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{AM.start()}catch(s){Lr.error(s)}let r;try{r=await h6(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(g6,"promptForRegistration");async function R6(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await uE.getLicense()}catch(r){throw Lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(d6.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=E6.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=f6.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(R6,"getRegistrationInfo")});var yM=m((rSe,bM)=>{"use strict";var A6=Pe(),YT=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+A6.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:E,tls:{cert_file:n,key_file:i,ca_file:o,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};bM.exports=YT});var CM=m((nSe,wM)=>{"use strict";var IM=Pe(),KT=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+IM.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+IM.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"}};wM.exports=KT});var DM=m((oSe,LM)=>{"use strict";var WT=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};LM.exports=WT});var MM=m((cSe,UM)=>{"use strict";var O6=Pe(),QT=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+O6.SERVER_SUFFIX.ADMIN,this.password=r}};UM.exports=QT});var pE=m((lSe,BM)=>{"use strict";var Gu=require("path"),fE=require("fs-extra"),N6=yM(),b6=CM(),y6=DM(),I6=MM(),zT=tr(),Na=G(),ur=tt(),EE=R(),_E=Pe(),{CONFIG_PARAMS:it}=EE,ku=C(),hE=Y(),PM=Tn(),JT=ze(),xu="clustering",w6=1e4,vM=5;BM.exports={generateNatsConfig:C6,removeNatsConfig:L6};async function C6(e=!1,t=void 0){hE.initSync();let r=hE.get(it.ROOTPATH),s=Gu.join(r,xu,_E.PID_FILES.HUB),n=Gu.join(r,xu,_E.PID_FILES.LEAF),i=ur.getConfigFromFile(it.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Gu.join(r,xu,_E.NATS_CONFIG_FILES.HUB_SERVER),c=Gu.join(r,xu,_E.NATS_CONFIG_FILES.LEAF_SERVER),u=ur.getConfigFromFile(it.CLUSTERING_TLS_CERTIFICATE),l=ur.getConfigFromFile(it.CLUSTERING_TLS_PRIVATEKEY),_=ur.getConfigFromFile(it.CLUSTERING_TLS_CERT_AUTH),d=ur.getConfigFromFile(it.CLUSTERING_TLS_INSECURE),E=ur.getConfigFromFile(it.CLUSTERING_TLS_VERIFY),f=ur.getConfigFromFile(it.CLUSTERING_NODENAME),h=ur.getConfigFromFile(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await JT.checkNATSServerInstalled()||mE("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await zT.listUsers(),T=ur.getConfigFromFile(it.CLUSTERING_USER),A=await zT.getClusterUser();(Na.isEmpty(A)||A.active!==!0)&&mE(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await dE(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await dE(it.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await dE(it.CLUSTERING_HUBSERVER_NETWORK_PORT),await dE(it.CLUSTERING_LEAFSERVER_NETWORK_PORT));let g=[],v=[];for(let[se,ye]of p.entries())ye.role.role===EE.ROLE_TYPES_ENUM.CLUSTER_USER&&ye.active&&(g.push(new I6(ye.username,PM.decrypt(ye.hash))),v.push(new y6(ye.username,PM.decrypt(ye.hash))));let V=[],{hub_routes:b}=ur.getClusteringRoutes();if(!Na.isEmptyOrZeroLength(b))for(let se of b)V.push(`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@${se.host}:${se.port}`);let I=new N6(ur.getConfigFromFile(it.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,ur.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NAME),ur.getConfigFromFile(it.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),V,g,v);_==null&&(delete I.tls.ca_file,delete I.leafnodes.tls.ca_file),t=Na.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===EE.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await fE.writeJson(o,I),ku.trace(`Hub server config written to ${o}`));let U=`tls://${A.sys_name_encoded}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,J=`tls://${A.uri_encoded_name}:${A.uri_encoded_d_hash}@0.0.0.0:${h}`,M=new b6(ur.getConfigFromFile(it.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[U],[J],g,v,u,l,_,d);_==null&&delete M.tls.ca_file,(t===void 0||t===EE.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await fE.writeJson(c,M),ku.trace(`Leaf server config written to ${c}`))}a(C6,"generateNatsConfig");async function dE(e){let t=hE.get(e);return Na.isEmpty(t)&&mE(`port undefined for '${e}'`),await Na.isPortTaken(t)&&mE(`'${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(dE,"isPortAvailable");function mE(e){let t=`Error generating clustering config: ${e}`;ku.error(t),console.error(t),process.exit(1)}a(mE,"generateNatsConfigError");async function L6(e){let{port:t,config_file:r}=JT.getServerConfig(e),{username:s,decrypt_hash:n}=await zT.getClusterUser(),i=0,o=500;for(;i<vM;){try{let l=await JT.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){ku.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=vM)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await Na.async_set_timeout(o*i)}let c="0".repeat(w6),u=Gu.join(hE.get(it.ROOTPATH),xu,r);await fE.writeFile(u,c),await fE.remove(u),ku.notify(e,"started.")}a(L6,"removeNatsConfig")});var kM=m((dSe,xM)=>{"use strict";var Dr=Y(),D6=jc(),ue=R(),$u=Pe(),Cn=require("path"),{PACKAGE_ROOT:TE}=R(),HM=Y(),SE=G(),ba="/dev/null",U6=Cn.join(TE,"launchServiceScripts"),qM=Cn.join(TE,"utility/scripts"),M6=Cn.join(qM,ue.HDB_RESTART_SCRIPT),FM=Cn.resolve(TE,"dependencies",`${process.platform}-${process.arch}`,$u.NATS_BINARY_NAME);function GM(){let t=D6.licenseSearch().ram_allocation||ue.RAM_ALLOCATION_ENUM.DEFAULT,r=ue.MEM_SETTING_KEY+t,s={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return SE.noBootFile()&&(s[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=SE.getEnvCliRootPath()),{name:ue.PROCESS_DESCRIPTORS.HDB,script:ue.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:TE}}a(GM,"generateMainServerConfig");var P6=9930;function v6(){Dr.initSync(!0);let e=Dr.get(ue.CONFIG_PARAMS.ROOTPATH),t=Cn.join(e,"clustering",$u.NATS_CONFIG_FILES.HUB_SERVER),r=Cn.join(Dr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=HM.get(ue.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=$u.LOG_LEVEL_FLAGS[Dr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==P6?"-"+s:""),script:FM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ba,i.error_file=ba),i}a(v6,"generateNatsHubServerConfig");var B6=9940;function H6(){Dr.initSync(!0);let e=Dr.get(ue.CONFIG_PARAMS.ROOTPATH),t=Cn.join(e,"clustering",$u.NATS_CONFIG_FILES.LEAF_SERVER),r=Cn.join(Dr.get(ue.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ue.LOG_NAMES.HDB),s=HM.get(ue.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=$u.LOG_LEVEL_FLAGS[Dr.get(ue.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==B6?"-"+s:""),script:FM,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return Dr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ba,i.error_file=ba),i}a(H6,"generateNatsLeafServerConfig");function q6(){Dr.initSync();let e=Cn.join(Dr.get(ue.CONFIG_PARAMS.LOGGING_ROOT),ue.LOG_NAMES.HDB),t={name:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ue.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:U6,autorestart:!1};return Dr.get(ue.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ba,t.error_file=ba),t}a(q6,"generateClusteringUpgradeV4ServiceConfig");function F6(){let e={[ue.PROCESS_NAME_ENV_PROP]:ue.PROCESS_DESCRIPTORS.RESTART_HDB};return SE.noBootFile()&&(e[ue.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=SE.getEnvCliRootPath()),{...{name:ue.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:qM},script:M6}}a(F6,"generateRestart");function G6(){return{apps:[GM()]}}a(G6,"generateAllServiceConfigs");xM.exports={generateAllServiceConfigs:G6,generateMainServerConfig:GM,generateRestart:F6,generateNatsHubServerConfig:v6,generateNatsLeafServerConfig:H6,generateClusteringUpgradeV4ServiceConfig:q6}});var ya=m((TSe,rP)=>{"use strict";var Oe=R(),x6=G(),Vu=pE(),Yu=ze(),ks=Pe(),pi=kM(),gE=Y(),Ln=C(),k6=wn(),{startWorker:$M,onMessageFromWorkers:$6}=rt(),V6=In(),Y6=require("util"),YM=require("child_process"),{execFile:K6}=YM,fSe=Y6.promisify(YM.exec),hSe=require("systeminformation"),pe;rP.exports={enterPM2Mode:W6,start:go,stop:jT,reload:KM,restart:WM,list:XT,describe:zM,connect:Dn,kill:X6,startAllServices:Z6,startService:ZT,getUniqueServicesList:JM,restartAllServices:e9,isServiceRegistered:jM,reloadStopStart:XM,restartHdb:QM,deleteProcess:J6,startClusteringProcesses:eP,startClusteringThreads:tP,isHdbRestartRunning:j6,isClusteringRunning:r9,stopClustering:t9,reloadClustering:s9};var{PACKAGE_ROOT:mSe}=R(),pSe=R(),{loggerWithTag:SSe}=Ln,Ku=!1;$6(e=>{e.type==="restart"&&gE.initSync(!0)});function W6(){Ku=!0}a(W6,"enterPM2Mode");function Dn(){return pe||(pe=require("pm2")),new Promise((e,t)=>{pe.connect((r,s)=>{Ln.setupConsoleLogging(),r&&t(r),e(s)})})}a(Dn,"connect");var lr,Q6=10,VM;function go(e){if(Ku)return z6(e);let t=K6(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=lr.indexOf(t);i>-1&&lr.splice(i,1),!VM&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Q6&&go(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=gE.get(Oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ks.LOG_LEVEL_HIERARCHY[i]>=ks.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ks.LOG_LEVELS.ERR||l===ks.LOG_LEVELS.WRN?Ln.OUTPUTS.STDERR:Ln.OUTPUTS.STDOUT;Ln.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ks.LOG_LEVELS[d]}if(ks.LOG_LEVEL_HIERARCHY[i]>=ks.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ks.LOG_LEVELS.ERR||l===ks.LOG_LEVELS.WRN?Ln.OUTPUTS.STDERR:Ln.OUTPUTS.STDOUT;Ln.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!lr){lr=[];let n=a(()=>{VM=!0,lr&&(lr.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)}lr.push(t)}a(go,"start");function z6(e){return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.start(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(z6,"startWithPM2");function jT(e){if(!Ku){for(let t of lr||[])t.name===e&&(lr.splice(lr.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.stop(e,async(s,n)=>{s&&(pe.disconnect(),r(s)),pe.delete(e,(i,o)=>{i&&(pe.disconnect(),r(s)),pe.disconnect(),t(o)})})})}a(jT,"stop");function KM(e){return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.reload(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(KM,"reload");function WM(e){if(!Ku)for(let t of lr||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.restart(e,(s,n)=>{pe.disconnect(),t(n)})})}a(WM,"restart");function J6(e){return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.delete(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(J6,"deleteProcess");async function QM(){await go(pi.generateRestart())}a(QM,"restartHdb");async function j6(){let e=await XT();for(let t in e)if(e[t].name===Oe.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(j6,"isHdbRestartRunning");function XT(){return new Promise(async(e,t)=>{try{await Dn()}catch(r){t(r)}pe.list((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(XT,"list");function zM(e){return new Promise(async(t,r)=>{try{await Dn()}catch(s){r(s)}pe.describe(e,(s,n)=>{s&&(pe.disconnect(),r(s)),pe.disconnect(),t(n)})})}a(zM,"describe");function X6(){if(!Ku){for(let e of lr||[])e.kill();lr=[];return}return new Promise(async(e,t)=>{try{await Dn()}catch(r){t(r)}pe.killDaemon((r,s)=>{r&&(pe.disconnect(),t(r)),pe.disconnect(),e(s)})})}a(X6,"kill");async function Z6(){try{await eP(),await tP(),await go(pi.generateAllServiceConfigs())}catch(e){throw pe.disconnect(),e}}a(Z6,"startAllServices");async function ZT(e){try{let t;switch(e=e.toLowerCase(),e){case Oe.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=pi.generateMainServerConfig();break;case Oe.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=pi.generateNatsIngestServiceConfig();break;case Oe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=pi.generateNatsReplyServiceConfig();break;case Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=pi.generateNatsHubServerConfig(),await go(t),await Vu.removeNatsConfig(e);return;case Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=pi.generateNatsLeafServerConfig(),await go(t),await Vu.removeNatsConfig(e);return;case Oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=pi.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await go(t)}catch(t){throw pe.disconnect(),t}}a(ZT,"startService");async function JM(){try{let e=await XT(),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 pe.disconnect(),e}}a(JM,"getUniqueServicesList");async function e9(e=[]){try{let t=!1,r=await JM();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Oe.PROCESS_DESCRIPTORS.HDB?t=!0:await WM(o))}t&&await XM(Oe.PROCESS_DESCRIPTORS.HDB)}catch(t){throw pe.disconnect(),t}}a(e9,"restartAllServices");async function jM(e){if(lr?.find(r=>r.name===e))return!0;let t=await V6.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(jM,"isServiceRegistered");async function XM(e){let t=e===Oe.PROCESS_DESCRIPTORS.HDB?gE.get(Oe.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):gE.get(Oe.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await zM(e),s=x6.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await jT(e),await ZT(e)):e===Oe.PROCESS_DESCRIPTORS.HDB?await QM():await KM(e)}a(XM,"reloadStopStart");var ZM;async function eP(){for(let e in Oe.CLUSTERING_PROCESSES){let t=Oe.CLUSTERING_PROCESSES[e];await ZT(t)}}a(eP,"startClusteringProcesses");async function tP(){ZM=$M(Oe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Oe.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Yu.createWorkQueueStream(ks.WORK_QUEUE_CONSUMER_NAMES),await Yu.updateIngestStreamConsumer(),await Yu.updateLocalStreams();let e=await k6.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Oe.PRE_4_0_0_VERSION){Ln.info("Starting clustering upgrade 4.0.0 process"),$M(Oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(tP,"startClusteringThreads");async function t9(){for(let e in Oe.CLUSTERING_PROCESSES)if(e!==Oe.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Oe.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await ZM.terminate();else{let t=Oe.CLUSTERING_PROCESSES[e];await jT(t)}}a(t9,"stopClustering");async function r9(){for(let e in Oe.CLUSTERING_PROCESSES){let t=Oe.CLUSTERING_PROCESSES[e];if(await jM(t)===!1)return!1}return!0}a(r9,"isClusteringRunning");async function s9(){await Vu.generateNatsConfig(!0),await Yu.reloadNATSHub(),await Yu.reloadNATSLeaf(),await Vu.removeNatsConfig(Oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Vu.removeNatsConfig(Oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(s9,"reloadClustering")});var wa=m((RSe,cP)=>{"use strict";var n9=require("minimist"),{isMainThread:rg,parentPort:iP}=require("worker_threads"),$e=R(),{PROCESS_DESCRIPTORS_VALIDATE:Wu}=$e,$s=C(),sg=G(),RE=pE(),Ia=ze(),eg=Pe(),oP=tt(),Vs=ya(),sP=In(),i9=$i(),{restartWorkers:AE,onMessageByType:o9}=rt(),{handleHDBError:a9,hdb_errors:c9}=z(),{HTTP_STATUS_CODES:u9}=c9,OE=Y();OE.initSync();var Qu=`Restarting HarperDB. This may take up to ${$e.RESTART_TIMEOUT_MS/1e3} seconds.`,l9="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nP="Clustering is not enabled so cannot be restarted",_9="Invalid service",Ro,ms;cP.exports={restart:aP,restartService:ng};rg&&o9($e.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?ng({service:e.workerType}):aP({operation:"restart"})});async function aP(e){ms=Object.keys(e).length===0,Ro=await Vs.isServiceRegistered($e.HDB_PROC_DESCRIPTOR);let t=n9(process.argv);if(t.service){await ng(t);return}if(ms&&!Ro){console.error(l9);return}if(ms&&console.log(Qu),Ro){Vs.enterPM2Mode(),$s.notify(Qu);let r=i9(Object.keys($e.CONFIG_PARAM_MAP),!0);return sg.isEmptyOrZeroLength(Object.keys(r))||oP.updateConfigValue(void 0,void 0,r,!0,!0),E9(),Qu}return rg?($s.notify(Qu),await ig(),setTimeout(()=>{AE()},50)):iP.postMessage({type:$e.ITC_EVENT_TYPES.RESTART}),Qu}a(aP,"restart");async function ng(e){let{service:t}=e;if($e.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw a9(new Error,_9,u9.BAD_REQUEST,void 0,void 0,!0);if(Ro=await Vs.isServiceRegistered($e.HDB_PROC_DESCRIPTOR),!rg)return iP.postMessage({type:$e.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Wu.clustering:if(!OE.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nP;break}ms&&console.log("Restarting clustering"),$s.notify("Restarting clustering"),await ig();break;case Wu.clustering_config:case Wu["clustering config"]:if(!OE.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nP;break}ms&&console.log("Restarting clustering_config"),$s.notify("Restarting clustering_config"),await Vs.reloadClustering();break;case"custom_functions":case"custom functions":case Wu.harperdb:case Wu.http_workers:if(ms&&!Ro){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}ms&&console.log("Restarting http_workers"),$s.notify("Restarting http_workers"),Ro?await Vs.restart($e.HDB_PROC_DESCRIPTOR):setTimeout(()=>{AE("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?($s.error(r),ms&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(ng,"restartService");async function d9(){await Ia.publishToStream(`${eg.SUBJECT_PREFIXES.TXN}.${eg.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,eg.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ia.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(d9,"postDummyNatsMsg");async function E9(){await ig(),await Vs.restart($e.HDB_PROC_DESCRIPTOR),await sg.async_set_timeout(2e3),OE.get($e.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await tg(),ms&&(await Ia.closeConnection(),process.exit(0))}a(E9,"restartPM2Mode");async function ig(){if(!oP.getConfigFromFile($e.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sP.getHDBProcessInfo()).clustering.length===0)$s.trace("Clustering not running, restart will start clustering services"),await RE.generateNatsConfig(!0),await Vs.startClusteringProcesses(),await Vs.startClusteringThreads(),await tg(),ms&&await Ia.closeConnection();else{await d9(),await RE.generateNatsConfig(!0),Ro?($s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Vs.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Vs.restart($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await sP.getHDBProcessInfo()).clustering.forEach(n=>{$s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await sg.async_set_timeout(3e3),await tg(),await Ia.updateLocalStreams(),ms&&await Ia.closeConnection(),$s.trace("Restart clustering restarting ingest and reply service threads");let t=AE($e.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=AE($e.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(ig,"restartClustering");async function tg(){await RE.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await RE.removeNatsConfig($e.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(tg,"removeNatsConfig")});var TP=m((NSe,SP)=>{"use strict";var OSe=require("lodash"),_r=R(),{handleHDBError:uP,hdb_errors:f9}=z(),{HDB_ERROR_MSGS:h9,HTTP_STATUS_CODES:m9}=f9,og=C();SP.exports={getRolePermissions:S9};var Ao=Object.create(null),p9=a(e=>({key:e,perms:{}}),"perms_template_obj"),EP=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),fP=a((e=!1,t=!1,r=!1,s=!1)=>({[_r.PERMS_CRUD_ENUM.READ]:e,[_r.PERMS_CRUD_ENUM.INSERT]:t,[_r.PERMS_CRUD_ENUM.UPDATE]:r,[_r.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),ag=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...fP(t,r,s,n)}),"table_perms_template"),lP=a((e,t=fP())=>({attribute_name:e,describe:pP(t),[zu]:t[zu],[cg]:t[cg],[ug]:t[ug]}),"attr_perms_template"),_P=a((e,t=!1)=>({attribute_name:e,describe:t,[zu]:t}),"timestamp_attr_perms_template"),{READ:zu,INSERT:cg,UPDATE:ug}=_r.PERMS_CRUD_ENUM,hP=Object.values(_r.PERMS_CRUD_ENUM),mP=[zu,cg,ug];function S9(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[_r.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ao[t]&&Ao[t].key===s)return Ao[t].perms;let n=T9(e,r);return Ao[t]?Ao[t].key=s:Ao[t]=p9(s),Ao[t].perms=n,n}catch(r){if(!e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[_r.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<_r.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 og.error(s),og.debug(r),uP(new Error,h9.OUTDATED_PERMS_TRANSLATION_ERROR,m9.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
10
+ ${r.stack}`;throw og.error(s),uP(new Error)}}}a(S9,"getRolePermissions");function T9(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[_r.SYSTEM_SCHEMA_NAME]=s[_r.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]=g9(t[i]);return}r[i]=EP(),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=R9(c,u);r[i].describe||hP.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=ag()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=ag()})}),r}a(T9,"translateRolePermissions");function g9(e){let t=EP(!0);return Object.keys(e).forEach(r=>{t.tables[r]=ag(!0,!0,!0,!0,!0)}),t}a(g9,"createStructureUserPermissions");function R9(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}=_,E=_;return _r.TIME_STAMP_NAMES.includes(d)&&(E=_P(d,_[zu])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=lP(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=pP(_),n.attribute_permissions.push(_),c||A9(_,u)}else if(l!==o){let _;_r.TIME_STAMP_NAMES.includes(l)?_=_P(l):_=lP(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=dP(n),n}else return e.describe=dP(e),e}a(R9,"getTableAttrPerms");function dP(e){return hP.filter(t=>e[t]).length>0}a(dP,"getSchemaTableDescribePerm");function pP(e){return mP.filter(t=>e[t]).length>0}a(pP,"getAttributeDescribePerm");function A9(e,t){mP.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(A9,"checkForHashPerms")});var gP={};We(gP,{Resources:()=>NE,keyArrayToString:()=>Ca,resetResources:()=>O9,resources:()=>Si});function O9(){return Si=new NE}function Ca(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var NE,Si,Ju=ge(()=>{Qi();NE=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(O9,"resetResources");a(Ca,"keyArrayToString")});var RP={};We(RP,{Headers:()=>Ti});var Ti,bE=ge(()=>{Ti=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 ju={};We(ju,{authentication:()=>IP,login:()=>U9,logout:()=>M9,start:()=>D9});async function IP(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?I9?y9:[]:b9?N9:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Ti([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return yE&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),yE&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(yE){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,p===-1?n.length:p),u=await OP.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let T=new CE.AuthAuditLog(f,h,Lt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=p,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Lt.AUTH_AUDIT_STATUS.SUCCESS?AP.notify(T):AP.error(T)},"authAuditLog"),_;if(s){if(_=La.get(s),!_){let[f,h]=s.split(" "),p,T;try{switch(f){case"Basic":[p,T]=atob(h).split(":"),_=p||T?await Et.auth(p,T):null;break;case"Bearer":try{_=await(0,wE.validateOperationToken)(h)}catch(A){if(A.message==="invalid token")try{return await(0,wE.validateRefreshToken)(h),{status:-1}}catch{throw A}}break}}catch(A){return L9&&(La.get(h)||(La.set(h,h),l(p,Lt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Un({error:A.message},e)}}La.set(s,_),C9&&l(_.username,Lt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await Et.auth(u.user,null,!1):w9&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,IE.getSuperUser)());yE&&(e.session.update=function(f){if(!c){c=(0,bP.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 f.id=c,OP.put(f)},e.login=async function(f,h){e.user=await Et.auth(f,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")&&Si.loginPath?(d.status=302,d.headers.set("Location",Si.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new Ti);for(let h=0;h<E;){let p=o[h++];f.set(p,o[h++])}}return o=null,d}function D9({server:e,port:t}){e.request(IP,{port:t||"all"}),NP||(NP=!0,setInterval(()=>{La=new Map},Jr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),yP.user.addListener(()=>{La=new Map}))}async function U9(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 M9(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var IE,wE,bP,Jr,Lt,CE,yP,AP,N9,b9,y9,I9,OP,yE,w9,C9,L9,La,NP,LE=ge(()=>{IE=D(tr());ns();Ju();wE=D(Cu());de();bP=require("uuid"),Jr=D(Y()),Lt=D(R()),CE=D(C());Da();yP=D(Zc());bE();AP=(0,CE.loggerWithTag)("auth-event");Jr.initSync();N9=Jr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),b9=Jr.get(Lt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),y9=Jr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),I9=Jr.get(Lt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);Et.auth=IE.findAndValidateUser;OP=ft({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),yE=Jr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,w9=Jr.get(Lt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,C9=Jr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,L9=Jr.get(Lt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,La=new Map;a(IP,"authentication");a(D9,"start");a(U9,"login");a(M9,"logout")});var PP=m((vSe,MP)=>{"use strict";var Se=require("joi"),wP=require("fs-extra"),CP=require("path"),Pn=qe(),LP=Y(),DP=R(),UP=C(),{hdb_errors:P9}=z(),{HDB_ERROR_MSGS:kt}=P9,Mn=/^[a-zA-Z0-9-_]+$/;MP.exports={getDropCustomFunctionValidator:B9,setCustomFunctionValidator:H9,addComponentValidator:x9,dropCustomFunctionProjectValidator:k9,packageComponentValidator:$9,deployComponentValidator:V9,setComponentFileValidator:q9,getComponentFileValidator:G9,dropComponentFileValidator:F9};function DE(e,t,r){try{let s=LP.get(DP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=CP.join(s,t);return wP.existsSync(n)?e?t:r.message(kt.PROJECT_EXISTS):e?r.message(kt.NO_PROJECT):t}catch(s){return UP.error(s),r.message(kt.VALIDATION_ERR)}}a(DE,"checkProjectExists");function Xu(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Xu,"checkFilePath");function v9(e,t,r,s){try{let n=LP.get(DP.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=CP.join(n,e,t,r+".js");return wP.existsSync(i)?r:s.message(kt.NO_FILE)}catch(n){return UP.error(n),s.message(kt.VALIDATION_ERR)}}a(v9,"checkFileExists");function B9(e){let t=Se.object({project:Se.string().pattern(Mn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().pattern(Mn).custom(v9.bind(null,e.project,e.type)).custom(Xu).required().messages({"string.pattern.base":kt.BAD_FILE_NAME})});return Pn.validateBySchema(e,t)}a(B9,"getDropCustomFunctionValidator");function H9(e){let t=Se.object({project:Se.string().pattern(Mn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),type:Se.string().valid("helpers","routes").required(),file:Se.string().custom(Xu).required(),function_content:Se.string().required()});return Pn.validateBySchema(e,t)}a(H9,"setCustomFunctionValidator");function q9(e){let t=Se.object({project:Se.string().pattern(Mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Xu).required(),payload:Se.string().allow("").optional(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Pn.validateBySchema(e,t)}a(q9,"setComponentFileValidator");function F9(e){let t=Se.object({project:Se.string().pattern(Mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),file:Se.string().custom(Xu).optional()});return Pn.validateBySchema(e,t)}a(F9,"dropComponentFileValidator");function G9(e){let t=Se.object({project:Se.string().required(),file:Se.string().custom(Xu).required(),encoding:Se.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Pn.validateBySchema(e,t)}a(G9,"getComponentFileValidator");function x9(e){let t=Se.object({project:Se.string().pattern(Mn).custom(DE.bind(null,!1)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Pn.validateBySchema(e,t)}a(x9,"addComponentValidator");function k9(e){let t=Se.object({project:Se.string().pattern(Mn).custom(DE.bind(null,!0)).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME})});return Pn.validateBySchema(e,t)}a(k9,"dropCustomFunctionProjectValidator");function $9(e){let t=Se.object({project:Se.string().pattern(Mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),skip_node_modules:Se.boolean()});return Pn.validateBySchema(e,t)}a($9,"packageComponentValidator");function V9(e){let t=Se.object({project:Se.string().pattern(Mn).required().messages({"string.pattern.base":kt.BAD_PROJECT_NAME}),payload:Se.string().optional().messages({"string.pattern.base":kt.BAD_PACKAGE}),package:Se.string().optional()});return Pn.validateBySchema(e,t)}a(V9,"deployComponentValidator")});var ME=m((HSe,HP)=>{"use strict";var Le=require("fs-extra"),lg=require("fast-glob"),Te=require("path"),vP=require("tar-fs"),Y9=require("uuid").v4,_g=require("normalize-path"),Ys=PP(),Dt=C(),Me=R(),je=Y(),UE=tt(),K9=G(),{PACKAGE_ROOT:W9}=R(),{handleHDBError:mt,hdb_errors:Q9}=z(),{HDB_ERROR_MSGS:gi,HTTP_STATUS_CODES:pt}=Q9,z9=Te.join(W9,"application-template"),dg=Te.join(je.get(Me.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function BP(){let e=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw mt(new Error,gi.NOT_ENABLED,pt.BAD_REQUEST,void 0,void 0,!0)}a(BP,"isCFEnabled");function J9(){Dt.trace("getting custom api status");let e={};try{e={is_enabled:je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw mt(new Error,gi.FUNCTION_STATUS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,t)}return e}a(J9,"customFunctionsStatus");function j9(){Dt.trace("getting custom api endpoints");let e={},t=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{lg.sync(_g(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:lg.sync(_g(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:lg.sync(_g(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw mt(new Error,gi.GET_FUNCTIONS,pt.INTERNAL_SERVER_ERROR,Dt.ERR,r)}return e}a(j9,"getCustomFunctions");function X9(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Ys.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("getting custom api endpoint file content");let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Te.join(r,s,n,i+".js");try{return Le.readFileSync(o,{encoding:"utf8"})}catch(c){throw mt(new Error,gi.GET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(X9,"getCustomFunction");function Z9(e){BP(),e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Ys.setCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("setting custom function file content");let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return Le.outputFileSync(Te.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw mt(new Error,gi.SET_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,c)}}a(Z9,"setCustomFunction");function e7(e){e.project&&(e.project=Te.parse(e.project).name),e.file&&(e.file=Te.parse(e.file).name);let t=Ys.getDropCustomFunctionValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function file");let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return Le.unlinkSync(Te.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw mt(new Error,gi.DROP_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,o)}}a(e7,"dropCustomFunction");function t7(e){BP(),e.project&&(e.project=Te.parse(e.project).name);let t=Ys.addComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("adding component");let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Te.join(r,s);return Le.mkdirSync(n,{recursive:!0}),Le.copySync(z9,n),`Successfully added project: ${s}`}catch(n){throw mt(new Error,gi.ADD_FUNCTION,pt.INTERNAL_SERVER_ERROR,Dt.ERR,n)}}a(t7,"addComponent");function r7(e){e.project&&(e.project=Te.parse(e.project).name);let t=Ys.dropCustomFunctionProjectValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);Dt.trace("dropping custom function project");let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=je.get(Me.CONFIG_PARAMS.APPS);if(!K9.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 UE.updateConfigValue(Me.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Te.join(r,s);return Le.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw mt(new Error,gi.DROP_FUNCTION_PROJECT,pt.INTERNAL_SERVER_ERROR,Dt.ERR,i)}}a(r7,"dropCustomFunctionProject");async function s7(e){e.project&&(e.project=Te.parse(e.project).name);let t=Ys.packageComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Dt.trace("packaging component",s);let n;try{n=await Le.realpath(Te.join(r,s))}catch(u){if(u.code!==Me.NODE_ERROR_CODES.ENOENT)throw u;try{n=await Le.realpath(Te.join(je.get(Me.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Me.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await Le.ensureDir(dg);let i=Te.join(dg,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Te.join(n,"node_modules"))}),vP.pack(n,o).pipe(Le.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=Le.readFileSync(i,{encoding:"base64"});return await Le.remove(i),{project:s,payload:c}}a(s7,"packageComponent");async function n7(e){e.project&&(e.project=Te.parse(e.project).name);let t=Ys.deployComponentValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=je.get(Me.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Dt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=Te.join(r,s);i="file:"+o,await Le.ensureDir(o);let c,u;do c=Te.join(dg,Y9()+".tar"),u=await Le.pathExists(c);while(u);await Le.outputFile(c,n,{encoding:"base64"});let l=Le.createReadStream(c);l.pipe(vP.extract(o)),await new Promise(_=>l.on("end",_)),await Le.unlink(c)}return UE.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(n7,"deployComponent");async function i7(){let e=UE.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await Le.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=Te.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await Le.stat(u),_={name:Te.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(je.get(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:je.get(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Te.sep).slice(-1).pop(),entries:t})}a(i7,"getComponents");async function o7(e){let t=Ys.getComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await Le.readFile(Te.join(je.get(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Me.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Te.join(e.project,e.file)}'`):s}}a(o7,"getComponentFile");async function a7(e){let t=Ys.setComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Te.join(je.get(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await Le.ensureFile(s),await Le.outputFile(s,e.payload,r)):await Le.ensureDir(s),"Successfully set component: "+e.file}a(a7,"setComponentFile");async function c7(e){let t=Ys.dropComponentFileValidator(e);if(t)throw mt(t,t.message,pt.BAD_REQUEST);let r=e.file?Te.join(e.project,e.file):e.project,s=Te.join(je.get(Me.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await Le.pathExists(s)&&await Le.remove(s),UE.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(c7,"dropComponent");HP.exports={customFunctionsStatus:J9,getCustomFunctions:j9,getCustomFunction:X9,setCustomFunction:Z9,dropCustomFunction:e7,addComponent:t7,dropCustomFunctionProject:r7,packageComponent:s7,deployComponent:n7,getComponents:i7,getComponentFile:o7,setComponentFile:a7,dropComponent:c7}});var Eg=m((FSe,FP)=>{"use strict";var Ks=require("joi"),qP=qe();FP.exports={readTransactionLogValidator:u7,deleteTransactionLogsBeforeValidator:l7};function u7(e){let t=Ks.object({schema:Ks.string().required(),table:Ks.string().required(),from:Ks.date().timestamp(),to:Ks.date().timestamp(),limit:Ks.number().min(1)});return qP.validateBySchema(e,t)}a(u7,"readTransactionLogValidator");function l7(e){let t=Ks.object({schema:Ks.string().required(),table:Ks.string().required(),timestamp:Ks.date().timestamp().required()});return qP.validateBySchema(e,t)}a(l7,"deleteTransactionLogsBeforeValidator")});var vE=m((xSe,VP)=>{"use strict";var fg=R(),PE=ze(),GP=G(),xP=Y(),kP=Tn(),{handleHDBError:Ua,hdb_errors:_7}=z(),{HTTP_STATUS_CODES:Ma}=_7,{readTransactionLogValidator:d7,deleteTransactionLogsBeforeValidator:E7}=Eg(),$P="This operation relies on clustering and cannot run with it disable.",f7="Logs successfully deleted from transaction log.",h7="All logs successfully deleted from transaction log.";VP.exports={readTransactionLog:m7,deleteTransactionLogsBefore:p7};async function*m7(e){let t=d7(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST,void 0,void 0,!0);if(!xP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ua(new Error,$P,Ma.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=GP.checkSchemaTableExist(r,s);if(n)throw Ua(new Error,n,Ma.NOT_FOUND,void 0,void 0,!0);let i=kP.createNatsTableStreamName(r,s),o=await PE.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===fg.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(m7,"readTransactionLog");async function p7(e){let t=E7(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST,void 0,void 0,!0);if(!xP.get(fg.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ua(new Error,$P,Ma.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=GP.checkSchemaTableExist(r,s);if(i)throw Ua(new Error,i,Ma.NOT_FOUND,void 0,void 0,!0);let o=kP.createNatsTableStreamName(r,s),{jsm:c}=await PE.getNATSReferences(),u=await PE.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=f7,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=h7):d=(await PE.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(p7,"deleteTransactionLogsBefore")});var FE=m(($Se,jP)=>{"use strict";var BE=require("joi"),HE=require("path"),YP=require("fs-extra"),{exec:S7}=require("child_process"),T7=require("util"),KP=T7.promisify(S7),Zu=R(),{handleHDBError:Pa,hdb_errors:g7}=z(),{HTTP_STATUS_CODES:va}=g7,tl=Y(),R7=qe(),el=C();tl.initSync();var hg=tl.get(Zu.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),WP="npm install --omit=dev --json",A7=`${WP} --dry-run`;jP.exports={installModules:y7,auditModules:I7,installAllRootModules:O7,uninstallRootModule:N7,linkHarperdb:b7};async function O7(e=!1){await qE(),await rl(e?"npm install --ignore-scripts":"npm install",tl.get(Zu.CONFIG_PARAMS.ROOTPATH))}a(O7,"installAllRootModules");async function N7(e){await rl(`npm uninstall ${e}`,tl.get(Zu.CONFIG_PARAMS.ROOTPATH))}a(N7,"uninstallRootModule");async function b7(){await qE(),await rl(`npm link ${Zu.PACKAGE_ROOT}`,tl.get(Zu.CONFIG_PARAMS.ROOTPATH))}a(b7,"linkHarperdb");async function rl(e,t=void 0){let{stdout:r,stderr:s}=await KP(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
11
+ `,""));return el.trace(r,s),r.replace(`
12
+ `,"")}a(rl,"runCommand");async function y7(e){el.info(`starting installModules for request: ${e}`);let t=JP(e);if(t)throw Pa(t,t.message,va.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?A7:WP;await qE(),await zP(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=HE.join(hg,u),_,d=null;try{let{stdout:E,stderr:f}=await KP(n,{cwd:l});_=E?E.replace(`
13
13
  `,""):null,d=f?f.replace(`
14
- `,""):null}catch(E){E.stderr?i[u].npm_error=KP(E.stderr):i[u].npm_error=E.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 Zu.info(`finished installModules with response ${i}`),i}a(b7,"installModules");function KP(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(KP,"parseNPMStdErr");async function y7(e){Zu.info(`starting auditModules for request: ${e}`);let t=QP(e);if(t)throw Ua(t,t.message,Ma.BAD_REQUEST);let{projects:r}=e;await qE(),await WP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=HE.join(hg,o);s[o]={npm_output:null,npm_error:null};try{let u=await tl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KP(u.stderr)}}return Zu.info(`finished auditModules with response ${s}`),s}a(y7,"auditModules");async function qE(){try{return await tl("npm -v"),!0}catch{throw Ua(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ma.BAD_REQUEST,void 0,void 0,!0)}}a(qE,"checkNPMInstalled");async function WP(e){if(!Array.isArray(e)||e.length===0)throw Ua(new Error,"projects argument must be an array with at least 1 element",Ma.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=HE.join(hg,i.toString());if(!await $P.pathExists(o)){t.push(i);continue}let u=HE.join(o,"package.json");await $P.pathExists(u)||r.push(i)}if(t.length>0)throw Ua(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ma.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ua(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ma.BAD_REQUEST,void 0,void 0,!0)}a(WP,"checkProjectPaths");function QP(e){let t=BE.object({projects:BE.array().min(1).items(BE.string()).required(),dry_run:BE.boolean().default(!1)});return g7.validateBySchema(e,t)}a(QP,"modulesValidator")});var jP=m((VSe,JP)=>{"use strict";var mg=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}};JP.exports=mg});var ZP=m((KSe,XP)=>{"use strict";var pg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};XP.exports=pg});var Tg=m((QSe,tv)=>{"use strict";var ev=jP(),I7=ZP(),{HDB_ERROR_MSGS:w7}=gr(),Sg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=w7.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 ev(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new I7(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 ev(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}};tv.exports=Sg});var $E=m((JSe,pv)=>{"use strict";var gg=Xt(),GE=jt(),Jr=Ud(),nl=Xn(),Rg=Xi(),C7=$S(),L7=AD(),il=er(),xE=Hd(),St=C(),D7=eT(),U7=Uu(),M7=MT(),P7=eE(),v7=PT(),B7=vT(),H7=nE(),q7=oE(),Ag=cE(),Dn=F(),F7=SM(),Og=lE(),nv=ya(),zr=R(),iv=pP(),G7=On(),ov=wu(),av=(LE(),re(Ju)),cv=et(),Lr=ME(),x7=require("alasql"),uv=vE(),lv=FE(),_v=Tg(),{handleHDBError:_r,hdb_errors:dv}=z(),{HDB_ERROR_MSGS:Ut,HTTP_STATUS_CODES:rl}=dv,v=new Map,Ev="delete",mi="insert",Un="read",go="update",sl="describe",rv=nl.describeSchema.name,sv=nl.describeTable.name,fv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},k7="catchup",$7="handleGetJob",V7="handleGetJobsByStartDate",kE={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Y7=[Jr.createTable.name,Jr.createAttribute.name,Jr.dropTable.name,Jr.dropAttribute.name],hv={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},G=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(gg.insert.name,new G(!1,[mi]));v.set(gg.update.name,new G(!1,[go]));v.set(gg.upsert.name,new G(!1,[mi,go]));v.set(GE.searchByConditions.name,new G(!1,[Un]));v.set(GE.searchByHash.name,new G(!1,[Un]));v.set(GE.searchByValue.name,new G(!1,[Un]));v.set(GE.search.name,new G(!1,[Un]));v.set(Jr.createSchema.name,new G(!0,[]));v.set(Jr.createTable.name,new G(!0,[]));v.set(Jr.createAttribute.name,new G(!1,[mi]));v.set(Jr.dropSchema.name,new G(!0,[]));v.set(Jr.dropTable.name,new G(!0,[]));v.set(Jr.dropAttribute.name,new G(!0,[]));v.set(nl.describeSchema.name,new G(!1,[Un]));v.set(nl.describeTable.name,new G(!1,[Un]));v.set(Rg.deleteRecord.name,new G(!1,[Ev]));v.set(il.addUser.name,new G(!0,[]));v.set(il.alterUser.name,new G(!0,[]));v.set(il.dropUser.name,new G(!0,[]));v.set(il.listUsersExternal.name,new G(!0,[]));v.set(xE.listRoles.name,new G(!0,[]));v.set(xE.addRole.name,new G(!0,[]));v.set(xE.alterRole.name,new G(!0,[]));v.set(xE.dropRole.name,new G(!0,[]));v.set(D7.name,new G(!0,[]));v.set(U7.name,new G(!0,[]));v.set(M7.name,new G(!0,[]));v.set(P7.name,new G(!0,[]));v.set(v7.name,new G(!0,[]));v.set(B7.name,new G(!0,[]));v.set(Ag.setRoutes.name,new G(!0,[]));v.set(Ag.getRoutes.name,new G(!0,[]));v.set(Ag.deleteRoutes.name,new G(!0,[]));v.set(cv.setConfiguration.name,new G(!0,[]));v.set(H7.clusterStatus.name,new G(!0,[]));v.set(q7.name,new G(!0,[]));v.set(Og.getFingerprint.name,new G(!0,[]));v.set(Og.setLicense.name,new G(!0,[]));v.set(Rg.deleteFilesBefore.name,new G(!0,[]));v.set(Rg.deleteAuditLogsBefore.name,new G(!0,[]));v.set(nv.restart.name,new G(!0,[]));v.set(nv.restartService.name,new G(!0,[]));v.set(C7.name,new G(!0,[]));v.set(L7.name,new G(!0,[Un]));v.set(G7.systemInformation.name,new G(!0,[]));v.set(cv.getConfiguration.name,new G(!0,[]));v.set(uv.readTransactionLog.name,new G(!0,[]));v.set(uv.deleteTransactionLogsBefore.name,new G(!0,[]));v.set(lv.installModules.name,new G(!0,[]));v.set(lv.auditModules.name,new G(!0,[]));v.set(ov.createTokens.name,new G(!1,[]));v.set(ov.refreshOperationToken.name,new G(!1,[]));v.set(av.login.name,new G(!1,[]));v.set(av.logout.name,new G(!1,[]));v.set(Lr.customFunctionsStatus.name,new G(!0,[]));v.set(Lr.getCustomFunctions.name,new G(!0,[]));v.set(Lr.getComponents.name,new G(!0,[]));v.set(Lr.getComponentFile.name,new G(!0,[]));v.set(Lr.setComponentFile.name,new G(!0,[]));v.set(Lr.dropComponent.name,new G(!0,[]));v.set(Lr.getCustomFunction.name,new G(!0,[]));v.set(Lr.setCustomFunction.name,new G(!0,[]));v.set(Lr.dropCustomFunction.name,new G(!0,[]));v.set(Lr.addComponent.name,new G(!0,[]));v.set(Lr.dropCustomFunctionProject.name,new G(!0,[]));v.set(Lr.packageComponent.name,new G(!0,[]));v.set(Lr.deployComponent.name,new G(!0,[]));v.set(Og.getRegistrationInfo.name,new G(!1,[]));v.set(il.userInfo.name,new G(!1,[]));v.set(nl.describeAll.name,new G(!1,[]));v.set($7,new G(!1,[]));v.set(V7,new G(!0,[]));v.set(k7,new G(!0,[]));v.set(kE.CSV_DATA_LOAD,new G(!1,[mi,go]));v.set(kE.CSV_URL_LOAD,new G(!1,[mi,go]));v.set(kE.CSV_FILE_LOAD,new G(!1,[mi,go]));v.set(kE.IMPORT_FROM_S3,new G(!1,[mi,go]));v.set(hv.EXPORT_TO_S3,new G(!0,[]));v.set(hv.EXPORT_LOCAL,new G(!0,[]));v.set(zr.VALID_SQL_OPS_ENUM.DELETE,new G(!1,[Ev]));v.set(zr.VALID_SQL_OPS_ENUM.SELECT,new G(!1,[Un]));v.set(zr.VALID_SQL_OPS_ENUM.INSERT,new G(!1,[mi]));v.set(zr.VALID_SQL_OPS_ENUM.UPDATE,new G(!1,[go]));pv.exports={verifyPerms:W7,verifyPermsAst:K7,verifyBulkLoadAttributePerms:z7};function K7(e,t,r){if(Dn.isEmptyOrZeroLength(e))throw St.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Dn.isEmptyOrZeroLength(t))throw St.info("verify_perms_ast has an empty user parameter"),_r(new Error);if(Dn.isEmptyOrZeroLength(r))throw St.info("verify_perms_ast has a null operation parameter"),_r(new Error);try{let s=new _v,n=new F7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw St.info("No schemas defined in verifyPermsAst(), will not continue."),_r(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&fv[r])throw _r(new Error,Ut.DROP_SYSTEM,rl.FORBIDDEN);if(c&&!u)return null;let l=iv.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof x7.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=mv(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=bg(t.role.permission,E,d[f]);Ng(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw _r(s)}}a(K7,"verifyPermsAst");function W7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw St.info("null required parameter in verifyPerms"),_r(new Error,Ut.DEFAULT_INVALID_REQUEST,rl.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 _v;if(Dn.isEmptyOrZeroLength(e.hdb_user.role)||Dn.isEmptyOrZeroLength(e.hdb_user.role.permission))return St.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ut.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(zr.SYSTEM_SCHEMA_NAME)||n===zr.SYSTEM_SCHEMA_NAME;if(_&&fv[r])throw _r(new Error,Ut.DROP_SYSTEM,rl.FORBIDDEN);if(u&&!_||l===!0&&(r===Jr.createSchema.name||r===Jr.dropSchema.name))return null;if(Y7.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=iv.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===rv||r===sv){if(n===zr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ut.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===rv&&(!d[n]||!d[n][sl]))return c.handleInvalidItem(Ut.SCHEMA_NOT_FOUND(n));if(r===sv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][sl]))return c.handleInvalidItem(Ut.TABLE_NOT_FOUND(n,i))}}let E=mv(e.hdb_user,r,o,c,s);if(E)return E;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&zr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],T=d[n].tables[i];T[zr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(g=>g[zr.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let f=Q7(e),h=bg(e.hdb_user.role.permission,n,i);return Ng(f,h,r,i,n,c,s),c.getPermsResponse()}a(W7,"verifyPerms");function mv(e,t,r,s,n){if(Dn.arrayHasEmptyValues([e,t,r]))throw St.info("hasPermissions has an invalid parameter"),_r(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw St.info(`operation ${t} not found.`),_r(new Error,Ut.OP_NOT_FOUND(t),rl.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return St.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ut.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][sl]===!1){s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[sl]===!1)s.addInvalidItem(Ut.TABLE_NOT_FOUND(u,_));else try{let E=[],f=v.get(t).perms;!Dn.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],T=d[p];(T==null||T===!1)&&(St.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ut.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw St.error(f),St.error(E),_r(dv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(mv,"hasPermissions");function Ng(e,t,r,s,n,i,o){if(!e||!t)throw St.info("no attributes specified in checkAttributePerms."),_r(new Error);let c=v.get(r).perms;if(!c||c==="")throw St.info(`no permissions found for ${r} in checkAttributePerms().`),_r(new Error);if(Dn.isEmptyOrZeroLength(t))return St.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[sl]===!1){i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(zr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Un)throw _r(new Error,Ut.SYSTEM_TIMESTAMP_PERMS_ERR,rl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Ng,"checkAttributePerms");function Q7(e){let t=new Set;try{if(e.action)return t;if(e.operation===zr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){St.info(r)}return t}a(Q7,"getRecordAttributes");function bg(e,t,r){let s=new Map;if(Dn.isEmpty(e))return St.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{St.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(bg,"getAttributePermissions");function z7(e,t,r,s,n,i,o){let c=new Set(i),u=bg(e,s,n);Ng(c,u,t,n,s,o,r)}a(z7,"verifyBulkLoadAttributePerms")});var YE=m((XSe,Av)=>{"use strict";Av.exports={evaluateSQL:cee,processAST:Rv,convertSQLToAST:gv,checkASTPermissions:Tv};var J7=Xt(),Sv=require("util"),j7=Sv.callbackify(J7.insert),X7=jt().search,Z7=gL().update,eee=Sv.callbackify(Z7),tee=AL().convertDelete,pi=require("alasql"),ree=$E(),VE=C(),see=Sd(),nee=F(),ol=R(),{hdb_errors:iee,handleHDBError:yg}=z(),{HTTP_STATUS_CODES:Ig}=iee;see(pi);var oee=403,aee="There was a problem performing this insert. Please check the logs and try again.",wg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function cee(e,t){let r=e.parsed_sql_object;if(!r){r=gv(e.sql);let s,n=r.ast.statements[0];if(n instanceof pi.yy.Insert?s=n.into.databaseid:n instanceof pi.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof pi.yy.Update||n instanceof pi.yy.Delete?s=n.table.databaseid:VE.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof pi.yy.Select)&&nee.isEmptyOrZeroLength(s))return t("No schema specified",null)}Rv(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(cee,"evaluateSQL");function Tv(e,t){let r;try{r=ree.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Tv,"checkASTPermissions");function gv(e){let t=new wg;if(!e)throw yg(new Error,"The 'sql' parameter is missing from the request body",Ig.BAD_REQUEST);try{let r=e.trim(),s=pi.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
16
- `);throw s[1]?yg(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ig.BAD_REQUEST):yg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ig.BAD_REQUEST)}return t}a(gv,"convertSQLToAST");function Rv(e,t,r){try{let s=uee;if(!e.bypass_auth&&!t.permissions_checked){let i=Tv(e,t);if(i&&i.length>0)return r(oee,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case ol.VALID_SQL_OPS_ENUM.SELECT:s=X7,n=t.ast.statements[0];break;case ol.VALID_SQL_OPS_ENUM.INSERT:s=lee;break;case ol.VALID_SQL_OPS_ENUM.UPDATE:s=eee;break;case ol.VALID_SQL_OPS_ENUM.DELETE:s=tee;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(Rv,"processAST");function uee(e,t){VE.info(e),t("unknown sql statement")}a(uee,"nullFunction");function lee({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=_ee(i,e.values)}catch(o){return r(o)}j7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){VE.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(lee,"convertInsert");function _ee(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]]=pi.compile(`SELECT ${n.toString()} AS [${ol.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw VE.error(r),new Error(aee)}}a(_ee,"createDataObjects")});var Cg=m((eTe,Nv)=>{"use strict";var{S3:dee,GetObjectCommand:Eee}=require("@aws-sdk/client-s3");Nv.exports={getFileStreamFromS3:fee,getS3AuthObj:Ov};async function fee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await Ov(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Eee(r))).Body}a(fee,"getFileStreamFromS3");function Ov(e,t,r){return new dee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(Ov,"getS3AuthObj")});var KE=m((rTe,Pv)=>{"use strict";var Iv=jt(),hee=YE(),mee=Cg(),{AsyncParser:pee,Transform:See}=require("json2csv"),cl=require("stream"),Dr=F(),Lg=require("fs-extra"),Tee=require("path"),jr=C(),{promisify:wv}=require("util"),al=F(),{handleHDBError:it,hdb_errors:gee}=z(),{HDB_ERROR_MSGS:dr,HTTP_STATUS_CODES:ot}=gee,{streamAsJSON:Ree}=hm(),{Upload:Aee}=require("@aws-sdk/lib-storage"),bv=["search_by_value","search_by_hash","sql"],yv=["json","csv"],Cv="json",Lv="csv",Oee="Successfully exported JSON locally.",Nee="Successfully exported CSV locally.",bee=1e3,yee=Iv.searchByHash,Iee=Iv.searchByValue,wee=wv(hee.evaluateSQL),Cee=wv(cl.finished);Pv.exports={export_to_s3:Mee,export_local:Lee,toCsvStream:Dv};async function Lee(e){jr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Uv(e);if(!Dr.isEmpty(t))throw jr.error(t),it(new Error,t,ot.BAD_REQUEST,void 0,void 0,!0);if(Dr.isEmpty(e.path))throw jr.error(dr.MISSING_VALUE("path")),it(new Error,dr.MISSING_VALUE("path"),ot.BAD_REQUEST,void 0,void 0,!0);let r=(Dr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Tee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Dr.buildFolderPath(e.path,r);await Dee(e.path);let n=await Mv(e);return await Uee(s,e.format,n)}a(Lee,"export_local");async function Dee(e){if(jr.trace("in confirmPath"),Dr.isEmptyOrZeroLength(e))throw it(new Error,`Invalid path: ${e}`,ot.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Lg.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,jr.error(s),it(new Error,s,ot.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 jr.error(r),it(new Error,r,ot.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Dee,"confirmPath");async function Uee(e,t,r){if(jr.trace("in saveToLocal"),al.isEmptyOrZeroLength(e))throw it(new Error,dr.INVALID_VALUE("file_path"),ot.BAD_REQUEST,void 0,void 0,!0);if(al.isEmptyOrZeroLength(t))throw it(new Error,dr.INVALID_VALUE("Source format"),ot.BAD_REQUEST,void 0,void 0,!0);if(al.isEmpty(r))throw it(new Error,dr.NOT_FOUND("Data"),ot.BAD_REQUEST,void 0,void 0,!0);if(t===Cv){let s=Lg.createWriteStream(e);return Ree(r).pipe(s),await Cee(s),{message:Oee,path:e}}else if(t===Lv){let s=Lg.createWriteStream(e),n=cl.Readable.from(r),i={},o={objectMode:!0};return await new pee(i,o).fromInput(n).toOutput(s).promise(!1),{message:Nee,path:e}}throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST)}a(Uee,"saveToLocal");async function Mee(e){if(!e.s3||Object.keys(e.s3).length===0)throw it(new Error,dr.MISSING_VALUE("S3 object"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw it(new Error,dr.MISSING_VALUE("aws_access_key_id"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw it(new Error,dr.MISSING_VALUE("aws_secret_access_key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.bucket))throw it(new Error,dr.MISSING_VALUE("bucket"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.key))throw it(new Error,dr.MISSING_VALUE("key"),ot.BAD_REQUEST);if(Dr.isEmptyOrZeroLength(e.s3.region))throw it(new Error,dr.MISSING_VALUE("region"),ot.BAD_REQUEST);let t=Uv(e);if(!Dr.isEmpty(t))throw it(new Error,t,ot.BAD_REQUEST);jr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await Mv(e)}catch(u){throw jr.error(u),u}let s,n=await mee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new cl.PassThrough;if(e.format===Lv){i=e.s3.key+".csv";let u=Dv(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===Cv){i=e.s3.key+".json";let u=new cl.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%bee===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw it(new Error,dr.INVALID_VALUE("format"),ot.BAD_REQUEST);return new Aee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Mee,"export_to_s3");function Dv(e){let t=cl.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new See(r,s);return t.pipe(n)}a(Dv,"toCsvStream");function Uv(e){if(jr.trace("in exportCoreValidation"),Dr.isEmpty(e.format))return"format missing";if(yv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yv.join(", ")}`;let t=e.search_operation.operation;if(Dr.isEmpty(t))return"search_operation.operation missing";if(bv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${bv.join(", ")}`}a(Uv,"exportCoreValidation");async function Mv(e){jr.trace("in getRecords");let t,r;if(al.isEmpty(e.search_operation)||al.isEmptyOrZeroLength(e.search_operation.operation))throw it(new Error,dr.INVALID_VALUE("Search operation"),ot.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Iee;break;case"search_by_hash":t=yee;break;case"sql":t=wee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,jr.error(r),it(new Error,r,ot.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(Mv,"getRecords")});var Gv={};Ke(Gv,{contentTypes:()=>qv,findBestSerializer:()=>JE,getDeserializer:()=>Pa,registerContentHandlers:()=>Ug,serialize:()=>Mg,serializeMessage:()=>wn});function Pee(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Ug(e){e.register(Bee,{serializers:[{regex:/^application\/json$/,serializer:WE.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Ro.EncoderStream(ul).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zE.Readable.from((0,Vs.encodeIter)(t,ul)):(0,Vs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Vs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ro.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function JE(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Ot.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ot.keys()).join(", "))}};r=Ot.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Mg(e,t,r){let s=t.headers["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),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=JE(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,QE.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,QE.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function wn(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=JE(t);return r=t.serialize=s.serializer.serialize,r(e)}function Hee(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 Pa(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ot.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ot.get(e)?.deserialize||Bv(e,s);return o=>Hee(o).then(i)}return Ot.get(e)?.deserialize||Bv(e,s)}function Bv(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 qee(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 WE,Dg,Vs,Ro,QE,zE,Hv,ul,Ot,qv,vv,Fv,vee,Bee,Ca=Te(()=>{WE=D(hm()),Dg=D(KE()),Vs=require("msgpackr"),Ro=require("cbor-x"),QE=require("zlib"),zE=require("stream");rs();Hv=require("../index"),ul={useRecords:!1,useToJSON:!0};Et.contentType=function(e,t){Ot.set(e,t)};Ot=new Map,qv=Ot;(0,Hv._assignPackageExport)("contentTypes",qv);Ot.set("application/json",{serializeStream:WE.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});vv=new Ro.Encoder(ul);Ot.set("application/cbor",{serializeStream(e){return new Ro.EncoderStream(ul).end(e)},serialize:vv.encode,deserialize:vv.decode,q:1});Ot.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zE.Readable.from((0,Vs.encodeIter)(e,ul)):(0,Vs.pack)(e)},serialize:Vs.pack,deserialize:Vs.unpack,q:.9});Ot.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(e)},q:.1});Ot.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ot.set("text/event-stream",{serializeStream:function(e){return zE.Readable.from(qee(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
14
+ `,""):null}catch(E){E.stderr?i[u].npm_error=QP(E.stderr):i[u].npm_error=E.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 el.info(`finished installModules with response ${i}`),i}a(y7,"installModules");function QP(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(QP,"parseNPMStdErr");async function I7(e){el.info(`starting auditModules for request: ${e}`);let t=JP(e);if(t)throw Pa(t,t.message,va.BAD_REQUEST);let{projects:r}=e;await qE(),await zP(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=HE.join(hg,o);s[o]={npm_output:null,npm_error:null};try{let u=await rl("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=QP(u.stderr)}}return el.info(`finished auditModules with response ${s}`),s}a(I7,"auditModules");async function qE(){try{return await rl("npm -v"),!0}catch{throw Pa(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",va.BAD_REQUEST,void 0,void 0,!0)}}a(qE,"checkNPMInstalled");async function zP(e){if(!Array.isArray(e)||e.length===0)throw Pa(new Error,"projects argument must be an array with at least 1 element",va.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=HE.join(hg,i.toString());if(!await YP.pathExists(o)){t.push(i);continue}let u=HE.join(o,"package.json");await YP.pathExists(u)||r.push(i)}if(t.length>0)throw Pa(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,va.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Pa(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,va.BAD_REQUEST,void 0,void 0,!0)}a(zP,"checkProjectPaths");function JP(e){let t=BE.object({projects:BE.array().min(1).items(BE.string()).required(),dry_run:BE.boolean().default(!1)});return R7.validateBySchema(e,t)}a(JP,"modulesValidator")});var ZP=m((YSe,XP)=>{"use strict";var mg=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}};XP.exports=mg});var tv=m((WSe,ev)=>{"use strict";var pg=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ev.exports=pg});var Tg=m((zSe,sv)=>{"use strict";var rv=ZP(),w7=tv(),{HDB_ERROR_MSGS:C7}=Ar(),Sg=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=C7.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 rv(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new w7(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 rv(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}};sv.exports=Sg});var $E=m((jSe,Tv)=>{"use strict";var gg=Zt(),GE=Xt(),Xr=Ud(),il=ri(),Rg=ro(),L7=$S(),D7=ND(),ol=tr(),xE=Hd(),St=C(),U7=eT(),M7=Mu(),P7=MT(),v7=eE(),B7=PT(),H7=vT(),q7=nE(),F7=oE(),Ag=cE(),vn=G(),G7=gM(),Og=lE(),ov=wa(),jr=R(),av=TP(),x7=In(),cv=Cu(),uv=(LE(),re(ju)),lv=tt(),Ur=ME(),k7=require("alasql"),_v=vE(),dv=FE(),Ev=Tg(),{handleHDBError:dr,hdb_errors:fv}=z(),{HDB_ERROR_MSGS:Ut,HTTP_STATUS_CODES:sl}=fv,H=new Map,hv="delete",Ri="insert",Bn="read",Oo="update",nl="describe",nv=il.describeSchema.name,iv=il.describeTable.name,mv={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},$7="catchup",V7="handleGetJob",Y7="handleGetJobsByStartDate",kE={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},K7=[Xr.createTable.name,Xr.createAttribute.name,Xr.dropTable.name,Xr.dropAttribute.name],pv={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(gg.insert.name,new x(!1,[Ri]));H.set(gg.update.name,new x(!1,[Oo]));H.set(gg.upsert.name,new x(!1,[Ri,Oo]));H.set(GE.searchByConditions.name,new x(!1,[Bn]));H.set(GE.searchByHash.name,new x(!1,[Bn]));H.set(GE.searchByValue.name,new x(!1,[Bn]));H.set(GE.search.name,new x(!1,[Bn]));H.set(Xr.createSchema.name,new x(!0,[]));H.set(Xr.createTable.name,new x(!0,[]));H.set(Xr.createAttribute.name,new x(!1,[Ri]));H.set(Xr.dropSchema.name,new x(!0,[]));H.set(Xr.dropTable.name,new x(!0,[]));H.set(Xr.dropAttribute.name,new x(!0,[]));H.set(il.describeSchema.name,new x(!1,[Bn]));H.set(il.describeTable.name,new x(!1,[Bn]));H.set(Rg.deleteRecord.name,new x(!1,[hv]));H.set(ol.addUser.name,new x(!0,[]));H.set(ol.alterUser.name,new x(!0,[]));H.set(ol.dropUser.name,new x(!0,[]));H.set(ol.listUsersExternal.name,new x(!0,[]));H.set(xE.listRoles.name,new x(!0,[]));H.set(xE.addRole.name,new x(!0,[]));H.set(xE.alterRole.name,new x(!0,[]));H.set(xE.dropRole.name,new x(!0,[]));H.set(U7.name,new x(!0,[]));H.set(M7.name,new x(!0,[]));H.set(P7.name,new x(!0,[]));H.set(v7.name,new x(!0,[]));H.set(B7.name,new x(!0,[]));H.set(H7.name,new x(!0,[]));H.set(Ag.setRoutes.name,new x(!0,[]));H.set(Ag.getRoutes.name,new x(!0,[]));H.set(Ag.deleteRoutes.name,new x(!0,[]));H.set(lv.setConfiguration.name,new x(!0,[]));H.set(q7.clusterStatus.name,new x(!0,[]));H.set(F7.name,new x(!0,[]));H.set(Og.getFingerprint.name,new x(!0,[]));H.set(Og.setLicense.name,new x(!0,[]));H.set(Rg.deleteFilesBefore.name,new x(!0,[]));H.set(Rg.deleteAuditLogsBefore.name,new x(!0,[]));H.set(ov.restart.name,new x(!0,[]));H.set(ov.restartService.name,new x(!0,[]));H.set(L7.name,new x(!0,[]));H.set(D7.name,new x(!0,[Bn]));H.set(x7.systemInformation.name,new x(!0,[]));H.set(lv.getConfiguration.name,new x(!0,[]));H.set(_v.readTransactionLog.name,new x(!0,[]));H.set(_v.deleteTransactionLogsBefore.name,new x(!0,[]));H.set(dv.installModules.name,new x(!0,[]));H.set(dv.auditModules.name,new x(!0,[]));H.set(cv.createTokens.name,new x(!1,[]));H.set(cv.refreshOperationToken.name,new x(!1,[]));H.set(uv.login.name,new x(!1,[]));H.set(uv.logout.name,new x(!1,[]));H.set(Ur.customFunctionsStatus.name,new x(!0,[]));H.set(Ur.getCustomFunctions.name,new x(!0,[]));H.set(Ur.getComponents.name,new x(!0,[]));H.set(Ur.getComponentFile.name,new x(!0,[]));H.set(Ur.setComponentFile.name,new x(!0,[]));H.set(Ur.dropComponent.name,new x(!0,[]));H.set(Ur.getCustomFunction.name,new x(!0,[]));H.set(Ur.setCustomFunction.name,new x(!0,[]));H.set(Ur.dropCustomFunction.name,new x(!0,[]));H.set(Ur.addComponent.name,new x(!0,[]));H.set(Ur.dropCustomFunctionProject.name,new x(!0,[]));H.set(Ur.packageComponent.name,new x(!0,[]));H.set(Ur.deployComponent.name,new x(!0,[]));H.set(Og.getRegistrationInfo.name,new x(!1,[]));H.set(ol.userInfo.name,new x(!1,[]));H.set(il.describeAll.name,new x(!1,[]));H.set(V7,new x(!1,[]));H.set(Y7,new x(!0,[]));H.set($7,new x(!0,[]));H.set(kE.CSV_DATA_LOAD,new x(!1,[Ri,Oo]));H.set(kE.CSV_URL_LOAD,new x(!1,[Ri,Oo]));H.set(kE.CSV_FILE_LOAD,new x(!1,[Ri,Oo]));H.set(kE.IMPORT_FROM_S3,new x(!1,[Ri,Oo]));H.set(pv.EXPORT_TO_S3,new x(!0,[]));H.set(pv.EXPORT_LOCAL,new x(!0,[]));H.set(jr.VALID_SQL_OPS_ENUM.DELETE,new x(!1,[hv]));H.set(jr.VALID_SQL_OPS_ENUM.SELECT,new x(!1,[Bn]));H.set(jr.VALID_SQL_OPS_ENUM.INSERT,new x(!1,[Ri]));H.set(jr.VALID_SQL_OPS_ENUM.UPDATE,new x(!1,[Oo]));Tv.exports={verifyPerms:Q7,verifyPermsAst:W7,verifyBulkLoadAttributePerms:J7};function W7(e,t,r){if(vn.isEmptyOrZeroLength(e))throw St.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(vn.isEmptyOrZeroLength(t))throw St.info("verify_perms_ast has an empty user parameter"),dr(new Error);if(vn.isEmptyOrZeroLength(r))throw St.info("verify_perms_ast has a null operation parameter"),dr(new Error);try{let s=new Ev,n=new G7(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw St.info("No schemas defined in verifyPermsAst(), will not continue."),dr(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&mv[r])throw dr(new Error,Ut.DROP_SYSTEM,sl.FORBIDDEN);if(c&&!u)return null;let l=av.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof k7.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&o.set(i[d],E)}let _=Sv(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=bg(t.role.permission,E,d[f]);Ng(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw dr(s)}}a(W7,"verifyPermsAst");function Q7(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw St.info("null required parameter in verifyPerms"),dr(new Error,Ut.DEFAULT_INVALID_REQUEST,sl.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 Ev;if(vn.isEmptyOrZeroLength(e.hdb_user.role)||vn.isEmptyOrZeroLength(e.hdb_user.role.permission))return St.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ut.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(jr.SYSTEM_SCHEMA_NAME)||n===jr.SYSTEM_SCHEMA_NAME;if(_&&mv[r])throw dr(new Error,Ut.DROP_SYSTEM,sl.FORBIDDEN);if(u&&!_||l===!0&&(r===Xr.createSchema.name||r===Xr.dropSchema.name))return null;if(K7.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=av.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===nv||r===iv){if(n===jr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ut.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===nv&&(!d[n]||!d[n][nl]))return c.handleInvalidItem(Ut.SCHEMA_NOT_FOUND(n));if(r===iv&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][nl]))return c.handleInvalidItem(Ut.TABLE_NOT_FOUND(n,i))}}let E=Sv(e.hdb_user,r,o,c,s);if(E)return E;if(H.get(r)&&H.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&jr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],T=d[n].tables[i];T[jr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(g=>g[jr.PERMS_CRUD_ENUM.READ]).forEach(g=>{p.push(g.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(A=>A.attribute),e.get_attributes=p)}let f=z7(e),h=bg(e.hdb_user.role.permission,n,i);return Ng(f,h,r,i,n,c,s),c.getPermsResponse()}a(Q7,"verifyPerms");function Sv(e,t,r,s,n){if(vn.arrayHasEmptyValues([e,t,r]))throw St.info("hasPermissions has an invalid parameter"),dr(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 St.info(`operation ${t} not found.`),dr(new Error,Ut.OP_NOT_FOUND(t),sl.BAD_REQUEST);if(H.get(t)&&H.get(t).requires_su)return St.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ut.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][nl]===!1){s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ut.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[nl]===!1)s.addInvalidItem(Ut.TABLE_NOT_FOUND(u,_));else try{let E=[],f=H.get(t).perms;!vn.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],T=d[p];(T==null||T===!1)&&(St.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ut.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw St.error(f),St.error(E),dr(fv.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(Sv,"hasPermissions");function Ng(e,t,r,s,n,i,o){if(!e||!t)throw St.info("no attributes specified in checkAttributePerms."),dr(new Error);let c=H.get(r).perms;if(!c||c==="")throw St.info(`no permissions found for ${r} in checkAttributePerms().`),dr(new Error);if(vn.isEmptyOrZeroLength(t))return St.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[nl]===!1){i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(jr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Bn)throw dr(new Error,Ut.SYSTEM_TIMESTAMP_PERMS_ERR,sl.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ut.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Ng,"checkAttributePerms");function z7(e){let t=new Set;try{if(e.action)return t;if(e.operation===jr.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){St.info(r)}return t}a(z7,"getRecordAttributes");function bg(e,t,r){let s=new Map;if(vn.isEmpty(e))return St.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{St.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(bg,"getAttributePermissions");function J7(e,t,r,s,n,i,o){let c=new Set(i),u=bg(e,s,n);Ng(c,u,t,n,s,o,r)}a(J7,"verifyBulkLoadAttributePerms")});var YE=m((ZSe,Nv)=>{"use strict";Nv.exports={evaluateSQL:uee,processAST:Ov,convertSQLToAST:Av,checkASTPermissions:Rv};var j7=Zt(),gv=require("util"),X7=gv.callbackify(j7.insert),Z7=Xt().search,eee=gL().update,tee=gv.callbackify(eee),ree=AL().convertDelete,Ai=require("alasql"),see=$E(),VE=C(),nee=Sd(),iee=G(),al=R(),{hdb_errors:oee,handleHDBError:yg}=z(),{HTTP_STATUS_CODES:Ig}=oee;nee(Ai);var aee=403,cee="There was a problem performing this insert. Please check the logs and try again.",wg=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function uee(e,t){let r=e.parsed_sql_object;if(!r){r=Av(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ai.yy.Insert?s=n.into.databaseid:n instanceof Ai.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ai.yy.Update||n instanceof Ai.yy.Delete?s=n.table.databaseid:VE.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ai.yy.Select)&&iee.isEmptyOrZeroLength(s))return t("No schema specified",null)}Ov(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(uee,"evaluateSQL");function Rv(e,t){let r;try{r=see.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(Rv,"checkASTPermissions");function Av(e){let t=new wg;if(!e)throw yg(new Error,"The 'sql' parameter is missing from the request body",Ig.BAD_REQUEST);try{let r=e.trim(),s=Ai.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
16
+ `);throw s[1]?yg(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ig.BAD_REQUEST):yg(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ig.BAD_REQUEST)}return t}a(Av,"convertSQLToAST");function Ov(e,t,r){try{let s=lee;if(!e.bypass_auth&&!t.permissions_checked){let i=Rv(e,t);if(i&&i.length>0)return r(aee,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case al.VALID_SQL_OPS_ENUM.SELECT:s=Z7,n=t.ast.statements[0];break;case al.VALID_SQL_OPS_ENUM.INSERT:s=_ee;break;case al.VALID_SQL_OPS_ENUM.UPDATE:s=tee;break;case al.VALID_SQL_OPS_ENUM.DELETE:s=ree;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(Ov,"processAST");function lee(e,t){VE.info(e),t("unknown sql statement")}a(lee,"nullFunction");function _ee({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=dee(i,e.values)}catch(o){return r(o)}X7(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){VE.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(_ee,"convertInsert");function dee(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]]=Ai.compile(`SELECT ${n.toString()} AS [${al.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw VE.error(r),new Error(cee)}}a(dee,"createDataObjects")});var Cg=m((tTe,yv)=>{"use strict";var{S3:Eee,GetObjectCommand:fee}=require("@aws-sdk/client-s3");yv.exports={getFileStreamFromS3:hee,getS3AuthObj:bv};async function hee(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await bv(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new fee(r))).Body}a(hee,"getFileStreamFromS3");function bv(e,t,r){return new Eee({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(bv,"getS3AuthObj")});var KE=m((sTe,Bv)=>{"use strict";var Cv=Xt(),mee=YE(),pee=Cg(),{AsyncParser:See,Transform:Tee}=require("json2csv"),ul=require("stream"),Mr=G(),Lg=require("fs-extra"),gee=require("path"),Zr=C(),{promisify:Lv}=require("util"),cl=G(),{handleHDBError:ot,hdb_errors:Ree}=z(),{HDB_ERROR_MSGS:Er,HTTP_STATUS_CODES:at}=Ree,{streamAsJSON:Aee}=hm(),{Upload:Oee}=require("@aws-sdk/lib-storage"),Iv=["search_by_value","search_by_hash","sql"],wv=["json","csv"],Dv="json",Uv="csv",Nee="Successfully exported JSON locally.",bee="Successfully exported CSV locally.",yee=1e3,Iee=Cv.searchByHash,wee=Cv.searchByValue,Cee=Lv(mee.evaluateSQL),Lee=Lv(ul.finished);Bv.exports={export_to_s3:Pee,export_local:Dee,toCsvStream:Mv};async function Dee(e){Zr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=Pv(e);if(!Mr.isEmpty(t))throw Zr.error(t),ot(new Error,t,at.BAD_REQUEST,void 0,void 0,!0);if(Mr.isEmpty(e.path))throw Zr.error(Er.MISSING_VALUE("path")),ot(new Error,Er.MISSING_VALUE("path"),at.BAD_REQUEST,void 0,void 0,!0);let r=(Mr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(gee.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Mr.buildFolderPath(e.path,r);await Uee(e.path);let n=await vv(e);return await Mee(s,e.format,n)}a(Dee,"export_local");async function Uee(e){if(Zr.trace("in confirmPath"),Mr.isEmptyOrZeroLength(e))throw ot(new Error,`Invalid path: ${e}`,at.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Lg.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,Zr.error(s),ot(new Error,s,at.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 Zr.error(r),ot(new Error,r,at.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Uee,"confirmPath");async function Mee(e,t,r){if(Zr.trace("in saveToLocal"),cl.isEmptyOrZeroLength(e))throw ot(new Error,Er.INVALID_VALUE("file_path"),at.BAD_REQUEST,void 0,void 0,!0);if(cl.isEmptyOrZeroLength(t))throw ot(new Error,Er.INVALID_VALUE("Source format"),at.BAD_REQUEST,void 0,void 0,!0);if(cl.isEmpty(r))throw ot(new Error,Er.NOT_FOUND("Data"),at.BAD_REQUEST,void 0,void 0,!0);if(t===Dv){let s=Lg.createWriteStream(e);return Aee(r).pipe(s),await Lee(s),{message:Nee,path:e}}else if(t===Uv){let s=Lg.createWriteStream(e),n=ul.Readable.from(r),i={},o={objectMode:!0};return await new See(i,o).fromInput(n).toOutput(s).promise(!1),{message:bee,path:e}}throw ot(new Error,Er.INVALID_VALUE("format"),at.BAD_REQUEST)}a(Mee,"saveToLocal");async function Pee(e){if(!e.s3||Object.keys(e.s3).length===0)throw ot(new Error,Er.MISSING_VALUE("S3 object"),at.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw ot(new Error,Er.MISSING_VALUE("aws_access_key_id"),at.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw ot(new Error,Er.MISSING_VALUE("aws_secret_access_key"),at.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.bucket))throw ot(new Error,Er.MISSING_VALUE("bucket"),at.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.key))throw ot(new Error,Er.MISSING_VALUE("key"),at.BAD_REQUEST);if(Mr.isEmptyOrZeroLength(e.s3.region))throw ot(new Error,Er.MISSING_VALUE("region"),at.BAD_REQUEST);let t=Pv(e);if(!Mr.isEmpty(t))throw ot(new Error,t,at.BAD_REQUEST);Zr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vv(e)}catch(u){throw Zr.error(u),u}let s,n=await pee.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new ul.PassThrough;if(e.format===Uv){i=e.s3.key+".csv";let u=Mv(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===Dv){i=e.s3.key+".json";let u=new ul.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%yee===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw ot(new Error,Er.INVALID_VALUE("format"),at.BAD_REQUEST);return new Oee({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Pee,"export_to_s3");function Mv(e){let t=ul.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Tee(r,s);return t.pipe(n)}a(Mv,"toCsvStream");function Pv(e){if(Zr.trace("in exportCoreValidation"),Mr.isEmpty(e.format))return"format missing";if(wv.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${wv.join(", ")}`;let t=e.search_operation.operation;if(Mr.isEmpty(t))return"search_operation.operation missing";if(Iv.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${Iv.join(", ")}`}a(Pv,"exportCoreValidation");async function vv(e){Zr.trace("in getRecords");let t,r;if(cl.isEmpty(e.search_operation)||cl.isEmptyOrZeroLength(e.search_operation.operation))throw ot(new Error,Er.INVALID_VALUE("Search operation"),at.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=wee;break;case"search_by_hash":t=Iee;break;case"sql":t=Cee;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Zr.error(r),ot(new Error,r,at.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(vv,"getRecords")});var kv={};We(kv,{contentTypes:()=>Gv,findBestSerializer:()=>JE,getDeserializer:()=>Ba,registerContentHandlers:()=>Ug,serialize:()=>Mg,serializeMessage:()=>Un});function vee(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Ug(e){e.register(Hee,{serializers:[{regex:/^application\/json$/,serializer:WE.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new No.EncoderStream(ll).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?zE.Readable.from((0,Ws.encodeIter)(t,ll)):(0,Ws.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ws.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,No.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function JE(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Ot.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Ot.keys()).join(", "))}};r=Ot.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Mg(e,t,r){let s=t.headers["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),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=JE(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,QE.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,QE.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Un(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=JE(t);return r=t.serialize=s.serializer.serialize,r(e)}function qee(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 Ba(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Ot.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Ot.get(e)?.deserialize||qv(e,s);return o=>qee(o).then(i)}return Ot.get(e)?.deserialize||qv(e,s)}function qv(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 Fee(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 WE,Dg,Ws,No,QE,zE,Fv,ll,Ot,Gv,Hv,xv,Bee,Hee,Da=ge(()=>{WE=D(hm()),Dg=D(KE()),Ws=require("msgpackr"),No=require("cbor-x"),QE=require("zlib"),zE=require("stream");ns();Fv=require("../index"),ll={useRecords:!1,useToJSON:!0};Et.contentType=function(e,t){Ot.set(e,t)};Ot=new Map,Gv=Ot;(0,Fv._assignPackageExport)("contentTypes",Gv);Ot.set("application/json",{serializeStream:WE.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});Hv=new No.Encoder(ll);Ot.set("application/cbor",{serializeStream(e){return new No.EncoderStream(ll).end(e)},serialize:Hv.encode,deserialize:Hv.decode,q:1});Ot.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?zE.Readable.from((0,Ws.encodeIter)(e,ll)):(0,Ws.pack)(e)},serialize:Ws.pack,deserialize:Ws.unpack,q:.9});Ot.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Dg.toCsvStream)(e)},q:.1});Ot.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Ot.set("text/event-stream",{serializeStream:function(e){return zE.Readable.from(Fee(e,this.serialize))},serialize:function(e){if(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+`
20
20
  `),t+`
21
21
  `}else return"data: "+e+`
22
22
 
23
- `},q:.8});Ot.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()}});Fv={type:"application/json",serializeStream:WE.streamAsJSON,serialize:JSON.stringify,deserialize:Pee,q:.8};Ot.set("*/*",Fv);Ot.set("",Fv);a(Pee,"tryJSONParse");a(Ug,"registerContentHandlers");vee=require("fastify-plugin"),Bee=vee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=JE(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(JE,"findBestSerializer");a(Mg,"serialize");a(wn,"serializeMessage");a(Hee,"streamToBuffer");a(Pa,"getDeserializer");a(Bv,"deserializerUnknownType");a(qee,"transformIterable")});var Bg={};Ke(Bg,{start:()=>xee});async function Gee(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&g_(e);let s=performance.now(),n,i=new To;try{e.responseHeaders=i;let o=e.url.slice(1),c=vg.getMatch(o);if(!c)return t(e);e.handlerPath=c.path;let u={url:c.relativeURL},l=c.Resource,_=await Xe(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Pa(e.headers["content-type"],!0)(e.body)}catch(p){throw new ll.ClientError(p,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new ll.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new ll.ServerError(`Method ${r} is not recognized`,501)}}),d=200,E;if(_==null)d=r==="GET"||r==="HEAD"?404:204;else if(E=e?.lastModified){Fee[0]=E;let p=String.fromCharCode(34,(Mt[0]&63)+62,(Mt[0]>>6)+(Mt[1]<<2&63)+62,(Mt[1]>>4)+(Mt[2]<<4&63)+62,(Mt[2]>>2)+62,(Mt[3]&63)+62,(Mt[3]>>6)+(Mt[4]<<2&63)+62,(Mt[4]>>4)+(Mt[5]<<4&63)+62,(Mt[5]>>2)+62,(Mt[6]&63)+62,(Mt[6]>>6)+(Mt[7]<<2&63)+62,34),T=e.headers["if-none-match"];T&&p==T?(_?.onDone&&_.onDone(),d=304,_=void 0):i.set("ETag",p)}e.createdResource&&(d=201),e.newLocation&&i.set("Location",e.newLocation);let f={status:d,headers:i,body:void 0},h=_?.wasLoadedFromSource?.();return h!==void 0&&(h?f.wasCacheMiss=!0:E&&i.set("Age",Math.round((Date.now()-E)/1e3))),_!==void 0&&(f.body=Mg(_,e,f),r==="HEAD"&&(f.body=void 0)),f}catch(o){return o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(c=>c.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:wn(o.toString(),e)}}}function xee(e){if(xv)return;xv=!0,vg=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return Gee(r,s)}),e.server.ws(async(r,s,n)=>{kv++,Pg||(setTimeout(()=>{console.log("connection count",kv,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Pg=!1},1e3),Pg=!0),t(s);let i=new ys;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Pa(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await vg.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(wn(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(wn(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var ll,Mt,Fee,xv,vg,kv,Pg,$v=Te(()=>{Ca();ll=D(z());R_();Lc();Vi();bE();Mt=new Uint8Array(8),Fee=new Float64Array(Mt.buffer,0,1);a(Gee,"http");kv=0;a(xee,"start")});var Hg=m((ETe,Vv)=>{var{recordAction:jE,recordActionBinary:kee}=(co(),re(pu)),$ee=require("fastify-plugin"),Vee=200;Vv.exports=$ee(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),jE(o,"TTFB",l,d,_),kee(n.raw.statusCode<400,"success",l,d,_);let E=Vee;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{jE(performance.now()-c,"transfer",l,d,_),jE(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,jE(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var xg=m((fTe,zv)=>{var rf=require("clone"),sf=He(),Yee=F(),ef=R(),Kee=C(),XE=require("fs"),qg=require("joi"),{string:tf}=qg.types(),{hdb_errors:Wee,handleHDBError:_l}=z(),{HDB_ERROR_MSGS:Qee,HTTP_STATUS_CODES:ZE}=Wee,{common_validators:va}=Ds(),Yv=1e9,Kv=" is required",zee=["insert","update","upsert"],Fg={database:{presence:!1,format:va.schema_format,length:va.schema_length},schema:{presence:!1,format:va.schema_format,length:va.schema_length},table:{presence:!0,format:va.schema_format,length:va.schema_length},action:{inclusion:{within:zee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Jee={schema:tf.required(),table:tf.required(),action:tf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:jee,AWS_SECRET:Xee,AWS_BUCKET:Zee,AWS_FILE_KEY:ete,REGION:tte}=ef.S3_BUCKET_AUTH_KEYS,rte={s3:{presence:!0},[`s3.${jee}`]:{presence:!0,type:"String"},[`s3.${Xee}`]:{presence:!0,type:"String"},[`s3.${Zee}`]:{presence:!0,type:"String"},[`s3.${ete}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${tte}`]:{presence:!0,type:"String"}},Wv=rf(Fg);Wv.data.presence={message:Kv};var Qv=rf(Fg);Qv.file_path.presence={message:Kv};var ste=Object.assign(rf(Fg),rte),Gg=rf(Jee);Gg.csv_url=tf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Gg.passthrough_headers=qg.object();function nte(e){let t=sf.validateObject(e,Wv);return nf(e,t)}a(nte,"dataObject");function ite(e){let t=sf.validateBySchema(e,qg.object(Gg));return nf(e,t)}a(ite,"urlObject");function ote(e){let t=sf.validateObject(e,Qv);return nf(e,t)}a(ote,"fileObject");function ate(e){let t=sf.validateObject(e,ste);return nf(e,t)}a(ate,"s3FileObject");function nf(e,t){if(!t){let r=Yee.checkGlobalSchemaTable(e.schema,e.table);if(r)return _l(new Error,r,ZE.BAD_REQUEST);if(e.operation===ef.OPERATIONS_ENUM.CSV_FILE_LOAD){try{XE.accessSync(e.file_path,XE.constants.R_OK|XE.constants.F_OK)}catch(s){return s.code===ef.NODE_ERROR_CODES.ENOENT?_l(s,`No such file or directory ${s.path}`,ZE.BAD_REQUEST):s.code===ef.NODE_ERROR_CODES.EACCES?_l(s,`Permission denied ${s.path}`,ZE.BAD_REQUEST):_l(s)}try{let s=XE.statSync(e.file_path).size;if(s>Yv)return _l(new Error,Qee.MAX_FILE_SIZE_ERR(s,Yv),ZE.BAD_REQUEST)}catch(s){Kee.error(s),console.error(s)}}}return t}a(nf,"postValidateChecks");zv.exports={dataObject:nte,urlObject:ite,fileObject:ote,s3FileObject:ate}});var kg=m((mTe,Jv)=>{"use strict";var dl=C(),of=R();async function cte(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===of.OPERATIONS_ENUM.INSERT||t.operation===of.OPERATIONS_ENUM.UPDATE||t.operation===of.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===of.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(dl.info(i.message),i):i.http_resp_msg?(dl.error(`Error calling operation: ${e.name}`),dl.error(i.http_resp_msg),i):(dl.error(`Error calling operation: ${e.name}`),dl.error(i),i)}}a(cte,"callOperationFunctionAsAwait");Jv.exports={callOperationFunctionAsAwait:cte}});var Xv=m((STe,jv)=>{"use strict";var $g=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}},Vg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};jv.exports={BulkLoadFileObject:$g,BulkLoadDataObject:Vg}});var eB=m((gTe,Zv)=>{"use strict";var Yg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};Zv.exports=Yg});var jg=m((yTe,pB)=>{"use strict";var af=Xt(),uf=xg(),ute=require("needle"),hs=R(),ATe=Me(),Ba=F(),{handleHDBError:$e,hdb_errors:uB}=z(),{HTTP_STATUS_CODES:Pt,HDB_ERROR_MSGS:Tt,CHECK_LOGS_WRAPPER:Oo}=uB,Ha=C(),Kg=require("papaparse");Ba.promisifyPapaParse();var ms=require("fs-extra"),lte=require("path"),{chain:tB}=require("stream-chain"),rB=require("stream-json/streamers/StreamArray"),sB=require("stream-json/utils/Batch"),nB=require("stream-chain/utils/comp"),{finished:iB}=require("stream"),_te=Y(),lB=kg(),dte=Cg(),{BulkLoadFileObject:Qg,BulkLoadDataObject:Ete}=Xv(),zg=Tg(),{verifyBulkLoadAttributePerms:_B}=$E(),OTe=eB(),NTe=Qe(),bTe=hn(),{databases:fte}=(_e(),re(be)),{coerceType:hte}=(lf(),re(Xg)),oB="No records parsed from csv file.",Ao=`${_te.get("HDB_ROOT")}/tmp`,{schema_regex:mte}=Ds(),aB=1024*1024*2,cB=5e3,pte={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};pB.exports={csvDataLoad:Ste,csvURLLoad:Tte,csvFileLoad:gte,importFromS3:Rte};async function Ste(e,t){let r=uf.dataObject(e);if(r)throw $e(r,r.message,Pt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=fB(e.schema,e.table),i=Kg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Wg.bind(null,n),dynamicTyping:!1}),o=new zg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&_B(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 $e(new Error,c,Pt.BAD_REQUEST,void 0,void 0,!0);let u=new Ete(e.action,e.schema,e.table,i.data);return s=await lB.callOperationFunctionAsAwait(hB,u,null),s.message===oB?oB:mB(s.records,s.number_written)}catch(n){throw No(n)}}a(Ste,"csvDataLoad");async function Tte(e){let t=uf.urlObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ao}/${r}`;try{await Ate(e,r)}catch(n){throw Ha.error(Tt.DOWNLOAD_FILE_ERR(r)+" - "+n),$e(n,Oo(Tt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,s,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Jg(n);return await cf(s),i}catch(n){throw await cf(s),No(n)}}a(Tte,"csvURLLoad");async function gte(e){let t=uf.fileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,hs.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Jg(r)}catch(s){throw No(s)}}a(gte,"csvFileLoad");async function Rte(e){let t=uf.s3FileObject(e);if(t)throw $e(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=lte.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ao}/${n}`;let i=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Ote(n,e);let o=await Jg(i);return await cf(r),o}catch(s){throw await cf(r),No(s)}}a(Rte,"importFromS3");async function Ate(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await ute("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 $e(s,n,s.statusCode,hs.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}bte(r,e.csv_url),await Nte(t,r.raw)}a(Ate,"downloadCSVFile");async function Ote(e,t){try{let r=`${Ao}/${e}`;await ms.mkdirp(Ao),await ms.writeFile(`${Ao}/${e}`,"",{flag:"a+"});let s=await ms.createWriteStream(r),n=await dte.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(){Ha.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Ha.error(Tt.S3_DOWNLOAD_ERR+" - "+r),$e(r,Oo(Tt.S3_DOWNLOAD_ERR))}}a(Ote,"downloadFileFromS3");async function Nte(e,t){try{await ms.mkdirp(Ao),await ms.writeFile(`${Ao}/${e}`,t)}catch(r){throw Ha.error(Tt.WRITE_TEMP_FILE_ERR),$e(r,Oo(Tt.DEFAULT_BULK_LOAD_ERR))}}a(Nte,"writeFileToTempFolder");async function cf(e){if(e)try{await ms.access(e),await ms.unlink(e)}catch{Ha.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(cf,"deleteTempFile");function bte(e,t){if(e.statusCode!==uB.HTTP_STATUS_CODES.OK)throw $e(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Pt.BAD_REQUEST);if(!pte[e.headers["content-type"]])throw $e(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Pt.BAD_REQUEST);if(!e.raw)throw $e(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Pt.BAD_REQUEST)}a(bte,"validateURLResponse");async function Jg(e){try{let t;switch(e.file_type){case hs.VALID_S3_FILE_TYPES.CSV:t=await yte(e);break;case hs.VALID_S3_FILE_TYPES.JSON:t=await Ite(e);break;default:throw $e(new Error,Tt.DEFAULT_BULK_LOAD_ERR,Pt.BAD_REQUEST,hs.LOG_LEVELS.ERROR,Tt.INVALID_FILE_EXT_ERR(e))}return mB(t.records,t.number_written)}catch(t){throw No(t)}}a(Jg,"fileLoad");async function dB(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 af.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&_B(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=$e(c);r(u)}}a(dB,"validateChunk");async function EB(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ba.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ba.isEmpty(c)&&!Ba.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 lB.callOperationFunctionAsAwait(hB,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=$e(c,Oo(Tt.INSERT_CSV_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.INSERT_CSV_ERR+" - "+c);r(u)}}a(EB,"insertChunk");async function yte(e){let t={records:0,number_written:0},r=fB(e.schema,e.table);try{let s=new zg,n=ms.createReadStream(e.file_path,{highWaterMark:aB});n.setEncoding("utf8"),await Kg.parsePromise(n,dB.bind(null,e,s),Wg.bind(null,r));let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);return n=ms.createReadStream(e.file_path,{highWaterMark:aB}),n.setEncoding("utf8"),await Kg.parsePromise(n,EB.bind(null,e,t),Wg.bind(null,r)),n.destroy(),t}catch(s){throw $e(s,Oo(Tt.PAPA_PARSE_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.PAPA_PARSE_ERR+s)}}a(yte,"callPapaParse");function fB(e,t){let r=fte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>hte(i,n));return s}a(fB,"createTransformMap");function Wg(e,t,r){let s=e.get(r);return s?s(t):Ba.autoCast(t)}a(Wg,"typeFunction");async function Ite(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new zg,n=tB([ms.createReadStream(e.file_path,{encoding:"utf-8"}),rB.withParser(),c=>c.value,new sB({batchSize:cB}),nB(async c=>{await dB(e,s,r,c)})]);await new Promise((c,u)=>{iB(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw $e(new Error,i,Pt.BAD_REQUEST);let o=tB([ms.createReadStream(e.file_path,{encoding:"utf-8"}),rB.withParser(),c=>c.value,new sB({batchSize:cB}),nB(async c=>{await EB(e,t,r,c)})]);return await new Promise((c,u)=>{iB(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw $e(s,Oo(Tt.INSERT_JSON_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.INSERT_JSON_ERR+s)}}a(Ite,"insertJson");async function hB(e){let t={};try{e.data&&e.data.length>0&&wte(e.data[0])?t=await Cte(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Ha.info(t.message))}catch(r){throw No(r)}return t}a(hB,"callBulkFileLoad");function wte(e){let t=Object.keys(e);for(let r of t)if(!mte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(wte,"validateColumnNames");async function Cte(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=af.insert;break;case"update":i=af.update;break;case"upsert":i=af.upsert;break;default:throw $e(new Error,Tt.INVALID_ACTION_PARAM_ERR(s),Pt.BAD_REQUEST,hs.LOG_LEVELS.ERROR,Tt.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=Ba.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw No(o)}}a(Cte,"bulkFileLoad");function mB(e,t){return`successfully loaded ${t} of ${e} records`}a(mB,"buildResponseMsg");function No(e){return $e(e,Oo(Tt.DEFAULT_BULK_LOAD_ERR),Pt.INTERNAL_SERVER_ERROR,hs.LOG_LEVELS.ERROR,Tt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(No,"buildTopLevelErrMsg")});var TB=m((wTe,SB)=>{"use strict";var Zg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};SB.exports=Zg});var AB=m((LTe,RB)=>{"use strict";var Lte=R(),gB=require("moment"),Dte=require("uuid").v4,eR=class{static{a(this,"JobObject")}constructor(){this.id=Dte(),this.type=void 0,this.start_datetime=gB().valueOf(),this.created_datetime=gB().valueOf(),this.end_datetime=void 0,this.status=Lte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};RB.exports=eR});var tR=m((UTe,wB)=>{"use strict";var Ute=require("uuid").v4,bB=Xt(),yB=jt(),Mte=as(),Pte=ca(),vte=TB(),Ve=R(),Bte=AB(),Hte=xd(),Xr=C(),qte=$c(),qa=F(),{promisify:Fte}=require("util"),bo=require("moment"),Gte=YE(),_f=xg(),OB=ep(),{deleteTransactionLogsBeforeValidator:xte}=Eg(),{handleHDBError:kte,hdb_errors:$te}=z(),{HTTP_STATUS_CODES:Vte}=$te,NB=yB.searchByValue,Yte=yB.searchByHash,Kte=bB.insert,Wte=Fte(Gte.evaluateSQL),Qte=bB.update;wB.exports={addJob:jte,updateJob:Zte,handleGetJob:zte,handleGetJobsByStartDate:Jte,getJobById:IB};async function zte(e){try{let t=await IB(e.id);return qa.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 Xr.error("There was an error getting job",t),new Error(r)}}a(zte,"handleGetJob");async function Jte(e){try{let t=await Xte(e);if(Xr.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=bo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=bo(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 Xr.error(r),new Error(r)}}a(Jte,"handleGetJobsByStartDate");async function jte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||qa.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Xr.info(_),t.error=_,t}if(!Ve.JOB_TYPE_ENUM[e.operation])return Xr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ve.OPERATIONS_ENUM.CSV_FILE_LOAD:s=_f.fileObject(e);break;case Ve.OPERATIONS_ENUM.CSV_URL_LOAD:s=_f.urlObject(e);break;case Ve.OPERATIONS_ENUM.CSV_DATA_LOAD:s=_f.dataObject(e);break;case Ve.OPERATIONS_ENUM.IMPORT_FROM_S3:s=_f.s3FileObject(e);break;case Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=OB(e,"date");break;case Ve.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=OB(e,"timestamp");break;case Ve.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=xte(e);break;default:break}if(s)throw kte(s,s.message,Vte.BAD_REQUEST,void 0,void 0,!0);let n=new Bte;n.type=e.operation===Ve.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ve.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Mte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await NB(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Xr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Ute();try{o=await NB(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Xr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Xr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new qte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Kte(u)}catch(_){return Xr.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,Xr.trace(_)}return t}a(jte,"addJob");async function Xte(e){let t=bo(e.from_date,bo.ISO_8601),r=bo(e.to_date,bo.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 vte(s,e.hdb_user);try{return await Wte(n)}catch(i){throw Xr.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(Xte,"getJobsInDateRange");async function IB(e){if(qa.isEmptyOrZeroLength(e))return qa.errorizeMessage("Invalid job ID specified.");let t=new Pte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Yte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Xr.error(s),qa.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(IB,"getJobById");async function Zte(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(qa.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ve.JOB_STATUS_ENUM.COMPLETE||e.status===Ve.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=bo().valueOf());let t=new Hte(Ve.SYSTEM_SCHEMA_NAME,Ve.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Qte(t),r}a(Zte,"updateJob")});var PB=m((PTe,MB)=>{"use strict";var CB=F(),Er=R(),ere=require("moment"),df=jg(),Ef=C(),LB=tR(),DB=KE(),UB=Xi(),tre=tt(),rre=vE(),rR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function sre(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(CB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(CB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Er.JOB_TYPE_ENUM.csv_file_load:await Mn(e,df.csvFileLoad);break;case Er.JOB_TYPE_ENUM.csv_url_load:await Mn(e,df.csvURLLoad);break;case Er.JOB_TYPE_ENUM.csv_data_load:await Mn(e,df.csvDataLoad);break;case Er.JOB_TYPE_ENUM.import_from_s3:await Mn(e,df.importFromS3);break;case Er.JOB_TYPE_ENUM.empty_trash:break;case Er.JOB_TYPE_ENUM.export_local:await Mn(e,DB.export_local);break;case Er.JOB_TYPE_ENUM.export_to_s3:await Mn(e,DB.export_to_s3);break;case Er.JOB_TYPE_ENUM.delete_files_before:case Er.JOB_TYPE_ENUM.delete_records_before:await Mn(e,UB.deleteFilesBefore);break;case Er.JOB_TYPE_ENUM.delete_audit_logs_before:await Mn(e,UB.deleteAuditLogsBefore);break;case Er.JOB_TYPE_ENUM.delete_transaction_logs_before:await Mn(e,rre.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(sre,"parseMessage");async function Mn(e,t){try{e.job.status=Er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=ere().valueOf(),await LB.updateJob(e.job),await nre(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):Ef.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ef.error(s),e.job.message=s,e.job.status=Er.JOB_STATUS_ENUM.ERROR;try{await LB.updateJob(e.job)}catch(n){throw Ef.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Mn,"runJob");async function nre(e){Ef.trace("launching job thread:",e),tre.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(nre,"launchJobThread");MB.exports={parseMessage:sre,RunnerMessage:rR}});var BB=m((BTe,vB)=>{"use strict";var sR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};vB.exports=sR});var ZB=m((qTe,cR)=>{"use strict";var pf=jt(),oR=YE(),ff=jg(),Pn=Ud(),hf=Xn(),fl=Xi(),ire=$S(),El=er(),mf=Hd(),vt=ME(),gt=C(),ore=eT(),are=Uu(),cre=MT(),ure=eE(),lre=PT(),_re=vT(),dre=nE(),Ere=oE(),nR=cE(),HB=KE(),fre=$E(),aR=tR(),w=R(),{hdb_errors:ml,handleHDBError:hl}=z(),{HTTP_STATUS_CODES:qB}=ml,iR=lE(),FB=ya(),QB=require("util"),Fa=Xt(),hre=$r(),mre=On(),GB=PB(),xB=wu(),kB=(LE(),re(Ju)),$B=et(),VB=vE(),YB=FE(),{setServerUtilities:pre}=(lf(),re(Xg)),{CONTEXT:Sre}=(Is(),re(im)),{_assignPackageExport:Tre}=require("../index"),{transformReq:gre}=F(),Rre=kg(),KB=pf.searchByHash,Are=pf.searchByValue,Ore=QB.promisify(pf.search),Nre=QB.promisify(oR.evaluateSQL),bre={[w.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.CREATE_TABLE]:!0,[w.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[w.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.DROP_TABLE]:!0,[w.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=BB();async function zB(e,t){try{if(e.body.operation!=="read_log"&&(gt.log_level===w.LOG_LEVELS.INFO||gt.log_level===w.LOG_LEVELS.DEBUG||gt.log_level===w.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;gt.info(o)}}catch(s){gt.error(s)}let r=await Rre.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return bre[e.body.operation]&&hre.setSchemaDataToGlobal(s=>{s&&gt.error(s)}),r}a(zB,"processLocalTransaction");var WB=Ire();cR.exports={chooseOperation:JB,getOperationFunction:jB,operation:XB,processLocalTransaction:zB};pre(cR.exports);function JB(e){let t;try{t=jB(e)}catch(n){throw gt.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=oR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=oR.checkASTPermissions(e,i);if(o)throw gt.error(`${qB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),hl(new Error,o,ml.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==w.OPERATIONS_ENUM.LOGIN&&e.operation!==w.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=fre.verifyPerms(i,n);if(o)throw gt.error(`${qB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),hl(new Error,o,ml.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw hl(n,"There was an error when trying to choose an operation path")}return r}a(JB,"chooseOperation");function jB(e){if(gt.trace(`getOperationFunction with operation: ${e.operation}`),WB.has(e.operation))return WB.get(e.operation);throw hl(new Error,ml.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),ml.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(jB,"getOperationFunction");Tre("operation",XB);function XB(e,t){e.hdb_user=this[Sre]?.user,e.bypass_auth=!t;let r=JB(e);return zB({body:e},r)}a(XB,"operation");async function yre(e){gt.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[w.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case w.OPERATIONS_ENUM.INSERT:o=await Fa.insert(i);break;case w.OPERATIONS_ENUM.UPDATE:o=await Fa.update(i);break;case w.OPERATIONS_ENUM.UPSERT:o=await Fa.upsert(i);break;case w.OPERATIONS_ENUM.DELETE:o=await fl.deleteRecord(i);break;default:gt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){gt.info("Invalid operation in transaction"),gt.error(o)}}a(yre,"catchup");async function Ys(e){gre(e);let t,r;try{r=await aR.addJob(e),t=r.createdJob,gt.info("addJob result",r);let s=new GB.RunnerMessage(t,e);return await GB.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 gt.error(n),hl(s,n)}}a(Ys,"executeJob");function Ire(){let e=new Map;return e.set(w.OPERATIONS_ENUM.INSERT,new q(Fa.insert)),e.set(w.OPERATIONS_ENUM.UPDATE,new q(Fa.update)),e.set(w.OPERATIONS_ENUM.UPSERT,new q(Fa.upsert)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(pf.searchByConditions)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(KB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_ID,new q(KB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Are)),e.set(w.OPERATIONS_ENUM.SEARCH,new q(Ore)),e.set(w.OPERATIONS_ENUM.SQL,new q(Nre)),e.set(w.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(Ys,ff.csvDataLoad)),e.set(w.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(Ys,ff.csvFileLoad)),e.set(w.OPERATIONS_ENUM.CSV_URL_LOAD,new q(Ys,ff.csvURLLoad)),e.set(w.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(Ys,ff.importFromS3)),e.set(w.OPERATIONS_ENUM.CREATE_SCHEMA,new q(Pn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_DATABASE,new q(Pn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_TABLE,new q(Pn.createTable)),e.set(w.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(Pn.createAttribute)),e.set(w.OPERATIONS_ENUM.DROP_SCHEMA,new q(Pn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_DATABASE,new q(Pn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_TABLE,new q(Pn.dropTable)),e.set(w.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(Pn.dropAttribute)),e.set(w.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(hf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(hf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(hf.describeTable)),e.set(w.OPERATIONS_ENUM.DESCRIBE_ALL,new q(hf.describeAll)),e.set(w.OPERATIONS_ENUM.DELETE,new q(fl.deleteRecord)),e.set(w.OPERATIONS_ENUM.ADD_USER,new q(El.addUser)),e.set(w.OPERATIONS_ENUM.ALTER_USER,new q(El.alterUser)),e.set(w.OPERATIONS_ENUM.DROP_USER,new q(El.dropUser)),e.set(w.OPERATIONS_ENUM.LIST_USERS,new q(El.listUsersExternal)),e.set(w.OPERATIONS_ENUM.LIST_ROLES,new q(mf.listRoles)),e.set(w.OPERATIONS_ENUM.ADD_ROLE,new q(mf.addRole)),e.set(w.OPERATIONS_ENUM.ALTER_ROLE,new q(mf.alterRole)),e.set(w.OPERATIONS_ENUM.DROP_ROLE,new q(mf.dropRole)),e.set(w.OPERATIONS_ENUM.USER_INFO,new q(El.userInfo)),e.set(w.OPERATIONS_ENUM.READ_LOG,new q(ore)),e.set(w.OPERATIONS_ENUM.ADD_NODE,new q(are)),e.set(w.OPERATIONS_ENUM.UPDATE_NODE,new q(cre)),e.set(w.OPERATIONS_ENUM.REMOVE_NODE,new q(ure)),e.set(w.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(lre)),e.set(w.OPERATIONS_ENUM.PURGE_STREAM,new q(_re)),e.set(w.OPERATIONS_ENUM.SET_CONFIGURATION,new q($B.setConfiguration)),e.set(w.OPERATIONS_ENUM.CLUSTER_STATUS,new q(dre.clusterStatus)),e.set(w.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(Ere)),e.set(w.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(nR.setRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(nR.getRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(nR.deleteRoutes)),e.set(w.OPERATIONS_ENUM.EXPORT_TO_S3,new q(Ys,HB.export_to_s3)),e.set(w.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(Ys,fl.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(Ys,fl.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.EXPORT_LOCAL,new q(Ys,HB.export_local)),e.set(w.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(aR.handleGetJobsByStartDate)),e.set(w.OPERATIONS_ENUM.GET_JOB,new q(aR.handleGetJob)),e.set(w.OPERATIONS_ENUM.GET_FINGERPRINT,new q(iR.getFingerprint)),e.set(w.OPERATIONS_ENUM.SET_LICENSE,new q(iR.setLicense)),e.set(w.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(iR.getRegistrationInfo)),e.set(w.OPERATIONS_ENUM.RESTART,new q(FB.restart)),e.set(w.OPERATIONS_ENUM.RESTART_SERVICE,new q(FB.restartService)),e.set(w.OPERATIONS_ENUM.CATCHUP,new q(yre)),e.set(w.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(mre.systemInformation)),e.set(w.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(Ys,fl.deleteAuditLogsBefore)),e.set(w.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(ire)),e.set(w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q(xB.createTokens)),e.set(w.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q(xB.refreshOperationToken)),e.set(w.OPERATIONS_ENUM.LOGIN,new q(kB.login)),e.set(w.OPERATIONS_ENUM.LOGOUT,new q(kB.logout)),e.set(w.OPERATIONS_ENUM.GET_CONFIGURATION,new q($B.getConfiguration)),e.set(w.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(vt.customFunctionsStatus)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(vt.getCustomFunctions)),e.set(w.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(vt.getComponentFile)),e.set(w.OPERATIONS_ENUM.GET_COMPONENTS,new q(vt.getComponents)),e.set(w.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(vt.setComponentFile)),e.set(w.OPERATIONS_ENUM.DROP_COMPONENT,new q(vt.dropComponent)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(vt.getCustomFunction)),e.set(w.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(vt.setCustomFunction)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(vt.dropCustomFunction)),e.set(w.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.ADD_COMPONENT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(vt.dropCustomFunctionProject)),e.set(w.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(VB.readTransactionLog)),e.set(w.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(Ys,VB.deleteTransactionLogsBefore)),e.set(w.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(YB.installModules)),e.set(w.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(YB.auditModules)),e.set(w.OPERATIONS_ENUM.GET_BACKUP,new q(Pn.getBackup)),e}a(Ire,"initializeOperationFunctionMap")});var Tf=m((GTe,rH)=>{"use strict";var uR=R(),wre=F(),pl=C(),{handleHDBError:lR,hdb_errors:Sf}=z(),{isMainThread:Cre}=require("worker_threads"),{Readable:Lre}=require("stream"),eH=require("os"),Dre=require("util"),Ure=lT(),Mre=Dre.promisify(Ure.authorize),tH=ZB(),{Gzip:Pre}=require("zlib");function vre(e){let t=`Found an uncaught exception with message: ${e.message}. ${eH.EOL}Stack: ${e.stack} ${eH.EOL}Terminating ${Cre?"HDB":"thread"}.`;console.error(t),pl.fatal(t),process.exit(1)}a(vre,"handleServerUncaughtException");function Bre(e,t,r){if(pl[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:Sf.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(Bre,"serverErrorHandler");function Hre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=lR(new Error,"Invalid JSON.",Sf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(wre.isEmpty(e.body.operation)){let s=lR(new Error,"Request body must include an 'operation' property.",Sf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(Hre,"reqBodyValidationHandler");function qre(e,t,r){let s;e.body.operation!==uR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==uR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==uR.OPERATIONS_ENUM.LOGOUT?Mre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{pl.warn(n),pl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(lR(n,i,Sf.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(qre,"authHandler");async function Fre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=tH.chooseOperation(e.body);let n=await tH.processLocalTransaction(e,s);if(n instanceof Lre&&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(new Pre))}return n}catch(n){throw pl.error(n),n}}a(Fre,"handlePostRequest");rH.exports={authHandler:qre,handlePostRequest:Fre,handleServerUncaughtException:vre,serverErrorHandler:Bre,reqBodyValidationHandler:Hre}});var oH=m((kTe,iH)=>{"use strict";var Gre=require("fastify-plugin"),{handlePostRequest:sH,authHandler:xre,reqBodyValidationHandler:kre}=Tf();async function $re(e){e.decorate("hdbCore",{preValidation:[kre,xre],request:t=>nH(sH(t,response)),requestWithoutAuthentication:(t,r)=>nH(sH(t,r,!0))})}a($re,"hdbCore");async function nH(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(nH,"convertAsyncIterators");iH.exports=Gre($re)});var cH=m((VTe,aH)=>{"use strict";var _R=require("fs"),Ga=Y();Ga.initSync();var{CONFIG_PARAMS:Sl}=R(),Vre=1024*1024*1024;function Yre(e){let t=Ga.get(Sl.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Ga.get(Sl.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Vre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ga.get(Sl.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Ga.get(Sl.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Ga.get(Sl.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:_R.readFileSync(`${n}`),cert:_R.readFileSync(i)+(o?`
23
+ `},q:.8});Ot.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()}});xv={type:"application/json",serializeStream:WE.streamAsJSON,serialize:JSON.stringify,deserialize:vee,q:.8};Ot.set("*/*",xv);Ot.set("",xv);a(vee,"tryJSONParse");a(Ug,"registerContentHandlers");Bee=require("fastify-plugin"),Hee=Bee(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=JE(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(JE,"findBestSerializer");a(Mg,"serialize");a(Un,"serializeMessage");a(qee,"streamToBuffer");a(Ba,"getDeserializer");a(qv,"deserializerUnknownType");a(Fee,"transformIterable")});var Bg={};We(Bg,{start:()=>kee});async function xee(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&g_(e);let s=new Ti;try{e.responseHeaders=s;let n=e.url.slice(1),i=vg.getMatch(n);if(!i)return t(e);e.handlerPath=i.path;let o={url:i.relativeURL},c=i.Resource,u=await Ze(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Ba(e.headers["content-type"],!0)(e.body)}catch(f){throw new _l.ClientError(f,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,e.headers.destination,e);case"MOVE":return c.move(o,e.headers.destination,e);case"BREW":throw new _l.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new _l.ServerError(`Method ${r} is not recognized`,501)}}),l=200,_;if(u==null)l=r==="GET"||r==="HEAD"?404:204;else if(_=e?.lastModified){Gee[0]=_;let f=String.fromCharCode(34,(Mt[0]&63)+62,(Mt[0]>>6)+(Mt[1]<<2&63)+62,(Mt[1]>>4)+(Mt[2]<<4&63)+62,(Mt[2]>>2)+62,(Mt[3]&63)+62,(Mt[3]>>6)+(Mt[4]<<2&63)+62,(Mt[4]>>4)+(Mt[5]<<4&63)+62,(Mt[5]>>2)+62,(Mt[6]&63)+62,(Mt[6]>>6)+(Mt[7]<<2&63)+62,34),h=e.headers["if-none-match"];h&&f==h?(u?.onDone&&u.onDone(),l=304,u=void 0):s.set("ETag",f)}e.createdResource&&(l=201),e.newLocation&&s.set("Location",e.newLocation);let d={status:l,headers:s,body:void 0},E=u?.wasLoadedFromSource?.();return E!==void 0&&(E?d.wasCacheMiss=!0:_&&s.set("Age",Math.round((Date.now()-_)/1e3))),u!==void 0&&(d.body=Mg(u,e,d),r==="HEAD"&&(d.body=void 0)),d}catch(n){return n.statusCode||console.error(n),n.statusCode===405&&(n.method&&(n.message+=` to handle HTTP method ${n.method.toUpperCase()||""}`),n.allow&&(n.allow.push("trace","head","options"),s.set("Allow",n.allow.map(i=>i.toUpperCase()).join(", ")))),{status:n.statusCode||500,headers:s,body:Un(n.toString(),e)}}}function kee(e){if($v)return;$v=!0,vg=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return xee(r,s)}),e.server.ws(async(r,s,n)=>{Vv++,Pg||(setTimeout(()=>{console.log("connection count",Vv,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Pg=!1},1e3),Pg=!0),t(s);let i=new Cs;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Ba(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await vg.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Un(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Un(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var _l,Mt,Gee,$v,vg,Vv,Pg,Yv=ge(()=>{Da();_l=D(z());R_();Dc();Qi();bE();Mt=new Uint8Array(8),Gee=new Float64Array(Mt.buffer,0,1);a(xee,"http");Vv=0;a(kee,"start")});var Hg=m((fTe,Kv)=>{var{recordAction:jE,recordActionBinary:$ee}=(Eo(),re(Su)),Vee=require("fastify-plugin"),Yee=200;Kv.exports=Vee(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),jE(o,"TTFB",l,d,_),$ee(n.raw.statusCode<400,"success",l,d,_);let E=Yee;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{jE(performance.now()-c,"transfer",l,d,_),jE(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,jE(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var xg=m((hTe,jv)=>{var rf=require("clone"),sf=qe(),Kee=G(),ef=R(),Wee=C(),XE=require("fs"),qg=require("joi"),{string:tf}=qg.types(),{hdb_errors:Qee,handleHDBError:dl}=z(),{HDB_ERROR_MSGS:zee,HTTP_STATUS_CODES:ZE}=Qee,{common_validators:Ha}=Ps(),Wv=1e9,Qv=" is required",Jee=["insert","update","upsert"],Fg={database:{presence:!1,format:Ha.schema_format,length:Ha.schema_length},schema:{presence:!1,format:Ha.schema_format,length:Ha.schema_length},table:{presence:!0,format:Ha.schema_format,length:Ha.schema_length},action:{inclusion:{within:Jee,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},jee={schema:tf.required(),table:tf.required(),action:tf.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Xee,AWS_SECRET:Zee,AWS_BUCKET:ete,AWS_FILE_KEY:tte,REGION:rte}=ef.S3_BUCKET_AUTH_KEYS,ste={s3:{presence:!0},[`s3.${Xee}`]:{presence:!0,type:"String"},[`s3.${Zee}`]:{presence:!0,type:"String"},[`s3.${ete}`]:{presence:!0,type:"String"},[`s3.${tte}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${rte}`]:{presence:!0,type:"String"}},zv=rf(Fg);zv.data.presence={message:Qv};var Jv=rf(Fg);Jv.file_path.presence={message:Qv};var nte=Object.assign(rf(Fg),ste),Gg=rf(jee);Gg.csv_url=tf.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Gg.passthrough_headers=qg.object();function ite(e){let t=sf.validateObject(e,zv);return nf(e,t)}a(ite,"dataObject");function ote(e){let t=sf.validateBySchema(e,qg.object(Gg));return nf(e,t)}a(ote,"urlObject");function ate(e){let t=sf.validateObject(e,Jv);return nf(e,t)}a(ate,"fileObject");function cte(e){let t=sf.validateObject(e,nte);return nf(e,t)}a(cte,"s3FileObject");function nf(e,t){if(!t){let r=Kee.checkGlobalSchemaTable(e.schema,e.table);if(r)return dl(new Error,r,ZE.BAD_REQUEST);if(e.operation===ef.OPERATIONS_ENUM.CSV_FILE_LOAD){try{XE.accessSync(e.file_path,XE.constants.R_OK|XE.constants.F_OK)}catch(s){return s.code===ef.NODE_ERROR_CODES.ENOENT?dl(s,`No such file or directory ${s.path}`,ZE.BAD_REQUEST):s.code===ef.NODE_ERROR_CODES.EACCES?dl(s,`Permission denied ${s.path}`,ZE.BAD_REQUEST):dl(s)}try{let s=XE.statSync(e.file_path).size;if(s>Wv)return dl(new Error,zee.MAX_FILE_SIZE_ERR(s,Wv),ZE.BAD_REQUEST)}catch(s){Wee.error(s),console.error(s)}}}return t}a(nf,"postValidateChecks");jv.exports={dataObject:ite,urlObject:ote,fileObject:ate,s3FileObject:cte}});var kg=m((pTe,Xv)=>{"use strict";var El=C(),of=R();async function ute(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===of.OPERATIONS_ENUM.INSERT||t.operation===of.OPERATIONS_ENUM.UPDATE||t.operation===of.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===of.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(El.info(i.message),i):i.http_resp_msg?(El.error(`Error calling operation: ${e.name}`),El.error(i.http_resp_msg),i):(El.error(`Error calling operation: ${e.name}`),El.error(i),i)}}a(ute,"callOperationFunctionAsAwait");Xv.exports={callOperationFunctionAsAwait:ute}});var eB=m((TTe,Zv)=>{"use strict";var $g=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}},Vg=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};Zv.exports={BulkLoadFileObject:$g,BulkLoadDataObject:Vg}});var rB=m((RTe,tB)=>{"use strict";var Yg=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};tB.exports=Yg});var jg=m((ITe,TB)=>{"use strict";var af=Zt(),uf=xg(),lte=require("needle"),ps=R(),OTe=Pe(),qa=G(),{handleHDBError:Ve,hdb_errors:_B}=z(),{HTTP_STATUS_CODES:Pt,HDB_ERROR_MSGS:Tt,CHECK_LOGS_WRAPPER:yo}=_B,Fa=C(),Kg=require("papaparse");qa.promisifyPapaParse();var Ss=require("fs-extra"),_te=require("path"),{chain:sB}=require("stream-chain"),nB=require("stream-json/streamers/StreamArray"),iB=require("stream-json/utils/Batch"),oB=require("stream-chain/utils/comp"),{finished:aB}=require("stream"),dte=Y(),dB=kg(),Ete=Cg(),{BulkLoadFileObject:Qg,BulkLoadDataObject:fte}=eB(),zg=Tg(),{verifyBulkLoadAttributePerms:EB}=$E(),NTe=rB(),bTe=ze(),yTe=Tn(),{databases:hte}=(de(),re(Ie)),{coerceType:mte}=(lf(),re(Xg)),cB="No records parsed from csv file.",bo=`${dte.get("HDB_ROOT")}/tmp`,{schema_regex:pte}=Ps(),uB=1024*1024*2,lB=5e3,Ste={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};TB.exports={csvDataLoad:Tte,csvURLLoad:gte,csvFileLoad:Rte,importFromS3:Ate};async function Tte(e,t){let r=uf.dataObject(e);if(r)throw Ve(r,r.message,Pt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=mB(e.schema,e.table),i=Kg.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Wg.bind(null,n),dynamicTyping:!1}),o=new zg;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&EB(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 Ve(new Error,c,Pt.BAD_REQUEST,void 0,void 0,!0);let u=new fte(e.action,e.schema,e.table,i.data);return s=await dB.callOperationFunctionAsAwait(pB,u,null),s.message===cB?cB:SB(s.records,s.number_written)}catch(n){throw Io(n)}}a(Tte,"csvDataLoad");async function gte(e){let t=uf.urlObject(e);if(t)throw Ve(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${bo}/${r}`;try{await Ote(e,r)}catch(n){throw Fa.error(Tt.DOWNLOAD_FILE_ERR(r)+" - "+n),Ve(n,yo(Tt.DOWNLOAD_FILE_ERR(r)))}try{let n=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,s,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Jg(n);return await cf(s),i}catch(n){throw await cf(s),Io(n)}}a(gte,"csvURLLoad");async function Rte(e){let t=uf.fileObject(e);if(t)throw Ve(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,ps.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Jg(r)}catch(s){throw Io(s)}}a(Rte,"csvFileLoad");async function Ate(e){let t=uf.s3FileObject(e);if(t)throw Ve(t,t.message,Pt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=_te.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${bo}/${n}`;let i=new Qg(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await Nte(n,e);let o=await Jg(i);return await cf(r),o}catch(s){throw await cf(r),Io(s)}}a(Ate,"importFromS3");async function Ote(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await lte("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 Ve(s,n,s.statusCode,ps.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}yte(r,e.csv_url),await bte(t,r.raw)}a(Ote,"downloadCSVFile");async function Nte(e,t){try{let r=`${bo}/${e}`;await Ss.mkdirp(bo),await Ss.writeFile(`${bo}/${e}`,"",{flag:"a+"});let s=await Ss.createWriteStream(r),n=await Ete.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(){Fa.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Fa.error(Tt.S3_DOWNLOAD_ERR+" - "+r),Ve(r,yo(Tt.S3_DOWNLOAD_ERR))}}a(Nte,"downloadFileFromS3");async function bte(e,t){try{await Ss.mkdirp(bo),await Ss.writeFile(`${bo}/${e}`,t)}catch(r){throw Fa.error(Tt.WRITE_TEMP_FILE_ERR),Ve(r,yo(Tt.DEFAULT_BULK_LOAD_ERR))}}a(bte,"writeFileToTempFolder");async function cf(e){if(e)try{await Ss.access(e),await Ss.unlink(e)}catch{Fa.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(cf,"deleteTempFile");function yte(e,t){if(e.statusCode!==_B.HTTP_STATUS_CODES.OK)throw Ve(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Pt.BAD_REQUEST);if(!Ste[e.headers["content-type"]])throw Ve(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Pt.BAD_REQUEST);if(!e.raw)throw Ve(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Pt.BAD_REQUEST)}a(yte,"validateURLResponse");async function Jg(e){try{let t;switch(e.file_type){case ps.VALID_S3_FILE_TYPES.CSV:t=await Ite(e);break;case ps.VALID_S3_FILE_TYPES.JSON:t=await wte(e);break;default:throw Ve(new Error,Tt.DEFAULT_BULK_LOAD_ERR,Pt.BAD_REQUEST,ps.LOG_LEVELS.ERROR,Tt.INVALID_FILE_EXT_ERR(e))}return SB(t.records,t.number_written)}catch(t){throw Io(t)}}a(Jg,"fileLoad");async function fB(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 af.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&EB(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ve(c);r(u)}}a(fB,"validateChunk");async function hB(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;qa.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!qa.isEmpty(c)&&!qa.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 dB.callOperationFunctionAsAwait(pB,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ve(c,yo(Tt.INSERT_CSV_ERR),Pt.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,Tt.INSERT_CSV_ERR+" - "+c);r(u)}}a(hB,"insertChunk");async function Ite(e){let t={records:0,number_written:0},r=mB(e.schema,e.table);try{let s=new zg,n=Ss.createReadStream(e.file_path,{highWaterMark:uB});n.setEncoding("utf8"),await Kg.parsePromise(n,fB.bind(null,e,s),Wg.bind(null,r));let i=s.getPermsResponse();if(i)throw Ve(new Error,i,Pt.BAD_REQUEST);return n=Ss.createReadStream(e.file_path,{highWaterMark:uB}),n.setEncoding("utf8"),await Kg.parsePromise(n,hB.bind(null,e,t),Wg.bind(null,r)),n.destroy(),t}catch(s){throw Ve(s,yo(Tt.PAPA_PARSE_ERR),Pt.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,Tt.PAPA_PARSE_ERR+s)}}a(Ite,"callPapaParse");function mB(e,t){let r=hte[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>mte(i,n));return s}a(mB,"createTransformMap");function Wg(e,t,r){let s=e.get(r);return s?s(t):qa.autoCast(t)}a(Wg,"typeFunction");async function wte(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new zg,n=sB([Ss.createReadStream(e.file_path,{encoding:"utf-8"}),nB.withParser(),c=>c.value,new iB({batchSize:lB}),oB(async c=>{await fB(e,s,r,c)})]);await new Promise((c,u)=>{aB(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ve(new Error,i,Pt.BAD_REQUEST);let o=sB([Ss.createReadStream(e.file_path,{encoding:"utf-8"}),nB.withParser(),c=>c.value,new iB({batchSize:lB}),oB(async c=>{await hB(e,t,r,c)})]);return await new Promise((c,u)=>{aB(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Ve(s,yo(Tt.INSERT_JSON_ERR),Pt.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,Tt.INSERT_JSON_ERR+s)}}a(wte,"insertJson");async function pB(e){let t={};try{e.data&&e.data.length>0&&Cte(e.data[0])?t=await Lte(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Fa.info(t.message))}catch(r){throw Io(r)}return t}a(pB,"callBulkFileLoad");function Cte(e){let t=Object.keys(e);for(let r of t)if(!pte.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(Cte,"validateColumnNames");async function Lte(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=af.insert;break;case"update":i=af.update;break;case"upsert":i=af.upsert;break;default:throw Ve(new Error,Tt.INVALID_ACTION_PARAM_ERR(s),Pt.BAD_REQUEST,ps.LOG_LEVELS.ERROR,Tt.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=qa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Io(o)}}a(Lte,"bulkFileLoad");function SB(e,t){return`successfully loaded ${t} of ${e} records`}a(SB,"buildResponseMsg");function Io(e){return Ve(e,yo(Tt.DEFAULT_BULK_LOAD_ERR),Pt.INTERNAL_SERVER_ERROR,ps.LOG_LEVELS.ERROR,Tt.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Io,"buildTopLevelErrMsg")});var RB=m((CTe,gB)=>{"use strict";var Zg=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};gB.exports=Zg});var NB=m((DTe,OB)=>{"use strict";var Dte=R(),AB=require("moment"),Ute=require("uuid").v4,eR=class{static{a(this,"JobObject")}constructor(){this.id=Ute(),this.type=void 0,this.start_datetime=AB().valueOf(),this.created_datetime=AB().valueOf(),this.end_datetime=void 0,this.status=Dte.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};OB.exports=eR});var tR=m((MTe,LB)=>{"use strict";var Mte=require("uuid").v4,IB=Zt(),wB=Xt(),Pte=us(),vte=la(),Bte=RB(),Ye=R(),Hte=NB(),qte=xd(),es=C(),Fte=Vc(),Ga=G(),{promisify:Gte}=require("util"),wo=require("moment"),xte=YE(),_f=xg(),bB=ep(),{deleteTransactionLogsBeforeValidator:kte}=Eg(),{handleHDBError:$te,hdb_errors:Vte}=z(),{HTTP_STATUS_CODES:Yte}=Vte,yB=wB.searchByValue,Kte=wB.searchByHash,Wte=IB.insert,Qte=Gte(xte.evaluateSQL),zte=IB.update;LB.exports={addJob:Xte,updateJob:ere,handleGetJob:Jte,handleGetJobsByStartDate:jte,getJobById:CB};async function Jte(e){try{let t=await CB(e.id);return Ga.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 es.error("There was an error getting job",t),new Error(r)}}a(Jte,"handleGetJob");async function jte(e){try{let t=await Zte(e);if(es.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=wo(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=wo(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 es.error(r),new Error(r)}}a(jte,"handleGetJobsByStartDate");async function Xte(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ga.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return es.info(_),t.error=_,t}if(!Ye.JOB_TYPE_ENUM[e.operation])return es.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ye.OPERATIONS_ENUM.CSV_FILE_LOAD:s=_f.fileObject(e);break;case Ye.OPERATIONS_ENUM.CSV_URL_LOAD:s=_f.urlObject(e);break;case Ye.OPERATIONS_ENUM.CSV_DATA_LOAD:s=_f.dataObject(e);break;case Ye.OPERATIONS_ENUM.IMPORT_FROM_S3:s=_f.s3FileObject(e);break;case Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=bB(e,"date");break;case Ye.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=bB(e,"timestamp");break;case Ye.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=kte(e);break;default:break}if(s)throw $te(s,s.message,Yte.BAD_REQUEST,void 0,void 0,!0);let n=new Hte;n.type=e.operation===Ye.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ye.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new Pte(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await yB(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return es.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=Mte();try{o=await yB(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return es.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return es.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new Fte(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Wte(u)}catch(_){return es.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,es.trace(_)}return t}a(Xte,"addJob");async function Zte(e){let t=wo(e.from_date,wo.ISO_8601),r=wo(e.to_date,wo.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 Bte(s,e.hdb_user);try{return await Qte(n)}catch(i){throw es.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(Zte,"getJobsInDateRange");async function CB(e){if(Ga.isEmptyOrZeroLength(e))return Ga.errorizeMessage("Invalid job ID specified.");let t=new vte(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Kte(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return es.error(s),Ga.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(CB,"getJobById");async function ere(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ga.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ye.JOB_STATUS_ENUM.COMPLETE||e.status===Ye.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=wo().valueOf());let t=new qte(Ye.SYSTEM_SCHEMA_NAME,Ye.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await zte(t),r}a(ere,"updateJob")});var BB=m((vTe,vB)=>{"use strict";var DB=G(),fr=R(),tre=require("moment"),df=jg(),Ef=C(),UB=tR(),MB=KE(),PB=ro(),rre=rt(),sre=vE(),rR=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function nre(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(DB.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(DB.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case fr.JOB_TYPE_ENUM.csv_file_load:await Hn(e,df.csvFileLoad);break;case fr.JOB_TYPE_ENUM.csv_url_load:await Hn(e,df.csvURLLoad);break;case fr.JOB_TYPE_ENUM.csv_data_load:await Hn(e,df.csvDataLoad);break;case fr.JOB_TYPE_ENUM.import_from_s3:await Hn(e,df.importFromS3);break;case fr.JOB_TYPE_ENUM.empty_trash:break;case fr.JOB_TYPE_ENUM.export_local:await Hn(e,MB.export_local);break;case fr.JOB_TYPE_ENUM.export_to_s3:await Hn(e,MB.export_to_s3);break;case fr.JOB_TYPE_ENUM.delete_files_before:case fr.JOB_TYPE_ENUM.delete_records_before:await Hn(e,PB.deleteFilesBefore);break;case fr.JOB_TYPE_ENUM.delete_audit_logs_before:await Hn(e,PB.deleteAuditLogsBefore);break;case fr.JOB_TYPE_ENUM.delete_transaction_logs_before:await Hn(e,sre.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(nre,"parseMessage");async function Hn(e,t){try{e.job.status=fr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=tre().valueOf(),await UB.updateJob(e.job),await ire(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):Ef.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ef.error(s),e.job.message=s,e.job.status=fr.JOB_STATUS_ENUM.ERROR;try{await UB.updateJob(e.job)}catch(n){throw Ef.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Hn,"runJob");async function ire(e){Ef.trace("launching job thread:",e),rre.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[fr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(ire,"launchJobThread");vB.exports={parseMessage:nre,RunnerMessage:rR}});var qB=m((HTe,HB)=>{"use strict";var sR=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};HB.exports=sR});var tH=m((FTe,cR)=>{"use strict";var pf=Xt(),oR=YE(),ff=jg(),qn=Ud(),hf=ri(),hl=ro(),ore=$S(),fl=tr(),mf=Hd(),vt=ME(),gt=C(),are=eT(),cre=Mu(),ure=MT(),lre=eE(),_re=PT(),dre=vT(),Ere=nE(),fre=oE(),nR=cE(),FB=KE(),hre=$E(),aR=tR(),w=R(),{hdb_errors:pl,handleHDBError:ml}=z(),{HTTP_STATUS_CODES:GB}=pl,iR=lE(),xB=wa(),JB=require("util"),xa=Zt(),mre=Yr(),pre=In(),kB=BB(),$B=Cu(),VB=(LE(),re(ju)),YB=tt(),KB=vE(),WB=FE(),{setServerUtilities:Sre}=(lf(),re(Xg)),{CONTEXT:Tre}=(Ls(),re(im)),{_assignPackageExport:gre}=require("../index"),{transformReq:Rre}=G(),Are=kg(),QB=pf.searchByHash,Ore=pf.searchByValue,Nre=JB.promisify(pf.search),bre=JB.promisify(oR.evaluateSQL),yre={[w.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.CREATE_TABLE]:!0,[w.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[w.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[w.OPERATIONS_ENUM.DROP_TABLE]:!0,[w.OPERATIONS_ENUM.DROP_SCHEMA]:!0},q=qB();async function jB(e,t){try{if(e.body.operation!=="read_log"&&(gt.log_level===w.LOG_LEVELS.INFO||gt.log_level===w.LOG_LEVELS.DEBUG||gt.log_level===w.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;gt.info(o)}}catch(s){gt.error(s)}let r=await Are.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return yre[e.body.operation]&&mre.setSchemaDataToGlobal(s=>{s&&gt.error(s)}),r}a(jB,"processLocalTransaction");var zB=wre();cR.exports={chooseOperation:XB,getOperationFunction:ZB,operation:eH,processLocalTransaction:jB};Sre(cR.exports);function XB(e){let t;try{t=ZB(e)}catch(n){throw gt.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=oR.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=oR.checkASTPermissions(e,i);if(o)throw gt.error(`${GB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),ml(new Error,o,pl.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==w.OPERATIONS_ENUM.LOGIN&&e.operation!==w.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=hre.verifyPerms(i,n);if(o)throw gt.error(`${GB.FORBIDDEN} from operation ${e.operation}`),gt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),ml(new Error,o,pl.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw ml(n,"There was an error when trying to choose an operation path")}return r}a(XB,"chooseOperation");function ZB(e){if(gt.trace(`getOperationFunction with operation: ${e.operation}`),zB.has(e.operation))return zB.get(e.operation);throw ml(new Error,pl.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),pl.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(ZB,"getOperationFunction");gre("operation",eH);function eH(e,t){e.hdb_user=this[Tre]?.user,e.bypass_auth=!t;let r=XB(e);return jB({body:e},r)}a(eH,"operation");async function Ire(e){gt.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[w.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case w.OPERATIONS_ENUM.INSERT:o=await xa.insert(i);break;case w.OPERATIONS_ENUM.UPDATE:o=await xa.update(i);break;case w.OPERATIONS_ENUM.UPSERT:o=await xa.upsert(i);break;case w.OPERATIONS_ENUM.DELETE:o=await hl.deleteRecord(i);break;default:gt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){gt.info("Invalid operation in transaction"),gt.error(o)}}a(Ire,"catchup");async function Qs(e){Rre(e);let t,r;try{r=await aR.addJob(e),t=r.createdJob,gt.info("addJob result",r);let s=new kB.RunnerMessage(t,e);return await kB.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 gt.error(n),ml(s,n)}}a(Qs,"executeJob");function wre(){let e=new Map;return e.set(w.OPERATIONS_ENUM.INSERT,new q(xa.insert)),e.set(w.OPERATIONS_ENUM.UPDATE,new q(xa.update)),e.set(w.OPERATIONS_ENUM.UPSERT,new q(xa.upsert)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new q(pf.searchByConditions)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_HASH,new q(QB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_ID,new q(QB)),e.set(w.OPERATIONS_ENUM.SEARCH_BY_VALUE,new q(Ore)),e.set(w.OPERATIONS_ENUM.SEARCH,new q(Nre)),e.set(w.OPERATIONS_ENUM.SQL,new q(bre)),e.set(w.OPERATIONS_ENUM.CSV_DATA_LOAD,new q(Qs,ff.csvDataLoad)),e.set(w.OPERATIONS_ENUM.CSV_FILE_LOAD,new q(Qs,ff.csvFileLoad)),e.set(w.OPERATIONS_ENUM.CSV_URL_LOAD,new q(Qs,ff.csvURLLoad)),e.set(w.OPERATIONS_ENUM.IMPORT_FROM_S3,new q(Qs,ff.importFromS3)),e.set(w.OPERATIONS_ENUM.CREATE_SCHEMA,new q(qn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_DATABASE,new q(qn.createSchema)),e.set(w.OPERATIONS_ENUM.CREATE_TABLE,new q(qn.createTable)),e.set(w.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new q(qn.createAttribute)),e.set(w.OPERATIONS_ENUM.DROP_SCHEMA,new q(qn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_DATABASE,new q(qn.dropSchema)),e.set(w.OPERATIONS_ENUM.DROP_TABLE,new q(qn.dropTable)),e.set(w.OPERATIONS_ENUM.DROP_ATTRIBUTE,new q(qn.dropAttribute)),e.set(w.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new q(hf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_DATABASE,new q(hf.describeSchema)),e.set(w.OPERATIONS_ENUM.DESCRIBE_TABLE,new q(hf.describeTable)),e.set(w.OPERATIONS_ENUM.DESCRIBE_ALL,new q(hf.describeAll)),e.set(w.OPERATIONS_ENUM.DELETE,new q(hl.deleteRecord)),e.set(w.OPERATIONS_ENUM.ADD_USER,new q(fl.addUser)),e.set(w.OPERATIONS_ENUM.ALTER_USER,new q(fl.alterUser)),e.set(w.OPERATIONS_ENUM.DROP_USER,new q(fl.dropUser)),e.set(w.OPERATIONS_ENUM.LIST_USERS,new q(fl.listUsersExternal)),e.set(w.OPERATIONS_ENUM.LIST_ROLES,new q(mf.listRoles)),e.set(w.OPERATIONS_ENUM.ADD_ROLE,new q(mf.addRole)),e.set(w.OPERATIONS_ENUM.ALTER_ROLE,new q(mf.alterRole)),e.set(w.OPERATIONS_ENUM.DROP_ROLE,new q(mf.dropRole)),e.set(w.OPERATIONS_ENUM.USER_INFO,new q(fl.userInfo)),e.set(w.OPERATIONS_ENUM.READ_LOG,new q(are)),e.set(w.OPERATIONS_ENUM.ADD_NODE,new q(cre)),e.set(w.OPERATIONS_ENUM.UPDATE_NODE,new q(ure)),e.set(w.OPERATIONS_ENUM.REMOVE_NODE,new q(lre)),e.set(w.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new q(_re)),e.set(w.OPERATIONS_ENUM.PURGE_STREAM,new q(dre)),e.set(w.OPERATIONS_ENUM.SET_CONFIGURATION,new q(YB.setConfiguration)),e.set(w.OPERATIONS_ENUM.CLUSTER_STATUS,new q(Ere.clusterStatus)),e.set(w.OPERATIONS_ENUM.CLUSTER_NETWORK,new q(fre)),e.set(w.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new q(nR.setRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new q(nR.getRoutes)),e.set(w.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new q(nR.deleteRoutes)),e.set(w.OPERATIONS_ENUM.EXPORT_TO_S3,new q(Qs,FB.export_to_s3)),e.set(w.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new q(Qs,hl.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new q(Qs,hl.deleteFilesBefore)),e.set(w.OPERATIONS_ENUM.EXPORT_LOCAL,new q(Qs,FB.export_local)),e.set(w.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new q(aR.handleGetJobsByStartDate)),e.set(w.OPERATIONS_ENUM.GET_JOB,new q(aR.handleGetJob)),e.set(w.OPERATIONS_ENUM.GET_FINGERPRINT,new q(iR.getFingerprint)),e.set(w.OPERATIONS_ENUM.SET_LICENSE,new q(iR.setLicense)),e.set(w.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new q(iR.getRegistrationInfo)),e.set(w.OPERATIONS_ENUM.RESTART,new q(xB.restart)),e.set(w.OPERATIONS_ENUM.RESTART_SERVICE,new q(xB.restartService)),e.set(w.OPERATIONS_ENUM.CATCHUP,new q(Ire)),e.set(w.OPERATIONS_ENUM.SYSTEM_INFORMATION,new q(pre.systemInformation)),e.set(w.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new q(Qs,hl.deleteAuditLogsBefore)),e.set(w.OPERATIONS_ENUM.READ_AUDIT_LOG,new q(ore)),e.set(w.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new q($B.createTokens)),e.set(w.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new q($B.refreshOperationToken)),e.set(w.OPERATIONS_ENUM.LOGIN,new q(VB.login)),e.set(w.OPERATIONS_ENUM.LOGOUT,new q(VB.logout)),e.set(w.OPERATIONS_ENUM.GET_CONFIGURATION,new q(YB.getConfiguration)),e.set(w.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new q(vt.customFunctionsStatus)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new q(vt.getCustomFunctions)),e.set(w.OPERATIONS_ENUM.GET_COMPONENT_FILE,new q(vt.getComponentFile)),e.set(w.OPERATIONS_ENUM.GET_COMPONENTS,new q(vt.getComponents)),e.set(w.OPERATIONS_ENUM.SET_COMPONENT_FILE,new q(vt.setComponentFile)),e.set(w.OPERATIONS_ENUM.DROP_COMPONENT,new q(vt.dropComponent)),e.set(w.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new q(vt.getCustomFunction)),e.set(w.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new q(vt.setCustomFunction)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new q(vt.dropCustomFunction)),e.set(w.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.ADD_COMPONENT,new q(vt.addComponent)),e.set(w.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new q(vt.dropCustomFunctionProject)),e.set(w.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.PACKAGE_COMPONENT,new q(vt.packageComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.DEPLOY_COMPONENT,new q(vt.deployComponent)),e.set(w.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new q(KB.readTransactionLog)),e.set(w.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new q(Qs,KB.deleteTransactionLogsBefore)),e.set(w.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new q(WB.installModules)),e.set(w.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new q(WB.auditModules)),e.set(w.OPERATIONS_ENUM.GET_BACKUP,new q(qn.getBackup)),e}a(wre,"initializeOperationFunctionMap")});var Tf=m((xTe,nH)=>{"use strict";var uR=R(),Cre=G(),Sl=C(),{handleHDBError:lR,hdb_errors:Sf}=z(),{isMainThread:Lre}=require("worker_threads"),{Readable:Dre}=require("stream"),rH=require("os"),Ure=require("util"),Mre=lT(),Pre=Ure.promisify(Mre.authorize),sH=tH(),{Gzip:vre}=require("zlib");function Bre(e){let t=`Found an uncaught exception with message: ${e.message}. ${rH.EOL}Stack: ${e.stack} ${rH.EOL}Terminating ${Lre?"HDB":"thread"}.`;console.error(t),Sl.fatal(t),process.exit(1)}a(Bre,"handleServerUncaughtException");function Hre(e,t,r){if(Sl[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:Sf.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(Hre,"serverErrorHandler");function qre(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=lR(new Error,"Invalid JSON.",Sf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(Cre.isEmpty(e.body.operation)){let s=lR(new Error,"Request body must include an 'operation' property.",Sf.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(qre,"reqBodyValidationHandler");function Fre(e,t,r){let s;e.body.operation!==uR.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==uR.OPERATIONS_ENUM.LOGIN&&e.body.operation!==uR.OPERATIONS_ENUM.LOGOUT?Pre(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Sl.warn(n),Sl.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(lR(n,i,Sf.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(Fre,"authHandler");async function Gre(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=sH.chooseOperation(e.body);let n=await sH.processLocalTransaction(e,s);if(n instanceof Dre&&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(new vre))}return n}catch(n){throw Sl.error(n),n}}a(Gre,"handlePostRequest");nH.exports={authHandler:Fre,handlePostRequest:Gre,handleServerUncaughtException:Bre,serverErrorHandler:Hre,reqBodyValidationHandler:qre}});var cH=m(($Te,aH)=>{"use strict";var xre=require("fastify-plugin"),{handlePostRequest:iH,authHandler:kre,reqBodyValidationHandler:$re}=Tf();async function Vre(e){e.decorate("hdbCore",{preValidation:[$re,kre],request:t=>oH(iH(t,response)),requestWithoutAuthentication:(t,r)=>oH(iH(t,r,!0))})}a(Vre,"hdbCore");async function oH(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(oH,"convertAsyncIterators");aH.exports=xre(Vre)});var lH=m((YTe,uH)=>{"use strict";var _R=require("fs"),ka=Y();ka.initSync();var{CONFIG_PARAMS:Tl}=R(),Yre=1024*1024*1024;function Kre(e){let t=ka.get(Tl.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=ka.get(Tl.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:Yre,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=ka.get(Tl.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=ka.get(Tl.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=ka.get(Tl.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:_R.readFileSync(`${n}`),cert:_R.readFileSync(i)+(o?`
24
24
 
25
- `+_R.readFileSync(o):"")},s.http2=!0}return s}a(Yre,"getServerOptions");aH.exports=Yre});var _H=m((KTe,lH)=>{"use strict";var dR=Y();dR.initSync();var{CONFIG_PARAMS:uH}=R();function Kre(){let e=dR.get(uH.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=dR.get(uH.CUSTOMFUNCTIONS_NETWORK_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(Kre,"getCORSOptions");lH.exports=Kre});var fH=m((QTe,EH)=>{"use strict";var dH=Y();dH.initSync();var Wre=R();function Qre(){return dH.get(Wre.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(Qre,"getHeaderTimeoutConfig");EH.exports=Qre});var hR={};Ke(hR,{customFunctionsServer:()=>jre,handleFile:()=>Jre,ready:()=>ese});async function Jre(e,t,r,s){if(!vn){let c=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);vn=IH(c),Et.http((await vn).server)}let n=await vn,i=(0,mH.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),hH.has(i)||(hH.add(i),n.register(Zre(i,o)))}async function jre(){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 Xre();let e=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=vn=await IH(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 Xre(){try{ve.info("Custom Functions starting configuration."),await AH.setUsersToGlobal(),ve.info("Custom Functions completed configuration.")}catch(e){ve.error(e)}}function Zre(e,t){return async function(r){try{ve.info("Custom Functions starting buildRoutes"),ve.trace("Loading fastify routes folder "+e),(0,pH.existsSync)(e)&&r.register(RH.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 IH(e){ve.info("Custom Functions starting buildServer.");let t=(0,OH.default)(e),r=(0,SH.default)(t);r.server.headersTimeout=(0,bH.default)(),r.setErrorHandler(yH.serverErrorHandler);let s=(0,NH.default)();return s&&r.register(TH.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(gH.default),await r.register(zre),await r.after(),Ug(r),ve.info("Custom Functions completed buildServer."),r}function ese(){if(vn)return vn.then?vn.then(e=>e.ready()):vn.ready()}var mH,pH,SH,TH,gH,RH,ER,fR,ve,zre,AH,OH,NH,bH,yH,vn,hH,wH=Te(()=>{mH=require("path"),pH=require("fs"),SH=D(require("fastify")),TH=D(require("@fastify/cors")),gH=D(Hg()),RH=D(require("@fastify/autoload")),ER=D(Y()),fR=D(R()),ve=D(C()),zre=D(oH()),AH=D(er()),OH=D(cH()),NH=D(_H()),bH=D(fH()),yH=D(Tf());Ca();rs();hH=new Set;a(Jre,"handleFile");a(jre,"customFunctionsServer");a(Xre,"setUp");a(Zre,"buildRouteFolder");a(IH,"buildServer");a(ese,"ready")});var mR={};Ke(mR,{start:()=>tse});function tse(e){let t=e.root;return{handleFile(r,s,n){LH||(LH=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=CH.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,DH.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),CH.set(s,n)}}}var DH,CH,LH,UH=Te(()=>{DH=D(require("send")),CH=new Map;a(tse,"start")});var HH=m(Nf=>{"use strict";var{isMainThread:rse,parentPort:gl,threadId:sse}=require("worker_threads"),{Socket:nse}=require("net"),{createServer:ise,IncomingMessage:ose}=require("http"),{createServer:ase}=require("https"),{readFileSync:xa}=require("fs"),gf=C(),Ks=Y(),ka=R(),{server:Of}=(rs(),re(Mc)),{WebSocketServer:cse}=require("ws"),{createServer:use}=require("tls"),{getTicketKeys:lse}=tt(),{Headers:_se}=(bE(),re(TP)),{recordAction:pR,recordActionBinary:dse}=(co(),re(pu));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:ege,CONFIG_PARAMS:tge}=ka;Ks.initSync();var Ti={};Nf.registerServer=NR;Nf.httpServer=bR;Nf.deliverSocket=OR;Of.http=bR;Of.request=pse;Of.socket=Sse;Of.ws=Tse;var SR=[],TR=[],Ese,Tl={},Rf={},fse=[],gR=[];rse||bf().loadRootComponents(!0).then(()=>{gl.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)OR(r,t,s);else if(e.requestId)hse(e);else if(e.type===ka.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Ti){let i=Ti[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||gf.warn("Had to forcefully exit the thread",sse),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),gl.postMessage({type:ka.ITC_EVENT_TYPES.CHILD_STARTED})});function OR(e,t,r){let s=e?.read?e:new nse({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Ti[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ti[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(gf.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(OR,"deliverSocket");var MH=new Map;function hse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=MH.get(n),r){case"connection":i=OR(void 0,t),MH.set(n,i),i.write=(c,u,l)=>(gl.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(gl.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),gl.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(hse,"proxyRequest");function NR(e,t){+t||(t=parseInt(Ks.get(ka.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Ti[t];if(r){let s=r.lastServer||r;s.off("unhandled",PH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Ti[t]=e;e.on("unhandled",PH)}a(NR,"registerServer");function vH(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=[{port:parseInt(Ks.get(ka.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:Ks.get(ka.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(vH,"getPorts");function bR(e,t){for(let{port:r,secure:s}of vH(t))BH(r,s,t?.isOperationsServer),typeof e=="function"?gR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):NR(e,r),Rf[r]=RR(gR,r),Ese=RR(fse,r)}a(bR,"httpServer");function BH(e,t,r){if(!Tl[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=Ks.get(n+"_tls_privatekey"),o=Ks.get(n+"_tls_certificate"),c=Ks.get(n+"_tls_certificateauthority");s={key:xa(i),cert:xa(o)+(c?`
25
+ `+_R.readFileSync(o):"")},s.http2=!0}return s}a(Kre,"getServerOptions");uH.exports=Kre});var EH=m((WTe,dH)=>{"use strict";var dR=Y();dR.initSync();var{CONFIG_PARAMS:_H}=R();function Wre(){let e=dR.get(_H.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=dR.get(_H.CUSTOMFUNCTIONS_NETWORK_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(Wre,"getCORSOptions");dH.exports=Wre});var mH=m((zTe,hH)=>{"use strict";var fH=Y();fH.initSync();var Qre=R();function zre(){return fH.get(Qre.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(zre,"getHeaderTimeoutConfig");hH.exports=zre});var hR={};We(hR,{customFunctionsServer:()=>Xre,handleFile:()=>jre,ready:()=>tse});async function jre(e,t,r,s){if(!Fn){let c=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Fn=CH(c),Et.http((await Fn).server)}let n=await Fn,i=(0,SH.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),pH.has(i)||(pH.add(i),n.register(ese(i,o)))}async function Xre(){try{Be.info("In Custom Functions Fastify server"+process.cwd()),Be.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Be.debug(`Custom Functions server process ${process.pid} starting up.`),await Zre();let e=ER.get(fR.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Fn=await CH(t)}catch(s){throw Be.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Be.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Be.error(`Custom Functions ${process.pid} Error: ${e}`),Be.error(e),process.exit(1)}}async function Zre(){try{Be.info("Custom Functions starting configuration."),await NH.setUsersToGlobal(),Be.info("Custom Functions completed configuration.")}catch(e){Be.error(e)}}function ese(e,t){return async function(r){try{Be.info("Custom Functions starting buildRoutes"),Be.trace("Loading fastify routes folder "+e),(0,TH.existsSync)(e)&&r.register(OH.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Be.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Be.error(n.message):n&&Be.error(n),o()})}catch(s){Be.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function CH(e){Be.info("Custom Functions starting buildServer.");let t=(0,bH.default)(e),r=(0,gH.default)(t);r.server.headersTimeout=(0,IH.default)(),r.setErrorHandler(wH.serverErrorHandler);let s=(0,yH.default)();return s&&r.register(RH.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(AH.default),await r.register(Jre),await r.after(),Ug(r),Be.info("Custom Functions completed buildServer."),r}function tse(){if(Fn)return Fn.then?Fn.then(e=>e.ready()):Fn.ready()}var SH,TH,gH,RH,AH,OH,ER,fR,Be,Jre,NH,bH,yH,IH,wH,Fn,pH,LH=ge(()=>{SH=require("path"),TH=require("fs"),gH=D(require("fastify")),RH=D(require("@fastify/cors")),AH=D(Hg()),OH=D(require("@fastify/autoload")),ER=D(Y()),fR=D(R()),Be=D(C()),Jre=D(cH()),NH=D(tr()),bH=D(lH()),yH=D(EH()),IH=D(mH()),wH=D(Tf());Da();ns();pH=new Set;a(jre,"handleFile");a(Xre,"customFunctionsServer");a(Zre,"setUp");a(ese,"buildRouteFolder");a(CH,"buildServer");a(tse,"ready")});var mR={};We(mR,{start:()=>rse});function rse(e){let t=e.root;return{handleFile(r,s,n){UH||(UH=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=DH.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,MH.default)(i,c)}}return o(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),DH.set(s,n)}}}var MH,DH,UH,PH=ge(()=>{MH=D(require("send")),DH=new Map;a(rse,"start")});var FH=m(Nf=>{"use strict";var{isMainThread:sse,parentPort:Rl,threadId:nse}=require("worker_threads"),{Socket:ise}=require("net"),{createServer:ose,IncomingMessage:ase}=require("http"),{createServer:cse}=require("https"),{readFileSync:$a}=require("fs"),gf=C(),zs=Y(),Va=R(),{server:Of}=(ns(),re(Pc)),{WebSocketServer:use}=require("ws"),{createServer:lse}=require("tls"),{getTicketKeys:_se}=rt(),{Headers:dse}=(bE(),re(RP)),{recordAction:pR,recordActionBinary:Ese}=(Eo(),re(Su));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:tge,CONFIG_PARAMS:rge}=Va;zs.initSync();var Ni={};Nf.registerServer=NR;Nf.httpServer=bR;Nf.deliverSocket=OR;Of.http=bR;Of.request=Sse;Of.socket=Tse;Of.ws=gse;var SR=[],TR=[],fse,gl={},Rf={},hse=[],gR=[];sse||bf().loadRootComponents(!0).then(()=>{Rl.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)OR(r,t,s);else if(e.requestId)mse(e);else if(e.type===Va.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Ni){let i=Ni[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||gf.warn("Had to forcefully exit the thread",nse),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),Rl.postMessage({type:Va.ITC_EVENT_TYPES.CHILD_STARTED})});function OR(e,t,r){let s=e?.read?e:new ise({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Ni[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Ni[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(gf.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(OR,"deliverSocket");var vH=new Map;function mse(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=vH.get(n),r){case"connection":i=OR(void 0,t),vH.set(n,i),i.write=(c,u,l)=>(Rl.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(Rl.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Rl.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(mse,"proxyRequest");function NR(e,t){+t||(t=parseInt(zs.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Ni[t];if(r){let s=r.lastServer||r;s.off("unhandled",BH),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Ni[t]=e;e.on("unhandled",BH)}a(NR,"registerServer");function HH(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=[{port:parseInt(zs.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:zs.get(Va.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(HH,"getPorts");function bR(e,t){for(let{port:r,secure:s}of HH(t))qH(r,s,t?.isOperationsServer),typeof e=="function"?gR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):NR(e,r),Rf[r]=RR(gR,r),fse=RR(hse,r)}a(bR,"httpServer");function qH(e,t,r){if(!gl[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=zs.get(n+"_tls_privatekey"),o=zs.get(n+"_tls_certificate"),c=zs.get(n+"_tls_certificateauthority");s={key:$a(i),cert:$a(o)+(c?`
26
26
 
27
- `+xa(c):""),ticketKeys:lse()}}Tl[e]=(t?ase:ise)(s,async(n,i)=>{try{let o=performance.now(),c=new Af(n);r&&(c.isOperationsServer=!0);let u=await Rf[e](c);if(u.headers?.set?.("Server","HarperDB"),u.status===-1){for(let p of u.headers||[])i.setHeader(p[0],p[1]);return n.baseRequest=c,i.baseResponse=u,Tl[e].emit("unhandled",n,i)}let l=u.status||200,_=performance.now(),d=_-o;if(!u.handlesHeaders){let p=u.headers;if(p?.append){let T=`hdb;dur=${d.toFixed(2)}`;u.wasCacheMiss&&(T+=", miss"),p.append("Server-Timing",T,!0)}i.writeHead(l,p&&(p[Symbol.iterator]?Array.from(p):p))}let E=c.handlerPath,f=c.method;pR(d,"TTFB",E,f),dse(l<400,"success",E,f);let h=u.body;if(h?.pipe){h.pipe(i),h.destroy&&i.on("close",()=>{h.destroy()});let p=0;h.on("data",T=>{p+=T.length}),h.on("end",()=>{pR(performance.now()-_,"transfer",E,f),pR(p,"bytes-sent",E,f)})}else h?.then?h.then(p=>{i.end(p)},p=>{i.writeHead(p.statusCode||500),i.end(p.toString()),gf.error(p)}):i.end(h)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),gf.error(o)}}),NR(Tl[e],e)}return Tl[e]}a(BH,"getHTTPServer");function RR(e,t){let r=mse;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(RR,"makeCallbackChain");function mse(e){return e.user&&(e[Si].user=e.user),{status:-1,body:"Not found",headers:new _se}}a(mse,"unhandled");function pse(e,t){bR(e,{requestOnly:!0,...t})}a(pse,"onRequest");function Sse(e,t){if(t.securePort){let r=Ks.get("customfunctions_tls_privatekey"),s=Ks.get("customfunctions_tls_certificate"),n=Ks.get("customfunctions_tls_certificateauthority"),i=use({key:xa(r),cert:xa(s)+(n?`
27
+ `+$a(c):""),ticketKeys:_se()}}gl[e]=(t?cse:ose)(s,async(n,i)=>{try{let o=performance.now(),c=new Af(n);r&&(c.isOperationsServer=!0);let u=await Rf[e](c);if(u.headers?.set?.("Server","HarperDB"),u.status===-1){for(let p of u.headers||[])i.setHeader(p[0],p[1]);return n.baseRequest=c,i.baseResponse=u,gl[e].emit("unhandled",n,i)}let l=u.status||200,_=performance.now(),d=_-o;if(!u.handlesHeaders){let p=u.headers;if(p?.append){let T=`hdb;dur=${d.toFixed(2)}`;u.wasCacheMiss&&(T+=", miss"),p.append("Server-Timing",T,!0)}i.writeHead(l,p&&(p[Symbol.iterator]?Array.from(p):p))}let E=c.handlerPath,f=c.method;pR(d,"TTFB",E,f),Ese(l<400,"success",E,f);let h=u.body;if(h?.pipe){h.pipe(i),h.destroy&&i.on("close",()=>{h.destroy()});let p=0;h.on("data",T=>{p+=T.length}),h.on("end",()=>{pR(performance.now()-_,"transfer",E,f),pR(p,"bytes-sent",E,f)})}else h?.then?h.then(p=>{i.end(p)},p=>{i.writeHead(p.statusCode||500),i.end(p.toString()),gf.error(p)}):i.end(h)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),gf.error(o)}}),NR(gl[e],e)}return gl[e]}a(qH,"getHTTPServer");function RR(e,t){let r=pse;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(RR,"makeCallbackChain");function pse(e){return e.user&&(e[Oi].user=e.user),{status:-1,body:"Not found",headers:new dse}}a(pse,"unhandled");function Sse(e,t){bR(e,{requestOnly:!0,...t})}a(Sse,"onRequest");function Tse(e,t){if(t.securePort){let r=zs.get("customfunctions_tls_privatekey"),s=zs.get("customfunctions_tls_certificate"),n=zs.get("customfunctions_tls_certificateauthority"),i=lse({key:$a(r),cert:$a(s)+(n?`
28
28
 
29
- `+xa(n):"")},e);Ti[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Ti[t.port]=e)}a(Sse,"onSocket");Object.defineProperty(ose.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 Tse(e,t){for(let{port:r,secure:s}of vH(t)){TR[r]||(TR[r]=new cse({server:BH(r,s)}),TR[r].on("connection",async(i,o)=>{let c=new Af(o);c.isWebSocket=!0;let u=Rf[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<SR.length;_++){let d=SR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";SR.push({listener:e,protocol:n}),Rf[r]=RR(gR,r)}}a(Tse,"onWebSocket");function PH(e,t){t.writeHead(404),t.end(`Not found
30
- `)}a(PH,"defaultNotFound");var Si=Symbol("node request"),Af=class{static{a(this,"Request")}[Si];#e;constructor(t){this.method=t.method;let r=t.url;this[Si]=t,this.url=r,this.headers=t.headers,this.headers.get=gse}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[Si].socket.encrypted?"https":"http"}get ip(){return this[Si].socket.remoteAddress}get body(){return this.#e||(this.#e=new AR(this[Si]))}get host(){return this[Si].authority||this[Si].headers.host}get isAborted(){return!1}},AR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function gse(e){return this[e.toLowerCase()]}a(gse,"get")});var UR={};Ke(UR,{debugMode:()=>kH,startHTTPThreads:()=>Ase,startSocketServer:()=>LR,updateWorkerIdleness:()=>$H});async function Ase(e=2,t){if(t)wR(0,1,!0);else{let{loadRootComponents:r}=bf();if(e===0||kH)return(0,gi.setMainIsWorker)(!0),yR=HH(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)wR(r,e);return Promise.all(xH)}function wR(e,t=1,r){if(IR++,(0,gi.startWorker)("server/threads/threadServer.js",{name:wf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===wf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});xH.push(n),await n,$a.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=If.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=$a.indexOf(s);o>-1&&$a.splice(o,1)}if(a(i,"removeWorker"),Va){let o=Va;Va=[];for(let c of o)GH[c.localPort](c)}}}),r){let s=setInterval(()=>{CR?CR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,gi.shutdownWorkers)(),IR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function LR(e=0,t){if(typeof e=="string")try{(0,Lf.existsSync)(e)&&(0,Lf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Ose:r=Nse(t):r=DR;let s=(0,FH.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},GH[e]=i=>{CR=!0,r(i,(o,c)=>{if(!o){yR?(yR.deliverSocket(i,e,c),i.resume()):IR>0?(Va.length===0&&setTimeout(()=>{Va.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(),Va.push(i)):(console.log("start up a dynamic thread to handle request"),wR(0));return}o.requests++;let u=i._handle.fd;Cf.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):Ise(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=xi();return Cf.info(`HarperDB ${n.version} Server running on port ${e}`),s}function DR(e,t){let r,s=0;for(let n of $a){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=yf)return yf=i,t(r);s=i}yf=0,t(r)}function Ose(e,t){let r=e.remoteAddress,s=Ya.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);DR(e,i=>{Ya.set(r,{worker:i,lastUsed:n}),t(i)})}function Nse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Ya.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);DR(s,_=>{Ya.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function $H(){yf=0;for(let e of $a)e.expectedIdle=e.recentELU.idle+bse,e.requests=1;$a.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function Ise(e,t,r){let s=yse++;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(),If.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")),If.delete(s)),n.event=="destroy"&&(e.destroy(),If.delete(s))})}var gi,FH,wf,Cf,Lf,Rse,$a,Va,GH,yR,IR,xH,kH,CR,yf,qH,Ya,bse,If,yse,Df=Te(()=>{gi=D(tt()),FH=require("net"),wf=D(R()),Cf=D(C()),Lf=require("fs"),{isMainThread:Rse}=require("worker_threads"),$a=[],Va=[],GH=[],IR=0,xH=[];Rse&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(Ase,"startHTTPThreads");a(wR,"startHTTPWorker");a(LR,"startSocketServer");yf=0;a(DR,"findMostIdleWorker");qH=36e5,Ya=new Map;a(Ose,"findByRemoteAddressAffinity");a(Nse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ya)r.lastUsed+qH<e&&Ya.delete(t)},qH).unref();bse=1e3;a($H,"updateWorkerIdleness");(0,gi.setMonitorListener)($H);If=new Map,yse=1;a(Ise,"proxySocket")});var QH=m((cge,WH)=>{"use strict";var wse=require("cluster"),ps=Y();ps.initSync();var YH=R(),ige=require("util"),Bn=C(),MR=require("fs"),Cse=require("fastify"),oge=xi(),Lse=require("@fastify/cors"),Dse=require("@fastify/compress"),Use=require("@fastify/static"),Mse=Hg(),Pse=require("path"),{PACKAGE_ROOT:vse}=R(),Bse=$r(),Hse=F(),qse=er(),Fse=Jc(),{server:Gse}=(rs(),re(Mc)),{authHandler:xse,handlePostRequest:kse,serverErrorHandler:$se,reqBodyValidationHandler:Vse}=Tf(),age=require("net"),{registerContentHandlers:Yse}=(Ca(),re(Gv)),Kse=1024*1024*1024,KH="TRUE",{HDB_SETTINGS_NAMES:Io,CONFIG_PARAMS:Wse}=YH,Qse=Io.CORS_ENABLED_KEY,zse="CORS_ACCESSLIST",Jse=Io.SERVER_TIMEOUT_KEY,jse=Io.SERVER_KEEP_ALIVE_TIMEOUT_KEY,Xse=Io.SERVER_HEADERS_TIMEOUT_KEY,Zse=Io.PRIVATE_KEY_KEY,ene=Io.CERT_KEY,tne=Io.HTTP_SECURE_ENABLED_KEY,yo;WH.exports={hdbServer:VH,start:VH};async function VH(e){try{Bn.info("In Fastify server"+process.cwd()),Bn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Bn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=wse.isMaster,await rne();let t=ps.get(tne),r=t&&(t===!0||t.toUpperCase()===KH);yo=sne(r),await yo.ready(),e||(e={}),e.isOperationsServer=!0,yo.server.cantCleanupProperly=!0;try{Gse.http(yo.server,e),yo.server.closeIdleConnections||await yo.listen({port:0,host:"::"})}catch(s){throw yo.close(),Bn.error(s),Bn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Bn.fatal(t),process.exit(1)}}a(VH,"operationsServer");async function rne(){Bn.trace("Configuring HarperDB process."),Bse.setSchemaDataToGlobal(),await qse.setUsersToGlobal(),await Fse.getLicense()}a(rne,"setUp");function sne(e){Bn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=nne(e),r=Cse(t);r.server.headersTimeout=one(),r.setErrorHandler($se);let s=ine();s&&r.register(Lse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Mse),r.register(Dse),r.register(Use,{root:Pse.join(vse,"docs")}),Yse(r);let n=ps.get(YH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Hse.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[Vse,xse],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),kse(i,o)}),r.get("/health",()=>"HarperDB is running."),Bn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(sne,"buildServer");function nne(e){let t=ps.get(Jse),r=ps.get(jse),s={bodyLimit:Kse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=ps.get(Zse),i=ps.get(ene),o=ps.get(Wse.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:MR.readFileSync(n),cert:MR.readFileSync(i)+(o?`
29
+ `+$a(n):"")},e);Ni[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Ni[t.port]=e)}a(Tse,"onSocket");Object.defineProperty(ase.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 gse(e,t){for(let{port:r,secure:s}of HH(t)){TR[r]||(TR[r]=new use({server:qH(r,s)}),TR[r].on("connection",async(i,o)=>{let c=new Af(o);c.isWebSocket=!0;let u=Rf[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<SR.length;_++){let d=SR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";SR.push({listener:e,protocol:n}),Rf[r]=RR(gR,r)}}a(gse,"onWebSocket");function BH(e,t){t.writeHead(404),t.end(`Not found
30
+ `)}a(BH,"defaultNotFound");var Oi=Symbol("node request"),Af=class{static{a(this,"Request")}[Oi];#e;constructor(t){this.method=t.method;let r=t.url;this[Oi]=t,this.url=r,this.headers=t.headers,this.headers.get=Rse}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[Oi].socket.encrypted?"https":"http"}get ip(){return this[Oi].socket.remoteAddress}get body(){return this.#e||(this.#e=new AR(this[Oi]))}get host(){return this[Oi].authority||this[Oi].headers.host}get isAborted(){return!1}},AR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function Rse(e){return this[e.toLowerCase()]}a(Rse,"get")});var UR={};We(UR,{debugMode:()=>VH,startHTTPThreads:()=>Ose,startSocketServer:()=>LR,updateWorkerIdleness:()=>YH});async function Ose(e=2,t){if(t)wR(0,1,!0);else{let{loadRootComponents:r}=bf();if(e===0||VH)return(0,bi.setMainIsWorker)(!0),yR=FH(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)wR(r,e);return Promise.all($H)}function wR(e,t=1,r){if(IR++,(0,bi.startWorker)("server/threads/threadServer.js",{name:wf.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===wf.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});$H.push(n),await n,Ya.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=If.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ya.indexOf(s);o>-1&&Ya.splice(o,1)}if(a(i,"removeWorker"),Ka){let o=Ka;Ka=[];for(let c of o)kH[c.localPort](c)}}}),r){let s=setInterval(()=>{CR?CR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,bi.shutdownWorkers)(),IR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function LR(e=0,t){if(typeof e=="string")try{(0,Lf.existsSync)(e)&&(0,Lf.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Nse:r=bse(t):r=DR;let s=(0,xH.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},kH[e]=i=>{CR=!0,r(i,(o,c)=>{if(!o){yR?(yR.deliverSocket(i,e,c),i.resume()):IR>0?(Ka.length===0&&setTimeout(()=>{Ka.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(),Ka.push(i)):(console.log("start up a dynamic thread to handle request"),wR(0));return}o.requests++;let u=i._handle.fd;Cf.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):wse(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Yi();return Cf.info(`HarperDB ${n.version} Server running on port ${e}`),s}function DR(e,t){let r,s=0;for(let n of Ya){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=yf)return yf=i,t(r);s=i}yf=0,t(r)}function Nse(e,t){let r=e.remoteAddress,s=Wa.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);DR(e,i=>{Wa.set(r,{worker:i,lastUsed:n}),t(i)})}function bse(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Wa.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);DR(s,_=>{Wa.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function YH(){yf=0;for(let e of Ya)e.expectedIdle=e.recentELU.idle+yse,e.requests=1;Ya.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function wse(e,t,r){let s=Ise++;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(),If.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")),If.delete(s)),n.event=="destroy"&&(e.destroy(),If.delete(s))})}var bi,xH,wf,Cf,Lf,Ase,Ya,Ka,kH,yR,IR,$H,VH,CR,yf,GH,Wa,yse,If,Ise,Df=ge(()=>{bi=D(rt()),xH=require("net"),wf=D(R()),Cf=D(C()),Lf=require("fs"),{isMainThread:Ase}=require("worker_threads"),Ya=[],Ka=[],kH=[],IR=0,$H=[];Ase&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(Ose,"startHTTPThreads");a(wR,"startHTTPWorker");a(LR,"startSocketServer");yf=0;a(DR,"findMostIdleWorker");GH=36e5,Wa=new Map;a(Nse,"findByRemoteAddressAffinity");a(bse,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Wa)r.lastUsed+GH<e&&Wa.delete(t)},GH).unref();yse=1e3;a(YH,"updateWorkerIdleness");(0,bi.setMonitorListener)(YH);If=new Map,Ise=1;a(wse,"proxySocket")});var JH=m((uge,zH)=>{"use strict";var Cse=require("cluster"),Ts=Y();Ts.initSync();var WH=R(),oge=require("util"),Gn=C(),MR=require("fs"),Lse=require("fastify"),age=Yi(),Dse=require("@fastify/cors"),Use=require("@fastify/compress"),Mse=require("@fastify/static"),Pse=Hg(),vse=require("path"),{PACKAGE_ROOT:Bse}=R(),Hse=Yr(),qse=G(),Fse=tr(),Gse=jc(),{server:xse}=(ns(),re(Pc)),{authHandler:kse,handlePostRequest:$se,serverErrorHandler:Vse,reqBodyValidationHandler:Yse}=Tf(),cge=require("net"),{registerContentHandlers:Kse}=(Da(),re(kv)),Wse=1024*1024*1024,QH="TRUE",{HDB_SETTINGS_NAMES:Lo,CONFIG_PARAMS:Qse}=WH,zse=Lo.CORS_ENABLED_KEY,Jse="CORS_ACCESSLIST",jse=Lo.SERVER_TIMEOUT_KEY,Xse=Lo.SERVER_KEEP_ALIVE_TIMEOUT_KEY,Zse=Lo.SERVER_HEADERS_TIMEOUT_KEY,ene=Lo.PRIVATE_KEY_KEY,tne=Lo.CERT_KEY,rne=Lo.HTTP_SECURE_ENABLED_KEY,Co;zH.exports={hdbServer:KH,start:KH};async function KH(e){try{Gn.info("In Fastify server"+process.cwd()),Gn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Gn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=Cse.isMaster,await sne();let t=Ts.get(rne),r=t&&(t===!0||t.toUpperCase()===QH);Co=nne(r),await Co.ready(),e||(e={}),e.isOperationsServer=!0,Co.server.cantCleanupProperly=!0;try{xse.http(Co.server,e),Co.server.closeIdleConnections||await Co.listen({port:0,host:"::"})}catch(s){throw Co.close(),Gn.error(s),Gn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Gn.fatal(t),process.exit(1)}}a(KH,"operationsServer");async function sne(){Gn.trace("Configuring HarperDB process."),Hse.setSchemaDataToGlobal(),await Fse.setUsersToGlobal(),await Gse.getLicense()}a(sne,"setUp");function nne(e){Gn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=ine(e),r=Lse(t);r.server.headersTimeout=ane(),r.setErrorHandler(Vse);let s=one();s&&r.register(Dse,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Pse),r.register(Use),r.register(Mse,{root:vse.join(Bse,"docs")}),Kse(r);let n=Ts.get(WH.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!qse.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[Yse,kse],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),$se(i,o)}),r.get("/health",()=>"HarperDB is running."),Gn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(nne,"buildServer");function ine(e){let t=Ts.get(jse),r=Ts.get(Xse),s={bodyLimit:Wse,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Ts.get(ene),i=Ts.get(tne),o=Ts.get(Qse.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:MR.readFileSync(n),cert:MR.readFileSync(i)+(o?`
31
31
 
32
- `+MR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(nne,"getServerOptions");function ine(){let e=ps.get(Qse),t=ps.get(zse),r;return e&&(e===!0||e.toUpperCase()===KH)&&(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(ine,"getCORSOpts");function one(){return ps.get(Xse)}a(one,"getHeaderTimeoutConfig")});var oq=m((dge,iq)=>{"use strict";var{decode:ane}=require("msgpackr"),{isMainThread:cne,parentPort:une,threadId:lge}=require("worker_threads"),PR=Qe(),Ka=Me(),lne=R(),Rl=C(),zH=Y(),XH=R();tt();var _ne=hn(),{recordAction:dne,recordActionBinary:Ene}=(co(),re(pu)),{publishToStream:fne}=PR,_ge={durable:Ka.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Ka.WORK_QUEUE_CONSUMER_NAMES.deliver_group},hne,mne,pne,ZH,eq;iq.exports={initialize:tq,workQueueListener:nq,setSubscription:Sne,setIgnoreOrigin:gne,getDatabaseSubscriptions:Tne};async function tq(){eq=!0,Rl.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await PR.getNATSReferences();hne=e,mne=e.info.server_name,pne=t,ZH=r}a(tq,"initialize");var Mf=new Map;function Sne(e,t,r){let s=Mf.get(e);s||Mf.set(e,s=new Map),s.set(t,r),eq||tq().then(nq)}a(Sne,"setSubscription");function Tne(){return Mf}a(Tne,"getDatabaseSubscriptions");var rq;function gne(e){rq=e}a(gne,"setIgnoreOrigin");var sq=100,JH=new Array(sq),Uf=0;async function nq(){let t=await(await ZH.consumers.get(Ka.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ka.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await JH[Uf],JH[Uf]=Rne(r).catch(s=>{Rl.error(s)}),++Uf>=sq&&(Uf=0)}a(nq,"workQueueListener");cne||une.on("message",async e=>{let{type:t}=e;t===XH.ITC_EVENT_TYPES.SHUTDOWN&&PR.closeConnection()});async function Rne(e){let t=ane(e.data);dne(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Ka.MSG_HEADERS.ORIGIN)===zH.get(lne.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!rq;if(Ene(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Rl.trace("processing message:",i,o,u,(l?"records: "+l.map(A=>A.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Rl.trace(`messageProcessor nats msg id: ${e.headers.get(Ka.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=Mf.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:jH(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let A=l.map((g,x)=>({type:jH(i),value:g,id:_?.[x],table:u}));for(;c;)A.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:A,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}zH.get(XH.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&fne(e.subject.split(".").slice(0,-1).join("."),_ne.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Rl.error(i)}e.ack()}a(Rne,"messageProcessor");function jH(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(jH,"convertOperation")});var GR={};Ke(GR,{disableNATS:()=>One,setNATSReplicator:()=>vR,start:()=>Ane});function Ane(){vf.default.get(Bf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&bne()}function One(e=!0){_q=e}function bne(){if(_q)return;let e=us(),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];vR(n,r,i)}}xR((r,s)=>{vR(r.tableName,r.databaseName,r),s&&Eq(r)}),!aq&&(aq=!0)}function vR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends bt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ue],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ue],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ue],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ue]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ue],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ue],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ue]})}static defineSchema(o){Eq(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new ys;return(0,cq.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Nne}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Pf(i.transaction,i)),o.user=i.user):o=dq),o}a(n,"getNATSTransaction")}function Eq(e){let t=vf.default.get(Bf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,HR.publishToStream)(`${qR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,FR.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 HR,qR,FR,cq,uq,vf,Bf,lq,_q,Nne,dq,aq,Pf,BR,fq=Te(()=>{_e();Is();HR=D(Qe()),qR=D(Me()),FR=D(hn());Lc();cq=D(oq()),uq=D(Ht()),vf=D(Y()),Bf=D(R()),lq=D(C());a(Ane,"start");a(One,"disableNATS");Nne=2;a(bne,"assignReplicationSource");a(vR,"setNATSReplicator");a(Eq,"publishSchema");Pf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=vf.default.get(Bf.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,E=_.operation=="put"?"upsert":_.operation;u||(lq.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,HR.publishToStream)(`${qR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,FR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},BR=class extends Pf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,uq.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};dq=new BR});async function mq({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await kR.getResource(e,{});n=new VR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await kR.get(e);i&&i.delete()}n=new qf(e,t)}return n}function $R(){return Hf++,Hf>65500&&(Hf=1),Hf}var hq,Al,kR,Hf,qf,VR,pq=Te(()=>{_e();zu();hq=D(Ht()),Al=D(C());Vi();kR=ft({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(mq,"getSession");Hf=1;a($R,"getNextMessageId");qf=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 E=this.subscriptions.find(g=>g.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=fi.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,T=h.Resource,A=await Xe(f,async()=>{let g=await T.subscribe(f);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 x of g)try{let V;if(x.type&&x.type!=="put"&&x.type!=="delete"&&x.type!=="message"||s&&!s(x))continue;r?(x.topic=n,V=this.needsAcknowledge(x)):V=$R();let I=x.id;Array.isArray(I)&&(I=Ia(I)),I==null&&(I=""),this.listener(p+"/"+I,x.value,V,t)}catch(V){(0,Al.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){return $R()}acknowledge(t){}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;let i=fi.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 Xe(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=[]}},VR=class extends qf{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=$R();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);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,Al.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,hq.getNextMonotonicTime)()),(0,Al.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),kR.put(this.sessionRecord)),t.qos}}});var WR={};Ke(WR,{start:()=>Ine});async function Ine({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:_}=gq(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,Hn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;yne&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Rq.getSuperUser)());let{onMessage:u,onClose:l}=gq(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,Hn.info)("Socket error",_)})},{port:t,securePort:s})}function gq(e,t,r,s,n){Tq||(Tq=!0,DS(_=>{_.push({metric:"mqtt-connections",connections:YR})})),YR++;let i,o={protocolVersion:4},c=(0,Ff.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){YR--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await Et.auth(_.username,_.password.toString()),(0,KR.get)(qn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&Sq.notify({username:s.username,status:qn.AUTH_AUDIT_STATUS.SUCCESS,type:qn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,KR.get)(qn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&Sq.error({username:s.username,status:qn.AUTH_AUDIT_STATUS.FAILURE,type:qn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=mq({user:s,..._}),i=await i}catch(g){return(0,Hn.error)(g),d({cmd:"connack",reasonCode:g.code||128,returnCode:g.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((g,x,V,I)=>{try{let N=g.indexOf("/",1),M=N>0?g.slice(0,N):g;d({cmd:"publish",topic:g,payload:E(x),messageId:V||Math.floor(Math.random()*1e8),qos:I.qos},M)}catch(N){(0,Hn.error)(N),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let g of _.subscriptions){let x;try{x=(await i.addSubscription(g,g.qos>=1)).qos||0}catch(V){(0,Hn.error)(V),x=128}f.push(x)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let g of _.unsubscriptions)i.removeSubscription(g);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=Pa(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,A;try{A=await i.publish(_,T)}catch(g){console.warn(g),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:A===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,Ff.generate)(f,o);t(p),ao(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?wn(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Ff,Rq,KR,qn,Hn,Sq,yne,Tq,YR,Aq=Te(()=>{Ff=require("mqtt-packet");pq();Rq=D(er());Ca();co();rs();KR=D(Y()),qn=D(R()),Hn=D(C()),Sq=(0,Hn.loggerWithTag)("auth-event"),yne=!0;a(Ine,"start");YR=0;a(gq,"onSocket")});var Uq={};Ke(Uq,{loadComponent:()=>Gf,loadComponentDirectories:()=>Dq});function Dq(e,t){t&&(zR=t),e&&(JR=e);let r=[];if((0,Ws.existsSync)(QR)){let n=(0,Ws.readdirSync)(QR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Zr.join)(QR,o);r.push(Gf(c,zR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Gf(s,zR,s)),Promise.all(r).then(()=>{Lq=!0})}async function Gf(e,t,r,s,n){if(!Nq.has(e)){Nq.set(e,!0),n&&(JR=n);try{let i,o=(0,Zr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ws.existsSync)(o)?i=(0,bq.parseDocument)((0,Ws.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Dne;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Ws.existsSync)(f=(0,Zr.join)(E,"node_modules",u));)if(E=(0,Zr.dirname)(E),E.length<(0,Cq.getHdbBasePath)().length){f=null;break}if(f)_=await Gf(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=Lne[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,ft(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Ol.isMainThread&&(_=await _.startOnMainThread?.({server:Et,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!Oq.includes(T)){Oq.push(T);let A=jR.get(XR.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);LR(T,A)}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(_=await _.start?.({server:Et,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),JR.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,wq.handleHDBError)("Can not reference parent directories");let T=(0,Zr.join)(e,l.files);for(let A of await(0,yq.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:g,dirent:x}=A,V=(0,Zr.relative)(e,g),I=(0,Zr.basename)(e),N=l.path||"/";N=N.startsWith("/")?N:N.startsWith("./")?"/"+I+N.slice(2):N==="."?"/"+I:"/"+I+"/"+N,N+=(N.endsWith("/")?"":"/")+V;try{if(x.isFile()){let M=await Cne(g);Ol.isMainThread&&await _.setupFile?.(M,N,g,t),t.isWorker&&await _.handleFile?.(M,N,g,t)}else Ol.isMainThread&&await _.setupDirectory?.(N,g,t),t.isWorker&&await _.handleDirectory?.(N,g,t)}catch(M){console.error(`Could not load ${x.isFile()?"file":"directory"} ${g} using ${l.module} for application ${e}`,M),t.set(l.path||"/",new Nl(M))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Nl(E),null,!0)}}if(Ol.isMainThread&&!Lq&&(0,Iq.watchDir)(e,async()=>Dq()),i.extensionModule)return await O_((0,Zr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Nl(i))}}}var Ws,Zr,Ol,bq,jR,XR,yq,Iq,wq,Cq,wne,Cne,QR,JR,Lq,zR,Lne,Dne,Oq,Nq,Nl,Mq=Te(()=>{Ws=require("fs"),Zr=require("path"),Ol=require("worker_threads"),bq=require("yaml"),jR=D(Y()),XR=D(R());FN();$N();VN();$v();wH();UH();yq=D(require("fast-glob")),Iq=D(tt());um();rs();wq=D(z());Is();_e();Df();Cq=D(Y()),wne=D(QH());LE();fq();Aq();({readFile:Cne}=Ws.promises),QR=jR.get(XR.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),JR=new Map;a(Dq,"loadComponentDirectories");Lne={REST:Bg,graphqlSchema:cm,jsResource:_m,fastifyRoutes:hR,login:Em,static:mR,operationsApi:wne,customFunctions:{},clustering:GR,authentication:Ju,mqtt:WR},Dne={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},Oq=[],Nq=new Map;a(Gf,"loadComponent");Nl=class extends bt{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 Fq=m((Gge,qq)=>{"use strict";var $f=require("fs-extra"),ZR=require("path"),xf=C(),Pq=F(),kf=R(),Hq=Y(),Une=et();qq.exports=Mne;async function Mne(){let e=Pne(),t=Hq.get(kf.CONFIG_PARAMS.ROOTPATH),r=ZR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+kf.PACKAGE_ROOT}},n=ZR.join(t,"node_modules");await $f.ensureDir(n);let i,o=!0,c=!1;try{i=await $f.readJson(r)}catch(u){if(Pq.isEmptyOrZeroLength(e))return;if(u.code!==kf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Pq.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await vq(l);s.dependencies[u]=_+l}if(!o){xf.notify("Installing components"),await Bq(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await vq(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(xf.notify("Removing component",u),c=!0);c&&(xf.notify("Updating components."),await Bq(r,s))}a(Mne,"installComponents");function Pne(){let e=Une.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Pne,"getComponentsConfig");async function vq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZR.extname(e)||await $f.pathExists(e)?"file:":"github:"}a(vq,"getPkgPrefix");async function Bq(e,t){xf.trace("npm installing components package.json",t),await $f.writeFile(e,JSON.stringify(t,null," ")),await FE().installAllRootModules(Hq.get(kf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Bq,"installPackages")});var bf=m((kge,xq)=>{var{isMainThread:Gq}=require("worker_threads"),{getTables:vne}=(_e(),re(be)),{loadComponentDirectories:Bne,loadComponent:Hne}=(Mq(),re(Uq)),{resetResources:qne}=(zu(),re(SP)),Fne=Fq(),Gne=et(),{dirname:xne}=require("path"),{getConnection:kne}=Qe(),$ne=Y(),Vne=R(),eA=new Map;async function Yne(e=!1){!Gq&&$ne.get(Vne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&kne(),Gq&&await Fne();let t=qne();vne(),t.isWorker=e,await Hne(xne(Gne.getConfigFilePath()),t,"hdb",!0,eA),await Bne(eA,t);let r=[];for(let[s]of eA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Yne,"loadRootComponents");xq.exports.loadRootComponents=Yne});var tt=m((Yge,Oi)=>{"use strict";var{Worker:Kne,MessageChannel:Wne,parentPort:Qs,isMainThread:iA,threadId:Qne,workerData:bl}=require("worker_threads"),{PACKAGE_ROOT:zne}=R(),{join:Vq,isAbsolute:Jne,extname:Yf}=require("path"),{server:jne}=(rs(),re(Mc)),{watch:Xne,readdir:Zne}=require("fs/promises"),{totalmem:kq}=require("os"),oA=R(),Wa=C(),Vge=R(),{randomBytes:eie}=require("crypto"),tie=1024*1024,Ai=[],Ri=[],rie=50,Yq=1e4,sie="restart",Kq="request_thread_info",Wq="resource_report",Qq="thread_info",zq="added-port",nie="ack",tA;Oi.exports={startWorker:rA,restartWorkers:aA,shutdownWorkers:cie,workers:Ai,setMonitorListener:mie,onMessageFromWorkers:uie,onMessageByType:lie,broadcast:_ie,broadcastWithAcknowledgement:Eie,setChildListenerByType:aie,getWorkerIndex:jq,getTicketKeys:Xq,setMainIsWorker:iie,restartNumber:bl?.restartNumber||1};var Jq;function jq(){return bl?bl.workerIndex:Jq?0:void 0}a(jq,"getWorkerIndex");function iie(e){Jq=e}a(iie,"setMainIsWorker");var Vf;function Xq(){return Vf||(Vf=iA?eie(48):bl.ticketKeys,Vf)}a(Xq,"getTicketKeys");Object.defineProperty(jne,"workerIndex",{get(){return jq()}});var Zq={[Kq](e,t){fie(t)},[Wq](e,t){hie(t,e)}};function rA(e,t={}){let r=process.constrainedMemory?.()||kq();r=Math.min(r,kq());let s=Math.max(Math.floor(r/tie/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ri){let{port1:u,port2:l}=new Wne;c.postMessage({type:zq,port:u},[u]),i.push(l)}Yf(e)||(e+=".js");let o=new Kne(Jne(e)?e:Vq(zne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Oi.exports.restartNumber,ticketKeys:Xq()},transferList:i},t));return Wf(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{rA(e,t)},o.on("error",c=>{console.error("Worker error:",c),Wa.error("Worker error:",c)}),o.on("exit",c=>{Ai.splice(Ai.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<rie?(t.unexpectedRestarts=o.unexpectedRestarts+1,rA(e,t)):Wa.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Zq[c.type]?.(c,o)}),Ai.push(o),Sie(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(rA,"startWorker");var oie=[oA.THREAD_TYPES.HTTP];async function aA(e=null,t=2,r=!0){if(iA){if(r){let{loadRootComponents:n}=bf();await n()}Oi.exports.restartNumber++,t<1&&(t=t*Ai.length);let s=[];for(let n of Ai.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Oi.exports.restartNumber,type:oA.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=oie.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Yq*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else Qs.postMessage({type:sie,workerType:e})}a(aA,"restartWorkers");function aie(e,t){Zq[e]=t}a(aie,"setChildListenerByType");function cie(e){return aA(e,1/0,!1)}a(cie,"shutdownWorkers");var e0=[];function uie(e){e0.push(e)}a(uie,"onMessageFromWorkers");var sA=new Map;function lie(e,t){let r=sA.get(e);r||sA.set(e,r=[]),r.push(t)}a(lie,"onMessageByType");function _ie(e){for(let t of Ri)try{t.postMessage(e)}catch(r){Wa.error("Unable to send message to worker",r)}}a(_ie,"broadcast");var Kf=new Map,die=1;function Eie(e){return new Promise(t=>{let r=0;for(let s of Ri)try{let n=die++,i=a(()=>{Kf.delete(n),--r===0&&t(),s!==Qs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Kf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Kf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Wa.error("Unable to send message to worker",n)}r===0&&t()})}a(Eie,"broadcastWithAcknowledgement");function fie(e){e.postMessage({type:Qq,workers:t0()})}a(fie,"sendThreadInfo");function t0(){let e=Date.now();return Ai.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(t0,"getChildWorkerInfo");function hie(e,t){e.resources=t,e.resources.updated=Date.now()}a(hie,"recordResourceReport");var nA;function mie(e){nA=e}a(mie,"setMonitorListener");var pie=1e3,$q=!1;function Sie(){$q||($q=!0,setInterval(()=>{for(let e of Ai){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}nA&&nA()},pie).unref())}a(Sie,"startMonitoring");var Tie=1e3;if(Qs){Wf(Qs);for(let e of bl.addPorts)Wf(e);setInterval(()=>{let e=process.memoryUsage();Qs.postMessage({type:Wq,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Tie).unref(),tA=a(()=>new Promise((e,t)=>{Qs.on("message",r),Qs.postMessage({type:Kq});function r(s){s.type===Qq&&(Qs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else tA=t0;Oi.exports.getThreadInfo=tA;function Wf(e,t){Ri.push(e),e.on("message",r=>{if(r.type===zq)Wf(r.port);else if(r.type===nie){let s=Kf.get(r.id);s&&s()}else{for(let n of e0)n(r,e);let s=sA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Wa.error(i)}}}).on("close",()=>{Ri.splice(Ri.indexOf(e),1)}).on("exit",()=>{Ri.splice(Ri.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Wf,"addPort");if(iA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Zne(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Vq(s,i.name));try{for await(let{filename:i}of Xne(s,{persistent:!1}))(Yf(i)===".ts"||Yf(i)===".js"||Yf(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await aA(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Oi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Qs.on("message",async e=>{let{type:t}=e;t===oA.ITC_EVENT_TYPES.SHUTDOWN&&(Oi.exports.restartNumber=e.restartNumber,Qs.unref(),setTimeout(()=>{Wa.warn("Thread did not voluntarily terminate",Qne),process.exit(0)},Yq).unref())})});function dA(e){let t=e.auditStore=e.openDB(o0.AUDIT_STORE_NAME,Rie);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,c0.getWorkerIndex)()===0&&e.on("aftercommit",()=>{uA||(uA=setTimeout(()=>{if(uA=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-r0,0]})){if((n[0]&15)===_A){let i=s[1];r[i]?.(s[2])}t.remove(s)}},r0/10).unref())}),t}function Jf(e,t,r){let s=_0[r.type],n=3;if(t?t.length>80?(s|=Qf,n=(0,Fn.writeKey)(t,zs,e?14:6),cA.setUint16(2,n)):(n=(0,Fn.writeKey)(t,zs,e?11:3),zs[1]=n):zs[1]=0,e){s|=l0;let i=s&Qf?6:3;cA.setFloat64(i,e),t||(n=i+8)}return zs[0]=s,s&Qf?cA.setUint16(4,0):zs[2]=0,r.value?Buffer.concat([zs.slice(0,n),r.value]):zs.subarray(0,n)}function Ni(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Qf,i=n?6:3,o;r&l0&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&lA?t.decoder.decode(e.subarray(c||i)):void 0;return{type:_0[r&7],value:u,lastVersion:o,get user(){return c?(0,Fn.readKey)(e,i,c):void 0}}}var Fn,zf,o0,a0,c0,u0,zs,cA,gie,Rie,r0,uA,lA,s0,_A,n0,i0,Qf,l0,_0,yl=Te(()=>{Fn=require("ordered-binary"),zf=D(Y()),o0=D(Ge()),a0=D(R()),c0=D(tt()),u0=D(F());(0,zf.initSync)();zs=Buffer.alloc(1024),cA=new DataView(zs.buffer,zs.byteOffset,1024),gie={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,Fn.writeKey)(e[2],t,r+12)}else return(0,Fn.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,Fn.readKey)(e,t+12,r)]}else return(0,Fn.readKey)(e,t,r)}},Rie={encoding:"binary",keyEncoder:gie},r0=(0,u0.convertToMS)((0,zf.get)(a0.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,uA=null;a(dA,"openAuditStore");lA=16,s0=1,_A=2,n0=3,i0=4,Qf=128,l0=64,_0={put:s0|lA,[s0]:"put",delete:_A,[_A]:"delete",message:n0|lA,[n0]:"message",invalidate:i0,[i0]:"invalidate"};a(Jf,"createAuditEntry");a(Ni,"readAuditEntry")});var EA,wo,Aie,Il,jf,d0=Te(()=>{EA=D(Ht());yl();wo=Symbol("completion"),Aie=100,Il=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,EA.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[wo]&&(i||(i=[]),i.push(d[wo])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Jf(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<Aie>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},jf=class extends Il{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,EA.getNextMonotonicTime)())}getReadTxn(){}}});function m0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;za||((0,Co.onMessageByType)(f0,d=>{let E=d.auditIds;hA(d.path,E,d.txnId)}),(0,Co.onMessageByType)(h0,d=>{(0,Js.trace)("confirming to proceed with txn",d.txnId)}),za=Object.create(null));let c=za[i]||(za[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=Ia(t);let l=new fA(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 hA(e,t,r,s){if(!za)return;let n=za[e];if(n){if(Qa&&Qa+1!==r){(0,Js.trace)("Waiting to ensure latest txn id",Qa,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xf)o<r&&((0,Js.trace)("Txn",r,"waiting for txn",o),await c);if(Qa+1!==r){await(0,Co.broadcastWithAcknowledgement)({type:h0,txnId:r});for(let[o,c]of Xf)o<r&&((0,Js.trace)("Txn",r,"waiting for txn",o),await c)}Xf.delete(r),(0,Js.trace)("Proceeding with txn id",r),Qa=r-1,hA(e,t,r,s)})();return Xf.set(r,i),i}(0,Js.trace)("Notifying with txn id",r,s),Qa=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,E0.writeKey)(i,Nie,0);let _=i[3];_&&(i.length=3);let d,E=Ia(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Js.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let A=n.auditStore.get(i);if(!A||(d=Ni(A,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(A){console.error(A),(0,Js.info)(A)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function p0(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",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&Oie)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Co.broadcast)({type:f0,path:n,auditIds:l,txnId:c,start:u}),hA(n,l,c,!0))})}}var Js,Co,E0,f0,h0,Oie,za,Nie,fA,Qa,Xf,S0=Te(()=>{Js=D(C()),Co=D(tt()),E0=require("ordered-binary");Lc();zu();yl();f0="transaction",h0="transaction-await",Oie=67108864,Nie=Buffer.alloc(4096);a(m0,"addSubscription");fA=class extends ys{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"}}},Xf=new Map;a(hA,"notifyFromTransactionData");a(p0,"listenToCommits")});var Xg={};Ke(Xg,{coerceType:()=>Zf,makeTable:()=>th,setServerUtilities:()=>Cie});function th(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),p0(i,u);let p=0,T,A,g,x={},V,I,N,M;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&(V=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(I=Z),Z.expiresAt&&(N=Z),Z.isPrimaryKey&&(x=Z);let J;E&&mO();class B extends bt{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=h;static expirationTimer;static createdTimeProperty=V;static updatedTimeProperty=I;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,b){if(b&&(this.sourceOptions=b,b.expiration&&this.setTTLExpiration(b.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return A=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let U=!1,y=a(async L=>{let H=L.value,k=L.table?xe[c][L.table]:B;if(c===Ss.SYSTEM_SCHEMA_NAME&&(L.table===Ss.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===Ss.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(U=!0),L.id===void 0&&(L.id=H[k.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));let P=await k.getResource(L.id,L,wl);switch(L.type){case"put":return P._writeUpdate(H,wl);case"delete":return P._writeDelete(wl);case"publish":return P._writePublish(H,wl);case"invalidate":return P.invalidate(wl);default:Uo.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);L&&f==null&&(f=!0);let H=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Do.getWorkerIndex)()):(0,Do.getWorkerIndex)()===0,k=L&&H&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(k)for await(let P of k)try{if(!(P.type==="transaction"?P.writes[0]:P)){console.error("Bad subscription event");continue}let X=Xe(P,()=>{if(P.type==="transaction"){let j=[];for(let K of P.writes){K[Ne]=P;try{j.push(y(K))}catch(ee){throw ee.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(P),ee}}return Promise.all(j)}else if(P.type==="define_schema"){let j=this.attributes.slice(0),K;for(let ee of P.attributes)j.find(Be=>Be.name===ee.name)||(j.push(ee),K=!0);K&&(ft({table:n,database:c,attributes:j,origin:"cluster"}),Dl.signalSchemaChange(new Ul.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(P)});P.onCommit&&(X?.then&&U&&Dl.signalUserChange(new Ul.UserEventMsg(process.pid)),X?.then?X.then(P.onCommit):P.onCommit())}catch($){console.error("error in subscription handler",$)}}catch(L){console.error(L)}})(),this}static getResource(S,b,U){let y=super.getResource(S,b,U);if(S!=null)try{if(y.hasOwnProperty(le))return y;let L=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let H,k,$={transaction:L?.getReadTxn()},X;return e_(S,b,$,y,U?.allowInvalidated,(j,K)=>{K?k(K):(y[le]=j?.value,y[fr]=j?.version,X=!0,H?.(y))}),X?y:new Promise((j,K)=>{H=j,k=K})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(S)),L}return y}static setTTLExpiration(S){(0,Do.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:b,value:U,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&U?.__invalidated__==null&&B.evict(b,U,y)},d).unref())}static enableAuditing(){E=!0,mO(),B.audit=!0}static coerceId(S){return S===""?null:Zf(S,x)}static async dropTable(){if(delete xe[c][n],c===o){for(let S in r)_.remove(B.tableName+"/"+S),r[S].drop();_.remove(B.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));Dl.signalSchemaChange(new Ul.SchemaEventMsg(process.pid,Ss.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,b){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,b)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[ln])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ne]?.hasOwnProperty("returnNonexistent")&&this[Ne].returnNonexistent)return this}static allowRead(S,b){if(!S)return!1;let U=S.role.permission;if(U.super_user)return!0;if(U[n]?.read){let y=U[n].attribute_permissions;if(y){b||(b={});let L=b.select;if(L){let H=mA(y,"read");b.select=L.filter(k=>H[k])}else b.select=y.filter(H=>H.read).map(H=>H.attribute_name);return b}else return!0}}allowUpdate(S,b,U){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let L=y[n].attribute_permissions;if(L){let H=mA(L,"update");for(let k in b)if(!H[k])return!1;if(U)for(let k of L){let P=k.attribute_name;!k.update&&!(P in b)&&(b[P]=this.getProperty(P))}}else return!0}}allowCreate(S,b){return this.allowUpdate(S,{})}static allowCreate(S,b){if(!S)return!1;let U=S.role.permission;if(U.super_user)return!0;if(U[n]?.insert){let y=U[n].attribute_permissions;if(y){let L=mA(y,"insert");for(let H in b)if(!L[H])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let b=S.role.permission;if(b.super_user||b[n]?.delete)return!0}update(S,b){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(b)for(let L in this[le])S[L]===void 0&&(S[L]=void 0);y=this[Nt],y&&(S=Object.assign(y,S)),this[Nt]=y=S}return!this[le]&&t&&!(y||(y=this[Nt]))?.[t]&&(y||(y=this[Nt]=Object.create(null)),y[t]=this[ue]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ue],store:i,invalidated:!0,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,commit:(U,y)=>{if(y)return;let L={__invalidated__:U};for(let $ in r)L[$]=this.getProperty($);let H=B.Source,k,P=this[ue];return S?.isNotification||H?.shouldReceiveInvalidations&&(k=H.invalidate(P,this)),i.put(this[ue],L,U),{type:E&&"invalidate",[wo]:k}}})}static evict(S,b,U){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let L;if(!b){let H=i.getEntry(S);if(!H)return;b=H.value,U=H.version}if(b)for(let H in r)L||(L={__invalidated__:0}),L[H]=b[H];return L?i.put(S,L,U,U):i.remove(S,U)}else return i.remove(S,U)}lock(){throw new Error("Not yet implemented")}static operation(S,b){return S.table||=n,S.schema||=c,I0.operation(S,b)}async put(S){this.update(S,!0)}_writeUpdate(S,b){let U=this._txnForRequest();if(this[ue]===void 0)throw new Error("Can not save record without an id");let y=this[le],L,H,k=this[ue];y||(this[le]={}),U.addWrite({key:k,store:i,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,validate:()=>{this.validate(S)},commit:(P,$)=>{let X;if($){if(L)return;let K=i.getEntry(k);y=K?.value;let ee=this[Ne];ee&&K?.version>(ee.lastModified||0)&&(ee.lastModified=K.version)}if(!H){if(H=!0,b?.isNotification)S=Uc(S);else{if(S[R0]&&(L=!h_(S),L))return;t&&S[t]!==k&&(S[t]=k),I&&(S[I.name]=I.type==="Date"?new Date(P):I.type==="String"?new Date(P).toISOString():P),V&&(y?S[V.name]=y[V.name]:S[V.name]=V.type==="Date"?new Date(P):V.type==="String"?new Date(P).toISOString():P),S=Uc(S);let K=B.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(X=K.put(k,S,this))}if(S[le])throw new Error("Can not assign a record with a record property");this[le]=S}if(Uo.trace("Checking timestamp for put",k,this[fr]>P,this[fr],P),this[fr]>P)return E&&{type:"put",value:i.encoder.encode(S)};let j=i.encoder.encode(S);return i.put(this[ue],(0,Ja.asBinary)(j),P),_t(this[ue],y,S),y===null&&!$&&qi(-1),{type:E&&"put",value:j,[wo]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[le]?this._writeDelete(S):!1}_writeDelete(S){let b=this._txnForRequest(),U,y=this[ue],L;return b.addWrite({key:y,store:i,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,commit:(H,k)=>{let P=this[le];if(k){let $=i.getEntry(y);P=$?.value;let X=this[Ne];X&&$?.version>(X.lastModified||0)&&(X.lastModified=$.version)}if(!U&&(U=!0,!S?.isNotification)){let $=B.Source;$?.delete&&(!$.delete.reliesOnPrototype||$.prototype.delete)&&(L=$.delete(y,this))}if(!(this[fr]>H))return _t(this[ue],P),Uo.trace("Write delete entry",E||f,H),E||f?(i.put(this[ue],null,H),E||hO(),k||qi(1)):i.remove(this[ue]),{type:E&&"delete",[wo]:L}}}),!0}search(S){let b=this._txnForRequest();if(!S)throw new Error("No query provided");let U=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ue]&&(y=[{attribute:null,comparator:"prefix",value:this[ue]}].concat(y));for(let K of y){let ee=K[0]??K.attribute,Be=ee==null?x:h.find(Kn=>Kn.name==ee);if(Be)Be.type&&(K[1]===void 0?K.value=L(K.value,Be):K[1]=L(K[1],Be));else if(ee!=null)throw(0,Lo.handleHDBError)(new Error,`${ee} is not a defined attribute`,404)}function L(K,ee){return Array.isArray(K)?K.map(Be=>Zf(Be,ee)):Zf(K,ee)}a(L,"coerceTypedValues"),y.length>1&&(y=(0,b0.sortBy)(y,K=>{if(K.estimated_count===void 0){let ee=K.comparator||K.search_type;if(ee===Cl.SEARCH_TYPES.EQUALS){let Be=K[0]??K.attribute;if(Be==null||Be===t)K.estimated_count=1;else{let Kn=r[Be];K.estimated_count=Kn?Kn.getValuesCount(K[1]??K.value):1/0}}else ee===Cl.SEARCH_TYPES.CONTAINS||ee===Cl.SEARCH_TYPES.ENDS_WITH||ee==="ne"?K.estimated_count=1/0:ee===Cl.SEARCH_TYPES.STARTS_WITH||ee==="prefix"?K.estimated_count=yie:K.estimated_count=bie}return K.estimated_count}));let H=b.getReadTxn();H.use();let k=S.select,P=y[0],$;if(!P)$=i.getRange(U?{end:!1,reverse:!0,transaction:H,lazy:k?.length<4}:{start:!1,transaction:H,lazy:k?.length<4}).map(({value:K})=>K?new Promise(ee=>setImmediate(()=>ee(K))):Ja.SKIP);else{let K=tm(P,H,U,B,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let ee=y.slice(1).map(rm);$=j(K,ee)}else{for(let Be=1;Be<y.length;Be++){let Kn=y[Be],Uh=tm(Kn,H,U,B,S.allowFullScan);K=K.concat(Uh)}let ee=new Set;K=K.filter(Be=>ee.has(Be)?!1:(ee.add(Be),!0)),$=j(K)}}(S.offset||S.limit!==void 0)&&($=$.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),$.onDone=()=>{H.done()};let X=this[Ne];function j(K,ee){let Be=ee?.length,Kn={transaction:H,lazy:Be>0||k?.length<4,alwaysPrefetch:!0};return K.map(Uh=>new Promise(Mh=>e_(Uh,X,Kn,null,!1,GG=>{let Ph=GG?.value;if(!Ph)return Mh(Ja.SKIP);for(let vh=0;vh<Be;vh++)if(!ee[vh](Ph))return Mh(Ja.SKIP);Mh(Ph)})))}return a(j,"idsToRecords"),$}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ft({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let b=m0(B,this[ue]??null,function(H,k,P){try{this.send({id:H,timestamp:P,...k})}catch($){console.error($)}},S.startTime,this[ln]),U=this[ue],y=S.previousCount;y>1e3&&(y=1e3);let L=S.startTime;if(this[ln]){if(L){if(y)throw new Lo.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:k}of u.getRange({start:[L,Number.MAX_SAFE_INTEGER]})){let[P,$,X]=H;if(H.length>3&&(X=H.slice(2)),$!==s)continue;let j=Ni(k,i);(U==null||N0(U,X))&&b.send({id:X,timestamp:P,...j}),b.startTime=P}}else if(y){let H=[];for(let{key:k,value:P}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[$,X,j]=k;if(k.length>3&&(j=k.slice(2)),X!==s)continue;if(U==null||N0(U,j)){let K=Ni(P,i);if(H.push({id:j,timestamp:$,...K}),--y<=0)break}}catch($){Uo.error("Error getting history entry",k,$)}for(let k=H.length;k>0;)b.send(H[--k]);H[0]&&(b.startTime=H[0].timestamp)}else if(!S.omitCurrent)for(let{key:H,value:k,version:P}of i.getRange({start:U??!1,end:U==null?void 0:[U,y0.MAXIMUM_KEY],versions:!0}))k&&b.send({id:H,timestamp:P,value:k})}else{y&&!L&&(L=0);let H=this[fr];if(L<H){let k=[],P=H;do{let $=[P,s,U],X=u.get($);if(X){S.omitCurrent=!0;let j=Ni(X,i);k.push({id:U,timestamp:P,...j}),P=j.lastVersion}else break;y&&y--}while(P>L&&y!==0);for(let $=k.length;$>0;)b.send(k[--$]);b.startTime=H}!S.omitCurrent&&this.doesExist()&&b.send({id:U,timestamp:this[fr],value:this})}return S.listener&&b.on("data",S.listener),b}doesExist(){return!!this[le]}async publish(S,b){this._writePublish(S,b)}_writePublish(S,b){let U=this._txnForRequest(),y=this[ue]||null,L,H;U.addWrite({store:i,key:y,lastVersion:this[fr],nodeName:this[Ne]?.nodeName,validate:()=>{this.validate(S)},commit:(k,P)=>{if(this.validate(S),!H&&(H=!0,!b?.isNotification)){let j=B.Source;j?.publish&&(!j.publish.reliesOnPrototype||j.prototype.publish)&&(L=j.publish(y,S,this))}let $=P>0?i.get(y):this[le];$===void 0&&!P&&(E||f)&&(E||hO(),qi(1));let X={type:"message",value:i.encoder.encode(S),[wo]:L};return!U.hasWrittenTime&&this[fr]>k&&(k=X.newTxnTime=this[fr]+.001),i.put(y,$??null,k),X}})}_txnForRequest(){let S=this[Ne],b=S?.transaction;if(b){let U;return(U=b?.find(y=>y.lmdbDb?.path===i.path))||b.push(U=new Il(i,S.user,u)),U}else return new jf(i,S.user,u)}validate(S){let b;for(let U=0,y=h.length;U<y;U++){let L=h[U];if(L.type){let H=S[L.name];if(H!=null)switch(L.type){case"Int":case"Float":(typeof H!="number"||L.type==="Int"&&H!==Math.floor(H))&&(b||(b=[])).push(`Property ${L.name} must be an ${L.type==="Int"?"integer":"number"}`);break;case"ID":typeof H=="string"||H?.length>0&&H.every?.(k=>typeof k=="string")||(b||(b=[])).push(`Property ${L.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof H!="string"&&(b||(b=[])).push(`Property ${L.name} must be a string`)}}L.required&&S[L.name]==null&&(b||(b=[])).push(`Property ${L.name} is required`)}if(b)throw new Lo.ClientError(b.join(". "))}getUpdatedTime(){return this[fr]}wasLoadedFromSource(){return A?!!this[A0]:void 0}static async addAttributes(S){let b=h.slice(0);for(let U of S){if(!U.name)throw new Lo.ClientError("Attribute name is required");if(U.name.match(/[`/]/))throw new Lo.ClientError("Attribute names cannot include backticks or forward slashes");b.push(U)}return ft({table:n,database:c,schemaDefined:l,attributes:b}),B.indexingOperation}static async removeAttributes(S){let b=h.filter(U=>!S.includes(U.name));return ft({table:n,database:c,schemaDefined:l,attributes:b}),B.indexingOperation}static getRecordCount(){let S=0;for(let{key:b,value:U}of i.getRange({end:!1}))S++,b[0]?.description==="deletions"&&(S+=U||0);return i.getStats().entryCount-S}static updatedAttributes(){p_(this,this)}static async deleteHistory(S=0){let b;for(let{key:U,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(P=>setImmediate(P));let[L,H,k]=U;U.length>3&&(k=U.slice(2)),H===s&&(b=i.remove(k))}await b}static async*getHistory(S=0,b=1/0){for(let{key:U,value:y}of u.getRange({start:[S,0],end:[b,0]})){await new Promise($=>setImmediate($));let[L,H,k]=U;if(U.length>3&&(k=U.slice(2)),H!==s)continue;let P=Ni(y,i);P.id=k,P.timestamp=L,yield P}}static async getHistoryOfRecord(S){let b=[],U=i.getEntry(S);if(!U)return b;let y=U.version,L=0;do{await new Promise(P=>setImmediate(P));let H=[y,s,S],k=u.get(H);if(k){let P=Ni(k,i);P.timestamp=y,b.push(P),y=P.lastVersion}else break}while(L<1e3);return b.reverse()}static cleanup(){J?.remove()}}B.updatedAttributes();let Ie=B.prototype;return Ie[R0]=!0,d&&B.setTTLExpiration(d/1e3),N&&FG(),B;function _t(Z,S,b){let U;for(let y in r){let L=r[y],H=L.isIndexing,k=b?.[y],P=S?.[y];if(k===P&&!H)continue;U=!0;let $=(0,Ll.getIndexedValues)(P);if($){T0&&L.prefetch($.map(X=>({key:X,value:Z})),O0);for(let X=0,j=$.length;X<j;X++)L.remove($[X],Z)}if($=(0,Ll.getIndexedValues)(k),$){T0&&L.prefetch($.map(X=>({key:X,value:Z})),O0);for(let X=0,j=$.length;X<j;X++)L.put($[X],Z)}}return U}a(_t,"updateIndices");function e_(Z,S,b,U,y,L){let H=a(()=>{let k=b.transaction;if(k?.isDone)throw new Error("Invalid read transaction");let P;k&&!k.hasRunLoadRecord&&(P=!0,k.hasRunLoadRecord=!0);let $;try{$=i.getEntry(Z,b)}catch(ee){throw ee.message+=". The read txn is "+JSON.stringify(k)+" first loadRecord: "+P,console.error(ee),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),ee}let X,j,K;if($?(S&&$?.version>(S.lastModified||0)&&(S.lastModified=$.version),j=$.version,X=$.value,(j<0||!X||typeof X.__invalidated__=="number"||d&&j<Date.now()-d)&&(K=!0)):K=!0,A&&LS(K,"cache-hit",n),K&&!y&&(U&&(U[A0]=!0),A))return fc(Z,X,j,S).then(ee=>{if(ee?.value?.[le])throw new Error("Can not assign a record with a record property");S&&ee?.version>(S.lastModified||0)&&(S.lastModified=ee.version),L(ee)},ee=>{L(null,ee)});if($?.value?.[le])throw new Error("Can not assign a record with a record property");L($)},"whenPrefetched");if(!b.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return H();i.prefetch([Z],H)}a(e_,"loadRecord");function Vo(){M=new Set,(0,Do.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of M)S()}a(Z,"onCommit")}a(Vo,"setupCommitListeners");async function fc(Z,S=null,b,U){if(b<0){let P;return M||Vo(),await new Promise($=>{let X,j=a(()=>{if(P=i.getEntry(Z),!P||P.version>0){if(clearTimeout(X),M.delete(j),typeof P?.value?.__invalidated__=="number")return $(fc(Z,P.value,P.version,U));$(P)}},"listener");M.add(j),X=setTimeout(()=>{M.delete(j),$(fc(Z,P?.value,void 0,U))},1e4).unref()})}let y=S?.__invalidated__,L=-(b||1);i.put(Z,S,L,b);let H={transaction:U?.transaction,replacingRecord:S,replacingVersion:b},k=U?.responseHeaders;k&&(H.responseHeaders=k);try{let P=performance.now(),$=await B.Source.get(Z,H),X=performance.now()-P;ao(X,"cache-resolution",n),k&&k.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let j=H.lastModified||b;(!j||d&&j<Date.now()-d)&&(j=(0,Ll.getNextMonotonicTime)());let ee=_t(Z,S,$)&&b||y>0;return $?(t&&($[t]=Z),typeof $.toJSON=="function"&&($=$.toJSON()),i.put(Z,$,j,L)):i.remove(Z,L),ee&&E&&u.put([j,s,Z],Jf(y,null,$?{type:"put",value:i.encoder.encode($)}:{type:"delete"})),{version:j,value:$}}catch(P){throw i.put(Z,S,b,L),P}}a(fc,"getFromSource");function qi(Z){p||(p=i.get([g0,pA.threadId])||0),p+=Z,g||(g=setTimeout(()=>{g=null,i.rootStore.status==="open"&&i.put([g0,pA.threadId],p)},50))}a(qi,"recordDeletion");function hO(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let b=i.getEntry(Z);b?.value===null&&i.remove(Z,b.version),qi(-1)}}},B.getRecordCount()*100+wie).unref())}a(hO,"enqueueDeletionCleanup");function mO(){J=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),qi(-1)})}a(mO,"addDeleteRemoval");function FG(){(0,Do.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=N.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${N} must be indexed`);for(let{value:b}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let U=i.getEntry(b);U?.value?.[Z]<Date.now()&&B.evict(b,U.value,U.version),await new Promise(y=>setImmediate(y))}}catch(Z){Uo.error("Error in evicting old records",Z)}},Iie).unref()}a(FG,"runRecordExpirationEviction")}function mA(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 O0(){}function Cie(e){I0=e}function Zf(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Lie.test(e)&&(e+="Z"),new Date(e)):r?e:(0,eh.autoCast)(e)}function N0(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}var Ss,Ja,Ll,b0,pA,Cl,Ml,Lo,Dl,Ul,Uo,y0,Do,eh,I0,bie,yie,Iie,T0,g0,fr,R0,fRe,A0,wl,wie,Lie,lf=Te(()=>{Ss=D(R()),Ja=require("lmdb"),Ll=D(Ht()),b0=require("lodash"),pA=require("worker_threads");Is();d0();Cl=D(Ge()),Ml=D(Y());S0();Lo=D(z()),Dl=D(gn()),Ul=D(os());_e();R_();Uo=D(C());T_();Vi();y0=require("ordered-binary"),Do=D(tt());yl();eh=D(F());co();bie=1e8,yie=1e7,Iie=6e4;Ml.initSync();T0=Ml.get(Ss.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),g0=Symbol.for("deletions"),fr=Symbol.for("version"),R0=Symbol.for("incremental-update"),fRe=Symbol("source-resource"),A0=Symbol("load-from-source"),wl={isNotification:!0,allowInvalidated:!0},wie=(0,eh.convertToMS)(Ml.get(Ss.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(th,"makeTable");a(mA,"attributesAsObject");a(O0,"noop");a(Cie,"setServerUtilities");Lie=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zf,"coerceType");a(N0,"isDescendantId")});var be={};Ke(be,{database:()=>_u,databases:()=>xe,dropDatabase:()=>mS,dropTableMeta:()=>Bie,getDatabases:()=>us,getTables:()=>Die,onUpdatedTable:()=>xR,readMetaDb:()=>Pl,resetDatabases:()=>Uie,table:()=>ft,tables:()=>Rr});function Die(){return ih||us(),Rr||{}}function us(){if(ih)return xe;ih=!0,ec=new Map;let e=(0,Bt.getHdbBasePath)()&&(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),t=(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Ur.existsSync)(e)?e:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Ur.existsSync)(e))for(let r of(0,Ur.readdirSync)(e,{withFileTypes:!0})){let s=(0,Fe.basename)(r.name,".mdb");r.isFile()&&(0,Fe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Pl((0,Fe.join)(e,r.name),null,s)}if((0,Ur.existsSync)((0,Za.getBaseSchemaPath)())){for(let r of(0,Ur.readdirSync)((0,Za.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Fe.join)((0,Za.getBaseSchemaPath)(),r.name),n=(0,Fe.join)((0,Za.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Ur.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Fe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Fe.join)(n,i.name);Pl((0,Fe.join)(s,i.name),(0,Fe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Ur.existsSync)(n))for(let o of(0,Ur.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Fe.extname)(o.name).toLowerCase()===".mdb"&&Pl((0,Fe.join)(n,o.name),(0,Fe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Fe.join)(c.path,(0,Fe.basename)(o+".mdb"));(0,Ur.existsSync)(u)&&Pl(u,o,r,null,!0)}}for(let r in xe){let s=ec.get(r);if(s){let n=xe[r];r.includes("delete")&&qe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(qe.trace(`delete table class ${i}`),delete n[i])}else if(delete xe[r],r==="data"){for(let n in Rr)delete Rr[n];delete Rr[oh]}}return ec=null,xe}}function Uie(){ih=!1;for(let[,e]of bi)e.needsDeletion=!0;us();for(let[e,t]of bi)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),bi.delete(e));return xe}function Pl(e,t,r=gA,s,n){let i=new SA.default(e,!1);e.includes("delete")&&qe.trace(`reading meta data from ${e}`);try{let o=bi.get(e);o?o.needsDeletion=!1:(o=(0,rh.open)(i),bi.set(e,o));let c=new Mo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(ja.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Ur.existsSync)(s)&&(i.path=s,l=(0,rh.open)(i),l.isLegacy=!0):l=dA(o));let _=D0(r),d=_[oh],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&qe.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=E.get(p);A||E.set(p,A={attributes:[]}),(T==null||h.is_hash_attribute)&&(A.primary=h),T!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let B of p)if(B.is_hash_attribute||B.isPrimaryKey){T=B;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let A=_[f],g={},x=[],V,I,N=typeof T.audit=="boolean"?T.audit:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),M=T.trackDeletes,J=T.expiration;if(A)g=A.indices,x=A.attributes,A.schemaVersion++;else{V=T.tableId,V?V>=(u.get(Xa)||0)&&u.putSync(Xa,V+1):(T.tableId=V=u.get(Xa),V||(V=1),u.putSync(Xa,V+1),u.putSync(T.key,T));let B=new Mo.default(!T.is_hash_attribute,T.is_hash_attribute);qe.trace(`openDB ${T.key} from ${r}`),I=o.openDB(T.key,B),I.rootStore=o,I.tableId=V}for(let B of p){B.attribute=B.name;try{if(!B.is_hash_attribute&&(B.indexed||B.attribute&&!B.name)){if(!g[B.name]){let _t=new Mo.default(!B.is_hash_attribute,B.is_hash_attribute);qe.trace(`openDB ${B.key} from ${r}`),g[B.name]=o.openDB(B.key,_t)}let Ie=x.find(_t=>_t.name===B.name);Ie?x.splice(x.indexOf(Ie),1,B):x.push(B)}}catch(Ie){qe.error("Error trying to update attribute",B,x,g,Ie)}}if(!A){qe.trace(`creating table class ${f}`,Object.keys(_)),A=U0(_,f,th({primaryStore:I,auditStore:l,audit:N,expirationMS:J&&J*1e3,trackDeletes:M,tableName:f,tableId:V,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:g,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let B of RA)B(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function D0(e){let t=xe[e];if(t||(e==="data"?t=xe[e]=Rr:e==="system"?Object.defineProperty(xe,"system",{value:t=Object.create(null),configurable:!0}):t=xe[e]=Object.create(null)),ec&&!ec.has(e)){let r=new Set;t[oh]=r,ec.set(e,r)}return t}function U0(e,t,r){return e[t]=r,r}function _u({database:e,table:t}){e||(e=gA),us();let r=D0(e),s=(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.DATABASES_DIR_NAME),n=t&&(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Bt.get)(hr.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Bt.get)(hr.CONFIG_PARAMS.STORAGE_PATH)||((0,Ur.existsSync)(s)?s:(0,Fe.join)((0,Bt.getHdbBasePath)(),hr.LEGACY_DATABASES_DIR_NAME));let i=(0,Fe.join)(s,(n?t:e)+".mdb"),o=bi.get(i);if(!o){let c=new SA.default(i,!1);o=(0,rh.open)(c),bi.set(i,o)}return o}async function mS(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;bi.delete(n.path),n.status==="open"&&(await n.close(),await w0.remove(n.path))}if(e==="data"){for(let r in Rr)delete Rr[r];delete Rr[oh]}delete xe[e]}function ft({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gA);let u=_u({database:t,table:e}),l=xe[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Mo.default(!1);for(let I of s)I.attribute?(I.name=I.attribute,I.indexed=!0):I.attribute=I.name,I.expiresAt&&(I.indexed=!0);let T,A;if(_){if(qe.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let I=u.auditStore;I||(I=dA(u)),E=s.find(B=>B.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Bt.get)(hr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),qe.trace(`${e} table loading, opening primary store`);let N=new Mo.default(!1,!0),M=e+"/";qe.trace(`openDB ${M} from ${t}`);let J=u.openDB(M,N);J.rootStore=u,qe.trace(`openDB ${ja.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(ja.INTERNAL_DBIS_NAME,p),J.tableId=h.get(Xa),J.tableId||(J.tableId=1),h.putSync(Xa,J.tableId+1),E.tableId=J.tableId,_=U0(l,e,th({primaryStore:J,auditStore:I,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,V(),h.put(M,E)}qe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||qe.trace(`openDB ${ja.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(ja.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let g=[];for(let{key:I,value:N}of h.getRange({start:!0})){let[M,J]=I.toString().split("/");if(J===""&&(J=N.name),J){if(M!==e)continue}else J=M;if(!s.find(Ie=>Ie.name===J)?.indexed&&N.indexed&&!N.isPrimaryKey){V(),T=!0,h.remove(I);let Ie=_.indices[M];Ie&&g.push(Ie)}}qe.trace(`${e} table loading, comparing atributes`);let x=[];try{for(let I of s||[]){let N=e+"/"+(I.name||"");Object.defineProperty(I,"key",{value:N,configurable:!0});let M=h.get(N);if(I.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),M||(N=e+"/",M=h.get(N));let B=Object.assign({},M,{audit:!0});T=!0,V(),h.put(N,B)}continue}M?.attribute&&!M.name&&(M.indexed=!0);let J=!M||M.type!==I.type||M.indexed!==I.indexed||JSON.stringify(M.attributes)!==JSON.stringify(I.attributes)||JSON.stringify(M.elements)!==JSON.stringify(I.elements);if(I.indexed){let B=new Mo.default(!0,!1);qe.trace(`openDB ${N} from ${t}`);let Ie=u.openDB(N,B);(J||M.indexingPID&&M.indexingPID!==process.pid||M.restartNumber<vl.workerData?.restartNumber)&&(T=!0,V(),M=h.get(N),(J||M.indexingPID&&M.indexingPID!==process.pid||M.restartNumber<vl.workerData?.restartNumber)&&(T=!0,I.lastIndexedKey=M?.lastIndexedKey||!1,I.indexingPID=process.pid,Ie.isIndexing=!0,Object.defineProperty(I,"dbi",{value:Ie}),x.push(I)),h.put(N,I)),f[I.name]=Ie}else J&&(T=!0,V(),h.put(N,I))}}finally{A&&A()}if(T&&(_.schemaVersion++,_.updatedAttributes()),qe.trace(`${e} table loading, running index`),x.length>0||g.length>0?_.indexingOperation=vie(_,x,g):T&&sh.signalSchemaChange(new nh.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let I of RA)I(_,c!=="cluster");return r&&_.setTTLExpiration(+r),qe.trace(`${e} table loaded`),_;function V(){A||u.transactionSync(()=>({then(I){A=I}}))}a(V,"startTxn")}async function vie(e,t,r){try{let s=e.schemaVersion;await sh.signalSchemaChange(new nh.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 E=0;E<c;E++){let f=t[E],h=f.name,p=(0,C0.getIndexedValues)(_[h]);if(p)for(let T=0,A=p.length;T<A;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,qe.error(E)}),vl.workerData&&vl.workerData.restartNumber!==L0.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Mie?await n:u>Pie&&await new Promise(E=>setImmediate(E))}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 sh.signalSchemaChange(new nh.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){qe.error("Error in indexing",s)}}function Bie({table:e,database:t}){let r=_u({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 xR(e){RA.push(e)}var Bt,ja,rh,Fe,Ur,Za,Mo,SA,hr,w0,TA,C0,sh,nh,vl,qe,L0,gA,oh,Rr,xe,Xa,RA,ih,bi,ec,Mie,Pie,_e=Te(()=>{Bt=D(Y()),ja=D(Ge()),rh=require("lmdb"),Fe=require("path"),Ur=require("fs"),Za=D(De());lf();Mo=D(b_()),SA=D(I_()),hr=D(R()),w0=D(require("fs-extra")),TA=require("../index"),C0=D(Ht()),sh=D(gn()),nh=D(os()),vl=require("worker_threads"),qe=D(C()),L0=D(tt());yl();gA="data",oh=Symbol("defined-tables");(0,Bt.initSync)();Rr=Object.create(null),xe=Object.create(null);(0,TA._assignPackageExport)("databases",xe);(0,TA._assignPackageExport)("tables",Rr);Xa=Symbol.for("next-table-id"),RA=[],bi=new Map;a(Die,"getTables");a(us,"getDatabases");a(Uie,"resetDatabases");a(Pl,"readMetaDb");a(D0,"ensureDB");a(U0,"setTable");a(_u,"database");a(mS,"dropDatabase");a(ft,"table");Mie=1e3,Pie=10;a(vie,"runIndexing");a(Bie,"dropTableMeta");a(xR,"onUpdatedTable")});var F=m((ORe,K0)=>{"use strict";var yi=require("path"),H0=require("fs-extra"),mr=C(),M0=require("fs-extra"),ah=require("os"),Hie=require("net"),qie=require("recursive-iterator"),Ye=R(),Fie=Qh(),P0=require("papaparse"),ch=require("moment"),{inspect:Gie}=require("util"),v0=require("is-number"),ARe=require("lodash"),xie=require("minimist"),kie=require("https"),$ie=require("http"),{hdb_errors:uh}=z(),Vie=/^((\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)))$/,q0=require("util").promisify(setTimeout),Yie=100,Kie=5,Wie="",Qie=4,B0={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};K0.exports={isEmpty:Mr,isEmptyOrZeroLength:js,arrayHasEmptyValues:jie,arrayHasEmptyOrZeroLengthValues:Xie,buildFolderPath:Zie,isBoolean:F0,errorizeMessage:zie,stripFileExtension:toe,autoCast:roe,autoCastJSON:G0,autoCastJSONDeep:OA,removeDir:soe,compareVersions:noe,isCompatibleDataVersion:ioe,escapeRawValue:ooe,unescapeValue:aoe,stringifyProps:coe,timeoutPromise:loe,isClusterOperation:doe,getClusterUser:foe,checkGlobalSchemaTable:Eoe,getHomeDir:k0,getPropsFilePath:uoe,promisifyPapaParse:hoe,removeBOM:$0,createEventPromise:moe,checkProcessRunning:poe,checkSchemaTableExist:Soe,checkSchemaExists:V0,checkTableExists:Y0,getStartOfTomorrowInSeconds:Toe,getLimitKey:goe,isObject:eoe,isNotEmptyAndHasValue:Jie,autoCasterIsNumberCheck:x0,backtickASTSchemaItems:Roe,isPortTaken:_oe,createForkArgs:Aoe,autoCastBoolean:Ooe,async_set_timeout:q0,getTableHashAttribute:Noe,doesSchemaExist:boe,doesTableExist:yoe,stringifyObj:Ioe,ms_to_time:woe,changeExtension:Coe,getEnvCliRootPath:NA,noBootFile:Loe,httpRequest:Doe,transformReq:Uoe,convertToMS:Moe,PACKAGE_ROOT:Ye.PACKAGE_ROOT};function zie(e){return e instanceof Error?e:new Error(e)}a(zie,"errorizeMessage");function Mr(e){return e==null}a(Mr,"isEmpty");function Jie(e){return!Mr(e)&&(e||e===0||e===""||F0(e))}a(Jie,"isNotEmptyAndHasValue");function js(e){return Mr(e)||e.length===0||e.size===0}a(js,"isEmptyOrZeroLength");function jie(e){if(Mr(e))return!0;for(let t=0;t<e.length;t++)if(Mr(e[t]))return!0;return!1}a(jie,"arrayHasEmptyValues");function Xie(e){if(js(e))return!0;for(let t=0;t<e.length;t++)if(js(e[t]))return!0;return!1}a(Xie,"arrayHasEmptyOrZeroLengthValues");function Zie(...e){try{return e.join(yi.sep)}catch{console.error(e)}}a(Zie,"buildFolderPath");function F0(e){return Mr(e)?!1:e===!0||e===!1}a(F0,"isBoolean");function eoe(e){return Mr(e)?!1:typeof e=="object"}a(eoe,"isObject");function toe(e){return js(e)?Wie:e.slice(0,-Qie)}a(toe,"stripFileExtension");function roe(e){return Mr(e)||e===""||typeof e!="string"?e:B0[e]!==void 0?B0[e]:x0(e)===!0?Number(e):Vie.test(e)?new Date(e):e}a(roe,"autoCast");function G0(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(G0,"autoCastJSON");function OA(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=OA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=OA(r);s!==r&&(e[t]=s)}return e}else return G0(e)}a(OA,"autoCastJSONDeep");function x0(e){if(e.startsWith("0.")&&v0(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&v0(e))}a(x0,"autoCasterIsNumberCheck");async function soe(e){if(js(e))throw new Error(`Directory path: ${e} does not exist`);try{await M0.emptyDir(e),await M0.remove(e)}catch(t){throw mr.error(`Error removing files in ${e} -- ${t}`),t}}a(soe,"removeDir");function noe(e,t){if(js(e)){mr.info("Invalid current version sent as parameter.");return}if(js(t)){mr.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(noe,"compareVersions");function ioe(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(ioe,"isCompatibleDataVersion");function ooe(e){if(Mr(e))return e;let t=String(e);return t==="."?Ye.UNICODE_PERIOD:t===".."?Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD:t.replace(Ye.FORWARD_SLASH_REGEX,Ye.UNICODE_FORWARD_SLASH)}a(ooe,"escapeRawValue");function aoe(e){if(Mr(e))return e;let t=String(e);return t===Ye.UNICODE_PERIOD?".":t===Ye.UNICODE_PERIOD+Ye.UNICODE_PERIOD?"..":String(e).replace(Ye.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(aoe,"unescapeValue");function coe(e,t){if(Mr(e))return mr.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+ah.EOL}!js(s)&&s[0]===";"?r+=" "+s+n+ah.EOL:js(s)||(r+=s+"="+n+ah.EOL)}catch{mr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(coe,"stringifyProps");function k0(){let e;try{e=ah.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(k0,"getHomeDir");function uoe(){let e=yi.join(k0(),Ye.HDB_HOME_DIR_NAME,Ye.BOOT_PROPS_FILE_NAME);return H0.existsSync(e)||(e=yi.join(__dirname,"../","hdb_boot_properties.file")),e}a(uoe,"getPropsFilePath");function loe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(loe,"timeoutPromise");async function _oe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Hie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(_oe,"isPortTaken");function doe(e){try{return Ye.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){mr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(doe,"isClusterOperation");function Eoe(e,t){let r=(_e(),re(be)).getDatabases();if(!r[e])return uh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return uh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Eoe,"checkGlobalSchemaTable");function foe(e,t){if(Mr(t)){mr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Mr(e)||js(e)){mr.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){mr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){mr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(foe,"getClusterUser");function hoe(){P0.parsePromise=function(e,t,r){return new Promise(function(s,n){P0.parse(e,{header:!0,transformHeader:$0,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(hoe,"promisifyPapaParse");function $0(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($0,"removeBOM");function moe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;mr.info(`Got cluster status event response: ${Gie(n)}`);try{i.cancel()}catch{mr.error("Error trying to cancel timeout.")}s(n)})})}a(moe,"createEventPromise");async function poe(e){let t=!0,r=0;do await q0(Yie*r++),(await Fie.findPs(e)).length>0&&(t=!1);while(t&&r<Kie);if(t)throw new Error(`process ${e} was not started`)}a(poe,"checkProcessRunning");function Soe(e,t){let r=V0(e);if(r)return r;let s=Y0(e,t);if(s)return s}a(Soe,"checkSchemaTableExist");function V0(e){let{getDatabases:t}=(_e(),re(be));if(!t()[e])return uh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(V0,"checkSchemaExists");function Y0(e,t){let{getDatabases:r}=(_e(),re(be));if(!r()[e][t])return uh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Y0,"checkTableExists");function Toe(){let e=ch().utc().add(1,Ye.MOMENT_DAYS_TAG).startOf(Ye.MOMENT_DAYS_TAG).unix(),t=ch().utc().unix();return e-t}a(Toe,"getStartOfTomorrowInSeconds");function goe(){return ch().utc().format("DD-MM-YYYY")}a(goe,"getLimitKey");function Roe(e){try{let t=new qie(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){mr.error("Got an error back ticking items."),mr.error(t)}}a(Roe,"backtickASTSchemaItems");function Aoe(e){return[e]}a(Aoe,"createForkArgs");function Ooe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Ooe,"autoCastBoolean");function Noe(e,t){let{getDatabases:r}=(_e(),re(be)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Noe,"getTableHashAttribute");function boe(e){let{getDatabases:t}=(_e(),re(be));return t()[e]!==void 0}a(boe,"doesSchemaExist");function yoe(e,t){let{getDatabases:r}=(_e(),re(be));return r()[e]?.[t]!==void 0}a(yoe,"doesTableExist");function Ioe(e){try{return JSON.stringify(e)}catch{return e}}a(Ioe,"stringifyObj");function woe(e){let t=ch.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(woe,"ms_to_time");function Coe(e,t){let r=yi.basename(e,yi.extname(e));return yi.join(yi.dirname(e),r+t)}a(Coe,"changeExtension");function NA(){if(process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=xie(process.argv);if(e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ye.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(NA,"getEnvCliRootPath");var AA;function Loe(){if(AA)return AA;let e=NA();NA()&&H0.pathExistsSync(yi.join(e,Ye.HDB_CONFIG_FILE))&&(AA=!0)}a(Loe,"noBootFile");function Doe(e,t){let r;return e.protocol==="http:"?r=$ie:r=kie,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(Doe,"httpRequest");function Uoe(e){if(!e.schema&&!e.database){e.schema=Ye.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Uoe,"transformReq");function Moe(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(Moe,"convertToMS")});var Y=m((bRe,z0)=>{"use strict";var bA=require("fs-extra"),Ts=require("path"),W0=require("os"),Poe=require("properties-reader"),Bl=C(),Po=F(),ne=R(),lh=et(),voe="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",Q0=!1,Boe={[ne.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Gn={};z0.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:Hoe,setHdbBasePath:qoe,get:Foe,initSync:xoe,setProperty:he,initTestEnvironment:koe};function Hoe(){return Gn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Hoe,"getHdbBasePath");function qoe(e){Gn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(qoe,"setHdbBasePath");function Foe(e){let t=lh.getConfigValue(e);return t===void 0?Gn[e]:t}a(Foe,"get");function he(e,t){Boe[e]&&(Gn[e]=t),lh.updateConfigObject(e,t)}a(he,"setProperty");function Goe(){let e;try{e=Po.getPropsFilePath(),bA.accessSync(e,bA.constants.F_OK|bA.constants.R_OK),Q0=!0;let t=Poe(e);return Gn[ne.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ne.HDB_SETTINGS_NAMES.INSTALL_USER),Gn[ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Gn[_h]=e,!0}catch{return Bl.trace(`Environment manager found no properties file at ${e}`),!1}}a(Goe,"doesPropFileExist");function xoe(e=!1){try{(Q0||Goe()||Po.noBootFile())&&(lh.initConfig(e),Gn[ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=lh.getConfigValue(ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Bl.error(voe),Bl.error(t),console.error(t),process.exit(1)}}a(xoe,"initSync");function koe(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=Ts.join(__dirname,"../../","unitTests");Gn[_h]=Ts.join(u,"hdb_boot_properties.file"),he(ne.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Ts.join(u,"settings.test")),he(ne.HDB_SETTINGS_NAMES.INSTALL_USER,W0.userInfo()?W0.userInfo().username:void 0),he(ne.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ne.HDB_SETTINGS_NAMES.CERT_KEY,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Ts.join(u,"envDir","utility","keys","privateKey.pem")),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Ts.join(u,"envDir","utility","keys","certificate.pem")),he(ne.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),he(ne.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Ts.join(u,"envDir","log")),he(ne.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),he(ne.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),he(ne.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),he(ne.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Ts.join(u,"envDir")),he(ne.CONFIG_PARAMS.STORAGE_PATH,Ts.join(u,"envDir")),he(ne.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Po.isEmpty(n)?!0:n),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Po.isEmpty(n)?!0:n),he(ne.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),he(ne.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Po.isEmpty(i)?!1:i),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Po.isEmpty(i)?!1:i),he(ne.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),he(ne.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),he(ne.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Ts.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),he(ne.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Po.isEmpty(c)?!1:c),o&&(he("CORS_ACCESSLIST",o),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(he(ne.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(he(ne.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(he(ne.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),he(ne.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;Bl.fatal(r),Bl.error(t)}}a(koe,"initTestEnvironment")});var IA=m((IRe,J0)=>{"use strict";var Hl=Y();Hl.initSync();var tc=require("fs-extra"),yA=require("path"),rc=R(),$oe=require("crypto"),Voe=require("uuid").v4;J0.exports=Yoe;function Yoe(){if(Hl.getHdbBasePath()!==void 0){let e=yA.join(Hl.getHdbBasePath(),rc.LICENSE_KEY_DIR_NAME,rc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=yA.join(Hl.getHdbBasePath(),rc.LICENSE_KEY_DIR_NAME,rc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=yA.join(Hl.getHdbBasePath(),rc.LICENSE_KEY_DIR_NAME,rc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{tc.accessSync(r),tc.accessSync(e),tc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Voe(),i=$oe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});tc.writeFileSync(r,n),tc.writeFileSync(e,i.privateKey),tc.writeFileSync(t,i.publicKey)}else throw s}}}a(Yoe,"checkJWTTokenExist")});var X0=m((CRe,j0)=>{"use strict";var wA=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};j0.exports={HdbInfoInsertObject:wA}});var tF=m((DRe,eF)=>{"use strict";var Z0=R(),CA=class{static{a(this,"UpgradeObject")}constructor(t,r){this[Z0.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[Z0.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};eF.exports={UpgradeObject:CA}});var dh=m((MRe,sF)=>{"use strict";var es=require("prompt"),sc=require("chalk"),rF=C(),gs=require("os"),LA=Fi(),DA=["yes","y"];async function Koe(e){let t=`${gs.EOL}`+sc.bold.green("Your current HarperDB version requires that we complete an update process.")+`${gs.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${gs.EOL}${gs.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${gs.EOL}`;es.override=LA(["CONFIRM_UPGRADE"]),es.start(),es.message=t;let r={properties:{CONFIRM_UPGRADE:{description:sc.magenta(`${gs.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 es.get([r])}catch(n){return rF.error("There was an error when prompting user about an upgrade."),rF.error(n),!1}return DA.includes(s.CONFIRM_UPGRADE)}a(Koe,"forceUpdatePrompt");async function Woe(e){let t=`${gs.EOL}`+sc.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.${gs.EOL}`);es.override=LA(["CONFIRM_DOWNGRADE"]),es.start(),es.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:sc.magenta(`${gs.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 es.get([r]);return DA.includes(s.CONFIRM_DOWNGRADE)}a(Woe,"forceDowngradePrompt");async function Qoe(){let e=`${gs.EOL}`+sc.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");es.override=LA(["GENERATE_CERTS"]),es.start(),es.message=e;let t={properties:{GENERATE_CERTS:{description:sc.magenta(`${gs.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 es.get([t]);return DA.includes(r.GENERATE_CERTS)}a(Qoe,"upgradeCertsPrompt");sF.exports={forceUpdatePrompt:Koe,forceDowngradePrompt:Woe,upgradeCertsPrompt:Qoe}});var MA=m((vRe,nF)=>{"use strict";var UA=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};nF.exports=UA});var oF=m((xRe,iF)=>{"use strict";var zoe=F(),Joe=et(),HRe=C(),qRe=require("path"),FRe=require("fs"),GRe=R();iF.exports={getOldPropsValue:joe};function joe(e,t,r=!1){let s=t.getRaw(e);return zoe.isNotEmptyAndHasValue(s)?s:r?Joe.getDefaultConfig(e):""}a(joe,"getOldPropsValue")});var lF=m(($Re,uF)=>{"use strict";var Ii=require("path"),wi=require("fs-extra"),Xoe=require("properties-reader"),Zoe=MA(),at=C(),{getOldPropsValue:Le}=oF(),{HDB_SETTINGS_NAMES:Q,CONFIG_PARAMS:vo}=R(),Bo=et(),Eh=Y(),aF=F(),Xs=R(),PA=new Zoe("3.1.0"),cF=[];function eae(){let e=Xoe(Eh.get(Q.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),at.info(t);let r=` ;Settings for the HarperDB process.
32
+ `+MR.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(ine,"getServerOptions");function one(){let e=Ts.get(zse),t=Ts.get(Jse),r;return e&&(e===!0||e.toUpperCase()===QH)&&(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(one,"getCORSOpts");function ane(){return Ts.get(Zse)}a(ane,"getHeaderTimeoutConfig")});var cq=m((Ege,aq)=>{"use strict";var{decode:cne}=require("msgpackr"),{isMainThread:une,parentPort:lne,threadId:_ge}=require("worker_threads"),PR=ze(),Qa=Pe(),_ne=R(),Al=C(),jH=Y(),eq=R();rt();var dne=Tn(),{recordAction:Ene,recordActionBinary:fne}=(Eo(),re(Su)),{publishToStream:hne}=PR,dge={durable:Qa.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Qa.WORK_QUEUE_CONSUMER_NAMES.deliver_group},mne,pne,Sne,tq,rq;aq.exports={initialize:sq,workQueueListener:oq,setSubscription:Tne,setIgnoreOrigin:Rne,getDatabaseSubscriptions:gne};async function sq(){rq=!0,Al.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await PR.getNATSReferences();mne=e,pne=e.info.server_name,Sne=t,tq=r}a(sq,"initialize");var Mf=new Map;function Tne(e,t,r){let s=Mf.get(e);s||Mf.set(e,s=new Map),s.set(t,r),rq||sq().then(oq)}a(Tne,"setSubscription");function gne(){return Mf}a(gne,"getDatabaseSubscriptions");var nq;function Rne(e){nq=e}a(Rne,"setIgnoreOrigin");var iq=100,XH=new Array(iq),Uf=0;async function oq(){let t=await(await tq.consumers.get(Qa.WORK_QUEUE_CONSUMER_NAMES.stream_name,Qa.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await XH[Uf],XH[Uf]=Ane(r).catch(s=>{Al.error(s)}),++Uf>=iq&&(Uf=0)}a(oq,"workQueueListener");une||lne.on("message",async e=>{let{type:t}=e;t===eq.ITC_EVENT_TYPES.SHUTDOWN&&PR.closeConnection()});async function Ane(e){let t=cne(e.data);Ene(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Qa.MSG_HEADERS.ORIGIN)===jH.get(_ne.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!nq;if(fne(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Al.trace("processing message:",i,o,u,(l?"records: "+l.map(A=>A.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Al.trace(`messageProcessor nats msg id: ${e.headers.get(Qa.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=Mf.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:ZH(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let A=l.map((g,v)=>({type:ZH(i),value:g,id:_?.[v],table:u}));for(;c;)A.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:A,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}jH.get(eq.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&hne(e.subject.split(".").slice(0,-1).join("."),dne.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Al.error(i)}e.ack()}a(Ane,"messageProcessor");function ZH(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(ZH,"convertOperation")});var GR={};We(GR,{disableNATS:()=>Nne,setNATSReplicator:()=>vR,start:()=>One});function One(){vf.default.get(Bf.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&yne()}function Nne(e=!0){Eq=e}function yne(){if(Eq)return;let e=_s(),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];vR(n,r,i)}}xR((r,s)=>{vR(r.tableName,r.databaseName,r),s&&hq(r)}),!uq&&(uq=!0)}function vR(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends bt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[le],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[le],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[le],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[le]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[le],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[le],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[le]})}static defineSchema(o){hq(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Cs;return(0,lq.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<bne}static isNATSReplicator=!0;static shouldReceiveInvalidations=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Pf(i.transaction,i)),o.user=i.user):o=fq),o}a(n,"getNATSTransaction")}function hq(e){let t=vf.default.get(Bf.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,HR.publishToStream)(`${qR.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,FR.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 HR,qR,FR,lq,_q,vf,Bf,dq,Eq,bne,fq,uq,Pf,BR,mq=ge(()=>{de();Ls();HR=D(ze()),qR=D(Pe()),FR=D(Tn());Dc();lq=D(cq()),_q=D(Ht()),vf=D(Y()),Bf=D(R()),dq=D(C());a(One,"start");a(Nne,"disableNATS");bne=2;a(yne,"assignReplicationSource");a(vR,"setNATSReplicator");a(hq,"publishSchema");Pf=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=vf.default.get(Bf.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,E=_.operation=="put"?"upsert":_.operation;u||(dq.trace(`Sending transaction event ${E}`),l=u={operation:E,schema:n,table:d,__origin:{user:this.user?.username,timestamp:t,node_name:r}},u.hash_values=c,E!=="delete"&&(u.records=o)),u.table===d&&u.operation===E?(o.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,HR.publishToStream)(`${qR.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,FR.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},BR=class extends Pf{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,_q.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};fq=new BR});async function Sq({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await kR.getResource(e,{});n=new VR(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await kR.get(e);i&&i.delete()}n=new qf(e,t)}return n}function $R(){return Hf++,Hf>65500&&(Hf=1),Hf}var pq,Ol,kR,Hf,qf,VR,Tq=ge(()=>{de();Ju();pq=D(Ht()),Ol=D(C());Qi();kR=ft({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(Sq,"getSession");Hf=1;a($R,"getNextMessageId");qf=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 E=this.subscriptions.find(g=>g.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=Si.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,T=h.Resource,A=await Ze(f,async()=>{let g=await T.subscribe(f);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 v of g)try{let V;if(v.type&&v.type!=="put"&&v.type!=="delete"&&v.type!=="message"||s&&!s(v))continue;r?(v.topic=n,V=this.needsAcknowledge(v)):V=$R();let b=v.id;Array.isArray(b)&&(b=Ca(b)),b==null&&(b=""),this.listener(p+"/"+b,v.value,V,t)}catch(V){(0,Ol.warn)(V)}})(),g});return A.topic=n,A.qos=t.qos,this.subscriptions.push(A),A}resume(){}needsAcknowledge(t){return $R()}acknowledge(t){}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;let i=Si.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=[]}},VR=class extends qf{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=$R();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);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,Ol.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,pq.getNextMonotonicTime)()),(0,Ol.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),kR.put(this.sessionRecord)),t.qos}}});var WR={};We(WR,{start:()=>wne});async function wne({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:_}=Aq(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,xn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Ine&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,Oq.getSuperUser)());let{onMessage:u,onClose:l}=Aq(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,xn.info)("Socket error",_)})},{port:t,securePort:s})}function Aq(e,t,r,s,n){Rq||(Rq=!0,DS(_=>{_.push({metric:"mqtt-connections",connections:YR})})),YR++;let i,o={protocolVersion:4},c=(0,Ff.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){YR--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await Et.auth(_.username,_.password.toString()),(0,KR.get)(kn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&gq.notify({username:s.username,status:kn.AUTH_AUDIT_STATUS.SUCCESS,type:kn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,KR.get)(kn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&gq.error({username:s.username,status:kn.AUTH_AUDIT_STATUS.FAILURE,type:kn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=Sq({user:s,..._}),i=await i}catch(g){return(0,xn.error)(g),d({cmd:"connack",reasonCode:g.code||128,returnCode:g.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((g,v,V,b)=>{try{let I=g.indexOf("/",1),U=I>0?g.slice(0,I):g;d({cmd:"publish",topic:g,payload:E(v),messageId:V||Math.floor(Math.random()*1e8),qos:b.qos},U)}catch(I){(0,xn.error)(I),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let g of _.subscriptions){let v;try{v=(await i.addSubscription(g,g.qos>=1)).qos||0}catch(V){(0,xn.error)(V),v=128}f.push(v)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let g of _.unsubscriptions)i.removeSubscription(g);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",p=e.deserialize||(e.deserialize=Ba(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,A;try{A=await i.publish(_,T)}catch(g){console.warn(g),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:A===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,Ff.generate)(f,o);t(p),_o(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Un(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Ff,Oq,KR,kn,xn,gq,Ine,Rq,YR,Nq=ge(()=>{Ff=require("mqtt-packet");Tq();Oq=D(tr());Da();Eo();ns();KR=D(Y()),kn=D(R()),xn=D(C()),gq=(0,xn.loggerWithTag)("auth-event"),Ine=!0;a(wne,"start");YR=0;a(Aq,"onSocket")});var Pq={};We(Pq,{loadComponent:()=>Gf,loadComponentDirectories:()=>Mq});function Mq(e,t){t&&(zR=t),e&&(JR=e);let r=[];if((0,Js.existsSync)(QR)){let n=(0,Js.readdirSync)(QR,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,ts.join)(QR,o);r.push(Gf(c,zR,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Gf(s,zR,s)),Promise.all(r).then(()=>{Uq=!0})}async function Gf(e,t,r,s,n){if(!yq.has(e)){yq.set(e,!0),n&&(JR=n);try{let i,o=(0,ts.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Js.existsSync)(o)?i=(0,Iq.parseDocument)((0,Js.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Une;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Js.existsSync)(f=(0,ts.join)(E,"node_modules",u));)if(E=(0,ts.dirname)(E),E.length<(0,Dq.getHdbBasePath)().length){f=null;break}if(f)_=await Gf(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=Dne[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,ft(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Nl.isMainThread&&(_=await _.startOnMainThread?.({server:Et,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!bq.includes(T)){bq.push(T);let A=jR.get(XR.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);LR(T,A)}}catch(A){console.error("Error listening on socket",T,A,u)}if(t.isWorker&&(_=await _.start?.({server:Et,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),JR.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,Lq.handleHDBError)("Can not reference parent directories");let T=(0,ts.join)(e,l.files);for(let A of await(0,wq.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:g,dirent:v}=A,V=(0,ts.relative)(e,g),b=(0,ts.basename)(e),I=l.path||"/";I=I.startsWith("/")?I:I.startsWith("./")?"/"+b+I.slice(2):I==="."?"/"+b:"/"+b+"/"+I,I+=(I.endsWith("/")?"":"/")+V;try{if(v.isFile()){let U=await Lne(g);Nl.isMainThread&&await _.setupFile?.(U,I,g,t),t.isWorker&&await _.handleFile?.(U,I,g,t)}else Nl.isMainThread&&await _.setupDirectory?.(I,g,t),t.isWorker&&await _.handleDirectory?.(I,g,t)}catch(U){console.error(`Could not load ${v.isFile()?"file":"directory"} ${g} using ${l.module} for application ${e}`,U),t.set(l.path||"/",new bl(U))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new bl(E),null,!0)}}if(Nl.isMainThread&&!Uq&&(0,Cq.watchDir)(e,async()=>Mq()),i.extensionModule)return await O_((0,ts.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new bl(i))}}}var Js,ts,Nl,Iq,jR,XR,wq,Cq,Lq,Dq,Cne,Lne,QR,JR,Uq,zR,Dne,Une,bq,yq,bl,vq=ge(()=>{Js=require("fs"),ts=require("path"),Nl=require("worker_threads"),Iq=require("yaml"),jR=D(Y()),XR=D(R());FN();$N();VN();Yv();LH();PH();wq=D(require("fast-glob")),Cq=D(rt());um();ns();Lq=D(z());Ls();de();Df();Dq=D(Y()),Cne=D(JH());LE();mq();Nq();({readFile:Lne}=Js.promises),QR=jR.get(XR.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),JR=new Map;a(Mq,"loadComponentDirectories");Dne={REST:Bg,graphqlSchema:cm,jsResource:_m,fastifyRoutes:hR,login:Em,static:mR,operationsApi:Cne,customFunctions:{},clustering:GR,authentication:ju,mqtt:WR},Une={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},bq=[],yq=new Map;a(Gf,"loadComponent");bl=class extends bt{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 xq=m((xge,Gq)=>{"use strict";var $f=require("fs-extra"),ZR=require("path"),xf=C(),Bq=G(),kf=R(),Fq=Y(),Mne=tt();Gq.exports=Pne;async function Pne(){let e=vne(),t=Fq.get(kf.CONFIG_PARAMS.ROOTPATH),r=ZR.join(t,"package.json"),s={dependencies:{harperdb:"file:"+kf.PACKAGE_ROOT}},n=ZR.join(t,"node_modules");await $f.ensureDir(n);let i,o=!0,c=!1;try{i=await $f.readJson(r)}catch(u){if(Bq.isEmptyOrZeroLength(e))return;if(u.code!==kf.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!Bq.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await Hq(l);s.dependencies[u]=_+l}if(!o){xf.notify("Installing components"),await qq(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await Hq(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(xf.notify("Removing component",u),c=!0);c&&(xf.notify("Updating components."),await qq(r,s))}a(Pne,"installComponents");function vne(){let e=Mne.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(vne,"getComponentsConfig");async function Hq(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZR.extname(e)||await $f.pathExists(e)?"file:":"github:"}a(Hq,"getPkgPrefix");async function qq(e,t){xf.trace("npm installing components package.json",t),await $f.writeFile(e,JSON.stringify(t,null," ")),await FE().installAllRootModules(Fq.get(kf.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(qq,"installPackages")});var bf=m(($ge,$q)=>{var{isMainThread:kq}=require("worker_threads"),{getTables:Bne}=(de(),re(Ie)),{loadComponentDirectories:Hne,loadComponent:qne}=(vq(),re(Pq)),{resetResources:Fne}=(Ju(),re(gP)),Gne=xq(),xne=tt(),{dirname:kne}=require("path"),{getConnection:$ne}=ze(),Vne=Y(),Yne=R(),eA=new Map;async function Kne(e=!1){!kq&&Vne.get(Yne.CONFIG_PARAMS.CLUSTERING_ENABLED)&&$ne(),kq&&await Gne();let t=Fne();Bne(),t.isWorker=e,await qne(kne(xne.getConfigFilePath()),t,"hdb",!0,eA),await Hne(eA,t);let r=[];for(let[s]of eA)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(Kne,"loadRootComponents");$q.exports.loadRootComponents=Kne});var rt=m((Kge,wi)=>{"use strict";var{Worker:Wne,MessageChannel:Qne,parentPort:js,isMainThread:iA,threadId:zne,workerData:yl}=require("worker_threads"),{PACKAGE_ROOT:Jne}=R(),{join:Kq,isAbsolute:jne,extname:Yf}=require("path"),{server:Xne}=(ns(),re(Pc)),{watch:Zne,readdir:eie}=require("fs/promises"),{totalmem:Vq}=require("os"),oA=R(),za=C(),Yge=R(),{randomBytes:tie}=require("crypto"),rie=1024*1024,Ii=[],yi=[],sie=50,Wq=1e4,nie="restart",Qq="request_thread_info",zq="resource_report",Jq="thread_info",jq="added-port",iie="ack",tA;wi.exports={startWorker:rA,restartWorkers:aA,shutdownWorkers:uie,workers:Ii,setMonitorListener:pie,onMessageFromWorkers:lie,onMessageByType:_ie,broadcast:die,broadcastWithAcknowledgement:fie,setChildListenerByType:cie,getWorkerIndex:Zq,getTicketKeys:e0,setMainIsWorker:oie,restartNumber:yl?.restartNumber||1};var Xq;function Zq(){return yl?yl.workerIndex:Xq?0:void 0}a(Zq,"getWorkerIndex");function oie(e){Xq=e}a(oie,"setMainIsWorker");var Vf;function e0(){return Vf||(Vf=iA?tie(48):yl.ticketKeys,Vf)}a(e0,"getTicketKeys");Object.defineProperty(Xne,"workerIndex",{get(){return Zq()}});var t0={[Qq](e,t){hie(t)},[zq](e,t){mie(t,e)}};function rA(e,t={}){let r=process.constrainedMemory?.()||Vq();r=Math.min(r,Vq());let s=Math.max(Math.floor(r/rie/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of yi){let{port1:u,port2:l}=new Qne;c.postMessage({type:jq,port:u},[u]),i.push(l)}Yf(e)||(e+=".js");let o=new Wne(jne(e)?e:Kq(Jne,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:wi.exports.restartNumber,ticketKeys:e0()},transferList:i},t));return Wf(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{rA(e,t)},o.on("error",c=>{console.error("Worker error:",c),za.error("Worker error:",c)}),o.on("exit",c=>{Ii.splice(Ii.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<sie?(t.unexpectedRestarts=o.unexpectedRestarts+1,rA(e,t)):za.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{t0[c.type]?.(c,o)}),Ii.push(o),Tie(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(rA,"startWorker");var aie=[oA.THREAD_TYPES.HTTP];async function aA(e=null,t=2,r=!0){if(iA){if(r){let{loadRootComponents:n}=bf();await n()}wi.exports.restartNumber++,t<1&&(t=t*Ii.length);let s=[];for(let n of Ii.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:wi.exports.restartNumber,type:oA.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=aie.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Wq*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(o)),!i&&r&&n.startCopy(),c()})});s.push(o),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else js.postMessage({type:nie,workerType:e})}a(aA,"restartWorkers");function cie(e,t){t0[e]=t}a(cie,"setChildListenerByType");function uie(e){return aA(e,1/0,!1)}a(uie,"shutdownWorkers");var r0=[];function lie(e){r0.push(e)}a(lie,"onMessageFromWorkers");var sA=new Map;function _ie(e,t){let r=sA.get(e);r||sA.set(e,r=[]),r.push(t)}a(_ie,"onMessageByType");function die(e){for(let t of yi)try{t.postMessage(e)}catch(r){za.error("Unable to send message to worker",r)}}a(die,"broadcast");var Kf=new Map,Eie=1;function fie(e){return new Promise(t=>{let r=0;for(let s of yi)try{let n=Eie++,i=a(()=>{Kf.delete(n),--r===0&&t(),s!==js&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Kf.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Kf)o.port===s&&o()})),s.postMessage(e),r++}catch(n){za.error("Unable to send message to worker",n)}r===0&&t()})}a(fie,"broadcastWithAcknowledgement");function hie(e){e.postMessage({type:Jq,workers:s0()})}a(hie,"sendThreadInfo");function s0(){let e=Date.now();return Ii.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(s0,"getChildWorkerInfo");function mie(e,t){e.resources=t,e.resources.updated=Date.now()}a(mie,"recordResourceReport");var nA;function pie(e){nA=e}a(pie,"setMonitorListener");var Sie=1e3,Yq=!1;function Tie(){Yq||(Yq=!0,setInterval(()=>{for(let e of Ii){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}nA&&nA()},Sie).unref())}a(Tie,"startMonitoring");var gie=1e3;if(js){Wf(js);for(let e of yl.addPorts)Wf(e);setInterval(()=>{let e=process.memoryUsage();js.postMessage({type:zq,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},gie).unref(),tA=a(()=>new Promise((e,t)=>{js.on("message",r),js.postMessage({type:Qq});function r(s){s.type===Jq&&(js.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else tA=s0;wi.exports.getThreadInfo=tA;function Wf(e,t){yi.push(e),e.on("message",r=>{if(r.type===jq)Wf(r.port);else if(r.type===iie){let s=Kf.get(r.id);s&&s()}else{for(let n of r0)n(r,e);let s=sA.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){za.error(i)}}}).on("close",()=>{yi.splice(yi.indexOf(e),1)}).on("exit",()=>{yi.splice(yi.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Wf,"addPort");if(iA){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await eie(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(Kq(s,i.name));try{for await(let{filename:i}of Zne(s,{persistent:!1}))(Yf(i)===".ts"||Yf(i)===".js"||Yf(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await aA(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");wi.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else js.on("message",async e=>{let{type:t}=e;t===oA.ITC_EVENT_TYPES.SHUTDOWN&&(wi.exports.restartNumber=e.restartNumber,js.unref(),setTimeout(()=>{za.warn("Thread did not voluntarily terminate",zne),process.exit(0)},Wq).unref())})});function dA(e){let t=e.auditStore=e.openDB(c0.AUDIT_STORE_NAME,Aie);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,l0.getWorkerIndex)()===0&&e.on("aftercommit",()=>{uA||(uA=setTimeout(()=>{if(uA=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-n0,0]})){if((n[0]&15)===_A){let i=s[1];r[i]?.(s[2])}t.remove(s)}},n0/10).unref())}),t}function Jf(e,t,r){let s=E0[r.type],n=3;if(t?t.length>80?(s|=Qf,n=(0,$n.writeKey)(t,Xs,e?14:6),cA.setUint16(2,n)):(n=(0,$n.writeKey)(t,Xs,e?11:3),Xs[1]=n):Xs[1]=0,e){s|=d0;let i=s&Qf?6:3;cA.setFloat64(i,e),t||(n=i+8)}return Xs[0]=s,s&Qf?cA.setUint16(4,0):Xs[2]=0,r.value?Buffer.concat([Xs.slice(0,n),r.value]):Xs.subarray(0,n)}function Ci(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Qf,i=n?6:3,o;r&d0&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&lA?t.decoder.decode(e.subarray(c||i)):void 0;return{type:E0[r&7],value:u,lastVersion:o,get user(){return c?(0,$n.readKey)(e,i,c):void 0}}}var $n,zf,c0,u0,l0,_0,Xs,cA,Rie,Aie,n0,uA,lA,i0,_A,o0,a0,Qf,d0,E0,Il=ge(()=>{$n=require("ordered-binary"),zf=D(Y()),c0=D(xe()),u0=D(R()),l0=D(rt()),_0=D(G());(0,zf.initSync)();Xs=Buffer.alloc(1024),cA=new DataView(Xs.buffer,Xs.byteOffset,1024),Rie={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,$n.writeKey)(e[2],t,r+12)}else return(0,$n.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,$n.readKey)(e,t+12,r)]}else return(0,$n.readKey)(e,t,r)}},Aie={encoding:"binary",keyEncoder:Rie},n0=(0,_0.convertToMS)((0,zf.get)(u0.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,uA=null;a(dA,"openAuditStore");lA=16,i0=1,_A=2,o0=3,a0=4,Qf=128,d0=64,E0={put:i0|lA,[i0]:"put",delete:_A,[_A]:"delete",message:o0|lA,[o0]:"message",invalidate:a0,[a0]:"invalidate"};a(Jf,"createAuditEntry");a(Ci,"readAuditEntry")});var EA,Do,Oie,wl,jf,f0=ge(()=>{EA=D(Ht());Il();Do=Symbol("completion"),Oie=100,wl=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,EA.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[Do]&&(i||(i=[]),i.push(d[Do])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Jf(_.lastVersion,this.username,d))}},"doWrite"),l=a(()=>{let _=this.writes[o++];if(_)if(_.key){let d=_.store.getEntry(_.key),E=s===0&&_.lastVersion!==void 0?_.lastVersion:_.lastVersion=d?.version??null,f=_.store.ifVersion(_.key,E,l);n=n||f}else l();else for(let d of this.writes)u(d)},"nextCondition");return this.writes.length<Oie>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},jf=class extends wl{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,EA.getNextMonotonicTime)())}getReadTxn(){}}});function S0(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ja||((0,Uo.onMessageByType)(m0,d=>{let E=d.auditIds;hA(d.path,E,d.txnId)}),(0,Uo.onMessageByType)(p0,d=>{(0,Zs.trace)("confirming to proceed with txn",d.txnId)}),ja=Object.create(null));let c=ja[i]||(ja[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=Ca(t);let l=new fA(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 hA(e,t,r,s){if(!ja)return;let n=ja[e];if(n){if(Ja&&Ja+1!==r){(0,Zs.trace)("Waiting to ensure latest txn id",Ja,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Xf)o<r&&((0,Zs.trace)("Txn",r,"waiting for txn",o),await c);if(Ja+1!==r){await(0,Uo.broadcastWithAcknowledgement)({type:p0,txnId:r});for(let[o,c]of Xf)o<r&&((0,Zs.trace)("Txn",r,"waiting for txn",o),await c)}Xf.delete(r),(0,Zs.trace)("Proceeding with txn id",r),Ja=r-1,hA(e,t,r,s)})();return Xf.set(r,i),i}(0,Zs.trace)("Notifying with txn id",r,s),Ja=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,h0.writeKey)(i,bie,0);let _=i[3];_&&(i.length=3);let d,E=Ca(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,Zs.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let A=n.auditStore.get(i);if(!A||(d=Ci(A,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(A){console.error(A),(0,Zs.info)(A)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function T0(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",({next:i,last:o,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&Nie)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Uo.broadcast)({type:m0,path:n,auditIds:l,txnId:c,start:u}),hA(n,l,c,!0))})}}var Zs,Uo,h0,m0,p0,Nie,ja,bie,fA,Ja,Xf,g0=ge(()=>{Zs=D(C()),Uo=D(rt()),h0=require("ordered-binary");Dc();Ju();Il();m0="transaction",p0="transaction-await",Nie=67108864,bie=Buffer.alloc(4096);a(S0,"addSubscription");fA=class extends Cs{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"}}},Xf=new Map;a(hA,"notifyFromTransactionData");a(T0,"listenToCommits")});var Xg={};We(Xg,{coerceType:()=>Zf,makeTable:()=>th,setServerUtilities:()=>Lie});function th(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:o,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),T0(i,u);let p=0,T,A,g,v={},V,b,I,U;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&(V=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(b=Z),Z.expiresAt&&(I=Z),Z.isPrimaryKey&&(v=Z);let J;E&&mO();class M extends bt{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=h;static expirationTimer;static createdTimeProperty=V;static updatedTimeProperty=b;static get expirationMS(){return d}static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return A=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let P=!1,y=a(async L=>{let F=L.value,$=L.table?ke[c][L.table]:M;if(c===gs.SYSTEM_SCHEMA_NAME&&(L.table===gs.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||L.table===gs.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(P=!0),L.id===void 0&&(L.id=F[$.primaryKey],L.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(L));let B=await $.getResource(L.id,L,Cl);switch(L.type){case"put":return B._writeUpdate(F,Cl);case"delete":return B._writeDelete(Cl);case"publish":return B._writePublish(F,Cl);case"invalidate":return B.invalidate(Cl);default:vo.error("Unknown operation",L.type,L.id)}},"writeUpdate");try{let L=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);L&&f==null&&(f=!0);let F=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Po.getWorkerIndex)()):(0,Po.getWorkerIndex)()===0,$=L&&F&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if($)for await(let B of $)try{if(!(B.type==="transaction"?B.writes[0]:B)){console.error("Bad subscription event");continue}let X=Ze(B,()=>{if(B.type==="transaction"){let j=[];for(let K of B.writes){K[be]=B;try{j.push(y(K))}catch(ee){throw ee.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(B),ee}}return Promise.all(j)}else if(B.type==="define_schema"){let j=this.attributes.slice(0),K;for(let ee of B.attributes)j.find(He=>He.name===ee.name)||(j.push(ee),K=!0);K&&(ft({table:n,database:c,attributes:j,origin:"cluster"}),Ul.signalSchemaChange(new Ml.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(B)});B.onCommit&&(X?.then&&P&&Ul.signalUserChange(new Ml.UserEventMsg(process.pid)),X?.then?X.then(B.onCommit):B.onCommit())}catch(k){console.error("error in subscription handler",k)}}catch(L){console.error(L)}})(),this}static getResource(S,N,P){let y=super.getResource(S,N,P);if(S!=null)try{if(y.hasOwnProperty(_e))return y;let L=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let F,$,k={transaction:L?.getReadTxn()},X;return Kt(S,N,k,y,P?.allowInvalidated,(j,K)=>{K?$(K):(y[_e]=j?.value,y[hr]=j?.version,X=!0,F?.(y))}),X?y:new Promise((j,K)=>{F=j,$=K})}catch(L){throw L.message.includes("Unable to serialize object")&&(L.message+=": "+JSON.stringify(S)),L}return y}static setTTLExpiration(S){(0,Po.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:P,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&P?.__invalidated__==null&&M.evict(N,P,y)},d).unref())}static enableAuditing(){E=!0,mO(),M.audit=!0}static coerceId(S){return S===""?null:Zf(S,v)}static async dropTable(){if(delete ke[c][n],c===o){for(let S in r)_.remove(M.tableName+"/"+S),r[S].drop();_.remove(M.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));Ul.signalSchemaChange(new Ml.SchemaEventMsg(process.pid,gs.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[fn])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[be]?.hasOwnProperty("returnNonexistent")&&this[be].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let P=S.role.permission;if(P.super_user)return!0;if(P[n]?.read){let y=P[n].attribute_permissions;if(y){N||(N={});let L=N.select;if(L){let F=mA(y,"read");N.select=L.filter($=>F[$])}else N.select=y.filter(F=>F.read).map(F=>F.attribute_name);return N}else return!0}}allowUpdate(S,N,P){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let L=y[n].attribute_permissions;if(L){let F=mA(L,"update");for(let $ in N)if(!F[$])return!1;if(P)for(let $ of L){let B=$.attribute_name;!$.update&&!(B in N)&&(N[B]=this.getProperty(B))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let P=S.role.permission;if(P.super_user)return!0;if(P[n]?.insert){let y=P[n].attribute_permissions;if(y){let L=mA(y,"insert");for(let F in N)if(!L[F])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let L in this[_e])S[L]===void 0&&(S[L]=void 0);y=this[Nt],y&&(S=Object.assign(y,S)),this[Nt]=y=S}return!this[_e]&&t&&!(y||(y=this[Nt]))?.[t]&&(y||(y=this[Nt]=Object.create(null)),y[t]=this[le]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[le],store:i,invalidated:!0,lastVersion:this[hr],nodeName:this[be]?.nodeName,commit:(P,y)=>{if(y)return;let L={__invalidated__:P};for(let k in r)L[k]=this.getProperty(k);let F=M.Source,$,B=this[le];return S?.isNotification||F?.shouldReceiveInvalidations&&($=F.invalidate(B,this)),i.put(this[le],L,P),{type:E&&"invalidate",[Do]:$}}})}static evict(S,N,P){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let L;if(!N){let F=i.getEntry(S);if(!F)return;N=F.value,P=F.version}if(N)for(let F in r)L||(L={__invalidated__:0}),L[F]=N[F];return L?i.put(S,L,P,P):i.remove(S,P)}else return i.remove(S,P)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,C0.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let P=this._txnForRequest();if(this[le]===void 0)throw new Error("Can not save record without an id");let y=this[_e],L,F,$=this[le];y||(this[_e]={}),P.addWrite({key:$,store:i,lastVersion:this[hr],nodeName:this[be]?.nodeName,validate:()=>{this.validate(S)},commit:(B,k)=>{let X;if(k){if(L)return;let K=i.getEntry($);y=K?.value;let ee=this[be];ee&&K?.version>(ee.lastModified||0)&&(ee.lastModified=K.version)}if(!F){if(F=!0,N?.isNotification)S=Mc(S);else{if(S[O0]&&(L=!h_(S),L))return;t&&S[t]!==$&&(S[t]=$),b&&(S[b.name]=b.type==="Date"?new Date(B):b.type==="String"?new Date(B).toISOString():B),V&&(y?S[V.name]=y[V.name]:S[V.name]=V.type==="Date"?new Date(B):V.type==="String"?new Date(B).toISOString():B),S=Mc(S);let K=M.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(X=K.put($,S,this))}if(S[_e])throw new Error("Can not assign a record with a record property");this[_e]=S}if(vo.trace("Checking timestamp for put",$,this[hr]>B,this[hr],B),this[hr]>B)return E&&{type:"put",value:i.encoder.encode(S)};let j=i.encoder.encode(S);return i.put(this[le],(0,Xa.asBinary)(j),B),ye(this[le],y,S),y===null&&!k&&cn(-1),{type:E&&"put",value:j,[Do]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[_e]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),P,y=this[le],L;return N.addWrite({key:y,store:i,lastVersion:this[hr],nodeName:this[be]?.nodeName,commit:(F,$)=>{let B=this[_e];if($){let k=i.getEntry(y);B=k?.value;let X=this[be];X&&k?.version>(X.lastModified||0)&&(X.lastModified=k.version)}if(!P&&(P=!0,!S?.isNotification)){let k=M.Source;k?.delete&&(!k.delete.reliesOnPrototype||k.prototype.delete)&&(L=k.delete(y,this))}if(!(this[hr]>F))return ye(this[le],B),vo.trace("Write delete entry",E||f,F),E||f?(i.put(this[le],null,F),E||hO(),$||cn(1)):i.remove(this[le]),{type:E&&"delete",[Do]:L}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let P=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[le]&&(y=[{attribute:null,comparator:"prefix",value:this[le]}].concat(y));for(let K of y){let ee=K[0]??K.attribute,He=ee==null?v:h.find(Jn=>Jn.name==ee);if(He)He.type&&(K[1]===void 0?K.value=L(K.value,He):K[1]=L(K[1],He));else if(ee!=null)throw(0,Mo.handleHDBError)(new Error,`${ee} is not a defined attribute`,404)}function L(K,ee){return Array.isArray(K)?K.map(He=>Zf(He,ee)):Zf(K,ee)}a(L,"coerceTypedValues"),y.length>1&&(y=(0,I0.sortBy)(y,K=>{if(K.estimated_count===void 0){let ee=K.comparator||K.search_type;if(ee===Ll.SEARCH_TYPES.EQUALS){let He=K[0]??K.attribute;if(He==null||He===t)K.estimated_count=1;else{let Jn=r[He];K.estimated_count=Jn?Jn.getValuesCount(K[1]??K.value):1/0}}else ee===Ll.SEARCH_TYPES.CONTAINS||ee===Ll.SEARCH_TYPES.ENDS_WITH||ee==="ne"?K.estimated_count=1/0:ee===Ll.SEARCH_TYPES.STARTS_WITH||ee==="prefix"?K.estimated_count=Iie:K.estimated_count=yie}return K.estimated_count}));let F=N.getReadTxn();F.use();let $=S.select,B=y[0],k;if(!B)k=i.getRange(P?{end:!1,reverse:!0,transaction:F,lazy:$?.length<4}:{start:!1,transaction:F,lazy:$?.length<4}).map(({value:K})=>K?new Promise(ee=>setImmediate(()=>ee(K))):Xa.SKIP);else{let K=tm(B,F,P,M,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let ee=y.slice(1).map(rm);k=j(K,ee)}else{for(let He=1;He<y.length;He++){let Jn=y[He],Uh=tm(Jn,F,P,M,S.allowFullScan);K=K.concat(Uh)}let ee=new Set;K=K.filter(He=>ee.has(He)?!1:(ee.add(He),!0)),k=j(K)}}(S.offset||S.limit!==void 0)&&(k=k.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),k.onDone=()=>{F.done()};let X=this[be];function j(K,ee){let He=ee?.length,Jn={transaction:F,lazy:He>0||$?.length<4,alwaysPrefetch:!0};return K.map(Uh=>new Promise(Mh=>Kt(Uh,X,Jn,null,!1,kG=>{let Ph=kG?.value;if(!Ph)return Mh(Xa.SKIP);for(let vh=0;vh<He;vh++)if(!ee[vh](Ph))return Mh(Xa.SKIP);Mh(Ph)})))}return a(j,"idsToRecords"),k}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||ft({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=S0(M,this[le]??null,function(F,$,B){try{this.send({id:F,timestamp:B,...$})}catch(k){console.error(k)}},S.startTime,this[fn]),P=this[le],y=S.previousCount;y>1e3&&(y=1e3);let L=S.startTime;if(this[fn]){if(L){if(y)throw new Mo.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:F,value:$}of u.getRange({start:[L,Number.MAX_SAFE_INTEGER]})){let[B,k,X]=F;if(F.length>3&&(X=F.slice(2)),k!==s)continue;let j=Ci($,i);(P==null||y0(P,X))&&N.send({id:X,timestamp:B,...j}),N.startTime=B}}else if(y){let F=[];for(let{key:$,value:B}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[k,X,j]=$;if($.length>3&&(j=$.slice(2)),X!==s)continue;if(P==null||y0(P,j)){let K=Ci(B,i);if(F.push({id:j,timestamp:k,...K}),--y<=0)break}}catch(k){vo.error("Error getting history entry",$,k)}for(let $=F.length;$>0;)N.send(F[--$]);F[0]&&(N.startTime=F[0].timestamp)}else if(!S.omitCurrent)for(let{key:F,value:$,version:B}of i.getRange({start:P??!1,end:P==null?void 0:[P,w0.MAXIMUM_KEY],versions:!0}))$&&N.send({id:F,timestamp:B,value:$})}else{y&&!L&&(L=0);let F=this[hr];if(L<F){let $=[],B=F;do{let k=[B,s,P],X=u.get(k);if(X){S.omitCurrent=!0;let j=Ci(X,i);$.push({id:P,timestamp:B,...j}),B=j.lastVersion}else break;y&&y--}while(B>L&&y!==0);for(let k=$.length;k>0;)N.send($[--k]);N.startTime=F}!S.omitCurrent&&this.doesExist()&&N.send({id:P,timestamp:this[hr],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[_e]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let P=this._txnForRequest(),y=this[le]||null,L,F;P.addWrite({store:i,key:y,lastVersion:this[hr],nodeName:this[be]?.nodeName,validate:()=>{this.validate(S)},commit:($,B)=>{if(this.validate(S),!F&&(F=!0,!N?.isNotification)){let j=M.Source;j?.publish&&(!j.publish.reliesOnPrototype||j.prototype.publish)&&(L=j.publish(y,S,this))}let k=B>0?i.get(y):this[_e];k===void 0&&!B&&(E||f)&&(E||hO(),cn(1));let X={type:"message",value:i.encoder.encode(S),[Do]:L};return!P.hasWrittenTime&&this[hr]>$&&($=X.newTxnTime=this[hr]+.001),i.put(y,k??null,$),X}})}_txnForRequest(){let S=this[be],N=S?.transaction;if(N){let P;return(P=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(P=new wl(i,S.user,u)),P}else return new jf(i,S.user,u)}validate(S){let N;for(let P=0,y=h.length;P<y;P++){let L=h[P];if(L.type){let F=S[L.name];if(F!=null)switch(L.type){case"Int":case"Float":(typeof F!="number"||L.type==="Int"&&F!==Math.floor(F))&&(N||(N=[])).push(`Property ${L.name} must be an ${L.type==="Int"?"integer":"number"}`);break;case"ID":typeof F=="string"||F?.length>0&&F.every?.($=>typeof $=="string")||(N||(N=[])).push(`Property ${L.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof F!="string"&&(N||(N=[])).push(`Property ${L.name} must be a string`)}}L.required&&S[L.name]==null&&(N||(N=[])).push(`Property ${L.name} is required`)}if(N)throw new Mo.ClientError(N.join(". "))}getUpdatedTime(){return this[hr]}wasLoadedFromSource(){return A?!!this[N0]:void 0}static async addAttributes(S){let N=h.slice(0);for(let P of S){if(!P.name)throw new Mo.ClientError("Attribute name is required");if(P.name.match(/[`/]/))throw new Mo.ClientError("Attribute names cannot include backticks or forward slashes");N.push(P)}return ft({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static async removeAttributes(S){let N=h.filter(P=>!S.includes(P.name));return ft({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:P}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=P||0);return i.getStats().entryCount-S}static updatedAttributes(){p_(this,this)}static async deleteHistory(S=0){let N;for(let{key:P,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(B=>setImmediate(B));let[L,F,$]=P;P.length>3&&($=P.slice(2)),F===s&&(N=i.remove($))}await N}static async*getHistory(S=0,N=1/0){for(let{key:P,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(k=>setImmediate(k));let[L,F,$]=P;if(P.length>3&&($=P.slice(2)),F!==s)continue;let B=Ci(y,i);B.id=$,B.timestamp=L,yield B}}static async getHistoryOfRecord(S){let N=[],P=i.getEntry(S);if(!P)return N;let y=P.version,L=0;do{await new Promise(B=>setImmediate(B));let F=[y,s,S],$=u.get(F);if($){let B=Ci($,i);B.timestamp=y,N.push(B),y=B.lastVersion}else break}while(L<1e3);return N.reverse()}static cleanup(){J?.remove()}}M.updatedAttributes();let se=M.prototype;return se[O0]=!0,d&&M.setTTLExpiration(d/1e3),I&&xG(),M;function ye(Z,S,N){let P;for(let y in r){let L=r[y],F=L.isIndexing,$=N?.[y],B=S?.[y];if($===B&&!F)continue;P=!0;let k=(0,Dl.getIndexedValues)(B);if(k){R0&&L.prefetch(k.map(X=>({key:X,value:Z})),b0);for(let X=0,j=k.length;X<j;X++)L.remove(k[X],Z)}if(k=(0,Dl.getIndexedValues)($),k){R0&&L.prefetch(k.map(X=>({key:X,value:Z})),b0);for(let X=0,j=k.length;X<j;X++)L.put(k[X],Z)}}return P}a(ye,"updateIndices");function Kt(Z,S,N,P,y,L){let F=a(()=>{let $=N.transaction;if($?.isDone)throw new Error("Invalid read transaction");let B;$&&!$.hasRunLoadRecord&&(B=!0,$.hasRunLoadRecord=!0);let k;try{k=i.getEntry(Z,N)}catch(ee){throw ee.message+=". The read txn is "+JSON.stringify($)+" first loadRecord: "+B,console.error(ee),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),ee}let X,j,K;if(k?(S&&k?.version>(S.lastModified||0)&&(S.lastModified=k.version),j=k.version,X=k.value,(j<0||!X||typeof X.__invalidated__=="number"||d&&j<Date.now()-d)&&(K=!0)):K=!0,A&&LS(K,"cache-hit",n),K&&!y&&(P&&(P[N0]=!0),A))return ws(Z,X,j,S).then(ee=>{if(ee?.value?.[_e])throw new Error("Can not assign a record with a record property");S&&ee?.version>(S.lastModified||0)&&(S.lastModified=ee.version),L(ee)},ee=>{L(null,ee)});if(k?.value?.[_e])throw new Error("Can not assign a record with a record property");L(k)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return F();i.prefetch([Z],F)}a(Kt,"loadRecord");function gr(){U=new Set,(0,Po.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of U)S()}a(Z,"onCommit")}a(gr,"setupCommitListeners");async function ws(Z,S=null,N,P){if(N<0){let B;return U||gr(),await new Promise(k=>{let X,j=a(()=>{if(B=i.getEntry(Z),!B||B.version>0){if(clearTimeout(X),U.delete(j),typeof B?.value?.__invalidated__=="number")return k(ws(Z,B.value,B.version,P));k(B)}},"listener");U.add(j),X=setTimeout(()=>{U.delete(j),k(ws(Z,B?.value,void 0,P))},1e4).unref()})}let y=S?.__invalidated__,L=-(N||1);i.put(Z,S,L,N);let F={requestContext:P,replacingRecord:S,replacingVersion:N},$=P?.responseHeaders;try{let B=performance.now(),k=await M.Source.get(Z,F),X=performance.now()-B;_o(X,"cache-resolution",n),$&&$.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let j=F.lastModified||N;(!j||d&&j<Date.now()-d)&&(j=(0,Dl.getNextMonotonicTime)());let ee=ye(Z,S,k)&&N||y>0;return k?(t&&(k[t]=Z),typeof k.toJSON=="function"&&(k=k.toJSON()),i.put(Z,k,j,L)):i.remove(Z,L),ee&&E&&u.put([j,s,Z],Jf(y,null,k?{type:"put",value:i.encoder.encode(k)}:{type:"delete"})),{version:j,value:k}}catch(B){throw i.put(Z,S,N,L),B}}a(ws,"getFromSource");function cn(Z){p||(p=i.get([A0,pA.threadId])||0),p+=Z,g||(g=setTimeout(()=>{g=null,i.rootStore.status==="open"&&i.put([A0,pA.threadId],p)},50))}a(cn,"recordDeletion");function hO(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),cn(-1)}}},M.getRecordCount()*100+Cie).unref())}a(hO,"enqueueDeletionCleanup");function mO(){J=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),cn(-1)})}a(mO,"addDeleteRemoval");function xG(){(0,Po.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=I.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${I} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let P=i.getEntry(N);P?.value?.[Z]<Date.now()&&M.evict(N,P.value,P.version),await new Promise(y=>setImmediate(y))}}catch(Z){vo.error("Error in evicting old records",Z)}},wie).unref()}a(xG,"runRecordExpirationEviction")}function mA(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 b0(){}function Lie(e){C0=e}function Zf(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Die.test(e)&&(e+="Z"),new Date(e)):r?e:(0,eh.autoCast)(e)}function y0(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}var gs,Xa,Dl,I0,pA,Ll,Pl,Mo,Ul,Ml,vo,w0,Po,eh,C0,yie,Iie,wie,R0,A0,hr,O0,hRe,N0,Cl,Cie,Die,lf=ge(()=>{gs=D(R()),Xa=require("lmdb"),Dl=D(Ht()),I0=require("lodash"),pA=require("worker_threads");Ls();f0();Ll=D(xe()),Pl=D(Y());g0();Mo=D(z()),Ul=D(Nn()),Ml=D(cs());de();R_();vo=D(C());T_();Qi();w0=require("ordered-binary"),Po=D(rt());Il();eh=D(G());Eo();yie=1e8,Iie=1e7,wie=6e4;Pl.initSync();R0=Pl.get(gs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),A0=Symbol.for("deletions"),hr=Symbol.for("version"),O0=Symbol.for("incremental-update"),hRe=Symbol("source-resource"),N0=Symbol("load-from-source"),Cl={isNotification:!0,allowInvalidated:!0},Cie=(0,eh.convertToMS)(Pl.get(gs.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(th,"makeTable");a(mA,"attributesAsObject");a(b0,"noop");a(Lie,"setServerUtilities");Die=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Zf,"coerceType");a(y0,"isDescendantId")});var Ie={};We(Ie,{database:()=>du,databases:()=>ke,dropDatabase:()=>mS,dropTableMeta:()=>Hie,getDatabases:()=>_s,getTables:()=>Uie,onUpdatedTable:()=>xR,readMetaDb:()=>vl,resetDatabases:()=>Mie,table:()=>ft,tables:()=>Or});function Uie(){return ih||_s(),Or||{}}function _s(){if(ih)return ke;ih=!0,rc=new Map;let e=(0,Bt.getHdbBasePath)()&&(0,Ge.join)((0,Bt.getHdbBasePath)(),mr.DATABASES_DIR_NAME),t=(0,Bt.get)(mr.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Bt.get)(mr.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Pr.existsSync)(e)?e:(0,Ge.join)((0,Bt.getHdbBasePath)(),mr.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Pr.existsSync)(e))for(let r of(0,Pr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Ge.basename)(r.name,".mdb");r.isFile()&&(0,Ge.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&vl((0,Ge.join)(e,r.name),null,s)}if((0,Pr.existsSync)((0,tc.getBaseSchemaPath)())){for(let r of(0,Pr.readdirSync)((0,tc.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Ge.join)((0,tc.getBaseSchemaPath)(),r.name),n=(0,Ge.join)((0,tc.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Pr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Ge.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Ge.join)(n,i.name);vl((0,Ge.join)(s,i.name),(0,Ge.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Pr.existsSync)(n))for(let o of(0,Pr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Ge.extname)(o.name).toLowerCase()===".mdb"&&vl((0,Ge.join)(n,o.name),(0,Ge.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Ge.join)(c.path,(0,Ge.basename)(o+".mdb"));(0,Pr.existsSync)(u)&&vl(u,o,r,null,!0)}}for(let r in ke){let s=rc.get(r);if(s){let n=ke[r];r.includes("delete")&&Fe.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Fe.trace(`delete table class ${i}`),delete n[i])}else if(delete ke[r],r==="data"){for(let n in Or)delete Or[n];delete Or[oh]}}return rc=null,ke}}function Mie(){ih=!1;for(let[,e]of Li)e.needsDeletion=!0;_s();for(let[e,t]of Li)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Li.delete(e));return ke}function vl(e,t,r=gA,s,n){let i=new SA.default(e,!1);e.includes("delete")&&Fe.trace(`reading meta data from ${e}`);try{let o=Li.get(e);o?o.needsDeletion=!1:(o=(0,rh.open)(i),Li.set(e,o));let c=new Bo.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Za.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Pr.existsSync)(s)&&(i.path=s,l=(0,rh.open)(i),l.isLegacy=!0):l=dA(o));let _=M0(r),d=_[oh],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Fe.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let A=E.get(p);A||E.set(p,A={attributes:[]}),(T==null||h.is_hash_attribute)&&(A.primary=h),T!=null&&A.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let M of p)if(M.is_hash_attribute||M.isPrimaryKey){T=M;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let A=_[f],g={},v=[],V,b,I=typeof T.audit=="boolean"?T.audit:(0,Bt.get)(mr.CONFIG_PARAMS.LOGGING_AUDITLOG),U=T.trackDeletes,J=T.expiration;if(A)g=A.indices,v=A.attributes,A.schemaVersion++;else{V=T.tableId,V?V>=(u.get(ec)||0)&&u.putSync(ec,V+1):(T.tableId=V=u.get(ec),V||(V=1),u.putSync(ec,V+1),u.putSync(T.key,T));let M=new Bo.default(!T.is_hash_attribute,T.is_hash_attribute);Fe.trace(`openDB ${T.key} from ${r}`),b=o.openDB(T.key,M),b.rootStore=o,b.tableId=V}for(let M of p){M.attribute=M.name;try{if(!M.is_hash_attribute&&(M.indexed||M.attribute&&!M.name)){if(!g[M.name]){let ye=new Bo.default(!M.is_hash_attribute,M.is_hash_attribute);Fe.trace(`openDB ${M.key} from ${r}`),g[M.name]=o.openDB(M.key,ye)}let se=v.find(ye=>ye.name===M.name);se?v.splice(v.indexOf(se),1,M):v.push(M)}}catch(se){Fe.error("Error trying to update attribute",M,v,g,se)}}if(!A){Fe.trace(`creating table class ${f}`,Object.keys(_)),A=P0(_,f,th({primaryStore:b,auditStore:l,audit:I,expirationMS:J&&J*1e3,trackDeletes:U,tableName:f,tableId:V,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:g,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),A.schemaVersion=1;for(let M of RA)M(A)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function M0(e){let t=ke[e];if(t||(e==="data"?t=ke[e]=Or:e==="system"?Object.defineProperty(ke,"system",{value:t=Object.create(null),configurable:!0}):t=ke[e]=Object.create(null)),rc&&!rc.has(e)){let r=new Set;t[oh]=r,rc.set(e,r)}return t}function P0(e,t,r){return e[t]=r,r}function du({database:e,table:t}){e||(e=gA),_s();let r=M0(e),s=(0,Ge.join)((0,Bt.getHdbBasePath)(),mr.DATABASES_DIR_NAME),n=t&&(0,Bt.get)(mr.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Bt.get)(mr.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Bt.get)(mr.CONFIG_PARAMS.STORAGE_PATH)||((0,Pr.existsSync)(s)?s:(0,Ge.join)((0,Bt.getHdbBasePath)(),mr.LEGACY_DATABASES_DIR_NAME));let i=(0,Ge.join)(s,(n?t:e)+".mdb"),o=Li.get(i);if(!o){let c=new SA.default(i,!1);o=(0,rh.open)(c),Li.set(i,o)}return o}async function mS(e){if(!ke[e])throw new Error("Schema does not exist");let t=ke[e];for(let r in t){let n=t[r].primaryStore.rootStore;Li.delete(n.path),n.status==="open"&&(await n.close(),await L0.remove(n.path))}if(e==="data"){for(let r in Or)delete Or[r];delete Or[oh]}delete ke[e]}function ft({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gA);let u=du({database:t,table:e}),l=ke[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Bo.default(!1);for(let b of s)b.attribute?(b.name=b.attribute,b.indexed=!0):b.attribute=b.name,b.expiresAt&&(b.indexed=!0);let T,A;if(_){if(Fe.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let b=u.auditStore;b||(b=dA(u)),E=s.find(M=>M.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Bt.get)(mr.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Fe.trace(`${e} table loading, opening primary store`);let I=new Bo.default(!1,!0),U=e+"/";Fe.trace(`openDB ${U} from ${t}`);let J=u.openDB(U,I);J.rootStore=u,Fe.trace(`openDB ${Za.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Za.INTERNAL_DBIS_NAME,p),J.tableId=h.get(ec),J.tableId||(J.tableId=1),h.putSync(ec,J.tableId+1),E.tableId=J.tableId,_=P0(l,e,th({primaryStore:J,auditStore:b,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:J.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,V(),h.put(U,E)}Fe.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Fe.trace(`openDB ${Za.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Za.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let g=[];for(let{key:b,value:I}of h.getRange({start:!0})){let[U,J]=b.toString().split("/");if(J===""&&(J=I.name),J){if(U!==e)continue}else J=U;if(!s.find(se=>se.name===J)?.indexed&&I.indexed&&!I.isPrimaryKey){V(),T=!0,h.remove(b);let se=_.indices[U];se&&g.push(se)}}Fe.trace(`${e} table loading, comparing atributes`);let v=[];try{for(let b of s||[]){let I=e+"/"+(b.name||"");Object.defineProperty(b,"key",{value:I,configurable:!0});let U=h.get(I);if(b.isPrimaryKey){if(U=U||h.get(I=e+"/"),n===!0&&!_.audit||(+r||void 0)!==(+U.expiration||void 0)){let M=Object.assign({},U);n&&(_.enableAuditing(),M.audit=!0),r&&(M.expiration=+r),T=!0,V(),h.put(I,M)}continue}U?.attribute&&!U.name&&(U.indexed=!0);let J=!U||U.type!==b.type||U.indexed!==b.indexed||JSON.stringify(U.attributes)!==JSON.stringify(b.attributes)||JSON.stringify(U.elements)!==JSON.stringify(b.elements);if(b.indexed){let M=new Bo.default(!0,!1);Fe.trace(`openDB ${I} from ${t}`);let se=u.openDB(I,M);(J||U.indexingPID&&U.indexingPID!==process.pid||U.restartNumber<Bl.workerData?.restartNumber)&&(T=!0,V(),U=h.get(I),(J||U.indexingPID&&U.indexingPID!==process.pid||U.restartNumber<Bl.workerData?.restartNumber)&&(T=!0,b.lastIndexedKey=U?.lastIndexedKey||!1,b.indexingPID=process.pid,se.isIndexing=!0,Object.defineProperty(b,"dbi",{value:se}),v.push(b)),h.put(I,b)),f[b.name]=se}else J&&(T=!0,V(),h.put(I,b))}}finally{A&&A()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Fe.trace(`${e} table loading, running index`),v.length>0||g.length>0?_.indexingOperation=Bie(_,v,g):T&&sh.signalSchemaChange(new nh.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let b of RA)b(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Fe.trace(`${e} table loaded`),_;function V(){A||u.transactionSync(()=>({then(b){A=b}}))}a(V,"startTxn")}async function Bie(e,t,r){try{let s=e.schemaVersion;await sh.signalSchemaChange(new nh.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 E=0;E<c;E++){let f=t[E],h=f.name,p=(0,D0.getIndexedValues)(_[h]);if(p)for(let T=0,A=p.length;T<A;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Fe.error(E)}),Bl.workerData&&Bl.workerData.restartNumber!==U0.restartNumber&&(i=!0),++o%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>Pie?await n:u>vie&&await new Promise(E=>setImmediate(E))}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 sh.signalSchemaChange(new nh.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Fe.error("Error in indexing",s)}}function Hie({table:e,database:t}){let r=du({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 xR(e){RA.push(e)}var Bt,Za,rh,Ge,Pr,tc,Bo,SA,mr,L0,TA,D0,sh,nh,Bl,Fe,U0,gA,oh,Or,ke,ec,RA,ih,Li,rc,Pie,vie,de=ge(()=>{Bt=D(Y()),Za=D(xe()),rh=require("lmdb"),Ge=require("path"),Pr=require("fs"),tc=D(Ue());lf();Bo=D(b_()),SA=D(I_()),mr=D(R()),L0=D(require("fs-extra")),TA=require("../index"),D0=D(Ht()),sh=D(Nn()),nh=D(cs()),Bl=require("worker_threads"),Fe=D(C()),U0=D(rt());Il();gA="data",oh=Symbol("defined-tables");(0,Bt.initSync)();Or=Object.create(null),ke=Object.create(null);(0,TA._assignPackageExport)("databases",ke);(0,TA._assignPackageExport)("tables",Or);ec=Symbol.for("next-table-id"),RA=[],Li=new Map;a(Uie,"getTables");a(_s,"getDatabases");a(Mie,"resetDatabases");a(vl,"readMetaDb");a(M0,"ensureDB");a(P0,"setTable");a(du,"database");a(mS,"dropDatabase");a(ft,"table");Pie=1e3,vie=10;a(Bie,"runIndexing");a(Hie,"dropTableMeta");a(xR,"onUpdatedTable")});var G=m((NRe,Q0)=>{"use strict";var Di=require("path"),F0=require("fs-extra"),pr=C(),v0=require("fs-extra"),ah=require("os"),qie=require("net"),Fie=require("recursive-iterator"),Ke=R(),Gie=Qh(),B0=require("papaparse"),ch=require("moment"),{inspect:xie}=require("util"),H0=require("is-number"),ORe=require("lodash"),kie=require("minimist"),$ie=require("https"),Vie=require("http"),{hdb_errors:uh}=z(),Yie=/^((\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)))$/,G0=require("util").promisify(setTimeout),Kie=100,Wie=5,Qie="",zie=4,q0={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Q0.exports={isEmpty:vr,isEmptyOrZeroLength:en,arrayHasEmptyValues:Xie,arrayHasEmptyOrZeroLengthValues:Zie,buildFolderPath:eoe,isBoolean:x0,errorizeMessage:Jie,stripFileExtension:roe,autoCast:soe,autoCastJSON:k0,autoCastJSONDeep:OA,removeDir:noe,compareVersions:ioe,isCompatibleDataVersion:ooe,escapeRawValue:aoe,unescapeValue:coe,stringifyProps:uoe,timeoutPromise:_oe,isClusterOperation:Eoe,getClusterUser:hoe,checkGlobalSchemaTable:foe,getHomeDir:V0,getPropsFilePath:loe,promisifyPapaParse:moe,removeBOM:Y0,createEventPromise:poe,checkProcessRunning:Soe,checkSchemaTableExist:Toe,checkSchemaExists:K0,checkTableExists:W0,getStartOfTomorrowInSeconds:goe,getLimitKey:Roe,isObject:toe,isNotEmptyAndHasValue:jie,autoCasterIsNumberCheck:$0,backtickASTSchemaItems:Aoe,isPortTaken:doe,createForkArgs:Ooe,autoCastBoolean:Noe,async_set_timeout:G0,getTableHashAttribute:boe,doesSchemaExist:yoe,doesTableExist:Ioe,stringifyObj:woe,ms_to_time:Coe,changeExtension:Loe,getEnvCliRootPath:NA,noBootFile:Doe,httpRequest:Uoe,transformReq:Moe,convertToMS:Poe,PACKAGE_ROOT:Ke.PACKAGE_ROOT};function Jie(e){return e instanceof Error?e:new Error(e)}a(Jie,"errorizeMessage");function vr(e){return e==null}a(vr,"isEmpty");function jie(e){return!vr(e)&&(e||e===0||e===""||x0(e))}a(jie,"isNotEmptyAndHasValue");function en(e){return vr(e)||e.length===0||e.size===0}a(en,"isEmptyOrZeroLength");function Xie(e){if(vr(e))return!0;for(let t=0;t<e.length;t++)if(vr(e[t]))return!0;return!1}a(Xie,"arrayHasEmptyValues");function Zie(e){if(en(e))return!0;for(let t=0;t<e.length;t++)if(en(e[t]))return!0;return!1}a(Zie,"arrayHasEmptyOrZeroLengthValues");function eoe(...e){try{return e.join(Di.sep)}catch{console.error(e)}}a(eoe,"buildFolderPath");function x0(e){return vr(e)?!1:e===!0||e===!1}a(x0,"isBoolean");function toe(e){return vr(e)?!1:typeof e=="object"}a(toe,"isObject");function roe(e){return en(e)?Qie:e.slice(0,-zie)}a(roe,"stripFileExtension");function soe(e){return vr(e)||e===""||typeof e!="string"?e:q0[e]!==void 0?q0[e]:$0(e)===!0?Number(e):Yie.test(e)?new Date(e):e}a(soe,"autoCast");function k0(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(k0,"autoCastJSON");function OA(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=OA(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=OA(r);s!==r&&(e[t]=s)}return e}else return k0(e)}a(OA,"autoCastJSONDeep");function $0(e){if(e.startsWith("0.")&&H0(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&H0(e))}a($0,"autoCasterIsNumberCheck");async function noe(e){if(en(e))throw new Error(`Directory path: ${e} does not exist`);try{await v0.emptyDir(e),await v0.remove(e)}catch(t){throw pr.error(`Error removing files in ${e} -- ${t}`),t}}a(noe,"removeDir");function ioe(e,t){if(en(e)){pr.info("Invalid current version sent as parameter.");return}if(en(t)){pr.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(ioe,"compareVersions");function ooe(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(ooe,"isCompatibleDataVersion");function aoe(e){if(vr(e))return e;let t=String(e);return t==="."?Ke.UNICODE_PERIOD:t===".."?Ke.UNICODE_PERIOD+Ke.UNICODE_PERIOD:t.replace(Ke.FORWARD_SLASH_REGEX,Ke.UNICODE_FORWARD_SLASH)}a(aoe,"escapeRawValue");function coe(e){if(vr(e))return e;let t=String(e);return t===Ke.UNICODE_PERIOD?".":t===Ke.UNICODE_PERIOD+Ke.UNICODE_PERIOD?"..":String(e).replace(Ke.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(coe,"unescapeValue");function uoe(e,t){if(vr(e))return pr.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+ah.EOL}!en(s)&&s[0]===";"?r+=" "+s+n+ah.EOL:en(s)||(r+=s+"="+n+ah.EOL)}catch{pr.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(uoe,"stringifyProps");function V0(){let e;try{e=ah.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(V0,"getHomeDir");function loe(){let e=Di.join(V0(),Ke.HDB_HOME_DIR_NAME,Ke.BOOT_PROPS_FILE_NAME);return F0.existsSync(e)||(e=Di.join(__dirname,"../","hdb_boot_properties.file")),e}a(loe,"getPropsFilePath");function _oe(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(_oe,"timeoutPromise");async function doe(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=qie.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(doe,"isPortTaken");function Eoe(e){try{return Ke.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){pr.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Eoe,"isClusterOperation");function foe(e,t){let r=(de(),re(Ie)).getDatabases();if(!r[e])return uh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return uh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(foe,"checkGlobalSchemaTable");function hoe(e,t){if(vr(t)){pr.warn("No CLUSTERING_USER defined, clustering disabled");return}if(vr(e)||en(e)){pr.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){pr.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){pr.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(hoe,"getClusterUser");function moe(){B0.parsePromise=function(e,t,r){return new Promise(function(s,n){B0.parse(e,{header:!0,transformHeader:Y0,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(moe,"promisifyPapaParse");function Y0(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(Y0,"removeBOM");function poe(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;pr.info(`Got cluster status event response: ${xie(n)}`);try{i.cancel()}catch{pr.error("Error trying to cancel timeout.")}s(n)})})}a(poe,"createEventPromise");async function Soe(e){let t=!0,r=0;do await G0(Kie*r++),(await Gie.findPs(e)).length>0&&(t=!1);while(t&&r<Wie);if(t)throw new Error(`process ${e} was not started`)}a(Soe,"checkProcessRunning");function Toe(e,t){let r=K0(e);if(r)return r;let s=W0(e,t);if(s)return s}a(Toe,"checkSchemaTableExist");function K0(e){let{getDatabases:t}=(de(),re(Ie));if(!t()[e])return uh.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(K0,"checkSchemaExists");function W0(e,t){let{getDatabases:r}=(de(),re(Ie));if(!r()[e][t])return uh.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(W0,"checkTableExists");function goe(){let e=ch().utc().add(1,Ke.MOMENT_DAYS_TAG).startOf(Ke.MOMENT_DAYS_TAG).unix(),t=ch().utc().unix();return e-t}a(goe,"getStartOfTomorrowInSeconds");function Roe(){return ch().utc().format("DD-MM-YYYY")}a(Roe,"getLimitKey");function Aoe(e){try{let t=new Fie(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){pr.error("Got an error back ticking items."),pr.error(t)}}a(Aoe,"backtickASTSchemaItems");function Ooe(e){return[e]}a(Ooe,"createForkArgs");function Noe(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Noe,"autoCastBoolean");function boe(e,t){let{getDatabases:r}=(de(),re(Ie)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(boe,"getTableHashAttribute");function yoe(e){let{getDatabases:t}=(de(),re(Ie));return t()[e]!==void 0}a(yoe,"doesSchemaExist");function Ioe(e,t){let{getDatabases:r}=(de(),re(Ie));return r()[e]?.[t]!==void 0}a(Ioe,"doesTableExist");function woe(e){try{return JSON.stringify(e)}catch{return e}}a(woe,"stringifyObj");function Coe(e){let t=ch.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(Coe,"ms_to_time");function Loe(e,t){let r=Di.basename(e,Di.extname(e));return Di.join(Di.dirname(e),r+t)}a(Loe,"changeExtension");function NA(){if(process.env[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=kie(process.argv);if(e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ke.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(NA,"getEnvCliRootPath");var AA;function Doe(){if(AA)return AA;let e=NA();NA()&&F0.pathExistsSync(Di.join(e,Ke.HDB_CONFIG_FILE))&&(AA=!0)}a(Doe,"noBootFile");function Uoe(e,t){let r;return e.protocol==="http:"?r=Vie:r=$ie,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(Uoe,"httpRequest");function Moe(e){if(!e.schema&&!e.database){e.schema=Ke.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Moe,"transformReq");function Poe(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(Poe,"convertToMS")});var Y=m((yRe,j0)=>{"use strict";var bA=require("fs-extra"),Rs=require("path"),z0=require("os"),voe=require("properties-reader"),Hl=C(),Ho=G(),ie=R(),lh=tt(),Boe="Error initializing environment manager",_h="BOOT_PROPS_FILE_PATH",J0=!1,Hoe={[ie.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Vn={};j0.exports={BOOT_PROPS_FILE_PATH:_h,getHdbBasePath:qoe,setHdbBasePath:Foe,get:Goe,initSync:koe,setProperty:me,initTestEnvironment:$oe};function qoe(){return Vn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qoe,"getHdbBasePath");function Foe(e){Vn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(Foe,"setHdbBasePath");function Goe(e){let t=lh.getConfigValue(e);return t===void 0?Vn[e]:t}a(Goe,"get");function me(e,t){Hoe[e]&&(Vn[e]=t),lh.updateConfigObject(e,t)}a(me,"setProperty");function xoe(){let e;try{e=Ho.getPropsFilePath(),bA.accessSync(e,bA.constants.F_OK|bA.constants.R_OK),J0=!0;let t=voe(e);return Vn[ie.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ie.HDB_SETTINGS_NAMES.INSTALL_USER),Vn[ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Vn[_h]=e,!0}catch{return Hl.trace(`Environment manager found no properties file at ${e}`),!1}}a(xoe,"doesPropFileExist");function koe(e=!1){try{(J0||xoe()||Ho.noBootFile())&&(lh.initConfig(e),Vn[ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=lh.getConfigValue(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Hl.error(Boe),Hl.error(t),console.error(t),process.exit(1)}}a(koe,"initSync");function $oe(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=Rs.join(__dirname,"../../","unitTests");Vn[_h]=Rs.join(u,"hdb_boot_properties.file"),me(ie.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Rs.join(u,"settings.test")),me(ie.HDB_SETTINGS_NAMES.INSTALL_USER,z0.userInfo()?z0.userInfo().username:void 0),me(ie.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Rs.join(u,"envDir","utility","keys","privateKey.pem")),me(ie.HDB_SETTINGS_NAMES.CERT_KEY,Rs.join(u,"envDir","utility","keys","certificate.pem")),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Rs.join(u,"envDir","utility","keys","privateKey.pem")),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Rs.join(u,"envDir","utility","keys","certificate.pem")),me(ie.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),me(ie.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Rs.join(u,"envDir","log")),me(ie.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),me(ie.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),me(ie.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),me(ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Rs.join(u,"envDir")),me(ie.CONFIG_PARAMS.STORAGE_PATH,Rs.join(u,"envDir")),me(ie.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Ho.isEmpty(n)?!0:n),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Ho.isEmpty(n)?!0:n),me(ie.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),me(ie.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Ho.isEmpty(i)?!1:i),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Ho.isEmpty(i)?!1:i),me(ie.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),me(ie.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),me(ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Rs.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),me(ie.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Ho.isEmpty(c)?!1:c),o&&(me("CORS_ACCESSLIST",o),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(me(ie.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(me(ie.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(me(ie.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),me(ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${_h}. Please check your boot props and settings files`;Hl.fatal(r),Hl.error(t)}}a($oe,"initTestEnvironment")});var IA=m((wRe,X0)=>{"use strict";var ql=Y();ql.initSync();var sc=require("fs-extra"),yA=require("path"),nc=R(),Voe=require("crypto"),Yoe=require("uuid").v4;X0.exports=Koe;function Koe(){if(ql.getHdbBasePath()!==void 0){let e=yA.join(ql.getHdbBasePath(),nc.LICENSE_KEY_DIR_NAME,nc.JWT_ENUM.JWT_PRIVATE_KEY_NAME),t=yA.join(ql.getHdbBasePath(),nc.LICENSE_KEY_DIR_NAME,nc.JWT_ENUM.JWT_PUBLIC_KEY_NAME),r=yA.join(ql.getHdbBasePath(),nc.LICENSE_KEY_DIR_NAME,nc.JWT_ENUM.JWT_PASSPHRASE_NAME);try{sc.accessSync(r),sc.accessSync(e),sc.accessSync(t)}catch(s){if(s.code==="ENOENT"){let n=Yoe(),i=Voe.generateKeyPairSync("rsa",{modulusLength:4096,publicKeyEncoding:{type:"spki",format:"pem"},privateKeyEncoding:{type:"pkcs8",format:"pem",cipher:"aes-256-cbc",passphrase:n}});sc.writeFileSync(r,n),sc.writeFileSync(e,i.privateKey),sc.writeFileSync(t,i.publicKey)}else throw s}}}a(Koe,"checkJWTTokenExist")});var eF=m((LRe,Z0)=>{"use strict";var wA=class{static{a(this,"HdbInfoInsertObject")}constructor(t,r,s){this.info_id=t,this.data_version_num=r,this.hdb_version_num=s}};Z0.exports={HdbInfoInsertObject:wA}});var sF=m((URe,rF)=>{"use strict";var tF=R(),CA=class{static{a(this,"UpgradeObject")}constructor(t,r){this[tF.UPGRADE_JSON_FIELD_NAMES_ENUM.DATA_VERSION]=t,this[tF.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION]=r}};rF.exports={UpgradeObject:CA}});var dh=m((PRe,iF)=>{"use strict";var rs=require("prompt"),ic=require("chalk"),nF=C(),As=require("os"),LA=$i(),DA=["yes","y"];async function Woe(e){let t=`${As.EOL}`+ic.bold.green("Your current HarperDB version requires that we complete an update process.")+`${As.EOL}If a backup of your data has not been created, we recommend you cancel this process and backup before proceeding.${As.EOL}${As.EOL}You can read more about the changes in this upgrade at https://harperdb.io/developers/release-notes/${As.EOL}`;rs.override=LA(["CONFIRM_UPGRADE"]),rs.start(),rs.message=t;let r={properties:{CONFIRM_UPGRADE:{description:ic.magenta(`${As.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 rs.get([r])}catch(n){return nF.error("There was an error when prompting user about an upgrade."),nF.error(n),!1}return DA.includes(s.CONFIRM_UPGRADE)}a(Woe,"forceUpdatePrompt");async function Qoe(e){let t=`${As.EOL}`+ic.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.${As.EOL}`);rs.override=LA(["CONFIRM_DOWNGRADE"]),rs.start(),rs.message=t;let r={properties:{CONFIRM_DOWNGRADE:{description:ic.magenta(`${As.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 rs.get([r]);return DA.includes(s.CONFIRM_DOWNGRADE)}a(Qoe,"forceDowngradePrompt");async function zoe(){let e=`${As.EOL}`+ic.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");rs.override=LA(["GENERATE_CERTS"]),rs.start(),rs.message=e;let t={properties:{GENERATE_CERTS:{description:ic.magenta(`${As.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 rs.get([t]);return DA.includes(r.GENERATE_CERTS)}a(zoe,"upgradeCertsPrompt");iF.exports={forceUpdatePrompt:Woe,forceDowngradePrompt:Qoe,upgradeCertsPrompt:zoe}});var MA=m((BRe,oF)=>{"use strict";var UA=class{static{a(this,"UpgradeDirective")}constructor(t){this.version=t,this.sync_functions=[],this.async_functions=[]}};oF.exports=UA});var cF=m((kRe,aF)=>{"use strict";var Joe=G(),joe=tt(),qRe=C(),FRe=require("path"),GRe=require("fs"),xRe=R();aF.exports={getOldPropsValue:Xoe};function Xoe(e,t,r=!1){let s=t.getRaw(e);return Joe.isNotEmptyAndHasValue(s)?s:r?joe.getDefaultConfig(e):""}a(Xoe,"getOldPropsValue")});var dF=m((VRe,_F)=>{"use strict";var Ui=require("path"),Mi=require("fs-extra"),Zoe=require("properties-reader"),eae=MA(),ct=C(),{getOldPropsValue:De}=cF(),{HDB_SETTINGS_NAMES:Q,CONFIG_PARAMS:qo}=R(),Fo=tt(),Eh=Y(),uF=G(),tn=R(),PA=new eae("3.1.0"),lF=[];function tae(){let e=Zoe(Eh.get(Q.SETTINGS_PATH_KEY)),t="Updating settings file for version 3.1.0";console.log(t),ct.info(t);let r=` ;Settings for the HarperDB process.
33
33
 
34
34
  ;The directory selected during install where the database files reside.
35
- ${Q.HDB_ROOT_KEY} = ${Le(Q.HDB_ROOT_KEY,e)}
35
+ ${Q.HDB_ROOT_KEY} = ${De(Q.HDB_ROOT_KEY,e)}
36
36
  ;The port the HarperDB REST interface will listen on.
37
- ${Q.SERVER_PORT_KEY} = ${Le(Q.SERVER_PORT_KEY,e)}
37
+ ${Q.SERVER_PORT_KEY} = ${De(Q.SERVER_PORT_KEY,e)}
38
38
  ;Set to true to enable HTTPS on the HarperDB REST endpoint. Requires a valid certificate and key.
39
- ${Q.HTTP_SECURE_ENABLED_KEY} = ${Le(Q.HTTP_SECURE_ENABLED_KEY,e)}
39
+ ${Q.HTTP_SECURE_ENABLED_KEY} = ${De(Q.HTTP_SECURE_ENABLED_KEY,e)}
40
40
  ;The path to the SSL certificate used when running with HTTPS enabled.
41
- ${Q.CERT_KEY} = ${Le(Q.CERT_KEY,e)}
41
+ ${Q.CERT_KEY} = ${De(Q.CERT_KEY,e)}
42
42
  ;The path to the SSL private key used when running with HTTPS enabled.
43
- ${Q.PRIVATE_KEY_KEY} = ${Le(Q.PRIVATE_KEY_KEY,e)}
43
+ ${Q.PRIVATE_KEY_KEY} = ${De(Q.PRIVATE_KEY_KEY,e)}
44
44
  ;Set to true to enable Cross Origin Resource Sharing, which allows requests across a domain.
45
- ${Q.CORS_ENABLED_KEY} = ${Le(Q.CORS_ENABLED_KEY,e)}
45
+ ${Q.CORS_ENABLED_KEY} = ${De(Q.CORS_ENABLED_KEY,e)}
46
46
  ;Allows for setting allowable domains with CORS. Comma separated list.
47
- ${Q.CORS_WHITELIST_KEY} = ${Le(Q.CORS_WHITELIST_KEY,e)}
47
+ ${Q.CORS_WHITELIST_KEY} = ${De(Q.CORS_WHITELIST_KEY,e)}
48
48
  ;Length of time in milliseconds after which a request will timeout. Defaults to 120,000 ms (2 minutes).
49
- ${Q.SERVER_TIMEOUT_KEY} = ${Le(Q.SERVER_TIMEOUT_KEY,e,!0)}
49
+ ${Q.SERVER_TIMEOUT_KEY} = ${De(Q.SERVER_TIMEOUT_KEY,e,!0)}
50
50
  ;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).
51
- ${Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${Le(Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
51
+ ${Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY} = ${De(Q.SERVER_KEEP_ALIVE_TIMEOUT_KEY,e,!0)}
52
52
  ;Limit the amount of time the parser will wait to receive the complete HTTP headers.. Defaults to 60,000 ms (1 minute).
53
- ${Q.SERVER_HEADERS_TIMEOUT_KEY} = ${Le(Q.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
53
+ ${Q.SERVER_HEADERS_TIMEOUT_KEY} = ${De(Q.SERVER_HEADERS_TIMEOUT_KEY,e,!0)}
54
54
  ;Define whether to log to file or not.
55
- ${Q.LOG_TO_FILE} = ${Bo.getDefaultConfig(vo.LOGGING_FILE)}
55
+ ${Q.LOG_TO_FILE} = ${Fo.getDefaultConfig(qo.LOGGING_FILE)}
56
56
  ;Define whether to log to stdout/stderr or not. NOTE HarperDB must run in foreground in order to receive the std stream from HarperDB.
57
- ${Q.LOG_TO_STDSTREAMS} = ${Bo.getDefaultConfig(vo.LOGGING_STDSTREAMS)}
57
+ ${Q.LOG_TO_STDSTREAMS} = ${Fo.getDefaultConfig(qo.LOGGING_STDSTREAMS)}
58
58
  ;Set to control amount of logging generated. Accepted levels are trace, debug, warn, error, fatal.
59
- ${Q.LOG_LEVEL_KEY} = ${Le(Q.LOG_LEVEL_KEY,e)}
59
+ ${Q.LOG_LEVEL_KEY} = ${De(Q.LOG_LEVEL_KEY,e)}
60
60
  ;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'
61
- ${Q.LOG_PATH_KEY} = ${Le(Q.LOG_PATH_KEY,e)}
61
+ ${Q.LOG_PATH_KEY} = ${De(Q.LOG_PATH_KEY,e)}
62
62
  ;Set to true to enable daily log file rotations - each log file name will be prepended with YYYY-MM-DD.
63
- ${Q.LOG_DAILY_ROTATE_KEY} = ${Le(Q.LOG_DAILY_ROTATE_KEY,e)}
63
+ ${Q.LOG_DAILY_ROTATE_KEY} = ${De(Q.LOG_DAILY_ROTATE_KEY,e)}
64
64
  ;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
65
65
  ;daily log files which may consume a large amount of storage depending on your log settings.
66
- ${Q.LOG_MAX_DAILY_FILES_KEY} = ${Le(Q.LOG_MAX_DAILY_FILES_KEY,e)}
66
+ ${Q.LOG_MAX_DAILY_FILES_KEY} = ${De(Q.LOG_MAX_DAILY_FILES_KEY,e)}
67
67
  ;The environment used by NodeJS. Setting to production will be the most performant, settings to development will generate more logging.
68
- ${Q.PROPS_ENV_KEY} = ${Le(Q.PROPS_ENV_KEY,e)}
68
+ ${Q.PROPS_ENV_KEY} = ${De(Q.PROPS_ENV_KEY,e)}
69
69
  ;This allows self signed certificates to be used in clustering. This is a security risk
70
70
  ;as clustering will not validate the cert, so should only be used internally.
71
71
  ;The HDB install creates a self signed certificate, if you use that cert this must be set to true.
72
- ${Q.ALLOW_SELF_SIGNED_SSL_CERTS} = ${Le(Q.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
72
+ ${Q.ALLOW_SELF_SIGNED_SSL_CERTS} = ${De(Q.ALLOW_SELF_SIGNED_SSL_CERTS,e,!0)}
73
73
  ;Set the max number of processes HarperDB will start. This can also be limited by number of cores and licenses.
74
- ${Q.MAX_HDB_PROCESSES} = ${Le(Q.MAX_HDB_PROCESSES,e)}
74
+ ${Q.MAX_HDB_PROCESSES} = ${De(Q.MAX_HDB_PROCESSES,e)}
75
75
  ;Set to true to enable clustering. Requires a valid enterprise license.
76
- ${Q.CLUSTERING_ENABLED_KEY} = ${Le(Q.CLUSTERING_ENABLED_KEY,e,!0)}
76
+ ${Q.CLUSTERING_ENABLED_KEY} = ${De(Q.CLUSTERING_ENABLED_KEY,e,!0)}
77
77
  ;The port that will be used for HarperDB clustering.
78
- ${Q.CLUSTERING_PORT_KEY} = ${Le(Q.CLUSTERING_PORT_KEY,e)}
78
+ ${Q.CLUSTERING_PORT_KEY} = ${De(Q.CLUSTERING_PORT_KEY,e)}
79
79
  ;The name of this node in your HarperDB cluster topology. This must be a value unique from the rest of your cluster node names.
80
- ${Q.CLUSTERING_NODE_NAME_KEY} = ${Le(Q.CLUSTERING_NODE_NAME_KEY,e)}
80
+ ${Q.CLUSTERING_NODE_NAME_KEY} = ${De(Q.CLUSTERING_NODE_NAME_KEY,e)}
81
81
  ;The user used to connect to other instances of HarperDB, this user must have a role of cluster_user.
82
- ${Q.CLUSTERING_USER_KEY} = ${Le(Q.CLUSTERING_USER_KEY,e)}
82
+ ${Q.CLUSTERING_USER_KEY} = ${De(Q.CLUSTERING_USER_KEY,e)}
83
83
  ;Defines if this instance does not record transactions. Note, if Clustering is enabled and Transaction Log is disabled your nodes will not catch up.
84
- ${Q.DISABLE_TRANSACTION_LOG_KEY} = ${Le(Q.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
84
+ ${Q.DISABLE_TRANSACTION_LOG_KEY} = ${De(Q.DISABLE_TRANSACTION_LOG_KEY,e,!0)}
85
85
  ;Defines the length of time an operation token will be valid until it expires. Example values: https://github.com/vercel/ms
86
- ${Q.OPERATION_TOKEN_TIMEOUT_KEY} = ${Le(Q.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
86
+ ${Q.OPERATION_TOKEN_TIMEOUT_KEY} = ${De(Q.OPERATION_TOKEN_TIMEOUT_KEY,e,!0)}
87
87
  ;Defines the length of time a refresh token will be valid until it expires. Example values: https://github.com/vercel/ms
88
- ${Q.REFRESH_TOKEN_TIMEOUT_KEY} = ${Le(Q.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
88
+ ${Q.REFRESH_TOKEN_TIMEOUT_KEY} = ${De(Q.REFRESH_TOKEN_TIMEOUT_KEY,e,!0)}
89
89
  ;The port the IPC server will run on.
90
- ${Q.IPC_SERVER_PORT} = ${Bo.getDefaultConfig(vo.IPC_NETWORK_PORT)}
90
+ ${Q.IPC_SERVER_PORT} = ${Fo.getDefaultConfig(qo.IPC_NETWORK_PORT)}
91
91
  ;Run HDB in the foreground.
92
- ${Q.RUN_IN_FOREGROUND} = ${Bo.getDefaultConfig(vo.OPERATIONSAPI_FOREGROUND)}
92
+ ${Q.RUN_IN_FOREGROUND} = ${Fo.getDefaultConfig(qo.OPERATIONSAPI_FOREGROUND)}
93
93
  ;Set to true to enable custom API endpoints. Requires a valid enterprise license.
94
- ${Q.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Bo.getDefaultConfig(vo.CUSTOMFUNCTIONS_ENABLED)}
94
+ ${Q.CUSTOM_FUNCTIONS_ENABLED_KEY} = ${Fo.getDefaultConfig(qo.CUSTOMFUNCTIONS_ENABLED)}
95
95
  ;The port used to access the custom functions server.
96
- ${Q.CUSTOM_FUNCTIONS_PORT_KEY} = ${Bo.getDefaultConfig(vo.CUSTOMFUNCTIONS_NETWORK_PORT)}
96
+ ${Q.CUSTOM_FUNCTIONS_PORT_KEY} = ${Fo.getDefaultConfig(qo.CUSTOMFUNCTIONS_NETWORK_PORT)}
97
97
  ;The path to the folder containing HarperDB custom function files.
98
- ${Q.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Ii.join(Le(Q.HDB_ROOT_KEY,e),"custom_functions")}
98
+ ${Q.CUSTOM_FUNCTIONS_DIRECTORY_KEY} = ${Ui.join(De(Q.HDB_ROOT_KEY,e),"custom_functions")}
99
99
  ;Set the max number of processes HarperDB will start for the Custom Functions server
100
- ${Q.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Bo.getDefaultConfig(vo.HTTP_THREADS)}
101
- `,s=Eh.get("settings_path"),n=Ii.dirname(s),i=Ii.join(n,"3_1_0_upgrade_settings.bak");try{at.info(`Backing up old settings file to: ${i}`),wi.copySync(s,i)}catch(c){throw at.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{at.info("New settings file values for 3.1.0 upgrade:",r),at.info(`Creating new/upgraded settings file at '${s}'`),wi.writeFileSync(s,r),at.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."),at.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),at.error(c),wi.copySync(i,s),c}Eh.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),at.info(o),o}a(eae,"updateSettingsFile_3_1_0");function tae(){let e=Ii.join(aF.getHomeDir(),Xs.HDB_HOME_DIR_NAME,Xs.LICENSE_KEY_DIR_NAME,Xs.LICENSE_FILE_NAME),t=Ii.join(aF.getHomeDir(),Xs.HDB_HOME_DIR_NAME,Xs.LICENSE_KEY_DIR_NAME,Xs.REG_KEY_FILE_NAME),r=Ii.join(Eh.getHdbBasePath(),Xs.LICENSE_KEY_DIR_NAME,Xs.LICENSE_FILE_NAME),s=Ii.join(r,Xs.LICENSE_FILE_NAME),n=Ii.join(r,Xs.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),at.info(i);let o="Creating .license directory";console.log(o),at.info(o),wi.mkdirpSync(r);try{wi.accessSync(e);try{let c="Moving licence file";console.log(c),at.info(c),wi.moveSync(e,s);let u="License file successfully moved.";console.log(u),at.info(u)}catch{let u="moving license file failed";console.error(u),at.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),at.warn(u)}try{wi.accessSync(t);try{let c="Moving registration file";console.log(c),at.info(c),wi.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),at.info(u)}catch{let u="moving registration file failed";console.error(u),at.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),at.warn(u)}}a(tae,"moveLicenseFiles");PA.sync_functions.push(eae);PA.sync_functions.push(tae);cF.push(PA);uF.exports=cF});var hF=m((YRe,fF)=>{"use strict";var Pr=we(),{insertRecords:rae}=Ki(),sae=Ht(),Ci=Ge(),nae=F(),xn=C(),iae=F(),Zs=require("fs-extra"),kn=require("path"),oae=require("cli-progress"),ql=require("assert"),aae=require("pino"),cae=Y();fF.exports=uae;var fh,_F,hh,vA,$t,Fl=!1;async function uae(e=!0){return fh=cae.getHdbBasePath(),_F=kn.join(fh,"schema"),hh=kn.join(fh,"4_0_0_upgrade_tmp"),vA=kn.join(fh,"transactions"),console.info("Reindexing upgrade started for schemas"),xn.notify("Reindexing upgrade started for schemas"),await dF(_F,!1,e),await Zs.pathExists(vA)&&(console.info(`
100
+ ${Q.MAX_CUSTOM_FUNCTION_PROCESSES} = ${Fo.getDefaultConfig(qo.HTTP_THREADS)}
101
+ `,s=Eh.get("settings_path"),n=Ui.dirname(s),i=Ui.join(n,"3_1_0_upgrade_settings.bak");try{ct.info(`Backing up old settings file to: ${i}`),Mi.copySync(s,i)}catch(c){throw ct.error(c),console.error("There was a problem writing the backup for the old settings file. Please check the log for details."),c}try{ct.info("New settings file values for 3.1.0 upgrade:",r),ct.info(`Creating new/upgraded settings file at '${s}'`),Mi.writeFileSync(s,r),ct.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."),ct.error("Attempting to reset the settings file to its original state. Use the '.bak' file if this fails."),ct.error(c),Mi.copySync(i,s),c}Eh.initSync();let o="New settings file for 3.1.0 upgrade successfully created.";return console.log(o),ct.info(o),o}a(tae,"updateSettingsFile_3_1_0");function rae(){let e=Ui.join(uF.getHomeDir(),tn.HDB_HOME_DIR_NAME,tn.LICENSE_KEY_DIR_NAME,tn.LICENSE_FILE_NAME),t=Ui.join(uF.getHomeDir(),tn.HDB_HOME_DIR_NAME,tn.LICENSE_KEY_DIR_NAME,tn.REG_KEY_FILE_NAME),r=Ui.join(Eh.getHdbBasePath(),tn.LICENSE_KEY_DIR_NAME,tn.LICENSE_FILE_NAME),s=Ui.join(r,tn.LICENSE_FILE_NAME),n=Ui.join(r,tn.REG_KEY_FILE_NAME),i="Move license files for version 3.1.0";console.log(i),ct.info(i);let o="Creating .license directory";console.log(o),ct.info(o),Mi.mkdirpSync(r);try{Mi.accessSync(e);try{let c="Moving licence file";console.log(c),ct.info(c),Mi.moveSync(e,s);let u="License file successfully moved.";console.log(u),ct.info(u)}catch{let u="moving license file failed";console.error(u),ct.error(u)}}catch{let u=`license file '${e}' does not exist.`;console.warn(u),ct.warn(u)}try{Mi.accessSync(t);try{let c="Moving registration file";console.log(c),ct.info(c),Mi.moveSync(t,n);let u="Registration file successfully moved.";console.log(u),ct.info(u)}catch{let u="moving registration file failed";console.error(u),ct.error(u)}}catch{let u=`registration file '${t}' does not exist.`;console.warn(u),ct.warn(u)}}a(rae,"moveLicenseFiles");PA.sync_functions.push(tae);PA.sync_functions.push(rae);lF.push(PA);_F.exports=lF});var pF=m((KRe,mF)=>{"use strict";var Br=Ce(),{insertRecords:sae}=Ji(),nae=Ht(),Pi=xe(),iae=G(),Yn=C(),oae=G(),rn=require("fs-extra"),Kn=require("path"),aae=require("cli-progress"),Fl=require("assert"),cae=require("pino"),uae=Y();mF.exports=lae;var fh,EF,hh,vA,$t,Gl=!1;async function lae(e=!0){return fh=uae.getHdbBasePath(),EF=Kn.join(fh,"schema"),hh=Kn.join(fh,"4_0_0_upgrade_tmp"),vA=Kn.join(fh,"transactions"),console.info("Reindexing upgrade started for schemas"),Yn.notify("Reindexing upgrade started for schemas"),await fF(EF,!1,e),await rn.pathExists(vA)&&(console.info(`
102
102
 
103
- Reindexing upgrade started for transaction logs`),xn.notify("Reindexing upgrade started for transaction logs"),await dF(vA,!0,e)),xn.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Fl?", but errors occurred":"")}a(uae,"reindexUpgrade");async function dF(e,t,r){let s=await Zs.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=kn.join(e,o.toString());if(o===".DS_Store")continue;let u=await Zs.readdir(c),l=u.length;for(let _=0;_<l;_++){let d=u[_];if(d!==".DS_Store"&&Zs.statSync(kn.join(c,d)).isDirectory())try{await lae(o,d,t),$t.info(`Reindexing started for ${o}.${d}`),xn.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await dae(o,d,c,t,r),$t.info(`Reindexing completed for ${o}.${d}`),xn.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Fl=!0,E.schema_path=c,E.table_name=d,xn.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),xn.error(E),$t.error(E),console.error(E)}}}if(!Fl)try{await Zs.rm(hh,{recursive:!0})}catch{}}a(dF,"processTables");async function lae(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=kn.join(hh,n);await Zs.ensureDir(hh),await Zs.writeFile(i,""),$t=aae({level:"debug",formatters:{bindings(){}}},i)}a(lae,"initPinoLogger");var _ae=20;async function dae(e,t,r,s,n){let i;try{i=await Pr.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){xn.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`),$t.error(g);return}throw g}let o=hae(i.dbis),c=Pr.openDBI(i,o),u=Object.keys(i.dbis),l=Pr.statDBI(i,o);$t.info(`Old environment stats: ${JSON.stringify(l)}`);let _=new oae.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});_.start(l.entryCount,0,{});let d=await Pr.createEnvironment(r,t,!1);Pr.createDBI(d,o,!1,!0);let E=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),E.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())),E.length>_ae&&await f();await f()}catch(g){throw Fl=!0,$t.error(g),g}async function f(){let g,x=E.map(({value:I})=>I);s?g=await Promise.all(x.map(I=>Eae(d,I))):g=await rae(d,o,u.filter(I=>I!=="__blob__"),x,!1);for(let I=0,N=E.length;I<N;I++){let{key:M,value:J}=E[I];$t.info(`Record hash value: ${M} hash: ${o}`);let B;s?B=g[I]:B=g.written_hashes.indexOf(M)>-1,ql(B,!0),fae(d,o,J[o],s),$t.info(`Insert success, written hashes: ${g.written_hashes}`),_.increment()}E=[],_.value/_.total*100%10===0&&xn.notify(`${e}.${t} ${_.value}/${_.total} records inserted`),$t.info(`${_.value}/${_.total} records inserted`)}a(f,"finishOutstanding"),_.stop();let h=Pr.statDBI(i,o),p=Pr.statDBI(d,o);if($t.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),ql.deepStrictEqual(h.entryCount,p.entryCount),await Pr.closeEnvironment(i),await Pr.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=kn.join(r,t),x=kn.join(g,"data.mdb"),V=kn.join(g,"lock.mdb");await Zs.unlink(x),await Zs.unlink(V),await Zs.rmdir(g),$t.info(`Deleted old environment files from schema folder: ${x}, ${V}`)}let T=await Pr.openEnvironment(r,t),A=Pr.statDBI(T,o);$t.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(A)}`),ql.deepStrictEqual(A.entryCount,p.entryCount),await Pr.closeEnvironment(T),delete global.lmdb_map[`${e}.${t}`]}a(dae,"processTable");async function Eae(e,t){Pr.initializeDBIs(e,Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ci.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),iae.isEmpty(t.user_name)||e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Ci.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(Eae,"insertTransaction");function fae(e,t,r,s){let i=e.dbis[t].get(r);ql.deepStrictEqual(typeof i,"object");let o;if(s){let c={[Ci.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Ci.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&&!nae.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let l=0,_=u.length;l<_;l++){let d=u[l];EF(e,c,d,r)}else EF(e,c,u,r)}a(fae,"validateIndices");function EF(e,t,r,s){try{let n=!1,i=sae.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||$t.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),ql.deepStrictEqual(n,!0)}catch(n){Fl=!0,$t.error(n),console.error(n)}}a(EF,"validateIndex");function hae(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(hae,"getHashDBI")});var FA=m((WRe,pF)=>{"use strict";var mae=require("mkcert"),mh=require("path"),BA=require("fs-extra"),HA=C(),pae=Y(),qA=R(),nc=_p(),Sae=Fi(),Tae=et();pF.exports={generateKeys:gae,updateConfigCert:mF};async function gae(){let e=pae.getHdbBasePath(),t=mh.join(e,qA.LICENSE_KEY_DIR_NAME),r=await mae.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:nc.CERTIFICATE_VALUES.key,caCert:nc.CERTIFICATE_VALUES.cert}),s=mh.join(t,nc.CERTIFICATE_PEM_NAME),n=mh.join(t,nc.PRIVATEKEY_PEM_NAME),i=mh.join(t,nc.CA_PEM_NAME);try{await BA.writeFile(s,r.cert)}catch(o){throw HA.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await BA.writeFile(n,r.key)}catch(o){throw HA.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await BA.writeFile(i,nc.CERTIFICATE_VALUES.cert)}catch(o){throw HA.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}mF(s,n,i)}a(gae,"generateKeys");function mF(e,t,r){let s=Sae(Object.keys(qA.CONFIG_PARAM_MAP),!0),n=qA.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.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};Tae.updateConfigValue(void 0,void 0,i,!1,!0)}a(mF,"updateConfigCert")});var AF=m((JRe,RF)=>{"use strict";var ph=require("path"),Li=require("fs-extra"),Rae=MA(),Ho=C(),SF=et(),GA=Y(),Rs=R(),Sh=F(),Aae=require("properties-reader"),Oae=as(),Nae=xd(),bae=jt(),zRe=require("util"),yae=bae.searchByValue,Iae=Xt(),wae=cE(),Cae=Me(),Lae=hF(),TF=FA(),Dae=dh(),kl=new Rae("4.0.0"),gF=[],Gl,xl;async function Uae(){try{if(await Dae.upgradeCertsPrompt()){if(console.log("Generating new certificates."),Gl){let t=Sh.changeExtension(Gl,".bak");await Li.move(Gl,t)}if(xl){let t=Sh.changeExtension(xl,".bak");await Li.move(xl,t)}await TF.generateKeys()}else console.log("Using existing certificates."),TF.updateConfigCert(Gl,xl,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Uae,"generateNewKeys");async function Mae(){console.log("Updating HarperDB nodes."),Ho.info("Updating HarperDB nodes.");let e=[];try{let t=new Oae(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await yae(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Cae.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 E=c.subscriptions[_],f=E.channel.split(":");l.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}s.push({name:c.name,subscriptions:l,system_info:{hdb_version:Rs.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Sh.isEmptyOrZeroLength(s))return;let n=new Nae(Rs.SYSTEM_SCHEMA_NAME,Rs.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await Iae.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{wae.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(Mae,"updateNodes");async function Pae(){let e=GA.get(Rs.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ph.join("config","settings.js"))){Ho.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),Ho.info(t);let r=ph.dirname(e),s=GA.get(Rs.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=ph.join(s,"backup","4_0_0_upgrade_settings.bak"),i=ph.join(s,Rs.HDB_CONFIG_FILE);try{Ho.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),Li.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{Ho.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Ho.info("Updating env variables with new settings values");let d=SF.initOldConfig(e);Gl=d[Rs.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],xl=d[Rs.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],SF.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=Sh.getPropsFilePath();Li.accessSync(o,Li.constants.F_OK|Li.constants.R_OK);let u=Aae(o).get(Rs.HDB_SETTINGS_NAMES.INSTALL_USER),l=`settings_path = ${i}
104
- install_user = ${u}`;try{Li.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{GA.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{Li.removeSync(r),console.log(_),Ho.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(Pae,"updateSettingsFile_4_0_0");kl.async_functions.push(Pae);kl.async_functions.push(Uae);kl.async_functions.push(Lae);kl.async_functions.push(Mae);gF.push(kl);RF.exports=gF});var xA=m((XRe,yF)=>{"use strict";var qo=F(),vae=R(),OF=C(),{DATA_VERSION:Bae,UPGRADE_VERSION:Hae}=vae.UPGRADE_JSON_FIELD_NAMES_ENUM,NF=lF(),Th=AF(),Fo=new Map;NF&&NF.forEach(e=>{Fo.set(e.version,e)});Th&&Th.forEach(e=>{Fo.set(e.version,e)});Th&&Th.forEach(e=>{Fo.set(e.version,e)});function qae(){return[...Fo.keys()].sort(qo.compareVersions)}a(qae,"getSortedVersions");function bF(e){let t=e[Bae],r=e[Hae];return qo.isEmptyOrZeroLength(t)||qo.isEmptyOrZeroLength(r)?(OF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),OF.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."),[]):[...Fo.keys()].sort(qo.compareVersions).filter(function(s){return qo.compareVersions(s,t)>0&&qo.compareVersions(s,r)<=0})}a(bF,"getVersionsForUpgrade");function Fae(e){return bF(e).length>0}a(Fae,"hasUpgradesRequired");function Gae(e){return qo.isEmptyOrZeroLength(e)?null:Fo.has(e)?Fo.get(e):null}a(Gae,"getDirectiveByVersion");yF.exports={getSortedVersions:qae,getDirectiveByVersion:Gae,getVersionsForUpgrade:bF,hasUpgradesRequired:Fae}});var gh=m((eAe,DF)=>{"use strict";var xae=require("util"),kA=require("chalk"),kae=require("os"),wF=Xt(),$ae=jt(),vr=R(),CF=X0(),VA=ip(),{UpgradeObject:IF}=tF(),{forceDowngradePrompt:Vae}=dh(),Yae=ki(),$l=C(),ic=F(),YA=$r(),Kae=(_e(),re(be)),Wae=xA(),Qae=xae.promisify(YA.setSchemaDataToGlobal),zae=$ae.searchByValue,Jae="info_id",jae="2.9.9",Xae="3.0.0";async function Zae(e){let t=new CF.HdbInfoInsertObject(1,e,e),r=new VA.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return YA.setSchemaDataToGlobal(),wF.insert(r)}a(Zae,"insertHdbInstallInfo");async function $A(e){let t,r=await LF(),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 CF.HdbInfoInsertObject(i,e,e);let o=new VA.InsertObject(vr.OPERATIONS_ENUM.INSERT,vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await Qae(),wF.insert(o)}a($A,"insertHdbUpgradeInfo");async function LF(){let e=new VA.NoSQLSeachObject(vr.SYSTEM_SCHEMA_NAME,vr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Jae,vr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await zae(e))}catch(r){$l.info(r)}return t}a(LF,"getAllHdbInfoRecords");async function ece(){let e=await LF();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(ece,"getLatestHdbInfoRecord");async function tce(){$l.info("Checking if HDB software has been updated");try{let e=Yae.version(),t=await ece(),r;if(ic.isEmpty(t))r=jae;else if(r=t.data_version_num,ic.compareVersions(r.toString(),e.toString())>0){if(!ic.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kA.yellow(`This instance's data was last run on version ${r}`)),console.error(kA.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.${kae.EOL}${vr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");ic.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kA.yellow(`This instance's data was last run on version ${r}`)),await Vae(new IF(r,e))?await $A(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(YA.setSchemaDataToGlobal(),rce(r),e.toString()===r.toString())return;let s=new IF(r,e);if(Wae.hasUpgradesRequired(s))return s;ic.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await $A(s.upgrade_version),$l.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw $l.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),$l.fatal(e),e}}a(tce,"getVersionUpdateInfo");function rce(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 ${vr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Kae.databases.system))throw console.log(t),new Error(t);if(!ic.isEmpty(e)&&e<Xae)throw console.log(t),new Error(t)}a(rce,"checkIfInstallIsSupported");DF.exports={insertHdbInstallInfo:Zae,insertHdbUpgradeInfo:$A,getVersionUpdateInfo:tce}});var BF=m((rAe,vF)=>{"use strict";var KA=require("joi"),{boolean:sce,string:UF,number:nce}=KA.types(),MF=require("fs-extra"),Vl=R(),PF=require("path"),ice=He();vF.exports=oce;function oce(e){let t=UF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=KA.object({[Vl.INSTALL_PROMPTS.ROOTPATH]:KA.custom(ace),[Vl.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:nce.min(0),[Vl.INSTALL_PROMPTS.TC_AGREEMENT]:UF.valid("yes","YES","Yes"),[Vl.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Vl.INSTALL_PROMPTS.CLUSTERING_ENABLED]:sce});return ice.validateBySchema(e,r)}a(oce,"installValidator");function ace(e,t){if(MF.existsSync(PF.join(e,"system/hdb_user/data.mdb"))||MF.existsSync(PF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(ace,"validateRootAvailable")});var qF=m((nAe,HF)=>{"use strict";var{mkdirpSync:cce}=require("fs-extra"),en=require("path"),oc=R(),QA=C(),uce=Vr(),WA=dn(),lce=De();HF.exports=_ce;async function _ce(e){QA.trace("Mounting HarperDB"),As(e),As(en.join(e,"backup")),As(en.join(e,"trash")),As(en.join(e,"keys")),As(en.join(e,"keys",oc.LICENSE_FILE_NAME)),As(en.join(e,"log")),As(en.join(e,"doc")),As(en.join(e,"database")),As(en.join(e,oc.TRANSACTIONS_DIR_NAME)),As(en.join(e,"clustering","leaf")),As(en.join(e,"components")),await dce()}a(_ce,"mountHdb");async function dce(){let e=au(),t=Object.keys(WA);for(let r=0;r<t.length;r++){let s=t[r],n=WA[s].hash_attribute;try{lce.initSystemSchemaPaths(oc.SYSTEM_SCHEMA_NAME,s);let i=new e(oc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=WA[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await uce.createTable(s,i)}catch(i){throw QA.error(`issue creating environment for ${oc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(dce,"createLMDBTables");function As(e){cce(e,{mode:oc.HDB_FILE_PERMISSIONS}),QA.info(`Directory ${e} created`)}a(As,"makeDirectory")});var Rh=m((aAe,zF)=>{"use strict";var jA=require("os"),kF=require("inquirer"),$n=require("fs-extra"),Ece=require("properties-reader"),Go=require("chalk"),Pi=require("path"),fce=require("human-readable-ids").hri,hce=require("ora"),ct=C(),vi=Y(),cc=F(),zA=Fi(),$F=gh(),VF=ki(),te=R(),mce=BF(),pce=qF(),YF=et(),Sce=er(),Tce=Hd(),gce=IA(),Rce=$r(),Ace=require("util").promisify,Oce=Ace(Rce.setSchemaDataToGlobal),Nce=FA(),ac=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Vt=a(e=>Go.magenta.bold(e),"HDB_PROMPT_MSG"),bce="https://harperdb.io/legal/end-user-license-agreement",Bi=jA.EOL,Di="",yce="yes",FF="Starting HarperDB install...",GF="HarperDB installation was successful.",xF="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",Ice="An out of date version of HarperDB is already installed.",JA="It appears that HarperDB is already installed. Exiting install...",wce="Aborting install",Cce=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])$/),Lce=new RegExp(/^[^\s.,*>]+$/),Dce=jA.homedir(),Uce=Pi.join(Dce,te.HDB_ROOT_DIR_NAME),Mce=9925,Pce="HDB_ADMIN",vce="CLUSTER_USER",pr={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:"},oAe=cc.getEnvCliRootPath(),Mi;zF.exports=KF;KF.createSuperUser=QF;async function KF(){console.log(Vt(Bi+FF+Bi)),ct.notify(FF);let e=Hce(),t=mce(e);if(t)throw t.message;await qce(),await Fce(e);let r=await Bce(e);Mi=r[te.INSTALL_PROMPTS.ROOTPATH],await $n.pathExists(Pi.join(Mi,te.HDB_CONFIG_FILE))&&(console.error(JA),process.exit());let s=hce({prefixText:Vt("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),cc.isEmpty(Mi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");vi.setHdbBasePath(Mi),await pce(Mi),await Gce(),await xce(r),ct.initLogSettings(!0),await QF(r),await $ce(r),await Nce.generateKeys(),await Vce(),gce(),s.stop(),console.log(Vt(Bi+GF+Bi)),ct.notify(GF)}a(KF,"install");async function Bce(e){ct.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.ROOTPATH],pr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:Di,default:Uce,validate:async n=>tn(n)?tn(n):await $n.pathExists(Pi.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Vt(pr.DESTINATION)},{type:"input",transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],pr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Di,default:Mce,validate:n=>Cce.test(n)?!0:"Invalid port.",message:Vt(pr.HDB_PORT)},{type:"input",transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],pr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Di,default:Pce,validate:n=>tn(n)?tn(n):(t=n,!0),message:Vt(pr.HDB_USERNAME)},{type:"password",when:Ui(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],pr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Di,validate:n=>tn(n)?tn(n):!0,message:Vt(pr.HDB_PASS)}];if(cc.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],pr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Di,default:fce.random(),validate:i=>Lce.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Vt(pr.NODE_NAME)},{type:"input",transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.CLUSTERING_USER],pr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Di,default:vce,validate:i=>tn(i)?tn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Vt(pr.CLUSTER_USERNAME)},{type:"password",when:Ui(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],pr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Di,validate:i=>tn(i)?tn(i):!0,message:Vt(pr.CLUSTER_PASS)}];r.push(...n)}let s=await kF.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(Bce,"installPrompts");function Ui(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Vt(t)} ${Go.gray("[hidden]")}`),ct.trace(`${Vt(t)} [hidden]`)):(console.log(`${Vt(t)} ${e}`),ct.trace(`${Vt(t)} ${e}`)),!1):!0}a(Ui,"displayCmdEnvVar");function tn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(tn,"checkForEmptyValue");function Hce(){let e=Object.keys(te.INSTALL_PROMPTS),t=zA(e),r=zA(Object.keys(te.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=te.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(Hce,"checkForPromptOverride");async function qce(){ct.trace("Checking for existing install.");let e=cc.getPropsFilePath(),t=await $n.pathExists(e),r;if(t){ct.trace(`Install found an existing boot prop file at:${e}`);let s=Ece(e),n=YF.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await $n.pathExists(n)}if(!t&&cc.noBootFile()&&(r=!0),r){if(ct.trace(`Install found existing HDB config at:${e}`),await $F.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${VF.version()}. Exiting install...`;console.log(Bi+Go.magenta.bold(Ice)),console.log(Go.magenta.bold(n)),ct.error(n)}else console.log(Bi+Go.magenta.bold(JA)),ct.error(JA);process.exit(0)}}a(qce,"checkForExistingInstall");async function Fce(e){ct.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${bce}${Bi}and can be viewed by typing or copying and pasting the URL into your web browser.${Bi}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Di,transformer:ac,when:Ui(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:Vt(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:Go.yellow("Please enter 'yes' or 'no'")},s=await kF.prompt([r]);s[te.INSTALL_PROMPTS.TC_AGREEMENT]&&s[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==yce&&(console.log(Go.yellow(xF)),ct.error(xF),process.exit(0))}a(Fce,"termsAgreement");async function Gce(){let e=Pi.join(Mi,te.HDB_CONFIG_FILE),t;try{t=jA.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}
105
- install_user = ${t}`,s=cc.getHomeDir(),n=Pi.join(s,te.HDB_HOME_DIR_NAME),i=Pi.join(n,te.LICENSE_KEY_DIR_NAME);try{$n.mkdirpSync(n,{mode:te.HDB_FILE_PERMISSIONS}),$n.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Pi.join(n,te.BOOT_PROPS_FILE_NAME);try{await $n.writeFile(o,r)}catch(c){throw ct.error(`There was an error creating the boot file at path: ${o}`),c}vi.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),vi.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),vi.setProperty(vi.BOOT_PROPS_FILE_PATH,o)}}a(Gce,"createBootPropertiesFile");async function xce(e){ct.trace("Creating HarperDB config file");let t=zA(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{YF.createConfigFile(t),vi.initSync()}catch(r){kce(r)}}a(xce,"createConfigFile");function kce(e){ct.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(wce);let t=Pi.resolve(vi.get(vi.BOOT_PROPS_FILE_PATH),"../");t&&$n.removeSync(t),Mi&&$n.removeSync(Mi),process.exit(1)}a(kce,"rollbackInstall");async function WF(e,t){ct.trace("Creating admin user"),await Oce();let r;try{r=await Tce.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 Sce.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(WF,"createAdminUser");async function QF(e){ct.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await WF(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(QF,"createSuperUser");async function $ce(e){ct.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await WF({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a($ce,"createClusterUser");async function Vce(){let e=VF.version();if(e)await $F.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Vce,"insertHdbVersionInfo")});var XF=m((uAe,jF)=>{"use strict";var XA=F(),Br=C(),JF=xA();jF.exports={processDirectives:Yce};async function Yce(e){console.log("Starting upgrade process...");let t=JF.getVersionsForUpgrade(e),r=Qce(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;Br.notify(c),console.log(c);let u=[],l=[];try{u=Kce(o.sync_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}try{l=await Wce(o.async_functions)}catch(_){throw Br.error(`Error while running an upgrade script for ${o.version}`),_}s.push(...u,...l)}return s}a(Yce,"processDirectives");function Kce(e){if(XA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(Br.info(`Running function ${r.name}`),!(r instanceof Function)){Br.info("Variable being processed is not a function");continue}let s=r();Br.info(s),t.push(s)}return t}a(Kce,"runSyncFunctions");async function Wce(e){if(XA.isEmptyOrZeroLength(e))return Br.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return Br.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(Br.info(`Running function ${n.name}`),!(n instanceof Function)){Br.info("Variable being processed is not a function");continue}let i=await n();Br.info(i),t.push(i)}return t}a(Wce,"runAsyncFunctions");function Qce(e){if(XA.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=JF.getDirectiveByVersion(r);s&&t.push(s)}return t}a(Qce,"getUpgradeDirectivesToInstall")});var tO=m((_Ae,nG)=>{"use strict";var Ah=Y();Ah.initSync();var rG=require("chalk"),ZF=require("fs-extra"),Yn=C(),Vn=R(),eG=ki(),zce=XF(),ZA=F(),sG=gh(),Jce=dh(),tG=Qh(),jce=$r(),Xce=require("util").promisify,Zce=Xce(jce.setSchemaDataToGlobal),eO,{UPGRADE_VERSION:Oh}=Vn.UPGRADE_JSON_FIELD_NAMES_ENUM;nG.exports={upgrade:eue};async function eue(e){await Zce(),eO===void 0&&(eO=Na()),ZF.existsSync(Ah.get(Ah.BOOT_PROPS_FILE_PATH))||(Yl("The hdb_boot_properties file was not found. Please install HDB.",Vn.LOG_LEVELS.ERROR),process.exit(1)),ZF.existsSync(Ah.get(Vn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Yl("The hdb settings file was not found. Please make sure HDB is installed.",Vn.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await sG.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Yl(`This version of HarperDB is ${eG.version()}`,Vn.LOG_LEVELS.INFO);let r=t[Oh]?t[Oh]:eG.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Vn.HDB_SUPPORT_ADDRESS}`),Yn.notify("Missing new version field from upgrade info object"),process.exit(1)),await tue();let s,n=0;try{s=await Jce.forceUpdatePrompt(t)}catch(i){Yn.error("There was an error when prompting user about upgrade."),Yn.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),Yn.info(`Starting upgrade to version ${r}`),await rue(t),Yl(`HarperDB was successfully upgraded to version ${t[Oh]}`,Vn.LOG_LEVELS.INFO)}a(eue,"upgrade");async function tue(){let e=!1,t=await tG.findPs(Vn.HDB_PROC_NAME);if(ZA.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await tG.findPs("hdb_express");ZA.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await eO.list();ZA.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(rG.red(r)),Yn.error(r),process.exit(1)}}a(tue,"checkIfRunning");async function rue(e){try{await zce.processDirectives(e)}catch(t){throw Yl("There was an error during the data upgrade. Please check the logs.",Vn.LOG_LEVELS.ERROR),t}try{await sG.insertHdbUpgradeInfo(e[Oh])}catch(t){Yn.error("Error updating the 'hdb_info' system table."),Yn.error(t)}}a(rue,"runUpgrade");function Yl(e,t=void 0){t||(t=Yn.info),Yn[t](e),console.log(rG.magenta(e))}a(Yl,"printToLogAndConsole")});var uG=m((EAe,cG)=>{"use strict";var{promises:sO,createReadStream:sue,createWriteStream:nue}=require("fs"),{createGzip:iue}=require("zlib"),{promisify:oue}=require("util"),{pipeline:aue}=require("stream"),cue=oue(aue),uue=require("path"),ko=Y();ko.initSync();var xo=C(),{CONFIG_PARAMS:Kl,ITC_EVENT_TYPES:lue}=R(),{onMessageFromWorkers:_ue}=tt(),due=6e4,Eue="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",fue="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",rO,oG;cG.exports=aG;_ue(e=>{e.type===lue.RESTART&&(ko.initSync(!0),clearInterval(oG),ko.get(Kl.LOGGING_ROTATION_ENABLED)&&aG())});async function aG(){try{let e=xo.getLogFilePath(),t=ko.get(Kl.LOGGING_ROTATION_MAXSIZE),r=ko.get(Kl.LOGGING_ROTATION_INTERVAL);if(!t&&!r){xo.error(Eue);return}let s=ko.get(Kl.LOGGING_ROTATION_PATH);if(!s){xo.error(fue);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}rO=Date.now()/6e4,xo.trace("Log rotate enabled, maxSize:",t,"interval:",r),oG=setInterval(async()=>{if(n){let o;o=await sO.stat(e),o.size>=n&&await iG(e,s)}i&&Date.now()/6e4-rO>=i&&(await iG(e,s),rO=Date.now()/6e4)},due).unref()}catch(e){xo.error(e)}}a(aG,"logRotator");async function iG(e,t){let r=ko.get(Kl.LOGGING_ROTATION_COMPRESS),s=uue.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await cue(sue(e),iue(),nue(s)),await sO.unlink(e)):await sO.rename(e,s),xo.closeLogFile(),xo.notify(`hdb.log rotated, old log moved to ${s}`)}a(iG,"moveLogFile")});var lc=m((OAe,mG)=>{"use strict";var Ns=Y();Ns.initSync();var hAe=ya(),ut=R(),Yt=C(),$o=require("fs-extra"),uc=require("path"),hue=IA(),mue=Rh(),nO=require("chalk"),pue=xi(),ts=F(),lG=et(),_G=Fi(),Sue=pE(),Tue=tO(),gue=uG(),Rue=require("minimist"),{PACKAGE_ROOT:Aue}=R(),{startHTTPThreads:Oue,startSocketServer:mAe,mostIdleRouting:pAe,remoteAffinityRouting:SAe}=(Df(),re(UR)),Nue=gh(),{isMainThread:bue}=require("worker_threads"),TAe=dn(),gAe=Xn(),RAe=jp(),AAe=au(),iO=R(),Os,yue="Upgrade complete. Starting HarperDB.",Iue="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",wue="HarperDB not found, starting install process.",Cue="There was an error during install, check install_log.log for more details. Exiting.",Lue="HarperDB successfully started.";async function dG(e=!1,t=!1){if(console.log(nO.magenta("Starting HarperDB...")),await hG()===!1){console.log(wue);try{await mue()}catch(n){console.error(Cue,n),Yt.error(n),process.exit(1)}}await $o.writeFile(uc.join(Ns.get(iO.CONFIG_PARAMS.ROOTPATH),iO.HDB_PID_FILE),`${process.pid}`),Yt.info("HarperDB PID",process.pid),Os===void 0&&(Os=Na());let r;try{let n=await Nue.getVersionUpdateInfo();n!==void 0&&(r=n[ut.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await Tue.upgrade(n),console.log(yue))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),Yt.error(n)):(console.error(Iue),Yt.error(n)),process.exit(1)}if(!e){let n=_G(Object.keys(ut.CONFIG_PARAM_MAP),!0);!ts.isEmpty(n)&&!ts.isEmptyOrZeroLength(Object.keys(n))&&lG.updateConfigValue(void 0,void 0,n,!0,!0)}hue(),Uue(),ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&bue&&await Sue.generateNatsConfig(t)}a(dG,"initialize");async function EG(e=!1){try{let t=Rue(process.argv);t.ROOTPATH&&lG.updateConfigObject("settings_path",uc.join(t.ROOTPATH,ut.HDB_CONFIG_FILE)),await dG(e,!0);let r=ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(ts.isEmpty(t.service))await Oue(Ns.get(iO.CONFIG_PARAMS.HTTP_THREADS)),n&&(s||await Os.startClusteringProcesses(),await Os.startClusteringThreads());else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;Yt.error(c),console.log(c),process.exit(1)}let o=t.service.split(",");for(let c of o){let u=c.toLowerCase();if(ut.PROCESS_DESCRIPTORS_VALIDATE[u]===void 0){Yt.error(`Run received unrecognized service command argument: ${u}`);continue}if(u===ut.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){Yt.error(`${u} is not enabled in settings`);continue}if(u.includes("clustering")&&!r){Yt.error(`${u} is not enabled in settings`);continue}u==="clustering"?await Os.startClusteringProcesses():await Os.startService(ut.PROCESS_DESCRIPTORS_VALIDATE[u]);let l=`${ut.PROCESS_DESCRIPTORS_VALIDATE[u]} successfully started.`;Yt.notify(l),console.log(l)}}Ns.get(ut.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await gue(),s||fG()}catch(t){console.error(t),Yt.error(t),process.exit(1)}}a(EG,"main");function fG(){Yt.suppressLogging(()=>{console.log(nO.magenta(""+$o.readFileSync(uc.join(Aue,"utility/install/ascii_logo.txt")))),console.log(nO.magenta(`|------------- HarperDB ${pue.version} successfully started ------------|`))}),Yt.notify(Lue)}a(fG,"started");async function Due(){if(Mue())return EG();try{Os===void 0&&(Os=Na()),Os.enterPM2Mode(),await dG(),ts.autoCastBoolean(Ns.get(ut.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await Os.startClusteringProcesses(),await Os.startService(ut.PROCESS_DESCRIPTORS.HDB),fG(),process.exit(0)}catch(e){console.error(e),Yt.error(e),process.exit(1)}}a(Due,"launch");function Uue(){let e=uc.join(Ns.getHdbBasePath(),ut.LICENSE_KEY_DIR_NAME,ut.LICENSE_FILE_NAME),t=uc.join(e,ut.LICENSE_FILE_NAME),r=uc.join(e,ut.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=_G(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ts.isEmpty(s)||ts.isEmpty(n))return;$o.mkdirpSync(e),$o.writeFileSync(r,s),$o.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Yt.error(n)}}a(Uue,"writeLicenseFromVars");mG.exports={launch:Due,main:EG,isHdbInstalled:hG};async function hG(){try{await $o.stat(ts.getPropsFilePath()),await $o.stat(Ns.get(ut.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ts.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Yt.error(`Error checking for HDB install - ${e}`),e}return!0}a(hG,"isHdbInstalled");function Mue(){return ts.autoCastBoolean(Ns.get(ut.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}a(Mue,"getRunInForeground")});var SG=m((bAe,pG)=>{var Pue=Rh(),vue=C();pG.exports=Bue;async function Bue(){try{await Pue()}catch(e){console.error("There was an error during the install."),console.error(e),vue.error(e),process.exit(1)}}a(Bue,"install")});var RG=m((IAe,gG)=>{"use strict";var Hue=lE(),que=C(),TG="Registration failed.";async function Fue(){let e;try{e=await Hue.register()}catch(t){return que.error(`Registration error ${t}`),TG}return e||TG}a(Fue,"register");gG.exports={register:Fue}});var bG=m((CAe,NG)=>{"use strict";var Gue=C(),xue=R(),kue=require("util"),$ue=require("child_process"),AG=kue.promisify($ue.exec),Vue=On(),Wl=Na(),OG="Stopping HarperDB.";NG.exports=Yue;async function Yue(){if(console.log(OG),Gue.notify(OG),await Wl.isServiceRegistered(xue.HDB_PROC_DESCRIPTOR)){Wl.enterPM2Mode();let r=await Wl.getUniqueServicesList();for(let s in r)await Wl.stop(s)}await Wl.kill();let t=await Vue.getHDBProcessInfo();t.clustering.forEach(r=>{AG(`kill ${r.pid}`)}),t.core.forEach(r=>{AG(`kill ${r.pid}`)})}a(Yue,"stop")});var LG=m((DAe,CG)=>{"use strict";var oO=require("fs-extra"),aO=require("path"),Kue=require("yaml"),Ql=Qe(),zl=R(),yG=Me(),IG=C(),Wue=er(),Que=oE(),zue=nE(),Jue=On(),wG=Y();wG.initSync();var rn={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Sr={LEAF:"leaf server",HUB:"hub server"},Nh;CG.exports=jue;async function jue(){Nh=wG.get(zl.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:rn.STOPPED}},t;try{t=Number.parseInt(await oO.readFile(aO.join(Nh,zl.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===zl.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await Jue.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=rn.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Xue(r),e.clustering[Sr.HUB].status===rn.RUNNING&&e.clustering[Sr.LEAF].status===rn.RUNNING){let s=[],n=await Que({});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 zue.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 Ql.closeConnection()}console.log(Kue.stringify(e)),process.exit()}a(jue,"status");async function Xue(e){let t={[Sr.HUB]:{},[Sr.LEAF]:{}};if(e.clustering.length===0)return t[Sr.HUB].status=rn.STOPPED,t[Sr.LEAF].status=rn.STOPPED,t;let{port:r}=Ql.getServerConfig(zl.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Wue.getClusterUser();try{(await Ql.createConnection(r,s,n,!1)).close(),t[Sr.HUB].status=rn.RUNNING}catch{t[Sr.HUB].status=rn.ERRORED}let{port:i}=Ql.getServerConfig(zl.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await Ql.createConnection(i,s,n,!1)).close(),t[Sr.LEAF].status=rn.RUNNING}catch{t[Sr.LEAF].status=rn.ERRORED}try{t[Sr.HUB].pid=Number.parseInt(await oO.readFile(aO.join(Nh,"clustering",yG.PID_FILES.HUB),"utf8"))}catch(o){IG.error(o),t[Sr.HUB].pid=void 0}try{t[Sr.LEAF].pid=Number.parseInt(await oO.readFile(aO.join(Nh,"clustering",yG.PID_FILES.LEAF),"utf8"))}catch(o){IG.error(o),t[Sr.LEAF].pid=void 0}return t}a(Xue,"getHubLeafStatus")});var HG=m(()=>{"use strict";var Zue=require("os"),Ih=require("https"),Hi=require("fs-extra"),ele=require("yaml"),tle=require("human-readable-ids").hri,{pipeline:DG}=require("stream/promises"),{createWriteStream:wh,ensureDir:Ch}=require("fs-extra"),{join:sn}=require("path"),lO=require("lodash"),rle=Y(),sle=On(),vG=C(),bh=et(),{restart:nle}=ya(),BG=F(),UG=Qe(),ile=$r(),{isHdbInstalled:ole,main:ale}=lc(),cle=Rh(),_O=R(),{SYSTEM_TABLE_NAMES:MG,SYSTEM_SCHEMA_NAME:ule,CONFIG_PARAMS:Jl,OPERATIONS_ENUM:Hr}=_O,lle=9925,_le="info",dle=1e4,Ele="clone-node-config.yaml",dO=[MG.ROLE_TABLE_NAME,MG.USER_TABLE_NAME],jl=process.env.HDB_LEADER_USERNAME,Xl=process.env.HDB_LEADER_PASSWORD,Zl=process.env.HDB_LEADER_URL,cO=process.env.HDB_LEADER_CLUSTERING_HOST,fle=process.env.HDB_LEADER_CLUSTERING_PORT,uO,ye,lt,je,EO,_c;async function hle(){if(await ole())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+Zl),ye?.rootPath)_c=ye.rootPath;else try{_c=process.env.ROOTPATH?process.env.ROOTPATH:sn(Zue.homedir(),_O.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=sn(_c,Ele),ye=ele.parseDocument(Hi.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}EO=ye?.clustering?.nodeName??tle.random(),lt=await Lh({operation:Hr.GET_CONFIGURATION}),lt=await JSON.parse(lt.body),global.fetch?(await Tle(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await Sle(),await ple(),await mle(),await gle(),await Rle(),console.info("Successfully cloned node: "+Zl)}a(hle,"cloneNode");async function mle(){console.info("Cloning configuration"),uO=lt?.clustering?.enabled;let e={[Jl.ROOTPATH]:_c};if(uO&&ye?.clustering?.enabled!==!1){if(cO==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[Jl.CLUSTERING_ENABLED]=!0;let s=lt?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(fle)||lt?.clustering?.hubServer?.cluster?.network?.port;e[Jl.CLUSTERING_USER]=lt?.clustering?.user;let i=rle.get(Jl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:cO,port:n}):i=[{host:cO,port:n}],Array.isArray(s)&&i.concat(s),e[Jl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=ye?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in lt)lt[s]?.package&&!t[s]&&await bh.addConfig(s,lt[s]);ye?.databases&&await bh.addConfig("databases",lt?.schemas);let r=bh.flattenConfig(ye);for(let s in r){let n=_O.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=EO),vG.info("Cloning config:",e),lO.isEmpty(e)||await bh.updateConfigValue(void 0,void 0,e,!1,!0)}a(mle,"cloneConfig");async function ple(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=_c,!jl)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=jl,!Xl)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Xl,process.env.OPERATIONSAPI_NETWORK_PORT=ye?.operationsApi?.network?.port??lle,process.env.CLUSTERING_NODENAME=EO,process.env.CLUSTERING_LOGLEVEL=ye?.clustering?.logLevel??_le,await cle()}a(ple,"installHDB");async function Sle(){console.info("Cloning system database");let e=dc("system");await Ch(e);let t=sn(e,"system.mdb"),r=wh(t,{overwrite:!0}),s=await PG({operation:Hr.GET_BACKUP,database:"system",tables:dO},r);await Hi.utimes(t,Date.now(),new Date(s.date)),je=await Lh({operation:Hr.DESCRIBE_ALL}),je=await JSON.parse(je.body);let n=ye?.databaseConfig?.excludeDatabases;if(n=n?n.reduce((o,c)=>({...o,[c.database]:!0}),{}):{},lt.schemas)for(let o in lt.schemas)Object.keys(lt.schemas[o]).includes("tables")&&(n[o]=!0,console.info(`Excluding database '${o}' from clone because leader node has custom pathing configured for one or more of its tables`));let i=ye?.databaseConfig?.excludeTables;i=i?i.reduce((o,c)=>({...o,[c.database==null?null:c.database+c.table]:!0}),{}):{};for(let o in je){if(n[o]){je[o]="excluded";continue}if(lO.isEmpty(je[o]))continue;let c=[],u=!1;for(let h in je[o])i[o+h]?(u=!0,je[o][h]="excluded"):c.push(h);let l;u?(console.info(`Cloning database: ${o} tables: ${c}`),l={operation:Hr.GET_BACKUP,database:o,tables:c}):(console.info(`Cloning database: ${o}`),l={operation:Hr.GET_BACKUP,database:o});let _=dc(o);await Ch(_);let d=sn(_,o+".mdb"),E=wh(d,{overwrite:!0}),f=await PG(l,E);await Hi.utimes(d,Date.now(),new Date(f.date))}}a(Sle,"cloneTables");async function Tle(){console.info("Cloning system database");let e=await yh({operation:Hr.GET_BACKUP,database:"system",tables:dO},!0),t=dc("system");await Ch(t);let r=sn(t,"system.mdb");await DG(e.body,wh(r,{overwrite:!0})),await Hi.utimes(r,Date.now(),new Date(e.headers.get("date"))),je=await yh({operation:Hr.DESCRIBE_ALL}),je=await je.json();let s=ye?.databaseConfig?.excludeDatabases;if(s=s?s.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},lt.schemas)for(let i in lt.schemas)Object.keys(lt.schemas[i]).includes("tables")&&(s[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));let n=ye?.databaseConfig?.excludeTables;n=n?n.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in je){if(s[i]){je[i]="excluded";continue}if(lO.isEmpty(je[i]))continue;let o=[],c=!1;for(let f in je[i])n[i+f]?(c=!0,je[i][f]="excluded"):o.push(f);let u;c?(console.info(`Cloning database: ${i} tables: ${o}`),u=await yh({operation:Hr.GET_BACKUP,database:i,tables:o},!0)):(console.info(`Cloning database: ${i}`),u=await yh({operation:Hr.GET_BACKUP,database:i},!0));let l=dc(i);await Ch(l);let _=new Date(u.headers.get("date")),d=sn(l,`${_.getTime()}-${i}.mdb`);await DG(u.body,wh(d,{overwrite:!0}));let E=sn(l,i+".mdb");await Hi.rename(d,E),await Hi.utimes(E,Date.now(),_)}}a(Tle,"cloneTablesFetch");async function yh(e,t=!1){let r=ye?.httpsRejectUnauthorized??!1,s=new Ih.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(jl+":"+Xl).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(Zl,{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(yh,"leaderHttpReqFetch");function dc(e){return ye?.databases&&ye?.databases[e]?.path||ye?.storage&&ye?.storage?.path||sn(_c,"database")}a(dc,"getDbFileDir");async function gle(){let{deployComponent:e}=ME(),t=await Lh({operation:Hr.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(ye?.componentConfig?.exclude){for(let o of ye.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=ye?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await Lh({operation:Hr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(gle,"cloneComponents");async function Rle(){if(!uO)return;let e=await sle.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await ale():(console.info(await nle({operation:Hr.RESTART})),await BG.async_set_timeout(dle)),console.info("Clustering cloned tables");let t=ye?.clusteringConfig?.subscribeToLeaderNode!==!1,r=ye?.clusteringConfig?.publishToLeaderNode!==!1;await ile.setSchemaDataToGlobalAsync();let s=Uu(),n=[],i=await Hi.stat(sn(dc("system"),"system.mdb"));for(let o of dO)n.push({schema:ule,table:o,subscribe:t,publish:r,start_time:i.mtime.toISOString()});for(let o in je){if(je[o]==="excluded")continue;let c=await Hi.stat(sn(dc(o),o+".mdb"));for(let u in je[o])je[o][u]!=="excluded"&&n.push({schema:o,table:u,subscribe:t,publish:r,start_time:c.mtime.toISOString()})}await UG.createTableStreams(n),vG.info("Sending add_node request to node:",lt?.clustering?.nodeName,"with subscriptions:",n),await s({operation:Hr.ADD_NODE,node_name:lt?.clustering?.nodeName,subscriptions:n},!0),await UG.closeConnection()}a(Rle,"clusterTables");async function Lh(e){let t=new Ih.Agent({rejectUnauthorized:ye?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(jl+":"+Xl).toString("base64"),"Content-Type":"application/json"},n=new URL(Zl),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 BG.httpRequest(i,e)}a(Lh,"leaderHttpReq");async function PG(e,t){let r=new Ih.Agent({rejectUnauthorized:ye?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(jl+":"+Xl).toString("base64"),"Content-Type":"application/json"},i=new URL(Zl),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r),i.port&&(o.port=i.port),new Promise((c,u)=>{let l=Ih.request(o,_=>{_.pipe(t),_.on("end",()=>{t.close(),c(_.headers)})});l.on("error",_=>{u(_)}),l.write(JSON.stringify(e)),l.end()})}a(PG,"leaderHttpStream");hle().then().catch(e=>{console.log(e)})});var Ec=C(),Ale=ki(),fO=R(),Dh=require("fs"),qG=require("path"),BAe=require("os"),{PACKAGE_ROOT:Ole}=R(),Nle=XO(),HAe=Y(),ble=(Df(),re(UR)),{SERVICE_ACTIONS_ENUM:bs}=fO;yle();function yle(){let e=Nle();if(e)if(e.error){console.error(e.error),Ec.error(e.error);return}else e.warn&&(console.warn(e.warn),Ec.warn(e.warn));let t;Dh.readdir(qG.join(Ole,"bin"),r=>{if(r)return Ec.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case bs.DEBUG:require("inspector").open(9229),ble.debugMode=!0;case bs.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Dh.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Dh.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Dh.existsSync(qG.join(n,fO.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),lc().main();break;case bs.START:s=lc().launch();break;case bs.INSTALL:SG()().then(()=>lc().main(!0)).catch(E=>{console.error(E)});break;case bs.REGISTER:RG().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case bs.STOP:bG()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case bs.RESTART:ya().restart({}).then().catch(E=>{Ec.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case bs.VERSION:Ale.printVersion();break;case bs.UPGRADE:Ec.setLogLevel(fO.LOG_LEVELS.INFO),tO().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{Ec.error(`Got an error during upgrade ${E}`)});break;case bs.STATUS:LG()().then().catch(E=>{console.error(E)});break;case void 0:process.env.HDB_LEADER_URL?HG():lc().main();break;default:console.warn(`The "${t}" command is not understood.`);case bs.HELP:console.log(`
103
+ Reindexing upgrade started for transaction logs`),Yn.notify("Reindexing upgrade started for transaction logs"),await fF(vA,!0,e)),Yn.notify("Reindexing upgrade complete"),"Reindexing for 4.0.0 upgrade complete"+(Gl?", but errors occurred":"")}a(lae,"reindexUpgrade");async function fF(e,t,r){let s=await rn.readdir(e),n=s.length;for(let i=0;i<n;i++){let o=s[i],c=Kn.join(e,o.toString());if(o===".DS_Store")continue;let u=await rn.readdir(c),l=u.length;for(let _=0;_<l;_++){let d=u[_];if(d!==".DS_Store"&&rn.statSync(Kn.join(c,d)).isDirectory())try{await _ae(o,d,t),$t.info(`Reindexing started for ${o}.${d}`),Yn.notify(`${t?"Transaction":"Schema"} reindexing started for ${o}.${d}`),await Eae(o,d,c,t,r),$t.info(`Reindexing completed for ${o}.${d}`),Yn.notify(`Reindexing completed for ${o}.${d}`)}catch(E){Gl=!0,E.schema_path=c,E.table_name=d,Yn.error("There was an error with the reindex upgrade, check the logs in hdb/3_0_0_upgrade_tmp for more details"),Yn.error(E),$t.error(E),console.error(E)}}}if(!Gl)try{await rn.rm(hh,{recursive:!0})}catch{}}a(fF,"processTables");async function _ae(e,t,r){let n=`${e}_${t}_${r?"transaction_reindex":"schema_reindex"}.log`,i=Kn.join(hh,n);await rn.ensureDir(hh),await rn.writeFile(i,""),$t=cae({level:"debug",formatters:{bindings(){}}},i)}a(_ae,"initPinoLogger");var dae=20;async function Eae(e,t,r,s,n){let i;try{i=await Br.openEnvironment(r,t,s)}catch(g){if(g.message==="MDB_INVALID: File is not an LMDB file"){Yn.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`),$t.error(g);return}throw g}let o=mae(i.dbis),c=Br.openDBI(i,o),u=Object.keys(i.dbis),l=Br.statDBI(i,o);$t.info(`Old environment stats: ${JSON.stringify(l)}`);let _=new aae.SingleBar({format:`${e}.${t} |{bar}| {percentage}% || {value}/{total} records`,barCompleteChar:"\u2588",barIncompleteChar:"\u2591",hideCursor:!0,clearOnComplete:!1});_.start(l.entryCount,0,{});let d=await Br.createEnvironment(r,t,!1);Br.createDBI(d,o,!1,!0);let E=[];try{for(let g of c.getRange({start:!1}))g.value=Object.assign({},g.value),E.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())),E.length>dae&&await f();await f()}catch(g){throw Gl=!0,$t.error(g),g}async function f(){let g,v=E.map(({value:b})=>b);s?g=await Promise.all(v.map(b=>fae(d,b))):g=await sae(d,o,u.filter(b=>b!=="__blob__"),v,!1);for(let b=0,I=E.length;b<I;b++){let{key:U,value:J}=E[b];$t.info(`Record hash value: ${U} hash: ${o}`);let M;s?M=g[b]:M=g.written_hashes.indexOf(U)>-1,Fl(M,!0),hae(d,o,J[o],s),$t.info(`Insert success, written hashes: ${g.written_hashes}`),_.increment()}E=[],_.value/_.total*100%10===0&&Yn.notify(`${e}.${t} ${_.value}/${_.total} records inserted`),$t.info(`${_.value}/${_.total} records inserted`)}a(f,"finishOutstanding"),_.stop();let h=Br.statDBI(i,o),p=Br.statDBI(d,o);if($t.info(`Old stats entry count: ${h.entryCount}. New stats entry count: ${p.entryCount}`),Fl.deepStrictEqual(h.entryCount,p.entryCount),await Br.closeEnvironment(i),await Br.closeEnvironment(d),delete global.lmdb_map[`${e}.${t}`],n){let g=Kn.join(r,t),v=Kn.join(g,"data.mdb"),V=Kn.join(g,"lock.mdb");await rn.unlink(v),await rn.unlink(V),await rn.rmdir(g),$t.info(`Deleted old environment files from schema folder: ${v}, ${V}`)}let T=await Br.openEnvironment(r,t),A=Br.statDBI(T,o);$t.info(`New stats: ${JSON.stringify(p)}. New stats after move: ${JSON.stringify(A)}`),Fl.deepStrictEqual(A.entryCount,p.entryCount),await Br.closeEnvironment(T),delete global.lmdb_map[`${e}.${t}`]}a(Eae,"processTable");async function fae(e,t){Br.initializeDBIs(e,Pi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Pi.TRANSACTIONS_DBIS);let r=t.timestamp;return e.dbis[Pi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(r,()=>{e.dbis[Pi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(r,t),oae.isEmpty(t.user_name)||e.dbis[Pi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(t.user_name,r);for(let s of t.hash_values)e.dbis[Pi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(s,r)})}a(fae,"insertTransaction");function hae(e,t,r,s){let i=e.dbis[t].get(r);Fl.deepStrictEqual(typeof i,"object");let o;if(s){let c={[Pi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME]:i.user_name,[Pi.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&&!iae.isEmptyOrZeroLength(u))if(s&&c==="hash_value")for(let l=0,_=u.length;l<_;l++){let d=u[l];hF(e,c,d,r)}else hF(e,c,u,r)}a(hae,"validateIndices");function hF(e,t,r,s){try{let n=!1,i=nae.getIndexedValues(r);if(!i)return;for(let o of i)n=e.dbis[t].doesExist(o,s),n||$t.info(`Validate indices did not find value in new DBI: ${o}. Hash: ${s}`),Fl.deepStrictEqual(n,!0)}catch(n){Gl=!0,$t.error(n),console.error(n)}}a(hF,"validateIndex");function mae(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(mae,"getHashDBI")});var FA=m((QRe,TF)=>{"use strict";var pae=require("mkcert"),mh=require("path"),BA=require("fs-extra"),HA=C(),Sae=Y(),qA=R(),oc=_p(),Tae=$i(),gae=tt();TF.exports={generateKeys:Rae,updateConfigCert:SF};async function Rae(){let e=Sae.getHdbBasePath(),t=mh.join(e,qA.LICENSE_KEY_DIR_NAME),r=await pae.createCert({domains:["127.0.0.1","localhost","::1"],validityDays:365,caKey:oc.CERTIFICATE_VALUES.key,caCert:oc.CERTIFICATE_VALUES.cert}),s=mh.join(t,oc.CERTIFICATE_PEM_NAME),n=mh.join(t,oc.PRIVATEKEY_PEM_NAME),i=mh.join(t,oc.CA_PEM_NAME);try{await BA.writeFile(s,r.cert)}catch(o){throw HA.error(o),console.error("There was a problem creating the certificate file. Please check the install log for details."),o}try{await BA.writeFile(n,r.key)}catch(o){throw HA.error(o),console.error("There was a problem creating the private key file. Please check the install log for details."),o}try{await BA.writeFile(i,oc.CERTIFICATE_VALUES.cert)}catch(o){throw HA.error(o),console.error("There was a problem creating the certificate authority file. Please check the install log for details."),o}SF(s,n,i)}a(Rae,"generateKeys");function SF(e,t,r){let s=Tae(Object.keys(qA.CONFIG_PARAM_MAP),!0),n=qA.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.CUSTOMFUNCTIONS_TLS_CERTIFICATE]:s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERTIFICATE.toLowerCase()]:e,[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY]:s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_PRIVATEKEY.toLowerCase()]:t,[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH]:s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]?s[n.CUSTOMFUNCTIONS_TLS_CERT_AUTH.toLowerCase()]:r,[n.OPERATIONSAPI_TLS_CERTIFICATE]:s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()]:e,[n.OPERATIONSAPI_TLS_PRIVATEKEY]:s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]?s[n.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()]:t,[n.OPERATIONSAPI_TLS_CERT_AUTH]:s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]?s[n.OPERATIONSAPI_TLS_CERT_AUTH.toLowerCase()]:r};gae.updateConfigValue(void 0,void 0,i,!1,!0)}a(SF,"updateConfigCert")});var NF=m((jRe,OF)=>{"use strict";var ph=require("path"),vi=require("fs-extra"),Aae=MA(),Go=C(),gF=tt(),GA=Y(),Os=R(),Sh=G(),Oae=require("properties-reader"),Nae=us(),bae=xd(),yae=Xt(),JRe=require("util"),Iae=yae.searchByValue,wae=Zt(),Cae=cE(),Lae=Pe(),Dae=pF(),RF=FA(),Uae=dh(),$l=new Aae("4.0.0"),AF=[],xl,kl;async function Mae(){try{if(await Uae.upgradeCertsPrompt()){if(console.log("Generating new certificates."),xl){let t=Sh.changeExtension(xl,".bak");await vi.move(xl,t)}if(kl){let t=Sh.changeExtension(kl,".bak");await vi.move(kl,t)}await RF.generateKeys()}else console.log("Using existing certificates."),RF.updateConfigCert(xl,kl,void 0)}catch(e){throw console.error("There was a problem generating new keys. Please check the log for details."),e}}a(Mae,"generateNewKeys");async function Pae(){console.log("Updating HarperDB nodes."),Go.info("Updating HarperDB nodes.");let e=[];try{let t=new Nae(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*","name",["*"]),r=Array.from(await Iae(t)),s=[];for(let i=0,o=r.length;i<o;i++){let c=r[i];if(!Lae.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 E=c.subscriptions[_],f=E.channel.split(":");l.push({schema:f[0],table:f[1],publish:E.publish,subscribe:E.subscribe})}s.push({name:c.name,subscriptions:l,system_info:{hdb_version:Os.PRE_4_0_0_VERSION,node_version:void 0,platform:void 0}})}if(Sh.isEmptyOrZeroLength(s))return;let n=new bae(Os.SYSTEM_SCHEMA_NAME,Os.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,s);await wae.update(n)}catch(t){throw console.error("There was a problem updating the hdb_nodes table. Please check the log for details."),t}try{Cae.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(Pae,"updateNodes");async function vae(){let e=GA.get(Os.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY);if(!e.includes(ph.join("config","settings.js"))){Go.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),Go.info(t);let r=ph.dirname(e),s=GA.get(Os.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),n=ph.join(s,"backup","4_0_0_upgrade_settings.bak"),i=ph.join(s,Os.HDB_CONFIG_FILE);try{Go.info(`Backing up old settings file to: ${n}`),console.log(`Backing up old settings file to: ${n}`),vi.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{Go.info(`Creating new/upgraded settings file at '${i}'`),console.log(`Creating new/upgraded settings file at '${i}'`),Go.info("Updating env variables with new settings values");let d=gF.initOldConfig(e);xl=d[Os.CONFIG_PARAMS.OPERATIONSAPI_TLS_CERTIFICATE.toLowerCase()],kl=d[Os.CONFIG_PARAMS.OPERATIONSAPI_TLS_PRIVATEKEY.toLowerCase()],gF.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=Sh.getPropsFilePath();vi.accessSync(o,vi.constants.F_OK|vi.constants.R_OK);let u=Oae(o).get(Os.HDB_SETTINGS_NAMES.INSTALL_USER),l=`settings_path = ${i}
104
+ install_user = ${u}`;try{vi.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{GA.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{vi.removeSync(r),console.log(_),Go.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(vae,"updateSettingsFile_4_0_0");$l.async_functions.push(vae);$l.async_functions.push(Mae);$l.async_functions.push(Dae);$l.async_functions.push(Pae);AF.push($l);OF.exports=AF});var xA=m((ZRe,wF)=>{"use strict";var xo=G(),Bae=R(),bF=C(),{DATA_VERSION:Hae,UPGRADE_VERSION:qae}=Bae.UPGRADE_JSON_FIELD_NAMES_ENUM,yF=dF(),Th=NF(),ko=new Map;yF&&yF.forEach(e=>{ko.set(e.version,e)});Th&&Th.forEach(e=>{ko.set(e.version,e)});Th&&Th.forEach(e=>{ko.set(e.version,e)});function Fae(){return[...ko.keys()].sort(xo.compareVersions)}a(Fae,"getSortedVersions");function IF(e){let t=e[Hae],r=e[qae];return xo.isEmptyOrZeroLength(t)||xo.isEmptyOrZeroLength(r)?(bF.info(`There is an issue with the version data in your instance of HDB. Current version data: ${e}`),bF.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."),[]):[...ko.keys()].sort(xo.compareVersions).filter(function(s){return xo.compareVersions(s,t)>0&&xo.compareVersions(s,r)<=0})}a(IF,"getVersionsForUpgrade");function Gae(e){return IF(e).length>0}a(Gae,"hasUpgradesRequired");function xae(e){return xo.isEmptyOrZeroLength(e)?null:ko.has(e)?ko.get(e):null}a(xae,"getDirectiveByVersion");wF.exports={getSortedVersions:Fae,getDirectiveByVersion:xae,getVersionsForUpgrade:IF,hasUpgradesRequired:Gae}});var gh=m((tAe,MF)=>{"use strict";var kae=require("util"),kA=require("chalk"),$ae=require("os"),LF=Zt(),Vae=Xt(),Hr=R(),DF=eF(),VA=ip(),{UpgradeObject:CF}=sF(),{forceDowngradePrompt:Yae}=dh(),Kae=Ki(),Vl=C(),ac=G(),YA=Yr(),Wae=(de(),re(Ie)),Qae=xA(),zae=kae.promisify(YA.setSchemaDataToGlobal),Jae=Vae.searchByValue,jae="info_id",Xae="2.9.9",Zae="3.0.0";async function ece(e){let t=new DF.HdbInfoInsertObject(1,e,e),r=new VA.InsertObject(Hr.OPERATIONS_ENUM.INSERT,Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Hr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return YA.setSchemaDataToGlobal(),LF.insert(r)}a(ece,"insertHdbInstallInfo");async function $A(e){let t,r=await UF(),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 DF.HdbInfoInsertObject(i,e,e);let o=new VA.InsertObject(Hr.OPERATIONS_ENUM.INSERT,Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,Hr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,[t]);return await zae(),LF.insert(o)}a($A,"insertHdbUpgradeInfo");async function UF(){let e=new VA.NoSQLSeachObject(Hr.SYSTEM_SCHEMA_NAME,Hr.SYSTEM_TABLE_NAMES.INFO_TABLE_NAME,jae,Hr.SYSTEM_TABLE_HASH_ATTRIBUTES.INFO_TABLE_ATTRIBUTE,["*"],"*"),t=[];try{t=Array.from(await Jae(e))}catch(r){Vl.info(r)}return t}a(UF,"getAllHdbInfoRecords");async function tce(){let e=await UF();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(tce,"getLatestHdbInfoRecord");async function rce(){Vl.info("Checking if HDB software has been updated");try{let e=Kae.version(),t=await tce(),r;if(ac.isEmpty(t))r=Xae;else if(r=t.data_version_num,ac.compareVersions(r.toString(),e.toString())>0){if(!ac.isCompatibleDataVersion(r.toString(),e.toString()))throw console.log(kA.yellow(`This instance's data was last run on version ${r}`)),console.error(kA.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.${$ae.EOL}${Hr.SUPPORT_HELP_MSG}`)),new Error("Trying to downgrade major HDB versions is not supported.");ac.isCompatibleDataVersion(r.toString(),e.toString(),!0)||(console.log(kA.yellow(`This instance's data was last run on version ${r}`)),await Yae(new CF(r,e))?await $A(e.toString()):(console.log("Cancelled downgrade, closing HarperDB"),process.exit(0)))}if(YA.setSchemaDataToGlobal(),sce(r),e.toString()===r.toString())return;let s=new CF(r,e);if(Qae.hasUpgradesRequired(s))return s;ac.compareVersions(s.data_version.toString(),s.upgrade_version.toString())<0&&(await $A(s.upgrade_version),Vl.notify(`HarperDB running on upgraded version: ${s.upgrade_version}`))}catch(e){throw Vl.fatal("Error while trying to evaluate the state of hdb data and the installed hdb version"),Vl.fatal(e),e}}a(rce,"getVersionUpdateInfo");function sce(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 ${Hr.HDB_SUPPORT_ADDRESS}`;if(!("hdb_info"in Wae.databases.system))throw console.log(t),new Error(t);if(!ac.isEmpty(e)&&e<Zae)throw console.log(t),new Error(t)}a(sce,"checkIfInstallIsSupported");MF.exports={insertHdbInstallInfo:ece,insertHdbUpgradeInfo:$A,getVersionUpdateInfo:rce}});var qF=m((sAe,HF)=>{"use strict";var KA=require("joi"),{boolean:nce,string:PF,number:ice}=KA.types(),vF=require("fs-extra"),Yl=R(),BF=require("path"),oce=qe();HF.exports=ace;function ace(e){let t=PF.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null),r=KA.object({[Yl.INSTALL_PROMPTS.ROOTPATH]:KA.custom(cce),[Yl.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]:ice.min(0),[Yl.INSTALL_PROMPTS.TC_AGREEMENT]:PF.valid("yes","YES","Yes"),[Yl.INSTALL_PROMPTS.CLUSTERING_NODENAME]:t,[Yl.INSTALL_PROMPTS.CLUSTERING_ENABLED]:nce});return oce.validateBySchema(e,r)}a(ace,"installValidator");function cce(e,t){if(vF.existsSync(BF.join(e,"system/hdb_user/data.mdb"))||vF.existsSync(BF.join(e,"system/hdb_user.mdb")))return t.message(`'${e}' is already in use. Please enter a different path.`)}a(cce,"validateRootAvailable")});var GF=m((iAe,FF)=>{"use strict";var{mkdirpSync:uce}=require("fs-extra"),sn=require("path"),cc=R(),QA=C(),lce=Kr(),WA=mn(),_ce=Ue();FF.exports=dce;async function dce(e){QA.trace("Mounting HarperDB"),Ns(e),Ns(sn.join(e,"backup")),Ns(sn.join(e,"trash")),Ns(sn.join(e,"keys")),Ns(sn.join(e,"keys",cc.LICENSE_FILE_NAME)),Ns(sn.join(e,"log")),Ns(sn.join(e,"doc")),Ns(sn.join(e,"database")),Ns(sn.join(e,cc.TRANSACTIONS_DIR_NAME)),Ns(sn.join(e,"clustering","leaf")),Ns(sn.join(e,"components")),await Ece()}a(dce,"mountHdb");async function Ece(){let e=cu(),t=Object.keys(WA);for(let r=0;r<t.length;r++){let s=t[r],n=WA[s].hash_attribute;try{_ce.initSystemSchemaPaths(cc.SYSTEM_SCHEMA_NAME,s);let i=new e(cc.SYSTEM_SCHEMA_NAME,s,n);i.attributes=WA[s].attributes;let o=i.attributes.find(({attribute:c})=>c===n);o.isPrimaryKey=!0,await lce.createTable(s,i)}catch(i){throw QA.error(`issue creating environment for ${cc.SYSTEM_SCHEMA_NAME}.${s}: ${i}`),i}}}a(Ece,"createLMDBTables");function Ns(e){uce(e,{mode:cc.HDB_FILE_PERMISSIONS}),QA.info(`Directory ${e} created`)}a(Ns,"makeDirectory")});var Rh=m((cAe,jF)=>{"use strict";var jA=require("os"),VF=require("inquirer"),Wn=require("fs-extra"),fce=require("properties-reader"),$o=require("chalk"),Fi=require("path"),hce=require("human-readable-ids").hri,mce=require("ora"),ut=C(),Gi=Y(),lc=G(),zA=$i(),YF=gh(),KF=Ki(),te=R(),pce=qF(),Sce=GF(),WF=tt(),Tce=tr(),gce=Hd(),Rce=IA(),Ace=Yr(),Oce=require("util").promisify,Nce=Oce(Ace.setSchemaDataToGlobal),bce=FA(),uc=a(e=>e,"PROMPT_ANSWER_TRANSFORMER"),Vt=a(e=>$o.magenta.bold(e),"HDB_PROMPT_MSG"),yce="https://harperdb.io/legal/end-user-license-agreement",xi=jA.EOL,Bi="",Ice="yes",xF="Starting HarperDB install...",kF="HarperDB installation was successful.",$F="Terms & Conditions acceptance is required to proceed with installation. Exiting install...",wce="An out of date version of HarperDB is already installed.",JA="It appears that HarperDB is already installed. Exiting install...",Cce="Aborting install",Lce=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])$/),Dce=new RegExp(/^[^\s.,*>]+$/),Uce=jA.homedir(),Mce=Fi.join(Uce,te.HDB_ROOT_DIR_NAME),Pce=9925,vce="HDB_ADMIN",Bce="CLUSTER_USER",Sr={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:"},aAe=lc.getEnvCliRootPath(),qi;jF.exports=QF;QF.createSuperUser=JF;async function QF(){console.log(Vt(xi+xF+xi)),ut.notify(xF);let e=qce(),t=pce(e);if(t)throw t.message;await Fce(),await Gce(e);let r=await Hce(e);qi=r[te.INSTALL_PROMPTS.ROOTPATH],await Wn.pathExists(Fi.join(qi,te.HDB_CONFIG_FILE))&&(console.error(JA),process.exit());let s=mce({prefixText:Vt("Installing"),color:"magenta",spinner:"simpleDots"});if(s.start(),lc.isEmpty(qi))throw new Error("Installer should have the HDB root param at the stage it is in but it does not.");Gi.setHdbBasePath(qi),await Sce(qi),await xce(),await kce(r),ut.initLogSettings(!0),await JF(r),await Vce(r),await bce.generateKeys(),await Yce(),Rce(),s.stop(),console.log(Vt(xi+kF+xi)),ut.notify(kF)}a(QF,"install");async function Hce(e){ut.trace("Getting install prompts and params.");let t,r=[{type:"input",transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.ROOTPATH],Sr.DESTINATION),name:te.INSTALL_PROMPTS.ROOTPATH,prefix:Bi,default:Mce,validate:async n=>nn(n)?nn(n):await Wn.pathExists(Fi.join(n,"system","hdb_user.mdb"))?`'${n}' is already in use. Please enter a different path.`:!0,message:Vt(Sr.DESTINATION)},{type:"input",transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT],Sr.HDB_PORT),name:te.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT,prefix:Bi,default:Pce,validate:n=>Lce.test(n)?!0:"Invalid port.",message:Vt(Sr.HDB_PORT)},{type:"input",transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],Sr.HDB_USERNAME),name:te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME,prefix:Bi,default:vce,validate:n=>nn(n)?nn(n):(t=n,!0),message:Vt(Sr.HDB_USERNAME)},{type:"password",when:Hi(e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD],Sr.HDB_PASS),name:te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD,prefix:Bi,validate:n=>nn(n)?nn(n):!0,message:Vt(Sr.HDB_PASS)}];if(lc.autoCastBoolean(e[te.INSTALL_PROMPTS.CLUSTERING_ENABLED])===!0){let n=[{type:"input",transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.CLUSTERING_NODENAME],Sr.NODE_NAME),name:te.INSTALL_PROMPTS.CLUSTERING_NODENAME,prefix:Bi,default:hce.random(),validate:i=>Dce.test(i)?!0:"Invalid node name, must not contain ., * or >",message:Vt(Sr.NODE_NAME)},{type:"input",transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.CLUSTERING_USER],Sr.CLUSTER_USERNAME),name:te.INSTALL_PROMPTS.CLUSTERING_USER,prefix:Bi,default:Bce,validate:i=>nn(i)?nn(i):i.toLowerCase()===t.toLowerCase()?"Username is already in use.":!0,message:Vt(Sr.CLUSTER_USERNAME)},{type:"password",when:Hi(e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD],Sr.CLUSTER_PASS),name:te.INSTALL_PROMPTS.CLUSTERING_PASSWORD,prefix:Bi,validate:i=>nn(i)?nn(i):!0,message:Vt(Sr.CLUSTER_PASS)}];r.push(...n)}let s=await VF.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(Hce,"installPrompts");function Hi(e,t){return e!==void 0?(t.includes("password")?(console.log(`${Vt(t)} ${$o.gray("[hidden]")}`),ut.trace(`${Vt(t)} [hidden]`)):(console.log(`${Vt(t)} ${e}`),ut.trace(`${Vt(t)} ${e}`)),!1):!0}a(Hi,"displayCmdEnvVar");function nn(e){let t=e.replace(/ /g,"");if(t===""||t==="''"||t==='""')return"Value cannot be empty."}a(nn,"checkForEmptyValue");function qce(){let e=Object.keys(te.INSTALL_PROMPTS),t=zA(e),r=zA(Object.keys(te.CONFIG_PARAM_MAP),!0),s={};for(let n of e){let i=te.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(qce,"checkForPromptOverride");async function Fce(){ut.trace("Checking for existing install.");let e=lc.getPropsFilePath(),t=await Wn.pathExists(e),r;if(t){ut.trace(`Install found an existing boot prop file at:${e}`);let s=fce(e),n=WF.getConfigValue(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY)||s.get(te.BOOT_PROP_PARAMS.SETTINGS_PATH_KEY);r=await Wn.pathExists(n)}if(!t&&lc.noBootFile()&&(r=!0),r){if(ut.trace(`Install found existing HDB config at:${e}`),await YF.getVersionUpdateInfo()){let n=`Please use \`harperdb upgrade\` to update to ${KF.version()}. Exiting install...`;console.log(xi+$o.magenta.bold(wce)),console.log($o.magenta.bold(n)),ut.error(n)}else console.log(xi+$o.magenta.bold(JA)),ut.error(JA);process.exit(0)}}a(Fce,"checkForExistingInstall");async function Gce(e){ut.info("Asking for terms agreement.");let t=`Terms & Conditions can be found at ${yce}${xi}and can be viewed by typing or copying and pasting the URL into your web browser.${xi}I Agree to the HarperDB Terms and Conditions. (yes/no)`,r={prefix:Bi,transformer:uc,when:Hi(e[te.INSTALL_PROMPTS.TC_AGREEMENT],t),name:te.INSTALL_PROMPTS.TC_AGREEMENT,message:Vt(t),validate:n=>n.toLowerCase()==="yes"||n.toLowerCase()==="no"?!0:$o.yellow("Please enter 'yes' or 'no'")},s=await VF.prompt([r]);s[te.INSTALL_PROMPTS.TC_AGREEMENT]&&s[te.INSTALL_PROMPTS.TC_AGREEMENT].toLowerCase()!==Ice&&(console.log($o.yellow($F)),ut.error($F),process.exit(0))}a(Gce,"termsAgreement");async function xce(){let e=Fi.join(qi,te.HDB_CONFIG_FILE),t;try{t=jA.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}
105
+ install_user = ${t}`,s=lc.getHomeDir(),n=Fi.join(s,te.HDB_HOME_DIR_NAME),i=Fi.join(n,te.LICENSE_KEY_DIR_NAME);try{Wn.mkdirpSync(n,{mode:te.HDB_FILE_PERMISSIONS}),Wn.mkdirpSync(i,{mode:te.HDB_FILE_PERMISSIONS})}catch{console.error(`Could not make settings directory ${te.HDB_HOME_DIR_NAME} in home directory. Please check your permissions and try again.`)}let o=Fi.join(n,te.BOOT_PROPS_FILE_NAME);try{await Wn.writeFile(o,r)}catch(c){throw ut.error(`There was an error creating the boot file at path: ${o}`),c}Gi.setProperty(te.HDB_SETTINGS_NAMES.INSTALL_USER,`${t}`),Gi.setProperty(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,e),Gi.setProperty(Gi.BOOT_PROPS_FILE_PATH,o)}}a(xce,"createBootPropertiesFile");async function kce(e){ut.trace("Creating HarperDB config file");let t=zA(Object.keys(te.CONFIG_PARAM_MAP),!0);Object.assign(t,e);try{WF.createConfigFile(t),Gi.initSync()}catch(r){$ce(r)}}a(kce,"createConfigFile");function $ce(e){ut.error(`Error creating HarperDB config file. Rolling back install - ${e}`),console.error(e),console.error(Cce);let t=Fi.resolve(Gi.get(Gi.BOOT_PROPS_FILE_PATH),"../");t&&Wn.removeSync(t),qi&&Wn.removeSync(qi),process.exit(1)}a($ce,"rollbackInstall");async function zF(e,t){ut.trace("Creating admin user"),await Nce();let r;try{r=await gce.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 Tce.addUser(t)}catch(s){throw s.message=`Error creating user - ${s}`,s}}a(zF,"createAdminUser");async function JF(e){ut.trace("Creating Super user.");let t={role:"super_user",permission:{super_user:!0}},r={username:e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME].toString(),password:e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD].toString(),active:!0};await zF(t,r),delete e[te.INSTALL_PROMPTS.HDB_ADMIN_USERNAME],delete e[te.INSTALL_PROMPTS.HDB_ADMIN_PASSWORD]}a(JF,"createSuperUser");async function Vce(e){ut.trace("Creating Cluster user.");let t;e[te.INSTALL_PROMPTS.CLUSTERING_USER]&&e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]&&(t={username:e[te.INSTALL_PROMPTS.CLUSTERING_USER].toString(),password:e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD].toString(),active:!0}),await zF({role:"cluster_user",permission:{cluster_user:!0}},t),delete e[te.INSTALL_PROMPTS.CLUSTERING_USER],delete e[te.INSTALL_PROMPTS.CLUSTERING_PASSWORD]}a(Vce,"createClusterUser");async function Yce(){let e=KF.version();if(e)await YF.insertHdbInstallInfo(e);else throw new Error("The version is missing/removed from HarperDB package.json")}a(Yce,"insertHdbVersionInfo")});var eG=m((lAe,ZF)=>{"use strict";var XA=G(),qr=C(),XF=xA();ZF.exports={processDirectives:Kce};async function Kce(e){console.log("Starting upgrade process...");let t=XF.getVersionsForUpgrade(e),r=zce(t),s=[],n=r.length;for(let i=0;i<n;i++){let o=r[i],c=`Running upgrade for version ${o.version}`;qr.notify(c),console.log(c);let u=[],l=[];try{u=Wce(o.sync_functions)}catch(_){throw qr.error(`Error while running an upgrade script for ${o.version}`),_}try{l=await Qce(o.async_functions)}catch(_){throw qr.error(`Error while running an upgrade script for ${o.version}`),_}s.push(...u,...l)}return s}a(Kce,"processDirectives");function Wce(e){if(XA.isEmptyOrZeroLength(e))return qr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return qr.info("Passed parameter is not an array"),[];let t=[];for(let r of e){if(qr.info(`Running function ${r.name}`),!(r instanceof Function)){qr.info("Variable being processed is not a function");continue}let s=r();qr.info(s),t.push(s)}return t}a(Wce,"runSyncFunctions");async function Qce(e){if(XA.isEmptyOrZeroLength(e))return qr.info("No functions found to run for upgrade"),[];if(!Array.isArray(e))return qr.info("Passed parameter is not an array"),[];let t=[],r=e.length;for(let s=0;s<r;s++){let n=e[s];if(qr.info(`Running function ${n.name}`),!(n instanceof Function)){qr.info("Variable being processed is not a function");continue}let i=await n();qr.info(i),t.push(i)}return t}a(Qce,"runAsyncFunctions");function zce(e){if(XA.isEmptyOrZeroLength(e))return[];let t=[];for(let r of e){let s=XF.getDirectiveByVersion(r);s&&t.push(s)}return t}a(zce,"getUpgradeDirectivesToInstall")});var tO=m((dAe,oG)=>{"use strict";var Ah=Y();Ah.initSync();var nG=require("chalk"),tG=require("fs-extra"),zn=C(),Qn=R(),rG=Ki(),Jce=eG(),ZA=G(),iG=gh(),jce=dh(),sG=Qh(),Xce=Yr(),Zce=require("util").promisify,eue=Zce(Xce.setSchemaDataToGlobal),eO,{UPGRADE_VERSION:Oh}=Qn.UPGRADE_JSON_FIELD_NAMES_ENUM;oG.exports={upgrade:tue};async function tue(e){await eue(),eO===void 0&&(eO=ya()),tG.existsSync(Ah.get(Ah.BOOT_PROPS_FILE_PATH))||(Kl("The hdb_boot_properties file was not found. Please install HDB.",Qn.LOG_LEVELS.ERROR),process.exit(1)),tG.existsSync(Ah.get(Qn.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))||(Kl("The hdb settings file was not found. Please make sure HDB is installed.",Qn.LOG_LEVELS.ERROR),process.exit(1));let t=e;t||(t=await iG.getVersionUpdateInfo(),t||(console.log("HarperDB version is current"),process.exit(0))),Kl(`This version of HarperDB is ${rG.version()}`,Qn.LOG_LEVELS.INFO);let r=t[Oh]?t[Oh]:rG.version();r||(console.log(`Current Version field missing from the package.json file. Cannot continue with upgrade. If you need support, please contact ${Qn.HDB_SUPPORT_ADDRESS}`),zn.notify("Missing new version field from upgrade info object"),process.exit(1)),await rue();let s,n=0;try{s=await jce.forceUpdatePrompt(t)}catch(i){zn.error("There was an error when prompting user about upgrade."),zn.error(i),s=!1,n=1}s||(console.log("Cancelled upgrade, closing HarperDB"),process.exit(n)),zn.info(`Starting upgrade to version ${r}`),await sue(t),Kl(`HarperDB was successfully upgraded to version ${t[Oh]}`,Qn.LOG_LEVELS.INFO)}a(tue,"upgrade");async function rue(){let e=!1,t=await sG.findPs(Qn.HDB_PROC_NAME);if(ZA.isEmptyOrZeroLength(t)||(e=!0),!e){let r=await sG.findPs("hdb_express");ZA.isEmptyOrZeroLength(r)||(e=!0)}if(!e){let r=await eO.list();ZA.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(nG.red(r)),zn.error(r),process.exit(1)}}a(rue,"checkIfRunning");async function sue(e){try{await Jce.processDirectives(e)}catch(t){throw Kl("There was an error during the data upgrade. Please check the logs.",Qn.LOG_LEVELS.ERROR),t}try{await iG.insertHdbUpgradeInfo(e[Oh])}catch(t){zn.error("Error updating the 'hdb_info' system table."),zn.error(t)}}a(sue,"runUpgrade");function Kl(e,t=void 0){t||(t=zn.info),zn[t](e),console.log(nG.magenta(e))}a(Kl,"printToLogAndConsole")});var _G=m((fAe,lG)=>{"use strict";var{promises:sO,createReadStream:nue,createWriteStream:iue}=require("fs"),{createGzip:oue}=require("zlib"),{promisify:aue}=require("util"),{pipeline:cue}=require("stream"),uue=aue(cue),lue=require("path"),Yo=Y();Yo.initSync();var Vo=C(),{CONFIG_PARAMS:Wl,ITC_EVENT_TYPES:_ue}=R(),{onMessageFromWorkers:due}=rt(),Eue=6e4,fue="'interval' and 'maxSize' are both undefined, to enable logging rotation at least one of these values must be defined in harperdb-config.yaml",hue="'logging.rotation.path' is undefined, to enable logging rotation set this value in harperdb-config.yaml",rO,cG;lG.exports=uG;due(e=>{e.type===_ue.RESTART&&(Yo.initSync(!0),clearInterval(cG),Yo.get(Wl.LOGGING_ROTATION_ENABLED)&&uG())});async function uG(){try{let e=Vo.getLogFilePath(),t=Yo.get(Wl.LOGGING_ROTATION_MAXSIZE),r=Yo.get(Wl.LOGGING_ROTATION_INTERVAL);if(!t&&!r){Vo.error(fue);return}let s=Yo.get(Wl.LOGGING_ROTATION_PATH);if(!s){Vo.error(hue);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}rO=Date.now()/6e4,Vo.trace("Log rotate enabled, maxSize:",t,"interval:",r),cG=setInterval(async()=>{if(n){let o;o=await sO.stat(e),o.size>=n&&await aG(e,s)}i&&Date.now()/6e4-rO>=i&&(await aG(e,s),rO=Date.now()/6e4)},Eue).unref()}catch(e){Vo.error(e)}}a(uG,"logRotator");async function aG(e,t){let r=Yo.get(Wl.LOGGING_ROTATION_COMPRESS),s=lue.join(t,`HDB-${new Date(Date.now()).toISOString().replaceAll(":","-")}.${r?"log.gz":"log"}`);r?(await uue(nue(e),oue(),iue(s)),await sO.unlink(e)):await sO.rename(e,s),Vo.closeLogFile(),Vo.notify(`hdb.log rotated, old log moved to ${s}`)}a(aG,"moveLogFile")});var dc=m((NAe,SG)=>{"use strict";var ys=Y();ys.initSync();var mAe=wa(),lt=R(),Yt=C(),Ko=require("fs-extra"),_c=require("path"),mue=IA(),pue=Rh(),nO=require("chalk"),Sue=Yi(),ss=G(),dG=tt(),EG=$i(),Tue=pE(),gue=tO(),Rue=_G(),Aue=require("minimist"),{PACKAGE_ROOT:Oue}=R(),{startHTTPThreads:Nue,startSocketServer:pAe,mostIdleRouting:SAe,remoteAffinityRouting:TAe}=(Df(),re(UR)),bue=gh(),{isMainThread:yue}=require("worker_threads"),gAe=mn(),RAe=ri(),AAe=jp(),OAe=cu(),iO=R(),bs,Iue="Upgrade complete. Starting HarperDB.",wue="Got an error while trying to upgrade your HarperDB instance. Exiting HarperDB.",Cue="HarperDB not found, starting install process.",Lue="There was an error during install, check install_log.log for more details. Exiting.",Due="HarperDB successfully started.";async function fG(e=!1,t=!1){if(console.log(nO.magenta("Starting HarperDB...")),await pG()===!1){console.log(Cue);try{await pue()}catch(n){console.error(Lue,n),Yt.error(n),process.exit(1)}}await Ko.writeFile(_c.join(ys.get(iO.CONFIG_PARAMS.ROOTPATH),iO.HDB_PID_FILE),`${process.pid}`),Yt.info("HarperDB PID",process.pid),bs===void 0&&(bs=ya());let r;try{let n=await bue.getVersionUpdateInfo();n!==void 0&&(r=n[lt.UPGRADE_JSON_FIELD_NAMES_ENUM.UPGRADE_VERSION],await gue.upgrade(n),console.log(Iue))}catch(n){r?(console.error(`Got an error while trying to upgrade your HarperDB instance to version ${r}. Exiting HarperDB.`),Yt.error(n)):(console.error(wue),Yt.error(n)),process.exit(1)}if(!e){let n=EG(Object.keys(lt.CONFIG_PARAM_MAP),!0);!ss.isEmpty(n)&&!ss.isEmptyOrZeroLength(Object.keys(n))&&dG.updateConfigValue(void 0,void 0,n,!0,!0)}mue(),Mue(),ss.autoCastBoolean(ys.get(lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&yue&&await Tue.generateNatsConfig(t)}a(fG,"initialize");async function hG(e=!1){try{let t=Aue(process.argv);t.ROOTPATH&&dG.updateConfigObject("settings_path",_c.join(t.ROOTPATH,lt.HDB_CONFIG_FILE)),await fG(e,!0);let r=ss.autoCastBoolean(ys.get(lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY)),s=process.env.IS_SCRIPTED_SERVICE&&!t.service,n=r,i=ss.autoCastBoolean(ys.get(lt.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY));if(ss.isEmpty(t.service))await Nue(ys.get(iO.CONFIG_PARAMS.HTTP_THREADS)),n&&(s||await bs.startClusteringProcesses(),await bs.startClusteringThreads());else{if(typeof t.service!="string"){let c=`Run service argument expected a string but received: ${t.service}`;Yt.error(c),console.log(c),process.exit(1)}let o=t.service.split(",");for(let c of o){let u=c.toLowerCase();if(lt.PROCESS_DESCRIPTORS_VALIDATE[u]===void 0){Yt.error(`Run received unrecognized service command argument: ${u}`);continue}if(u===lt.PROCESS_DESCRIPTORS.CUSTOM_FUNCTIONS.toLowerCase()&&!i){Yt.error(`${u} is not enabled in settings`);continue}if(u.includes("clustering")&&!r){Yt.error(`${u} is not enabled in settings`);continue}u==="clustering"?await bs.startClusteringProcesses():await bs.startService(lt.PROCESS_DESCRIPTORS_VALIDATE[u]);let l=`${lt.PROCESS_DESCRIPTORS_VALIDATE[u]} successfully started.`;Yt.notify(l),console.log(l)}}ys.get(lt.CONFIG_PARAMS.LOGGING_ROTATION_ENABLED)&&await Rue(),s||mG()}catch(t){console.error(t),Yt.error(t),process.exit(1)}}a(hG,"main");function mG(){Yt.suppressLogging(()=>{console.log(nO.magenta(""+Ko.readFileSync(_c.join(Oue,"utility/install/ascii_logo.txt")))),console.log(nO.magenta(`|------------- HarperDB ${Sue.version} successfully started ------------|`))}),Yt.notify(Due)}a(mG,"started");async function Uue(){if(Pue())return hG();try{bs===void 0&&(bs=ya()),bs.enterPM2Mode(),await fG(),ss.autoCastBoolean(ys.get(lt.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY))&&await bs.startClusteringProcesses(),await bs.startService(lt.PROCESS_DESCRIPTORS.HDB),mG(),process.exit(0)}catch(e){console.error(e),Yt.error(e),process.exit(1)}}a(Uue,"launch");function Mue(){let e=_c.join(ys.getHdbBasePath(),lt.LICENSE_KEY_DIR_NAME,lt.LICENSE_FILE_NAME),t=_c.join(e,lt.LICENSE_FILE_NAME),r=_c.join(e,lt.REG_KEY_FILE_NAME);try{let{HARPERDB_FINGERPRINT:s,HARPERDB_LICENSE:n}=EG(["HARPERDB_FINGERPRINT","HARPERDB_LICENSE"]);if(ss.isEmpty(s)||ss.isEmpty(n))return;Ko.mkdirpSync(e),Ko.writeFileSync(r,s),Ko.writeFileSync(t,n)}catch(s){let n=`Failed to write license & fingerprint due to: ${s.message}`;console.error(n),Yt.error(n)}}a(Mue,"writeLicenseFromVars");SG.exports={launch:Uue,main:hG,isHdbInstalled:pG};async function pG(){try{await Ko.stat(ss.getPropsFilePath()),await Ko.stat(ys.get(lt.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY))}catch(e){if(ss.noBootFile())return!0;if(e.code==="ENOENT")return!1;throw Yt.error(`Error checking for HDB install - ${e}`),e}return!0}a(pG,"isHdbInstalled");function Pue(){return ss.autoCastBoolean(ys.get(lt.CONFIG_PARAMS.OPERATIONSAPI_FOREGROUND))}a(Pue,"getRunInForeground")});var gG=m((yAe,TG)=>{var vue=Rh(),Bue=C();TG.exports=Hue;async function Hue(){try{await vue()}catch(e){console.error("There was an error during the install."),console.error(e),Bue.error(e),process.exit(1)}}a(Hue,"install")});var OG=m((wAe,AG)=>{"use strict";var que=lE(),Fue=C(),RG="Registration failed.";async function Gue(){let e;try{e=await que.register()}catch(t){return Fue.error(`Registration error ${t}`),RG}return e||RG}a(Gue,"register");AG.exports={register:Gue}});var IG=m((LAe,yG)=>{"use strict";var xue=C(),kue=R(),$ue=require("util"),Vue=require("child_process"),NG=$ue.promisify(Vue.exec),Yue=In(),Ql=ya(),bG="Stopping HarperDB.";yG.exports=Kue;async function Kue(){if(console.log(bG),xue.notify(bG),await Ql.isServiceRegistered(kue.HDB_PROC_DESCRIPTOR)){Ql.enterPM2Mode();let r=await Ql.getUniqueServicesList();for(let s in r)await Ql.stop(s)}await Ql.kill();let t=await Yue.getHDBProcessInfo();t.clustering.forEach(r=>{NG(`kill ${r.pid}`)}),t.core.forEach(r=>{NG(`kill ${r.pid}`)})}a(Kue,"stop")});var UG=m((UAe,DG)=>{"use strict";var oO=require("fs-extra"),aO=require("path"),Wue=require("yaml"),zl=ze(),Jl=R(),wG=Pe(),CG=C(),Que=tr(),zue=oE(),Jue=nE(),jue=In(),LG=Y();LG.initSync();var on={RUNNING:"running",STOPPED:"stopped",ERRORED:"errored"},Tr={LEAF:"leaf server",HUB:"hub server"},Nh;DG.exports=Xue;async function Xue(){Nh=LG.get(Jl.CONFIG_PARAMS.ROOTPATH);let e={harperdb:{status:on.STOPPED}},t;try{t=Number.parseInt(await oO.readFile(aO.join(Nh,Jl.HDB_PID_FILE),"utf8"))}catch(s){throw s.code===Jl.NODE_ERROR_CODES.ENOENT?new Error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB"):s}let r=await jue.getHDBProcessInfo();for(let s of r.core)if(s.pid===t){e.harperdb.status=on.RUNNING,e.harperdb.pid=t;break}if(e.clustering=await Zue(r),e.clustering[Tr.HUB].status===on.RUNNING&&e.clustering[Tr.LEAF].status===on.RUNNING){let s=[],n=await zue({});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 Jue.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 zl.closeConnection()}console.log(Wue.stringify(e)),process.exit()}a(Xue,"status");async function Zue(e){let t={[Tr.HUB]:{},[Tr.LEAF]:{}};if(e.clustering.length===0)return t[Tr.HUB].status=on.STOPPED,t[Tr.LEAF].status=on.STOPPED,t;let{port:r}=zl.getServerConfig(Jl.PROCESS_DESCRIPTORS.CLUSTERING_HUB),{username:s,decrypt_hash:n}=await Que.getClusterUser();try{(await zl.createConnection(r,s,n,!1)).close(),t[Tr.HUB].status=on.RUNNING}catch{t[Tr.HUB].status=on.ERRORED}let{port:i}=zl.getServerConfig(Jl.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);try{(await zl.createConnection(i,s,n,!1)).close(),t[Tr.LEAF].status=on.RUNNING}catch{t[Tr.LEAF].status=on.ERRORED}try{t[Tr.HUB].pid=Number.parseInt(await oO.readFile(aO.join(Nh,"clustering",wG.PID_FILES.HUB),"utf8"))}catch(o){CG.error(o),t[Tr.HUB].pid=void 0}try{t[Tr.LEAF].pid=Number.parseInt(await oO.readFile(aO.join(Nh,"clustering",wG.PID_FILES.LEAF),"utf8"))}catch(o){CG.error(o),t[Tr.LEAF].pid=void 0}return t}a(Zue,"getHubLeafStatus")});var FG=m(()=>{"use strict";var ele=require("os"),Ih=require("https"),ki=require("fs-extra"),tle=require("yaml"),rle=require("human-readable-ids").hri,{pipeline:MG}=require("stream/promises"),{createWriteStream:wh,ensureDir:Ch}=require("fs-extra"),{join:an}=require("path"),lO=require("lodash"),sle=Y(),nle=In(),HG=C(),bh=tt(),{restart:ile}=wa(),qG=G(),PG=ze(),ole=Yr(),{isHdbInstalled:ale,main:cle}=dc(),ule=Rh(),_O=R(),{SYSTEM_TABLE_NAMES:vG,SYSTEM_SCHEMA_NAME:lle,CONFIG_PARAMS:jl,OPERATIONS_ENUM:Fr}=_O,_le=9925,dle="info",Ele=1e4,fle="clone-node-config.yaml",dO=[vG.ROLE_TABLE_NAME,vG.USER_TABLE_NAME],Xl=process.env.HDB_LEADER_USERNAME,Zl=process.env.HDB_LEADER_PASSWORD,e_=process.env.HDB_LEADER_URL,cO=process.env.HDB_LEADER_CLUSTERING_HOST,hle=process.env.HDB_LEADER_CLUSTERING_PORT,uO,we,_t,Xe,EO,Ec;async function mle(){if(await ale())throw new Error("Existing install of HarperDB found on clone node.");if(console.info("Cloning node: "+e_),we?.rootPath)Ec=we.rootPath;else try{Ec=process.env.ROOTPATH?process.env.ROOTPATH:an(ele.homedir(),_O.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=an(Ec,fle),we=tle.parseDocument(ki.readFileSync(e,"utf8"),{simpleKeys:!0}).toJSON()}catch{console.info(e+" not found, using default config values.")}EO=we?.clustering?.nodeName??rle.random(),_t=await Lh({operation:Fr.GET_CONFIGURATION}),_t=await JSON.parse(_t.body),global.fetch?(await gle(),process.env.NODE_TLS_REJECT_UNAUTHORIZED&&delete process.env.NODE_TLS_REJECT_UNAUTHORIZED):await Tle(),await Sle(),await ple(),await Rle(),await Ale(),console.info("Successfully cloned node: "+e_)}a(mle,"cloneNode");async function ple(){console.info("Cloning configuration"),uO=_t?.clustering?.enabled;let e={[jl.ROOTPATH]:Ec};if(uO&&we?.clustering?.enabled!==!1){if(cO==null)throw new Error("'HDB_LEADER_CLUSTERING_HOST' must be defined");e[jl.CLUSTERING_ENABLED]=!0;let s=_t?.clustering?.hubServer?.cluster?.network?.routes,n=parseInt(hle)||_t?.clustering?.hubServer?.cluster?.network?.port;e[jl.CLUSTERING_USER]=_t?.clustering?.user;let i=sle.get(jl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES);Array.isArray(i)?i.push({host:cO,port:n}):i=[{host:cO,port:n}],Array.isArray(s)&&i.concat(s),e[jl.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES]=i}let t=we?.componentConfig?.exclude;t=t?t.reduce((s,n)=>({...s,[n.name]:!0}),{}):[];for(let s in _t)_t[s]?.package&&!t[s]&&await bh.addConfig(s,_t[s]);we?.databases&&await bh.addConfig("databases",_t?.schemas);let r=bh.flattenConfig(we);for(let s in r){let n=_O.CONFIG_PARAM_MAP[s.toLowerCase()];n&&(e[n]=r[s])}e.rootPath==null&&delete e.rootPath,e?.clustering_nodeName==null&&(e.clustering_nodeName=EO),HG.info("Cloning config:",e),lO.isEmpty(e)||await bh.updateConfigValue(void 0,void 0,e,!1,!0)}a(ple,"cloneConfig");async function Sle(){if(console.info("Clone node installing HarperDB."),process.env.TC_AGREEMENT="yes",process.env.ROOTPATH=Ec,!Xl)throw new Error("HDB_LEADER_USERNAME is undefined.");if(process.env.HDB_ADMIN_USERNAME=Xl,!Zl)throw new Error("HDB_LEADER_PASSWORD is undefined.");process.env.HDB_ADMIN_PASSWORD=Zl,process.env.OPERATIONSAPI_NETWORK_PORT=we?.operationsApi?.network?.port??_le,process.env.CLUSTERING_NODENAME=EO,process.env.CLUSTERING_LOGLEVEL=we?.clustering?.logLevel??dle,await ule()}a(Sle,"installHDB");async function Tle(){console.info("Cloning system database");let e=fc("system");await Ch(e);let t=an(e,"system.mdb"),r=wh(t,{overwrite:!0}),s=await BG({operation:Fr.GET_BACKUP,database:"system",tables:dO},r);await ki.utimes(t,Date.now(),new Date(s.date)),Xe=await Lh({operation:Fr.DESCRIBE_ALL}),Xe=await JSON.parse(Xe.body);let n=we?.databaseConfig?.excludeDatabases;if(n=n?n.reduce((o,c)=>({...o,[c.database]:!0}),{}):{},_t.schemas)for(let o in _t.schemas)Object.keys(_t.schemas[o]).includes("tables")&&(n[o]=!0,console.info(`Excluding database '${o}' from clone because leader node has custom pathing configured for one or more of its tables`));let i=we?.databaseConfig?.excludeTables;i=i?i.reduce((o,c)=>({...o,[c.database==null?null:c.database+c.table]:!0}),{}):{};for(let o in Xe){if(n[o]){Xe[o]="excluded";continue}if(lO.isEmpty(Xe[o]))continue;let c=[],u=!1;for(let h in Xe[o])i[o+h]?(u=!0,Xe[o][h]="excluded"):c.push(h);let l;u?(console.info(`Cloning database: ${o} tables: ${c}`),l={operation:Fr.GET_BACKUP,database:o,tables:c}):(console.info(`Cloning database: ${o}`),l={operation:Fr.GET_BACKUP,database:o});let _=fc(o);await Ch(_);let d=an(_,o+".mdb"),E=wh(d,{overwrite:!0}),f=await BG(l,E);await ki.utimes(d,Date.now(),new Date(f.date))}}a(Tle,"cloneTables");async function gle(){console.info("Cloning system database");let e=await yh({operation:Fr.GET_BACKUP,database:"system",tables:dO},!0),t=fc("system");await Ch(t);let r=an(t,"system.mdb");await MG(e.body,wh(r,{overwrite:!0})),await ki.utimes(r,Date.now(),new Date(e.headers.get("date"))),Xe=await yh({operation:Fr.DESCRIBE_ALL}),Xe=await Xe.json();let s=we?.databaseConfig?.excludeDatabases;if(s=s?s.reduce((i,o)=>({...i,[o.database]:!0}),{}):{},_t.schemas)for(let i in _t.schemas)Object.keys(_t.schemas[i]).includes("tables")&&(s[i]=!0,console.info(`Excluding database '${i}' from clone because leader node has custom pathing configured for one or more of its tables`));let n=we?.databaseConfig?.excludeTables;n=n?n.reduce((i,o)=>({...i,[o.database==null?null:o.database+o.table]:!0}),{}):{};for(let i in Xe){if(s[i]){Xe[i]="excluded";continue}if(lO.isEmpty(Xe[i]))continue;let o=[],c=!1;for(let f in Xe[i])n[i+f]?(c=!0,Xe[i][f]="excluded"):o.push(f);let u;c?(console.info(`Cloning database: ${i} tables: ${o}`),u=await yh({operation:Fr.GET_BACKUP,database:i,tables:o},!0)):(console.info(`Cloning database: ${i}`),u=await yh({operation:Fr.GET_BACKUP,database:i},!0));let l=fc(i);await Ch(l);let _=new Date(u.headers.get("date")),d=an(l,`${_.getTime()}-${i}.mdb`);await MG(u.body,wh(d,{overwrite:!0}));let E=an(l,i+".mdb");await ki.rename(d,E),await ki.utimes(E,Date.now(),_)}}a(gle,"cloneTablesFetch");async function yh(e,t=!1){let r=we?.httpsRejectUnauthorized??!1,s=new Ih.Agent({rejectUnauthorized:r});r||(process.env.NODE_TLS_REJECT_UNAUTHORIZED="0");let i={Authorization:"Basic "+Buffer.from(Xl+":"+Zl).toString("base64"),"Content-Type":"application/json"};t&&(i["Accept-Encoding"]="gzip");let o=await fetch(e_,{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(yh,"leaderHttpReqFetch");function fc(e){return we?.databases&&we?.databases[e]?.path||we?.storage&&we?.storage?.path||an(Ec,"database")}a(fc,"getDbFileDir");async function Rle(){let{deployComponent:e}=ME(),t=await Lh({operation:Fr.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(we?.componentConfig?.exclude){for(let o of we.componentConfig.exclude)if(o?.name!=null&&o.name===n.name){i=!0;break}}i||r.push(n.name)}let s=we?.componentConfig?.skipNodeModules!==!1;for(let n of r){console.info("Cloning component: "+n);let i=await Lh({operation:Fr.PACKAGE_COMPONENT,project:n,skip_node_modules:s}),{payload:o}=await JSON.parse(i.body);await e({payload:o,project:n})}}}a(Rle,"cloneComponents");async function Ale(){if(!uO)return;let e=await nle.getHDBProcessInfo();e.clustering.length===0||e.core.length===0?await cle():(console.info(await ile({operation:Fr.RESTART})),await qG.async_set_timeout(Ele)),console.info("Clustering cloned tables");let t=we?.clusteringConfig?.subscribeToLeaderNode!==!1,r=we?.clusteringConfig?.publishToLeaderNode!==!1;await ole.setSchemaDataToGlobalAsync();let s=Mu(),n=[],i=await ki.stat(an(fc("system"),"system.mdb"));for(let o of dO)n.push({schema:lle,table:o,subscribe:t,publish:r,start_time:i.mtime.toISOString()});for(let o in Xe){if(Xe[o]==="excluded")continue;let c=await ki.stat(an(fc(o),o+".mdb"));for(let u in Xe[o])Xe[o][u]!=="excluded"&&n.push({schema:o,table:u,subscribe:t,publish:r,start_time:c.mtime.toISOString()})}await PG.createTableStreams(n),HG.info("Sending add_node request to node:",_t?.clustering?.nodeName,"with subscriptions:",n),await s({operation:Fr.ADD_NODE,node_name:_t?.clustering?.nodeName,subscriptions:n},!0),await PG.closeConnection()}a(Ale,"clusterTables");async function Lh(e){let t=new Ih.Agent({rejectUnauthorized:we?.httpsRejectUnauthorized??!1}),s={Authorization:"Basic "+Buffer.from(Xl+":"+Zl).toString("base64"),"Content-Type":"application/json"},n=new URL(e_),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 qG.httpRequest(i,e)}a(Lh,"leaderHttpReq");async function BG(e,t){let r=new Ih.Agent({rejectUnauthorized:we?.httpsRejectUnauthorized??!1}),n={Authorization:"Basic "+Buffer.from(Xl+":"+Zl).toString("base64"),"Content-Type":"application/json"},i=new URL(e_),o={protocol:i.protocol,host:i.hostname,method:"POST",headers:n};return i.protocol==="https:"&&(o.agent=r),i.port&&(o.port=i.port),new Promise((c,u)=>{let l=Ih.request(o,_=>{_.pipe(t),_.on("end",()=>{t.close(),c(_.headers)})});l.on("error",_=>{u(_)}),l.write(JSON.stringify(e)),l.end()})}a(BG,"leaderHttpStream");mle().then().catch(e=>{console.log(e)})});var hc=C(),Ole=Ki(),fO=R(),Dh=require("fs"),GG=require("path"),HAe=require("os"),{PACKAGE_ROOT:Nle}=R(),ble=XO(),qAe=Y(),yle=(Df(),re(UR)),{SERVICE_ACTIONS_ENUM:Is}=fO;Ile();function Ile(){let e=ble();if(e)if(e.error){console.error(e.error),hc.error(e.error);return}else e.warn&&(console.warn(e.warn),hc.warn(e.warn));let t;Dh.readdir(GG.join(Nle,"bin"),r=>{if(r)return hc.error(r);process.argv&&process.argv[2]&&!process.argv[2].startsWith("-")&&(t=process.argv[2].toLowerCase());let s;switch(t){case Is.DEBUG:require("inspector").open(9229),yle.debugMode=!0;case Is.RUN:let n=process.argv[3];n&&n[0]!=="-"&&(Dh.existsSync(n)||(console.error(`The folder ${n} does not exist`),process.exit(1)),Dh.statSync(n).isDirectory()||(console.error(`The path ${n} is not a folder`),process.exit(1)),Dh.existsSync(GG.join(n,fO.HDB_CONFIG_FILE))?process.env.ROOTPATH=n:process.env.RUN_HDB_APP=n),dc().main();break;case Is.START:s=dc().launch();break;case Is.INSTALL:gG()().then(()=>dc().main(!0)).catch(E=>{console.error(E)});break;case Is.REGISTER:OG().register().then(E=>{console.log(E)}).catch(E=>{console.error(E)});break;case Is.STOP:IG()().then(()=>{process.exit(0)}).catch(E=>{console.error(E)});break;case Is.RESTART:wa().restart({}).then().catch(E=>{hc.error(E),console.error(`There was an error restarting harperdb. ${E}`),process.exit(1)});break;case Is.VERSION:Ole.printVersion();break;case Is.UPGRADE:hc.setLogLevel(fO.LOG_LEVELS.INFO),tO().upgrade(null).then(()=>{console.log("Your instance of HDB is up to date!")}).catch(E=>{hc.error(`Got an error during upgrade ${E}`)});break;case Is.STATUS:UG()().then().catch(E=>{console.error(E)});break;case void 0:process.env.HDB_LEADER_URL?FG():dc().main();break;default:console.warn(`The "${t}" command is not understood.`);case Is.HELP:console.log(`
106
106
  Usage: harperdb [command]
107
107
 
108
108
  With no command, harperdb will simply run HarperDB (in the foreground)
@@ -117,4 +117,4 @@ Commands:
117
117
  install - Install harperdb
118
118
  register - Register harperdb
119
119
  upgrade - Upgrade harperdb
120
- status - Print the status of HarperDB and clustering`)}})}a(yle,"harperDBService");
120
+ status - Print the status of HarperDB and clustering`)}})}a(Ile,"harperDBService");