harperdb 4.2.0-alpha.11 → 4.2.0-alpha.13

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.
@@ -1,26 +1,26 @@
1
- "use strict";var wB=Object.create;var Vo=Object.defineProperty;var CB=Object.getOwnPropertyDescriptor;var UB=Object.getOwnPropertyNames;var DB=Object.getPrototypeOf,LB=Object.prototype.hasOwnProperty;var a=(e,t)=>Vo(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var r in t)Vo(e,r,{get:t[r],enumerable:!0})},JT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UB(t))!LB.call(e,n)&&n!==r&&Vo(e,n,{get:()=>t[n],enumerable:!(s=CB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?wB(DB(e)):{},JT(t||!e||!e.__esModule?Vo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>JT(Vo({},"__esModule",{value:!0}),e);var jT=m((Ote,ZT)=>{var MB=require("fast-glob"),{statSync:oE,existsSync:aE,readFileSync:PB,writeFileSync:vB}=require("fs"),{spawnSync:BB,spawn:HB}=require("child_process"),{isMainThread:qB}=require("worker_threads"),{join:bs,relative:XT}=require("path"),{PACKAGE_ROOT:mr}=g(),{tmpdir:FB}=require("os");require("source-map-support").install();var GB=["resources","server","dataLayer"],$o="ts-build",cE,xB=__filename.endsWith("tsBuild.js");if(xB){if(qB){let r;try{oE(bs(mr,$o)),r=!0}catch{}if(r)for(let s of MB.sync(GB.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=oE(bs(mr,s)).mtimeMs-5e3,i=oE(bs(mr,$o,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."),cE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),cE=!0;if(cE){let s=BB(process.argv[0],[bs(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=bs(FB(),"harperdb-tsc.pid"),i;if(aE(n))try{process.kill(+PB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=HB(process.argv[0],[bs(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});vB(n,o.pid.toString()),o.unref()}}}}let e=ZT.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=XT(mr,s[0]),o;i.startsWith($o)?o=bs(mr,XT($o,i)):o=bs(mr,$o,i);let c=bs(o,r),u=c+".js";if(aE(u))return u;if(c.includes(".")&&aE(c))return c}return t(r,s,n)}}});var g=m((yte,ER)=>{"use strict";var Sr=require("path"),kB=require("fs"),{relative:Nte,join:bte}=Sr,{existsSync:VB}=kB;function $B(){let e=__dirname;for(;!VB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a($B,"getHDBPackageRoot");var an=$B(),eR="js",au=eR,YB="harperdb-config.yaml",KB="defaultConfig.yaml",WB="hdb",tR=`harperdb.${au}`,rR=`customFunctionsServer.${au}`,QB=`restartHdb.${au}`,lE="HarperDB",ou="Custom Functions",cu="Clustering Hub",uu="Clustering Leaf",zB="Clustering Ingest Service",JB="Clustering Reply Service",XB="foreground.pid",ZB="hdb.pid",jB="data",eH={HDB:lE,CLUSTERING_HUB:cu,CLUSTERING_LEAF:uu,CLUSTERING_INGEST_SERVICE:zB,CLUSTERING_REPLY_SERVICE:JB,CUSTOM_FUNCTIONS:ou,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"},tH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},rH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},sH={harperdb:lE,"clustering hub":cu,"clustering leaf":uu,"custom functions":ou,custom_functions:ou,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},nH={CLUSTERING_HUB_PROC_DESCRIPTOR:cu,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu},uE={HDB:Sr.join(an,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(an,"server/customFunctions"),CLUSTERING_HUB:Sr.join(an,"server/nats"),CLUSTERING_LEAF:Sr.join(an,"server/nats")},iH={HDB:Sr.join(uE.HDB,tR),CUSTOM_FUNCTIONS:Sr.join(uE.CUSTOM_FUNCTIONS,rR)},oH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(an,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(an,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(an,"launchServiceScripts/launchUpdateNodes4-0-0.js")},aH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},sR="support@harperdb.io",cH="customer-success@harperdb.io",nR=1,uH=4141,iR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",lH="https://www.harperdb.io/product",_H=`For support, please submit a request at ${iR} or contact ${sR}`,oR=`For license support, please contact ${cH}`,dH="None of the specified records were found.",EH="hash attribute not found",fH=`Your current license only supports ${nR} role. ${oR}`,hH="Your current license only supports 3 connections to a node.",mH="127.0.0.1",SH=1,pH=/^\.$/,TH=/^\.\.$/,RH="U+002E",gH=/\//g,AH="U+002F",OH=/U\+002F/g,NH=/^U\+002E$/,bH=/^U\+002EU\+002E$/,yH="d",IH=999999,wH="*",CH="--max-old-space-size=",UH="system",DH="__hdb_hash",LH=".harperdb",MH=".hdb",PH="keys",vH="hdb_boot_properties.file",BH=".updateConfig.json",HH="SIGTSTP",qH=24,FH=6e4,GH=448,xH="blob",kH="trash",VH="database",$H="schema",YH="transactions",KH=".count",WH="id",QH="PROCESS_NAME",aR={SETTINGS_PATH_KEY:"settings_path"},cR=require("lodash"),zH={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"},JH={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},XH={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ZH={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"},jH={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:",e0={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"},t0={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"},r0="060493.ks",s0=".license",n0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={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"},i0={CSV:".csv",JSON:".json"},o0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},a0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Yo={};Yo[$.INSERT]=$.INSERT;Yo[$.UPDATE]=$.UPDATE;Yo[$.UPSERT]=$.UPSERT;Yo[$.DELETE]=$.DELETE;var Ae=Object.create(null);Ae[$.DESCRIBE_ALL]=$.DESCRIBE_ALL;Ae[$.DESCRIBE_TABLE]=$.DESCRIBE_TABLE;Ae[$.DESCRIBE_SCHEMA]=$.DESCRIBE_SCHEMA;Ae[$.READ_LOG]=$.READ_LOG;Ae[$.ADD_NODE]=$.ADD_NODE;Ae[$.LIST_USERS]=$.LIST_USERS;Ae[$.LIST_ROLES]=$.LIST_ROLES;Ae[$.USER_INFO]=$.USER_INFO;Ae[$.SQL]=$.SQL;Ae[$.GET_JOB]=$.GET_JOB;Ae[$.SEARCH_JOBS_BY_START_DATE]=$.SEARCH_JOBS_BY_START_DATE;Ae[$.DELETE_FILES_BEFORE]=$.DELETE_FILES_BEFORE;Ae[$.EXPORT_LOCAL]=$.EXPORT_LOCAL;Ae[$.EXPORT_TO_S3]=$.EXPORT_TO_S3;Ae[$.CLUSTER_STATUS]=$.CLUSTER_STATUS;Ae[$.REMOVE_NODE]=$.REMOVE_NODE;Ae[$.RESTART]=$.RESTART;Ae[$.CUSTOM_FUNCTIONS_STATUS]=$.CUSTOM_FUNCTIONS_STATUS;Ae[$.GET_CUSTOM_FUNCTIONS]=$.GET_CUSTOM_FUNCTIONS;Ae[$.GET_CUSTOM_FUNCTION]=$.GET_CUSTOM_FUNCTION;Ae[$.SET_CUSTOM_FUNCTION]=$.SET_CUSTOM_FUNCTION;Ae[$.DROP_CUSTOM_FUNCTION]=$.DROP_CUSTOM_FUNCTION;Ae[$.ADD_CUSTOM_FUNCTION_PROJECT]=$.ADD_CUSTOM_FUNCTION_PROJECT;Ae[$.DROP_CUSTOM_FUNCTION_PROJECT]=$.DROP_CUSTOM_FUNCTION_PROJECT;Ae[$.PACKAGE_CUSTOM_FUNCTION_PROJECT]=$.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[$.DEPLOY_CUSTOM_FUNCTION_PROJECT]=$.DEPLOY_CUSTOM_FUNCTION_PROJECT;var c0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},u0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},uR={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"},l0=cR.invert(uR),R={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"},lR={settings_path:aR.SETTINGS_PATH_KEY,hdb_root_key:R.ROOTPATH,hdb_root:R.ROOTPATH,server_port_key:R.OPERATIONSAPI_NETWORK_PORT,server_port:R.OPERATIONSAPI_NETWORK_PORT,cert_key:R.OPERATIONSAPI_TLS_CERTIFICATE,certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:R.OPERATIONSAPI_NETWORK_HTTPS,https_on:R.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:R.OPERATIONSAPI_NETWORK_CORS,cors_on:R.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:R.LOGGING_LEVEL,log_level:R.LOGGING_LEVEL,log_path_key:R.LOGGING_ROOT,log_path:R.LOGGING_ROOT,props_env_key:R.OPERATIONSAPI_NODEENV,node_env:R.OPERATIONSAPI_NODEENV,clustering_node_name_key:R.CLUSTERING_NODENAME,node_name:R.CLUSTERING_NODENAME,clustering_enabled_key:R.CLUSTERING_ENABLED,clustering:R.CLUSTERING_ENABLED,max_http_threads:R.HTTP_THREADS,max_hdb_processes:R.HTTP_THREADS,server_timeout_key:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:R.LOGGING_AUDITLOG,disable_transaction_log:R.LOGGING_AUDITLOG,operation_token_timeout_key:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:R.CUSTOMFUNCTIONS_ENABLED,custom_functions:R.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:R.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:R.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:R.HTTP_THREADS,log_to_file:R.LOGGING_FILE,log_to_stdstreams:R.LOGGING_STDSTREAMS,run_in_foreground:R.OPERATIONSAPI_FOREGROUND,local_studio_on:R.LOCALSTUDIO_ENABLED,clustering_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:R.CLUSTERING_USER,clustering_enabled:R.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:R.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:R.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:R.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:R.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:R.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:R.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:R.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:R.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:R.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:R.CLUSTERING_NODENAME,clustering_tls_certificate:R.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:R.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:R.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:R.CLUSTERING_TLS_INSECURE,clustering_tls_verify:R.CLUSTERING_TLS_VERIFY,clustering_loglevel:R.CLUSTERING_LOGLEVEL,clustering_republishmessages:R.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:R.CLUSTERING_DATABASELEVEL,customfunctions_enabled:R.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:R.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:R.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:R.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:R.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:R.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:R.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:R.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:R.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:R.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:R.CUSTOMFUNCTIONS_NODEENV,http_threads:R.HTTP_THREADS,http_session_affinity:R.HTTP_SESSION_AFFINITY,customfunctions_processes:R.HTTP_THREADS,customfunctions_root:R.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:R.LOCALSTUDIO_ENABLED,logging_file:R.LOGGING_FILE,logging_level:R.LOGGING_LEVEL,logging_root:R.LOGGING_ROOT,logging_rotation_enabled:R.LOGGING_ROTATION_ENABLED,logging_rotation_compress:R.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:R.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:R.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:R.LOGGING_ROTATION_PATH,logging_stdstreams:R.LOGGING_STDSTREAMS,logging_auditlog:R.LOGGING_AUDITLOG,logging_auditretention:R.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:R.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:R.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:R.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:R.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:R.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:R.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:R.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:R.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:R.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:R.OPERATIONSAPI_NODEENV,operationsapi_root:R.ROOTPATH,schemas:R.SCHEMAS,storage_path:R.STORAGE_PATH,ignorescripts:R.IGNORE_SCRIPTS,mqtt_network_port:R.MQTT_NETWORK_PORT,mqtt_websocket:R.MQTT_WEBSOCKET,mqtt_network_secureport:R.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:R.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:R.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:R.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:R.AUTHENTICATION_CACHETTL,authentication_enablesessions:R.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in R){let t=R[e];lR[t.toLowerCase()]=t}var _0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},d0={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.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"},E0={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"},f0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},h0={VERSION_DEFAULT:"2.2.0"},m0={DEVELOPMENT:8192,DEFAULT:512},S0={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"},p0={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"},T0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},_R={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},R0=Symbol("metadata"),g0="__clustering__",A0=Object.values(_R),O0=15984864e5,dR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},N0=cR.invert(dR),b0={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"},y0=111,I0=`\r
2
- `,w0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},C0=["*","%"],U0="unauthorized_access",D0="func_val",L0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},M0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},P0={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"},v0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},B0={HTTP:"http"},H0={STOPPED:"stopped",ONLINE:"online"},q0="3.x.x",F0={SUCCESS:"success",FAILURE:"failure"},G0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};ER.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:sR,HDB_SUPPORT_URL:iR,HDB_PRICING_URL:lH,SUPPORT_HELP_MSG:_H,LICENSE_HELP_MSG:oR,HDB_PROC_NAME:tR,HDB_PROC_DESCRIPTOR:lE,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:UH,HASH_FOLDER_NAME:DH,HDB_HOME_DIR_NAME:LH,UPDATE_FILE_NAME:BH,LICENSE_KEY_DIR_NAME:PH,BOOT_PROPS_FILE_NAME:vH,JOB_TYPE_ENUM:d0,JOB_STATUS_ENUM:n0,SYSTEM_TABLE_NAMES:ZH,SYSTEM_TABLE_HASH_ATTRIBUTES:jH,OPERATIONS_ENUM:$,VALID_S3_FILE_TYPES:i0,S3_BUCKET_AUTH_KEYS:o0,VALID_SQL_OPS_ENUM:a0,GEO_CONVERSION_ENUM:u0,HDB_SETTINGS_NAMES:uR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:l0,SERVICE_ACTIONS_ENUM:c0,CLUSTER_MESSAGE_TYPE_ENUM:E0,CLUSTER_CONNECTION_DIRECTION_ENUM:f0,CLUSTER_EVENTS_DEFS_ENUM:S0,PERIOD_REGEX:pH,DOUBLE_PERIOD_REGEX:TH,UNICODE_PERIOD:RH,FORWARD_SLASH_REGEX:gH,UNICODE_FORWARD_SLASH:AH,ESCAPED_FORWARD_SLASH_REGEX:OH,ESCAPED_PERIOD_REGEX:NH,ESCAPED_DOUBLE_PERIOD_REGEX:bH,REG_KEY_FILE_NAME:r0,RESTART_TIMEOUT_MS:FH,HDB_FILE_PERMISSIONS:GH,DATABASES_DIR_NAME:VH,LEGACY_DATABASES_DIR_NAME:$H,TRANSACTIONS_DIR_NAME:YH,LIMIT_COUNT_NAME:KH,ID_ATTRIBUTE_STRING:WH,INSERT_MODULE_ENUM:JH,UPGRADE_JSON_FIELD_NAMES_ENUM:XH,RESTART_CODE:HH,RESTART_CODE_NUM:qH,CLUSTER_OPERATIONS:Yo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:t0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:e0,CLUSTERING_MESSAGE_TYPES:b0,HDB_FILE_SUFFIX:MH,BLOB_FOLDER_NAME:xH,HDB_TRASH_DIR:kH,ORIGINATOR_SET_VALUE:y0,LICENSE_VALUES:h0,RAM_ALLOCATION_ENUM:m0,TIME_STAMP_NAMES_ENUM:_R,TIME_STAMP_NAMES:A0,PERMS_UPDATE_RELEASE_TIMESTAMP:O0,SEARCH_NOT_FOUND_MESSAGE:dH,SEARCH_ATTRIBUTE_NOT_FOUND:EH,LICENSE_ROLE_DENIED_RESPONSE:fH,LICENSE_MAX_CONNS_REACHED:hH,BASIC_LICENSE_MAX_NON_CU_ROLES:nR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:uH,VALUE_SEARCH_COMPARATORS:dR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:N0,LICENSE_FILE_NAME:s0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:p0,NEW_LINE:I0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:SH,MOMENT_DAYS_TAG:yH,API_TURNOVER_SEC:IH,LOOPBACK:mH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:wH,NODE_ERROR_CODES:T0,JAVASCRIPT_EXTENSION:eR,PERMS_CRUD_ENUM:w0,UNAUTHORIZED_PERMISSION_NAME:U0,SEARCH_WILDCARDS:C0,FUNC_VAL:D0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:L0,JWT_ENUM:M0,CLUSTERING_FLAG:g0,ITC_EVENT_TYPES:P0,CUSTOM_FUNCTION_PROC_NAME:rR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:v0,THREAD_TYPES:B0,MEM_SETTING_KEY:CH,HDB_RESTART_SCRIPT:QB,PROCESS_DESCRIPTORS:eH,SERVICE_SERVERS:iH,SERVICE_SERVERS_CWD:uE,PROCESS_DESCRIPTORS_VALIDATE:sH,LAUNCH_SERVICE_SCRIPTS:oH,LOG_LEVELS:rH,PROCESS_NAME_ENV_PROP:QH,LOG_NAMES:tH,PM2_PROCESS_STATUSES:H0,CONFIG_PARAM_MAP:lR,CONFIG_PARAMS:R,HDB_CONFIG_FILE:YB,HDB_DEFAULT_CONFIG_FILE:KB,ROLE_TYPES_ENUM:aH,BOOT_PROP_PARAMS:aR,INSTALL_PROMPTS:zH,HDB_ROOT_DIR_NAME:WB,CLUSTERING_PROCESSES:nH,FOREGROUND_PID_FILE:XB,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:q0,SCHEMAS_PARAM_CONFIG:_0,METADATA_PROPERTY:R0,AUTH_AUDIT_STATUS:F0,AUTH_AUDIT_TYPES:G0,HDB_PID_FILE:ZB,DEFAULT_DATABASE_NAME:jB};jT()});var _E=m((wte,mR)=>{"use strict";var fR=require("minimist");mR.exports=x0;function x0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=hR(process.env),s=hR(fR(process.argv))):(r=process.env,s=fR(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(x0,"assignCMDENVVariables");function hR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(hR,"objKeysToLowerCase")});var F=m((Ute,pE)=>{"use strict";var Fn=require("fs-extra"),{workerData:k0,threadId:V0}=require("worker_threads"),ws=require("path"),TR=require("yaml"),RR=require("properties-reader"),je=g(),SR=_E(),$0=require("os"),{PACKAGE_ROOT:EE}=g(),{_assignPackageExport:Y0}=require("../index"),Wo={};for(let e in console)Wo[e]||(Wo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},gR={STDOUT:"stdOut",STDERR:"stdErr"},K0=ws.join(EE,"logs"),W0=ws.join(EE,"config/yaml/",je.HDB_DEFAULT_CONFIG_FILE),Q0=1e4,ys,Is,Lt,lu,_u,Qo,Pi,Ko;Ko===void 0&&AR();pE.exports={notify:bR,fatal:yR,error:zo,warn:SE,info:du,debug:mE,trace:hE,setLogLevel:tq,log_level:Lt,loggerWithTag:z0,suppressLogging:J0,initLogSettings:AR,setupConsoleLogging:OR,logCustomLevel:j0,closeLogFile:fE,getLogFilePath:()=>Qo,OUTPUTS:gR,AuthAuditLog:nq};Y0("logger",pE.exports);function AR(e=!1){try{if(Ko===void 0||e){fE();let t=eq(),r=SR(["ROOTPATH"]);try{Ko=RR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(ws.join(r.ROOTPATH,je.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:_u,to_file:ys,to_stream:Is}=rq(r.ROOTPATH?ws.join(r.ROOTPATH,je.HDB_CONFIG_FILE):Ko.get("settings_path"))),lu=je.LOG_NAMES.HDB,Qo=ws.join(_u,lu)}}catch(t){if(Ko=void 0,t.code===je.NODE_ERROR_CODES.ENOENT){let r=SR(Object.keys(je.CONFIG_PARAM_MAP),!0);for(let o in r){let c=je.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===je.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===je.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===je.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=sq();ys=ys===void 0?n:ys,ys=pR(ys),Is=Is===void 0?i:Is,Is=pR(Is),Lt=Lt===void 0?s:Lt,_u=K0,lu=je.LOG_NAMES.INSTALL,Qo=ws.join(_u,lu);return}throw zo("Error initializing log settings"),zo(t),t}OR()}a(AR,"initLogSettings");var dE=!0;function OR(){Mi("error",zo),Mi("warn",SE),Mi("log",du),Mi("info",du),Mi("debug",mE),Mi("trace",hE)}a(OR,"setupConsoleLogging");function Mi(e,t){console[e]=function(...r){if(dE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Wo[e](...r)}}a(Mi,"logConsole");function z0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(bR),fatal:r(yR),error:r(zo),warn:r(SE),info:r(du),debug:r(mE),trace:r(hE)};function r(s){return function(...n){return s(t,...n)}}}a(z0,"loggerWithTag");function J0(e){try{dE=!1,e()}finally{dE=!0}}a(J0,"suppressLogging");var X0=k0?.name?.replace(/ /g,"-")||"main";function Cs(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||X0+"/"+V0);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}
3
- `}a(Cs,"createLogRecord");function Jo(e){ys&&NR(e),Is&&process.stdout.write(e)}a(Jo,"logStdOut");function Eu(e){ys&&NR(e),Is&&process.stderr.write(e)}a(Eu,"logStdErr");function NR(e){Z0(),Pi?Fn.appendFileSync(Pi,e):Wo.log(e)}a(NR,"logToFile");function fE(){try{Fn.closeSync(Pi)}catch{}Pi=null}a(fE,"closeLogFile");function Z0(){if(!Pi){try{if(!Qo)debugger;Pi=Fn.openSync(Qo,"a")}catch(e){Wo.error(e)}setTimeout(()=>{fE()},Q0).unref()}}a(Z0,"openLogFile");function du(...e){Mt[Lt]<=Mt.info&&Jo(Cs("info",e))}a(du,"info");function hE(...e){Mt[Lt]<=Mt.trace&&Jo(Cs("trace",e))}a(hE,"trace");function zo(...e){Mt[Lt]<=Mt.error&&Eu(Cs("error",e))}a(zo,"error");function mE(...e){Mt[Lt]<=Mt.debug&&Jo(Cs("debug",e))}a(mE,"debug");function bR(...e){Mt[Lt]<=Mt.notify&&Jo(Cs("notify",e))}a(bR,"notify");function yR(...e){Mt[Lt]<=Mt.fatal&&Eu(Cs("fatal",e))}a(yR,"fatal");function SE(...e){Mt[Lt]<=Mt.warn&&Eu(Cs("warn",e))}a(SE,"warn");function j0(e,t,...r){t===gR.STDERR?Eu(Cs(e,r)):Jo(Cs(e,r))}a(j0,"logCustomLevel");function eq(){let e;try{e=$0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,je.HDB_HOME_DIR_NAME,je.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=ws.join(EE,"utility/hdb_boot_properties.file")),t}a(eq,"getPropsFilePath");function tq(e){Lt=e}a(tq,"setLogLevel");function pR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(pR,"autoCastBoolean");function rq(e){try{if(e.includes("config/settings.js")){let o=RR(e);return{level:o.get(je.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(je.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(je.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(je.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=TR.parseDocument(Fn.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===je.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(rq,"getLogConfig");function sq(){try{let e=TR.parseDocument(Fn.readFileSync(W0,"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(sq,"getDefaultConfig");function nq(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(nq,"AuthAuditLog")});var wR=m((Lte,IR)=>{"use strict";var iq=require("util"),oq=require("path"),aq=require("child_process"),cq=iq.promisify(aq.execFile),uq=1e3*1e3*10;IR.exports={findPs:lq};async function lq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await cq("ps",["wwxo",`pid,${r}`],{maxBuffer:uq});for(let n of s.trim().split(`
4
- `).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:oq.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(lq,"findPs")});var xe=m((Pte,UR)=>{"use strict";var _q="__dbis__",dq="__txns__",Eq="__environment_name__",fq="__dbi_defintion__",hq={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"},mq=["__createdtime__","__updatedtime__"],Sq="\uFFFF",CR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},pq=Object.values(CR);UR.exports={AUDIT_STORE_NAME:dq,INTERNAL_DBIS_NAME:_q,DBI_DEFINITION_NAME:fq,SEARCH_TYPES:hq,TIMESTAMP_NAMES:mq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Eq,TRANSACTIONS_DBI_NAMES_ENUM:CR,TRANSACTIONS_DBIS:pq,OVERFLOW_MARKER:Sq}});var rr=m((vte,FR)=>{"use strict";var DR=g(),LR=xe(),MR={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},PR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),vR={500:PR("There was an error processing your request."),400:"Invalid request"},Tq=vR[MR.INTERNAL_SERVER_ERROR],Rq={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.`},gq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Aq={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"},Oq={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 ${LR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${LR.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"},Nq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${DR.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 ${DR.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"},BR={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"},bq={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."},yq={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`},Iq={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"},wq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Cq={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`},HR={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.`},qR={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}`},Uq={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."},Dq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Lq={...BR,...Aq,...Rq,...bq,...yq,...Iq,...wq,...Cq,...Nq,...HR,...qR,...Uq,...Dq,...gq};FR.exports={CHECK_LOGS_WRAPPER:PR,HDB_ERROR_MSGS:Lq,DEFAULT_ERROR_MSGS:vR,DEFAULT_ERROR_RESP:Tq,HTTP_STATUS_CODES:MR,LMDB_ERRORS_ENUM:Oq,AUTHENTICATION_ERROR_MSGS:BR,VALIDATION_ERROR_MSGS:HR,ITC_ERRORS:qR}});var W=m((Hte,kR)=>{"use strict";var vi=rr(),Mq=F(),Pq=g(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,GR),this.http_resp_code=s||vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vi.DEFAULT_ERROR_MSGS[s]?vi.DEFAULT_ERROR_MSGS[s]:vi.DEFAULT_ERROR_MSGS[vi.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&&Mq[n](i)}},TE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.http_resp_code=r||400,t;super(t),this.http_resp_code=r||400}},RE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function GR(e,t,r,s=Pq.LOG_LEVELS.ERROR,n=null,i=!1){if(xR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(GR,"handleHDBError");function xR(e){return e.__proto__.constructor.name===fu.name}a(xR,"isHDBError");kR.exports={isHDBError:xR,handleHDBError:GR,ClientError:TE,ServerError:RE,hdb_errors:vi}});var $R=m((Fte,VR)=>{"use strict";var vq={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))},Bq="certificate.pem",Hq="privateKey.pem",qq="ca.pem";VR.exports={CERTIFICATE_VALUES:vq,CERTIFICATE_PEM_NAME:Bq,PRIVATEKEY_PEM_NAME:Hq,CA_PEM_NAME:qq}});var Pe=m((Gte,YR)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.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};YR.exports={validateObject:Fq,validateObjectAsync:Gq,validateBySchema:xq};function Fq(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}a(Fq,"validateObject");async function Gq(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(Gq,"validateObjectAsync");function xq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(xq,"validateBySchema")});var AE=m((Vte,XR)=>{"use strict";var zR=require("fs-extra"),j=require("joi"),kq=require("os"),{boolean:Se,string:Ds,number:sr,array:gE}=j.types(),{totalmem:KR}=require("os"),Bi=require("path"),Vq=F(),mu=x(),kte=$R(),WR=g(),$q=Pe(),QR="log",Yq="components",Kq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Wq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Qq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",zq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Jq="rootPath config parameter is undefined",Xq="clustering.enabled config parameter is undefined",Us=sr.min(0).required(),Su=gE.items({host:Ds.required(),port:Us}).empty(null),Ls;XR.exports={configValidator:Zq,routesValidator:nF,route_constraints:Su};function Zq(e){if(Ls=e.rootPath,mu.isEmpty(Ls))throw Jq;let t=Se.required(),r=j.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(sF),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=j.custom(jq).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=j.string().empty(null).default(hu),u=j.custom(eF).empty(null).default(hu),l=e.clustering?.enabled;if(mu.isEmpty(l))throw Xq;let _;return l===!0?_=j.object({enabled:t,hubServer:j.object({cluster:j.object({name:j.required().empty(null),network:j.object({port:Us,routes:Su}).required()}).required(),leafNodes:j.object({network:j.object({port:Us}).required()}).required(),network:j.object({port:Us}).required()}).required(),leafServer:j.object({network:j.object({port:Us,routes:Su}).required(),streams:j.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:j.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Se.optional(),databaseLevel:Se.optional(),tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required(),verify:Se.optional()}),user:Ds.optional().empty(null)}).required():_=j.object({enabled:t,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required()})}).required(),j.object({authentication:j.object({authorizeLocal:Se,cacheTTL:sr.required(),enableSessions:Se,operationTokenTimeout:j.required(),refreshTokenTimeout:j.required()}),analytics:j.object({aggregatePeriod:sr}),clustering:_,customFunctions:j.object({enabled:t,network:j.object({cors:Se.required(),corsAccessList:gE.required(),headersTimeout:sr.min(1).required(),https:Se.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:j.object({enabled:t}).required(),logging:j.object({auditAuthEvents:j.object({logFailed:Se,logSuccessful:Se}),file:Se.required(),level:j.valid("notify","fatal","error","warn","info","debug","trace"),rotation:j.object({enabled:Se.optional(),compress:Se.optional(),interval:Ds.custom(rF).optional().empty(null),maxSize:Ds.custom(tF).optional().empty(null),path:Ds.optional().empty(null).default(hu)}).required(),root:n,stdStreams:Se.required(),auditLog:Se.required()}).required(),operationsApi:j.object({foreground:Se.required(),network:j.object({cors:Se.required(),corsAccessList:gE.required(),headersTimeout:sr.min(1).required(),https:Se.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:j.object({network:j.object({port:Us,securePort:Us}).required(),webSocket:Se.optional(),requireAuthentication:Se.optional()}),http:j.object({threads:s}).required(),storage:j.object({writeAsync:Se.required(),overlappingSync:Se.optional(),caching:Se.optional(),compression:Se.optional(),noReadAhead:Se.optional(),path:u,prefetchWrites:Se.optional()}).required(),ignoreScripts:Se.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(Zq,"configValidator");function JR(e){return zR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(JR,"doesPathExist");function jq(e,t){if(e===null)return;let r=JR(e);return r?t.message(r):e}a(jq,"validatePemFile");function eF(e,t){j.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=JR(e);if(r)return t.message(r)}a(eF,"validatePath");function tF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Kq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Qq):e}a(tF,"validateRotationMaxSize");function rF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Wq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(zq):e}a(rF,"validateRotationInterval");function sF(e,t){let r=t.state.path.join("."),s=kq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||KR();return i=Math.round(Math.min(i,KR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Vq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(sF,"setDefaultThreads");function hu(e,t){if(!mu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(mu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Bi.join(Ls,Yq);case"logging.root":return Bi.join(Ls,QR);case"clustering.leafServer.streams.path":return Bi.join(Ls,"clustering","leaf");case"storage.path":let s=Bi.join(Ls,WR.LEGACY_DATABASES_DIR_NAME);return zR.existsSync(s)?s:Bi.join(Ls,WR.DATABASES_DIR_NAME);case"logging.rotation.path":return Bi.join(Ls,QR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function nF(e){let t=j.object({routes:Su});return $q.validateBySchema({routes:e},t)}a(nF,"routesValidator")});var Tr=m((Kte,ag)=>{"use strict";var pr=g(),ut=x(),et=F(),{configValidator:iF,routesValidator:ZR}=AE(),vt=require("fs-extra"),oF=require("yaml"),Lr=require("path"),aF=require("is-number"),eg=require("properties-reader"),cF=require("lodash"),{handleHDBError:uF}=W(),{HTTP_STATUS_CODES:lF,HDB_ERROR_MSGS:pu}=rr(),Yte=require("minimist"),{SCHEMAS_PARAM_CONFIG:Xo,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:Ms}=pr,_F="Unable to get config value because config is uninitialized",dF="Config successfully initialized",EF="Error backing up config file",fF="Empty parameter sent to getConfigValue",tg=Lr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),hF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",jR={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"},Tu,Et;ag.exports={createConfigFile:mF,getDefaultConfig:SF,getConfigValue:sg,initConfig:ng,flattenConfig:xn,updateConfigValue:ig,updateConfigObject:TF,getConfiguration:AF,setConfiguration:OF,readConfigFile:bE,getClusteringRoutes:NF,initOldConfig:og,getConfigFromFile:bF,getConfigFilePath:Gn,addConfig:yF,deleteConfigFromFile:IF};function mF(e){let t=un(tg);Tu=xn(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===cn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=OE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){et.error(_)}}}r&&rg(t,r),NE(t);let s=t.toJSON();Et=xn(s);let n=t.getIn(["rootPath"]),i=Lr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),et.trace(`Config file written to ${i}`)}a(mF,"createConfigFile");function rg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ut.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Xo.TABLES))for(let i in s[n][Xo.TABLES])for(let o in s[n][Xo.TABLES][i]){let c=s[n][Xo.TABLES][i][o],u=[cn.SCHEMAS,n,Xo.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=[cn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){et.error("Error parsing schemas CLI/env config arguments",s)}}a(rg,"setSchemasConfig");function SF(e){if(Tu===void 0){let r=un(tg);Tu=xn(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Tu[t.toLowerCase()]}a(SF,"getDefaultConfig");function sg(e){if(e==null){et.error(fF);return}if(Et===void 0){et.trace(_F);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return Et[t.toLowerCase()]}a(sg,"getConfigValue");function Gn(e=ut.getPropsFilePath()){let t=ut.getEnvCliRootPath();return t?Lr.join(t,pr.HDB_CONFIG_FILE):eg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function ng(e=!1){if(Et===void 0||e){let t;if(!ut.noBootFile()){t=ut.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw et.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gn(t),s;if(r.includes("config/settings.js"))try{og(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=un(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){et.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw et.error(i),new Error(`Error reading HarperDB config file at ${r}`)}pF(s,r),NE(s);let n=s.toJSON();if(Et=xn(n),Et.logging_rotation_rotate)for(let i in jR)Et[i]&&et.error(`Config ${jR[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);et.trace(dF)}}a(ng,"initConfig");function pF(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Lr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Lr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Lr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(et.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(pF,"checkForUpdatedConfig");function NE(e){let t=e.toJSON(),r=iF(t);if(r.error)throw pu.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(NE,"validateConfig");function TF(e,t){Et===void 0&&(Et={});let r=Ms[e.toLowerCase()];if(r===void 0){et.trace(`Unable to update config object because config param '${e}' does not exist`);return}Et[r.toLowerCase()]=t}a(TF,"updateConfigObject");function ig(e,t,r=void 0,s=!1,n=!1,i=!1){Et===void 0&&ng();let o=sg(Ms.hdb_root),c=Lr.join(o,pr.HDB_CONFIG_FILE),u=un(c),l;if(r===void 0&&e.toLowerCase()===cn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=OE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===cn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=OE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(S){et.error(S)}}}l&&rg(u,l),NE(u);let _=u.getIn(["rootPath"]),d=Lr.join(_,pr.HDB_CONFIG_FILE);s===!0&&RF(c,_),vt.writeFileSync(d,String(u)),n&&(Et=xn(u.toJSON())),et.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ig,"updateConfigValue");function RF(e,t){try{let r=Lr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),et.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){et.error(EF),et.error(r)}}a(RF,"backupConfigFile");var gF=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!gF.includes(r)){let s=xn(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(xn,"flattenConfig");function OE(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.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(aF(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ut.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 ut.autoCast(t)}a(OE,"castConfigValue");function AF(){let e=ut.getPropsFilePath(),t=Gn(e);return un(t).toJSON()}a(AF,"getConfiguration");async function OF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ig(void 0,void 0,n,!0),hF}catch(i){throw typeof i=="string"||i instanceof String?uF(i,i,lF.BAD_REQUEST,void 0,void 0,!0):i}}a(OF,"setConfiguration");function bE(){let e=ut.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!ut.noBootFile())throw et.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return un(t).toJSON()}a(bE,"readConfigFile");function un(e){return oF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(un,"parseYamlDoc");function NF(){let e=bE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ut.isEmptyOrZeroLength(t)?[]:t;let r=ZR(t);if(r)throw pu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ut.isEmptyOrZeroLength(s)?[]:s;let n=ZR(s);if(n)throw pu.CONFIG_VALIDATION(n.message);if(!ut.isEmptyOrZeroLength(s)&&!ut.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ut.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw pu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(NF,"getClusteringRoutes");function og(e){let t=eg(e);Et={};for(let r in Ms){let s=t.get(r.toUpperCase());if(ut.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===cn.LOGGING_ROOT?Et[n]=Lr.dirname(s):Et[n]=s}return Et}a(og,"initOldConfig");function bF(e){let t=bE();return cF.get(t,e.replaceAll("_","."))}a(bF,"getConfigFromFile");async function yF(e,t){let r=un(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(yF,"addConfig");function IF(e){let t=Gn(ut.getPropsFilePath()),r=un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Lr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(IF,"deleteConfigFromFile")});var Q=m((Qte,lg)=>{"use strict";var yE=require("fs-extra"),Mr=require("path"),cg=require("os"),wF=require("properties-reader"),Zo=F(),kn=x(),ee=g(),Ru=Tr(),CF="Error initializing environment manager",gu="BOOT_PROPS_FILE_PATH",ug=!1,UF={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};lg.exports={BOOT_PROPS_FILE_PATH:gu,getHdbBasePath:DF,setHdbBasePath:LF,get:MF,initSync:vF,setProperty:Ee,initTestEnvironment:BF};function DF(){return Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(DF,"getHdbBasePath");function LF(e){Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(LF,"setHdbBasePath");function MF(e){let t=Ru.getConfigValue(e);return t===void 0?Ps[e]:t}a(MF,"get");function Ee(e,t){UF[e]&&(Ps[e]=t),Ru.updateConfigObject(e,t)}a(Ee,"setProperty");function PF(){let e;try{e=kn.getPropsFilePath(),yE.accessSync(e,yE.constants.F_OK|yE.constants.R_OK),ug=!0;let t=wF(e);return Ps[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[gu]=e,!0}catch{return Zo.trace(`Environment manager found no properties file at ${e}`),!1}}a(PF,"doesPropFileExist");function vF(e=!1){try{(ug||PF()||kn.noBootFile())&&(Ru.initConfig(e),Ps[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ru.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zo.error(CF),Zo.error(t),console.error(t),process.exit(1)}}a(vF,"initSync");function BF(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=Mr.join(__dirname,"../../","unitTests");Ps[gu]=Mr.join(u,"hdb_boot_properties.file"),Ee(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mr.join(u,"settings.test")),Ee(ee.HDB_SETTINGS_NAMES.INSTALL_USER,cg.userInfo()?cg.userInfo().username:void 0),Ee(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.HDB_SETTINGS_NAMES.CERT_KEY,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mr.join(u,"envDir","log")),Ee(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mr.join(u,"envDir")),Ee(ee.CONFIG_PARAMS.STORAGE_PATH,Mr.join(u,"envDir")),Ee(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.isEmpty(i)?!1:i),Ee(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${gu}. Please check your boot props and settings files`;Zo.fatal(r),Zo.error(t)}}a(BF,"initTestEnvironment")});var we=m((Jte,Sg)=>{"use strict";var sa=g(),HF=x(),Bt=Q(),na=require("path"),qF=require("minimist"),_g=require("fs-extra"),dg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:jo,SYSTEM_SCHEMA_NAME:Au}=sa,ea,ta,ra;function Eg(){if(ea!==void 0)return ea;if(Bt.getHdbBasePath()!==void 0)return ea=Bt.get(ln.STORAGE_PATH)||na.join(Bt.getHdbBasePath(),sa.DATABASES_DIR_NAME),ea}a(Eg,"getBaseSchemaPath");function fg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=mg(Au),ta}a(fg,"getSystemSchemaPath");function hg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(sa.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||na.join(Bt.getHdbBasePath(),sa.TRANSACTIONS_DIR_NAME),ra}a(hg,"getTransactionAuditStoreBasePath");function FF(e,t){let r=Bt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||na.join(hg(),e.toString())}a(FF,"getTransactionAuditStorePath");function mg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(sa.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||na.join(Eg(),e)}a(mg,"getSchemaPath");function GF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,qF(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!HF.isObject(s))throw o;i=s}for(let o of i){let c=o[Au];if(!c)continue;let u=Bt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[jo.PATH];if(l)return dg.set(u,[Au,jo.TABLES,t,jo.PATH],l),Bt.setProperty(ln.SCHEMAS,u),l;let _=c?.[jo.PATH];if(_)return dg.set(u,[Au,jo.PATH],_),Bt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!_g.pathExistsSync(n))throw new Error(n+" does not exist");let i=na.join(n,e);return _g.mkdirsSync(i),Bt.setProperty(ln.STORAGE_PATH,n),i}return fg()}a(GF,"initSystemSchemaPaths");function xF(){ea=void 0,ta=void 0,ra=void 0}a(xF,"resetPaths");Sg.exports={getBaseSchemaPath:Eg,getSystemSchemaPath:fg,getTransactionAuditStorePath:FF,getTransactionAuditStoreBasePath:hg,getSchemaPath:mg,initSystemSchemaPaths:GF,resetPaths:xF}});var Ht=m((ere,Ag)=>{"use strict";var kF=rr().LMDB_ERRORS_ENUM,Zte=require("lmdb"),VF=xe(),jte=require("buffer").Buffer,{OVERFLOW_MARKER:pg,MAX_SEARCH_KEY_LENGTH:Ou}=VF,Tg=["number","string","symbol","boolean","bigint"];function $F(e){if(e=e?.primaryStore||e,!e)throw new Error(kF.ENV_REQUIRED)}a($F,"validateEnv");function YF(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(YF,"stringifyData");function KF(e){return e instanceof Date?e.valueOf():e}a(KF,"convertKeyValueToWrite");function WF(e){if(e==null)return;if(Tg.includes(typeof e))return e.length>Ou?[e.slice(0,Ou)+pg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Tg.includes(typeof n))n.length>Ou?t.push(n.slice(0,Ou)+pg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(WF,"getIndexedValues");var Nu=0,Rg=0;function gg(){Rg=Date.now()-performance.now()}a(gg,"adjustStartTime");gg();var QF=6e4;setInterval(gg,QF).unref();function zF(){let e=performance.now()+Rg;return e>Nu?(Nu=e,e):(Nu+=488e-6,Nu)}a(zF,"getNextMonotonicTime");Ag.exports={validateEnv:$F,stringifyData:YF,convertKeyValueToWrite:KF,getNextMonotonicTime:zF,getIndexedValues:WF}});var Og,Xr,IE,ia=pe(()=>{Og=require("events"),Xr=class extends Og.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new IE;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)}},IE=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 oa(e){return e[ft]||(e[ft]=Object.create(null))}function Cu(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[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Ng(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){oa(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,bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,bu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(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[ft];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new bu.ClientError("Can not add a property to a sealed table schema");oa(this)[o]=c}),i("deleteProperty",function(o){oa(this)[o]=void 0}),i("toJSON",function(){let o=this[ft],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),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 Ng(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[ce]=n}},Cu(r,t)),new r(e)):new yu(e);case Array:let s=new wu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ng(o,t?.elements)),s[n]=o}return s}}function Uu(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Uu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function aa(e){let t;if(e[ce]&&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=aa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ft];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=aa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Iu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||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?.[ce]===n){if(Iu(i))return!0}else return!0}}else{let r=e[ft];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Iu(n))return!0}else return!0}else return!0}}return!1}var bu,ft,yu,Vn,wu,Du=pe(()=>{Zr();bu=D(W()),ft=Symbol("own-data");a(oa,"getChanges");a(Cu,"assignTrackedAccessors");a(Ng,"trackObject");yu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Cu(yu,{});a(Uu,"collapseData");a(aa,"deepFreeze");a(Iu,"hasChanges");Vn=Symbol.for("has-array-changes"),wu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};wu.prototype.constructor=Array});function Ye(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 wE;e.timestamp&&(r.timestamp=e.timestamp),r[Oe]=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 bg,yg,wE,$n=pe(()=>{bg=D(Ht()),yg=require("../index");Zr();a(Ye,"transaction");(0,yg._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};wE=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,bg.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 DE(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(XF[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]=es.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 lt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let S=o;o=c,c=S,S=!l,l=!u,u=S}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new CE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=LE(e);if(!S)throw new CE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:y,value:O})=>new Promise(H=>setImmediate(()=>H(S(O)?y:wg.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:S})=>S)}function LE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case lt.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case lt.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case lt.SEARCH_TYPES.ENDS_WITH:case lt.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case lt.SEARCH_TYPES.STARTS_WITH:case lt.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case lt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case lt.SEARCH_TYPES.GREATER_THAN:case lt.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case lt.SEARCH_TYPES.GREATER_THAN_EQUAL:case lt.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case lt.SEARCH_TYPES.LESS_THAN:case"lt":case lt.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case lt.SEARCH_TYPES.LESS_THAN_EQUAL:case lt.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(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 Lu(e){if(!e)return;let t=new UE,r,s,n,i,o;for(;r=Ig.exec(e);){i=Ig.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=JF[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 CE,lt,es,wg,Ig,JF,XF,UE,Mu=pe(()=>{CE=D(W()),lt=D(xe()),es=require("ordered-binary"),wg=require("lmdb"),Ig=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,JF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(DE,"idsForCondition");XF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(LE,"filterByType");a(jr,"attributeComparator");a(Lu,"parseQuery");UE=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 vE={};Ze(vE,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ie,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Pg,snake_case:()=>jF});function jF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Cg(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 PE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ie]??l[this.primaryKey]??null):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let d of n){if(typeof d=="object"&&d)break;c.push(d)}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 d=c.indexOf("?");if(d>-1){let f=this.parseQuery(c.slice(d+1));u?u=Object.assign(f,u):u=f,c=c.slice(0,d)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;if(o||(o={}),t.allowInvalidated&&(o.allowInvalidated=!0),o.transaction){let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)}else return Ye(o,()=>{let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[Pg]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?d.allowRead(o.user,o):t.type==="update"?d.doesExist?.()===!1?d.allowCreate(o.user,o):d.allowUpdate(o.user,o):t.type==="create"?d.allowCreate(o.user,o):d.allowDelete(o.user,o);if(E?.then)return E.then(f=>{if(!f)throw new Pu(o.user);return typeof l?.then=="function"?l.then(h=>e(d,u,o,h)):e(d,u,o,l)});if(!E)throw new Pu(o.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,o,E)):e(d,u,o,l)}a(_,"authorizeActionOnResource")}}function vr(e,t){let r=new Mg.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 ME(e){let t=e[ce];if(t){let r=e[ft];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 Ug(e){if(typeof e=="string")return t=>ME(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=ME(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=ME(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 Dg,Lg,Mg,Oe,ie,vs,Pg,ce,ZF,ht,Pu,PE,Zr=pe(()=>{Dg=require("crypto");ia();Lg=require("../index"),Mg=D(W());Du();$n();Mu();Oe=Symbol.for("context"),ie=Symbol.for("primary-key"),vs=Symbol("is-collection"),Pg=Symbol("save-updates"),ce=Symbol("stored-record"),ZF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Oe];[ie];static transactions;constructor(t,r){this[ie]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Pr(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=Ug(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[vs]){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):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Dg.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),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static post=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(r):vr(t,"connect")},{type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(s):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Ug(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):vr(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ie],t,this[Oe]);vr(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return Lu(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&&ZF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Cg(t,this)}}return Cg(t,this)}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ie]===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=_[ie],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[vs]=!0),n}connect(t){let r=new Xr;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[ie]}getContext(){return this[Oe]}};ht.prototype[Oe]=null;(0,Lg._assignPackageExport)("Resource",ht);a(jF,"snake_case");Pu=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.http_resp_code=403):(super("Must login"),this.http_resp_code=401)}};a(Cg,"pathToId");PE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(ME,"selectFromObject");a(Ug,"transformForSelect")});var BE={};Ze(BE,{server:()=>mt});var vg,mt,_n=pe(()=>{vg=require("../index"),mt={};(0,vg._assignPackageExport)("server",mt)});var FE={};Ze(FE,{loadGQLSchema:()=>tG,start:()=>qE,startOnMainThread:()=>eG});function qE({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 T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let Y=function(A){if(A.kind==="NonNullType"){let G=Y(A.type);return G.nullable=!0,G}return A.kind==="ListType"?{type:"array",elements:Y(A.type)}:{type:A.name?.value}};a(Y,"getProperty");let S=T.name.value,y=[],O={table:null,database:null,properties:y};E.set(S,O);for(let A of T.directives){if(A.name.value==="table"){for(let w of A.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=S),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(A.name.value==="sealed"&&(O.sealed=!0),A.name.value==="export"){O.export=!0;for(let w of A.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let H=!1;for(let A of T.fields){let w=Y(A.type);w.name=A.name.value,y.push(w);for(let G of A.directives)if(G.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,H=!0);else if(G.name.value==="indexed")w.indexed=!0;else if(G.name.value==="createdTime")w.assignCreatedTime=!0;else if(G.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(G.name.value==="expiresAt")w.expiresAt=!0;else if(G.name.value==="allow"){let k=w.authorizedRoles=[];for(let X of G.arguments)X.name.value==="role"&&k.push(X.value.value)}}O.typeName=S,S==="Query"&&(h=O)}for(let[T,S]of E)for(let y of S.properties){let O=E.get(y.type);O&&(y.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,HE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let S=E.get(T.type);if(!S)throw new Error(`${T.type} was not found as a Query export`);i.set((0,HE.dirname)(s)+"/"+T.name,S.tableClass)}}}var HE,eG,tG,Bg=pe(()=>{HE=require("path");de();a(qE,"start");eG=qE,tG=qE({ensureTable:tt}).handleFile});async function vu(e){return rG?(ca||(ca=sG(iG)),(await(await ca).import(e)).namespace):import(e)}async function sG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ca=new Compartment({console,Math,Date,fetch:nG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,qg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ht,tables:nr,databases:ve})}};let s=await(0,Hg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ca}function nG(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 iG(){return{Resource:ht,tables:nr}}var Hg,qg,rG,ca,GE=pe(()=>{Zr();de();Hg=require("fs/promises"),qg=require("path"),rG=!1;a(vu,"secureImport");a(sG,"getCompartment");a(nG,"secureOnlyFetch");a(iG,"getGlobalVars")});var kE={};Ze(kE,{handleFile:()=>oG});async function oG(e,t,r,s){let n=new Map,i=(0,Fg.pathToFileURL)(r).toString(),o=await vu(i);u(o.default)&&s.set((0,xE.dirname)(t),o.default),c(o,(0,xE.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 Fg,xE,Gg=pe(()=>{Fg=require("url");GE();xE=require("path");a(oG,"handleFile")});var $E={};Ze($E,{start:()=>aG});function aG({resources:e}){e.set("login",VE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var VE,xg=pe(()=>{Zr();a(aG,"start");VE=class extends ht{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 KE=m((wre,$g)=>{"use strict";var{Readable:cG}=require("stream"),uG=1e4;$g.exports={streamAsJSON(e){return new YE({value:e})}};var YE=class extends cG{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),kg)}catch(n){yield kg(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);Vg(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>uG?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 Vg(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 kg(e){return console.error(e),JSON.stringify(e.toString())}a(kg,"handleError");function Vg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Vg,"when")});var sA=m((Dre,rA)=>{"use strict";var WE=require("recursive-iterator"),lG=require("alasql"),QE=require("clone"),Yg=x(),{handleHDBError:Kg,hdb_errors:_G}=W(),{HDB_ERROR_MSGS:Wg,HTTP_STATUS_CODES:Qg}=_G,{getDatabases:dG}=(de(),re(Ne)),EG=["DISTINCT_ARRAY"],zg=Symbol("validateTables"),zE=Symbol("validateTable"),Ure=Symbol("getAllColumns"),Jg=Symbol("validateAllColumns"),Bu=Symbol("findColumn"),Xg=Symbol("validateOrderBy"),ua=Symbol("validateSegment"),JE=Symbol("validateColumn"),Zg=Symbol("setColumnsForTable"),jg=Symbol("checkColumnsForAsterisk"),eA=Symbol("validateGroupBy"),tA=Symbol("hasColumns"),XE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[zg](),this[jg](),this[Jg]()}[zg](){if(this[tA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[zE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[zE](t.table)})}}[tA](){let t=!1,r=new WE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[zE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=dG();if(!r[t.databaseid])throw Kg(new Error,Wg.SCHEMA_NOT_FOUND(t.databaseid),Qg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Kg(new Error,Wg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Qg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=QE(n);i.table=QE(t),this.attributes.push(i)})}[Bu](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)}[jg](){let t=new WE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Zg](r.tableid)}[Zg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new lG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Jg](){this[ua](this.statement.columns,!1),this[ua](this.statement.joins,!1),this[ua](this.statement.where,!1),this[eA](this.statement.group,!1),this[ua](this.statement.order,!0)}[ua](t,r){if(!t)return;let s=new WE(t),n=[];for(let{node:i,path:o}of s)!Yg.isEmpty(i)&&!Yg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Xg](i):n.push(this[JE](i)));return n}[eA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&EG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=QE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Bu](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[Bu](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`}[Xg](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[JE](t)}[JE](t){let r=this[Bu](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]}};rA.exports=XE});var iA=m((Mre,nA)=>{"use strict";var ZE=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")}};nA.exports=ZE});var aA=m((vre,oA)=>{"use strict";var jE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};oA.exports=jE});var Hu=m((Hre,cA)=>{"use strict";var tf=Q(),rf=g();tf.initSync();var fG=tf.get(rf.CONFIG_PARAMS.STORAGE_COMPRESSION),hG=tf.get(rf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mG=rf.UPDATES_PROPERTY,ef=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=hG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===mG)}};cA.exports=ef});var Fu=m((Fre,lA)=>{"use strict";var Hi=Q(),la=g();Hi.initSync();var SG=Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",uA=Hi.get(la.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pG=Hi.get(la.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=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=SG,this.noFSAccess=!0,uA!==void 0&&(this.overlappingSync=uA),this.noReadAhead=pG}};lA.exports=qu;qu.MAX_DBS=1e4});var ye=m((xre,RA)=>{"use strict";var nf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Gu=Ht(),EA=F(),qt=rr().LMDB_ERRORS_ENUM,xu=aA(),of=Hu(),fA=Fu(),dn=xe(),_A=g(),{table:TG,resetDatabases:RG}=(de(),re(Ne)),dA=Q(),Hr=dn.INTERNAL_DBIS_NAME,hA=dn.DBI_DEFINITION_NAME,gG="data.mdb",AG="lock.mdb",_a=".mdb",OG="-lock",sf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Rr(t,r),this.key_type=this.dbi[dn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new nf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function ku(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(ku,"pathEnvNameValidation");async function af(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+_a);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,gG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(af,"validateEnvironmentPath");function Vu(e,t){if(Gu.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Vu,"validateEnvDBIName");async function NG(e,t,r=!1,s=!1){ku(e,t);let n=ir.basename(e);t=t.toString();let i=dA.get(_A.CONFIG_PARAMS.SCHEMAS);i||dA.setProperty(_A.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await af(e,t,s),mA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new fA(s?c:c+_a,!1),l=nf.open(u);l.dbis=Object.create(null);let _=new of(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=cf(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(NG,"createEnvironment");async function bG(e,t,r,s=!0){ku(e,t),t=t.toString();let n=ir.join(e,t);return TG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bG,"copyEnvironment");async function mA(e,t,r=!1){ku(e,t),t=t.toString();let s=cf(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 af(e,t),i=ir.join(e,t+_a),o=n!=i,c=new fA(n,o),u=nf.open(c);u.dbis=Object.create(null);let l=pA(u);for(let _=0;_<l.length;_++)Rr(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(mA,"openEnvironment");async function yG(e,t,r=!1){ku(e,t),t=t.toString();let s=ir.join(e,t+_a),n=await af(e,t);if(global.lmdb_map!==void 0){let i=cf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await SA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+OG:ir.join(ir.dirname(n),AG))}a(yG,"deleteEnvironment");async function SA(e){Gu.validateEnv(e);let t=e[dn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(SA,"closeEnvironment");function cf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(cf,"getCachedEnvironmentName");function IG(e){Gu.validateEnv(e);let t=Object.create(null),r=Rr(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new xu,n)}catch{EA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(IG,"listDBIDefinitions");function pA(e){Gu.validateEnv(e);let t=[],r=Rr(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(pA,"listDBIs");function wG(e,t){let s=Rr(e,Hr).getEntry(t),n=new xu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{EA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(wG,"getDBIDefinition");function TA(e,t,r,s=!r){if(Vu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Rr(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new of(r,s===!0),o=e.openDB(t,i),c=new xu(r===!0,s);return o[hA]=c,Rr(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(TA,"createDBI");function Rr(e,t){if(Vu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=wG(e,t):r=new xu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new of(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(qt.DBI_DOES_NOT_EXIST):n}return s[hA]=r,e.dbis[t]=s,s}a(Rr,"openDBI");function CG(e,t){Vu(e,t),t=t.toString();let r=Rr(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(CG,"statDBI");async function UG(e,t){try{let r=ir.join(e,t+_a);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(UG,"environmentDataSize");function DG(e,t){if(Vu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Rr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Rr(e,Hr).removeSync(t)}a(DG,"dropDBI");function LG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Rr(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)TA(e,i,i!==t,i===t),s=!0;else throw o}}s&&RG()}a(LG,"initializeDBIs");RA.exports={openDBI:Rr,openEnvironment:mA,createEnvironment:NG,listDBIs:pA,listDBIDefinitions:IG,createDBI:TA,dropDBI:DG,statDBI:CG,deleteEnvironment:yG,initializeDBIs:LG,TransactionCursor:sf,environmentDataSize:UG,copyEnvironment:bG,closeEnvironment:SA}});var AA=m((Vre,gA)=>{"use strict";var uf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};gA.exports=uf});var NA=m((Yre,OA)=>{"use strict";var lf=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}};OA.exports=lf});var yA=m((Wre,bA)=>{"use strict";var _f=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};bA.exports=_f});var qi=m((Zre,CA)=>{"use strict";var MG=ye(),PG=AA(),vG=NA(),BG=yA(),ts=Ht(),da=rr().LMDB_ERRORS_ENUM,HG=xe(),Bs=g(),qG=x(),FG=require("uuid"),zre=require("lmdb"),{handleHDBError:GG,hdb_errors:xG}=W(),{OVERFLOW_MARKER:Jre,MAX_SEARCH_KEY_LENGTH:Xre}=HG,IA=Q();IA.initSync();var $u=IA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),df=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kG(e,t,r,s,n=ts.getNextMonotonicTime()){mf(e,t,r,s),Ef(e,t,r);let i=new PG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];wA(l,!0,n);let _=VG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return ff(o,c,s,i,n)}a(kG,"insertRecords");function VG(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][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){$u&&l.prefetch(u.map(_=>({key:_,value:n})),Yu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}$u&&e.dbis[t].prefetch([n],Yu),e.dbis[t].put(n,s,s[Yn])})}a(VG,"insertRecord");function $G(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a($G,"removeSkippedRecords");function wA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[df]))&&(e[df]=r||ts.getNextMonotonicTime()):delete e[df]}a(wA,"setTimestamps");function Ef(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),MG.initializeDBIs(e,t,r)}a(Ef,"initializeTransaction");async function YG(e,t,r,s,n=ts.getNextMonotonicTime()){mf(e,t,r,s),Ef(e,t,r);let i=new vG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=hf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return ff(c,u,s,i,n,o)}a(YG,"updateRecords");async function KG(e,t,r,s,n=ts.getNextMonotonicTime()){try{mf(e,t,r,s)}catch(u){throw GG(u,u.message,xG.HTTP_STATUS_CODES.BAD_REQUEST)}Ef(e,t,r);let i=new BG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;qG.isEmpty(l[t])?(_=FG.v4(),l[t]=_):_=l[t];let d=hf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return ff(o,c,s,i,n)}a(KG,"upsertRecords");async function ff(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||ts.getNextMonotonicTime(),$G(r,i),s}a(ff,"finalizeWrite");function hf(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(wA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],S=e.dbis[h];if(S===void 0)continue;let y=l[h];if(typeof T=="function"){let H=T([[l]]);Array.isArray(H)&&(T=H[0][Bs.FUNC_VAL],r[h]=T)}if(T===y)continue;let O=ts.getIndexedValues(y);if(O){$u&&S.prefetch(O.map(H=>({key:H,value:s})),Yu);for(let H=0,Y=O.length;H<Y;H++)S.remove(O[H],s)}if(O=ts.getIndexedValues(T),O){$u&&S.prefetch(O.map(H=>({key:H,value:s})),Yu);for(let H=0,Y=O.length;H<Y;H++)S.put(O[H],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:hf(e,t,r,s,n,i,o))}a(hf,"updateUpsertRecord");function WG(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(da.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(da.WRITE_ATTRIBUTES_REQUIRED):new Error(da.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(WG,"validateBasic");function mf(e,t,r,s){if(WG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(da.RECORDS_REQUIRED):new Error(da.RECORDS_MUST_BE_ARRAY)}a(mf,"validateWrite");function Yu(){}a(Yu,"noop");CA.exports={insertRecords:kG,updateRecords:YG,upsertRecords:KG}});var Kn=m((ese,QG)=>{QG.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 rs=m((tse,LA)=>{"use strict";var DA=x(),UA=g(),Fi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),En={schema_format:{pattern:Fi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},zG=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required(),JG=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()),XG=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required();function ZG(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>En.schema_length.maximum?`'${e}' maximum of 250 characters`:Fi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ZG,"checkValidTable");function jG(e,t){return DA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(jG,"validateSchemaExists");function ex(e,t){let r=t.state.ancestors[0].schema;return DA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ex,"validateTableExists");function tx(e,t){return e.toLowerCase()===UA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${UA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tx,"validateSchemaName");LA.exports={common_validators:En,schema_regex:Fi,hdb_schema_table:zG,validateSchemaExists:jG,validateTableExists:ex,validateSchemaName:tx,checkValidTable:ZG,hdb_database:JG,hdb_table:XG}});var Ku=m((sse,MA)=>{var{common_validators:ss}=rs(),fa=Pe(),Ea="is required",Ke={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function ha(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(ha,"makeAttributesStrings");function rx(e){return e=ha(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(rx,"schema_object");function sx(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(sx,"table_object");function nx(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,fa.validateObject(e,Ke)}a(nx,"create_table_object");function ix(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence={message:Ea},Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(ix,"attribute_object");function ox(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(ox,"describe_table");function ax(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(ax,"validateTableResidence");MA.exports={schema_object:rx,create_table_object:nx,table_object:sx,attribute_object:ix,describe_table:ox,validateTableResidence:ax}});var vA=m((ise,PA)=>{"use strict";var cx=require("uuid"),Sf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||cx.v4(),this.schema_table=`${this.schema}.${this.table}`}};PA.exports=Sf});var Wu=m((ase,BA)=>{"use strict";var ux=vA(),pf=class extends ux{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}};BA.exports=pf});var qA=m((use,HA)=>{"use strict";HA.exports=_x;var lx="inserted";function _x(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===lx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(_x,"returnObject")});var Qu=m((_se,VA)=>{"use strict";var dx=g(),Tf=ye(),Ex=qi(),{getSystemSchemaPath:fx,getSchemaPath:hx}=we(),mx=Kn(),Sx=Ku(),px=Wu(),Tx=qA(),{handleHDBError:FA,hdb_errors:xA}=W(),GA=x(),{HTTP_STATUS_CODES:Rx}=xA,Rf=mx.hdb_attribute,kA=[];for(let e=0;e<Rf.attributes.length;e++)kA.push(Rf.attributes[e].attribute);var gx="inserted";VA.exports=Ax;async function Ax(e){let t=Sx.attribute_object(e);if(t)throw FA(new Error,t.message,xA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&GA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FA(new Error,r,Rx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=GA.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 px(e.schema,e.table,e.attribute,e.id);try{let i=await Tf.openEnvironment(hx(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}`);Tf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Tf.openEnvironment(fx(),dx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Ex.insertRecords(o,Rf.hash_attribute,kA,[n]);return Tx(gx,c,{records:[n]},u)}catch(i){throw i}}a(Ax,"lmdbCreateAttribute")});var Af=m((Ese,YA)=>{var{hdb_table:Ox,hdb_database:$A}=rs(),Nx=Pe(),gf=require("joi"),bx={undefined:"undefined",null:"null"},yx=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||bx[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"),Ix=gf.object({database:$A,schema:$A,table:Ox,records:gf.array().items(gf.object().custom(yx)).required()});YA.exports=function(e){return Nx.validateBySchema(e,Ix)}});var ma=m((mse,WA)=>{"use strict";var qs=x(),KA=F(),hse=Af(),{getDatabases:wx}=(de(),re(Ne)),{ClientError:Wn}=W();WA.exports=Cx;function Cx(e){if(qs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(qs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(qs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=wx()[e.schema]?.[e.table];if(qs.isEmpty(t))throw new Wn(`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&&qs.isEmptyOrZeroLength(o[r]))throw KA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!qs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!qs.isEmpty(o[r])&&o[r]!==""&&s.has(qs.autoCast(o[r]))&&(o.skip=!0),s.add(qs.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(Cx,"insertUpdateValidate")});var Sa=m((pse,QA)=>{"use strict";var Ux=g().OPERATIONS_ENUM,Of=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Ux.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};QA.exports=Of});var ga=m((gse,zA)=>{"use strict";var Rse=Sa(),zu=g(),bf=x(),Nf=F(),Dx=require("uuid"),{handleHDBError:pa,hdb_errors:Lx}=W(),{HDB_ERROR_MSGS:Ta,HTTP_STATUS_CODES:Ra}=Lx;zA.exports=Mx;function Mx(e,t,r){for(let n=0;n<t.length;n++)Px(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];vx(i,r,e.operation)}}a(Mx,"processRows");function Px(e){if(Buffer.byteLength(String(e))>zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw pa(new Error,Ta.ATTR_NAME_LENGTH_ERR(e),Ra.BAD_REQUEST,void 0,void 0,!0);if(bf.isEmptyOrZeroLength(e)||bf.isEmpty(e.trim()))throw pa(new Error,Ta.ATTR_NAME_NULLISH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(Px,"validateAttribute");function vx(e,t,r){if(!e.hasOwnProperty(t)||bf.isEmptyOrZeroLength(e[t])){if(r===zu.OPERATIONS_ENUM.INSERT||r===zu.OPERATIONS_ENUM.UPSERT){e[t]=Dx.v4();return}throw Nf.error("Update transaction aborted due to record with no hash value:",e),pa(new Error,Ta.RECORD_MISSING_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Nf.error(e),pa(new Error,Ta.HASH_VAL_LENGTH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Nf.error(e),pa(new Error,Ta.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(vx,"validateHash")});var XA=m((Ose,JA)=>{"use strict";var yf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};JA.exports=yf});var eO=m((bse,jA)=>{"use strict";var If=ye(),Bx=F(),ZA=rr().LMDB_ERRORS_ENUM;jA.exports=Hx;async function Hx(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 If.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==ZA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await If.closeEnvironment(global.lmdb_map[s]),await If.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==ZA.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){Bx.error(t)}}a(Hx,"cleanLMDBMap")});var Fs=m((Ise,nO)=>{"use strict";var Aa=require("crypto"),qx=Q(),{CONFIG_PARAMS:Fx}=g(),rO="aes-256-cbc",Gx=32,xx=16,wf=64,sO=32,kx=wf+sO,tO=new Map;nO.exports={encrypt:Vx,decrypt:$x,createNatsTableStreamName:Yx};function Vx(e){let t=Aa.randomBytes(Gx),r=Aa.randomBytes(xx),s=Aa.createCipheriv(rO,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(Vx,"encrypt");function $x(e){let t=e.substr(0,wf),r=e.substr(wf,sO),s=e.substr(kx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Aa.createDecipheriv(rO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a($x,"decrypt");function Yx(e,t){let r=qx.get(Fx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=tO.get(r);return s||(s=Aa.createHash("md5").update(r).digest("hex"),tO.set(r,s)),s}a(Yx,"createNatsTableStreamName")});var Qn=m((Use,oO)=>{"use strict";var Cse=gr(),Ju=F(),iO=Ku(),Kx=Fs(),Xu=x(),{handleHDBError:Zu,hdb_errors:Wx}=W(),{HDB_ERROR_MSGS:ju,HTTP_STATUS_CODES:Cf}=Wx,Qx=Q();Qx.initSync();var{getDatabases:Uf}=(de(),re(Ne));oO.exports={describeAll:zx,describeTable:el,describeSchema:Jx};async function zx(e){try{let t=Xu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Uf(),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 el({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 el({schema:l,table:d},f)}E&&c.push(E)}catch(E){Ju.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 Ju.error("Got an error in describeAll"),Ju.error(t),Zu(new Error,ju.DESCRIBE_ALL_ERR)}}a(zx,"describeAll");async function el(e,t){Xu.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=iO.describe_table(e);if(i)throw i;let c=Uf()[r];if(!c)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Cf.NOT_FOUND);let u=c[s];if(!u)throw Zu(new Error,ju.TABLE_NOT_FOUND(e.schema,e.table),Cf.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=Kx.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){Ju.warn(`unable to stat table dbi due to ${d}`)}return _}a(el,"descTable");async function Jx(e){Xu.transformReq(e);let t=iO.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=Uf()[s];if(!i)throw Zu(new Error,ju.SCHEMA_NOT_FOUND(e.schema),Cf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Xu.isEmpty(u)||u.describe){let l=await el({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(Jx,"describeSchema")});var Gs=m((Pse,_O)=>{var Xx=Kn(),{callbackify:cO,promisify:Zx}=require("util"),{getDatabases:uO}=(de(),re(Ne));_O.exports={setSchemaDataToGlobal:aO,getTableSchema:jx,getSystemSchema:ek,setSchemaDataToGlobalAsync:Zx(aO)};var lO=Qn(),Lse=cO(lO.describeAll),Mse=cO(lO.describeTable);function aO(e){global.hdb_schema=uO(),e&&e()}a(aO,"setSchemaDataToGlobal");function jx(e,t,r){let s=uO()[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(jx,"getTableSchema");function ek(){return Xx}a(ek,"getSystemSchema")});var Ar=m((Bse,hO)=>{"use strict";var rl=Af(),St=x(),tk=require("util"),sl=qr(),rk=Gs(),dO=F(),{handleHDBError:zn,hdb_errors:sk}=W(),{HTTP_STATUS_CODES:Jn}=sk,nk=tk.promisify(rk.getTableSchema),ik="updated",EO="inserted",fO="upserted";hO.exports={insert:ak,update:ck,upsert:uk,validation:ok,flush:lk};async function ok(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await nk(e.schema,e.table),r=rl(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&&St.isEmptyOrZeroLength(c[s]))throw dO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw dO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(ok,"validation");async function ak(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.createRecords(e);return tl(EO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(ak,"insertData");async function ck(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.updateRecords(e);return St.isEmpty(s.existing_rows)?tl(ik,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):tl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(ck,"updateData");async function uk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=rl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await sl.upsertRecords(e);return tl(fO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(uk,"upsertData");function tl(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===EO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===fO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(tl,"returnObject");function lk(e){return St.transformReq(e),sl.flush(e.schema,e.table)}a(lk,"flush")});var Lf=m((qse,pO)=>{var _k=Pe(),Df=require("joi"),{hdb_table:dk,hdb_database:mO}=rs(),SO={schema:mO,database:mO,table:dk},Ek={date:Df.date().iso().required()},fk={timestamp:Df.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};pO.exports=function(e,t){let r=t==="timestamp"?{...SO,...fk}:{...SO,...Ek},s=Df.object(r);return _k.validateBySchema(e,s)}});var gO=m((Fse,RO)=>{var hk=Pe(),Mf=require("joi"),{hdb_table:mk,hdb_database:TO}=rs(),Sk=Mf.object({schema:TO,database:TO,table:mk,hash_values:Mf.array().required(),ids:Mf.array()});RO.exports=function(e){return hk.validateBySchema(e,Sk)}});var OO=m((Gse,AO)=>{"use strict";var Pf=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}},vf=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}},Bf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};AO.exports={InsertObject:Pf,NoSQLSeachObject:vf,DeleteResponseObject:Bf}});var jn=m((kse,wO)=>{"use strict";var bO=Lf(),pk=gO(),Xn=x(),NO=require("moment"),yO=F(),{promisify:Tk,callbackify:Rk}=require("util"),Zn=g(),gk=Gs(),Hf=Tk(gk.getTableSchema),qf=qr(),{DeleteResponseObject:Ak}=OO(),{handleHDBError:fn,hdb_errors:Ok}=W(),{HDB_ERROR_MSGS:nl,HTTP_STATUS_CODES:hn}=Ok,Nk="records successfully deleted",bk=Rk(IO);wO.exports={delete:bk,deleteRecord:IO,deleteFilesBefore:yk,deleteAuditLogsBefore:Ik};async function yk(e){let t=bO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!NO(e.date,NO.ISO_8601).isValid())throw fn(new Error,nl.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await qf.deleteRecordsBefore(e);if(await Hf(e.schema,e.table),yO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(yk,"deleteFilesBefore");async function Ik(e){let t=bO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,nl.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,nl.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await qf.deleteAuditLogsBefore(e);return await Hf(e.schema,e.table),yO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Ik,"deleteAuditLogsBefore");async function IO(e){e.ids&&(e.hash_values=e.ids);let t=pk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await Hf(e.schema,e.table);let s=await qf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Nk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ak;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(IO,"deleteRecord")});var il=m(($se,DO)=>{var wk=require("crypto"),CO=9;function Ck(e){let t=Dk(CO),r=UO(e+t);return t+r}a(Ck,"createHash");function Uk(e,t){let r=e.substr(0,CO),s=r+UO(t+r);return e===s}a(Uk,"validateHash");function Dk(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(Dk,"generateSalt");function UO(e){return wk.createHash("md5").update(e).digest("hex")}a(UO,"md5");DO.exports={hash:Ck,validate:Uk}});var MO=m((Kse,LO)=>{var Ff=Pe(),It={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 Lk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Ff.validateObject(e,It)}a(Lk,"addUserValidation");function Mk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Ff.validateObject(e,It)}a(Mk,"alterUserValidation");function Pk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Ff.validateObject(e,It)}a(Pk,"dropUserValidation");LO.exports={addUserValidation:Lk,alterUserValidation:Mk,dropUserValidation:Pk}});var Be=m((zse,vO)=>{"use strict";var{platform:Qse}=require("os"),vk="nats-server.zip",Gf="nats-server",Bk=process.platform==="win32"?`${Gf}.exe`:Gf,xf="HDB",Hk=/^[^\s.,*>]+$/,PO="__request__",qk=a(e=>`${e}.${PO}`,"REQUEST_SUBJECT"),Fk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Gk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},xk={HUB:"hub.pid",LEAF:"leaf.pid"},kk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Vk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:xf,deliver_subject:"__HDB__.WORKQUEUE"},$k={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:xf,deliver_subject:"HDB.SCHEMAQUEUE"},Yk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:xf,deliver_subject:"HDB.USERQUEUE"},Kk={SUCCESS:"success",ERROR:"error"},Wk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Qk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},zk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},Jk={debug:"-D",trace:"-DVV"};vO.exports={NATS_SERVER_ZIP:vk,NATS_SERVER_NAME:Gf,NATS_BINARY_NAME:Bk,PID_FILES:xk,NATS_CONFIG_FILES:Gk,SERVER_SUFFIX:kk,WORK_QUEUE_CONSUMER_NAMES:Vk,SCHEMA_QUEUE_CONSUMER_NAMES:$k,USER_QUEUE_CONSUMER_NAMES:Yk,NATS_TERM_CONSTRAINTS_RX:Hk,REQUEST_SUFFIX:PO,UPDATE_REMOTE_RESPONSE_STATUSES:Kk,CLUSTER_STATUS_STATUSES:Wk,REQUEST_SUBJECT:qk,SUBJECT_PREFIXES:Qk,MSG_HEADERS:Fk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:Jk,LOG_LEVEL_HIERARCHY:zk}});var HO=m((Xse,BO)=>{"use strict";var ol=g(),al=class{static{a(this,"BaseLicense")}constructor(t=0,r=ol.RAM_ALLOCATION_ENUM.DEFAULT,s=ol.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},kf=class extends al{static{a(this,"ExtendedLicense")}constructor(t=0,r=ol.RAM_ALLOCATION_ENUM.DEFAULT,s=ol.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};BO.exports={BaseLicense:al,ExtendedLicense:kf}});var Oa=m((jse,VO)=>{"use strict";var ki=require("fs-extra"),qO=il(),FO=require("crypto"),Xk=require("moment"),Zk=require("uuid").v4,wt=F(),$f=require("path"),jk=x(),mn=g(),eV=HO().ExtendedLicense,xi="invalid license key format",tV="061183",rV="mofi25",sV="aes-256-cbc",nV=16,iV=32,GO=Q();GO.initSync();var Vf;VO.exports={validateLicense:xO,generateFingerPrint:aV,licenseSearch:kO,getLicense:lV};function Yf(){return $f.join(GO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Yf,"getLicenseDirPath");function oV(){let e=Yf();return $f.join(e,mn.LICENSE_FILE_NAME)}a(oV,"getLicenseFilePath");function Kf(){let e=Yf();return $f.join(e,mn.REG_KEY_FILE_NAME)}a(Kf,"getFingerPrintFilePath");async function aV(){let e=Kf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await cV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(aV,"generateFingerPrint");async function cV(){let e=Zk(),t=qO.hash(e),r=Kf();try{await ki.mkdirp(Yf()),await ki.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(cV,"writeFingerprint");function xO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Kf(),n=!1;try{n=ki.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=ki.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(rV),c=o[1];c=Buffer.concat([Buffer.from(c)],nV);let u=Buffer.concat([Buffer.from(i)],iV),l=FO.createDecipheriv(sV,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=uV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xi),wt.error(xi),new Error(xi)}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(xi),wt.error(xi),new Error(xi)}else r.exp_date=_;r.exp_date<Xk().valueOf()&&(r.valid_date=!1),qO.validate(o[1],`${tV}${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||wt.error("Invalid licence"),r}a(xO,"validateLicense");function uV(e,t){try{let r=FO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(uV,"checkOldLicense");function kO(){let e=new eV,t=[];try{t=ki.readFileSync(oV(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(jk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=xO(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){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Vf=e,e}a(kO,"licenseSearch");async function lV(){return Vf||await kO(),Vf}a(lV,"getLicense")});var Or=m((nne,iN)=>{"use strict";var QO="username is required",zO="nothing to update, must supply active, role or password to update",JO="password cannot be an empty string",XO="If role is specified, it cannot be empty.",ZO="active must be true or false";iN.exports={addUser:TV,alterUser:RV,dropUser:AV,getSuperUser:yV,userInfo:OV,listUsers:ul,listUsersExternal:NV,setUsersToGlobal:$i,findAndValidateUser:nN,getClusterUser:IV,USERNAME_REQUIRED:QO,ALTERUSER_NOTHING_TO_UPDATE:zO,EMPTY_PASSWORD:JO,EMPTY_ROLE:XO,ACTIVE_BOOLEAN:ZO};var jO=Ar(),_V=jn(),Qf=il(),eN=MO(),tN=gr(),zf=xs(),or=x(),rN=require("validate.js"),ue=F(),{promisify:dV}=require("util"),Jf=Fs(),$O=g(),YO=Be(),EV=Tr(),tne=Q(),rne=Oa(),fV=Kn(),{table:sne}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:hV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Wf,HDB_ERROR_MSGS:Vi}=hV,{UserEventMsg:Xf}=Fr(),KO=require("lodash"),{_assignPackageExport:mV}=require("../index");mV("getUser",nN);var sN={username:!0,active:!0,role:!0,password:!0},WO=new Map,cl=tN.searchByValue,SV=tN.searchByHash,pV=dV(_V.delete);async function TV(e){let t=rN.cleanAttributes(e,sN),r=eN.addUserValidation(t);if(r)throw ns(new Error,r.message,is.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 cl(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,Vi.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,Vi.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await jO.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await $i()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,Vi.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],zf.signalUserChange(new Xf(process.pid)),`${c.username} successfully added`}a(TV,"addUser");async function RV(e){let t=rN.cleanAttributes(e,sN);if(or.isEmptyOrZeroLength(t.username))throw new Error(QO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(zO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(JO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(ZO);let r=gV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Jf.encrypt(t.password)),t.password=Qf.hash(t.password)),t.role==="")throw new Error(XO);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 cl(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Vi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.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 jO.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await $i()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return zf.signalUserChange(new Xf(process.pid)),n}a(RV,"alterUser");function gV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(gV,"isClusterUser");async function AV(e){try{let t=eN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,Vi.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await pV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await $i()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return zf.signalUserChange(new Xf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(AV,"dropUser");async function OV(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 SV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(OV,"userInfo");async function NV(){let e;try{e=await ul()}catch(t){throw ue.error("Got an error listing users."),ue.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(NV,"listUsersExternal");async function ul(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await cl(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=KO.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 cl(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=KO.cloneDeep(o),o.role=r[o.role],bV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(ul,"listUsers");function bV(e){try{if(!e){ue.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(fV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(bV,"appendSystemTablesToRole");async function $i(){try{let e=await ul();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function nN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Wf.USER_INACTIVE,is.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(WO.get(t)===s.password)return n;if(Qf.validate(s.password,t))WO.set(t,s.password);else throw ns(new Error,Wf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(nN,"findAndValidateUser");async function yV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(yV,"getSuperUser");async function IV(){let e=await ul(),t=EV.getConfigFromFile($O.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===$O.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+YO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+YO.SERVER_SUFFIX.ADMIN,r}a(IV,"getClusterUser")});var ba=m((cne,uN)=>{"use strict";var ei=F(),ar=g(),wV=eO(),one=Gs(),ane=Qn(),CV=Or(),{validateEvent:oN}=Fr(),Na=qr(),UV=require("process"),{resetDatabases:DV}=(de(),re(Ne)),LV={[ar.ITC_EVENT_TYPES.SCHEMA]:MV,[ar.ITC_EVENT_TYPES.USER]:cN};async function MV(e){let t=oN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await wV(e.message),await PV(e.message)}a(MV,"schemaHandler");async function PV(e){try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=DV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(PV,"syncSchemaMetadata");var aN=[];async function cN(e){try{try{Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Na.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=oN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${UV.pid} received user event:`,e),await CV.setUsersToGlobal();for(let r of aN)r()}catch(t){ei.error(t)}}a(cN,"userHandler");cN.addListener=function(e){aN.push(e)};uN.exports=LV});var Fr=m((fne,_N)=>{"use strict";var lne=F(),Zf=x(),vV=g(),{ITC_ERRORS:ya}=rr(),{parentPort:_ne,threadId:BV,isMainThread:HV,workerData:dne}=require("worker_threads"),{onMessageFromWorkers:qV,broadcast:Ene,broadcastWithAcknowledgement:FV}=_t();_N.exports={sendItcEvent:GV,validateEvent:lN,SchemaEventMsg:xV,UserEventMsg:kV};var ll;qV(async(e,t)=>{ll=ll||ba(),lN(e),ll[e.type]&&await ll[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function GV(e){return!HV&&e.message&&(e.message.originator=BV),FV(e)}a(GV,"sendItcEvent");function lN(e){if(typeof e!="object")return ya.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Zf.isEmpty(e.type))return ya.MISSING_TYPE;if(!e.hasOwnProperty("message")||Zf.isEmpty(e.message))return ya.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Zf.isEmpty(e.message.originator))return ya.MISSING_ORIGIN;if(vV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ya.INVALID_EVENT(e.type)}a(lN,"validateEvent");function xV(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(xV,"SchemaEventMsg");function kV(e){this.originator=e}a(kV,"UserEventMsg")});var xs=m((Sne,hN)=>{"use strict";var dN=g(),mne=x(),_l=F(),EN=XA(),Yi,{sendItcEvent:fN}=Fr();function VV(e){try{_l.trace("signalSchemaChange called with message:",e),Yi=Yi||ba();let t=new EN(dN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),fN(t)}catch(t){_l.error(t)}}a(VV,"signalSchemaChange");function $V(e){try{_l.trace("signalUserChange called with message:",e),Yi=Yi||ba();let t=new EN(dN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),fN(t)}catch(t){_l.error(t)}}a($V,"signalUserChange");hN.exports={signalSchemaChange:VV,signalUserChange:$V}});var dl=m((Tne,SN)=>{"use strict";var mN=x(),YV=g(),KV=F(),WV=Qu(),QV=Wu(),zV=xs(),{SchemaEventMsg:JV}=Fr(),XV="already exists in";SN.exports=ZV;async function ZV(e,t,r){if(mN.isEmptyOrZeroLength(r))return r;let s=[];mN.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 jV(e,t.schema,t.name,i)})),n}a(ZV,"lmdbCheckForNewAttributes");async function jV(e,t,r,s){let n=new QV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await e$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(XV))KV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(jV,"createNewAttribute");async function e$(e){let t;return t=await WV(e),zV.signalSchemaChange(new JV(process.pid,YV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(e$,"createAttribute")});var Ki=m((gne,pN)=>{"use strict";var jf=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}};pN.exports=jf});var RN=m((One,TN)=>{"use strict";var t$=Ki(),r$=g().OPERATIONS_ENUM,eh=class extends t${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(r$.INSERT,r,s,n,i),this.records=t}};TN.exports=eh});var AN=m((bne,gN)=>{"use strict";var s$=Ki(),n$=g().OPERATIONS_ENUM,th=class extends s${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(n$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};gN.exports=th});var NN=m((Ine,ON)=>{"use strict";var i$=Ki(),o$=g().OPERATIONS_ENUM,rh=class extends i${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(o$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};ON.exports=rh});var yN=m((Cne,bN)=>{"use strict";var a$=Ki(),c$=g().OPERATIONS_ENUM,sh=class extends a${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(c$.DELETE,s,n,t,i),this.original_records=r}};bN.exports=sh});var Ia=m((Lne,UN)=>{"use strict";var Dne=require("path"),IN=ye(),u$=RN(),l$=AN(),_$=NN(),d$=yN(),Wi=xe(),wN=x(),{CONFIG_PARAMS:E$}=g(),CN=Q();CN.initSync();var El=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:f$}=we();UN.exports=h$;async function h$(e,t){if(CN.get(E$.LOGGING_AUDITLOG)===!1)return;let r=f$(e.schema,e.table),s=await IN.openEnvironment(r,e.table,!0),n=m$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){IN.initializeDBIs(s,Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Wi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),wN.isEmpty(n.user_name)||s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Wi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(h$,"writeTransaction");function m$(e,t){let r=wN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===El.INSERT)return new u$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPDATE)return new l$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.UPSERT)return new _$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===El.DELETE)return new d$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(m$,"createTransactionObject")});var nh=m((vne,DN)=>{"use strict";var S$=ma(),Pne=Sa(),wa=g(),p$=ga(),T$=qi().insertRecords,R$=ye(),g$=F(),A$=dl(),{getSchemaPath:O$}=we(),N$=Ia();DN.exports=b$;async function b$(e){try{let{schema_table:t,attributes:r}=S$(e);p$(e,r,t.hash_attribute),e.schema!==wa.SYSTEM_SCHEMA_NAME&&(r.includes(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await A$(e.hdb_auth_header,t,r),n=O$(e.schema,e.table),i=await R$.openEnvironment(n,e.table),o=await T$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await N$(e,o)}catch(c){g$.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(b$,"lmdbCreateRecords")});var PN=m((Hne,MN)=>{"use strict";var LN=g(),y$=nh(),I$=Sa(),w$=require("fs-extra"),{getSchemaPath:C$}=we();MN.exports=U$;async function U$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new I$(LN.SYSTEM_SCHEMA_NAME,LN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await y$(r),await w$.mkdirp(C$(e.schema))}a(U$,"lmdbCreateSchema")});var BN=m((Fne,vN)=>{"use strict";var ih=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}};vN.exports=ih});var GN=m(($ne,FN)=>{"use strict";var HN=ye(),oh=Ht(),ah=rr().LMDB_ERRORS_ENUM,D$=xe(),qN=F(),xne=x(),L$=require("lmdb"),M$=BN(),P$=g(),{OVERFLOW_MARKER:kne,MAX_SEARCH_KEY_LENGTH:Vne}=D$,v$=P$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function B$(e,t,r,s){if(oh.validateEnv(e),t===void 0)throw new Error(ah.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ah.IDS_REQUIRED):new Error(ah.IDS_MUST_BE_ITERABLE);try{let n=HN.listDBIs(e);HN.initializeDBIs(e,t,n);let i=new M$,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[v$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,L$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let y=n[S];if(!h.hasOwnProperty(y)||y===t)continue;let O=e.dbis[y],H=h[y];if(H!=null)try{let Y=oh.getIndexedValues(H);if(Y)for(let A=0,w=Y.length;A<w;A++)O.remove(Y[A],o)}catch{qN.warn(`cannot delete from attribute: ${y}, ${H}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){qN.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=oh.getNextMonotonicTime(),i}catch(n){throw n}}a(B$,"deleteRecords");FN.exports={deleteRecords:B$}});var Ca=m((Kne,kN)=>{"use strict";var Qi=x(),H$=GN(),q$=ye(),{getSchemaPath:F$}=we(),G$=Ia(),x$=F();kN.exports=k$;async function k$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Qi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Qi.isEmptyOrZeroLength(e.hash_values)&&!Qi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Qi.isEmpty(u)||e.hash_values.push(u)}}if(Qi.isEmptyOrZeroLength(e.hash_values))return xN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Qi.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=F$(e.schema,e.table),i=await q$.openEnvironment(n,e.table),o=await H$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await G$(e,o)}catch(c){x$.error(`unable to write transaction due to ${c.message}`)}return xN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(k$,"lmdbDeleteRecords");function xN(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(xN,"createDeleteResponse")});var uh=m((zne,VN)=>{"use strict";var V$=g(),Qne=Ht();function ch(e,t){let r=Object.create(null);if(t.length===1&&V$.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(ch,"parseRow");function $$(e,t,r,s){let n=ch(r,e);s.push(n)}a($$,"searchAll");function Y$(e,t,r,s){let n=ch(r,e);s[t]=n}a(Y$,"searchAllToMap");function K$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(K$,"iterateDBI");function ti(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(ti,"pushResults");function W$(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(W$,"endsWith");function Q$(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(Q$,"contains");function z$(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(z$,"greaterThanCompare");function J$(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(J$,"greaterThanEqualCompare");function X$(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(X$,"lessThanCompare");function Z$(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(Z$,"lessThanEqualCompare");VN.exports={parseRow:ch,searchAll:$$,searchAllToMap:Y$,iterateDBI:K$,endsWith:W$,contains:Q$,greaterThanCompare:z$,greaterThanEqualCompare:J$,lessThanCompare:X$,lessThanEqualCompare:Z$,pushResults:ti}});var zi=m((eie,JN)=>{"use strict";var Sn=ye(),Xne=F(),cr=Ht(),fl=xe(),ke=rr().LMDB_ERRORS_ENUM,Zne=x(),j$=g(),hl=uh(),{parseRow:eY}=hl,jne=require("lmdb"),{OVERFLOW_MARKER:$N,MAX_SEARCH_KEY_LENGTH:tY}=fl;function YN(e,t,r,s=!1,n=void 0,i=void 0){return ri(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(YN,"iterateFullIndex");function Ua(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={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?(O.values=!1,d.getRange(O).map(H=>({value:H}))):d.getRange(O)})}a(Ua,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[fl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.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(ri,"setupTransaction");function KN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith($N)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[fl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(KN,"getOverflowCheck");function rY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(ml(r),r=Da(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>eY(l.value,r))))}a(rY,"searchAll");function sY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);ml(r),r=Da(e.database||e,r);let o=new Map;for(let{key:c,value:u}of YN(e,t,t,s,n,i))o.set(c,hl.parseRow(u,r));return o}a(sY,"searchAllToMap");function nY(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=YN(e,void 0,t,r,s,n),c=o.transaction,u=KN(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(nY,"iterateDBI");function iY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(iY,"countAll");function oY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=cr.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(oY,"equals");function aY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(aY,"count");function cY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=cr.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(cY,"startsWith");function uY(e,t,r,s,n=!1,i=void 0,o=void 0){return WN(e,t,r,s,n,i,o,!0)}a(uY,"endsWith");function WN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=KN(_,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($N)?l.getValues(f,{transaction:u}).map(T=>{let S=E(f,T);if(c?S.endsWith(s):S.includes(s))return{key:S,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[fl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(WN,"contains");function lY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!0,!1)}a(lY,"greaterThan");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!1,!1)}a(_Y,"greaterThanEqual");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!0)}a(dY,"lessThan");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!1)}a(EY,"lessThanEqual");function fY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ua(e,t,r,s,n,i,o,c)}a(fY,"between");function hY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(ml(r),r=Da(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=hl.parseRow(c,r)),o}a(hY,"searchByHash");function mY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(mY,"checkHashExists");function SY(e,t,r,s,n=[]){return zN(e,t,r,s,n),QN(e,t,r,s,n).map(i=>i[1])}a(SY,"batchSearchByHash");function pY(e,t,r,s,n=[]){zN(e,t,r,s,n);let i=new Map;for(let[o,c]of QN(e,t,r,s,n))i.set(o,c);return i}a(pY,"batchSearchByHashToMap");function QN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=Da(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,hl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(QN,"batchHashSearch");function zN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(ml(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(zN,"initializeBatchSearchByHash");function ml(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(ml,"validateFetchAttributes");function pn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>tY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Da(e,t){return t.length===1&&j$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Da,"setGetWholeRowAttributes");JN.exports={searchAll:rY,searchAllToMap:sY,count:aY,countAll:iY,equals:oY,startsWith:cY,endsWith:uY,contains:WN,searchByHash:hY,setGetWholeRowAttributes:Da,batchSearchByHash:SY,batchSearchByHashToMap:pY,checkHashExists:mY,iterateDBI:nY,greaterThan:lY,greaterThanEqual:_Y,lessThan:dY,lessThanEqual:EY,between:fY}});var Ji=m((rie,tb)=>{var XN=require("lodash"),ZN=Pe(),Ce=require("joi"),TY=x(),{hdb_schema_table:Sl,checkValidTable:jN,hdb_table:eb,hdb_database:pl}=rs(),{handleHDBError:RY,hdb_errors:gY}=W(),{getDatabases:AY}=(de(),re(Ne)),{HTTP_STATUS_CODES:OY}=gY,NY=Ce.object({database:pl,schema:pl,table:eb,search_attribute:Sl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Sl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),bY=Ce.object({database:pl,schema:pl,table:eb,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(Sl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Sl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});tb.exports=function(e,t){let r=null;switch(t){case"value":r=ZN.validateBySchema(e,NY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(jN("database",e.schema)),i(jN("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=ZN.validateBySchema(e,bY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=TY.checkGlobalSchemaTable(e.schema,e.table);if(n)return RY(new Error,n,OY.NOT_FOUND);let o=AY()[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=XN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!XN.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 lh=m((nie,rb)=>{"use strict";var yY=ye(),IY=Ji(),{getSchemaPath:wY}=we();rb.exports=CY;function CY(e){let t=IY(e,"hashes");if(t)throw t;let r=wY(e.schema,e.table);return yY.openEnvironment(r,e.table)}a(CY,"initialize")});var _h=m((oie,sb)=>{"use strict";var UY=zi(),DY=lh();sb.exports=LY;async function LY(e){let t=await DY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return UY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(LY,"lmdbGetDataByHash")});var Xi=m((cie,nb)=>{"use strict";var dh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};nb.exports=dh});var ob=m((_ie,ib)=>{"use strict";var lie=Xi(),MY=zi(),PY=lh();ib.exports=vY;async function vY(e){let t=await PY(e),r=global.hdb_schema[e.schema][e.table];return MY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(vY,"lmdbSearchByHash")});var os=m((Eie,ab)=>{"use strict";var Eh=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=_}};ab.exports=Eh});var Tl=m((hie,Eb)=>{"use strict";var Ct=zi(),BY=ye(),HY=x(),oe=xe(),si=g(),qY=Kn(),cb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:FY}=we(),ks=si.SEARCH_WILDCARDS;async function GY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=qY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=db(e,s.hash_attribute,r,t);return lb(e,n,s.hash_attribute,r)}a(GY,"prepSearch");async function lb(e,t,r,s){let n=FY(e.schema,e.table),i=await BY.openEnvironment(n,e.table),o=_b(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(xY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?ub(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ub(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(lb,"executeSearch");function _b(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 oe.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(_b,"searchByType");function ub(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ub,"createMapFromIterable");function xY(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(xY,"checkToFetchMore");function db(e,t,r,s){if(HY.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),ks.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(cb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(cb.UNKNOWN_SEARCH_TYPE)}}a(db,"createSearchTypeFromSearchObject");Eb.exports={executeSearch:lb,createSearchTypeFromSearchObject:db,prepSearch:GY,searchByType:_b}});var hb=m((pie,fb)=>{"use strict";var Sie=os(),kY=Ji(),VY=x(),$Y=g(),YY=Tl();fb.exports=KY;function KY(e,t){if(!VY.isEmpty(t)&&$Y.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=kY(e,"value");if(s)throw s;let n=!0;return YY.prepSearch(e,t,n)}a(KY,"lmdbGetDataByValue")});var La=m((gie,mb)=>{"use strict";var Rie=os(),WY=Ji(),QY=x(),zY=g(),JY=Tl();mb.exports=XY;async function XY(e,t){if(!QY.isEmpty(t)&&zY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WY(e,"value");if(s)throw s;return JY.prepSearch(e,t,!1)}a(XY,"lmdbSearchByValue")});var pb=m((Nie,Sb)=>{"use strict";var Oie=xe(),fh=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}},hh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},mh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Sb.exports={SearchByConditionsObject:fh,SearchCondition:hh,SortAttribute:mh}});var Ob=m((wie,Ab)=>{"use strict";var yie=pb().SearchByConditionsObject,ZY=os(),jY=Ji(),Sh=zi(),Rl=xe(),{Resource:Iie}=(Zr(),re(vE)),gb=Tl(),eK=uh(),tK=require("lodash"),{getSchemaPath:rK}=we(),Tb=ye(),{handleHDBError:sK,hdb_errors:nK}=W(),{HTTP_STATUS_CODES:iK}=nK,oK=1e8;Ab.exports=aK;async function aK(e){let t=jY(e,"conditions");if(t)throw sK(t,t.message,iK.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=rK(e.schema,e.table),s=await Tb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Tb.openDBI(s,l.search_attribute);let i=tK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Rl.SEARCH_TYPES.EQUALS?l.estimated_count=Sh.count(s,l.search_attribute,l.search_value):_===Rl.SEARCH_TYPES.CONTAINS||_===Rl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=oK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Rb(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(gb.filterByType),d=_.length,E=Sh.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=>eK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Rb(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=Sh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(aK,"lmdbSearchByConditions");async function Rb(e,t,r,s){let n=new ZY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Rl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,gb.searchByType(e,n,i,s).map(o=>o.value)}a(Rb,"executeConditionSearch")});var Ma=m((Uie,Nb)=>{"use strict";var cK=g().OPERATIONS_ENUM,ph=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=cK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Nb.exports=ph});var Th=m((Lie,Lb)=>{"use strict";var wb=os(),Cb=Ma(),Ub=La(),Db=Ca(),Ft=g(),bb=x(),yb=ye(),{getTransactionAuditStorePath:uK,getSchemaPath:lK}=we(),Ib=F();Lb.exports=_K;async function _K(e){try{if(bb.isEmpty(global.hdb_schema[e.schema])||bb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await dK(e),await EK(e);let t=lK(e.schema,e.table);try{await yb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ib.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=uK(e.schema,e.table);await yb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ib.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(_K,"lmdbDropTable");async function dK(e){let t=new wb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Ub(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 Cb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Db(n)}a(dK,"deleteAttributesFromSystem");async function EK(e){let t=new wb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Ub(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 Cb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Db(n)}catch(i){throw i}}a(EK,"dropTableFromSystem")});var Pb=m((Pie,Mb)=>{"use strict";var fK=require("fs-extra"),hK=os(),mK=Xi(),SK=Ma(),pK=Th(),TK=Ca(),RK=_h(),gK=La(),Vs=g(),{getSchemaPath:AK}=we(),{handleHDBError:OK,hdb_errors:NK}=W(),{HDB_ERROR_MSGS:bK,HTTP_STATUS_CODES:yK}=NK;Mb.exports=IK;async function IK(e){let t;try{t=await wK(e.schema);let r=new hK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await gK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await pK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new SK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await TK(n);let i=AK(t);await fK.remove(i)}catch(r){throw r}}a(IK,"lmdbDropSchema");async function wK(e){let t=new mK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await RK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw OK(new Error,bK.SCHEMA_NOT_FOUND(e),yK.NOT_FOUND,void 0,void 0,!0);return s}a(wK,"validateDropSchema")});var gh=m((Bie,vb)=>{"use strict";var Rh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};vb.exports=Rh});var Hb=m((Fie,Bb)=>{"use strict";var CK=require("fs-extra"),gl=ye(),{getTransactionAuditStorePath:UK}=we(),Ah=xe(),qie=gh();Bb.exports=DK;async function DK(e){let t;try{let r=UK(e.schema,e.table);await CK.mkdirp(r),t=await gl.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{gl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),gl.createDBI(t,Ah.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),gl.createDBI(t,Ah.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(DK,"createTransactionsAuditEnvironment")});var xb=m((xie,Gb)=>{"use strict";var Oh=g(),qb=ye(),LK=qi(),{getSystemSchemaPath:MK,getSchemaPath:PK}=we(),vK=Kn(),BK=Qu(),Nh=Wu(),HK=F(),qK=Hb(),yh=vK.hdb_table,Fb=[];for(let e=0;e<yh.attributes.length;e++)Fb.push(yh.attributes[e].attribute);Gb.exports=FK;async function FK(e,t){let r=PK(t.schema,t.table),s=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Nh(t.schema,t.table,Oh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Nh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await qb.createEnvironment(r,t.table),e!==void 0){let o=await qb.openEnvironment(MK(),Oh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await LK.insertRecords(o,yh.hash_attribute,Fb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await bh(s),await bh(n),await bh(i)}await qK(t)}catch(o){throw o}}a(FK,"lmdbCreateTable");async function bh(e){try{await BK(e)}catch(t){HK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(bh,"createAttribute")});var Vb=m((Vie,kb)=>{"use strict";var GK=ma(),xK=ga(),kK=dl(),Pa=g(),VK=qi().updateRecords,$K=ye(),{getSchemaPath:YK}=we(),KK=Ia(),WK=F();kb.exports=QK;async function QK(e){try{let{schema_table:t,attributes:r}=GK(e);xK(e,r,t.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(r.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await kK(e.hdb_auth_header,t,r),n=YK(e.schema,e.table),i=await $K.openEnvironment(n,e.table),o=await VK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await KK(e,o)}catch(c){WK.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(QK,"lmdbUpdateRecords")});var Yb=m((Yie,$b)=>{"use strict";var zK=g().OPERATIONS_ENUM,Ih=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=zK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$b.exports=Ih});var Wb=m((Qie,Kb)=>{"use strict";var Wie=Yb(),JK=ma(),XK=ga(),ZK=dl(),va=g(),jK=qi().upsertRecords,e1=ye(),{getSchemaPath:t1}=we(),r1=Ia(),s1=F(),{handleHDBError:n1,hdb_errors:i1}=W();Kb.exports=o1;async function o1(e){let t;try{t=JK(e)}catch(u){throw n1(u,u.message,i1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;XK(e,s,r.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(s.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await ZK(e.hdb_auth_header,r,s),i=t1(e.schema,e.table),o=await e1.openEnvironment(i,e.table),c=await jK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await r1(e,c)}catch(u){s1.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(o1,"lmdbUpsertRecords")});var zb=m((Jie,Qb)=>{"use strict";var wh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Qb.exports=wh});var Xb=m((Zie,Jb)=>{"use strict";var Ch=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}};Jb.exports=Ch});var ey=m((toe,jb)=>{"use strict";var Uh=ye(),{getTransactionAuditStorePath:a1}=we(),eoe=zb(),Ba=xe(),c1=x(),Zb=Xb(),u1=require("util").promisify,l1=u1(setTimeout),_1=1e4,d1=100;jb.exports=E1;async function E1(e){let t=a1(e.schema,e.table),r=await Uh.openEnvironment(t,e.table,!0),s=Uh.listDBIs(r);Uh.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Zb;do n=await f1(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 l1(d1);while(n.transactions_deleted>0);return i}a(E1,"deleteAuditLogsBefore");async function f1(e,t){let r=new Zb;try{let s=e.dbis[Ba.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[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];c1.isEmpty(c)||(n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>_1)break}return await n,r}catch(s){throw s}}a(f1,"deleteTransactions")});var ry=m((soe,ty)=>{"use strict";var Dh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ty.exports=Dh});var ny=m((ooe,sy)=>{"use strict";var h1=os(),m1=Ma(),ioe=ry(),as=g(),S1=x(),Lh=ye(),p1=Kn(),T1=La(),R1=Ca(),{getSchemaPath:g1}=we();sy.exports=A1;async function A1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=p1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await N1(e),n=g1(e.schema,e.table),i=await Lh.openEnvironment(n,e.table);return t===!0&&await O1(e,i,r.hash_attribute),Lh.dropDBI(i,e.attribute),s}a(A1,"lmdbDropAttribute");async function O1(e,t,r){let s=Lh.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(O1,"removeAttributeFromAllObjects");async function N1(e){let t=new h1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await T1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(S1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new m1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return R1(i)}a(N1,"dropAttributeFromSystem")});var ly=m((uoe,uy)=>{"use strict";var Mh=ye(),Zi=xe(),coe=Ht(),Ph=g(),iy=x(),{getTransactionAuditStorePath:b1}=we(),y1=zi(),Al=Ki(),I1=F();uy.exports=w1;async function w1(e){let t=b1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return oy(r,e.search_values);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,U1(r,e.search_values,n);case Ph.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return C1(r,e.search_values);default:return oy(r)}}a(w1,"readAuditLog");function oy(e,t=[0,Date.now()]){iy.isEmpty(t[0])&&(t[0]=0),iy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Zi.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 Al,n))}a(oy,"searchTransactionsByTimestamp");function C1(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[Zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,cy(e,i))}return Object.fromEntries(r)}a(C1,"searchTransactionsByUsername");function U1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=y1.equals(e,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Zi.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=cy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ay(u,"records",r,_,o),ay(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(U1,"searchTransactionsByHashValues");function ay(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 Al(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Al(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ay,"loopRecords");function cy(e,t){let r=[];try{let s=e.dbis[Zi.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 Al,i);r.push(o)}}catch(i){I1.warn(i)}return r}catch(s){throw s}}a(cy,"batchSearchTransactions")});var dy=m((Eoe,_y)=>{"use strict";var{getSchemaPath:_oe}=we(),doe=ye(),{database:D1}=(de(),re(Ne));_y.exports={writeTransaction:L1};async function L1(e,t,r){return D1({database:e,table:t}).transaction(r)}a(L1,"writeTransaction")});var my=m((hoe,hy)=>{"use strict";var{getSchemaPath:Ey}=we(),fy=ye();hy.exports={flush:M1,resetReadTxn:P1};async function M1(e,t){return(await fy.openEnvironment(Ey(e,t),t.toString())).flushed}a(M1,"flush");async function P1(e,t){try{(await fy.openEnvironment(Ey(e,t),t.toString())).resetReadTxn()}catch{}}a(P1,"resetReadTxn")});var Ry=m((Soe,Ty)=>{"use strict";var{Readable:v1}=require("stream"),{getDatabases:B1}=(de(),re(Ne)),{readSync:H1,openSync:q1,createReadStream:Sy}=require("fs"),{open:F1}=require("lmdb"),py=Hu(),G1=Fu(),{INTERNAL_DBIS_NAME:x1}=xe();Ty.exports=V1;var vh=32768,k1=100;async function V1(e){let t=e.database||e.schema||"data",r=B1()[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=F1({noSync:!0,maxDbs:G1.MAX_DBS}),E,f=d.openDB(x1,new py(!1)),h=_.useReadTransaction(),T=0;for(let{key:y,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(H=>y.startsWith?.(H+"/"))){f.put(y,O);let[,H]=y.split("/"),Y=!H,A=new py(!Y,Y);A.encoding="binary";let w=d.openDB(y,A),G=_.openDB(y,A);for(let{key:k,version:X,value:ge}of G.getRange({transaction:h,versions:Y}))E=w.put(k,ge,X),T++%k1===0&&await new Promise(ct=>setTimeout(ct,20))}await E;let S=Sy(d.path);return S.headers=u(),S.on("close",()=>{h.done(),d.close()}),S}let o=r[Object.keys(r)[0]].primaryStore,c=q1(o.path);return o.transaction(()=>{let l=Buffer.alloc(vh);H1(c,l,0,vh);let _=o.useReadTransaction(),d=Sy(null,{fd:c,start:vh}),E=new v1.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(V1,"getBackup")});var Oy=m((Toe,Ay)=>{"use strict";var $1=F(),{handleHDBError:Y1}=W(),K1=iA(),W1=Qu(),Q1=nh(),z1=PN(),J1=Ca(),X1=_h(),Z1=ob(),j1=hb(),eW=La(),tW=Ob(),rW=Pb(),sW=xb(),nW=Vb(),iW=Wb(),oW=ey(),aW=Th(),cW=ny(),uW=ly(),lW=dy(),gy=my(),_W=Ry(),Bh=class extends K1{static{a(this,"LMDBBridge")}async searchByConditions(t){return tW(t)}async getDataByHash(t){return await X1(t)}async searchByHash(t){return await Z1(t)}async getDataByValue(t,r){return await j1(t,r)}async searchByValue(t){return await eW(t)}async createSchema(t){return await z1(t)}async dropSchema(t){return await rW(t)}async createTable(t,r){return await sW(t,r)}async dropTable(t){return await aW(t)}async createAttribute(t){return await W1(t)}async createRecords(t){return await Q1(t)}async updateRecords(t){return await nW(t)}async upsertRecords(t){try{return await iW(t)}catch(r){throw Y1(r,null,null,$1.ERR,r)}}async deleteRecords(t){return await J1(t)}async dropAttribute(t){return await cW(t)}async deleteAuditLogsBefore(t){return await oW(t)}async readAuditLog(t){return await uW(t)}writeTransaction(t,r,s){return lW.writeTransaction(t,r,s)}flush(t,r){return gy.flush(t,r)}resetReadTxn(t,r){return gy.resetReadTxn(t,r)}getBackup(t){return _W(t)}};Ay.exports=Bh});var Ly={};Ze(Ly,{ResourceBridge:()=>Fh});function Gh({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 by(e,t){let r=cs(e),s=Gh(e,r);if(!r)throw new Gr.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 Ye(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&&Uu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||EW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,dW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function yy(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*Iy(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 wy,Ol,Gr,Cy,Uy,kr,Hh,qh,Dy,dW,EW,fW,hW,Ny,Fh,My=pe(()=>{"use strict";wy=D(Oy()),Ol=D(Ji()),Gr=D(W());de();Cy=D(ma()),Uy=D(ga()),kr=D(g()),Hh=D(xs()),qh=D(Fr()),Dy=D(x());$n();Du();({HDB_ERROR_MSGS:dW}=Gr.hdb_errors),EW="data",fW=1e4,hW=10,Fh=class extends wy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ny=this}async searchByConditions(t){let r=(0,Ol.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new Gr.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:Gh(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 Gr.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}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(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){cs(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Hh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await xh(t.schema),Hh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.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,Ny.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Cy.default)(t);(0,Uy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ye(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=Uu(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=xr()[t.schema][t.table],s={user:t.hdb_user};return Ye(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 yy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.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,Dy.async_set_timeout)(hW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%fW===0&&await l();return u.length>0&&await l(),n?yy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Ol.default)(t,"hashes");if(r)throw r;return by(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of by(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Ol.default)(t,"value");if(s)throw s;let n=cs(t);if(!n)throw new Gr.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===kr.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:Gh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(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){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case kr.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 kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Iy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Iy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Gh,"getSelect");a(by,"getRecords");a(cs,"getTable");a(yy,"createDeleteResponse");a(Iy,"groupRecordsInHistory")});var qr=m((boe,Py)=>{"use strict";var{ResourceBridge:mW}=(My(),re(Ly)),SW=Q();SW.initSync();var Nl;function pW(){return Nl||(Nl=new mW,Nl)}a(pW,"getBridge");Py.exports=pW()});var qy=m((Ioe,Hy)=>{"use strict";var vy=require("lodash"),qa=require("mathjs"),TW=require("jsonata"),By=x();Hy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?vy.uniqWith(e,vy.isEqual):e,searchJSON:RW,mad:Fa.bind(null,qa.mad),mean:Fa.bind(null,qa.mean),mode:Fa.bind(null,qa.mode),prod:Fa.bind(null,qa.prod),median:Fa.bind(null,qa.median)};function Fa(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(Fa,"aggregateFunction");function RW(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(By.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),By.isEmpty(this.__ala__.res[r])){let s=TW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(RW,"searchJSON")});var Gy=m((Coe,Fy)=>{"use strict";var We=require("moment"),kh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;Fy.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(kh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(kh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(kh)}});var $y=m((Uoe,Vy)=>{"use strict";var gW=require("@turf/area"),AW=require("@turf/length"),OW=require("@turf/circle"),NW=require("@turf/difference"),bW=require("@turf/distance"),yW=require("@turf/boolean-contains"),IW=require("@turf/boolean-equal"),wW=require("@turf/boolean-disjoint"),CW=require("@turf/helpers"),xy=g(),le=x();Vy.exports={geoArea:UW,geoLength:DW,geoCircle:LW,geoDifference:MW,geoDistance:ky,geoNear:PW,geoContains:vW,geoEqual:BW,geoCrosses:HW,geoConvert:qW};var Vh="geo1 is required",$h="geo2 is required";function UW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),gW.default(e)}a(UW,"geoArea");function DW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),AW.default(e,{units:t||"kilometers"})}a(DW,"geoLength");function LW(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),OW.default(e,t,{units:r||"kilometers"})}a(LW,"geoCircle");function MW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),NW(e,t)}a(MW,"geoDifference");function ky(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),bW.default(e,t,{units:r||"kilometers"})}a(ky,"geoDistance");function PW(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return ky(e,t,s)<=r}a(PW,"geoNear");function vW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),yW.default(e,t)}a(vW,"geoContains");function BW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),IW.default(e,t)}a(BW,"geoEqual");function HW(e,t){if(le.isEmpty(e))throw new Error(Vh);if(le.isEmpty(e))throw new Error($h);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!wW.default(e,t)}a(HW,"geoCrosses");function qW(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty(xy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(xy.GEO_CONVERSION_ENUM).join(",")}`);return CW[t](e,r)}a(qW,"geoConvert")});var bl=m((Loe,Yy)=>{var ni=qy(),ur=Gy(),us=$y();Yy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var zy=m((Moe,Qy)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var FW=bl(),Ky=require("clone"),yl=require("recursive-iterator"),se=F(),ne=x(),ji=qr(),GW=g(),{hdb_errors:xW}=W(),{getDatabases:Wy}=(de(),re(Ne)),kW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";FW(pt);var Yh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new yl(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(Ky(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Ga.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=Wy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new yl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new yl(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(!ne.isEmpty(GW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&Ga.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(Ky(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(ne.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(kW)>-1&&this.tables.forEach(n=>{let i={columnid:Wy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Ga.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),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ji.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 se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}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 ji.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,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.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 ji.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,S]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ji.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,ne.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,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${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 "${T}.${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 pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.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 T=E[f];o.forEach(S=>{T[S.key]!==null&&T[S.key]!==void 0&&S.keys.add(T[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=Ga.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,y=T.length;S<y;S++){let O=T[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new yl(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=Ga.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}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 ji.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 T=n.columns[h],S=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(S)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(xW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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 ji.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 se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Qy.exports=Yh});var gr=m((voe,Jy)=>{"use strict";var VW=sA();Jy.exports={searchByConditions:YW,searchByHash:KW,searchByValue:WW,search:QW};var Kh=qr(),{transformReq:Wh}=x(),$W=zy();async function YW(e){return Wh(e),Kh.searchByConditions(e)}a(YW,"searchByConditions");async function KW(e){Wh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Kh.searchByHash(e))r&&t.push(r);return t}a(KW,"searchByHash");async function WW(e){Wh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Kh.searchByValue(e))t.push(r);return t}a(WW,"searchByValue");function QW(e,t){try{let r=new VW(e);r.validate(),new $W(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(QW,"search")});var Il=m((Hoe,Xy)=>{"use strict";var zW=qr();Xy.exports={writeTransaction:JW};function JW(e,t,r){return zW.writeTransaction(e,t,r)}a(JW,"writeTransaction")});var tI=m((Goe,eI)=>{"use strict";var XW=gr(),ZW=Gs(),Zy=F(),jW=Ar(),Foe=Il(),eQ=require("clone"),zh=require("alasql"),tQ=bl(),jy=require("util"),rQ=jy.promisify(ZW.getTableSchema),sQ=jy.promisify(XW.search),nQ=g(),Qh=x();tQ(zh);eI.exports={update:oQ};var iQ="There was a problem performing this update. Please check the logs and try again.";async function oQ({statement:e,hdb_user:t}){let r=await rQ(e.table.databaseid,e.table.tableid),s=aQ(e.columns);Qh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=eQ(n),c=Qh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=zh.parse(u).statements[0],_=await sQ(l),d=cQ(s,_);return uQ(o,d,t)}a(oQ,"update");function aQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=zh.compile(`SELECT ${r.expression.toString()} AS [${nQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Zy.error(t),new Error(iQ)}}a(aQ,"createUpdateRecord");function cQ(e,t){return Qh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(cQ,"buildUpdateRecords");async function uQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await jW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Zy.error(`Error delete new_attributes from update response: ${i}`)}return n}a(uQ,"updateRecords")});var sI=m(($oe,rI)=>{var lQ=require("alasql"),_Q=gr(),dQ=F(),EQ=qr(),Xh=require("util"),Jh=x(),fQ=g(),hQ=Gs(),koe=Il(),Voe=Ar(),mQ="record",SQ="successfully deleted",pQ=Xh.callbackify(AQ),TQ=Xh.promisify(_Q.search),RQ=Xh.promisify(hQ.getTableSchema);rI.exports={convertDelete:pQ};function gQ(e){return`${e.deleted_hashes.length} ${mQ}${e.deleted_hashes.length===1?"":"s"} ${SQ}`}a(gQ,"generateReturnMessage");async function AQ({statement:e,hdb_user:t}){let r=await RQ(e.table.databaseid,e.table.tableid);Jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=lQ.parse(o).statements[0],u={operation:fQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await TQ(c);let l=await EQ.deleteRecords(u);return Jh.isEmptyOrZeroLength(l.message)&&(l.message=gQ(l)),delete l.txn_time,l}catch(l){throw dQ.error(l),l.hdb_code?l.message:l}}a(AQ,"convertDelete")});var cI=m((Koe,aI)=>{"use strict";var OQ=Qn(),{hdb_errors:nI}=W(),{getDatabases:iI}=(de(),re(Ne));aI.exports={checkSchemaExists:oI,checkSchemaTableExists:NQ,schema_describe:OQ};async function oI(e){if(!iI()[e])return nI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(oI,"checkSchemaExists");async function NQ(e,t){let r=await oI(e);if(r)return r;if(!iI()[e][t])return nI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(NQ,"checkSchemaTableExists")});var xa=m((Qoe,bQ)=>{bQ.exports={name:"harperdb",version:"4.2.0-alpha.11",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.382.0","@aws-sdk/lib-storage":"3.382.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.5","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.14.2",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.9","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 Ml={};Ze(Ml,{addAnalyticsListener:()=>tm,recordAction:()=>oi,recordActionBinary:()=>Ll,setAnalyticsEnabled:()=>yQ});function yQ(e){pI=e}function oi(e,t,r,s,n){if(!pI)return;let i=t+"-"+r;s&&(i+="-"+s);let o=Ul.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ul.set(i,o)),Cl||IQ()}function Ll(e,t,r,s,n){oi(e?1:0,t,r,s,n)}function tm(e){RI.push(e)}function IQ(){Cl=performance.now(),setTimeout(()=>{let e=performance.now()-Cl;Cl=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Ul)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of RI)n(t);Ul=new Map,ii.parentPort?ii.parentPort.postMessage({type:TI,report:r}):AI({report:r})},em).unref()}async function wQ(e,t=6e4){let r=rm(),s;for(let _ of r.primaryStore.getRange({start:wl+"z",end:wl,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:T,type:S,metric:y,count:O,threadId:H,...Y}=f;O||(O=1);let A=y+(h?"-"+h:"");T&&(A+="-"+T);let w=i.get(A);if(w)for(let G in Y){let k=Y[G];if(typeof k=="number"){let X=w.count||1;w[G]=(w[G]*X+k*O)/(w.count=X+O)}}else w=Object.assign({period:t},f),i.set(A,w)}await CQ()}for(let[_,d]of i)d.id=wl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:wl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-uI,active:l-lI,time:c}),uI=u,lI=l}async function UQ(e,t){let r=rm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function rm(){return _I||(_I=tt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function LQ(){gI=!0,setInterval(async()=>{await wQ(em,jh),await UQ(DQ,em)},jh/2).unref()}function AI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(dI+=s.mean*s.count);r.totalBytesProcessed=dI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(EI.get(t))}),EI.set(t,t.performance.eventLoopUtilization())),r.id=(0,mI.getNextMonotonicTime)(),rm().put(r),gI||LQ(),MQ&&(OI=vQ(r))}async function vQ(e){if(await OI,!Tn){let r=(0,ka.dirname)((0,hI.getLogFilePath)());try{Tn=await(0,Zh.open)((0,ka.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,Zh.open)((0,ka.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>PQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
6
- `,t)}var ii,fI,hI,ka,Zh,mI,Dl,SI,Ul,jh,pI,Cl,em,TI,RI,wl,uI,lI,CQ,DQ,_I,gI,dI,EI,MQ,OI,Tn,PQ,eo=pe(()=>{ii=require("worker_threads"),fI=D(_t());de();hI=D(F()),ka=require("path"),Zh=require("fs/promises"),mI=D(Ht()),Dl=D(Q()),SI=D(g());(0,Dl.initSync)();Ul=new Map,jh=(0,Dl.get)(SI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,pI=jh>0;a(yQ,"setAnalyticsEnabled");a(oi,"recordAction");a(Ll,"recordActionBinary");Cl=0,em=1e3,TI="analytics-report",RI=[];a(tm,"addAnalyticsListener");a(IQ,"sendAnalytics");wl="sum-";a(wQ,"aggregation");uI=0,lI=0,CQ=a(()=>new Promise(setImmediate),"rest");a(UQ,"cleanup");DQ=36e5;a(rm,"getAnalyticsTable");(0,fI.setChildListenerByType)(TI,AI);a(LQ,"startScheduledTasks");dI=0,EI=new Map,MQ=!1;a(AI,"recordAnalytics");PQ=1e6;a(vQ,"logAnalytics")});var rt=m((aae,kI)=>{"use strict";var Tt=Q();Tt.initSync();var BQ=require("fs-extra"),HQ=require("semver"),Ka=require("path"),{monotonicFactory:qQ}=require("ulidx"),om=qQ(),FQ=require("util"),bI=require("child_process"),GQ=FQ.promisify(bI.exec),xQ=bI.spawn,_e=Be(),Te=g(),Pl=x(),Nr=F(),vl=Fs(),kQ=Il(),Va=Tr(),{Encoder:VQ,decode:am}=require("msgpackr"),yI=new VQ,{isEmpty:ai}=Pl,II=Or(),wI=12e10,$Q=48*36e11,YQ=5e9,{connect:KQ,StorageType:CI,RetentionPolicy:UI,AckPolicy:Bl,DeliverPolicy:Hl,DiscardPolicy:WQ,NatsConnection:sae,JetStreamManager:nae,JetStreamClient:iae,StringCodec:oae,JSONCodec:QQ,createInbox:cm,headers:zQ,ErrorCode:NI}=require("nats"),{PACKAGE_ROOT:JQ}=g(),XQ=xa(),{recordAction:ZQ}=(eo(),re(Ml)),DI=QQ(),jQ="clustering",ez=XQ.engines[_e.NATS_SERVER_NAME],tz=Ka.join(JQ,"dependencies"),im=Ka.join(tz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),sm,nm,$a,to,ro;kI.exports={runCommand:LI,checkNATSServerInstalled:rz,createConnection:um,getConnection:ql,getJetStreamManager:Wa,getJetStream:MI,getNATSReferences:Gt,getServerList:nz,createLocalStream:lm,listStreams:PI,deleteLocalStream:iz,getServerConfig:Qa,listRemoteStreams:oz,viewStream:az,viewStreamIterator:cz,publishToStream:uz,createWorkQueueStream:lz,addSourceToWorkStream:BI,request:dz,removeSourceFromWorkStream:qI,reloadNATS:_m,reloadNATSHub:Ez,reloadNATSLeaf:fz,extractServerName:HI,requestErrorHandler:hz,updateWorkStream:mz,createLocalTableStream:GI,createTableStreams:Sz,purgeTableStream:xI,purgeSchemaTableStreams:pz,getStreamInfo:Tz,updateLocalStreams:gz,closeConnection:sz,getJsmServerName:za,addNatsMsgHeader:vI,updateIngestStreamConsumer:_z};async function LI(e,t=void 0){let{stdout:r,stderr:s}=await GQ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var LB=Object.create;var Yo=Object.defineProperty;var MB=Object.getOwnPropertyDescriptor;var PB=Object.getOwnPropertyNames;var vB=Object.getPrototypeOf,BB=Object.prototype.hasOwnProperty;var a=(e,t)=>Yo(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Yo(e,r,{get:t[r],enumerable:!0})},jT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of PB(t))!BB.call(e,n)&&n!==r&&Yo(e,n,{get:()=>t[n],enumerable:!(s=MB(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?LB(vB(e)):{},jT(t||!e||!e.__esModule?Yo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>jT(Yo({},"__esModule",{value:!0}),e);var rR=m((wte,tR)=>{var HB=require("fast-glob"),{statSync:lE,existsSync:_E,readFileSync:qB,writeFileSync:FB}=require("fs"),{spawnSync:GB,spawn:xB}=require("child_process"),{isMainThread:kB}=require("worker_threads"),{join:Is,relative:eR}=require("path"),{PACKAGE_ROOT:mr}=A(),{tmpdir:VB}=require("os");require("source-map-support").install();var $B=["resources","server","dataLayer"],Ko="ts-build",dE,YB=__filename.endsWith("tsBuild.js");if(YB){if(kB){let r;try{lE(Is(mr,Ko)),r=!0}catch{}if(r)for(let s of HB.sync($B.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=lE(Is(mr,s)).mtimeMs-5e3,i=lE(Is(mr,Ko,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."),dE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),dE=!0;if(dE){let s=GB(process.argv[0],[Is(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Is(VB(),"harperdb-tsc.pid"),i;if(_E(n))try{process.kill(+qB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=xB(process.argv[0],[Is(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});FB(n,o.pid.toString()),o.unref()}}}}let e=tR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=eR(mr,s[0]),o;i.startsWith(Ko)?o=Is(mr,eR(Ko,i)):o=Is(mr,Ko,i);let c=Is(o,r),u=c+".js";if(_E(u))return u;if(c.includes(".")&&_E(c))return c}return t(r,s,n)}}});var A=m((Dte,mR)=>{"use strict";var Sr=require("path"),KB=require("fs"),{relative:Cte,join:Ute}=Sr,{existsSync:WB}=KB;function QB(){let e=__dirname;for(;!WB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(QB,"getHDBPackageRoot");var un=QB(),sR="js",lu=sR,zB="harperdb-config.yaml",JB="defaultConfig.yaml",XB="hdb",nR=`harperdb.${lu}`,iR=`customFunctionsServer.${lu}`,ZB=`restartHdb.${lu}`,fE="HarperDB",uu="Custom Functions",_u="Clustering Hub",du="Clustering Leaf",jB="Clustering Ingest Service",eH="Clustering Reply Service",tH="foreground.pid",rH="hdb.pid",sH="data",nH={HDB:fE,CLUSTERING_HUB:_u,CLUSTERING_LEAF:du,CLUSTERING_INGEST_SERVICE:jB,CLUSTERING_REPLY_SERVICE:eH,CUSTOM_FUNCTIONS:uu,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"},iH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},oH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},aH={harperdb:fE,"clustering hub":_u,"clustering leaf":du,"custom functions":uu,custom_functions:uu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},cH={CLUSTERING_HUB_PROC_DESCRIPTOR:_u,CLUSTERING_LEAF_PROC_DESCRIPTOR:du},EE={HDB:Sr.join(un,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(un,"server/customFunctions"),CLUSTERING_HUB:Sr.join(un,"server/nats"),CLUSTERING_LEAF:Sr.join(un,"server/nats")},uH={HDB:Sr.join(EE.HDB,nR),CUSTOM_FUNCTIONS:Sr.join(EE.CUSTOM_FUNCTIONS,iR)},lH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(un,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(un,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(un,"launchServiceScripts/launchUpdateNodes4-0-0.js")},_H={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},oR="support@harperdb.io",dH="customer-success@harperdb.io",aR=1,EH=4141,cR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",fH="https://www.harperdb.io/product",hH=`For support, please submit a request at ${cR} or contact ${oR}`,uR=`For license support, please contact ${dH}`,mH="None of the specified records were found.",SH="hash attribute not found",pH=`Your current license only supports ${aR} role. ${uR}`,TH="Your current license only supports 3 connections to a node.",RH="127.0.0.1",gH=1,AH=/^\.$/,OH=/^\.\.$/,NH="U+002E",bH=/\//g,yH="U+002F",IH=/U\+002F/g,wH=/^U\+002E$/,CH=/^U\+002EU\+002E$/,UH="d",DH=999999,LH="*",MH="--max-old-space-size=",PH="system",vH="__hdb_hash",BH=".harperdb",HH=".hdb",qH="keys",FH="hdb_boot_properties.file",GH=".updateConfig.json",xH="SIGTSTP",kH=24,VH=6e4,$H=448,YH="blob",KH="trash",WH="database",QH="schema",zH="transactions",JH=".count",XH="id",ZH="PROCESS_NAME",lR={SETTINGS_PATH_KEY:"settings_path"},_R=require("lodash"),jH={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"},e0={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},t0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},r0={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"},s0={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:",n0={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"},i0={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"},o0="060493.ks",a0=".license",c0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},K={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"},u0={CSV:".csv",JSON:".json"},l0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},_0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Wo={};Wo[K.INSERT]=K.INSERT;Wo[K.UPDATE]=K.UPDATE;Wo[K.UPSERT]=K.UPSERT;Wo[K.DELETE]=K.DELETE;var ge=Object.create(null);ge[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;ge[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;ge[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;ge[K.READ_LOG]=K.READ_LOG;ge[K.ADD_NODE]=K.ADD_NODE;ge[K.LIST_USERS]=K.LIST_USERS;ge[K.LIST_ROLES]=K.LIST_ROLES;ge[K.USER_INFO]=K.USER_INFO;ge[K.SQL]=K.SQL;ge[K.GET_JOB]=K.GET_JOB;ge[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;ge[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;ge[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;ge[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;ge[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;ge[K.REMOVE_NODE]=K.REMOVE_NODE;ge[K.RESTART]=K.RESTART;ge[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;ge[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;ge[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;ge[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;ge[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;ge[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;ge[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;ge[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;ge[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var d0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},E0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},dR={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"},f0=_R.invert(dR),g={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"},ER={settings_path:lR.SETTINGS_PATH_KEY,hdb_root_key:g.ROOTPATH,hdb_root:g.ROOTPATH,server_port_key:g.OPERATIONSAPI_NETWORK_PORT,server_port:g.OPERATIONSAPI_NETWORK_PORT,cert_key:g.OPERATIONSAPI_TLS_CERTIFICATE,certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:g.OPERATIONSAPI_NETWORK_HTTPS,https_on:g.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:g.OPERATIONSAPI_NETWORK_CORS,cors_on:g.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:g.LOGGING_LEVEL,log_level:g.LOGGING_LEVEL,log_path_key:g.LOGGING_ROOT,log_path:g.LOGGING_ROOT,props_env_key:g.OPERATIONSAPI_NODEENV,node_env:g.OPERATIONSAPI_NODEENV,clustering_node_name_key:g.CLUSTERING_NODENAME,node_name:g.CLUSTERING_NODENAME,clustering_enabled_key:g.CLUSTERING_ENABLED,clustering:g.CLUSTERING_ENABLED,max_http_threads:g.HTTP_THREADS,max_hdb_processes:g.HTTP_THREADS,server_timeout_key:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:g.LOGGING_AUDITLOG,disable_transaction_log:g.LOGGING_AUDITLOG,operation_token_timeout_key:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:g.CUSTOMFUNCTIONS_ENABLED,custom_functions:g.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:g.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:g.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:g.HTTP_THREADS,log_to_file:g.LOGGING_FILE,log_to_stdstreams:g.LOGGING_STDSTREAMS,run_in_foreground:g.OPERATIONSAPI_FOREGROUND,local_studio_on:g.LOCALSTUDIO_ENABLED,clustering_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:g.CLUSTERING_USER,clustering_enabled:g.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:g.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:g.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:g.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:g.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:g.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:g.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:g.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:g.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:g.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:g.CLUSTERING_NODENAME,clustering_tls_certificate:g.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:g.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:g.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:g.CLUSTERING_TLS_INSECURE,clustering_tls_verify:g.CLUSTERING_TLS_VERIFY,clustering_loglevel:g.CLUSTERING_LOGLEVEL,clustering_republishmessages:g.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:g.CLUSTERING_DATABASELEVEL,customfunctions_enabled:g.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:g.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:g.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:g.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:g.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:g.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:g.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:g.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:g.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:g.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:g.CUSTOMFUNCTIONS_NODEENV,http_threads:g.HTTP_THREADS,http_session_affinity:g.HTTP_SESSION_AFFINITY,customfunctions_processes:g.HTTP_THREADS,customfunctions_root:g.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:g.LOCALSTUDIO_ENABLED,logging_file:g.LOGGING_FILE,logging_level:g.LOGGING_LEVEL,logging_root:g.LOGGING_ROOT,logging_rotation_enabled:g.LOGGING_ROTATION_ENABLED,logging_rotation_compress:g.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:g.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:g.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:g.LOGGING_ROTATION_PATH,logging_stdstreams:g.LOGGING_STDSTREAMS,logging_auditlog:g.LOGGING_AUDITLOG,logging_auditretention:g.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:g.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:g.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:g.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:g.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:g.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:g.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:g.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:g.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:g.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:g.OPERATIONSAPI_NODEENV,operationsapi_root:g.ROOTPATH,schemas:g.SCHEMAS,storage_path:g.STORAGE_PATH,ignorescripts:g.IGNORE_SCRIPTS,mqtt_network_port:g.MQTT_NETWORK_PORT,mqtt_websocket:g.MQTT_WEBSOCKET,mqtt_network_secureport:g.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:g.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:g.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:g.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:g.AUTHENTICATION_CACHETTL,authentication_enablesessions:g.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in g){let t=g[e];ER[t.toLowerCase()]=t}var h0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},m0={csv_file_load:"csv_file_load",csv_data_load:K.CSV_DATA_LOAD,csv_url_load:K.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"},S0={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"},p0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},T0={VERSION_DEFAULT:"2.2.0"},R0={DEVELOPMENT:8192,DEFAULT:512},g0={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"},A0={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"},O0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},fR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},N0=Symbol("metadata"),b0="__clustering__",y0=Object.values(fR),I0=15984864e5,hR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},w0=_R.invert(hR),C0={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"},U0=111,D0=`\r
2
+ `,L0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},M0=["*","%"],P0="unauthorized_access",v0="func_val",B0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},H0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},q0={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"},F0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},G0={HTTP:"http"},x0={STOPPED:"stopped",ONLINE:"online"},k0="3.x.x",V0={SUCCESS:"success",FAILURE:"failure"},$0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};mR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:oR,HDB_SUPPORT_URL:cR,HDB_PRICING_URL:fH,SUPPORT_HELP_MSG:hH,LICENSE_HELP_MSG:uR,HDB_PROC_NAME:nR,HDB_PROC_DESCRIPTOR:fE,CLUSTERING_LEAF_PROC_DESCRIPTOR:du,CLUSTERING_HUB_PROC_DESCRIPTOR:_u,SYSTEM_SCHEMA_NAME:PH,HASH_FOLDER_NAME:vH,HDB_HOME_DIR_NAME:BH,UPDATE_FILE_NAME:GH,LICENSE_KEY_DIR_NAME:qH,BOOT_PROPS_FILE_NAME:FH,JOB_TYPE_ENUM:m0,JOB_STATUS_ENUM:c0,SYSTEM_TABLE_NAMES:r0,SYSTEM_TABLE_HASH_ATTRIBUTES:s0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:u0,S3_BUCKET_AUTH_KEYS:l0,VALID_SQL_OPS_ENUM:_0,GEO_CONVERSION_ENUM:E0,HDB_SETTINGS_NAMES:dR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:f0,SERVICE_ACTIONS_ENUM:d0,CLUSTER_MESSAGE_TYPE_ENUM:S0,CLUSTER_CONNECTION_DIRECTION_ENUM:p0,CLUSTER_EVENTS_DEFS_ENUM:g0,PERIOD_REGEX:AH,DOUBLE_PERIOD_REGEX:OH,UNICODE_PERIOD:NH,FORWARD_SLASH_REGEX:bH,UNICODE_FORWARD_SLASH:yH,ESCAPED_FORWARD_SLASH_REGEX:IH,ESCAPED_PERIOD_REGEX:wH,ESCAPED_DOUBLE_PERIOD_REGEX:CH,REG_KEY_FILE_NAME:o0,RESTART_TIMEOUT_MS:VH,HDB_FILE_PERMISSIONS:$H,DATABASES_DIR_NAME:WH,LEGACY_DATABASES_DIR_NAME:QH,TRANSACTIONS_DIR_NAME:zH,LIMIT_COUNT_NAME:JH,ID_ATTRIBUTE_STRING:XH,INSERT_MODULE_ENUM:e0,UPGRADE_JSON_FIELD_NAMES_ENUM:t0,RESTART_CODE:xH,RESTART_CODE_NUM:kH,CLUSTER_OPERATIONS:Wo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:i0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:n0,CLUSTERING_MESSAGE_TYPES:C0,HDB_FILE_SUFFIX:HH,BLOB_FOLDER_NAME:YH,HDB_TRASH_DIR:KH,ORIGINATOR_SET_VALUE:U0,LICENSE_VALUES:T0,RAM_ALLOCATION_ENUM:R0,TIME_STAMP_NAMES_ENUM:fR,TIME_STAMP_NAMES:y0,PERMS_UPDATE_RELEASE_TIMESTAMP:I0,SEARCH_NOT_FOUND_MESSAGE:mH,SEARCH_ATTRIBUTE_NOT_FOUND:SH,LICENSE_ROLE_DENIED_RESPONSE:pH,LICENSE_MAX_CONNS_REACHED:TH,BASIC_LICENSE_MAX_NON_CU_ROLES:aR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:EH,VALUE_SEARCH_COMPARATORS:hR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:w0,LICENSE_FILE_NAME:a0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:A0,NEW_LINE:D0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:gH,MOMENT_DAYS_TAG:UH,API_TURNOVER_SEC:DH,LOOPBACK:RH,CODE_EXTENSION:lu,WILDCARD_SEARCH_VALUE:LH,NODE_ERROR_CODES:O0,JAVASCRIPT_EXTENSION:sR,PERMS_CRUD_ENUM:L0,UNAUTHORIZED_PERMISSION_NAME:P0,SEARCH_WILDCARDS:M0,FUNC_VAL:v0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:B0,JWT_ENUM:H0,CLUSTERING_FLAG:b0,ITC_EVENT_TYPES:q0,CUSTOM_FUNCTION_PROC_NAME:iR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:uu,SERVICES:F0,THREAD_TYPES:G0,MEM_SETTING_KEY:MH,HDB_RESTART_SCRIPT:ZB,PROCESS_DESCRIPTORS:nH,SERVICE_SERVERS:uH,SERVICE_SERVERS_CWD:EE,PROCESS_DESCRIPTORS_VALIDATE:aH,LAUNCH_SERVICE_SCRIPTS:lH,LOG_LEVELS:oH,PROCESS_NAME_ENV_PROP:ZH,LOG_NAMES:iH,PM2_PROCESS_STATUSES:x0,CONFIG_PARAM_MAP:ER,CONFIG_PARAMS:g,HDB_CONFIG_FILE:zB,HDB_DEFAULT_CONFIG_FILE:JB,ROLE_TYPES_ENUM:_H,BOOT_PROP_PARAMS:lR,INSTALL_PROMPTS:jH,HDB_ROOT_DIR_NAME:XB,CLUSTERING_PROCESSES:cH,FOREGROUND_PID_FILE:tH,PACKAGE_ROOT:un,PRE_4_0_0_VERSION:k0,SCHEMAS_PARAM_CONFIG:h0,METADATA_PROPERTY:N0,AUTH_AUDIT_STATUS:V0,AUTH_AUDIT_TYPES:$0,HDB_PID_FILE:rH,DEFAULT_DATABASE_NAME:sH};rR()});var hE=m((Mte,TR)=>{"use strict";var SR=require("minimist");TR.exports=Y0;function Y0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=pR(process.env),s=pR(SR(process.argv))):(r=process.env,s=SR(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(Y0,"assignCMDENVVariables");function pR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(pR,"objKeysToLowerCase")});var x=m((vte,AE)=>{"use strict";var Gn=require("fs-extra"),{workerData:K0,threadId:W0}=require("worker_threads"),Us=require("path"),AR=require("yaml"),OR=require("properties-reader"),et=A(),RR=hE(),Q0=require("os"),{PACKAGE_ROOT:SE}=A(),{_assignPackageExport:z0}=require("../index"),zo={};for(let e in console)zo[e]||(zo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},NR={STDOUT:"stdOut",STDERR:"stdErr"},J0=Us.join(SE,"logs"),X0=Us.join(SE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),Z0=1e4,ws,Cs,Lt,Eu,fu,Jo,vi,Qo;Qo===void 0&&bR();AE.exports={notify:wR,fatal:CR,error:Xo,warn:gE,info:hu,debug:RE,trace:TE,setLogLevel:iq,log_level:Lt,loggerWithTag:j0,suppressLogging:eq,initLogSettings:bR,setupConsoleLogging:yR,logCustomLevel:sq,closeLogFile:pE,getLogFilePath:()=>Jo,OUTPUTS:NR,AuthAuditLog:cq};z0("logger",AE.exports);function bR(e=!1){try{if(Qo===void 0||e){pE();let t=nq(),r=RR(["ROOTPATH"]);try{Qo=OR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Gn.pathExistsSync(Us.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:fu,to_file:ws,to_stream:Cs}=oq(r.ROOTPATH?Us.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Qo.get("settings_path"))),Eu=et.LOG_NAMES.HDB,Jo=Us.join(fu,Eu)}}catch(t){if(Qo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=RR(Object.keys(et.CONFIG_PARAM_MAP),!0);for(let o in r){let c=et.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===et.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){Cs=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(ws=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=aq();ws=ws===void 0?n:ws,ws=gR(ws),Cs=Cs===void 0?i:Cs,Cs=gR(Cs),Lt=Lt===void 0?s:Lt,fu=J0,Eu=et.LOG_NAMES.INSTALL,Jo=Us.join(fu,Eu);return}throw Xo("Error initializing log settings"),Xo(t),t}yR()}a(bR,"initLogSettings");var mE=!0;function yR(){Pi("error",Xo),Pi("warn",gE),Pi("log",hu),Pi("info",hu),Pi("debug",RE),Pi("trace",TE)}a(yR,"setupConsoleLogging");function Pi(e,t){console[e]=function(...r){if(mE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return zo[e](...r)}}a(Pi,"logConsole");function j0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(wR),fatal:r(CR),error:r(Xo),warn:r(gE),info:r(hu),debug:r(RE),trace:r(TE)};function r(s){return function(...n){return s(t,...n)}}}a(j0,"loggerWithTag");function eq(e){try{mE=!1,e()}finally{mE=!0}}a(eq,"suppressLogging");var tq=K0?.name?.replace(/ /g,"-")||"main";function Ds(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||tq+"/"+W0);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}
3
+ `}a(Ds,"createLogRecord");function Zo(e){ws&&IR(e),Cs&&process.stdout.write(e)}a(Zo,"logStdOut");function mu(e){ws&&IR(e),Cs&&process.stderr.write(e)}a(mu,"logStdErr");function IR(e){rq(),vi?Gn.appendFileSync(vi,e):zo.log(e)}a(IR,"logToFile");function pE(){try{Gn.closeSync(vi)}catch{}vi=null}a(pE,"closeLogFile");function rq(){if(!vi){try{if(!Jo)debugger;vi=Gn.openSync(Jo,"a")}catch(e){zo.error(e)}setTimeout(()=>{pE()},Z0).unref()}}a(rq,"openLogFile");function hu(...e){Mt[Lt]<=Mt.info&&Zo(Ds("info",e))}a(hu,"info");function TE(...e){Mt[Lt]<=Mt.trace&&Zo(Ds("trace",e))}a(TE,"trace");function Xo(...e){Mt[Lt]<=Mt.error&&mu(Ds("error",e))}a(Xo,"error");function RE(...e){Mt[Lt]<=Mt.debug&&Zo(Ds("debug",e))}a(RE,"debug");function wR(...e){Mt[Lt]<=Mt.notify&&Zo(Ds("notify",e))}a(wR,"notify");function CR(...e){Mt[Lt]<=Mt.fatal&&mu(Ds("fatal",e))}a(CR,"fatal");function gE(...e){Mt[Lt]<=Mt.warn&&mu(Ds("warn",e))}a(gE,"warn");function sq(e,t,...r){t===NR.STDERR?mu(Ds(e,r)):Zo(Ds(e,r))}a(sq,"logCustomLevel");function nq(){let e;try{e=Q0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Us.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return Gn.existsSync(t)||(t=Us.join(SE,"utility/hdb_boot_properties.file")),t}a(nq,"getPropsFilePath");function iq(e){Lt=e}a(iq,"setLogLevel");function gR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(gR,"autoCastBoolean");function oq(e){try{if(e.includes("config/settings.js")){let o=OR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Us.dirname(o.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=AR.parseDocument(Gn.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===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(oq,"getLogConfig");function aq(){try{let e=AR.parseDocument(Gn.readFileSync(X0,"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(aq,"getDefaultConfig");function cq(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(cq,"AuthAuditLog")});var DR=m((Hte,UR)=>{"use strict";var uq=require("util"),lq=require("path"),_q=require("child_process"),dq=uq.promisify(_q.execFile),Eq=1e3*1e3*10;UR.exports={findPs:fq};async function fq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await dq("ps",["wwxo",`pid,${r}`],{maxBuffer:Eq});for(let n of s.trim().split(`
4
+ `).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:lq.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(fq,"findPs")});var xe=m((Fte,MR)=>{"use strict";var hq="__dbis__",mq="__txns__",Sq="__environment_name__",pq="__dbi_defintion__",Tq={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"},Rq=["__createdtime__","__updatedtime__"],gq="\uFFFF",LR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Aq=Object.values(LR);MR.exports={AUDIT_STORE_NAME:mq,INTERNAL_DBIS_NAME:hq,DBI_DEFINITION_NAME:pq,SEARCH_TYPES:Tq,TIMESTAMP_NAMES:Rq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Sq,TRANSACTIONS_DBI_NAMES_ENUM:LR,TRANSACTIONS_DBIS:Aq,OVERFLOW_MARKER:gq}});var rr=m((Gte,kR)=>{"use strict";var PR=A(),vR=xe(),BR={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},HR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),qR={500:HR("There was an error processing your request."),400:"Invalid request"},Oq=qR[BR.INTERNAL_SERVER_ERROR],Nq={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.`},bq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},yq={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"},Iq={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 ${vR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${vR.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"},wq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${PR.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 ${PR.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"},FR={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"},Cq={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."},Uq={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`},Dq={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"},Lq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Mq={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`},GR={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.`},xR={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}`},Pq={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."},vq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Bq={...FR,...yq,...Nq,...Cq,...Uq,...Dq,...Lq,...Mq,...wq,...GR,...xR,...Pq,...vq,...bq};kR.exports={CHECK_LOGS_WRAPPER:HR,HDB_ERROR_MSGS:Bq,DEFAULT_ERROR_MSGS:qR,DEFAULT_ERROR_RESP:Oq,HTTP_STATUS_CODES:BR,LMDB_ERRORS_ENUM:Iq,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:GR,ITC_ERRORS:xR}});var W=m((kte,YR)=>{"use strict";var Bi=rr(),Hq=x(),qq=A(),Su=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,VR),this.statusCode=s||Bi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bi.DEFAULT_ERROR_MSGS[s]?Bi.DEFAULT_ERROR_MSGS[s]:Bi.DEFAULT_ERROR_MSGS[Bi.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&&Hq[n](i)}},OE=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}},NE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function VR(e,t,r,s=qq.LOG_LEVELS.ERROR,n=null,i=!1){if($R(e))return e;let o=new Su(e,t,r,s,n);return i&&delete o.stack,o}a(VR,"handleHDBError");function $R(e){return e.__proto__.constructor.name===Su.name}a($R,"isHDBError");YR.exports={isHDBError:$R,handleHDBError:VR,ClientError:OE,ServerError:NE,hdb_errors:Bi}});var WR=m(($te,KR)=>{"use strict";var Fq={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))},Gq="certificate.pem",xq="privateKey.pem",kq="ca.pem";KR.exports={CERTIFICATE_VALUES:Fq,CERTIFICATE_PEM_NAME:Gq,PRIVATEKEY_PEM_NAME:xq,CA_PEM_NAME:kq}});var Pe=m((Yte,QR)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.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};QR.exports={validateObject:Vq,validateObjectAsync:$q,validateBySchema:Yq};function Vq(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}a(Vq,"validateObject");async function $q(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a($q,"validateObjectAsync");function Yq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Yq,"validateBySchema")});var yE=m((Qte,eg)=>{"use strict";var ZR=require("fs-extra"),ee=require("joi"),Kq=require("os"),{boolean:pe,string:Ms,number:sr,array:bE}=ee.types(),{totalmem:zR}=require("os"),Hi=require("path"),Wq=x(),Tu=V(),Wte=WR(),JR=A(),Qq=Pe(),XR="log",zq="components",Jq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",Xq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Zq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",jq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",eF="rootPath config parameter is undefined",tF="clustering.enabled config parameter is undefined",Ls=sr.min(0).required(),Ru=bE.items({host:Ms.required(),port:Ls}).empty(null),Ps;eg.exports={configValidator:rF,routesValidator:cF,route_constraints:Ru};function rF(e){if(Ps=e.rootPath,Tu.isEmpty(Ps))throw eF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(aF),n=Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(pu),i=ee.custom(sF).messages({"any.custom":"{:#label} {:#error}"}),o=Ms.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(pu),u=ee.custom(nF).empty(null).default(pu),l=e.clustering?.enabled;if(Tu.isEmpty(l))throw tF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Ls,routes:Ru}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Ls}).required()}).required(),network:ee.object({port:Ls}).required()}).required(),leafServer:ee.object({network:ee.object({port:Ls,routes:Ru}).required(),streams:ee.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ms.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:sr.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:sr}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:bE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ls,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:Ms.custom(oF).optional().empty(null),maxSize:Ms.custom(iF).optional().empty(null),path:Ms.optional().empty(null).default(pu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:bE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Ls,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Ls,securePort:Ls}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(rF,"configValidator");function jR(e){return ZR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(jR,"doesPathExist");function sF(e,t){if(e===null)return;let r=jR(e);return r?t.message(r):e}a(sF,"validatePemFile");function nF(e,t){ee.assert(e,Ms.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=jR(e);if(r)return t.message(r)}a(nF,"validatePath");function iF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Jq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Zq):e}a(iF,"validateRotationMaxSize");function oF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(Xq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(jq):e}a(oF,"validateRotationInterval");function aF(e,t){let r=t.state.path.join("."),s=Kq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||zR();return i=Math.round(Math.min(i,zR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),Wq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(aF,"setDefaultThreads");function pu(e,t){if(!Tu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Tu.isEmpty(Ps))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Hi.join(Ps,zq);case"logging.root":return Hi.join(Ps,XR);case"clustering.leafServer.streams.path":return Hi.join(Ps,"clustering","leaf");case"storage.path":let s=Hi.join(Ps,JR.LEGACY_DATABASES_DIR_NAME);return ZR.existsSync(s)?s:Hi.join(Ps,JR.DATABASES_DIR_NAME);case"logging.rotation.path":return Hi.join(Ps,XR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(pu,"setDefaultRoot");function cF(e){let t=ee.object({routes:Ru});return Qq.validateBySchema({routes:e},t)}a(cF,"routesValidator")});var gu={};je(gu,{server:()=>tt});var tg,tt,Xr=Se(()=>{tg=require("../index"),tt={};(0,tg._assignPackageExport)("server",tt)});var Tr=m((Xte,_g)=>{"use strict";var pr=A(),lt=V(),rt=x(),{configValidator:uF,routesValidator:rg}=yE(),vt=require("fs-extra"),lF=require("yaml"),Pr=require("path"),_F=require("is-number"),ng=require("properties-reader"),dF=require("lodash"),{handleHDBError:EF}=W(),{HTTP_STATUS_CODES:fF,HDB_ERROR_MSGS:Au}=rr(),Jte=require("minimist"),{server:hF}=(Xr(),re(gu)),{SCHEMAS_PARAM_CONFIG:jo,CONFIG_PARAMS:ln,CONFIG_PARAM_MAP:vs}=pr,mF="Unable to get config value because config is uninitialized",SF="Config successfully initialized",pF="Error backing up config file",TF="Empty parameter sent to getConfigValue",ig=Pr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),RF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",sg={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"},Ou,ft;_g.exports={createConfigFile:gF,getDefaultConfig:AF,getConfigValue:ag,initConfig:cg,flattenConfig:kn,updateConfigValue:ug,updateConfigObject:NF,getConfiguration:IF,setConfiguration:wF,readConfigFile:CE,getClusteringRoutes:CF,initOldConfig:lg,getConfigFromFile:UF,getConfigFilePath:xn,addConfig:DF,deleteConfigFromFile:LF};function gF(e){let t=_n(ig);Ou=kn(t.toJSON());let r;for(let o in e){let c=vs[o.toLowerCase()];if(c===ln.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=IE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&og(t,r),wE(t);let s=t.toJSON();ft=kn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(gF,"createConfigFile");function og(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(jo.TABLES))for(let i in s[n][jo.TABLES])for(let o in s[n][jo.TABLES][i]){let c=s[n][jo.TABLES][i][o],u=[ln.SCHEMAS,n,jo.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=[ln.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(og,"setSchemasConfig");function AF(e){if(Ou===void 0){let r=_n(ig);Ou=kn(r.toJSON())}let t=vs[e.toLowerCase()];if(t!==void 0)return Ou[t.toLowerCase()]}a(AF,"getDefaultConfig");function ag(e){if(e==null){rt.error(TF);return}if(ft===void 0){rt.trace(mF);return}let t=vs[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ag,"getConfigValue");function xn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,pr.HDB_CONFIG_FILE):ng(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(xn,"getConfigFilePath");function cg(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=xn(t),s;if(r.includes("config/settings.js"))try{lg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=_n(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){rt.trace(`HarperDB config file not found at ${r}.
5
+ This can occur during early stages of install where the config file has not yet been created`);return}else throw rt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}OF(s,r),wE(s);let n=s.toJSON();if(hF.config=n,ft=kn(n),ft.logging_rotation_rotate)for(let i in sg)ft[i]&&rt.error(`Config ${sg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(SF)}}a(cg,"initConfig");function OF(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(OF,"checkForUpdatedConfig");function wE(e){let t=e.toJSON(),r=uF(t);if(r.error)throw Au.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(wE,"validateConfig");function NF(e,t){ft===void 0&&(ft={});let r=vs[e.toLowerCase()];if(r===void 0){rt.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(NF,"updateConfigObject");function ug(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&cg();let o=ag(vs.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=_n(c),l;if(r===void 0&&e.toLowerCase()===ln.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=vs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=IE(E,t);u.setIn([...f],h)}else for(let E in r){let f=vs[E.toLowerCase()];if(f===ln.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=IE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&og(u,l),wE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&bF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=kn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ug,"updateConfigValue");function bF(e,t){try{let r=Pr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(pF),rt.error(r)}}a(bF,"backupConfigFile");var yF=["schemas"];function kn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!yF.includes(r)){let s=kn(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(kn,"flattenConfig");function IE(e,t){if(e===ln.CLUSTERING_NODENAME||e===ln.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(_F(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.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 lt.autoCast(t)}a(IE,"castConfigValue");function IF(){let e=lt.getPropsFilePath(),t=xn(e);return _n(t).toJSON()}a(IF,"getConfiguration");async function wF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ug(void 0,void 0,n,!0),RF}catch(i){throw typeof i=="string"||i instanceof String?EF(i,i,fF.BAD_REQUEST,void 0,void 0,!0):i}}a(wF,"setConfiguration");function CE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=xn(e);return _n(t).toJSON()}a(CE,"readConfigFile");function _n(e){return lF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(_n,"parseYamlDoc");function CF(){let e=CE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=rg(t);if(r)throw Au.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=rg(s);if(n)throw Au.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Au.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(CF,"getClusteringRoutes");function lg(e){let t=ng(e);ft={};for(let r in vs){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=vs[r].toLowerCase();n===ln.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(lg,"initOldConfig");function UF(e){let t=CE();return dF.get(t,e.replaceAll("_","."))}a(UF,"getConfigFromFile");async function DF(e,t){let r=_n(xn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(xn(),String(r))}a(DF,"addConfig");function LF(e){let t=xn(lt.getPropsFilePath()),r=_n(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(LF,"deleteConfigFromFile")});var Q=m((jte,fg)=>{"use strict";var UE=require("fs-extra"),vr=require("path"),dg=require("os"),MF=require("properties-reader"),ea=x(),Vn=V(),te=A(),Nu=Tr(),PF="Error initializing environment manager",bu="BOOT_PROPS_FILE_PATH",Eg=!1,vF={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Bs={};fg.exports={BOOT_PROPS_FILE_PATH:bu,getHdbBasePath:BF,setHdbBasePath:HF,get:qF,initSync:GF,setProperty:Ee,initTestEnvironment:xF};function BF(){return Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(BF,"getHdbBasePath");function HF(e){Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(HF,"setHdbBasePath");function qF(e){let t=Nu.getConfigValue(e);return t===void 0?Bs[e]:t}a(qF,"get");function Ee(e,t){vF[e]&&(Bs[e]=t),Nu.updateConfigObject(e,t)}a(Ee,"setProperty");function FF(){let e;try{e=Vn.getPropsFilePath(),UE.accessSync(e,UE.constants.F_OK|UE.constants.R_OK),Eg=!0;let t=MF(e);return Bs[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Bs[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Bs[bu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(FF,"doesPropFileExist");function GF(e=!1){try{(Eg||FF()||Vn.noBootFile())&&(Nu.initConfig(e),Bs[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Nu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(PF),ea.error(t),console.error(t),process.exit(1)}}a(GF,"initSync");function xF(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=vr.join(__dirname,"../../","unitTests");Bs[bu]=vr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,dg.userInfo()?dg.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Vn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Vn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Vn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Vn.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Vn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${bu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(xF,"initTestEnvironment")});var we=m((tre,gg)=>{"use strict";var ia=A(),kF=V(),Bt=Q(),oa=require("path"),VF=require("minimist"),hg=require("fs-extra"),mg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:dn,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:yu}=ia,ra,sa,na;function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(dn.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Sg,"getBaseSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Rg(yu),sa}a(pg,"getSystemSchemaPath");function Tg(){if(na!==void 0)return na;if(Bt.getHdbBasePath()!==void 0)return na=Bt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Bt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(Tg,"getTransactionAuditStoreBasePath");function $F(e,t){let r=Bt.get(dn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(Tg(),e.toString())}a($F,"getTransactionAuditStorePath");function Rg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(Sg(),e)}a(Rg,"getSchemaPath");function YF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,VF(process.argv));let s=r[dn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!kF.isObject(s))throw o;i=s}for(let o of i){let c=o[yu];if(!c)continue;let u=Bt.get(dn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return mg.set(u,[yu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(dn.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return mg.set(u,[yu,ta.PATH],_),Bt.setProperty(dn.SCHEMAS,u),_}}let n=r[dn.STORAGE_PATH.toUpperCase()];if(n){if(!hg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return hg.mkdirsSync(i),Bt.setProperty(dn.STORAGE_PATH,n),i}return pg()}a(YF,"initSystemSchemaPaths");function KF(){ra=void 0,sa=void 0,na=void 0}a(KF,"resetPaths");gg.exports={getBaseSchemaPath:Sg,getSystemSchemaPath:pg,getTransactionAuditStorePath:$F,getTransactionAuditStoreBasePath:Tg,getSchemaPath:Rg,initSystemSchemaPaths:YF,resetPaths:KF}});var Ht=m((ire,yg)=>{"use strict";var WF=rr().LMDB_ERRORS_ENUM,sre=require("lmdb"),QF=xe(),nre=require("buffer").Buffer,{OVERFLOW_MARKER:Ag,MAX_SEARCH_KEY_LENGTH:Iu}=QF,Og=["number","string","symbol","boolean","bigint"];function zF(e){if(e=e?.primaryStore||e,!e)throw new Error(WF.ENV_REQUIRED)}a(zF,"validateEnv");function JF(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(JF,"stringifyData");function XF(e){return e instanceof Date?e.valueOf():e}a(XF,"convertKeyValueToWrite");function ZF(e){if(e==null)return;if(Og.includes(typeof e))return e.length>Iu?[e.slice(0,Iu)+Ag]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Og.includes(typeof n))n.length>Iu?t.push(n.slice(0,Iu)+Ag):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(ZF,"getIndexedValues");var wu=0,Ng=0;function bg(){Ng=Date.now()-performance.now()}a(bg,"adjustStartTime");bg();var jF=6e4;setInterval(bg,jF).unref();function eG(){let e=performance.now()+Ng;return e>wu?(wu=e,e):(wu+=488e-6,wu)}a(eG,"getNextMonotonicTime");yg.exports={validateEnv:zF,stringifyData:JF,convertKeyValueToWrite:XF,getNextMonotonicTime:eG,getIndexedValues:ZF}});var Ig,Zr,DE,aa=Se(()=>{Ig=require("events"),Zr=class extends Ig.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new DE;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)}},DE=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 ca(e){return e[ht]||(e[ht]=Object.create(null))}function Mu(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[ht];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=wg(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){ca(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,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Cu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(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[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Cu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),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 wg(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[ce]=n}},Mu(r,t)),new r(e)):new Uu(e);case Array:let s=new Lu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=wg(o,t?.elements)),s[n]=o}return s}}function Pu(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Pu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ua(e){let t;if(e[ce]&&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=ua(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ua(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Du(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[$n]||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?.[ce]===n){if(Du(i))return!0}else return!0}}else{let r=e[ht];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Du(n))return!0}else return!0}else return!0}}return!1}var Cu,ht,Uu,$n,Lu,vu=Se(()=>{jr();Cu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Mu,"assignTrackedAccessors");a(wg,"trackObject");Uu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Mu(Uu,{});a(Pu,"collapseData");a(ua,"deepFreeze");a(Du,"hasChanges");$n=Symbol.for("has-array-changes"),Lu=class extends Array{static{a(this,"TrackedArray")}[$n];constructor(t){super(t)}splice(...t){return this[$n]=!0,super.splice(...t)}push(...t){return this[$n]=!0,super.push(...t)}pop(){return this[$n]=!0,super.pop()}unshift(...t){return this[$n]=!0,super.unshift(...t)}shift(){return this[$n]=!0,super.shift()}};Lu.prototype.constructor=Array});function Ye(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 LE;e.timestamp&&(r.timestamp=e.timestamp),r[Ae]=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 Cg,Ug,LE,Yn=Se(()=>{Cg=C(Ht()),Ug=require("../index");jr();a(Ye,"transaction");(0,Ug._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};LE=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,Cg.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 vE(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(rG[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]=ts.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 _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new ME.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=BE(e);if(!p)throw new ME.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(k=>setImmediate(()=>k(p(O)?R:Lg.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function BE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return es(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return es(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),es(r,n=>(0,ts.compareKeys)(n,s[0])>=0&&(0,ts.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)<=0);case"ne":return es(r,n=>(0,ts.compareKeys)(n,s)!==0);default:return}}function es(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 Bu(e){if(!e)return;let t=new PE,r,s,n,i,o;for(;r=Dg.exec(e);){i=Dg.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=tG[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 ME,_t,ts,Lg,Dg,tG,rG,PE,Hu=Se(()=>{ME=C(W()),_t=C(xe()),ts=require("ordered-binary"),Lg=require("lmdb"),Dg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,tG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(vE,"idsForCondition");rG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(BE,"filterByType");a(es,"attributeComparator");a(Bu,"parseQuery");PE=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 FE={};je(FE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Hs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>qg,snake_case:()=>nG});function nG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Mg(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 qE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(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[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||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 Ye(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[qg]=!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 qu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new qu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new Hg.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 HE(e){let t=e[ce];if(t){let r=e[ht];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 Pg(e){if(typeof e=="string")return t=>HE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=HE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=HE(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 vg,Bg,Hg,Ae,ae,Hs,qg,ce,sG,mt,qu,qE,jr=Se(()=>{vg=require("crypto");aa();Bg=require("../index"),Hg=C(W());vu();Yn();Hu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Hs=Symbol("is-collection"),qg=Symbol("save-updates"),ce=Symbol("stored-record"),sG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Ae];[ae];static transactions;constructor(t,r){this[ae]=t;let s=r?.[Ae];this[Ae]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Rr(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=Pg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[Hs]){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):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,vg.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),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Pg(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[Hs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[Hs]}static coerceId(t){return t}static parseQuery(t){return Bu(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&&sG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Mg(t,this)}}return Mg(t,this)}static getResource(t,r,s){let n,i=r[Ae],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[ae]===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=_[ae],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[Hs]=!0),n}connect(t){let r=new Zr;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[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,Bg._assignPackageExport)("Resource",mt);a(nG,"snake_case");qu=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(Mg,"pathToId");qE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(HE,"selectFromObject");a(Pg,"transformForSelect")});var kE={};je(kE,{loadGQLSchema:()=>oG,start:()=>xE,startOnMainThread:()=>iG});function xE({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 T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,GE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,GE.dirname)(s)+"/"+T.name,p.tableClass)}}}var GE,iG,oG,Fg=Se(()=>{GE=require("path");de();a(xE,"start");iG=xE,oG=xE({ensureTable:st}).handleFile});async function Fu(e){return aG?(la||(la=cG(lG)),(await(await la).import(e)).namespace):import(e)}async function cG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:uG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,xg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:nr,databases:ve})}};let s=await(0,Gg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function uG(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 lG(){return{Resource:mt,tables:nr}}var Gg,xg,aG,la,VE=Se(()=>{jr();de();Gg=require("fs/promises"),xg=require("path"),aG=!1;a(Fu,"secureImport");a(cG,"getCompartment");a(uG,"secureOnlyFetch");a(lG,"getGlobalVars")});var YE={};je(YE,{handleFile:()=>_G});async function _G(e,t,r,s){let n=new Map,i=(0,kg.pathToFileURL)(r).toString(),o=await Fu(i);u(o.default)&&s.set((0,$E.dirname)(t),o.default),c(o,(0,$E.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 kg,$E,Vg=Se(()=>{kg=require("url");VE();$E=require("path");a(_G,"handleFile")});var WE={};je(WE,{start:()=>dG});function dG({resources:e}){e.set("login",KE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var KE,$g=Se(()=>{jr();a(dG,"start");KE=class extends mt{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 zE=m((Mre,Wg)=>{"use strict";var{Readable:EG}=require("stream"),fG=1e4;Wg.exports={streamAsJSON(e){return new QE({value:e})}};var QE=class extends EG{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),Yg)}catch(n){yield Yg(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);Kg(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>fG?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 Kg(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 Yg(e){return console.error(e),JSON.stringify(e.toString())}a(Yg,"handleError");function Kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Kg,"when")});var oA=m((Bre,iA)=>{"use strict";var JE=require("recursive-iterator"),hG=require("alasql"),XE=require("clone"),Qg=V(),{handleHDBError:zg,hdb_errors:mG}=W(),{HDB_ERROR_MSGS:Jg,HTTP_STATUS_CODES:Xg}=mG,{getDatabases:SG}=(de(),re(Ne)),pG=["DISTINCT_ARRAY"],Zg=Symbol("validateTables"),ZE=Symbol("validateTable"),vre=Symbol("getAllColumns"),jg=Symbol("validateAllColumns"),Gu=Symbol("findColumn"),eA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),jE=Symbol("validateColumn"),tA=Symbol("setColumnsForTable"),rA=Symbol("checkColumnsForAsterisk"),sA=Symbol("validateGroupBy"),nA=Symbol("hasColumns"),ef=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Zg](),this[rA](),this[jg]()}[Zg](){if(this[nA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ZE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ZE](t.table)})}}[nA](){let t=!1,r=new JE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ZE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=SG();if(!r[t.databaseid])throw zg(new Error,Jg.SCHEMA_NOT_FOUND(t.databaseid),Xg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw zg(new Error,Jg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Xg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=XE(n);i.table=XE(t),this.attributes.push(i)})}[Gu](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)}[rA](){let t=new JE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[tA](r.tableid)}[tA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new hG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[jg](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[sA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new JE(t),n=[];for(let{node:i,path:o}of s)!Qg.isEmpty(i)&&!Qg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[eA](i):n.push(this[jE](i)));return n}[sA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&pG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=XE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Gu](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[Gu](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`}[eA](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[jE](t)}[jE](t){let r=this[Gu](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]}};iA.exports=ef});var cA=m((qre,aA)=>{"use strict";var tf=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")}};aA.exports=tf});var lA=m((Gre,uA)=>{"use strict";var rf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};uA.exports=rf});var xu=m((kre,_A)=>{"use strict";var nf=Q(),of=A();nf.initSync();var TG=nf.get(of.CONFIG_PARAMS.STORAGE_COMPRESSION),RG=nf.get(of.CONFIG_PARAMS.STORAGE_CACHING)!==!1,gG=of.UPDATES_PROPERTY,sf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=TG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=RG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===gG)}};_A.exports=sf});var Vu=m(($re,EA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var AG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",dA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),OG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),ku=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=AG,this.noFSAccess=!0,dA!==void 0&&(this.overlappingSync=dA),this.noReadAhead=OG}};EA.exports=ku;ku.MAX_DBS=1e4});var ye=m((Kre,OA)=>{"use strict";var cf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),$u=Ht(),mA=x(),qt=rr().LMDB_ERRORS_ENUM,Yu=lA(),uf=xu(),SA=Vu(),En=xe(),fA=A(),{table:NG,resetDatabases:bG}=(de(),re(Ne)),hA=Q(),Hr=En.INTERNAL_DBIS_NAME,pA=En.DBI_DEFINITION_NAME,yG="data.mdb",IG="lock.mdb",Ea=".mdb",wG="-lock",af=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[En.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[En.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new cf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Ku(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(Ku,"pathEnvNameValidation");async function lf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ea);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,yG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(lf,"validateEnvironmentPath");function Wu(e,t){if($u.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Wu,"validateEnvDBIName");async function CG(e,t,r=!1,s=!1){Ku(e,t);let n=ir.basename(e);t=t.toString();let i=hA.get(fA.CONFIG_PARAMS.SCHEMAS);i||hA.setProperty(fA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await lf(e,t,s),TA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new SA(s?c:c+Ea,!1),l=cf.open(u);l.dbis=Object.create(null);let _=new uf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=_f(e,t,r);return l[En.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(CG,"createEnvironment");async function UG(e,t,r,s=!0){Ku(e,t),t=t.toString();let n=ir.join(e,t);return NG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(UG,"copyEnvironment");async function TA(e,t,r=!1){Ku(e,t),t=t.toString();let s=_f(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 lf(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new SA(n,o),u=cf.open(c);u.dbis=Object.create(null);let l=gA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[En.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(TA,"openEnvironment");async function DG(e,t,r=!1){Ku(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await lf(e,t);if(global.lmdb_map!==void 0){let i=_f(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await RA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+wG:ir.join(ir.dirname(n),IG))}a(DG,"deleteEnvironment");async function RA(e){$u.validateEnv(e);let t=e[En.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(RA,"closeEnvironment");function _f(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(_f,"getCachedEnvironmentName");function LG(e){$u.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new Yu,n)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(LG,"listDBIDefinitions");function gA(e){$u.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(gA,"listDBIs");function MG(e,t){let s=Ar(e,Hr).getEntry(t),n=new Yu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{mA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(MG,"getDBIDefinition");function AA(e,t,r,s=!r){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new uf(r,s===!0),o=e.openDB(t,i),c=new Yu(r===!0,s);return o[pA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(AA,"createDBI");function Ar(e,t){if(Wu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=MG(e,t):r=new Yu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new uf(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(qt.DBI_DOES_NOT_EXIST):n}return s[pA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function PG(e,t){Wu(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[En.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(PG,"statDBI");async function vG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(vG,"environmentDataSize");function BG(e,t){if(Wu(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(BG,"dropDBI");function HG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)AA(e,i,i!==t,i===t),s=!0;else throw o}}s&&bG()}a(HG,"initializeDBIs");OA.exports={openDBI:Ar,openEnvironment:TA,createEnvironment:CG,listDBIs:gA,listDBIDefinitions:LG,createDBI:AA,dropDBI:BG,statDBI:PG,deleteEnvironment:DG,initializeDBIs:HG,TransactionCursor:af,environmentDataSize:vG,copyEnvironment:UG,closeEnvironment:RA}});var bA=m((Qre,NA)=>{"use strict";var df=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};NA.exports=df});var IA=m((Jre,yA)=>{"use strict";var Ef=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}};yA.exports=Ef});var CA=m((Zre,wA)=>{"use strict";var ff=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};wA.exports=ff});var Fi=m((sse,LA)=>{"use strict";var qG=ye(),FG=bA(),GG=IA(),xG=CA(),rs=Ht(),fa=rr().LMDB_ERRORS_ENUM,kG=xe(),qs=A(),VG=V(),$G=require("uuid"),ese=require("lmdb"),{handleHDBError:YG,hdb_errors:KG}=W(),{OVERFLOW_MARKER:tse,MAX_SEARCH_KEY_LENGTH:rse}=kG,UA=Q();UA.initSync();var Qu=UA.get(qs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),hf=qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Kn=qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function WG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new FG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];DA(l,!0,n);let _=QG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Sf(o,c,s,i,n)}a(WG,"insertRecords");function QG(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][qs.FUNC_VAL],s[o]=c)}let u=rs.getIndexedValues(c),l=e.dbis[o];if(u){Qu&&l.prefetch(u.map(_=>({key:_,value:n})),zu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Qu&&e.dbis[t].prefetch([n],zu),e.dbis[t].put(n,s,s[Kn])})}a(QG,"insertRecord");function zG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(zG,"removeSkippedRecords");function DA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Kn]))&&(e[Kn]=r||(r=rs.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[hf]))&&(e[hf]=r||rs.getNextMonotonicTime()):delete e[hf]}a(DA,"setTimestamps");function mf(e,t,r){r.indexOf(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(qs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),qG.initializeDBIs(e,t,r)}a(mf,"initializeTransaction");async function JG(e,t,r,s,n=rs.getNextMonotonicTime()){Tf(e,t,r,s),mf(e,t,r);let i=new GG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=pf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Sf(c,u,s,i,n,o)}a(JG,"updateRecords");async function XG(e,t,r,s,n=rs.getNextMonotonicTime()){try{Tf(e,t,r,s)}catch(u){throw YG(u,u.message,KG.HTTP_STATUS_CODES.BAD_REQUEST)}mf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;VG.isEmpty(l[t])?(_=$G.v4(),l[t]=_):_=l[t];let d=pf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Sf(o,c,s,i,n)}a(XG,"upsertRecords");async function Sf(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||rs.getNextMonotonicTime(),zG(r,i),s}a(Sf,"finalizeWrite");function pf(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(DA(r,!_,o),Number.isInteger(r[Kn])&&l[Kn]>r[Kn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][qs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=rs.getIndexedValues(R);if(O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=rs.getIndexedValues(T),O){Qu&&p.prefetch(O.map(k=>({key:k,value:s})),zu);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Kn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:pf(e,t,r,s,n,i,o))}a(pf,"updateUpsertRecord");function ZG(e,t,r){if(rs.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ZG,"validateBasic");function Tf(e,t,r,s){if(ZG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(Tf,"validateWrite");function zu(){}a(zu,"noop");LA.exports={insertRecords:WG,updateRecords:JG,upsertRecords:XG}});var Wn=m((ise,jG)=>{jG.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 ss=m((ose,vA)=>{"use strict";var PA=V(),MA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Fs=require("joi"),fn={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ex=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required(),tx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()),rx=Fs.alternatives(Fs.string().min(1).max(fn.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+fn.schema_format.message}),Fs.number()).required();function sx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>fn.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(sx,"checkValidTable");function nx(e,t){return PA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(nx,"validateSchemaExists");function ix(e,t){let r=t.state.ancestors[0].schema;return PA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ix,"validateTableExists");function ox(e,t){return e.toLowerCase()===MA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${MA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(ox,"validateSchemaName");vA.exports={common_validators:fn,schema_regex:Gi,hdb_schema_table:ex,validateSchemaExists:nx,validateTableExists:ix,validateSchemaName:ox,checkValidTable:sx,hdb_database:tx,hdb_table:rx}});var Ju=m((cse,BA)=>{var{common_validators:ns}=ss(),ma=Pe(),ha="is required",Ke={database:{presence:!1,format:ns.schema_format,length:ns.schema_length},schema:{presence:!1,format:ns.schema_format,length:ns.schema_length},table:{presence:!0,format:ns.schema_format,length:ns.schema_length},attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length},hash_attribute:{presence:!0,format:ns.schema_format,length:ns.schema_length}};function Sa(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(Sa,"makeAttributesStrings");function ax(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ax,"schema_object");function cx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(cx,"table_object");function ux(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"create_table_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence={message:ha},Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"attribute_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"describe_table");function dx(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(dx,"validateTableResidence");BA.exports={schema_object:ax,create_table_object:ux,table_object:cx,attribute_object:lx,describe_table:_x,validateTableResidence:dx}});var qA=m((lse,HA)=>{"use strict";var Ex=require("uuid"),Rf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Ex.v4(),this.schema_table=`${this.schema}.${this.table}`}};HA.exports=Rf});var Xu=m((dse,FA)=>{"use strict";var fx=qA(),gf=class extends fx{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}};FA.exports=gf});var xA=m((fse,GA)=>{"use strict";GA.exports=mx;var hx="inserted";function mx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===hx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(mx,"returnObject")});var Zu=m((mse,KA)=>{"use strict";var Sx=A(),Af=ye(),px=Fi(),{getSystemSchemaPath:Tx,getSchemaPath:Rx}=we(),gx=Wn(),Ax=Ju(),Ox=Xu(),Nx=xA(),{handleHDBError:kA,hdb_errors:$A}=W(),VA=V(),{HTTP_STATUS_CODES:bx}=$A,Of=gx.hdb_attribute,YA=[];for(let e=0;e<Of.attributes.length;e++)YA.push(Of.attributes[e].attribute);var yx="inserted";KA.exports=Ix;async function Ix(e){let t=Ax.attribute_object(e);if(t)throw kA(new Error,t.message,$A.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&VA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw kA(new Error,r,bx.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=VA.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 Ox(e.schema,e.table,e.attribute,e.id);try{let i=await Af.openEnvironment(Rx(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}`);Af.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Af.openEnvironment(Tx(),Sx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await px.insertRecords(o,Of.hash_attribute,YA,[n]);return Nx(yx,c,{records:[n]},u)}catch(i){throw i}}a(Ix,"lmdbCreateAttribute")});var bf=m((pse,QA)=>{var{hdb_table:wx,hdb_database:WA}=ss(),Cx=Pe(),Nf=require("joi"),Ux={undefined:"undefined",null:"null"},Dx=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||Ux[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"),Lx=Nf.object({database:WA,schema:WA,table:wx,records:Nf.array().items(Nf.object().custom(Dx)).required()});QA.exports=function(e){return Cx.validateBySchema(e,Lx)}});var pa=m((gse,JA)=>{"use strict";var Gs=V(),zA=x(),Rse=bf(),{getDatabases:Mx}=(de(),re(Ne)),{ClientError:Qn}=W();JA.exports=Px;function Px(e){if(Gs.isEmpty(e))throw new Qn("invalid update parameters defined.");if(Gs.isEmptyOrZeroLength(e.schema))throw new Qn("invalid schema specified.");if(Gs.isEmptyOrZeroLength(e.table))throw new Qn("invalid table specified.");if(!Array.isArray(e.records))throw new Qn("records must be an array");let t=Mx()[e.schema]?.[e.table];if(Gs.isEmpty(t))throw new Qn(`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&&Gs.isEmptyOrZeroLength(o[r]))throw zA.error("a valid hash attribute must be provided with update record:",o),new Qn("a valid hash attribute must be provided with update record, check log for more info");if(!Gs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw zA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Qn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Gs.isEmpty(o[r])&&o[r]!==""&&s.has(Gs.autoCast(o[r]))&&(o.skip=!0),s.add(Gs.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(Px,"insertUpdateValidate")});var Ta=m((Ose,XA)=>{"use strict";var vx=A().OPERATIONS_ENUM,yf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=vx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};XA.exports=yf});var Oa=m((yse,ZA)=>{"use strict";var bse=Ta(),ju=A(),wf=V(),If=x(),Bx=require("uuid"),{handleHDBError:Ra,hdb_errors:Hx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Hx;ZA.exports=qx;function qx(e,t,r){for(let n=0;n<t.length;n++)Fx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Gx(i,r,e.operation)}}a(qx,"processRows");function Fx(e){if(Buffer.byteLength(String(e))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(wf.isEmptyOrZeroLength(e)||wf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateAttribute");function Gx(e,t,r){if(!e.hasOwnProperty(t)||wf.isEmptyOrZeroLength(e[t])){if(r===ju.OPERATIONS_ENUM.INSERT||r===ju.OPERATIONS_ENUM.UPSERT){e[t]=Bx.v4();return}throw If.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw If.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw If.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(Gx,"validateHash")});var eO=m((wse,jA)=>{"use strict";var Cf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};jA.exports=Cf});var sO=m((Use,rO)=>{"use strict";var Uf=ye(),xx=x(),tO=rr().LMDB_ERRORS_ENUM;rO.exports=kx;async function kx(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 Uf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==tO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Uf.closeEnvironment(global.lmdb_map[s]),await Uf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==tO.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){xx.error(t)}}a(kx,"cleanLMDBMap")});var xs=m((Lse,aO)=>{"use strict";var Na=require("crypto"),Vx=Q(),{CONFIG_PARAMS:$x}=A(),iO="aes-256-cbc",Yx=32,Kx=16,Df=64,oO=32,Wx=Df+oO,nO=new Map;aO.exports={encrypt:Qx,decrypt:zx,createNatsTableStreamName:Jx};function Qx(e){let t=Na.randomBytes(Yx),r=Na.randomBytes(Kx),s=Na.createCipheriv(iO,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(Qx,"encrypt");function zx(e){let t=e.substr(0,Df),r=e.substr(Df,oO),s=e.substr(Wx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(iO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(zx,"decrypt");function Jx(e,t){let r=Vx.get($x.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=nO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),nO.set(r,s)),s}a(Jx,"createNatsTableStreamName")});var zn=m((vse,uO)=>{"use strict";var Pse=Or(),el=x(),cO=Ju(),Xx=xs(),tl=V(),{handleHDBError:rl,hdb_errors:Zx}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:Lf}=Zx,jx=Q();jx.initSync();var{getDatabases:Mf}=(de(),re(Ne));uO.exports={describeAll:ek,describeTable:nl,describeSchema:tk};async function ek(e){try{let t=tl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Mf(),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 nl({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 nl({schema:l,table:d},f)}E&&c.push(E)}catch(E){el.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 el.error("Got an error in describeAll"),el.error(t),rl(new Error,sl.DESCRIBE_ALL_ERR)}}a(ek,"describeAll");async function nl(e,t){tl.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=cO.describe_table(e);if(i)throw i;let c=Mf()[r];if(!c)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let u=c[s];if(!u)throw rl(new Error,sl.TABLE_NOT_FOUND(e.schema,e.table),Lf.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=Xx.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){el.warn(`unable to stat table dbi due to ${d}`)}return _}a(nl,"descTable");async function tk(e){tl.transformReq(e);let t=cO.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=Mf()[s];if(!i)throw rl(new Error,sl.SCHEMA_NOT_FOUND(e.schema),Lf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),tl.isEmpty(u)||u.describe){let l=await nl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(tk,"describeSchema")});var ks=m((Fse,fO)=>{var rk=Wn(),{callbackify:_O,promisify:sk}=require("util"),{getDatabases:dO}=(de(),re(Ne));fO.exports={setSchemaDataToGlobal:lO,getTableSchema:nk,getSystemSchema:ik,setSchemaDataToGlobalAsync:sk(lO)};var EO=zn(),Hse=_O(EO.describeAll),qse=_O(EO.describeTable);function lO(e){global.hdb_schema=dO(),e&&e()}a(lO,"setSchemaDataToGlobal");function nk(e,t,r){let s=dO()[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(nk,"getTableSchema");function ik(){return rk}a(ik,"getSystemSchema")});var Nr=m((xse,pO)=>{"use strict";var ol=bf(),St=V(),ok=require("util"),al=qr(),ak=ks(),hO=x(),{handleHDBError:Jn,hdb_errors:ck}=W(),{HTTP_STATUS_CODES:Xn}=ck,uk=ok.promisify(ak.getTableSchema),lk="updated",mO="inserted",SO="upserted";pO.exports={insert:dk,update:Ek,upsert:fk,validation:_k,flush:hk};async function _k(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await uk(e.schema,e.table),r=ol(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&&St.isEmptyOrZeroLength(c[s]))throw hO.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(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw hO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.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(_k,"validation");async function dk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.createRecords(e);return il(mO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(dk,"insertData");async function Ek(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.updateRecords(e);return St.isEmpty(s.existing_rows)?il(lk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):il(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(Ek,"updateData");async function fk(e){if(e.operation!=="upsert")throw Jn(new Error,"invalid operation, must be upsert",Xn.INTERNAL_SERVER_ERROR);let t=ol(e);if(t)throw Jn(new Error,t.message,Xn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Jn(new Error,r,Xn.BAD_REQUEST);let s=await al.upsertRecords(e);return il(SO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(fk,"upsertData");function il(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===mO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===SO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(il,"returnObject");function hk(e){return St.transformReq(e),al.flush(e.schema,e.table)}a(hk,"flush")});var vf=m((Vse,gO)=>{var mk=Pe(),Pf=require("joi"),{hdb_table:Sk,hdb_database:TO}=ss(),RO={schema:TO,database:TO,table:Sk},pk={date:Pf.date().iso().required()},Tk={timestamp:Pf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};gO.exports=function(e,t){let r=t==="timestamp"?{...RO,...Tk}:{...RO,...pk},s=Pf.object(r);return mk.validateBySchema(e,s)}});var NO=m(($se,OO)=>{var Rk=Pe(),Bf=require("joi"),{hdb_table:gk,hdb_database:AO}=ss(),Ak=Bf.object({schema:AO,database:AO,table:gk,hash_values:Bf.array().required(),ids:Bf.array()});OO.exports=function(e){return Rk.validateBySchema(e,Ak)}});var yO=m((Yse,bO)=>{"use strict";var Hf=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}},qf=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}},Ff=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};bO.exports={InsertObject:Hf,NoSQLSeachObject:qf,DeleteResponseObject:Ff}});var ei=m((Wse,DO)=>{"use strict";var wO=vf(),Ok=NO(),Zn=V(),IO=require("moment"),CO=x(),{promisify:Nk,callbackify:bk}=require("util"),jn=A(),yk=ks(),Gf=Nk(yk.getTableSchema),xf=qr(),{DeleteResponseObject:Ik}=yO(),{handleHDBError:hn,hdb_errors:wk}=W(),{HDB_ERROR_MSGS:cl,HTTP_STATUS_CODES:mn}=wk,Ck="records successfully deleted",Uk=bk(UO);DO.exports={delete:Uk,deleteRecord:UO,deleteFilesBefore:Dk,deleteAuditLogsBefore:Lk};async function Dk(e){let t=wO(e,"date");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),!IO(e.date,IO.ISO_8601).isValid())throw hn(new Error,cl.INVALID_DATE,mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_DATE,!0);let s=Zn.checkSchemaTableExist(e.schema,e.table);if(s)throw hn(new Error,s,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,s,!0);let n=await xf.deleteRecordsBefore(e);if(await Gf(e.schema,e.table),CO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Dk,"deleteFilesBefore");async function Lk(e){let t=wO(e,"timestamp");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Zn.transformReq(e),isNaN(e.timestamp))throw hn(new Error,cl.INVALID_VALUE("Timestamp"),mn.BAD_REQUEST,jn.LOG_LEVELS.ERROR,cl.INVALID_VALUE("Timestamp"),!0);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);let s=await xf.deleteAuditLogsBefore(e);return await Gf(e.schema,e.table),CO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Lk,"deleteAuditLogsBefore");async function UO(e){e.ids&&(e.hash_values=e.ids);let t=Ok(e);if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);Zn.transformReq(e);let r=Zn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,jn.LOG_LEVELS.ERROR,r,!0);try{await Gf(e.schema,e.table);let s=await xf.deleteRecords(e);return Zn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ck}`),s}catch(s){if(s.message===jn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ik;return n.message=jn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(UO,"deleteRecord")});var ul=m((zse,PO)=>{var Mk=require("crypto"),LO=9;function Pk(e){let t=Bk(LO),r=MO(e+t);return t+r}a(Pk,"createHash");function vk(e,t){let r=e.substr(0,LO),s=r+MO(t+r);return e===s}a(vk,"validateHash");function Bk(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(Bk,"generateSalt");function MO(e){return Mk.createHash("md5").update(e).digest("hex")}a(MO,"md5");PO.exports={hash:Pk,validate:vk}});var BO=m((Xse,vO)=>{var kf=Pe(),It={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 Hk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,kf.validateObject(e,It)}a(Hk,"addUserValidation");function qk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(qk,"alterUserValidation");function Fk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,kf.validateObject(e,It)}a(Fk,"dropUserValidation");vO.exports={addUserValidation:Hk,alterUserValidation:qk,dropUserValidation:Fk}});var Be=m((ene,qO)=>{"use strict";var{platform:jse}=require("os"),Gk="nats-server.zip",Vf="nats-server",xk=process.platform==="win32"?`${Vf}.exe`:Vf,$f="HDB",kk=/^[^\s.,*>]+$/,HO="__request__",Vk=a(e=>`${e}.${HO}`,"REQUEST_SUBJECT"),$k={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Yk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Kk={HUB:"hub.pid",LEAF:"leaf.pid"},Wk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Qk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:$f,deliver_subject:"__HDB__.WORKQUEUE"},zk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:$f,deliver_subject:"HDB.SCHEMAQUEUE"},Jk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:$f,deliver_subject:"HDB.USERQUEUE"},Xk={SUCCESS:"success",ERROR:"error"},Zk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},jk={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},eV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},tV={debug:"-D",trace:"-DVV"};qO.exports={NATS_SERVER_ZIP:Gk,NATS_SERVER_NAME:Vf,NATS_BINARY_NAME:xk,PID_FILES:Kk,NATS_CONFIG_FILES:Yk,SERVER_SUFFIX:Wk,WORK_QUEUE_CONSUMER_NAMES:Qk,SCHEMA_QUEUE_CONSUMER_NAMES:zk,USER_QUEUE_CONSUMER_NAMES:Jk,NATS_TERM_CONSTRAINTS_RX:kk,REQUEST_SUFFIX:HO,UPDATE_REMOTE_RESPONSE_STATUSES:Xk,CLUSTER_STATUS_STATUSES:Zk,REQUEST_SUBJECT:Vk,SUBJECT_PREFIXES:jk,MSG_HEADERS:$k,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:tV,LOG_LEVEL_HIERARCHY:eV}});var GO=m((rne,FO)=>{"use strict";var ll=A(),_l=class{static{a(this,"BaseLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Yf=class extends _l{static{a(this,"ExtendedLicense")}constructor(t=0,r=ll.RAM_ALLOCATION_ENUM.DEFAULT,s=ll.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:_l,ExtendedLicense:Yf}});var ba=m((nne,KO)=>{"use strict";var Vi=require("fs-extra"),xO=ul(),kO=require("crypto"),rV=require("moment"),sV=require("uuid").v4,wt=x(),Wf=require("path"),nV=V(),Sn=A(),iV=GO().ExtendedLicense,ki="invalid license key format",oV="061183",aV="mofi25",cV="aes-256-cbc",uV=16,lV=32,VO=Q();VO.initSync();var Kf;KO.exports={validateLicense:$O,generateFingerPrint:dV,licenseSearch:YO,getLicense:hV};function Qf(){return Wf.join(VO.getHdbBasePath(),Sn.LICENSE_KEY_DIR_NAME,Sn.LICENSE_FILE_NAME)}a(Qf,"getLicenseDirPath");function _V(){let e=Qf();return Wf.join(e,Sn.LICENSE_FILE_NAME)}a(_V,"getLicenseFilePath");function zf(){let e=Qf();return Wf.join(e,Sn.REG_KEY_FILE_NAME)}a(zf,"getFingerPrintFilePath");async function dV(){let e=zf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await EV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(dV,"generateFingerPrint");async function EV(){let e=sV(),t=xO.hash(e),r=zf();try{await Vi.mkdirp(Qf()),await Vi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(EV,"writeFingerprint");function $O(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Sn.RAM_ALLOCATION_ENUM.DEFAULT,version:Sn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=zf(),n=!1;try{n=Vi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Vi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(aV),c=o[1];c=Buffer.concat([Buffer.from(c)],uV);let u=Buffer.concat([Buffer.from(i)],lV),l=kO.createDecipheriv(cV,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=fV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ki),wt.error(ki),new Error(ki)}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(ki),wt.error(ki),new Error(ki)}else r.exp_date=_;r.exp_date<rV().valueOf()&&(r.valid_date=!1),xO.validate(o[1],`${oV}${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||wt.error("Invalid licence"),r}a($O,"validateLicense");function fV(e,t){try{let r=kO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(fV,"checkOldLicense");function YO(){let e=new iV,t=[];try{t=Vi.readFileSync(_V(),"utf-8").split(Sn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(nV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=$O(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){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=Sn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Kf=e,e}a(YO,"licenseSearch");async function hV(){return Kf||await YO(),Kf}a(hV,"getLicense")});var br=m((une,cN)=>{"use strict";var XO="username is required",ZO="nothing to update, must supply active, role or password to update",jO="password cannot be an empty string",eN="If role is specified, it cannot be empty.",tN="active must be true or false";cN.exports={addUser:NV,alterUser:bV,dropUser:IV,getSuperUser:DV,userInfo:wV,listUsers:El,listUsersExternal:CV,setUsersToGlobal:Yi,findAndValidateUser:aN,getClusterUser:LV,USERNAME_REQUIRED:XO,ALTERUSER_NOTHING_TO_UPDATE:ZO,EMPTY_PASSWORD:jO,EMPTY_ROLE:eN,ACTIVE_BOOLEAN:tN};var rN=Nr(),mV=ei(),Xf=ul(),sN=BO(),nN=Or(),Zf=Vs(),or=V(),iN=require("validate.js"),ue=x(),{promisify:SV}=require("util"),jf=xs(),WO=A(),QO=Be(),pV=Tr(),one=Q(),ane=ba(),TV=Wn(),{table:cne}=(de(),re(Ne)),{handleHDBError:is,hdb_errors:RV}=W(),{HTTP_STATUS_CODES:os,AUTHENTICATION_ERROR_MSGS:Jf,HDB_ERROR_MSGS:$i}=RV,{UserEventMsg:eh}=Fr(),zO=require("lodash"),{_assignPackageExport:gV}=require("../index");gV("getUser",aN);var oN={username:!0,active:!0,role:!0,password:!0},JO=new Map,dl=nN.searchByValue,AV=nN.searchByHash,OV=SV(mV.delete);async function NV(e){let t=iN.cleanAttributes(e,oN),r=sN.addUserValidation(t);if(r)throw is(new Error,r.message,os.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 dl(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw is(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),os.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw is(new Error,$i.DUP_ROLES_FOUND(t.role),os.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await rN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Yi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw is(new Error,$i.USER_ALREADY_EXISTS(t.username),os.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Zf.signalUserChange(new eh(process.pid)),`${c.username} successfully added`}a(NV,"addUser");async function bV(e){let t=iN.cleanAttributes(e,oN);if(or.isEmptyOrZeroLength(t.username))throw new Error(XO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(ZO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(jO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(tN);let r=yV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=jf.encrypt(t.password)),t.password=Xf.hash(t.password)),t.role==="")throw new Error(eN);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 dl(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),is(new Error,c,os.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),is(new Error,c,os.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 rN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Yi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Zf.signalUserChange(new eh(process.pid)),n}a(bV,"alterUser");function yV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(yV,"isClusterUser");async function IV(e){try{let t=sN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw is(new Error,$i.USER_NOT_EXIST(e.username),os.NOT_FOUND,void 0,void 0,!0);let s;try{s=await OV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Yi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Zf.signalUserChange(new eh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(IV,"dropUser");async function wV(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 AV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(wV,"userInfo");async function CV(){let e;try{e=await El()}catch(t){throw ue.error("Got an error listing users."),ue.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(CV,"listUsersExternal");async function El(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await dl(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=zO.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 dl(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=zO.cloneDeep(o),o.role=r[o.role],UV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(El,"listUsers");function UV(e){try{if(!e){ue.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(TV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(UV,"appendSystemTablesToRole");async function Yi(){try{let e=await El();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function aN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw is(new Error,Jf.USER_INACTIVE,os.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(JO.get(t)===s.password)return n;if(Xf.validate(s.password,t))JO.set(t,s.password);else throw is(new Error,Jf.GENERIC_AUTH_FAIL,os.UNAUTHORIZED,void 0,void 0,!0)}return n}a(aN,"findAndValidateUser");async function DV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(DV,"getSuperUser");async function LV(){let e=await El(),t=pV.getConfigFromFile(WO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===WO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=jf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+QO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+QO.SERVER_SUFFIX.ADMIN,r}a(LV,"getClusterUser")});var Ia=m((Ene,dN)=>{"use strict";var ti=x(),ar=A(),MV=sO(),_ne=ks(),dne=zn(),PV=br(),{validateEvent:uN}=Fr(),ya=qr(),vV=require("process"),{resetDatabases:BV}=(de(),re(Ne)),HV={[ar.ITC_EVENT_TYPES.SCHEMA]:qV,[ar.ITC_EVENT_TYPES.USER]:_N};async function qV(e){let t=uN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await MV(e.message),await FV(e.message)}a(qV,"schemaHandler");async function FV(e){try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=BV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(FV,"syncSchemaMetadata");var lN=[];async function _N(e){try{try{ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=uN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${vV.pid} received user event:`,e),await PV.setUsersToGlobal();for(let r of lN)r()}catch(t){ti.error(t)}}a(_N,"userHandler");_N.addListener=function(e){lN.push(e)};dN.exports=HV});var Fr=m((Tne,fN)=>{"use strict";var hne=x(),th=V(),GV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:mne,threadId:xV,isMainThread:kV,workerData:Sne}=require("worker_threads"),{onMessageFromWorkers:VV,broadcast:pne,broadcastWithAcknowledgement:$V}=dt();fN.exports={sendItcEvent:YV,validateEvent:EN,SchemaEventMsg:KV,UserEventMsg:WV};var fl;VV(async(e,t)=>{fl=fl||Ia(),EN(e),fl[e.type]&&await fl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function YV(e){return!kV&&e.message&&(e.message.originator=xV),$V(e)}a(YV,"sendItcEvent");function EN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||th.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||th.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||th.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(GV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(EN,"validateEvent");function KV(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(KV,"SchemaEventMsg");function WV(e){this.originator=e}a(WV,"UserEventMsg")});var Vs=m((Ane,pN)=>{"use strict";var hN=A(),gne=V(),hl=x(),mN=eO(),Ki,{sendItcEvent:SN}=Fr();function QV(e){try{hl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),SN(t)}catch(t){hl.error(t)}}a(QV,"signalSchemaChange");function zV(e){try{hl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new mN(hN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),SN(t)}catch(t){hl.error(t)}}a(zV,"signalUserChange");pN.exports={signalSchemaChange:QV,signalUserChange:zV}});var ml=m((Nne,RN)=>{"use strict";var TN=V(),JV=A(),XV=x(),ZV=Zu(),jV=Xu(),e$=Vs(),{SchemaEventMsg:t$}=Fr(),r$="already exists in";RN.exports=s$;async function s$(e,t,r){if(TN.isEmptyOrZeroLength(r))return r;let s=[];TN.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 n$(e,t.schema,t.name,i)})),n}a(s$,"lmdbCheckForNewAttributes");async function n$(e,t,r,s){let n=new jV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await i$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(r$))XV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(n$,"createNewAttribute");async function i$(e){let t;return t=await ZV(e),e$.signalSchemaChange(new t$(process.pid,JV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(i$,"createAttribute")});var Wi=m((yne,gN)=>{"use strict";var rh=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}};gN.exports=rh});var ON=m((wne,AN)=>{"use strict";var o$=Wi(),a$=A().OPERATIONS_ENUM,sh=class extends o${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(a$.INSERT,r,s,n,i),this.records=t}};AN.exports=sh});var bN=m((Une,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,nh=class extends c${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};NN.exports=nh});var IN=m((Lne,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,ih=class extends l${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=ih});var CN=m((Pne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,oh=class extends d${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(E$.DELETE,s,n,t,i),this.original_records=r}};wN.exports=oh});var Ca=m((Hne,MN)=>{"use strict";var Bne=require("path"),UN=ye(),f$=ON(),h$=bN(),m$=IN(),S$=CN(),Qi=xe(),DN=V(),{CONFIG_PARAMS:p$}=A(),LN=Q();LN.initSync();var Sl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:T$}=we();MN.exports=R$;async function R$(e,t){if(LN.get(p$.LOGGING_AUDITLOG)===!1)return;let r=T$(e.schema,e.table),s=await UN.openEnvironment(r,e.table,!0),n=g$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){UN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),DN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(R$,"writeTransaction");function g$(e,t){let r=DN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===Sl.INSERT)return new f$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPDATE)return new h$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.UPSERT)return new m$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===Sl.DELETE)return new S$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(g$,"createTransactionObject")});var ah=m((Gne,PN)=>{"use strict";var A$=pa(),Fne=Ta(),Ua=A(),O$=Oa(),N$=Fi().insertRecords,b$=ye(),y$=x(),I$=ml(),{getSchemaPath:w$}=we(),C$=Ca();PN.exports=U$;async function U$(e){try{let{schema_table:t,attributes:r}=A$(e);O$(e,r,t.hash_attribute),e.schema!==Ua.SYSTEM_SCHEMA_NAME&&(r.includes(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await I$(e.hdb_auth_header,t,r),n=w$(e.schema,e.table),i=await b$.openEnvironment(n,e.table),o=await N$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await C$(e,o)}catch(c){y$.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(U$,"lmdbCreateRecords")});var HN=m((kne,BN)=>{"use strict";var vN=A(),D$=ah(),L$=Ta(),M$=require("fs-extra"),{getSchemaPath:P$}=we();BN.exports=v$;async function v$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new L$(vN.SYSTEM_SCHEMA_NAME,vN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await D$(r),await M$.mkdirp(P$(e.schema))}a(v$,"lmdbCreateSchema")});var FN=m(($ne,qN)=>{"use strict";var ch=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}};qN.exports=ch});var VN=m((zne,kN)=>{"use strict";var GN=ye(),uh=Ht(),lh=rr().LMDB_ERRORS_ENUM,B$=xe(),xN=x(),Kne=V(),H$=require("lmdb"),q$=FN(),F$=A(),{OVERFLOW_MARKER:Wne,MAX_SEARCH_KEY_LENGTH:Qne}=B$,G$=F$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function x$(e,t,r,s){if(uh.validateEnv(e),t===void 0)throw new Error(lh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lh.IDS_REQUIRED):new Error(lh.IDS_MUST_BE_ITERABLE);try{let n=GN.listDBIs(e);GN.initializeDBIs(e,t,n);let i=new q$,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[G$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,H$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=uh.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{xN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){xN.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=uh.getNextMonotonicTime(),i}catch(n){throw n}}a(x$,"deleteRecords");kN.exports={deleteRecords:x$}});var Da=m((Xne,YN)=>{"use strict";var zi=V(),k$=VN(),V$=ye(),{getSchemaPath:$$}=we(),Y$=Ca(),K$=x();YN.exports=W$;async function W$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return $N([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.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=$$(e.schema,e.table),i=await V$.openEnvironment(n,e.table),o=await k$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await Y$(e,o)}catch(c){K$.error(`unable to write transaction due to ${c.message}`)}return $N(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(W$,"lmdbDeleteRecords");function $N(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($N,"createDeleteResponse")});var dh=m((eie,KN)=>{"use strict";var Q$=A(),jne=Ht();function _h(e,t){let r=Object.create(null);if(t.length===1&&Q$.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(_h,"parseRow");function z$(e,t,r,s){let n=_h(r,e);s.push(n)}a(z$,"searchAll");function J$(e,t,r,s){let n=_h(r,e);s[t]=n}a(J$,"searchAllToMap");function X$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(X$,"iterateDBI");function ri(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(ri,"pushResults");function Z$(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(Z$,"endsWith");function j$(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(j$,"contains");function eY(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(eY,"greaterThanCompare");function tY(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a(tY,"greaterThanEqualCompare");function rY(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(rY,"lessThanCompare");function sY(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(sY,"lessThanEqualCompare");KN.exports={parseRow:_h,searchAll:z$,searchAllToMap:J$,iterateDBI:X$,endsWith:Z$,contains:j$,greaterThanCompare:eY,greaterThanEqualCompare:tY,lessThanCompare:rY,lessThanEqualCompare:sY,pushResults:ri}});var Ji=m((iie,jN)=>{"use strict";var pn=ye(),rie=x(),cr=Ht(),pl=xe(),ke=rr().LMDB_ERRORS_ENUM,sie=V(),nY=A(),Tl=dh(),{parseRow:iY}=Tl,nie=require("lmdb"),{OVERFLOW_MARKER:WN,MAX_SEARCH_KEY_LENGTH:oY}=pl;function QN(e,t,r,s=!1,n=void 0,i=void 0){return si(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(QN,"iterateFullIndex");function La(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(e,t,r,(_,d,E,f)=>{let O={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?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(La,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=pn.openDBI(n,r);i[pl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&pn.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(si,"setupTransaction");function zN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(WN)){if(!n)if(r)n=pn.openDBI(e,r);else{let u=pn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=pn.openDBI(e,u[l]),!n[pl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(zN,"getOverflowCheck");function aY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return si(e,t,t,(o,c,u)=>(Rl(r),r=Ma(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>iY(l.value,r))))}a(aY,"searchAll");function cY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Rl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of QN(e,t,t,s,n,i))o.set(c,Tl.parseRow(u,r));return o}a(cY,"searchAllToMap");function uY(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=QN(e,void 0,t,r,s,n),c=o.transaction,u=zN(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(uY,"iterateDBI");function lY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return pn.statDBI(e,t).entryCount}a(lY,"countAll");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(e,t,r,(c,u,l,_)=>(s=cr.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(_Y,"equals");function dY(e,t,r){return Tn(e,t,r),pn.openDBI(e,t).getValuesCount(r)}a(dY,"count");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){return Tn(e,r,s),si(e,null,r,(c,u)=>{s=cr.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(EY,"startsWith");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){return JN(e,t,r,s,n,i,o,!0)}a(fY,"endsWith");function JN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Tn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=zN(_,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(WN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[pl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(JN,"contains");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!0,!1)}a(hY,"greaterThan");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),La(e,t,r,s,u,n,i,o,!1,!1)}a(mY,"greaterThanEqual");function SY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!0)}a(SY,"lessThan");function pY(e,t,r,s,n=!1,i=void 0,o=void 0){Tn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),La(e,t,r,u,s,n,i,o,!1,!1)}a(pY,"lessThanEqual");function TY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return La(e,t,r,s,n,i,o,c)}a(TY,"between");function RY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),r=Ma(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=Tl.parseRow(c,r)),o}a(RY,"searchByHash");function gY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(gY,"checkHashExists");function AY(e,t,r,s,n=[]){return ZN(e,t,r,s,n),XN(e,t,r,s,n).map(i=>i[1])}a(AY,"batchSearchByHash");function OY(e,t,r,s,n=[]){ZN(e,t,r,s,n);let i=new Map;for(let[o,c]of XN(e,t,r,s,n))i.set(o,c);return i}a(OY,"batchSearchByHashToMap");function XN(e,t,r,s,n=[]){return si(e,t,t,(i,o,c)=>{r=Ma(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,Tl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(XN,"batchHashSearch");function ZN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Rl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(ZN,"initializeBatchSearchByHash");function Rl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Rl,"validateFetchAttributes");function Tn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>oY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Tn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&nY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=pn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");jN.exports={searchAll:aY,searchAllToMap:cY,count:dY,countAll:lY,equals:_Y,startsWith:EY,endsWith:fY,contains:JN,searchByHash:RY,setGetWholeRowAttributes:Ma,batchSearchByHash:AY,batchSearchByHashToMap:OY,checkHashExists:gY,iterateDBI:uY,greaterThan:hY,greaterThanEqual:mY,lessThan:SY,lessThanEqual:pY,between:TY}});var Xi=m((aie,nb)=>{var eb=require("lodash"),tb=Pe(),Ce=require("joi"),NY=V(),{hdb_schema_table:gl,checkValidTable:rb,hdb_table:sb,hdb_database:Al}=ss(),{handleHDBError:bY,hdb_errors:yY}=W(),{getDatabases:IY}=(de(),re(Ne)),{HTTP_STATUS_CODES:wY}=yY,CY=Ce.object({database:Al,schema:Al,table:sb,search_attribute:gl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(gl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),UY=Ce.object({database:Al,schema:Al,table:sb,operator:Ce.string().valid("and","or").default("and").lowercase(),offset:Ce.number().integer().min(0),limit:Ce.number().integer().min(1),get_attributes:Ce.array().min(1).items(gl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:gl,search_type:Ce.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ce.when("search_type",{switch:[{is:"equals",then:Ce.any()},{is:"between",then:Ce.array().items(Ce.alternatives([Ce.string(),Ce.number()])).length(2)}],otherwise:Ce.alternatives(Ce.string(),Ce.number())}).required()})).required()});nb.exports=function(e,t){let r=null;switch(t){case"value":r=tb.validateBySchema(e,CY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(rb("database",e.schema)),i(rb("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=tb.validateBySchema(e,UY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=NY.checkGlobalSchemaTable(e.schema,e.table);if(n)return bY(new Error,n,wY.NOT_FOUND);let o=IY()[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=eb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!eb.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 Eh=m((uie,ib)=>{"use strict";var DY=ye(),LY=Xi(),{getSchemaPath:MY}=we();ib.exports=PY;function PY(e){let t=LY(e,"hashes");if(t)throw t;let r=MY(e.schema,e.table);return DY.openEnvironment(r,e.table)}a(PY,"initialize")});var fh=m((_ie,ob)=>{"use strict";var vY=Ji(),BY=Eh();ob.exports=HY;async function HY(e){let t=await BY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return vY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(HY,"lmdbGetDataByHash")});var Zi=m((Eie,ab)=>{"use strict";var hh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ab.exports=hh});var ub=m((mie,cb)=>{"use strict";var hie=Zi(),qY=Ji(),FY=Eh();cb.exports=GY;async function GY(e){let t=await FY(e),r=global.hdb_schema[e.schema][e.table];return qY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(GY,"lmdbSearchByHash")});var as=m((pie,lb)=>{"use strict";var mh=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=_}};lb.exports=mh});var Ol=m((Rie,mb)=>{"use strict";var Ct=Ji(),xY=ye(),kY=V(),ie=xe(),ni=A(),VY=Wn(),_b=rr().LMDB_ERRORS_ENUM,{getSchemaPath:$Y}=we(),$s=ni.SEARCH_WILDCARDS;async function YY(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=VY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=hb(e,s.hash_attribute,r,t);return Eb(e,n,s.hash_attribute,r)}a(YY,"prepSearch");async function Eb(e,t,r,s){let n=$Y(e.schema,e.table),i=await xY.openEnvironment(n,e.table),o=fb(i,e,t,r),c=o.transaction||i;if([ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ie.SEARCH_TYPES.SEARCH_ALL,ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(KY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?db(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?db(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(Eb,"executeSearch");function fb(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 ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(fb,"searchByType");function db(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(db,"createMapFromIterable");function KY(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(KY,"checkToFetchMore");function hb(e,t,r,s){if(kY.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),$s.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf($s[0])<0&&n.indexOf($s[1])<0)return c===!0?r===!0?ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ie.SEARCH_TYPES.EQUALS;if($s.indexOf(i)>=0&&$s.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if($s.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if($s.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes($s[0])||n.includes($s[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(_b.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(_b.UNKNOWN_SEARCH_TYPE)}}a(hb,"createSearchTypeFromSearchObject");mb.exports={executeSearch:Eb,createSearchTypeFromSearchObject:hb,prepSearch:YY,searchByType:fb}});var pb=m((Oie,Sb)=>{"use strict";var Aie=as(),WY=Xi(),QY=V(),zY=A(),JY=Ol();Sb.exports=XY;function XY(e,t){if(!QY.isEmpty(t)&&zY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=WY(e,"value");if(s)throw s;let n=!0;return JY.prepSearch(e,t,n)}a(XY,"lmdbGetDataByValue")});var Pa=m((yie,Tb)=>{"use strict";var bie=as(),ZY=Xi(),jY=V(),eK=A(),tK=Ol();Tb.exports=rK;async function rK(e,t){if(!jY.isEmpty(t)&&eK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=ZY(e,"value");if(s)throw s;return tK.prepSearch(e,t,!1)}a(rK,"lmdbSearchByValue")});var gb=m((Cie,Rb)=>{"use strict";var wie=xe(),Sh=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}},ph=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Th=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Rb.exports={SearchByConditionsObject:Sh,SearchCondition:ph,SortAttribute:Th}});var yb=m((Mie,bb)=>{"use strict";var Die=gb().SearchByConditionsObject,sK=as(),nK=Xi(),Rh=Ji(),Nl=xe(),{Resource:Lie}=(jr(),re(FE)),Nb=Ol(),iK=dh(),oK=require("lodash"),{getSchemaPath:aK}=we(),Ab=ye(),{handleHDBError:cK,hdb_errors:uK}=W(),{HTTP_STATUS_CODES:lK}=uK,_K=1e8;bb.exports=dK;async function dK(e){let t=nK(e,"conditions");if(t)throw cK(t,t.message,lK.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=aK(e.schema,e.table),s=await Ab.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Ab.openDBI(s,l.search_attribute);let i=oK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Nl.SEARCH_TYPES.EQUALS?l.estimated_count=Rh.count(s,l.search_attribute,l.search_value):_===Nl.SEARCH_TYPES.CONTAINS||_===Nl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=_K}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ob(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(Nb.filterByType),d=_.length,E=Rh.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=>iK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ob(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=Rh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(dK,"lmdbSearchByConditions");async function Ob(e,t,r,s){let n=new sK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Nl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Nb.searchByType(e,n,i,s).map(o=>o.value)}a(Ob,"executeConditionSearch")});var va=m((vie,Ib)=>{"use strict";var EK=A().OPERATIONS_ENUM,gh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=EK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ib.exports=gh});var Ah=m((Hie,vb)=>{"use strict";var Db=as(),Lb=va(),Mb=Pa(),Pb=Da(),Ft=A(),wb=V(),Cb=ye(),{getTransactionAuditStorePath:fK,getSchemaPath:hK}=we(),Ub=x();vb.exports=mK;async function mK(e){try{if(wb.isEmpty(global.hdb_schema[e.schema])||wb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await SK(e),await pK(e);let t=hK(e.schema,e.table);try{await Cb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=fK(e.schema,e.table);await Cb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Ub.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(mK,"lmdbDropTable");async function SK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Pb(n)}a(SK,"deleteAttributesFromSystem");async function pK(e){let t=new Db(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Mb(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 Lb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Pb(n)}catch(i){throw i}}a(pK,"dropTableFromSystem")});var Hb=m((Fie,Bb)=>{"use strict";var TK=require("fs-extra"),RK=as(),gK=Zi(),AK=va(),OK=Ah(),NK=Da(),bK=fh(),yK=Pa(),Ys=A(),{getSchemaPath:IK}=we(),{handleHDBError:wK,hdb_errors:CK}=W(),{HDB_ERROR_MSGS:UK,HTTP_STATUS_CODES:DK}=CK;Bb.exports=LK;async function LK(e){let t;try{t=await MK(e.schema);let r=new RK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await yK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await OK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new AK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await NK(n);let i=IK(t);await TK.remove(i)}catch(r){throw r}}a(LK,"lmdbDropSchema");async function MK(e){let t=new gK(Ys.SYSTEM_SCHEMA_NAME,Ys.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ys.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await bK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw wK(new Error,UK.SCHEMA_NOT_FOUND(e),DK.NOT_FOUND,void 0,void 0,!0);return s}a(MK,"validateDropSchema")});var Nh=m((xie,qb)=>{"use strict";var Oh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};qb.exports=Oh});var Gb=m(($ie,Fb)=>{"use strict";var PK=require("fs-extra"),bl=ye(),{getTransactionAuditStorePath:vK}=we(),bh=xe(),Vie=Nh();Fb.exports=BK;async function BK(e){let t;try{let r=vK(e.schema,e.table);await PK.mkdirp(r),t=await bl.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{bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),bl.createDBI(t,bh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),bl.createDBI(t,bh.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(BK,"createTransactionsAuditEnvironment")});var $b=m((Kie,Vb)=>{"use strict";var yh=A(),xb=ye(),HK=Fi(),{getSystemSchemaPath:qK,getSchemaPath:FK}=we(),GK=Wn(),xK=Zu(),Ih=Xu(),kK=x(),VK=Gb(),Ch=GK.hdb_table,kb=[];for(let e=0;e<Ch.attributes.length;e++)kb.push(Ch.attributes[e].attribute);Vb.exports=$K;async function $K(e,t){let r=FK(t.schema,t.table),s=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ih(t.schema,t.table,yh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ih(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await xb.createEnvironment(r,t.table),e!==void 0){let o=await xb.openEnvironment(qK(),yh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await HK.insertRecords(o,Ch.hash_attribute,kb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await wh(s),await wh(n),await wh(i)}await VK(t)}catch(o){throw o}}a($K,"lmdbCreateTable");async function wh(e){try{await xK(e)}catch(t){kK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(wh,"createAttribute")});var Kb=m((Qie,Yb)=>{"use strict";var YK=pa(),KK=Oa(),WK=ml(),Ba=A(),QK=Fi().updateRecords,zK=ye(),{getSchemaPath:JK}=we(),XK=Ca(),ZK=x();Yb.exports=jK;async function jK(e){try{let{schema_table:t,attributes:r}=YK(e);KK(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await WK(e.hdb_auth_header,t,r),n=JK(e.schema,e.table),i=await zK.openEnvironment(n,e.table),o=await QK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await XK(e,o)}catch(c){ZK.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(jK,"lmdbUpdateRecords")});var Qb=m((Jie,Wb)=>{"use strict";var e1=A().OPERATIONS_ENUM,Uh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=e1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Wb.exports=Uh});var Jb=m((jie,zb)=>{"use strict";var Zie=Qb(),t1=pa(),r1=Oa(),s1=ml(),Ha=A(),n1=Fi().upsertRecords,i1=ye(),{getSchemaPath:o1}=we(),a1=Ca(),c1=x(),{handleHDBError:u1,hdb_errors:l1}=W();zb.exports=_1;async function _1(e){let t;try{t=t1(e)}catch(u){throw u1(u,u.message,l1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;r1(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await s1(e.hdb_auth_header,r,s),i=o1(e.schema,e.table),o=await i1.openEnvironment(i,e.table),c=await n1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await a1(e,c)}catch(u){c1.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(_1,"lmdbUpsertRecords")});var Zb=m((toe,Xb)=>{"use strict";var Dh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Xb.exports=Dh});var ey=m((soe,jb)=>{"use strict";var Lh=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}};jb.exports=Lh});var sy=m((ooe,ry)=>{"use strict";var Mh=ye(),{getTransactionAuditStorePath:d1}=we(),ioe=Zb(),qa=xe(),E1=V(),ty=ey(),f1=require("util").promisify,h1=f1(setTimeout),m1=1e4,S1=100;ry.exports=p1;async function p1(e){let t=d1(e.schema,e.table),r=await Mh.openEnvironment(t,e.table,!0),s=Mh.listDBIs(r);Mh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ty;do n=await T1(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 h1(S1);while(n.transactions_deleted>0);return i}a(p1,"deleteAuditLogsBefore");async function T1(e,t){let r=new ty;try{let s=e.dbis[qa.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[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];E1.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>m1)break}return await n,r}catch(s){throw s}}a(T1,"deleteTransactions")});var iy=m((coe,ny)=>{"use strict";var Ph=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ny.exports=Ph});var ay=m((_oe,oy)=>{"use strict";var R1=as(),g1=va(),loe=iy(),cs=A(),A1=V(),vh=ye(),O1=Wn(),N1=Pa(),b1=Da(),{getSchemaPath:y1}=we();oy.exports=I1;async function I1(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=O1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await C1(e),n=y1(e.schema,e.table),i=await vh.openEnvironment(n,e.table);return t===!0&&await w1(e,i,r.hash_attribute),vh.dropDBI(i,e.attribute),s}a(I1,"lmdbDropAttribute");async function w1(e,t,r){let s=vh.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(w1,"removeAttributeFromAllObjects");async function C1(e){let t=new R1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await N1(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(A1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new g1(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return b1(i)}a(C1,"dropAttributeFromSystem")});var Ey=m((foe,dy)=>{"use strict";var Bh=ye(),ji=xe(),Eoe=Ht(),Hh=A(),cy=V(),{getTransactionAuditStorePath:U1}=we(),D1=Ji(),yl=Wi(),L1=x();dy.exports=M1;async function M1(e){let t=U1(e.schema,e.table),r=await Bh.openEnvironment(t,e.table,!0),s=Bh.listDBIs(r);Bh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return uy(r,e.search_values);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,v1(r,e.search_values,n);case Hh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return P1(r,e.search_values);default:return uy(r)}}a(M1,"readAuditLog");function uy(e,t=[0,Date.now()]){cy.isEmpty(t[0])&&(t[0]=0),cy.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.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 yl,n))}a(uy,"searchTransactionsByTimestamp");function P1(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[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,_y(e,i))}return Object.fromEntries(r)}a(P1,"searchTransactionsByUsername");function v1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=D1.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.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=_y(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ly(u,"records",r,_,o),ly(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(v1,"searchTransactionsByHashValues");function ly(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 yl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new yl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(ly,"loopRecords");function _y(e,t){let r=[];try{let s=e.dbis[ji.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 yl,i);r.push(o)}}catch(i){L1.warn(i)}return r}catch(s){throw s}}a(_y,"batchSearchTransactions")});var hy=m((poe,fy)=>{"use strict";var{getSchemaPath:moe}=we(),Soe=ye(),{database:B1}=(de(),re(Ne));fy.exports={writeTransaction:H1};async function H1(e,t,r){return B1({database:e,table:t}).transaction(r)}a(H1,"writeTransaction")});var Ty=m((Roe,py)=>{"use strict";var{getSchemaPath:my}=we(),Sy=ye();py.exports={flush:q1,resetReadTxn:F1};async function q1(e,t){return(await Sy.openEnvironment(my(e,t),t.toString())).flushed}a(q1,"flush");async function F1(e,t){try{(await Sy.openEnvironment(my(e,t),t.toString())).resetReadTxn()}catch{}}a(F1,"resetReadTxn")});var Oy=m((Aoe,Ay)=>{"use strict";var{Readable:G1}=require("stream"),{getDatabases:x1}=(de(),re(Ne)),{readSync:k1,openSync:V1,createReadStream:Ry}=require("fs"),{open:$1}=require("lmdb"),gy=xu(),Y1=Vu(),{INTERNAL_DBIS_NAME:K1}=xe();Ay.exports=Q1;var qh=32768,W1=100;async function Q1(e){let t=e.database||e.schema||"data",r=x1()[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=$1({noSync:!0,maxDbs:Y1.MAX_DBS}),E,f=d.openDB(K1,new gy(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new gy(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%W1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ry(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=V1(o.path);return o.transaction(()=>{let l=Buffer.alloc(qh);k1(c,l,0,qh);let _=o.useReadTransaction(),d=Ry(null,{fd:c,start:qh}),E=new G1.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(Q1,"getBackup")});var yy=m((Noe,by)=>{"use strict";var z1=x(),{handleHDBError:J1}=W(),X1=cA(),Z1=Zu(),j1=ah(),eW=HN(),tW=Da(),rW=fh(),sW=ub(),nW=pb(),iW=Pa(),oW=yb(),aW=Hb(),cW=$b(),uW=Kb(),lW=Jb(),_W=sy(),dW=Ah(),EW=ay(),fW=Ey(),hW=hy(),Ny=Ty(),mW=Oy(),Fh=class extends X1{static{a(this,"LMDBBridge")}async searchByConditions(t){return oW(t)}async getDataByHash(t){return await rW(t)}async searchByHash(t){return await sW(t)}async getDataByValue(t,r){return await nW(t,r)}async searchByValue(t){return await iW(t)}async createSchema(t){return await eW(t)}async dropSchema(t){return await aW(t)}async createTable(t,r){return await cW(t,r)}async dropTable(t){return await dW(t)}async createAttribute(t){return await Z1(t)}async createRecords(t){return await j1(t)}async updateRecords(t){return await uW(t)}async upsertRecords(t){try{return await lW(t)}catch(r){throw J1(r,null,null,z1.ERR,r)}}async deleteRecords(t){return await tW(t)}async dropAttribute(t){return await EW(t)}async deleteAuditLogsBefore(t){return await _W(t)}async readAuditLog(t){return await fW(t)}writeTransaction(t,r,s){return hW.writeTransaction(t,r,s)}flush(t,r){return Ny.flush(t,r)}resetReadTxn(t,r){return Ny.resetReadTxn(t,r)}getBackup(t){return mW(t)}};by.exports=Fh});var vy={};je(vy,{ResourceBridge:()=>kh});function Vh({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 wy(e,t){let r=us(e),s=Vh(e,r);if(!r)throw new Gr.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 Ye(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&&Pu(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||pW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,SW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Cy(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*Uy(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 Dy,Il,Gr,Ly,My,kr,Gh,xh,Py,SW,pW,TW,RW,Iy,kh,By=Se(()=>{"use strict";Dy=C(yy()),Il=C(Xi()),Gr=C(W());de();Ly=C(pa()),My=C(Oa()),kr=C(A()),Gh=C(Vs()),xh=C(Fr()),Py=C(V());Yn();vu();({HDB_ERROR_MSGS:SW}=Gr.hdb_errors),pW="data",TW=1e4,RW=10,kh=class extends Dy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Iy=this}async searchByConditions(t){let r=(0,Il.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=us(t);if(!s)throw new Gr.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:Vh(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 Gr.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}]}st({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await us(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=us(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){us(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Gh.signalSchemaChange(new xh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await $h(t.schema),Gh.signalSchemaChange(new xh.SchemaEventMsg(process.pid,kr.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,Iy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Ly.default)(t);(0,My.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ye(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=Pu(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=xr()[t.schema][t.table],s={user:t.hdb_user};return Ye(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 Cy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=xr()[t.schema][t.table];if(!r.createdTimeProperty)throw new Gr.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:kr.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,Py.async_set_timeout)(RW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%TW===0&&await l();return u.length>0&&await l(),n?Cy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Il.default)(t,"hashes");if(r)throw r;return wy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of wy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&kr.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Il.default)(t,"value");if(s)throw s;let n=us(t);if(!n)throw new Gr.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===kr.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:Vh(t,n)})}async getDataByValue(t,r){let s=new Map,n=us(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){us({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return us(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=us(t),s={};switch(t.search_type){case kr.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 kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Uy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Uy(r,t.search_values?.[0],t.search_values?.[1])}}};a(Vh,"getSelect");a(wy,"getRecords");a(us,"getTable");a(Cy,"createDeleteResponse");a(Uy,"groupRecordsInHistory")});var qr=m((Uoe,Hy)=>{"use strict";var{ResourceBridge:gW}=(By(),re(vy)),AW=Q();AW.initSync();var wl;function OW(){return wl||(wl=new gW,wl)}a(OW,"getBridge");Hy.exports=OW()});var xy=m((Loe,Gy)=>{"use strict";var qy=require("lodash"),Ga=require("mathjs"),NW=require("jsonata"),Fy=V();Gy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?qy.uniqWith(e,qy.isEqual):e,searchJSON:bW,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(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(xa,"aggregateFunction");function bW(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(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=NW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(bW,"searchJSON")});var Vy=m((Poe,ky)=>{"use strict";var We=require("moment"),Yh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;ky.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(Yh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(Yh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Yh)}});var Wy=m((voe,Ky)=>{"use strict";var yW=require("@turf/area"),IW=require("@turf/length"),wW=require("@turf/circle"),CW=require("@turf/difference"),UW=require("@turf/distance"),DW=require("@turf/boolean-contains"),LW=require("@turf/boolean-equal"),MW=require("@turf/boolean-disjoint"),PW=require("@turf/helpers"),$y=A(),le=V();Ky.exports={geoArea:vW,geoLength:BW,geoCircle:HW,geoDifference:qW,geoDistance:Yy,geoNear:FW,geoContains:GW,geoEqual:xW,geoCrosses:kW,geoConvert:VW};var Kh="geo1 is required",Wh="geo2 is required";function vW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),yW.default(e)}a(vW,"geoArea");function BW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),IW.default(e,{units:t||"kilometers"})}a(BW,"geoLength");function HW(e,t,r){if(le.isEmpty(e))throw new Error("point is required");if(le.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),wW.default(e,t,{units:r||"kilometers"})}a(HW,"geoCircle");function qW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW(e,t)}a(qW,"geoDifference");function Yy(e,t,r){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),UW.default(e,t,{units:r||"kilometers"})}a(Yy,"geoDistance");function FW(e,t,r,s){if(le.isEmpty(e))throw new Error("point1 is required");if(le.isEmpty(t))throw new Error("point2 is required");if(le.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Yy(e,t,s)<=r}a(FW,"geoNear");function GW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),DW.default(e,t)}a(GW,"geoContains");function xW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),LW.default(e,t)}a(xW,"geoEqual");function kW(e,t){if(le.isEmpty(e))throw new Error(Kh);if(le.isEmpty(e))throw new Error(Wh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!MW.default(e,t)}a(kW,"geoCrosses");function VW(e,t,r){if(le.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(le.isEmpty(t))throw new Error("geo_type is required");if(le.isEmpty($y.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys($y.GEO_CONVERSION_ENUM).join(",")}`);return PW[t](e,r)}a(VW,"geoConvert")});var Cl=m((Hoe,Qy)=>{var ii=xy(),ur=Vy(),ls=Wy();Qy.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ls.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ls.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ls.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ls.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ls.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ls.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ls.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ls.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ls.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ls.geoNear}});var Zy=m((qoe,Xy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var $W=Cl(),zy=require("clone"),Ul=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),YW=A(),{hdb_errors:KW}=W(),{getDatabases:Jy}=(de(),re(Ne)),WW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";$W(pt);var Qh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.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(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new Ul(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(zy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.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=Jy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ne.isEmpty(this.statement.where)){se.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Ul(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ul(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(!ne.isEmpty(YW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.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(ne.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"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.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&&ka.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(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.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(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.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(zy(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(ne.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(WW)>-1&&this.tables.forEach(n=>{let i={columnid:Jy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=ka.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),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await eo.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 se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}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 eo.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,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.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 eo.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await eo.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,ne.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,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_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 pt.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 pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.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 pt.yy.FuncValue:new pt.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,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${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 "${T}.${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 pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.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 T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=ka.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ul(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=ka.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 se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}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 eo.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 T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.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();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.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 se.error(KW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.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 eo.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 se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Xy.exports=Qh});var Or=m((Goe,jy)=>{"use strict";var QW=oA();jy.exports={searchByConditions:JW,searchByHash:XW,searchByValue:ZW,search:jW};var zh=qr(),{transformReq:Jh}=V(),zW=Zy();async function JW(e){return Jh(e),zh.searchByConditions(e)}a(JW,"searchByConditions");async function XW(e){Jh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of zh.searchByHash(e))r&&t.push(r);return t}a(XW,"searchByHash");async function ZW(e){Jh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of zh.searchByValue(e))t.push(r);return t}a(ZW,"searchByValue");function jW(e,t){try{let r=new QW(e);r.validate(),new zW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(jW,"search")});var Dl=m((koe,eI)=>{"use strict";var eQ=qr();eI.exports={writeTransaction:tQ};function tQ(e,t,r){return eQ.writeTransaction(e,t,r)}a(tQ,"writeTransaction")});var nI=m((Yoe,sI)=>{"use strict";var rQ=Or(),sQ=ks(),tI=x(),nQ=Nr(),$oe=Dl(),iQ=require("clone"),Zh=require("alasql"),oQ=Cl(),rI=require("util"),aQ=rI.promisify(sQ.getTableSchema),cQ=rI.promisify(rQ.search),uQ=A(),Xh=V();oQ(Zh);sI.exports={update:_Q};var lQ="There was a problem performing this update. Please check the logs and try again.";async function _Q({statement:e,hdb_user:t}){let r=await aQ(e.table.databaseid,e.table.tableid),s=dQ(e.columns);Xh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=iQ(n),c=Xh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Zh.parse(u).statements[0],_=await cQ(l),d=EQ(s,_);return fQ(o,d,t)}a(_Q,"update");function dQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Zh.compile(`SELECT ${r.expression.toString()} AS [${uQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw tI.error(t),new Error(lQ)}}a(dQ,"createUpdateRecord");function EQ(e,t){return Xh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(EQ,"buildUpdateRecords");async function fQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await nQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){tI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(fQ,"updateRecords")});var oI=m((zoe,iI)=>{var hQ=require("alasql"),mQ=Or(),SQ=x(),pQ=qr(),em=require("util"),jh=V(),TQ=A(),RQ=ks(),Woe=Dl(),Qoe=Nr(),gQ="record",AQ="successfully deleted",OQ=em.callbackify(IQ),NQ=em.promisify(mQ.search),bQ=em.promisify(RQ.getTableSchema);iI.exports={convertDelete:OQ};function yQ(e){return`${e.deleted_hashes.length} ${gQ}${e.deleted_hashes.length===1?"":"s"} ${AQ}`}a(yQ,"generateReturnMessage");async function IQ({statement:e,hdb_user:t}){let r=await bQ(e.table.databaseid,e.table.tableid);jh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=jh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=hQ.parse(o).statements[0],u={operation:TQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await NQ(c);let l=await pQ.deleteRecords(u);return jh.isEmptyOrZeroLength(l.message)&&(l.message=yQ(l)),delete l.txn_time,l}catch(l){throw SQ.error(l),l.hdb_code?l.message:l}}a(IQ,"convertDelete")});var _I=m((Xoe,lI)=>{"use strict";var wQ=zn(),{hdb_errors:aI}=W(),{getDatabases:cI}=(de(),re(Ne));lI.exports={checkSchemaExists:uI,checkSchemaTableExists:CQ,schema_describe:wQ};async function uI(e){if(!cI()[e])return aI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(uI,"checkSchemaExists");async function CQ(e,t){let r=await uI(e);if(r)return r;if(!cI()[e][t])return aI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(CQ,"checkSchemaTableExists")});var Va=m((joe,UQ)=>{UQ.exports={name:"harperdb",version:"4.2.0-alpha.13",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 Bl={};je(Bl,{addAnalyticsListener:()=>nm,recordAction:()=>_s,recordActionBinary:()=>to,setAnalyticsEnabled:()=>DQ});function DQ(e){gI=e}function _s(e,t,r,s,n){if(!gI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Pl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Pl.set(i,o)),Ml||LQ()}function to(e,t,r,s,n){_s(e?1:0,t,r,s,n)}function nm(e){OI.push(e)}function LQ(){Ml=performance.now(),setTimeout(()=>{let e=performance.now()-Ml;Ml=0;let t=[],r={time:Date.now(),period:e,threadId:oi.threadId,metrics:t};for(let[n,i]of Pl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:oi.threadId,...s});for(let n of OI)n(t);Pl=new Map,oi.parentPort?oi.parentPort.postMessage({type:AI,report:r}):bI({report:r})},sm).unref()}async function MQ(e,t=6e4){let r=im(),s;for(let _ of r.primaryStore.getRange({start:Ll+"z",end:Ll,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:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await PQ()}for(let[_,d]of i)d.id=Ll+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Ll+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-dI,active:l-EI,time:c}),dI=u,EI=l}async function vQ(e,t){let r=im(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function im(){return fI||(fI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function HQ(){NI=!0,setInterval(async()=>{await MQ(sm,rm),await vQ(BQ,sm)},rm/2).unref()}function bI(e,t){let r=e.report;r.threadId=t?.threadId||oi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(hI+=s.mean*s.count);r.totalBytesProcessed=hI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(mI.get(t))}),mI.set(t,t.performance.eventLoopUtilization())),r.id=(0,TI.getNextMonotonicTime)(),im().put(r),NI||HQ(),qQ&&(yI=GQ(r))}async function GQ(e){if(await yI,!Rn){let r=(0,$a.dirname)((0,pI.getLogFilePath)());try{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Rn=await(0,tm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Rn.stat()).size;if(t>FQ){let r=Buffer.alloc(t);await Rn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Rn.write(r,{position:0}),await Rn.truncate(r.length),t=r.length}await Rn.write(JSON.stringify(e)+`
6
+ `,t)}var oi,SI,pI,$a,tm,TI,vl,RI,Pl,rm,gI,Ml,sm,AI,OI,Ll,dI,EI,PQ,BQ,fI,NI,hI,mI,qQ,yI,Rn,FQ,ai=Se(()=>{oi=require("worker_threads"),SI=C(dt());de();pI=C(x()),$a=require("path"),tm=require("fs/promises"),TI=C(Ht()),vl=C(Q()),RI=C(A());Xr();(0,vl.initSync)();Pl=new Map,rm=(0,vl.get)(RI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,gI=rm>0;a(DQ,"setAnalyticsEnabled");a(_s,"recordAction");tt.recordAnalytics=_s;a(to,"recordActionBinary");Ml=0,sm=1e3,AI="analytics-report",OI=[];a(nm,"addAnalyticsListener");a(LQ,"sendAnalytics");Ll="sum-";a(MQ,"aggregation");dI=0,EI=0,PQ=a(()=>new Promise(setImmediate),"rest");a(vQ,"cleanup");BQ=36e5;a(im,"getAnalyticsTable");(0,SI.setChildListenerByType)(AI,bI);a(HQ,"startScheduledTasks");hI=0,mI=new Map,qQ=!1;a(bI,"recordAnalytics");FQ=1e6;a(GQ,"logAnalytics")});var nt=m((Eae,YI)=>{"use strict";var Tt=Q();Tt.initSync();var xQ=require("fs-extra"),kQ=require("semver"),Qa=require("path"),{monotonicFactory:VQ}=require("ulidx"),um=VQ(),$Q=require("util"),wI=require("child_process"),YQ=$Q.promisify(wI.exec),KQ=wI.spawn,_e=Be(),Te=A(),Hl=V(),yr=x(),ql=xs(),WQ=Dl(),Ya=Tr(),{Encoder:QQ,decode:lm}=require("msgpackr"),CI=new QQ,{isEmpty:ci}=Hl,UI=br(),DI=12e10,zQ=48*36e11,JQ=5e9,{connect:XQ,StorageType:LI,RetentionPolicy:MI,AckPolicy:Fl,DeliverPolicy:Gl,DiscardPolicy:ZQ,NatsConnection:uae,JetStreamManager:lae,JetStreamClient:_ae,StringCodec:dae,JSONCodec:jQ,createInbox:_m,headers:ez,ErrorCode:II}=require("nats"),{PACKAGE_ROOT:tz}=A(),rz=Va(),{recordAction:sz}=(ai(),re(Bl)),PI=jQ(),nz="clustering",iz=rz.engines[_e.NATS_SERVER_NAME],oz=Qa.join(tz,"dependencies"),cm=Qa.join(oz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),om,am,Ka,ro,so;YI.exports={runCommand:vI,checkNATSServerInstalled:az,createConnection:dm,getConnection:xl,getJetStreamManager:za,getJetStream:BI,getNATSReferences:Gt,getServerList:uz,createLocalStream:Em,listStreams:HI,deleteLocalStream:lz,getServerConfig:Ja,listRemoteStreams:_z,viewStream:dz,viewStreamIterator:Ez,publishToStream:fz,createWorkQueueStream:hz,addSourceToWorkStream:FI,request:Sz,removeSourceFromWorkStream:xI,reloadNATS:fm,reloadNATSHub:pz,reloadNATSLeaf:Tz,extractServerName:GI,requestErrorHandler:Rz,updateWorkStream:gz,createLocalTableStream:VI,createTableStreams:Az,purgeTableStream:$I,purgeSchemaTableStreams:Oz,getStreamInfo:Nz,updateLocalStreams:yz,closeConnection:cz,getJsmServerName:Xa,addNatsMsgHeader:qI,updateIngestStreamConsumer:mz};async function vI(e,t=void 0){let{stdout:r,stderr:s}=await YQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(LI,"runCommand");async function rz(){try{await BQ.access(im)}catch{return!1}let e=await LI(`${im} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return HQ.eq(t,ez)}a(rz,"checkNATSServerInstalled");async function um(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await II.getClusterUser();if(ai(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Nr.trace("create nats connection called");let i=await KQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Nr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(um,"createConnection");async function sz(){ls&&(await ls.drain(),ls=void 0,to=void 0,ro=void 0,Ya=void 0)}a(sz,"closeConnection");var ls,Ya;async function ql(){return Ya||(Ya=um(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ls=await Ya),ls||Ya}a(ql,"getConnection");async function Wa(){if(to)return to;ai(ls)&&await ql();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await ls.jetstreamManager({domain:e}),to}a(Wa,"getJetStreamManager");async function MI(){if(ro)return ro;ai(ls)&&await ql();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=ls.jetstream({domain:e}),ro}a(MI,"getJetStream");async function Gt(){let e=ls||await ql(),t=to||await Wa(),r=ro||await MI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function nz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await II.getClusterUser(),n=await um(t,r,s),i=cm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=DI.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 Pl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(nz,"getServerList");async function lm(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:CI.File,retention:UI.Limits,subjects:t,discard:WQ.Old,duplicate_window:wI,max_msgs:n,max_bytes:i,max_age:s})}a(lm,"createLocalStream");async function PI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(PI,"listStreams");async function iz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(iz,"deleteLocalStream");async function oz(e){let{connection:t}=await Gt(),r=[],s=cm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(DI.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(oz,"listRemoteStreams");async function az(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=om(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.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=am(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(az,"viewStream");async function*cz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=om(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.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 _=am(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(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(cz,"viewStreamIterator");async function uz(e,t,r,s){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=vI(s,r);let{js:n}=await Gt(),i=await za(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:yI.encode(s);try{Nr.trace(`publishToStream publishing to subject: ${o}`),ZQ(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 FI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Nr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await lm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(uz,"publishToStream");function vI(e,t){t===void 0&&(t=zQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Pl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${om()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(vI,"addNatsMsgHeader");function Qa(e){e=e.toLowerCase();let t=Ka.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),jQ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(nm)&&(nm={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ka.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),nm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(sm)&&(sm={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Ka.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),sm;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qa,"getServerConfig");async function lz(e){let{jsm:t}=await Gt(),r=await za();try{await t.streams.add({name:e.stream_name,storage:CI.File,retention:UI.Limits,duplicate_window:wI,max_age:$Q,max_bytes:YQ,subjects:[`${_e.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:Bl.Explicit,durable_name:e.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4});else throw s}}a(lz,"createWorkQueueStream");async function _z(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Nr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),Nr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Bl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4}))}a(_z,"updateIngestStreamConsumer");async function BI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=HI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=vl.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 T=0,S=n.config.sources.length;T<S;T++)if(d=n.config.sources[T],E=T,_&&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:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(BI,"addSourceToWorkStream");function HI(e){return e.split(".")[1]}a(HI,"extractServerName");async function qI(e,t,r){let{schema:s,table:n}=r,i=vl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),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(qI,"removeSourceFromWorkStream");async function dz(e,t,r=2e4,s=cm()){if(!Pl.isObject(t))throw new Error("data param must be an object");let n=yI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return am(c.data)}a(dz,"request");function _m(e){return new Promise(async(t,r)=>{let s=xQ(im,["--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(_m,"reloadNATS");async function Ez(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await _m(e)}a(Ez,"reloadNATSHub");async function fz(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await _m(e)}a(fz,"reloadNATSLeaf");function hz(e,t,r){let s;switch(e.code){case NI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case NI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(hz,"requestErrorHandler");async function mz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await FI(async()=>{e.subscribe===!0?await BI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await qI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(mz,"updateWorkStream");function FI(e){return kQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(FI,"exclusiveLock");async function GI(e,t){let r=vl.createNatsTableStreamName(e,t),s=await za(),n=Rz(e,t,s);await lm(r,[n])}a(GI,"createLocalTableStream");async function Sz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await GI(s,n)}}a(Sz,"createTableStreams");async function xI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=vl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(xI,"purgeTableStream");async function pz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await xI(e,t[r])}a(pz,"purgeSchemaTableStreams");async function Tz(e){return(await Wa()).streams.info(e)}a(Tz,"getStreamInfo");function Rz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Rz,"createSubjectName");async function za(){if($a)return $a;if($a=(await Wa())?.nc?.info?.server_name,$a===void 0)throw new Error("Unable to get jetstream manager server name");return $a}a(za,"getJsmServerName");async function gz(){let e=await Wa(),t=await za(),r=await PI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Az(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.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(".");Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(gz,"updateLocalStreams");function Az(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.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(Az,"updateStreamLimits")});var kl=m((lae,KI)=>{"use strict";var so=Ku(),no=cI(),Oz=F(),Nz=require("uuid").v4,uae=require("clone"),Gl=xs(),io=g(),bz=require("util"),Rn=qr(),{handleHDBError:xt,hdb_errors:yz}=W(),{HDB_ERROR_MSGS:Fl,HTTP_STATUS_CODES:kt}=yz,{SchemaEventMsg:xl}=Fr(),VI=rt(),{getDatabases:Iz}=(de(),re(Ne)),{transformReq:oo}=x();KI.exports={createSchema:wz,createSchemaStructure:$I,createTable:Cz,createTableStructure:YI,createAttribute:Pz,dropSchema:Uz,dropTable:Dz,dropAttribute:Lz,getBackup:vz};async function wz(e){let t=await $I(e);return Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),t}a(wz,"createSchema");async function $I(e){let t=so.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(oo(e),!await no.checkSchemaExists(e.schema))throw xt(new Error,Fl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,Fl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a($I,"createSchemaStructure");async function Cz(e){return oo(e),await YI(e)}a(Cz,"createTable");async function YI(e){let t=so.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(so.validateTableResidence(e.residence),!await no.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,Fl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,Fl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Nz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Rn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Rn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(YI,"createTableStructure");async function Uz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=so.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let n=await no.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,n,!0);let i=await no.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Rn.dropSchema(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),await VI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Uz,"dropSchema");async function Dz(e){let t=so.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);return await Rn.dropTable(e),await VI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Dz,"dropTable");async function Lz(e){let t=so.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(io.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Rn.dropAttribute(e),Mz(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Oz.error(`Got an error deleting attribute ${bz.inspect(e)}.`),s}}a(Lz,"dropAttribute");function Mz(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(Mz,"dropAttributeFromGlobal");async function Pz(e){oo(e);let t=Iz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Rn.createAttribute(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Pz,"createAttribute");function vz(e){return Rn.getBackup(e)}a(vz,"getBackup")});var QI=m((dae,WI)=>{"use strict";var{OPERATIONS_ENUM:Bz}=g(),dm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Bz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};WI.exports=dm});var Em=m((hae,jI)=>{"use strict";var Hz=qr(),fae=QI(),Vl=x(),$l=g(),qz=Q(),{handleHDBError:zI,hdb_errors:Fz}=W(),{HDB_ERROR_MSGS:JI,HTTP_STATUS_CODES:XI}=Fz,Gz=Object.values($l.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ZI="To use this operation audit log must be enabled in harperdb-config.yaml";jI.exports=xz;async function xz(e){if(Vl.isEmpty(e.schema))throw new Error(JI.SCHEMA_REQUIRED_ERR);if(Vl.isEmpty(e.table))throw new Error(JI.TABLE_REQUIRED_ERR);if(!qz.get($l.CONFIG_PARAMS.LOGGING_AUDITLOG))throw zI(new Error,ZI,XI.BAD_REQUEST,$l.LOG_LEVELS.ERROR,ZI,!0);let t=Vl.checkSchemaTableExist(e.schema,e.table);if(t)throw zI(new Error,t,XI.NOT_FOUND,$l.LOG_LEVELS.ERROR,t,!0);if(!Vl.isEmpty(e.search_type)&&Gz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Hz.readAuditLog(e)}a(xz,"readAuditLog")});var tw=m((Sae,ew)=>{"use strict";var{OPERATIONS_ENUM:kz}=g(),fm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=kz.GET_BACKUP,this.schema=t,this.table=r}};ew.exports=fm});var nw=m((gae,sw)=>{"use strict";var Vz=qr(),Tae=tw(),hm=x(),$z=g(),Rae=Q(),{handleHDBError:Yz,hdb_errors:Kz}=W(),{HDB_ERROR_MSGS:rw,HTTP_STATUS_CODES:Wz}=Kz;sw.exports=Qz;async function Qz(e){if(hm.isEmpty(e.schema))throw new Error(rw.SCHEMA_REQUIRED_ERR);if(hm.isEmpty(e.table))throw new Error(rw.TABLE_REQUIRED_ERR);let t=hm.checkSchemaTableExist(e.schema,e.table);if(t)throw Yz(new Error,t,Wz.NOT_FOUND,$z.LOG_LEVELS.ERROR,t,!0);return await Vz.getBackup(read_audit_log_object)}a(Qz,"getBackup")});var lw=m((Oae,uw)=>{var gn=require("validate.js"),ow=Pe(),ao=g(),{handleHDBError:zz,hdb_errors:Jz}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:Xz}=Jz,mm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Zz={STRUCTURE_USER:"structure_user"},iw=Object.values(ao.ROLE_TYPES_ENUM),jz="attribute_permissions",eJ="attribute_name",{PERMS_CRUD_ENUM:co}=ao,tJ=[jz,...Object.values(co)],aw=[co.READ,co.INSERT,co.UPDATE],rJ=[eJ,...aw];function sJ(e){let t=mm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,cw(e,t)}a(sJ,"addRoleValidation");function nJ(e){let t=mm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,cw(e,t)}a(nJ,"alterRoleValidation");function iJ(e){let t=mm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,ow.validateObject(e,t)}a(iJ,"dropRoleValidation");var oJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function cw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)oJ.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=ow.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=aJ(e);o&&Qe(o,r),iw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(iw.indexOf(o)<0){if(o===Zz.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]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.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]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{tJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(co).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.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(T=>{!rJ.includes(T)&&T!==co.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!gn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}aw.forEach(T=>{gn.isDefined(f[T])?gn.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(T,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}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return cJ(r)}a(cw,"customValidate");uw.exports={addRoleValidation:sJ,alterRoleValidation:nJ,dropRoleValidation:iJ};function aJ(e){let{operation:t,permission:r}=e;if(t===ao.OPERATIONS_ENUM.ADD_ROLE||t===ao.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 Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ao.ROLE_TYPES_ENUM.SUPER_USER:ao.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(aJ,"validateNoSUPerms");function cJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return zz(new Error,s,Xz.BAD_REQUEST)}else return null}a(cJ,"generateRolePermResponse");function Qe(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(Qe,"addPermError")});var Am=m((bae,fw)=>{"use strict";var _w=Ar(),dw=gr(),uJ=jn(),pm=lw(),Tm=xs(),lJ=require("uuid").v4,_J=require("util"),Yl=g(),dJ=x(),Rm=dw.searchByValue,EJ=dw.searchByHash,fJ=_J.promisify(uJ.delete),hJ=os(),mJ=Xi(),{hdb_errors:SJ,handleHDBError:uo}=W(),{HDB_ERROR_MSGS:Ew,HTTP_STATUS_CODES:Kl}=SJ,{UserEventMsg:gm}=Fr();fw.exports={addRole:pJ,alterRole:TJ,dropRole:RJ,listRoles:gJ};function Sm(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(Sm,"scrubRoleDetails");async function pJ(e){let t=pm.addRoleValidation(e);if(t)throw t;e=Sm(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 Rm(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,Ew.ROLE_ALREADY_EXISTS(e.role),Kl.CONFLICT,void 0,void 0,!0);e.id||(e.id=lJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await _w.insert(n),Tm.signalUserChange(new gm(process.pid)),e=Sm(e),e}a(pJ,"addRole");async function TJ(e){let t=pm.alterRoleValidation(e);if(t)throw t;e=Sm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await _w.update(r)}catch(n){throw uo(n)}if(s&&s?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",Kl.BAD_REQUEST,void 0,void 0,!0);return await Tm.signalUserChange(new gm(process.pid)),e}a(TJ,"alterRole");async function RJ(e){let t=pm.dropRoleValidation(e);if(t)throw uo(new Error,t,Kl.BAD_REQUEST,void 0,void 0,!0);let r=new mJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await EJ(r));if(s.length===0)throw uo(new Error,Ew.ROLE_NOT_FOUND,Kl.NOT_FOUND,void 0,void 0,!0);let n=new hJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Rm(n)),o=!1;if(dJ.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 fJ(c),Tm.signalUserChange(new gm(process.pid)),`${s[0].role} successfully deleted`}a(RJ,"dropRole");async function gJ(){return Rm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(gJ,"listRoles")});var pw=m((Iae,Sw)=>{"use strict";var AJ=Q(),An=require("joi"),OJ=Pe(),hw=require("moment"),NJ=require("fs-extra"),Om=require("path"),bJ=require("lodash"),Ja=g(),{LOG_LEVELS:ci}=g(),yJ="YYYY-MM-DD hh:mm:ss",IJ=Om.resolve(__dirname,"../logs");Sw.exports=function(e){return OJ.validateBySchema(e,wJ)};var wJ=An.object({from:An.custom(mw),until:An.custom(mw),level:An.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:An.valid("asc","desc"),limit:An.number().min(1),start:An.number().min(0),log_name:An.custom(CJ)});function mw(e,t){if(hw(e,hw.ISO_8601).format(yJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(mw,"validateDatetime");function CJ(e,t){if(bJ.invert(Ja.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=AJ.get(Ja.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Ja.LOG_NAMES.HDB:e,i=n===Ja.LOG_NAMES.INSTALL?Om.join(IJ,Ja.LOG_NAMES.INSTALL):Om.join(s,n);return NJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(CJ,"validateReadLogPath")});var bm=m((Cae,Tw)=>{"use strict";var Wl=g(),UJ=F(),DJ=Q(),LJ=pw(),Nm=require("path"),MJ=require("fs-extra"),{once:PJ}=require("events"),{handleHDBError:vJ,hdb_errors:BJ}=W(),{PACKAGE_ROOT:HJ}=g(),qJ=Nm.join(HJ,"logs"),FJ=1e3;Tw.exports=GJ;async function GJ(e){let t=LJ(e);if(t)throw vJ(t,t.message,BJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=DJ.get(Wl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Wl.LOG_NAMES.HDB:e.log_name,n=s===Wl.LOG_NAMES.INSTALL?Nm.join(qJ,Wl.LOG_NAMES.INSTALL):Nm.join(r,s),i=MJ.createReadStream(n);i.on("error",A=>{UJ.error(A)});let o=e.level!==void 0,c=o?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,_=e.until!==void 0,d=_?new Date(e.until):void 0,E=e.limit===void 0?FJ:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,T=h+E,S=0,y=[],O="",H;i.on("data",A=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;A=O+A;let G=0,k;for(;(k=w.exec(A))&&!i.destroyed;){H&&(H.message=A.slice(G,k.index),Y(H));let[X,ge,ct]=k,Li=ct.split("] ["),ko=Li[0],qn=Li[1];Li.splice(0,2),H={timestamp:ge,thread:ko,level:qn,tags:Li,message:""},G=k.index+X.length}O=A.slice(G)}),i.on("end",A=>{i.destroyed||H&&(H.message=O.trim(),Y(H))}),i.resume();function Y(A){let w,G,k;switch(!0){case(o&&u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),A.level===c&&w>=G&&w<=k&&S<h?S++:A.level===c&&w>=G&&w<=k&&(On(A,f,y),S++,S===T&&i.destroy());break;case(o&&u):w=new Date(A.timestamp),G=new Date(l),A.level===c&&w>=G&&S<h?S++:A.level===c&&w>=G&&(On(A,f,y),S++,S===T&&i.destroy());break;case(o&&_):w=new Date(A.timestamp),k=new Date(d),A.level===c&&w<=k&&S<h?S++:A.level===c&&w<=k&&(On(A,f,y),S++,S===T&&i.destroy());break;case(u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),w>=G&&w<=k&&S<h?S++:w>=G&&w<=k&&(On(A,f,y),S++,S===T&&i.destroy());break;case o:A.level===c&&S<h?S++:A.level===c&&(On(A,f,y),S++,S===T&&i.destroy());break;case u:w=new Date(A.timestamp),G=new Date(l),w>=G&&S<h?S++:w>=G&&S>=h&&(On(A,f,y),S++,S===T&&i.destroy());break;case _:w=new Date(A.timestamp),k=new Date(d),w<=k&&S<h?S++:w<=k&&S>=h&&(On(A,f,y),S++,S===T&&i.destroy());break;default:S<h?S++:(On(A,f,y),S++,S===T&&i.destroy())}}return a(Y,"onLogMessage"),await PJ(i,"close"),y}a(GJ,"readLog");function On(e,t,r){t==="desc"?xJ(e,r):t==="asc"?kJ(e,r):r.push(e)}a(On,"pushLineToResult");function xJ(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(xJ,"insertDescending");function kJ(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(kJ,"insertAscending")});var zl=m((Pae,Ow)=>{"use strict";var ym=require("joi"),{string:Ql,boolean:Rw,date:VJ}=ym.types(),$J=Pe(),{validateSchemaExists:Dae,validateTableExists:Lae,validateSchemaName:Mae}=rs(),YJ=g(),KJ=Be(),gw=Q();gw.initSync();var WJ=Ql.invalid(gw.get(YJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(KJ.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(),Aw={operation:Ql.valid("add_node","update_node"),node_name:WJ,subscriptions:ym.array().items({table:Ql.optional(),schema:Ql.required(),subscribe:Rw.required(),publish:Rw.required().custom(zJ),start_time:VJ.iso()}).min(1).required()};function QJ(e){return $J.validateBySchema(e,ym.object(Aw))}a(QJ,"addUpdateNodeValidator");function zJ(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(zJ,"checkForFalsy");Ow.exports={addUpdateNodeValidator:QJ,validation_schema:Aw}});var bw=m((Bae,Nw)=>{var JJ=Pe(),XJ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Nw.exports=function(e){return JJ.validateObject(e,XJ)}});var wm=m((Hae,yw)=>{"use strict";var ZJ=g().OPERATIONS_ENUM,Im=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=ZJ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};yw.exports=Im});var ww=m((Fae,Iw)=>{"use strict";var jJ={OPERATION:"operation",REFRESH:"refresh"},Cm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Um=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Iw.exports={JWTTokens:Cm,TOKEN_TYPE_ENUM:jJ,JWTRSAKeys:Um}});var ja=m((xae,Lw)=>{"use strict";var Za=require("jsonwebtoken"),Dm=require("fs-extra"),Lm=x(),br=g(),{handleHDBError:Vt,hdb_errors:e2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=e2,Xa=F(),Cw=il(),vm=Or(),t2=Ar().update,r2=wm(),s2=xs(),{UserEventMsg:n2}=Fr(),Nn=Q();Nn.initSync();var Mm=require("path"),{JWTTokens:i2,JWTRSAKeys:o2,TOKEN_TYPE_ENUM:Jl}=ww(),a2=Nn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",c2=Nn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Xl="RS256",Pm;Lw.exports={createTokens:u2,validateOperationToken:_2,refreshOperationToken:l2,validateRefreshToken:Dw};async function u2(e){if(Lm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Lm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Lm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await vm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Xa.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await Zl(),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 Uw(i,r.private_key,r.passphrase),c=await Za.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:c2,algorithm:Xl,subject:Jl.REFRESH}),u=Cw.hash(c),l=new r2(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await t2(l)}catch(E){Xa.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return s2.signalUserChange(new n2(process.pid)),new i2(o,c)}a(u2,"createTokens");async function Uw(e,t,r){return await Za.sign(e,{key:t,passphrase:r},{expiresIn:a2,algorithm:Xl,subject:Jl.OPERATION})}a(Uw,"signOperationToken");async function Zl(){if(Pm===void 0)try{let e=Mm.join(Nn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Mm.join(Nn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Mm.join(Nn.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Dm.readFile(e)).toString(),n=(await Dm.readFile(t)).toString(),i=(await Dm.readFile(r)).toString();Pm=new o2(i,n,s)}catch(e){throw Xa.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Pm}a(Zl,"getJWTRSAKeys");async function l2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Dw(e.refresh_token);let t=await Zl(),r=await Za.decode(e.refresh_token);return{operation_token:await Uw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(l2,"refreshOperationToken");async function _2(e){try{let t=await Zl(),r=await Za.verify(e,t.public_key,{algorithms:Xl,subject:Jl.OPERATION});return await vm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xa.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(_2,"validateOperationToken");async function Dw(e){let t;try{let r=await Zl(),s=await Za.verify(e,r.public_key,{algorithms:Xl,subject:Jl.REFRESH});t=await vm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Xa.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Cw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Dw,"validateRefreshToken")});var Bm=m(($ae,vw)=>{"use strict";var d2=bw(),lo=require("passport"),E2=require("passport-local").Strategy,f2=require("passport-http").BasicStrategy,h2=require("util"),m2=Or(),Pw=h2.callbackify(m2.findAndValidateUser),Vae=rr(),S2=g(),Mw=ja();lo.use(new E2(function(e,t,r){Pw(e,t,r)}));lo.use(new f2(function(e,t,r){Pw(e,t,r)}));lo.serializeUser(function(e,t){t(null,e)});lo.deserializeUser(function(e,t){t(null,e)});function p2(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":lo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===S2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Mw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Mw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:lo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(p2,"authorize");function T2(e,t){let r=d2(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(T2,"checkPermissions");vw.exports={authorize:p2,checkPermissions:T2}});var _o=m((Kae,Bw)=>{"use strict";var Hm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},qm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Bw.exports={Node:Hm,NodeSubscription:qm}});var qw=m((Qae,Hw)=>{"use strict";var R2=g().OPERATIONS_ENUM,Fm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=R2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Hw.exports=Fm});var ec=m((Jae,Fw)=>{"use strict";var Gm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},xm=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,this.attributes=c}};Fw.exports={RemotePayloadObject:Gm,RemotePayloadSubscription:xm}});var xw=m((Zae,Gw)=>{"use strict";var km=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}};Gw.exports=km});var $w=m((sce,Vw)=>{"use strict";var g2=xw(),ece=xe(),kw=ye(),A2=F(),{getSchemaPath:tce,getTransactionAuditStorePath:rce}=we(),{getDatabases:O2}=(de(),re(Ne));Vw.exports=N2;async function N2(e){let t=new g2;try{let r=O2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await kw.environmentDataSize(schema_path,e.name),o=await kw.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){A2.warn(`unable to stat table dbi due to ${r}`)}return t}a(N2,"lmdbGetTableSize")});var Kw=m((ice,Yw)=>{"use strict";var Vm=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}};Yw.exports=Vm});var Eo=m((uce,Jw)=>{"use strict";var b2=require("fs-extra"),y2=require("path"),Ut=require("systeminformation"),bn=F(),I2=rt(),$m=Be(),e_=g(),w2=$w(),zw=Qn(),{getThreadInfo:Ww}=_t(),eS=Q();eS.initSync();var C2=Kw(),{openEnvironment:ace}=ye(),{getSchemaPath:cce}=we(),{database:U2}=(de(),re(Ne)),jl;Jw.exports={getHDBProcessInfo:Qm,getNetworkInfo:Jm,getDiskInfo:zm,getMemoryInfo:Wm,getCPUInfo:Km,getTimeInfo:Ym,getSystemInformation:Xm,systemInformation:D2,getTableSize:Zm,getMetrics:jm};function Ym(){return Ut.time()}a(Ym,"getTimeInfo");async function Km(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:S,cpus:y,...O}=await Ut.currentLoad();return O.cpus=[],y.forEach(H=>{let{raw_load:Y,raw_load_idle:A,raw_load_irq:w,raw_load_nice:G,raw_load_system:k,raw_load_user:X,...ge}=H;O.cpus.push(ge)}),_.current_load=O,_}catch(e){return bn.error(`error in getCPUInfo: ${e}`),{}}}a(Km,"getCPUInfo");async function Wm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return bn.error(`error in getMemoryInfo: ${e}`),{}}}a(Wm,"getMemoryInfo");async function Qm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await b2.readFile(y2.join(eS.get(e_.CONFIG_PARAMS.ROOTPATH),e_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===e_.NODE_ERROR_CODES.ENOENT)bn.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 bn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Qm,"getHDBProcessInfo");async function zm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return bn.error(`error in getDiskInfo: ${t}`),e}}a(zm,"getDiskInfo");async function Jm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.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 Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return bn.error(`error in getNetworkInfo: ${t}`),e}}a(Jm,"getNetworkInfo");async function Xm(){if(jl!==void 0)return jl;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,jl=e,jl}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(Xm,"getSystemInformation");async function Zm(){let e=[],t=await zw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await w2(s));return e}a(Zm,"getTableSize");async function jm(){let e=await zw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=U2({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){bn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(jm,"getMetrics");async function Qw(){if(eS.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await I2.getNATSReferences(),r=await t.streams.info($m.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get($m.WORK_QUEUE_CONSUMER_NAMES.stream_name,$m.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(Qw,"getNatsStreamInfo");async function D2(e){let t=new C2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Xm(),t.time=Ym(),t.cpu=await Km(),t.memory=await Wm(),t.disk=await zm(),t.network=await Jm(),t.harperdb_processes=await Qm(),t.table_size=await Zm(),t.metrics=await jm(),t.threads=await Ww(),t.replication=await Qw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Xm();break;case"time":t.time=Ym();break;case"cpu":t.cpu=await Km();break;case"memory":t.memory=await Wm();break;case"disk":t.disk=await zm();break;case"network":t.network=await Jm();break;case"harperdb_processes":t.harperdb_processes=await Qm();break;case"table_size":t.table_size=await Zm();break;case"database_metrics":case"metrics":t.metrics=await jm();break;case"threads":t.threads=await Ww();break;case"replication":t.replication=await Qw();break;default:break}return t}a(D2,"systemInformation")});var tS=m((Ece,Xw)=>{"use strict";var _ce=require("fs-extra"),dce=F();Xw.exports={version:L2,printVersion:P2,nodeVersion:M2};var yn=xa();function L2(){if(yn)return yn.version}a(L2,"version");function M2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(M2,"nodeVersion");function P2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(P2,"printVersion")});var _s=m((Sce,tC)=>{"use strict";var v2=Ar(),rS=x(),B2=require("util"),ui=g(),Zw=Q();Zw.initSync();var H2=Bm(),jw=gr(),{Node:hce,NodeSubscription:mce}=_o(),q2=Xi(),F2=qw(),{RemotePayloadObject:G2,RemotePayloadSubscription:x2}=ec(),{handleHDBError:k2,hdb_errors:V2}=W(),{HTTP_STATUS_CODES:$2,HDB_ERROR_MSGS:Y2}=V2,K2=os(),W2=Eo(),Q2=tS(),{getDatabases:z2}=(de(),re(Ne)),J2=B2.promisify(H2.authorize),X2=jw.searchByHash,Z2=jw.searchByValue;tC.exports={authHeaderToUser:j2,isEmpty:e3,getNodeRecord:t3,upsertNodeRecord:r3,buildNodePayloads:s3,checkClusteringEnabled:n3,getAllNodeRecords:i3,getSystemInfo:o3,reverseSubscription:eC};async function j2(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await J2(t,null),e}a(j2,"authHeaderToUser");function e3(e){return e==null}a(e3,"isEmpty");async function t3(e){let t=new q2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return X2(t)}a(t3,"getNodeRecord");async function r3(e){let t=new F2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return v2.upsert(t)}a(r3,"upsertNodeRecord");function eC(e){if(rS.isEmpty(e.subscribe)||rS.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(eC,"reverseSubscription");function s3(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,_=rS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=eC(c),f=z2()[u]?.[l],h=new x2(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new G2(r,t,n,s)}a(s3,"buildNodePayloads");function n3(){if(!Zw.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw k2(new Error,Y2.CLUSTERING_NOT_ENABLED,$2.BAD_REQUEST,void 0,void 0,!0)}a(n3,"checkClusteringEnabled");async function i3(){let e=new K2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await Z2(e))}a(i3,"getAllNodeRecords");async function o3(){let e=await W2.getSystemInformation();return{hdb_version:Q2.version(),node_version:e.node_version,platform:e.platform}}a(o3,"getSystemInfo")});var sS=m((Tce,uC)=>{"use strict";var t_=rt(),rC=x(),sC=Be(),nC=g(),r_=F(),iC=kl(),a3=gh(),{RemotePayloadObject:c3}=ec(),{handleHDBError:oC,hdb_errors:u3}=W(),{HTTP_STATUS_CODES:aC}=u3,{NodeSubscription:cC}=_o();uC.exports=l3;async function l3(e,t){let r;try{r=await t_.request(`${t}.${sC.REQUEST_SUFFIX}`,new c3(nC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),r_.trace("Response from remote describe all request:",r)}catch(o){r_.error(`addNode received error from describe all request to remote node: ${o}`);let c=t_.requestErrorHandler(o,"add_node",t);throw oC(new Error,c,aC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===sC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw oC(new Error,o,aC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===nC.SYSTEM_SCHEMA_NAME){await t_.createLocalTableStream(c,u);let h=new cC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=rC.doesSchemaExist(c),_=s[c]!==void 0,d=u?rC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(r_.trace(`addNode creating schema: ${c}`),await iC.createSchema({operation:"create_schema",schema:c})),!d&&E){r_.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new a3(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await iC.createTable(h)}await t_.createLocalTableStream(c,u);let f=new cC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(l3,"reviewSubscriptions")});var sc=m((gce,dC)=>{"use strict";var{handleHDBError:s_,hdb_errors:_3}=W(),{HTTP_STATUS_CODES:n_}=_3,{addUpdateNodeValidator:d3}=zl(),tc=F(),_C=g(),lC=Be(),E3=x(),nS=rt(),rc=_s(),f3=Q(),h3=sS(),{Node:m3,NodeSubscription:S3}=_o(),{broadcast:p3}=_t(),T3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",R3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",g3=f3.get(_C.CONFIG_PARAMS.CLUSTERING_NODENAME);dC.exports=A3;async function A3(e,t=!1){tc.trace("addNode called with:",e),rc.checkClusteringEnabled();let r=d3(e);if(r)throw s_(r,r.message,n_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await rc.getNodeRecord(s);if(!E3.isEmptyOrZeroLength(d))throw s_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,n_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await h3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=T3,o;let c=rc.buildNodePayloads(n,g3,_C.OPERATIONS_ENUM.ADD_NODE,await rc.getSystemInfo());tc.trace("addNode sending remote payload:",c);let u;try{u=await nS.request(`${s}.${lC.REQUEST_SUFFIX}`,c)}catch(d){tc.error(`addNode received error from request: ${d}`);let E=nS.requestErrorHandler(d,"add_node",s);throw s_(new Error,E,n_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===lC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw s_(new Error,d,n_.INTERNAL_SERVER_ERROR,"error",d)}tc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];tc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await nS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new S3(f.schema,f.table,f.publish,f.subscribe))}let _=new m3(s,l,u.system_info);return await rc.upsertNodeRecord(_),p3({type:"nats_update"}),i.length>0?o.message=R3:o.message=`Successfully added '${s}' to manifest`,o}a(A3,"addNode")});var oS=m((Oce,hC)=>{"use strict";var{handleHDBError:i_,hdb_errors:O3}=W(),{HTTP_STATUS_CODES:o_}=O3,{addUpdateNodeValidator:N3}=zl(),nc=F(),fC=g(),EC=Be(),b3=x(),iS=rt(),ic=_s(),y3=Q(),{cloneDeep:I3}=require("lodash"),w3=sS(),{NodeSubscription:C3}=_o(),{broadcast:U3}=_t(),D3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",L3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",M3=y3.get(fC.CONFIG_PARAMS.CLUSTERING_NODENAME);hC.exports=P3;async function P3(e){nc.trace("updateNode called with:",e),ic.checkClusteringEnabled();let t=N3(e);if(t)throw i_(t,t.message,o_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=I3(await ic.getNodeRecord(r));if(b3.isEmptyOrZeroLength(s))throw i_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await w3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=D3,o;let c=ic.buildNodePayloads(n,M3,fC.OPERATIONS_ENUM.UPDATE_NODE,await ic.getSystemInfo());nc.trace("updateNode sending remote payload:",c);let u;try{u=await iS.request(`${r}.${EC.REQUEST_SUFFIX}`,c)}catch(l){nc.error(`updateNode received error from request: ${l}`);let _=iS.requestErrorHandler(l,"update_node",r);throw i_(new Error,_,o_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===EC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw i_(new Error,l,o_.INTERNAL_SERVER_ERROR,"error",l)}nc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];nc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await iS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await v3(s[0],n,u.system_info),i.length>0?o.message=L3:o.message=`Successfully updated '${r}'`,o}a(P3,"updateNode");async function v3(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 C3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ic.upsertNodeRecord(s),U3({type:"nats_update"})}a(v3,"updateNodeTable")});var RC=m((bce,TC)=>{"use strict";var pC=require("joi"),{string:mC}=pC.types(),B3=Pe(),SC=g(),H3=Q(),q3=Be();TC.exports=F3;function F3(e){let t=mC.invalid(H3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(q3.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=pC.object({operation:mC.valid(SC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return B3.validateBySchema(e,r)}a(F3,"removeNodeValidator")});var ac=m((Ice,yC)=>{"use strict";var{handleHDBError:gC,hdb_errors:G3}=W(),{HTTP_STATUS_CODES:AC}=G3,x3=RC(),oc=F(),OC=_s(),k3=x(),a_=g(),NC=Be(),bC=rt(),V3=Q(),{RemotePayloadObject:$3}=ec(),{NodeSubscription:Y3}=_o(),K3=Ma(),W3=jn(),{broadcast:Q3}=_t(),z3=V3.get(a_.CONFIG_PARAMS.CLUSTERING_NODENAME);yC.exports=J3;async function J3(e){oc.trace("removeNode called with:",e),OC.checkClusteringEnabled();let t=x3(e);if(t)throw gC(t,t.message,AC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await OC.getNodeRecord(r);if(k3.isEmptyOrZeroLength(s))throw gC(new Error,`Node '${r}' was not found.`,AC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new $3(a_.OPERATIONS_ENUM.REMOVE_NODE,z3,[]),i,o=!1;try{i=await bC.request(`${r}.${NC.REQUEST_SUFFIX}`,n),oc.trace("Remove node reply from remote node:",r,i)}catch(u){oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Y3(_.schema,_.table,!1,!1);await bC.updateWorkStream(d,r)}let c=new K3(a_.SYSTEM_SCHEMA_NAME,a_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await W3.deleteRecord(c),Q3({type:"nats_update"}),i?.status===NC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(oc.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(J3,"removeNode")});var CC=m((Cce,wC)=>{"use strict";var IC=require("joi"),{string:X3,array:Z3}=IC.types(),j3=Pe(),e4=zl();wC.exports=t4;function t4(e){let t=IC.object({operation:X3.valid("configure_cluster").required(),connections:Z3.items(e4.validation_schema).required()});return j3.validateBySchema(e,t)}a(t4,"configureClusterValidator")});var aS=m((Dce,PC)=>{"use strict";var r4=g(),c_=F(),s4=x(),n4=ac(),i4=sc(),UC=_s(),o4=CC(),{handleHDBError:DC,hdb_errors:a4}=W(),{HTTP_STATUS_CODES:LC}=a4,c4="Configure cluster complete.",u4="Failed to configure the cluster. Check the logs for more details.",l4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";PC.exports=_4;async function _4(e){c_.trace("configure cluster called with:",e),UC.checkClusteringEnabled();let t=o4(e);if(t)throw DC(t,t.message,LC.BAD_REQUEST,void 0,void 0,!0);let r=await UC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(MC(n4,{operation:r4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);c_.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(MC(i4,f,f.node_name))}let c=await Promise.allSettled(i);c_.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"&&(c_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(s4.isEmptyOrZeroLength(u))return{message:c4,connections:l};if(_)return{message:l4,failed_nodes:u,connections:l};throw DC(new Error,u4,LC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(_4,"configureCluster");async function MC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(MC,"functionWrapper")});var BC=m((Mce,vC)=>{"use strict";var u_=require("joi"),d4=Pe(),{validateSchemaExists:E4,validateTableExists:f4,validateSchemaName:h4}=rs(),m4=u_.object({operation:u_.string().valid("purge_stream"),schema:u_.string().custom(E4).custom(h4).required(),table:u_.string().custom(f4).required()});function S4(e){return d4.validateBySchema(e,m4)}a(S4,"purgeStreamValidator");vC.exports=S4});var cS=m((vce,HC)=>{"use strict";var{handleHDBError:p4,hdb_errors:T4}=W(),{HTTP_STATUS_CODES:R4}=T4,g4=BC(),A4=rt(),O4=_s();HC.exports=N4;async function N4(e){let t=g4(e);if(t)throw p4(t,t.message,R4.BAD_REQUEST,void 0,void 0,!0);O4.checkClusteringEnabled();let{schema:r,table:s}=e;return await A4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(N4,"purgeStream")});var __=m((Hce,VC)=>{"use strict";var lS=_s(),b4=rt(),GC=Q(),l_=g(),li=Be(),y4=x(),uS=F(),{RemotePayloadObject:I4}=ec(),{ErrorCode:qC}=require("nats"),FC=GC.get(l_.CONFIG_PARAMS.CLUSTERING_ENABLED),xC=GC.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);VC.exports={clusterStatus:w4,buildNodeStatus:kC};async function w4(){let e={node_name:xC,is_enabled:FC,connections:[]};if(!FC)return e;let t=await lS.getAllNodeRecords();if(y4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(kC(t[s],e.connections));return await Promise.allSettled(r),e}a(w4,"clusterStatus");async function kC(e,t){let r=e.name,s=new I4(l_.OPERATIONS_ENUM.CLUSTER_STATUS,xC,void 0,await lS.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await b4.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,uS.error(`Error getting node status from ${r} `,n))}catch(u){uS.warn(`Error getting node status from ${r}`,u),u.code===qC.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===qC.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new C4(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!==l_.PRE_4_0_0_VERSION&&await lS.upsertNodeRecord(u)}catch(u){uS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(kC,"buildNodeStatus");function C4(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(C4,"NodeStatusObject")});var dS=m((Fce,$C)=>{"use strict";var{handleHDBError:U4,hdb_errors:D4}=W(),{HTTP_STATUS_CODES:L4}=D4,M4=rt(),P4=_s(),_S=x(),d_=require("joi"),v4=Pe(),B4=2e3,H4=d_.object({timeout:d_.number().min(1),connected_nodes:d_.boolean(),routes:d_.boolean()});$C.exports=q4;async function q4(e){P4.checkClusteringEnabled();let t=v4.validateBySchema(e,H4);if(t)throw U4(t,t.message,L4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||_S.autoCastBoolean(s),o=n===void 0||_S.autoCastBoolean(n),c={nodes:[]},u=await M4.getServerList(r??B4),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(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:_S.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(q4,"clusterNetwork")});var QC=m((xce,WC)=>{"use strict";var ES=require("joi"),YC=Pe(),{route_constraints:KC}=AE();WC.exports={setRoutesValidator:F4,deleteRoutesValidator:G4};function F4(e){let t=ES.object({server:ES.valid("hub","leaf").required(),routes:KC.required()});return YC.validateBySchema(e,t)}a(F4,"setRoutesValidator");function G4(e){let t=ES.object({routes:KC.required()});return YC.validateBySchema(e,t)}a(G4,"deleteRoutesValidator")});var hS=m((Vce,ZC)=>{"use strict";var _i=Tr(),fS=x(),E_=g(),zC=QC(),{handleHDBError:JC,hdb_errors:x4}=W(),{HTTP_STATUS_CODES:XC}=x4,k4="cluster routes successfully set",V4="cluster routes successfully deleted";ZC.exports={setRoutes:$4,getRoutes:Y4,deleteRoutes:K4};function $4(e){let t=zC.setRoutesValidator(e);if(t)throw JC(t,t.message,XC.BAD_REQUEST,void 0,void 0,!0);let r=_i.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=fS.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"?_i.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:k4,set:o,skipped:i}}a($4,"setRoutes");function Y4(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(Y4,"getRoutes");function K4(e){let t=zC.deleteRoutesValidator(e);if(t)throw JC(t,t.message,XC.BAD_REQUEST,void 0,void 0,!0);let r=_i.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 T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=fS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=fS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:V4,deleted:i,skipped:o}}a(K4,"deleteRoutes")});var eU=m((Yce,jC)=>{"use strict";var cc=require("alasql"),di=require("recursive-iterator"),$r=F(),W4=x(),uc=g(),mS=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,z4(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=>uc.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=>!uc.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][uc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Q4(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=>!uc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new cc.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 Q4(e){return e.filter(t=>t[uc.PERMS_CRUD_ENUM.READ])}a(Q4,"filterReadRestrictedAttrs");function z4(e,t,r,s,n){J4(e,t,r,s,n)}a(z4,"interpretAST");function lc(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(lc,"addSchemaTableToMap");function J4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof cc.yy.Insert?eX(e,t,r):e instanceof cc.yy.Select?X4(e,t,r,s,n):e instanceof cc.yy.Update?Z4(e,t,r):e instanceof cc.yy.Delete?j4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(J4,"getRecordAttributesAST");function X4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(W4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{lc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),lc(c.table,t,r,s,n)});let o=new di(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{$r.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 di(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{$r.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 di(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{$r.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 di(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{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(X4,"getSelectAttributes");function Z4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&SS(e.table.tableid,n,i.columnid,t,r)}a(Z4,"getUpdateAttributes");function j4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&SS(e.table.tableid,n,i.columnid,t,r)}a(j4,"getDeleteAttributes");function eX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;lc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&SS(e.into.tableid,n,i.columnid,t,r)}a(eX,"getInsertAttributes");function SS(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(SS,"pushAttribute");jC.exports=mS});var RS=m((Wce,nU)=>{var f_=Oa(),tU=require("chalk"),lr=F(),rU=require("prompt"),{promisify:tX}=require("util"),pS=g(),rX=require("fs-extra"),sX=require("path"),nX=x(),iX=tS(),sU=Q();sU.initSync();var oX=require("moment"),aX=tX(rU.get),cX=sX.join(sU.getHdbBasePath(),pS.LICENSE_KEY_DIR_NAME,pS.LICENSE_FILE_NAME,pS.LICENSE_FILE_NAME);nU.exports={getFingerprint:lX,setLicense:uX,parseLicense:TS,register:_X,getRegistrationInfo:EX};async function uX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await TS(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(uX,"setLicense");async function lX(){let e={};try{e=await f_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(lX,"getFingerprint");async function TS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=f_.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 rX.writeFile(cX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(TS,"parseLicense");async function _X(){let e=await dX();return TS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(_X,"register");async function dX(){let e=await f_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:tU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:tU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{rU.start()}catch(s){lr.error(s)}let r;try{r=await aX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(dX,"promptForRegistration");async function EX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await f_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(nX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=iX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=oX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(EX,"getRegistrationInfo")});var oU=m((zce,iU)=>{"use strict";var fX=Be(),gS=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+fX.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"}};iU.exports=gS});var uU=m((Xce,cU)=>{"use strict";var aU=Be(),AS=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+aU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+aU.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"}};cU.exports=AS});var _U=m((jce,lU)=>{"use strict";var OS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};lU.exports=OS});var EU=m((tue,dU)=>{"use strict";var hX=Be(),NS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+hX.SERVER_SUFFIX.ADMIN,this.password=r}};dU.exports=NS});var IS=m((sue,mU)=>{"use strict";var _c=require("path"),p_=require("fs-extra"),mX=oU(),SX=uU(),pX=_U(),TX=EU(),bS=Or(),fo=x(),Kt=Tr(),S_=g(),h_=Be(),{CONFIG_PARAMS:ze}=S_,Ec=F(),T_=Q(),fU=Fs(),yS=rt(),dc="clustering",RX=1e4,hU=5;mU.exports={generateNatsConfig:gX,removeNatsConfig:AX};async function gX(e=!1,t=void 0){T_.initSync();let r=T_.get(ze.ROOTPATH),s=_c.join(r,dc,h_.PID_FILES.HUB),n=_c.join(r,dc,h_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_c.join(r,dc,h_.NATS_CONFIG_FILES.HUB_SERVER),c=_c.join(r,dc,h_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await yS.checkNATSServerInstalled()||R_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await bS.listUsers(),S=Kt.getConfigFromFile(ze.CLUSTERING_USER),y=await bS.getClusterUser();(fo.isEmpty(y)||y.active!==!0)&&R_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await m_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await m_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await m_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await m_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],H=[];for(let[ge,ct]of T.entries())ct.role.role===S_.ROLE_TYPES_ENUM.CLUSTER_USER&&ct.active&&(O.push(new TX(ct.username,fU.decrypt(ct.hash))),H.push(new pX(ct.username,fU.decrypt(ct.hash))));let Y=[],{hub_routes:A}=Kt.getClusteringRoutes();if(!fo.isEmptyOrZeroLength(A))for(let ge of A)Y.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${ge.host}:${ge.port}`);let w=new mX(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,O,H);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=fo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===S_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await p_.writeJson(o,w),Ec.trace(`Hub server config written to ${o}`));let G=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new SX(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[G],[k],O,H,u,l,_,d);_==null&&delete X.tls.ca_file,(t===void 0||t===S_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await p_.writeJson(c,X),Ec.trace(`Leaf server config written to ${c}`))}a(gX,"generateNatsConfig");async function m_(e){let t=T_.get(e);return fo.isEmpty(t)&&R_(`port undefined for '${e}'`),await fo.isPortTaken(t)&&R_(`'${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(m_,"isPortAvailable");function R_(e){let t=`Error generating clustering config: ${e}`;Ec.error(t),console.error(t),process.exit(1)}a(R_,"generateNatsConfigError");async function AX(e){let{port:t,config_file:r}=yS.getServerConfig(e),{username:s,decrypt_hash:n}=await bS.getClusterUser(),i=0,o=500;for(;i<hU;){try{let l=await yS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Ec.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=hU)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 fo.async_set_timeout(o*i)}let c="0".repeat(RX),u=_c.join(T_.get(ze.ROOTPATH),dc,r);await p_.writeFile(u,c),await p_.remove(u),Ec.notify(e,"started.")}a(AX,"removeNatsConfig")});var AU=m((iue,gU)=>{"use strict";var _r=Q(),OX=Oa(),ae=g(),fc=Be(),$s=require("path"),{PACKAGE_ROOT:A_}=g(),SU=Q(),g_=x(),ho="/dev/null",NX=$s.join(A_,"launchServiceScripts"),pU=$s.join(A_,"utility/scripts"),bX=$s.join(pU,ae.HDB_RESTART_SCRIPT),TU=$s.resolve(A_,"dependencies",`${process.platform}-${process.arch}`,fc.NATS_BINARY_NAME);function RU(){let t=OX.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return g_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=g_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:A_}}a(RU,"generateMainServerConfig");var yX=9930;function IX(){_r.initSync(!0);let e=_r.get(ae.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",fc.NATS_CONFIG_FILES.HUB_SERVER),r=$s.join(_r.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=SU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[_r.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==yX?"-"+s:""),script:TU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ho,i.error_file=ho),i}a(IX,"generateNatsHubServerConfig");var wX=9940;function CX(){_r.initSync(!0);let e=_r.get(ae.CONFIG_PARAMS.ROOTPATH),t=$s.join(e,"clustering",fc.NATS_CONFIG_FILES.LEAF_SERVER),r=$s.join(_r.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=SU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[_r.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==wX?"-"+s:""),script:TU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ho,i.error_file=ho),i}a(CX,"generateNatsLeafServerConfig");function UX(){_r.initSync();let e=$s.join(_r.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:NX,autorestart:!1};return _r.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ho,t.error_file=ho),t}a(UX,"generateClusteringUpgradeV4ServiceConfig");function DX(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return g_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=g_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:pU},script:bX}}a(DX,"generateRestart");function LX(){return{apps:[RU()]}}a(LX,"generateAllServiceConfigs");gU.exports={generateAllServiceConfigs:LX,generateMainServerConfig:RU,generateRestart:DX,generateNatsHubServerConfig:IX,generateNatsLeafServerConfig:CX,generateClusteringUpgradeV4ServiceConfig:UX}});var DS=m((due,BU)=>{"use strict";var Re=g(),MX=x(),hc=IS(),mc=rt(),ds=Be(),In=AU(),O_=Q(),Ys=F(),PX=_s(),{startWorker:OU,onMessageFromWorkers:vX}=_t(),BX=Eo(),HX=require("util"),bU=require("child_process"),{execFile:qX}=bU,aue=HX.promisify(bU.exec),cue=require("systeminformation"),fe;BU.exports={enterPM2Mode:FX,start:Ei,stop:wS,reload:yU,restart:IU,list:CS,describe:CU,connect:Ks,kill:$X,startAllServices:YX,startService:US,getUniqueServicesList:UU,restartAllServices:KX,isServiceRegistered:DU,reloadStopStart:LU,restartHdb:wU,deleteProcess:kX,startClusteringProcesses:PU,startClusteringThreads:vU,isHdbRestartRunning:VX,isClusteringRunning:QX,stopClustering:WX,reloadClustering:zX};var{PACKAGE_ROOT:uue}=g(),lue=g(),{loggerWithTag:_ue}=Ys,Sc=!1;vX(e=>{e.type==="restart"&&O_.initSync(!0)});function FX(){Sc=!0}a(FX,"enterPM2Mode");function Ks(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ys.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ks,"connect");var Wt,GX=10,NU;function Ei(e){if(Sc)return xX(e);let t=qX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!NU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<GX&&Ei(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=O_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ds.LOG_LEVELS[d]}if(ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ys.OUTPUTS.STDERR:Ys.OUTPUTS.STDOUT;Ys.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{NU=!0,Wt&&(Wt.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)}Wt.push(t)}a(Ei,"start");function xX(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(xX,"startWithPM2");function wS(e){if(!Sc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(wS,"stop");function yU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(yU,"reload");function IU(e){if(!Sc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(IU,"restart");function kX(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(kX,"deleteProcess");async function wU(){await Ei(In.generateRestart())}a(wU,"restartHdb");async function VX(){let e=await CS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(VX,"isHdbRestartRunning");function CS(){return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(CS,"list");function CU(e){return new Promise(async(t,r)=>{try{await Ks()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(CU,"describe");function $X(){if(!Sc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ks()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a($X,"kill");async function YX(){try{await PU(),await vU(),await Ei(In.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(YX,"startAllServices");async function US(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=In.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=In.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=In.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=In.generateNatsHubServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=In.generateNatsLeafServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=In.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ei(t)}catch(t){throw fe.disconnect(),t}}a(US,"startService");async function UU(){try{let e=await CS(),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 fe.disconnect(),e}}a(UU,"getUniqueServicesList");async function KX(e=[]){try{let t=!1,r=await UU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await IU(o))}t&&await LU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(KX,"restartAllServices");async function DU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await BX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(DU,"isServiceRegistered");async function LU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?O_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):O_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await CU(e),s=MX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await wS(e),await US(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await wU():await yU(e)}a(LU,"reloadStopStart");var MU;async function PU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await US(t)}}a(PU,"startClusteringProcesses");async function vU(){MU=OU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await mc.createWorkQueueStream(ds.WORK_QUEUE_CONSUMER_NAMES),await mc.updateIngestStreamConsumer(),await mc.updateLocalStreams();let e=await PX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ys.info("Starting clustering upgrade 4.0.0 process"),OU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(vU,"startClusteringThreads");async function WX(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await MU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await wS(t)}}a(WX,"stopClustering");async function QX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await DU(t)===!1)return!1}return!0}a(QX,"isClusteringRunning");async function zX(){await hc.generateNatsConfig(!0),await mc.reloadNATSHub(),await mc.reloadNATSLeaf(),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(zX,"reloadClustering")});var qS=m((fue,kU)=>{"use strict";var JX=require("minimist"),{isMainThread:PS,parentPort:FU}=require("worker_threads"),He=g(),{PROCESS_DESCRIPTORS_VALIDATE:pc}=He,Es=F(),vS=x(),N_=IS(),mo=rt(),LS=Be(),GU=Tr(),hs=DS(),HU=Eo(),XX=_E(),{restartWorkers:b_,onMessageByType:ZX}=_t(),{handleHDBError:jX,hdb_errors:eZ}=W(),{HTTP_STATUS_CODES:tZ}=eZ,y_=Q();y_.initSync();var Tc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,rZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",qU="Clustering is not enabled so cannot be restarted",sZ="Invalid service",fi,Yr;kU.exports={restart:xU,restartService:BS};PS&&ZX(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?BS({service:e.workerType}):xU({operation:"restart"})});async function xU(e){Yr=Object.keys(e).length===0,fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=JX(process.argv);if(t.service){await BS(t);return}if(Yr&&!fi){console.error(rZ);return}if(Yr&&console.log(Tc),fi){hs.enterPM2Mode(),Es.notify(Tc);let r=XX(Object.keys(He.CONFIG_PARAM_MAP),!0);return vS.isEmptyOrZeroLength(Object.keys(r))||GU.updateConfigValue(void 0,void 0,r,!0,!0),iZ(),Tc}return PS?(Es.notify(Tc),await HS(),setTimeout(()=>{b_()},50)):FU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),Tc}a(xU,"restart");async function BS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw jX(new Error,sZ,tZ.BAD_REQUEST,void 0,void 0,!0);if(fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!PS)return FU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case pc.clustering:if(!y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qU;break}Yr&&console.log("Restarting clustering"),Es.notify("Restarting clustering"),await HS();break;case pc.clustering_config:case pc["clustering config"]:if(!y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=qU;break}Yr&&console.log("Restarting clustering_config"),Es.notify("Restarting clustering_config"),await hs.reloadClustering();break;case"custom_functions":case"custom functions":case pc.harperdb:case pc.http_workers:if(Yr&&!fi){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}Yr&&console.log("Restarting http_workers"),Es.notify("Restarting http_workers"),fi?await hs.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{b_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Es.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(BS,"restartService");async function nZ(){await mo.publishToStream(`${LS.SUBJECT_PREFIXES.TXN}.${LS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,LS.WORK_QUEUE_CONSUMER_NAMES.stream_name,mo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(nZ,"postDummyNatsMsg");async function iZ(){await HS(),await hs.restart(He.HDB_PROC_DESCRIPTOR),await vS.async_set_timeout(2e3),y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await MS(),Yr&&(await mo.closeConnection(),process.exit(0))}a(iZ,"restartPM2Mode");async function HS(){if(!GU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await HU.getHDBProcessInfo()).clustering.length===0)Es.trace("Clustering not running, restart will start clustering services"),await N_.generateNatsConfig(!0),await hs.startClusteringProcesses(),await hs.startClusteringThreads(),await MS(),Yr&&await mo.closeConnection();else{await nZ(),await N_.generateNatsConfig(!0),fi?(Es.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await HU.getHDBProcessInfo()).clustering.forEach(n=>{Es.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await vS.async_set_timeout(3e3),await MS(),await mo.updateLocalStreams(),Yr&&await mo.closeConnection(),Es.trace("Restart clustering restarting ingest and reply service threads");let t=b_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=b_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(HS,"restartClustering");async function MS(){await N_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await N_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(MS,"removeNatsConfig")});var jU=m((Sue,ZU)=>{"use strict";var mue=require("lodash"),Qt=g(),{handleHDBError:VU,hdb_errors:oZ}=W(),{HDB_ERROR_MSGS:aZ,HTTP_STATUS_CODES:cZ}=oZ,FS=F();ZU.exports={getRolePermissions:lZ};var hi=Object.create(null),uZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),WU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),QU=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),GS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...QU(t,r,s,n)}),"table_perms_template"),$U=a((e,t=QU())=>({attribute_name:e,describe:XU(t),[Rc]:t[Rc],[xS]:t[xS],[kS]:t[kS]}),"attr_perms_template"),YU=a((e,t=!1)=>({attribute_name:e,describe:t,[Rc]:t}),"timestamp_attr_perms_template"),{READ:Rc,INSERT:xS,UPDATE:kS}=Qt.PERMS_CRUD_ENUM,zU=Object.values(Qt.PERMS_CRUD_ENUM),JU=[Rc,xS,kS];function lZ(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[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(hi[t]&&hi[t].key===s)return hi[t].perms;let n=_Z(e,r);return hi[t]?hi[t].key=s:hi[t]=uZ(s),hi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.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 FS.error(s),FS.debug(r),VU(new Error,aZ.OUTDATED_PERMS_TRANSLATION_ERROR,cZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw FS.error(s),VU(new Error)}}}a(lZ,"getRolePermissions");function _Z(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.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]=dZ(t[i]);return}r[i]=WU(),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=EZ(c,u);r[i].describe||zU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=GS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=GS()})}),r}a(_Z,"translateRolePermissions");function dZ(e){let t=WU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=GS(!0,!0,!0,!0,!0)}),t}a(dZ,"createStructureUserPermissions");function EZ(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 Qt.TIME_STAMP_NAMES.includes(d)&&(E=YU(d,_[Rc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=$U(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=XU(_),n.attribute_permissions.push(_),c||fZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=YU(l):_=$U(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=KU(n),n}else return e.describe=KU(e),e}a(EZ,"getTableAttrPerms");function KU(e){return zU.filter(t=>e[t]).length>0}a(KU,"getSchemaTableDescribePerm");function XU(e){return JU.filter(t=>e[t]).length>0}a(XU,"getAttributeDescribePerm");function fZ(e,t){JU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(fZ,"checkForHashPerms")});var eD={};Ze(eD,{Resources:()=>I_,keyArrayToString:()=>So,resetResources:()=>hZ,resources:()=>wn});function hZ(){return wn=new I_}function So(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var I_,wn,gc=pe(()=>{$n();I_=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 Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(hZ,"resetResources");a(So,"keyArrayToString")});var Ac={};Ze(Ac,{authentication:()=>oD,login:()=>NZ,logout:()=>bZ,start:()=>OZ});async function oD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?TZ?pZ:[]:SZ?mZ:[];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 w_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),w_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(w_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),S=n.indexOf("=",h);c=n.slice(S+1,T===-1?n.length:T),u=await rD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let S=new D_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=T,c&&(S.session_id=c),e.headers.referer&&(S.referer=e.headers.referer),e.headers.origin&&(S.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?tD.notify(S):tD.error(S)},"authAuditLog"),_;if(s){if(_=po.get(s),!_){let[f,h]=s.split(" "),T,S;try{switch(f){case"Basic":[T,S]=atob(h).split(":"),_=T||S?await mt.auth(T,S):null;break;case"Bearer":try{_=await(0,U_.validateOperationToken)(h)}catch(y){if(y.message==="invalid token")try{return await(0,U_.validateRefreshToken)(h),{status:-1}}catch{throw y}}break}}catch(y){return AZ&&(po.get(h)||(po.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ws({error:y.message},e)}}po.set(s,_),gZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await mt.auth(u.user,null,!1):RZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,C_.getSuperUser)());w_&&(e.session.update=function(f){if(!c){c=(0,nD.v4)();let T=`${(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",T):d?.headers?.set&&d.headers.set("set-cookie",T)}return f.id=c,rD.put(f)},e.login=async function(f,h){e.user=await mt.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")&&wn.loginPath?(d.status=302,d.headers.Location=wn.loginPath(e)):d.headers["WWW-Authenticate"]="Basic");let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f={});for(let h=0;h<E;){let T=o[h++];f[T]=o[h++]}}return o=null,d}function OZ({server:e,port:t}){e.request(oD,{port:t||"all"}),sD||(sD=!0,setInterval(()=>{po=new Map},yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),iD.user.addListener(()=>{po=new Map}))}async function NZ(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 bZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var C_,U_,nD,yr,Rt,D_,iD,tD,mZ,SZ,pZ,TZ,rD,w_,RZ,gZ,AZ,po,sD,L_=pe(()=>{C_=D(Or());_n();gc();U_=D(ja());de();nD=require("uuid"),yr=D(Q()),Rt=D(g()),D_=D(F());To();iD=D(ba()),tD=(0,D_.loggerWithTag)("auth-event");yr.initSync();mZ=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),SZ=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),pZ=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),TZ=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);mt.auth=C_.findAndValidateUser;rD=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),w_=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,RZ=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,gZ=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,AZ=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;a(oD,"authentication");a(OZ,"start");a(NZ,"login");a(bZ,"logout")});var ED=m((yue,dD)=>{"use strict";var he=require("joi"),aD=require("fs-extra"),cD=require("path"),zs=Pe(),uD=Q(),lD=g(),_D=F(),{hdb_errors:yZ}=W(),{HDB_ERROR_MSGS:Dt}=yZ,Qs=/^[a-zA-Z0-9-_]+$/;dD.exports={getDropCustomFunctionValidator:wZ,setCustomFunctionValidator:CZ,addComponentValidator:MZ,dropCustomFunctionProjectValidator:PZ,packageComponentValidator:vZ,deployComponentValidator:BZ,setComponentFileValidator:UZ,getComponentFileValidator:LZ,dropComponentFileValidator:DZ};function M_(e,t,r){try{let s=uD.get(lD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=cD.join(s,t);return aD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return _D.error(s),r.message(Dt.VALIDATION_ERR)}}a(M_,"checkProjectExists");function Oc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Oc,"checkFilePath");function IZ(e,t,r,s){try{let n=uD.get(lD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=cD.join(n,e,t,r+".js");return aD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return _D.error(n),s.message(Dt.VALIDATION_ERR)}}a(IZ,"checkFileExists");function wZ(e){let t=he.object({project:he.string().pattern(Qs).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Qs).custom(IZ.bind(null,e.project,e.type)).custom(Oc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return zs.validateBySchema(e,t)}a(wZ,"getDropCustomFunctionValidator");function CZ(e){let t=he.object({project:he.string().pattern(Qs).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Oc).required(),function_content:he.string().required()});return zs.validateBySchema(e,t)}a(CZ,"setCustomFunctionValidator");function UZ(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Oc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zs.validateBySchema(e,t)}a(UZ,"setComponentFileValidator");function DZ(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Oc).optional()});return zs.validateBySchema(e,t)}a(DZ,"dropComponentFileValidator");function LZ(e){let t=he.object({project:he.string().required(),file:he.string().custom(Oc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return zs.validateBySchema(e,t)}a(LZ,"getComponentFileValidator");function MZ(e){let t=he.object({project:he.string().pattern(Qs).custom(M_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return zs.validateBySchema(e,t)}a(MZ,"addComponentValidator");function PZ(e){let t=he.object({project:he.string().pattern(Qs).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return zs.validateBySchema(e,t)}a(PZ,"dropCustomFunctionProjectValidator");function vZ(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return zs.validateBySchema(e,t)}a(vZ,"packageComponentValidator");function BZ(e){let t=he.object({project:he.string().pattern(Qs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return zs.validateBySchema(e,t)}a(BZ,"deployComponentValidator")});var KS=m((wue,mD)=>{"use strict";var be=require("fs-extra"),VS=require("fast-glob"),me=require("path"),fD=require("tar-fs"),HZ=require("uuid").v4,$S=require("normalize-path"),ms=ED(),gt=F(),Ie=g(),$e=Q(),P_=Tr(),qZ=x(),{PACKAGE_ROOT:FZ}=g(),{handleHDBError:st,hdb_errors:GZ}=W(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:nt}=GZ,xZ=me.join(FZ,"application-template"),YS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function hD(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw st(new Error,Cn.NOT_ENABLED,nt.BAD_REQUEST,void 0,void 0,!0)}a(hD,"isCFEnabled");function kZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw st(new Error,Cn.FUNCTION_STATUS,nt.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(kZ,"customFunctionsStatus");function VZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{VS.sync($S(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:VS.sync($S(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:VS.sync($S(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw st(new Error,Cn.GET_FUNCTIONS,nt.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(VZ,"getCustomFunctions");function $Z(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw st(new Error,Cn.GET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a($Z,"getCustomFunction");function YZ(e){hD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.setCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw st(new Error,Cn.SET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(YZ,"setCustomFunction");function KZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw st(new Error,Cn.DROP_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(KZ,"dropCustomFunction");function WZ(e){hD(),e.project&&(e.project=me.parse(e.project).name);let t=ms.addComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(xZ,n),`Successfully added project: ${s}`}catch(n){throw st(new Error,Cn.ADD_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(WZ,"addComponent");function QZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.dropCustomFunctionProjectValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!qZ.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 P_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw st(new Error,Cn.DROP_FUNCTION_PROJECT,nt.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(QZ,"dropCustomFunctionProject");async function zZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.packageComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(YS);let i=me.join(YS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),fD.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(zZ,"packageComponent");async function JZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.deployComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(YS,HZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(fD.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return P_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(JZ,"deployComponent");async function XZ(){let e=P_.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 be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(XZ,"getComponents");async function ZZ(e){let t=ms.getComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(ZZ,"getComponentFile");async function jZ(e){let t=ms.setComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(jZ,"setComponentFile");async function ej(e){let t=ms.dropComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),P_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(ej,"dropComponent");mD.exports={customFunctionsStatus:kZ,getCustomFunctions:VZ,getCustomFunction:$Z,setCustomFunction:YZ,dropCustomFunction:KZ,addComponent:WZ,dropCustomFunctionProject:QZ,packageComponent:zZ,deployComponent:JZ,getComponents:XZ,getComponentFile:ZZ,setComponentFile:jZ,dropComponent:ej}});var WS=m((Uue,pD)=>{"use strict";var Ss=require("joi"),SD=Pe();pD.exports={readTransactionLogValidator:tj,deleteTransactionLogsBeforeValidator:rj};function tj(e){let t=Ss.object({schema:Ss.string().required(),table:Ss.string().required(),from:Ss.date().timestamp(),to:Ss.date().timestamp(),limit:Ss.number().min(1)});return SD.validateBySchema(e,t)}a(tj,"readTransactionLogValidator");function rj(e){let t=Ss.object({schema:Ss.string().required(),table:Ss.string().required(),timestamp:Ss.date().timestamp().required()});return SD.validateBySchema(e,t)}a(rj,"deleteTransactionLogsBeforeValidator")});var B_=m((Lue,OD)=>{"use strict";var QS=g(),v_=rt(),TD=x(),RD=Q(),gD=Fs(),{handleHDBError:Ro,hdb_errors:sj}=W(),{HTTP_STATUS_CODES:go}=sj,{readTransactionLogValidator:nj,deleteTransactionLogsBeforeValidator:ij}=WS(),AD="This operation relies on clustering and cannot run with it disable.",oj="Logs successfully deleted from transaction log.",aj="All logs successfully deleted from transaction log.";OD.exports={readTransactionLog:cj,deleteTransactionLogsBefore:uj};async function*cj(e){let t=nj(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!RD.get(QS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,AD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=TD.checkSchemaTableExist(r,s);if(n)throw Ro(new Error,n,go.NOT_FOUND,void 0,void 0,!0);let i=gD.createNatsTableStreamName(r,s),o=await v_.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===QS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(cj,"readTransactionLog");async function uj(e){let t=ij(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!RD.get(QS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,AD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=TD.checkSchemaTableExist(r,s);if(i)throw Ro(new Error,i,go.NOT_FOUND,void 0,void 0,!0);let o=gD.createNatsTableStreamName(r,s),{jsm:c}=await v_.getNATSReferences(),u=await v_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=oj,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=aj):d=(await v_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(uj,"deleteTransactionLogsBefore")});var G_=m((Pue,UD)=>{"use strict";var H_=require("joi"),q_=require("path"),ND=require("fs-extra"),{exec:lj}=require("child_process"),_j=require("util"),bD=_j.promisify(lj),Nc=g(),{handleHDBError:Ao,hdb_errors:dj}=W(),{HTTP_STATUS_CODES:Oo}=dj,yc=Q(),Ej=Pe(),bc=F();yc.initSync();var zS=yc.get(Nc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),yD="npm install --omit=dev --json",fj=`${yD} --dry-run`;UD.exports={installModules:pj,auditModules:Tj,installAllRootModules:hj,uninstallRootModule:mj,linkHarperdb:Sj};async function hj(e=!1){await F_(),await Ic(e?"npm install --ignore-scripts":"npm install",yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(hj,"installAllRootModules");async function mj(e){await Ic(`npm uninstall ${e}`,yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(mj,"uninstallRootModule");async function Sj(){await F_(),await Ic(`npm link ${Nc.PACKAGE_ROOT}`,yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(Sj,"linkHarperdb");async function Ic(e,t=void 0){let{stdout:r,stderr:s}=await bD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return bc.trace(r,s),r.replace(`
11
- `,"")}a(Ic,"runCommand");async function pj(e){bc.info(`starting installModules for request: ${e}`);let t=CD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?fj:yD;await F_(),await wD(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=q_.join(zS,u),_,d=null;try{let{stdout:E,stderr:f}=await bD(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(vI,"runCommand");async function az(){try{await xQ.access(cm)}catch{return!1}let e=await vI(`${cm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return kQ.eq(t,iz)}a(az,"checkNATSServerInstalled");async function dm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await UI.getClusterUser();if(ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}yr.trace("create nats connection called");let i=await XQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(dm,"createConnection");async function cz(){ds&&(await ds.drain(),ds=void 0,ro=void 0,so=void 0,Wa=void 0)}a(cz,"closeConnection");var ds,Wa;async function xl(){return Wa||(Wa=dm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ds=await Wa),ds||Wa}a(xl,"getConnection");async function za(){if(ro)return ro;ci(ds)&&await xl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=await ds.jetstreamManager({domain:e}),ro}a(za,"getJetStreamManager");async function BI(){if(so)return so;ci(ds)&&await xl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=ds.jetstream({domain:e}),so}a(BI,"getJetStream");async function Gt(){let e=ds||await xl(),t=ro||await za(),r=so||await BI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function uz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await UI.getClusterUser(),n=await dm(t,r,s),i=_m(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=PI.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 Hl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(uz,"getServerList");async function Em(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:LI.File,retention:MI.Limits,subjects:t,discard:ZQ.Old,duplicate_window:DI,max_msgs:n,max_bytes:i,max_age:s})}a(Em,"createLocalStream");async function HI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(HI,"listStreams");async function lz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(lz,"deleteLocalStream");async function _z(e){let{connection:t}=await Gt(),r=[],s=_m(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(PI.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(_z,"listRemoteStreams");async function dz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:Fl.Explicit};t&&(o.deliver_policy=Gl.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=lm(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(dz,"viewStream");async function*Ez(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=um(),o={durable_name:i,ack_policy:Fl.Explicit};t&&(o.deliver_policy=Gl.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 _=lm(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(_e.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(_e.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(Ez,"viewStreamIterator");async function fz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=qI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:CI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),sz(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 kI(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){yr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Em(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(fz,"publishToStream");function qI(e,t){t===void 0&&(t=ez());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Hl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${um()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}a(qI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),nz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ci(am)&&(am={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Qa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),am;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ci(om)&&(om={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Qa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),om;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function hz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:LI.File,retention:MI.Limits,duplicate_window:DI,max_age:zQ,max_bytes:JQ,subjects:[`${_e.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:Fl.Explicit,durable_name:e.durable_name,deliver_policy:Gl.All,max_ack_pending:1e4});else throw s}}a(hz,"createWorkQueueStream");async function mz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Fl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Gl.All,max_ack_pending:1e4}))}a(mz,"updateIngestStreamConsumer");async function FI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=GI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=ql.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 T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&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:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(FI,"addSourceToWorkStream");function GI(e){return e.split(".")[1]}a(GI,"extractServerName");async function xI(e,t,r){let{schema:s,table:n}=r,i=ql.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),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(xI,"removeSourceFromWorkStream");async function Sz(e,t,r=2e4,s=_m()){if(!Hl.isObject(t))throw new Error("data param must be an object");let n=CI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return lm(c.data)}a(Sz,"request");function fm(e){return new Promise(async(t,r)=>{let s=KQ(cm,["--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(fm,"reloadNATS");async function pz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await fm(e)}a(pz,"reloadNATSHub");async function Tz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await fm(e)}a(Tz,"reloadNATSLeaf");function Rz(e,t,r){let s;switch(e.code){case II.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case II.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Rz,"requestErrorHandler");async function gz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await kI(async()=>{e.subscribe===!0?await FI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await xI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(gz,"updateWorkStream");function kI(e){return WQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(kI,"exclusiveLock");async function VI(e,t){let r=ql.createNatsTableStreamName(e,t),s=await Xa(),n=bz(e,t,s);await Em(r,[n])}a(VI,"createLocalTableStream");async function Az(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await VI(s,n)}}a(Az,"createTableStreams");async function $I(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=ql.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a($I,"purgeTableStream");async function Oz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await $I(e,t[r])}a(Oz,"purgeSchemaTableStreams");async function Nz(e){return(await za()).streams.info(e)}a(Nz,"getStreamInfo");function bz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(bz,"createSubjectName");async function Xa(){if(Ka)return Ka;if(Ka=(await za())?.nc?.info?.server_name,Ka===void 0)throw new Error("Unable to get jetstream manager server name");return Ka}a(Xa,"getJsmServerName");async function yz(){let e=await za(),t=await Xa(),r=await HI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Iz(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;yr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;yr.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(".");yr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(yz,"updateLocalStreams");function Iz(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.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(Iz,"updateStreamLimits")});var Yl=m((mae,zI)=>{"use strict";var no=Ju(),io=_I(),wz=x(),Cz=require("uuid").v4,hae=require("clone"),Vl=Vs(),oo=A(),Uz=require("util"),gn=qr(),{handleHDBError:xt,hdb_errors:Dz}=W(),{HDB_ERROR_MSGS:kl,HTTP_STATUS_CODES:kt}=Dz,{SchemaEventMsg:$l}=Fr(),KI=nt(),{getDatabases:Lz}=(de(),re(Ne)),{transformReq:ao}=V();zI.exports={createSchema:Mz,createSchemaStructure:WI,createTable:Pz,createTableStructure:QI,createAttribute:Fz,dropSchema:vz,dropTable:Bz,dropAttribute:Hz,getBackup:Gz};async function Mz(e){let t=await WI(e);return Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema)),t}a(Mz,"createSchema");async function WI(e){let t=no.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ao(e),!await io.checkSchemaExists(e.schema))throw xt(new Error,kl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,kl.SCHEMA_EXISTS_ERR(e.schema),!0);return await gn.createSchema(e),`database '${e.schema}' successfully created`}a(WI,"createSchemaStructure");async function Pz(e){return ao(e),await QI(e)}a(Pz,"createTable");async function QI(e){let t=no.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(no.validateTableResidence(e.residence),!await io.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,kl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,kl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Cz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await gn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await gn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(QI,"createTableStructure");async function vz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=no.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let n=await io.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,n,!0);let i=await io.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await gn.dropSchema(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema)),await KI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(vz,"dropSchema");async function Bz(e){let t=no.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,r,!0);return await gn.dropTable(e),await KI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Bz,"dropTable");async function Hz(e){let t=no.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(oo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await gn.dropAttribute(e),qz(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw wz.error(`Got an error deleting attribute ${Uz.inspect(e)}.`),s}}a(Hz,"dropAttribute");function qz(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(qz,"dropAttributeFromGlobal");async function Fz(e){ao(e);let t=Lz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await gn.createAttribute(e),Vl.signalSchemaChange(new $l(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Fz,"createAttribute");function Gz(e){return gn.getBackup(e)}a(Gz,"getBackup")});var XI=m((pae,JI)=>{"use strict";var{OPERATIONS_ENUM:xz}=A(),hm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=xz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};JI.exports=hm});var mm=m((gae,rw)=>{"use strict";var kz=qr(),Rae=XI(),Kl=V(),Wl=A(),Vz=Q(),{handleHDBError:ZI,hdb_errors:$z}=W(),{HDB_ERROR_MSGS:jI,HTTP_STATUS_CODES:ew}=$z,Yz=Object.values(Wl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),tw="To use this operation audit log must be enabled in harperdb-config.yaml";rw.exports=Kz;async function Kz(e){if(Kl.isEmpty(e.schema))throw new Error(jI.SCHEMA_REQUIRED_ERR);if(Kl.isEmpty(e.table))throw new Error(jI.TABLE_REQUIRED_ERR);if(!Vz.get(Wl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ZI(new Error,tw,ew.BAD_REQUEST,Wl.LOG_LEVELS.ERROR,tw,!0);let t=Kl.checkSchemaTableExist(e.schema,e.table);if(t)throw ZI(new Error,t,ew.NOT_FOUND,Wl.LOG_LEVELS.ERROR,t,!0);if(!Kl.isEmpty(e.search_type)&&Yz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await kz.readAuditLog(e)}a(Kz,"readAuditLog")});var nw=m((Oae,sw)=>{"use strict";var{OPERATIONS_ENUM:Wz}=A(),Sm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Wz.GET_BACKUP,this.schema=t,this.table=r}};sw.exports=Sm});var aw=m((Iae,ow)=>{"use strict";var Qz=qr(),bae=nw(),pm=V(),zz=A(),yae=Q(),{handleHDBError:Jz,hdb_errors:Xz}=W(),{HDB_ERROR_MSGS:iw,HTTP_STATUS_CODES:Zz}=Xz;ow.exports=jz;async function jz(e){if(pm.isEmpty(e.schema))throw new Error(iw.SCHEMA_REQUIRED_ERR);if(pm.isEmpty(e.table))throw new Error(iw.TABLE_REQUIRED_ERR);let t=pm.checkSchemaTableExist(e.schema,e.table);if(t)throw Jz(new Error,t,Zz.NOT_FOUND,zz.LOG_LEVELS.ERROR,t,!0);return await Qz.getBackup(read_audit_log_object)}a(jz,"getBackup")});var Ew=m((Cae,dw)=>{var An=require("validate.js"),uw=Pe(),co=A(),{handleHDBError:eJ,hdb_errors:tJ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:rJ}=tJ,Tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),sJ={STRUCTURE_USER:"structure_user"},cw=Object.values(co.ROLE_TYPES_ENUM),nJ="attribute_permissions",iJ="attribute_name",{PERMS_CRUD_ENUM:uo}=co,oJ=[nJ,...Object.values(uo)],lw=[uo.READ,uo.INSERT,uo.UPDATE],aJ=[iJ,...lw];function cJ(e){let t=Tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,_w(e,t)}a(cJ,"addRoleValidation");function uJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,_w(e,t)}a(uJ,"alterRoleValidation");function lJ(e){let t=Tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,uw.validateObject(e,t)}a(lJ,"dropRoleValidation");var _J=["operation","role","id","permission","hdb_user","hdb_auth_header"];function _w(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)_J.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=uw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=dJ(e);o&&Qe(o,r),cw.forEach(c=>{e.permission[c]&&!An.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(cw.indexOf(o)<0){if(o===sJ.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]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.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]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{oJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(uo).forEach(_=>{An.isDefined(l[_])?An.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),An.isDefined(l.attribute_permissions)){if(!An.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.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(T=>{!aJ.includes(T)&&T!==uo.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!An.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}lw.forEach(T=>{An.isDefined(f[T])?An.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(T,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}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return EJ(r)}a(_w,"customValidate");dw.exports={addRoleValidation:cJ,alterRoleValidation:uJ,dropRoleValidation:lJ};function dJ(e){let{operation:t,permission:r}=e;if(t===co.OPERATIONS_ENUM.ADD_ROLE||t===co.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 Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?co.ROLE_TYPES_ENUM.SUPER_USER:co.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(dJ,"validateNoSUPerms");function EJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return eJ(new Error,s,rJ.BAD_REQUEST)}else return null}a(EJ,"generateRolePermResponse");function Qe(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(Qe,"addPermError")});var bm=m((Dae,Sw)=>{"use strict";var fw=Nr(),hw=Or(),fJ=ei(),gm=Ew(),Am=Vs(),hJ=require("uuid").v4,mJ=require("util"),Ql=A(),SJ=V(),Om=hw.searchByValue,pJ=hw.searchByHash,TJ=mJ.promisify(fJ.delete),RJ=as(),gJ=Zi(),{hdb_errors:AJ,handleHDBError:lo}=W(),{HDB_ERROR_MSGS:mw,HTTP_STATUS_CODES:zl}=AJ,{UserEventMsg:Nm}=Fr();Sw.exports={addRole:OJ,alterRole:NJ,dropRole:bJ,listRoles:yJ};function Rm(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(Rm,"scrubRoleDetails");async function OJ(e){let t=gm.addRoleValidation(e);if(t)throw t;e=Rm(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 Om(r)||[])}catch(i){throw lo(i)}if(s&&s.length>0)throw lo(new Error,mw.ROLE_ALREADY_EXISTS(e.role),zl.CONFLICT,void 0,void 0,!0);e.id||(e.id=hJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await fw.insert(n),Am.signalUserChange(new Nm(process.pid)),e=Rm(e),e}a(OJ,"addRole");async function NJ(e){let t=gm.alterRoleValidation(e);if(t)throw t;e=Rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await fw.update(r)}catch(n){throw lo(n)}if(s&&s?.message==="updated 0 of 1 records")throw lo(new Error,"Invalid role id",zl.BAD_REQUEST,void 0,void 0,!0);return await Am.signalUserChange(new Nm(process.pid)),e}a(NJ,"alterRole");async function bJ(e){let t=gm.dropRoleValidation(e);if(t)throw lo(new Error,t,zl.BAD_REQUEST,void 0,void 0,!0);let r=new gJ(Ql.SYSTEM_SCHEMA_NAME,Ql.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await pJ(r));if(s.length===0)throw lo(new Error,mw.ROLE_NOT_FOUND,zl.NOT_FOUND,void 0,void 0,!0);let n=new RJ(Ql.SYSTEM_SCHEMA_NAME,Ql.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Om(n)),o=!1;if(SJ.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 TJ(c),Am.signalUserChange(new Nm(process.pid)),`${s[0].role} successfully deleted`}a(bJ,"dropRole");async function yJ(){return Om({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(yJ,"listRoles")});var gw=m((Mae,Rw)=>{"use strict";var IJ=Q(),On=require("joi"),wJ=Pe(),pw=require("moment"),CJ=require("fs-extra"),ym=require("path"),UJ=require("lodash"),Za=A(),{LOG_LEVELS:ui}=A(),DJ="YYYY-MM-DD hh:mm:ss",LJ=ym.resolve(__dirname,"../logs");Rw.exports=function(e){return wJ.validateBySchema(e,MJ)};var MJ=On.object({from:On.custom(Tw),until:On.custom(Tw),level:On.valid(ui.NOTIFY,ui.FATAL,ui.ERROR,ui.WARN,ui.INFO,ui.DEBUG,ui.TRACE),order:On.valid("asc","desc"),limit:On.number().min(1),start:On.number().min(0),log_name:On.custom(PJ)});function Tw(e,t){if(pw(e,pw.ISO_8601).format(DJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(Tw,"validateDatetime");function PJ(e,t){if(UJ.invert(Za.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=IJ.get(Za.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Za.LOG_NAMES.HDB:e,i=n===Za.LOG_NAMES.INSTALL?ym.join(LJ,Za.LOG_NAMES.INSTALL):ym.join(s,n);return CJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(PJ,"validateReadLogPath")});var wm=m((vae,Ow)=>{"use strict";var Jl=A(),vJ=x(),BJ=Q(),HJ=gw(),Im=require("path"),Aw=require("fs-extra"),{once:qJ}=require("events"),{handleHDBError:FJ,hdb_errors:GJ}=W(),{PACKAGE_ROOT:xJ}=A(),kJ=Im.join(xJ,"logs"),VJ=1e3,$J=200;Ow.exports=YJ;async function YJ(e){let t=HJ(e);if(t)throw FJ(t,t.message,GJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=BJ.get(Jl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Jl.LOG_NAMES.HDB:e.log_name,n=s===Jl.LOG_NAMES.INSTALL?Im.join(kJ,Jl.LOG_NAMES.INSTALL):Im.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?VJ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(Aw.statSync(n).size-(h+5)*$J,0));let p=Aw.createReadStream(n,{start:T});p.on("error",b=>{vJ.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,q;for(;(q=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,Ze,cu]=q,Mi=cu.split("] ["),$o=Mi[0],Fn=Mi[1];Mi.splice(0,2),$={timestamp:Ze,thread:$o,level:Fn,tags:Mi,message:""},z=q.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(Nn(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&R<f?R++:P<=q&&R>=f&&(Nn(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(Nn(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await qJ(p,"close"),O}a(YJ,"readLog");function Nn(e,t,r){t==="desc"?KJ(e,r):t==="asc"?WJ(e,r):r.push(e)}a(Nn,"pushLineToResult");function KJ(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(KJ,"insertDescending");function WJ(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(WJ,"insertAscending")});var Zl=m((Gae,Iw)=>{"use strict";var Cm=require("joi"),{string:Xl,boolean:Nw,date:QJ}=Cm.types(),zJ=Pe(),{validateSchemaExists:Hae,validateTableExists:qae,validateSchemaName:Fae}=ss(),JJ=A(),XJ=Be(),bw=Q();bw.initSync();var ZJ=Xl.invalid(bw.get(JJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(XJ.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(),yw={operation:Xl.valid("add_node","update_node"),node_name:ZJ,subscriptions:Cm.array().items({table:Xl.optional(),schema:Xl.required(),subscribe:Nw.required(),publish:Nw.required().custom(e2),start_time:QJ.iso()}).min(1).required()};function jJ(e){return zJ.validateBySchema(e,Cm.object(yw))}a(jJ,"addUpdateNodeValidator");function e2(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(e2,"checkForFalsy");Iw.exports={addUpdateNodeValidator:jJ,validation_schema:yw}});var Cw=m((kae,ww)=>{var t2=Pe(),r2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};ww.exports=function(e){return t2.validateObject(e,r2)}});var Dm=m((Vae,Uw)=>{"use strict";var s2=A().OPERATIONS_ENUM,Um=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=s2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Uw.exports=Um});var Lw=m((Yae,Dw)=>{"use strict";var n2={OPERATION:"operation",REFRESH:"refresh"},Lm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Mm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Dw.exports={JWTTokens:Lm,TOKEN_TYPE_ENUM:n2,JWTRSAKeys:Mm}});var tc=m((Wae,Bw)=>{"use strict";var ec=require("jsonwebtoken"),Pm=require("fs-extra"),vm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:i2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=i2,ja=x(),Mw=ul(),qm=br(),o2=Nr().update,a2=Dm(),c2=Vs(),{UserEventMsg:u2}=Fr(),bn=Q();bn.initSync();var Bm=require("path"),{JWTTokens:l2,JWTRSAKeys:_2,TOKEN_TYPE_ENUM:jl}=Lw(),d2=bn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?bn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",E2=bn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?bn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",e_="RS256",Hm;Bw.exports={createTokens:f2,validateOperationToken:m2,refreshOperationToken:h2,validateRefreshToken:vw};async function f2(e){if(vm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(vm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await qm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ja.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await t_(),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 Pw(i,r.private_key,r.passphrase),c=await ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:E2,algorithm:e_,subject:jl.REFRESH}),u=Mw.hash(c),l=new a2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await o2(l)}catch(E){ja.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return c2.signalUserChange(new u2(process.pid)),new l2(o,c)}a(f2,"createTokens");async function Pw(e,t,r){return await ec.sign(e,{key:t,passphrase:r},{expiresIn:d2,algorithm:e_,subject:jl.OPERATION})}a(Pw,"signOperationToken");async function t_(){if(Hm===void 0)try{let e=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Bm.join(bn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Pm.readFile(e)).toString(),n=(await Pm.readFile(t)).toString(),i=(await Pm.readFile(r)).toString();Hm=new _2(i,n,s)}catch(e){throw ja.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Hm}a(t_,"getJWTRSAKeys");async function h2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await vw(e.refresh_token);let t=await t_(),r=await ec.decode(e.refresh_token);return{operation_token:await Pw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(h2,"refreshOperationToken");async function m2(e){try{let t=await t_(),r=await ec.verify(e,t.public_key,{algorithms:e_,subject:jl.OPERATION});return await qm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ja.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(m2,"validateOperationToken");async function vw(e){let t;try{let r=await t_(),s=await ec.verify(e,r.public_key,{algorithms:e_,subject:jl.REFRESH});t=await qm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ja.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Mw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(vw,"validateRefreshToken")});var Fm=m((Jae,Fw)=>{"use strict";var S2=Cw(),_o=require("passport"),p2=require("passport-local").Strategy,T2=require("passport-http").BasicStrategy,R2=require("util"),g2=br(),qw=R2.callbackify(g2.findAndValidateUser),zae=rr(),A2=A(),Hw=tc();_o.use(new p2(function(e,t,r){qw(e,t,r)}));_o.use(new T2(function(e,t,r){qw(e,t,r)}));_o.serializeUser(function(e,t){t(null,e)});_o.deserializeUser(function(e,t){t(null,e)});function O2(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":_o.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===A2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Hw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Hw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_o.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(O2,"authorize");function N2(e,t){let r=S2(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(N2,"checkPermissions");Fw.exports={authorize:O2,checkPermissions:N2}});var Eo=m((Zae,Gw)=>{"use strict";var Gm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},xm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};Gw.exports={Node:Gm,NodeSubscription:xm}});var kw=m((ece,xw)=>{"use strict";var b2=A().OPERATIONS_ENUM,km=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=b2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};xw.exports=km});var rc=m((rce,Vw)=>{"use strict";var Vm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},$m=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)}};Vw.exports={RemotePayloadObject:Vm,RemotePayloadSubscription:$m}});var Yw=m((nce,$w)=>{"use strict";var Ym=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}};$w.exports=Ym});var Qw=m((uce,Ww)=>{"use strict";var y2=Yw(),oce=xe(),Kw=ye(),I2=x(),{getSchemaPath:ace,getTransactionAuditStorePath:cce}=we(),{getDatabases:w2}=(de(),re(Ne));Ww.exports=C2;async function C2(e){let t=new y2;try{let r=w2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Kw.environmentDataSize(schema_path,e.name),o=await Kw.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){I2.warn(`unable to stat table dbi due to ${r}`)}return t}a(C2,"lmdbGetTableSize")});var Jw=m((_ce,zw)=>{"use strict";var Km=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}};zw.exports=Km});var fo=m((hce,eC)=>{"use strict";var U2=require("fs-extra"),D2=require("path"),Ut=require("systeminformation"),yn=x(),L2=nt(),Wm=Be(),s_=A(),M2=Qw(),jw=zn(),{getThreadInfo:Xw}=dt(),sS=Q();sS.initSync();var P2=Jw(),{openEnvironment:Ece}=ye(),{getSchemaPath:fce}=we(),{database:v2}=(de(),re(Ne)),r_;eC.exports={getHDBProcessInfo:Xm,getNetworkInfo:jm,getDiskInfo:Zm,getMemoryInfo:Jm,getCPUInfo:zm,getTimeInfo:Qm,getSystemInformation:eS,systemInformation:B2,getTableSize:tS,getMetrics:rS};function Qm(){return Ut.time()}a(Qm,"getTimeInfo");async function zm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return yn.error(`error in getCPUInfo: ${e}`),{}}}a(zm,"getCPUInfo");async function Jm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return yn.error(`error in getMemoryInfo: ${e}`),{}}}a(Jm,"getMemoryInfo");async function Xm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await U2.readFile(D2.join(sS.get(s_.CONFIG_PARAMS.ROOTPATH),s_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===s_.NODE_ERROR_CODES.ENOENT)yn.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 yn.error(`error in getHDBProcessInfo: ${t}`),e}}a(Xm,"getHDBProcessInfo");async function Zm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return yn.error(`error in getDiskInfo: ${t}`),e}}a(Zm,"getDiskInfo");async function jm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.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 Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return yn.error(`error in getNetworkInfo: ${t}`),e}}a(jm,"getNetworkInfo");async function eS(){if(r_!==void 0)return r_;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,r_=e,r_}catch(t){return yn.error(`error in getSystemInformation: ${t}`),e}}a(eS,"getSystemInformation");async function tS(){let e=[],t=await jw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await M2(s));return e}a(tS,"getTableSize");async function rS(){let e=await jw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=v2({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){yn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(rS,"getMetrics");async function Zw(){if(sS.get(s_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await L2.getNATSReferences(),r=await t.streams.info(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Wm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Wm.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(Zw,"getNatsStreamInfo");async function B2(e){let t=new P2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await eS(),t.time=Qm(),t.cpu=await zm(),t.memory=await Jm(),t.disk=await Zm(),t.network=await jm(),t.harperdb_processes=await Xm(),t.table_size=await tS(),t.metrics=await rS(),t.threads=await Xw(),t.replication=await Zw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await eS();break;case"time":t.time=Qm();break;case"cpu":t.cpu=await zm();break;case"memory":t.memory=await Jm();break;case"disk":t.disk=await Zm();break;case"network":t.network=await jm();break;case"harperdb_processes":t.harperdb_processes=await Xm();break;case"table_size":t.table_size=await tS();break;case"database_metrics":case"metrics":t.metrics=await rS();break;case"threads":t.threads=await Xw();break;case"replication":t.replication=await Zw();break;default:break}return t}a(B2,"systemInformation")});var nS=m((Tce,tC)=>{"use strict";var Sce=require("fs-extra"),pce=x();tC.exports={version:H2,printVersion:F2,nodeVersion:q2};var In=Va();function H2(){if(In)return In.version}a(H2,"version");function q2(){if(In&&In.engines&&In.engines["preferred-node"])return In.engines["preferred-node"]}a(q2,"nodeVersion");function F2(){In&&console.log(`HarperDB Version ${In.version}`)}a(F2,"printVersion")});var Es=m((Oce,iC)=>{"use strict";var G2=Nr(),iS=V(),x2=require("util"),li=A(),rC=Q();rC.initSync();var k2=Fm(),sC=Or(),{Node:gce,NodeSubscription:Ace}=Eo(),V2=Zi(),$2=kw(),{RemotePayloadObject:Y2,RemotePayloadSubscription:K2}=rc(),{handleHDBError:W2,hdb_errors:Q2}=W(),{HTTP_STATUS_CODES:z2,HDB_ERROR_MSGS:J2}=Q2,X2=as(),Z2=fo(),j2=nS(),{getDatabases:e3}=(de(),re(Ne)),t3=x2.promisify(k2.authorize),r3=sC.searchByHash,s3=sC.searchByValue;iC.exports={authHeaderToUser:n3,isEmpty:i3,getNodeRecord:o3,upsertNodeRecord:a3,buildNodePayloads:c3,checkClusteringEnabled:u3,getAllNodeRecords:l3,getSystemInfo:_3,reverseSubscription:nC};async function n3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await t3(t,null),e}a(n3,"authHeaderToUser");function i3(e){return e==null}a(i3,"isEmpty");async function o3(e){let t=new V2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return r3(t)}a(o3,"getNodeRecord");async function a3(e){let t=new $2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return G2.upsert(t)}a(a3,"upsertNodeRecord");function nC(e){if(iS.isEmpty(e.subscribe)||iS.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(nC,"reverseSubscription");function c3(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,_=iS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=nC(c),f=e3()[u]?.[l],h=new K2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new Y2(r,t,n,s)}a(c3,"buildNodePayloads");function u3(){if(!rC.get(li.CONFIG_PARAMS.CLUSTERING_ENABLED))throw W2(new Error,J2.CLUSTERING_NOT_ENABLED,z2.BAD_REQUEST,void 0,void 0,!0)}a(u3,"checkClusteringEnabled");async function l3(){let e=new X2(li.SYSTEM_SCHEMA_NAME,li.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await s3(e))}a(l3,"getAllNodeRecords");async function _3(){let e=await Z2.getSystemInformation();return{hdb_version:j2.version(),node_version:e.node_version,platform:e.platform}}a(_3,"getSystemInfo")});var oS=m((bce,EC)=>{"use strict";var n_=nt(),oC=V(),aC=Be(),cC=A(),i_=x(),uC=Yl(),d3=Nh(),{RemotePayloadObject:E3}=rc(),{handleHDBError:lC,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:_C}=f3,{NodeSubscription:dC}=Eo();EC.exports=h3;async function h3(e,t){let r;try{r=await n_.request(`${t}.${aC.REQUEST_SUFFIX}`,new E3(cC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),i_.trace("Response from remote describe all request:",r)}catch(o){i_.error(`addNode received error from describe all request to remote node: ${o}`);let c=n_.requestErrorHandler(o,"add_node",t);throw lC(new Error,c,_C.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===aC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw lC(new Error,o,_C.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===cC.SYSTEM_SCHEMA_NAME){await n_.createLocalTableStream(c,u);let h=new dC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=oC.doesSchemaExist(c),_=s[c]!==void 0,d=u?oC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(i_.trace(`addNode creating schema: ${c}`),await uC.createSchema({operation:"create_schema",schema:c})),!d&&E){i_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new d3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await uC.createTable(h)}await n_.createLocalTableStream(c,u);let f=new dC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(h3,"reviewSubscriptions")});var ic=m((Ice,mC)=>{"use strict";var{handleHDBError:o_,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:a_}=m3,{addUpdateNodeValidator:S3}=Zl(),sc=x(),hC=A(),fC=Be(),p3=V(),aS=nt(),nc=Es(),T3=Q(),R3=oS(),{Node:g3,NodeSubscription:A3}=Eo(),{broadcast:O3}=dt(),N3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",b3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",y3=T3.get(hC.CONFIG_PARAMS.CLUSTERING_NODENAME);mC.exports=I3;async function I3(e,t=!1){sc.trace("addNode called with:",e),nc.checkClusteringEnabled();let r=S3(e);if(r)throw o_(r,r.message,a_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await nc.getNodeRecord(s);if(!p3.isEmptyOrZeroLength(d))throw o_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await R3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=N3,o;let c=nc.buildNodePayloads(n,y3,hC.OPERATIONS_ENUM.ADD_NODE,await nc.getSystemInfo());sc.trace("addNode sending remote payload:",c);let u;try{u=await aS.request(`${s}.${fC.REQUEST_SUFFIX}`,c)}catch(d){sc.error(`addNode received error from request: ${d}`);let E=aS.requestErrorHandler(d,"add_node",s);throw o_(new Error,E,a_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===fC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw o_(new Error,d,a_.INTERNAL_SERVER_ERROR,"error",d)}sc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];sc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await aS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new A3(f.schema,f.table,f.publish,f.subscribe))}let _=new g3(s,l,u.system_info);return await nc.upsertNodeRecord(_),O3({type:"nats_update"}),i.length>0?o.message=b3:o.message=`Successfully added '${s}' to manifest`,o}a(I3,"addNode")});var uS=m((Cce,TC)=>{"use strict";var{handleHDBError:c_,hdb_errors:w3}=W(),{HTTP_STATUS_CODES:u_}=w3,{addUpdateNodeValidator:C3}=Zl(),oc=x(),pC=A(),SC=Be(),U3=V(),cS=nt(),ac=Es(),D3=Q(),{cloneDeep:L3}=require("lodash"),M3=oS(),{NodeSubscription:P3}=Eo(),{broadcast:v3}=dt(),B3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",H3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",q3=D3.get(pC.CONFIG_PARAMS.CLUSTERING_NODENAME);TC.exports=F3;async function F3(e){oc.trace("updateNode called with:",e),ac.checkClusteringEnabled();let t=C3(e);if(t)throw c_(t,t.message,u_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=L3(await ac.getNodeRecord(r));if(U3.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await M3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=B3,o;let c=ac.buildNodePayloads(n,q3,pC.OPERATIONS_ENUM.UPDATE_NODE,await ac.getSystemInfo());oc.trace("updateNode sending remote payload:",c);let u;try{u=await cS.request(`${r}.${SC.REQUEST_SUFFIX}`,c)}catch(l){oc.error(`updateNode received error from request: ${l}`);let _=cS.requestErrorHandler(l,"update_node",r);throw c_(new Error,_,u_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===SC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw c_(new Error,l,u_.INTERNAL_SERVER_ERROR,"error",l)}oc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];oc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await cS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await G3(s[0],n,u.system_info),i.length>0?o.message=H3:o.message=`Successfully updated '${r}'`,o}a(F3,"updateNode");async function G3(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 P3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ac.upsertNodeRecord(s),v3({type:"nats_update"})}a(G3,"updateNodeTable")});var NC=m((Dce,OC)=>{"use strict";var AC=require("joi"),{string:RC}=AC.types(),x3=Pe(),gC=A(),k3=Q(),V3=Be();OC.exports=$3;function $3(e){let t=RC.invalid(k3.get(gC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(V3.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=AC.object({operation:RC.valid(gC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return x3.validateBySchema(e,r)}a($3,"removeNodeValidator")});var uc=m((Mce,UC)=>{"use strict";var{handleHDBError:bC,hdb_errors:Y3}=W(),{HTTP_STATUS_CODES:yC}=Y3,K3=NC(),cc=x(),IC=Es(),W3=V(),l_=A(),wC=Be(),CC=nt(),Q3=Q(),{RemotePayloadObject:z3}=rc(),{NodeSubscription:J3}=Eo(),X3=va(),Z3=ei(),{broadcast:j3}=dt(),e4=Q3.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);UC.exports=t4;async function t4(e){cc.trace("removeNode called with:",e),IC.checkClusteringEnabled();let t=K3(e);if(t)throw bC(t,t.message,yC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await IC.getNodeRecord(r);if(W3.isEmptyOrZeroLength(s))throw bC(new Error,`Node '${r}' was not found.`,yC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new z3(l_.OPERATIONS_ENUM.REMOVE_NODE,e4,[]),i,o=!1;try{i=await CC.request(`${r}.${wC.REQUEST_SUFFIX}`,n),cc.trace("Remove node reply from remote node:",r,i)}catch(u){cc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];cc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new J3(_.schema,_.table,!1,!1);await CC.updateWorkStream(d,r)}let c=new X3(l_.SYSTEM_SCHEMA_NAME,l_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Z3.deleteRecord(c),j3({type:"nats_update"}),i?.status===wC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(cc.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(t4,"removeNode")});var MC=m((vce,LC)=>{"use strict";var DC=require("joi"),{string:r4,array:s4}=DC.types(),n4=Pe(),i4=Zl();LC.exports=o4;function o4(e){let t=DC.object({operation:r4.valid("configure_cluster").required(),connections:s4.items(i4.validation_schema).required()});return n4.validateBySchema(e,t)}a(o4,"configureClusterValidator")});var lS=m((Hce,qC)=>{"use strict";var a4=A(),__=x(),c4=V(),u4=uc(),l4=ic(),PC=Es(),_4=MC(),{handleHDBError:vC,hdb_errors:d4}=W(),{HTTP_STATUS_CODES:BC}=d4,E4="Configure cluster complete.",f4="Failed to configure the cluster. Check the logs for more details.",h4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";qC.exports=m4;async function m4(e){__.trace("configure cluster called with:",e),PC.checkClusteringEnabled();let t=_4(e);if(t)throw vC(t,t.message,BC.BAD_REQUEST,void 0,void 0,!0);let r=await PC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(HC(u4,{operation:a4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);__.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(HC(l4,f,f.node_name))}let c=await Promise.allSettled(i);__.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"&&(__.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(c4.isEmptyOrZeroLength(u))return{message:E4,connections:l};if(_)return{message:h4,failed_nodes:u,connections:l};throw vC(new Error,f4,BC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(m4,"configureCluster");async function HC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(HC,"functionWrapper")});var GC=m((Fce,FC)=>{"use strict";var d_=require("joi"),S4=Pe(),{validateSchemaExists:p4,validateTableExists:T4,validateSchemaName:R4}=ss(),g4=d_.object({operation:d_.string().valid("purge_stream"),schema:d_.string().custom(p4).custom(R4).required(),table:d_.string().custom(T4).required()});function A4(e){return S4.validateBySchema(e,g4)}a(A4,"purgeStreamValidator");FC.exports=A4});var _S=m((xce,xC)=>{"use strict";var{handleHDBError:O4,hdb_errors:N4}=W(),{HTTP_STATUS_CODES:b4}=N4,y4=GC(),I4=nt(),w4=Es();xC.exports=C4;async function C4(e){let t=y4(e);if(t)throw O4(t,t.message,b4.BAD_REQUEST,void 0,void 0,!0);w4.checkClusteringEnabled();let{schema:r,table:s}=e;return await I4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(C4,"purgeStream")});var f_=m((Vce,WC)=>{"use strict";var ES=Es(),U4=nt(),$C=Q(),E_=A(),_i=Be(),D4=V(),dS=x(),{RemotePayloadObject:L4}=rc(),{ErrorCode:kC}=require("nats"),VC=$C.get(E_.CONFIG_PARAMS.CLUSTERING_ENABLED),YC=$C.get(E_.CONFIG_PARAMS.CLUSTERING_NODENAME);WC.exports={clusterStatus:M4,buildNodeStatus:KC};async function M4(){let e={node_name:YC,is_enabled:VC,connections:[]};if(!VC)return e;let t=await ES.getAllNodeRecords();if(D4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(KC(t[s],e.connections));return await Promise.allSettled(r),e}a(M4,"clusterStatus");async function KC(e,t){let r=e.name,s=new L4(E_.OPERATIONS_ENUM.CLUSTER_STATUS,YC,void 0,await ES.getSystemInfo()),n,i,o=_i.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await U4.request(_i.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===_i.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=_i.CLUSTER_STATUS_STATUSES.CLOSED,dS.error(`Error getting node status from ${r} `,n))}catch(u){dS.warn(`Error getting node status from ${r}`,u),u.code===kC.NoResponders?o=_i.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===kC.Timeout?o=_i.CLUSTER_STATUS_STATUSES.TIMEOUT:o=_i.CLUSTER_STATUS_STATUSES.CLOSED}let c=new P4(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!==E_.PRE_4_0_0_VERSION&&await ES.upsertNodeRecord(u)}catch(u){dS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(KC,"buildNodeStatus");function P4(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(P4,"NodeStatusObject")});var hS=m((Yce,QC)=>{"use strict";var{handleHDBError:v4,hdb_errors:B4}=W(),{HTTP_STATUS_CODES:H4}=B4,q4=nt(),F4=Es(),fS=V(),h_=require("joi"),G4=Pe(),x4=2e3,k4=h_.object({timeout:h_.number().min(1),connected_nodes:h_.boolean(),routes:h_.boolean()});QC.exports=V4;async function V4(e){F4.checkClusteringEnabled();let t=G4.validateBySchema(e,k4);if(t)throw v4(t,t.message,H4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||fS.autoCastBoolean(s),o=n===void 0||fS.autoCastBoolean(n),c={nodes:[]},u=await q4.getServerList(r??x4),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(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:fS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(V4,"clusterNetwork")});var ZC=m((Wce,XC)=>{"use strict";var mS=require("joi"),zC=Pe(),{route_constraints:JC}=yE();XC.exports={setRoutesValidator:$4,deleteRoutesValidator:Y4};function $4(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:JC.required()});return zC.validateBySchema(e,t)}a($4,"setRoutesValidator");function Y4(e){let t=mS.object({routes:JC.required()});return zC.validateBySchema(e,t)}a(Y4,"deleteRoutesValidator")});var pS=m((zce,rU)=>{"use strict";var di=Tr(),SS=V(),m_=A(),jC=ZC(),{handleHDBError:eU,hdb_errors:K4}=W(),{HTTP_STATUS_CODES:tU}=K4,W4="cluster routes successfully set",Q4="cluster routes successfully deleted";rU.exports={setRoutes:z4,getRoutes:J4,deleteRoutes:X4};function z4(e){let t=jC.setRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=di.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=SS.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"?di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:W4,set:o,skipped:i}}a(z4,"setRoutes");function J4(){let e=di.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(J4,"getRoutes");function X4(e){let t=jC.deleteRoutesValidator(e);if(t)throw eU(t,t.message,tU.BAD_REQUEST,void 0,void 0,!0);let r=di.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 T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=SS.isEmptyOrZeroLength(s)?null:s,di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,di.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Q4,deleted:i,skipped:o}}a(X4,"deleteRoutes")});var nU=m((Xce,sU)=>{"use strict";var lc=require("alasql"),Ei=require("recursive-iterator"),$r=x(),Z4=V(),_c=A(),TS=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,eX(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=>_c.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=>!_c.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][_c.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=j4(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=>!_c.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new lc.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 j4(e){return e.filter(t=>t[_c.PERMS_CRUD_ENUM.READ])}a(j4,"filterReadRestrictedAttrs");function eX(e,t,r,s,n){tX(e,t,r,s,n)}a(eX,"interpretAST");function dc(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(dc,"addSchemaTableToMap");function tX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof lc.yy.Insert?iX(e,t,r):e instanceof lc.yy.Select?rX(e,t,r,s,n):e instanceof lc.yy.Update?sX(e,t,r):e instanceof lc.yy.Delete?nX(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(tX,"getRecordAttributesAST");function rX(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(Z4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{dc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),dc(c.table,t,r,s,n)});let o=new Ei(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{$r.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 Ei(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{$r.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 Ei(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{$r.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 Ei(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{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(rX,"getSelectAttributes");function sX(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(sX,"getUpdateAttributes");function nX(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ei(e.where),n=e.table.databaseid;dc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(nX,"getDeleteAttributes");function iX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ei(e.columns),n=e.into.databaseid;dc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(iX,"getInsertAttributes");function RS(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(RS,"pushAttribute");sU.exports=TS});var OS=m((jce,cU)=>{var S_=ba(),iU=require("chalk"),lr=x(),oU=require("prompt"),{promisify:oX}=require("util"),gS=A(),aX=require("fs-extra"),cX=require("path"),uX=V(),lX=nS(),aU=Q();aU.initSync();var _X=require("moment"),dX=oX(oU.get),EX=cX.join(aU.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);cU.exports={getFingerprint:hX,setLicense:fX,parseLicense:AS,register:mX,getRegistrationInfo:pX};async function fX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await AS(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(fX,"setLicense");async function hX(){let e={};try{e=await S_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(hX,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=S_.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 aX.writeFile(EX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function mX(){let e=await SX();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(mX,"register");async function SX(){let e=await S_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:iU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:iU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{oU.start()}catch(s){lr.error(s)}let r;try{r=await dX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(SX,"promptForRegistration");async function pX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await S_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(uX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=lX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=_X.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(pX,"getRegistrationInfo")});var lU=m((tue,uU)=>{"use strict";var TX=Be(),NS=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+TX.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"}};uU.exports=NS});var EU=m((sue,dU)=>{"use strict";var _U=Be(),bS=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+_U.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+_U.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"}};dU.exports=bS});var hU=m((iue,fU)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};fU.exports=yS});var SU=m((aue,mU)=>{"use strict";var RX=Be(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+RX.SERVER_SUFFIX.ADMIN,this.password=r}};mU.exports=IS});var US=m((uue,RU)=>{"use strict";var Ec=require("path"),g_=require("fs-extra"),gX=lU(),AX=EU(),OX=hU(),NX=SU(),wS=br(),ho=V(),Kt=Tr(),R_=A(),p_=Be(),{CONFIG_PARAMS:ze}=R_,hc=x(),A_=Q(),pU=xs(),CS=nt(),fc="clustering",bX=1e4,TU=5;RU.exports={generateNatsConfig:yX,removeNatsConfig:IX};async function yX(e=!1,t=void 0){A_.initSync();let r=A_.get(ze.ROOTPATH),s=Ec.join(r,fc,p_.PID_FILES.HUB),n=Ec.join(r,fc,p_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Ec.join(r,fc,p_.NATS_CONFIG_FILES.HUB_SERVER),c=Ec.join(r,fc,p_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await CS.checkNATSServerInstalled()||O_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await wS.listUsers(),p=Kt.getConfigFromFile(ze.CLUSTERING_USER),R=await wS.getClusterUser();(ho.isEmpty(R)||R.active!==!0)&&O_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await T_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await T_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await T_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await T_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===R_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new NX(Ze.username,pU.decrypt(Ze.hash))),k.push(new OX(Ze.username,pU.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!ho.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new gX(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=ho.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await g_.writeJson(o,b),hc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new AX(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await g_.writeJson(c,q),hc.trace(`Leaf server config written to ${c}`))}a(yX,"generateNatsConfig");async function T_(e){let t=A_.get(e);return ho.isEmpty(t)&&O_(`port undefined for '${e}'`),await ho.isPortTaken(t)&&O_(`'${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(T_,"isPortAvailable");function O_(e){let t=`Error generating clustering config: ${e}`;hc.error(t),console.error(t),process.exit(1)}a(O_,"generateNatsConfigError");async function IX(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=500;for(;i<TU;){try{let l=await CS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){hc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=TU)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 ho.async_set_timeout(o*i)}let c="0".repeat(bX),u=Ec.join(A_.get(ze.ROOTPATH),fc,r);await g_.writeFile(u,c),await g_.remove(u),hc.notify(e,"started.")}a(IX,"removeNatsConfig")});var yU=m((_ue,bU)=>{"use strict";var _r=Q(),wX=ba(),oe=A(),mc=Be(),Ks=require("path"),{PACKAGE_ROOT:b_}=A(),gU=Q(),N_=V(),mo="/dev/null",CX=Ks.join(b_,"launchServiceScripts"),AU=Ks.join(b_,"utility/scripts"),UX=Ks.join(AU,oe.HDB_RESTART_SCRIPT),OU=Ks.resolve(b_,"dependencies",`${process.platform}-${process.arch}`,mc.NATS_BINARY_NAME);function NU(){let t=wX.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return N_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:b_}}a(NU,"generateMainServerConfig");var DX=9930;function LX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",mc.NATS_CONFIG_FILES.HUB_SERVER),r=Ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=gU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==DX?"-"+s:""),script:OU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(LX,"generateNatsHubServerConfig");var MX=9940;function PX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",mc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=gU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=mc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==MX?"-"+s:""),script:OU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(PX,"generateNatsLeafServerConfig");function vX(){_r.initSync();let e=Ks.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:CX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mo,t.error_file=mo),t}a(vX,"generateClusteringUpgradeV4ServiceConfig");function BX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return N_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:AU},script:UX}}a(BX,"generateRestart");function HX(){return{apps:[NU()]}}a(HX,"generateAllServiceConfigs");bU.exports={generateAllServiceConfigs:HX,generateMainServerConfig:NU,generateRestart:BX,generateNatsHubServerConfig:LX,generateNatsLeafServerConfig:PX,generateClusteringUpgradeV4ServiceConfig:vX}});var PS=m((pue,GU)=>{"use strict";var Re=A(),qX=V(),Sc=US(),pc=nt(),hs=Be(),wn=yU(),y_=Q(),Ws=x(),FX=Es(),{startWorker:IU,onMessageFromWorkers:GX}=dt(),xX=fo(),kX=require("util"),CU=require("child_process"),{execFile:VX}=CU,Eue=kX.promisify(CU.exec),fue=require("systeminformation"),fe;GU.exports={enterPM2Mode:$X,start:fi,stop:DS,reload:UU,restart:DU,list:LS,describe:MU,connect:Qs,kill:zX,startAllServices:JX,startService:MS,getUniqueServicesList:PU,restartAllServices:XX,isServiceRegistered:vU,reloadStopStart:BU,restartHdb:LU,deleteProcess:WX,startClusteringProcesses:qU,startClusteringThreads:FU,isHdbRestartRunning:QX,isClusteringRunning:jX,stopClustering:ZX,reloadClustering:eZ};var{PACKAGE_ROOT:hue}=A(),mue=A(),{loggerWithTag:Sue}=Ws,Tc=!1;GX(e=>{e.type==="restart"&&y_.initSync(!0)});function $X(){Tc=!0}a($X,"enterPM2Mode");function Qs(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ws.setupConsoleLogging(),r&&t(r),e(s)})})}a(Qs,"connect");var Wt,YX=10,wU;function fi(e){if(Tc)return KX(e);let t=VX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!wU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<YX&&fi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=y_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&hs.LOG_LEVEL_HIERARCHY[i]>=hs.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===hs.LOG_LEVELS.ERR||l===hs.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=hs.LOG_LEVELS[d]}if(hs.LOG_LEVEL_HIERARCHY[i]>=hs.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===hs.LOG_LEVELS.ERR||l===hs.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{wU=!0,Wt&&(Wt.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)}Wt.push(t)}a(fi,"start");function KX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(KX,"startWithPM2");function DS(e){if(!Tc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(DS,"stop");function UU(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(UU,"reload");function DU(e){if(!Tc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(DU,"restart");function WX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(WX,"deleteProcess");async function LU(){await fi(wn.generateRestart())}a(LU,"restartHdb");async function QX(){let e=await LS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(QX,"isHdbRestartRunning");function LS(){return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(LS,"list");function MU(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(MU,"describe");function zX(){if(!Tc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(zX,"kill");async function JX(){try{await qU(),await FU(),await fi(wn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(JX,"startAllServices");async function MS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=wn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=wn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=wn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=wn.generateNatsHubServerConfig(),await fi(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=wn.generateNatsLeafServerConfig(),await fi(t),await Sc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=wn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await fi(t)}catch(t){throw fe.disconnect(),t}}a(MS,"startService");async function PU(){try{let e=await LS(),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 fe.disconnect(),e}}a(PU,"getUniqueServicesList");async function XX(e=[]){try{let t=!1,r=await PU();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await DU(o))}t&&await BU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(XX,"restartAllServices");async function vU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await xX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(vU,"isServiceRegistered");async function BU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?y_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):y_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await MU(e),s=qX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await DS(e),await MS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await LU():await UU(e)}a(BU,"reloadStopStart");var HU;async function qU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await MS(t)}}a(qU,"startClusteringProcesses");async function FU(){HU=IU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await pc.createWorkQueueStream(hs.WORK_QUEUE_CONSUMER_NAMES),await pc.updateIngestStreamConsumer(),await pc.updateLocalStreams();let e=await FX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ws.info("Starting clustering upgrade 4.0.0 process"),IU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(FU,"startClusteringThreads");async function ZX(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await HU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await DS(t)}}a(ZX,"stopClustering");async function jX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await vU(t)===!1)return!1}return!0}a(jX,"isClusteringRunning");async function eZ(){await Sc.generateNatsConfig(!0),await pc.reloadNATSHub(),await pc.reloadNATSLeaf(),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Sc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(eZ,"reloadClustering")});var xS=m((Rue,KU)=>{"use strict";var tZ=require("minimist"),{isMainThread:HS,parentPort:VU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:Rc}=He,ms=x(),qS=V(),I_=US(),So=nt(),vS=Be(),$U=Tr(),Ss=PS(),xU=fo(),rZ=hE(),{restartWorkers:w_,onMessageByType:sZ}=dt(),{handleHDBError:nZ,hdb_errors:iZ}=W(),{HTTP_STATUS_CODES:oZ}=iZ,C_=Q();C_.initSync();var gc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,aZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",kU="Clustering is not enabled so cannot be restarted",cZ="Invalid service",hi,Yr;KU.exports={restart:YU,restartService:FS};HS&&sZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?FS({service:e.workerType}):YU({operation:"restart"})});async function YU(e){Yr=Object.keys(e).length===0,hi=await Ss.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=tZ(process.argv);if(t.service){await FS(t);return}if(Yr&&!hi){console.error(aZ);return}if(Yr&&console.log(gc),hi){Ss.enterPM2Mode(),ms.notify(gc);let r=rZ(Object.keys(He.CONFIG_PARAM_MAP),!0);return qS.isEmptyOrZeroLength(Object.keys(r))||$U.updateConfigValue(void 0,void 0,r,!0,!0),lZ(),gc}return HS?(ms.notify(gc),await GS(),setTimeout(()=>{w_()},50)):VU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),gc}a(YU,"restart");async function FS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw nZ(new Error,cZ,oZ.BAD_REQUEST,void 0,void 0,!0);if(hi=await Ss.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!HS)return VU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Rc.clustering:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}Yr&&console.log("Restarting clustering"),ms.notify("Restarting clustering"),await GS();break;case Rc.clustering_config:case Rc["clustering config"]:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=kU;break}Yr&&console.log("Restarting clustering_config"),ms.notify("Restarting clustering_config"),await Ss.reloadClustering();break;case"custom_functions":case"custom functions":case Rc.harperdb:case Rc.http_workers:if(Yr&&!hi){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}Yr&&console.log("Restarting http_workers"),ms.notify("Restarting http_workers"),hi?await Ss.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{w_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ms.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(FS,"restartService");async function uZ(){await So.publishToStream(`${vS.SUBJECT_PREFIXES.TXN}.${vS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,vS.WORK_QUEUE_CONSUMER_NAMES.stream_name,So.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(uZ,"postDummyNatsMsg");async function lZ(){await GS(),await Ss.restart(He.HDB_PROC_DESCRIPTOR),await qS.async_set_timeout(2e3),C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await BS(),Yr&&(await So.closeConnection(),process.exit(0))}a(lZ,"restartPM2Mode");async function GS(){if(!$U.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await xU.getHDBProcessInfo()).clustering.length===0)ms.trace("Clustering not running, restart will start clustering services"),await I_.generateNatsConfig(!0),await Ss.startClusteringProcesses(),await Ss.startClusteringThreads(),await BS(),Yr&&await So.closeConnection();else{await uZ(),await I_.generateNatsConfig(!0),hi?(ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ss.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ss.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await xU.getHDBProcessInfo()).clustering.forEach(n=>{ms.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await qS.async_set_timeout(3e3),await BS(),await So.updateLocalStreams(),Yr&&await So.closeConnection(),ms.trace("Restart clustering restarting ingest and reply service threads");let t=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(GS,"restartClustering");async function BS(){await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(BS,"removeNatsConfig")});var sD=m((Oue,rD)=>{"use strict";var Aue=require("lodash"),Qt=A(),{handleHDBError:WU,hdb_errors:_Z}=W(),{HDB_ERROR_MSGS:dZ,HTTP_STATUS_CODES:EZ}=_Z,kS=x();rD.exports={getRolePermissions:hZ};var mi=Object.create(null),fZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),XU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),ZU=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),VS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...ZU(t,r,s,n)}),"table_perms_template"),QU=a((e,t=ZU())=>({attribute_name:e,describe:tD(t),[Ac]:t[Ac],[$S]:t[$S],[YS]:t[YS]}),"attr_perms_template"),zU=a((e,t=!1)=>({attribute_name:e,describe:t,[Ac]:t}),"timestamp_attr_perms_template"),{READ:Ac,INSERT:$S,UPDATE:YS}=Qt.PERMS_CRUD_ENUM,jU=Object.values(Qt.PERMS_CRUD_ENUM),eD=[Ac,$S,YS];function hZ(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[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(mi[t]&&mi[t].key===s)return mi[t].perms;let n=mZ(e,r);return mi[t]?mi[t].key=s:mi[t]=fZ(s),mi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.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 kS.error(s),kS.debug(r),WU(new Error,dZ.OUTDATED_PERMS_TRANSLATION_ERROR,EZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw kS.error(s),WU(new Error)}}}a(hZ,"getRolePermissions");function mZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.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]=SZ(t[i]);return}r[i]=XU(),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=pZ(c,u);r[i].describe||jU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=VS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=VS()})}),r}a(mZ,"translateRolePermissions");function SZ(e){let t=XU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=VS(!0,!0,!0,!0,!0)}),t}a(SZ,"createStructureUserPermissions");function pZ(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 Qt.TIME_STAMP_NAMES.includes(d)&&(E=zU(d,_[Ac])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=QU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=tD(_),n.attribute_permissions.push(_),c||TZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=zU(l):_=QU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=JU(n),n}else return e.describe=JU(e),e}a(pZ,"getTableAttrPerms");function JU(e){return jU.filter(t=>e[t]).length>0}a(JU,"getSchemaTableDescribePerm");function tD(e){return eD.filter(t=>e[t]).length>0}a(tD,"getAttributeDescribePerm");function TZ(e,t){eD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(TZ,"checkForHashPerms")});var nD={};je(nD,{Resources:()=>U_,keyArrayToString:()=>po,resetResources:()=>RZ,resources:()=>Cn});function RZ(){return Cn=new U_}function po(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var U_,Cn,Oc=Se(()=>{Yn();U_=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 Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(RZ,"resetResources");a(po,"keyArrayToString")});var To,KS=Se(()=>{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 Nc={};je(Nc,{authentication:()=>lD,login:()=>CZ,logout:()=>UZ,start:()=>wZ});async function lD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?NZ?OZ:[]:AZ?gZ:[];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 D_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),D_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(D_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await oD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new P_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?iD.notify(p):iD.error(p)},"authAuditLog"),_;if(s){if(_=Ro.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await tt.auth(T,p):null;break;case"Bearer":try{_=await(0,M_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,M_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return IZ&&(Ro.get(h)||(Ro.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:zs({error:R.message},e)}}Ro.set(s,_),yZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):bZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,L_.getSuperUser)());D_&&(e.session.update=function(f){if(!c){c=(0,cD.v4)();let T=`${(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",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,oD.put(f)},e.login=async function(f,h){e.user=await tt.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")&&Cn.loginPath?(d.status=302,d.headers.set("Location",Cn.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 T=o[h++];f.set(T,o[h++])}}return o=null,d}function wZ({server:e,port:t}){e.request(lD,{port:t||"all"}),aD||(aD=!0,setInterval(()=>{Ro=new Map},wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),uD.user.addListener(()=>{Ro=new Map}))}async function CZ(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 UZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var L_,M_,cD,wr,Rt,P_,uD,iD,gZ,AZ,OZ,NZ,oD,D_,bZ,yZ,IZ,Ro,aD,v_=Se(()=>{L_=C(br());Xr();Oc();M_=C(tc());de();cD=require("uuid"),wr=C(Q()),Rt=C(A()),P_=C(x());go();uD=C(Ia());KS();iD=(0,P_.loggerWithTag)("auth-event");wr.initSync();gZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),AZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),OZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),NZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=L_.findAndValidateUser;oD=st({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),D_=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,bZ=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,yZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,IZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ro=new Map;a(lD,"authentication");a(wZ,"start");a(CZ,"login");a(UZ,"logout")});var SD=m((vue,mD)=>{"use strict";var he=require("joi"),_D=require("fs-extra"),dD=require("path"),Xs=Pe(),ED=Q(),fD=A(),hD=x(),{hdb_errors:DZ}=W(),{HDB_ERROR_MSGS:Dt}=DZ,Js=/^[a-zA-Z0-9-_]+$/;mD.exports={getDropCustomFunctionValidator:MZ,setCustomFunctionValidator:PZ,addComponentValidator:qZ,dropCustomFunctionProjectValidator:FZ,packageComponentValidator:GZ,deployComponentValidator:xZ,setComponentFileValidator:vZ,getComponentFileValidator:HZ,dropComponentFileValidator:BZ};function B_(e,t,r){try{let s=ED.get(fD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=dD.join(s,t);return _D.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return hD.error(s),r.message(Dt.VALIDATION_ERR)}}a(B_,"checkProjectExists");function bc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(bc,"checkFilePath");function LZ(e,t,r,s){try{let n=ED.get(fD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=dD.join(n,e,t,r+".js");return _D.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return hD.error(n),s.message(Dt.VALIDATION_ERR)}}a(LZ,"checkFileExists");function MZ(e){let t=he.object({project:he.string().pattern(Js).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Js).custom(LZ.bind(null,e.project,e.type)).custom(bc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Xs.validateBySchema(e,t)}a(MZ,"getDropCustomFunctionValidator");function PZ(e){let t=he.object({project:he.string().pattern(Js).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(bc).required(),function_content:he.string().required()});return Xs.validateBySchema(e,t)}a(PZ,"setCustomFunctionValidator");function vZ(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(bc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(vZ,"setComponentFileValidator");function BZ(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(bc).optional()});return Xs.validateBySchema(e,t)}a(BZ,"dropComponentFileValidator");function HZ(e){let t=he.object({project:he.string().required(),file:he.string().custom(bc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(HZ,"getComponentFileValidator");function qZ(e){let t=he.object({project:he.string().pattern(Js).custom(B_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(qZ,"addComponentValidator");function FZ(e){let t=he.object({project:he.string().pattern(Js).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(FZ,"dropCustomFunctionProjectValidator");function GZ(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Xs.validateBySchema(e,t)}a(GZ,"packageComponentValidator");function xZ(e){let t=he.object({project:he.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Xs.validateBySchema(e,t)}a(xZ,"deployComponentValidator")});var JS=m((Hue,RD)=>{"use strict";var be=require("fs-extra"),WS=require("fast-glob"),me=require("path"),pD=require("tar-fs"),kZ=require("uuid").v4,QS=require("normalize-path"),ps=SD(),gt=x(),Ie=A(),$e=Q(),H_=Tr(),VZ=V(),{PACKAGE_ROOT:$Z}=A(),{handleHDBError:it,hdb_errors:YZ}=W(),{HDB_ERROR_MSGS:Un,HTTP_STATUS_CODES:ot}=YZ,KZ=me.join($Z,"application-template"),zS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function TD(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,Un.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(TD,"isCFEnabled");function WZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,Un.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(WZ,"customFunctionsStatus");function QZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{WS.sync(QS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:WS.sync(QS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:WS.sync(QS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,Un.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(QZ,"getCustomFunctions");function zZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ps.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,Un.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(zZ,"getCustomFunction");function JZ(e){TD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ps.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,Un.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(JZ,"setCustomFunction");function XZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ps.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,Un.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(XZ,"dropCustomFunction");function ZZ(e){TD(),e.project&&(e.project=me.parse(e.project).name);let t=ps.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(KZ,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,Un.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(ZZ,"addComponent");function jZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!VZ.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 H_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,Un.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(jZ,"dropCustomFunctionProject");async function ej(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(zS);let i=me.join(zS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),pD.pack(n,o).pipe(be.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=be.readFileSync(i,{encoding:"base64"});return await be.remove(i),{project:s,payload:c}}a(ej,"packageComponent");async function tj(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(zS,kZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(pD.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return H_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(tj,"deployComponent");async function rj(){let e=H_.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 be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(rj,"getComponents");async function sj(e){let t=ps.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(sj,"getComponentFile");async function nj(e){let t=ps.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(nj,"setComponentFile");async function ij(e){let t=ps.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),H_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(ij,"dropComponent");RD.exports={customFunctionsStatus:WZ,getCustomFunctions:QZ,getCustomFunction:zZ,setCustomFunction:JZ,dropCustomFunction:XZ,addComponent:ZZ,dropCustomFunctionProject:jZ,packageComponent:ej,deployComponent:tj,getComponents:rj,getComponentFile:sj,setComponentFile:nj,dropComponent:ij}});var XS=m((Fue,AD)=>{"use strict";var Ts=require("joi"),gD=Pe();AD.exports={readTransactionLogValidator:oj,deleteTransactionLogsBeforeValidator:aj};function oj(e){let t=Ts.object({schema:Ts.string().required(),table:Ts.string().required(),from:Ts.date().timestamp(),to:Ts.date().timestamp(),limit:Ts.number().min(1)});return gD.validateBySchema(e,t)}a(oj,"readTransactionLogValidator");function aj(e){let t=Ts.object({schema:Ts.string().required(),table:Ts.string().required(),timestamp:Ts.date().timestamp().required()});return gD.validateBySchema(e,t)}a(aj,"deleteTransactionLogsBeforeValidator")});var F_=m((xue,ID)=>{"use strict";var ZS=A(),q_=nt(),OD=V(),ND=Q(),bD=xs(),{handleHDBError:Ao,hdb_errors:cj}=W(),{HTTP_STATUS_CODES:Oo}=cj,{readTransactionLogValidator:uj,deleteTransactionLogsBeforeValidator:lj}=XS(),yD="This operation relies on clustering and cannot run with it disable.",_j="Logs successfully deleted from transaction log.",dj="All logs successfully deleted from transaction log.";ID.exports={readTransactionLog:Ej,deleteTransactionLogsBefore:fj};async function*Ej(e){let t=uj(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!ND.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,yD,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=OD.checkSchemaTableExist(r,s);if(n)throw Ao(new Error,n,Oo.NOT_FOUND,void 0,void 0,!0);let i=bD.createNatsTableStreamName(r,s),o=await q_.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===ZS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(Ej,"readTransactionLog");async function fj(e){let t=lj(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!ND.get(ZS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,yD,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=OD.checkSchemaTableExist(r,s);if(i)throw Ao(new Error,i,Oo.NOT_FOUND,void 0,void 0,!0);let o=bD.createNatsTableStreamName(r,s),{jsm:c}=await q_.getNATSReferences(),u=await q_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=_j,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=dj):d=(await q_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(fj,"deleteTransactionLogsBefore")});var V_=m((Vue,PD)=>{"use strict";var G_=require("joi"),x_=require("path"),wD=require("fs-extra"),{exec:hj}=require("child_process"),mj=require("util"),CD=mj.promisify(hj),yc=A(),{handleHDBError:No,hdb_errors:Sj}=W(),{HTTP_STATUS_CODES:bo}=Sj,wc=Q(),pj=Pe(),Ic=x();wc.initSync();var jS=wc.get(yc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),UD="npm install --omit=dev --json",Tj=`${UD} --dry-run`;PD.exports={installModules:Oj,auditModules:Nj,installAllRootModules:Rj,uninstallRootModule:gj,linkHarperdb:Aj};async function Rj(e=!1){await k_(),await Cc(e?"npm install --ignore-scripts":"npm install",wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(Rj,"installAllRootModules");async function gj(e){await Cc(`npm uninstall ${e}`,wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(gj,"uninstallRootModule");async function Aj(){await k_(),await Cc(`npm link ${yc.PACKAGE_ROOT}`,wc.get(yc.CONFIG_PARAMS.ROOTPATH))}a(Aj,"linkHarperdb");async function Cc(e,t=void 0){let{stdout:r,stderr:s}=await CD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return Ic.trace(r,s),r.replace(`
11
+ `,"")}a(Cc,"runCommand");async function Oj(e){Ic.info(`starting installModules for request: ${e}`);let t=MD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?Tj:UD;await k_(),await LD(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=x_.join(jS,u),_,d=null;try{let{stdout:E,stderr:f}=await CD(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=ID(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 bc.info(`finished installModules with response ${i}`),i}a(pj,"installModules");function ID(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(ID,"parseNPMStdErr");async function Tj(e){bc.info(`starting auditModules for request: ${e}`);let t=CD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r}=e;await F_(),await wD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=q_.join(zS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Ic("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=ID(u.stderr)}}return bc.info(`finished auditModules with response ${s}`),s}a(Tj,"auditModules");async function F_(){try{return await Ic("npm -v"),!0}catch{throw Ao(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Oo.BAD_REQUEST,void 0,void 0,!0)}}a(F_,"checkNPMInstalled");async function wD(e){if(!Array.isArray(e)||e.length===0)throw Ao(new Error,"projects argument must be an array with at least 1 element",Oo.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=q_.join(zS,i.toString());if(!await ND.pathExists(o)){t.push(i);continue}let u=q_.join(o,"package.json");await ND.pathExists(u)||r.push(i)}if(t.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Oo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Oo.BAD_REQUEST,void 0,void 0,!0)}a(wD,"checkProjectPaths");function CD(e){let t=H_.object({projects:H_.array().min(1).items(H_.string()).required(),dry_run:H_.boolean().default(!1)});return Ej.validateBySchema(e,t)}a(CD,"modulesValidator")});var LD=m((Bue,DD)=>{"use strict";var JS=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}};DD.exports=JS});var PD=m((que,MD)=>{"use strict";var XS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};MD.exports=XS});var jS=m((Gue,BD)=>{"use strict";var vD=LD(),Rj=PD(),{HDB_ERROR_MSGS:gj}=rr(),ZS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=gj.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 vD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Rj(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 vD(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}};BD.exports=ZS});var $_=m((kue,ZD)=>{"use strict";var ep=Ar(),x_=gr(),wr=kl(),Uc=Qn(),tp=jn(),Aj=Em(),Oj=nw(),Dc=Or(),k_=Am(),it=F(),Nj=bm(),bj=sc(),yj=oS(),Ij=ac(),wj=aS(),Cj=cS(),Uj=__(),Dj=dS(),rp=hS(),Js=x(),Lj=eU(),sp=RS(),FD=qS(),Ir=g(),GD=jU(),Mj=Eo(),xD=ja(),kD=(L_(),re(Ac)),VD=Tr(),dr=KS(),Pj=require("alasql"),$D=B_(),YD=G_(),KD=jS(),{handleHDBError:zt,hdb_errors:WD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:wc}=WD,P=new Map,QD="delete",Un="insert",Xs="read",mi="update",Cc="describe",HD=Uc.describeSchema.name,qD=Uc.describeTable.name,zD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},vj="catchup",Bj="handleGetJob",Hj="handleGetJobsByStartDate",V_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},qj=[wr.createTable.name,wr.createAttribute.name,wr.dropTable.name,wr.dropAttribute.name],JD={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};P.set(ep.insert.name,new q(!1,[Un]));P.set(ep.update.name,new q(!1,[mi]));P.set(ep.upsert.name,new q(!1,[Un,mi]));P.set(x_.searchByConditions.name,new q(!1,[Xs]));P.set(x_.searchByHash.name,new q(!1,[Xs]));P.set(x_.searchByValue.name,new q(!1,[Xs]));P.set(x_.search.name,new q(!1,[Xs]));P.set(wr.createSchema.name,new q(!0,[]));P.set(wr.createTable.name,new q(!0,[]));P.set(wr.createAttribute.name,new q(!1,[Un]));P.set(wr.dropSchema.name,new q(!0,[]));P.set(wr.dropTable.name,new q(!0,[]));P.set(wr.dropAttribute.name,new q(!0,[]));P.set(Uc.describeSchema.name,new q(!1,[Xs]));P.set(Uc.describeTable.name,new q(!1,[Xs]));P.set(tp.deleteRecord.name,new q(!1,[QD]));P.set(Dc.addUser.name,new q(!0,[]));P.set(Dc.alterUser.name,new q(!0,[]));P.set(Dc.dropUser.name,new q(!0,[]));P.set(Dc.listUsersExternal.name,new q(!0,[]));P.set(k_.listRoles.name,new q(!0,[]));P.set(k_.addRole.name,new q(!0,[]));P.set(k_.alterRole.name,new q(!0,[]));P.set(k_.dropRole.name,new q(!0,[]));P.set(Nj.name,new q(!0,[]));P.set(bj.name,new q(!0,[]));P.set(yj.name,new q(!0,[]));P.set(Ij.name,new q(!0,[]));P.set(wj.name,new q(!0,[]));P.set(Cj.name,new q(!0,[]));P.set(rp.setRoutes.name,new q(!0,[]));P.set(rp.getRoutes.name,new q(!0,[]));P.set(rp.deleteRoutes.name,new q(!0,[]));P.set(VD.setConfiguration.name,new q(!0,[]));P.set(Uj.clusterStatus.name,new q(!0,[]));P.set(Dj.name,new q(!0,[]));P.set(sp.getFingerprint.name,new q(!0,[]));P.set(sp.setLicense.name,new q(!0,[]));P.set(tp.deleteFilesBefore.name,new q(!0,[]));P.set(tp.deleteAuditLogsBefore.name,new q(!0,[]));P.set(FD.restart.name,new q(!0,[]));P.set(FD.restartService.name,new q(!0,[]));P.set(Aj.name,new q(!0,[]));P.set(Oj.name,new q(!0,[Xs]));P.set(Mj.systemInformation.name,new q(!0,[]));P.set(VD.getConfiguration.name,new q(!0,[]));P.set($D.readTransactionLog.name,new q(!0,[]));P.set($D.deleteTransactionLogsBefore.name,new q(!0,[]));P.set(YD.installModules.name,new q(!0,[]));P.set(YD.auditModules.name,new q(!0,[]));P.set(xD.createTokens.name,new q(!1,[]));P.set(xD.refreshOperationToken.name,new q(!1,[]));P.set(kD.login.name,new q(!1,[]));P.set(kD.logout.name,new q(!1,[]));P.set(dr.customFunctionsStatus.name,new q(!0,[]));P.set(dr.getCustomFunctions.name,new q(!0,[]));P.set(dr.getComponents.name,new q(!0,[]));P.set(dr.getComponentFile.name,new q(!0,[]));P.set(dr.setComponentFile.name,new q(!0,[]));P.set(dr.dropComponent.name,new q(!0,[]));P.set(dr.getCustomFunction.name,new q(!0,[]));P.set(dr.setCustomFunction.name,new q(!0,[]));P.set(dr.dropCustomFunction.name,new q(!0,[]));P.set(dr.addComponent.name,new q(!0,[]));P.set(dr.dropCustomFunctionProject.name,new q(!0,[]));P.set(dr.packageComponent.name,new q(!0,[]));P.set(dr.deployComponent.name,new q(!0,[]));P.set(sp.getRegistrationInfo.name,new q(!1,[]));P.set(Dc.userInfo.name,new q(!1,[]));P.set(Uc.describeAll.name,new q(!1,[]));P.set(Bj,new q(!1,[]));P.set(Hj,new q(!0,[]));P.set(vj,new q(!0,[]));P.set(V_.CSV_DATA_LOAD,new q(!1,[Un,mi]));P.set(V_.CSV_URL_LOAD,new q(!1,[Un,mi]));P.set(V_.CSV_FILE_LOAD,new q(!1,[Un,mi]));P.set(V_.IMPORT_FROM_S3,new q(!1,[Un,mi]));P.set(JD.EXPORT_TO_S3,new q(!0,[]));P.set(JD.EXPORT_LOCAL,new q(!0,[]));P.set(Ir.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[QD]));P.set(Ir.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Xs]));P.set(Ir.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Un]));P.set(Ir.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[mi]));ZD.exports={verifyPerms:Gj,verifyPermsAst:Fj,verifyBulkLoadAttributePerms:kj};function Fj(e,t,r){if(Js.isEmptyOrZeroLength(e))throw it.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Js.isEmptyOrZeroLength(t))throw it.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Js.isEmptyOrZeroLength(r))throw it.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new KD,n=new Lj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw it.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&zD[r])throw zt(new Error,At.DROP_SYSTEM,wc.FORBIDDEN);if(c&&!u)return null;let l=GD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof Pj.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 _=XD(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=ip(t.role.permission,E,d[f]);np(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(Fj,"verifyPermsAst");function Gj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw it.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,wc.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 KD;if(Js.isEmptyOrZeroLength(e.hdb_user.role)||Js.isEmptyOrZeroLength(e.hdb_user.role.permission))return it.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.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(Ir.SYSTEM_SCHEMA_NAME)||n===Ir.SYSTEM_SCHEMA_NAME;if(_&&zD[r])throw zt(new Error,At.DROP_SYSTEM,wc.FORBIDDEN);if(u&&!_||l===!0&&(r===wr.createSchema.name||r===wr.dropSchema.name))return null;if(qj.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=GD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===HD||r===qD){if(n===Ir.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===HD&&(!d[n]||!d[n][Cc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===qD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Cc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=XD(e.hdb_user,r,o,c,s);if(E)return E;if(P.get(r)&&P.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ir.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],S=d[n].tables[i];S[Ir.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[Ir.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(y=>y.attribute),e.get_attributes=T)}let f=xj(e),h=ip(e.hdb_user.role.permission,n,i);return np(f,h,r,i,n,c,s),c.getPermsResponse()}a(Gj,"verifyPerms");function XD(e,t,r,s,n){if(Js.arrayHasEmptyValues([e,t,r]))throw it.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||P.get(t).requires_su))return null;if(!P.get(t))throw it.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),wc.BAD_REQUEST);if(P.get(t)&&P.get(t).requires_su)return it.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Cc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Cc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=P.get(t).perms;!Js.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],S=d[T];(S==null||S===!1)&&(it.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw it.error(f),it.error(E),zt(WD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(XD,"hasPermissions");function np(e,t,r,s,n,i,o){if(!e||!t)throw it.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=P.get(r).perms;if(!c||c==="")throw it.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Js.isEmptyOrZeroLength(t))return it.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[Cc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Ir.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Xs)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,wc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(np,"checkAttributePerms");function xj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ir.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){it.info(r)}return t}a(xj,"getRecordAttributes");function ip(e,t,r){let s=new Map;if(Js.isEmpty(e))return it.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{it.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ip,"getAttributePermissions");function kj(e,t,r,s,n,i,o){let c=new Set(i),u=ip(e,s,n);np(c,u,t,n,s,o,r)}a(kj,"verifyBulkLoadAttributePerms")});var K_=m(($ue,sL)=>{"use strict";sL.exports={evaluateSQL:t5,processAST:rL,convertSQLToAST:tL,checkASTPermissions:eL};var Vj=Ar(),jD=require("util"),$j=jD.callbackify(Vj.insert),Yj=gr().search,Kj=tI().update,Wj=jD.callbackify(Kj),Qj=sI().convertDelete,Dn=require("alasql"),zj=$_(),Y_=F(),Jj=bl(),Xj=x(),Lc=g(),{hdb_errors:Zj,handleHDBError:op}=W(),{HTTP_STATUS_CODES:ap}=Zj;Jj(Dn);var jj=403,e5="There was a problem performing this insert. Please check the logs and try again.",cp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function t5(e,t){let r=e.parsed_sql_object;if(!r){r=tL(e.sql);let s,n=r.ast.statements[0];if(n instanceof Dn.yy.Insert?s=n.into.databaseid:n instanceof Dn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Dn.yy.Update||n instanceof Dn.yy.Delete?s=n.table.databaseid:Y_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Dn.yy.Select)&&Xj.isEmptyOrZeroLength(s))return t("No schema specified",null)}rL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(t5,"evaluateSQL");function eL(e,t){let r;try{r=zj.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(eL,"checkASTPermissions");function tL(e){let t=new cp;if(!e)throw op(new Error,"The 'sql' parameter is missing from the request body",ap.BAD_REQUEST);try{let r=e.trim(),s=Dn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?op(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ap.BAD_REQUEST):op(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ap.BAD_REQUEST)}return t}a(tL,"convertSQLToAST");function rL(e,t,r){try{let s=r5;if(!e.bypass_auth&&!t.permissions_checked){let i=eL(e,t);if(i&&i.length>0)return r(jj,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Lc.VALID_SQL_OPS_ENUM.SELECT:s=Yj,n=t.ast.statements[0];break;case Lc.VALID_SQL_OPS_ENUM.INSERT:s=s5;break;case Lc.VALID_SQL_OPS_ENUM.UPDATE:s=Wj;break;case Lc.VALID_SQL_OPS_ENUM.DELETE:s=Qj;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(rL,"processAST");function r5(e,t){Y_.info(e),t("unknown sql statement")}a(r5,"nullFunction");function s5({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=n5(i,e.values)}catch(o){return r(o)}$j(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Y_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(s5,"convertInsert");function n5(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]]=Dn.compile(`SELECT ${n.toString()} AS [${Lc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Y_.error(r),new Error(e5)}}a(n5,"createDataObjects")});var up=m((Kue,iL)=>{"use strict";var{S3:i5,GetObjectCommand:o5}=require("@aws-sdk/client-s3");iL.exports={getFileStreamFromS3:a5,getS3AuthObj:nL};async function a5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await nL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new o5(r))).Body}a(a5,"getFileStreamFromS3");function nL(e,t,r){return new i5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(nL,"getS3AuthObj")});var W_=m((Que,hL)=>{"use strict";var cL=gr(),c5=K_(),u5=up(),{AsyncParser:l5,Transform:_5}=require("json2csv"),Pc=require("stream"),Er=x(),lp=require("fs-extra"),d5=require("path"),Cr=F(),{promisify:uL}=require("util"),Mc=x(),{handleHDBError:Je,hdb_errors:E5}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Xe}=E5,{streamAsJSON:f5}=KE(),{Upload:h5}=require("@aws-sdk/lib-storage"),oL=["search_by_value","search_by_hash","sql"],aL=["json","csv"],lL="json",_L="csv",m5="Successfully exported JSON locally.",S5="Successfully exported CSV locally.",p5=1e3,T5=cL.searchByHash,R5=cL.searchByValue,g5=uL(c5.evaluateSQL),A5=uL(Pc.finished);hL.exports={export_to_s3:y5,export_local:O5,toCsvStream:dL};async function O5(e){Cr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=EL(e);if(!Er.isEmpty(t))throw Cr.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(Er.isEmpty(e.path))throw Cr.error(Jt.MISSING_VALUE("path")),Je(new Error,Jt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(Er.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(d5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Er.buildFolderPath(e.path,r);await N5(e.path);let n=await fL(e);return await b5(s,e.format,n)}a(O5,"export_local");async function N5(e){if(Cr.trace("in confirmPath"),Er.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await lp.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,Cr.error(s),Je(new Error,s,Xe.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 Cr.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}a(N5,"confirmPath");async function b5(e,t,r){if(Cr.trace("in saveToLocal"),Mc.isEmptyOrZeroLength(e))throw Je(new Error,Jt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(Mc.isEmptyOrZeroLength(t))throw Je(new Error,Jt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(Mc.isEmpty(r))throw Je(new Error,Jt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===lL){let s=lp.createWriteStream(e);return f5(r).pipe(s),await A5(s),{message:m5,path:e}}else if(t===_L){let s=lp.createWriteStream(e),n=Pc.Readable.from(r),i={},o={objectMode:!0};return await new l5(i,o).fromInput(n).toOutput(s).promise(!1),{message:S5,path:e}}throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}a(b5,"saveToLocal");async function y5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,Jt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,Jt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,Jt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,Jt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=EL(e);if(!Er.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Cr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await fL(e)}catch(u){throw Cr.error(u),u}let s,n=await u5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Pc.PassThrough;if(e.format===_L){i=e.s3.key+".csv";let u=dL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===lL){i=e.s3.key+".json";let u=new Pc.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%p5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new h5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(y5,"export_to_s3");function dL(e){let t=Pc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new _5(r,s);return t.pipe(n)}a(dL,"toCsvStream");function EL(e){if(Cr.trace("in exportCoreValidation"),Er.isEmpty(e.format))return"format missing";if(aL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${aL.join(", ")}`;let t=e.search_operation.operation;if(Er.isEmpty(t))return"search_operation.operation missing";if(oL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${oL.join(", ")}`}a(EL,"exportCoreValidation");async function fL(e){Cr.trace("in getRecords");let t,r;if(Mc.isEmpty(e.search_operation)||Mc.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,Jt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=R5;break;case"search_by_hash":t=T5;break;case"sql":t=g5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Cr.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(fL,"getRecords")});var gL={};Ze(gL,{contentTypes:()=>TL,findBestSerializer:()=>X_,getDeserializer:()=>No,registerContentHandlers:()=>dp,serialize:()=>Ep,serializeMessage:()=>Ws});function I5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function dp(e){e.register(C5,{serializers:[{regex:/^application\/json$/,serializer:Q_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Si.EncoderStream(vc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?J_.Readable.from((0,ps.encodeIter)(t,vc)):(0,ps.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_p.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ps.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Si.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function X_(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=dt.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(dt.keys()).join(", "))}};r=dt.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Ep(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers["Content-Type"]=e.contentType,r.headers.Vary="Accept-Encoding",n=e.data),e instanceof Uint8Array)r.headers["Content-Type"]="application/octet-stream",r.headers.Vary="Accept-Encoding",n=e;else{let i=X_(t);if(r.headers.Vary="Accept, Accept-Encoding",r.headers["Content-Type"]=i.type,e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers["Content-Encoding"]="br",o=o.pipe((0,z_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,o)=>(0,z_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ws(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=X_(t);return r=t.serialize=s.serializer.serialize,r(e)}function U5(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 No(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=dt.get(e)?.deserialize||SL(e,s);return o=>U5(o).then(i)}return dt.get(e)?.deserialize||SL(e,s)}function SL(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 D5(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 Q_,_p,ps,Si,z_,J_,pL,vc,dt,TL,mL,RL,w5,C5,To=pe(()=>{Q_=D(KE()),_p=D(W_()),ps=require("msgpackr"),Si=require("cbor-x"),z_=require("zlib"),J_=require("stream");_n();pL=require("../index"),vc={useRecords:!1,useToJSON:!0};mt.contentType=function(e,t){dt.set(e,t)};dt=new Map,TL=dt;(0,pL._assignPackageExport)("contentTypes",TL);dt.set("application/json",{serializeStream:Q_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});mL=new Si.Encoder(vc);dt.set("application/cbor",{serializeStream(e){return new Si.EncoderStream(vc).end(e)},serialize:mL.encode,deserialize:mL.decode,q:1});dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?J_.Readable.from((0,ps.encodeIter)(e,vc)):(0,ps.pack)(e)},serialize:ps.pack,deserialize:ps.unpack,q:.9});dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_p.toCsvStream)(e)},q:.1});dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});dt.set("text/event-stream",{serializeStream:function(e){return J_.Readable.from(D5(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
13
+ `,""):null}catch(E){E.stderr?i[u].npm_error=DD(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 Ic.info(`finished installModules with response ${i}`),i}a(Oj,"installModules");function DD(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
14
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(DD,"parseNPMStdErr");async function Nj(e){Ic.info(`starting auditModules for request: ${e}`);let t=MD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r}=e;await k_(),await LD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=x_.join(jS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Cc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=DD(u.stderr)}}return Ic.info(`finished auditModules with response ${s}`),s}a(Nj,"auditModules");async function k_(){try{return await Cc("npm -v"),!0}catch{throw No(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",bo.BAD_REQUEST,void 0,void 0,!0)}}a(k_,"checkNPMInstalled");async function LD(e){if(!Array.isArray(e)||e.length===0)throw No(new Error,"projects argument must be an array with at least 1 element",bo.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=x_.join(jS,i.toString());if(!await wD.pathExists(o)){t.push(i);continue}let u=x_.join(o,"package.json");await wD.pathExists(u)||r.push(i)}if(t.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,bo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,bo.BAD_REQUEST,void 0,void 0,!0)}a(LD,"checkProjectPaths");function MD(e){let t=G_.object({projects:G_.array().min(1).items(G_.string()).required(),dry_run:G_.boolean().default(!1)});return pj.validateBySchema(e,t)}a(MD,"modulesValidator")});var BD=m((Yue,vD)=>{"use strict";var ep=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}};vD.exports=ep});var qD=m((Wue,HD)=>{"use strict";var tp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};HD.exports=tp});var sp=m((zue,GD)=>{"use strict";var FD=BD(),bj=qD(),{HDB_ERROR_MSGS:yj}=rr(),rp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=yj.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 FD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new bj(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 FD(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}};GD.exports=rp});var W_=m((Xue,rL)=>{"use strict";var np=Nr(),$_=Or(),Ur=Yl(),Lc=zn(),ip=ei(),Ij=mm(),wj=aw(),Mc=br(),Y_=bm(),at=x(),Cj=wm(),Uj=ic(),Dj=uS(),Lj=uc(),Mj=lS(),Pj=_S(),vj=f_(),Bj=hS(),op=pS(),Zs=V(),Hj=nU(),ap=OS(),VD=xS(),Cr=A(),$D=sD(),qj=fo(),YD=tc(),KD=(v_(),re(Nc)),WD=Tr(),dr=JS(),Fj=require("alasql"),QD=F_(),zD=V_(),JD=sp(),{handleHDBError:zt,hdb_errors:XD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Uc}=XD,M=new Map,ZD="delete",Dn="insert",js="read",Si="update",Dc="describe",xD=Lc.describeSchema.name,kD=Lc.describeTable.name,jD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Gj="catchup",xj="handleGetJob",kj="handleGetJobsByStartDate",K_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Vj=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],eL={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},H=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};M.set(np.insert.name,new H(!1,[Dn]));M.set(np.update.name,new H(!1,[Si]));M.set(np.upsert.name,new H(!1,[Dn,Si]));M.set($_.searchByConditions.name,new H(!1,[js]));M.set($_.searchByHash.name,new H(!1,[js]));M.set($_.searchByValue.name,new H(!1,[js]));M.set($_.search.name,new H(!1,[js]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Dn]));M.set(Ur.dropSchema.name,new H(!0,[]));M.set(Ur.dropTable.name,new H(!0,[]));M.set(Ur.dropAttribute.name,new H(!0,[]));M.set(Lc.describeSchema.name,new H(!1,[js]));M.set(Lc.describeTable.name,new H(!1,[js]));M.set(ip.deleteRecord.name,new H(!1,[ZD]));M.set(Mc.addUser.name,new H(!0,[]));M.set(Mc.alterUser.name,new H(!0,[]));M.set(Mc.dropUser.name,new H(!0,[]));M.set(Mc.listUsersExternal.name,new H(!0,[]));M.set(Y_.listRoles.name,new H(!0,[]));M.set(Y_.addRole.name,new H(!0,[]));M.set(Y_.alterRole.name,new H(!0,[]));M.set(Y_.dropRole.name,new H(!0,[]));M.set(Cj.name,new H(!0,[]));M.set(Uj.name,new H(!0,[]));M.set(Dj.name,new H(!0,[]));M.set(Lj.name,new H(!0,[]));M.set(Mj.name,new H(!0,[]));M.set(Pj.name,new H(!0,[]));M.set(op.setRoutes.name,new H(!0,[]));M.set(op.getRoutes.name,new H(!0,[]));M.set(op.deleteRoutes.name,new H(!0,[]));M.set(WD.setConfiguration.name,new H(!0,[]));M.set(vj.clusterStatus.name,new H(!0,[]));M.set(Bj.name,new H(!0,[]));M.set(ap.getFingerprint.name,new H(!0,[]));M.set(ap.setLicense.name,new H(!0,[]));M.set(ip.deleteFilesBefore.name,new H(!0,[]));M.set(ip.deleteAuditLogsBefore.name,new H(!0,[]));M.set(VD.restart.name,new H(!0,[]));M.set(VD.restartService.name,new H(!0,[]));M.set(Ij.name,new H(!0,[]));M.set(wj.name,new H(!0,[js]));M.set(qj.systemInformation.name,new H(!0,[]));M.set(WD.getConfiguration.name,new H(!0,[]));M.set(QD.readTransactionLog.name,new H(!0,[]));M.set(QD.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(zD.installModules.name,new H(!0,[]));M.set(zD.auditModules.name,new H(!0,[]));M.set(YD.createTokens.name,new H(!1,[]));M.set(YD.refreshOperationToken.name,new H(!1,[]));M.set(KD.login.name,new H(!1,[]));M.set(KD.logout.name,new H(!1,[]));M.set(dr.customFunctionsStatus.name,new H(!0,[]));M.set(dr.getCustomFunctions.name,new H(!0,[]));M.set(dr.getComponents.name,new H(!0,[]));M.set(dr.getComponentFile.name,new H(!0,[]));M.set(dr.setComponentFile.name,new H(!0,[]));M.set(dr.dropComponent.name,new H(!0,[]));M.set(dr.getCustomFunction.name,new H(!0,[]));M.set(dr.setCustomFunction.name,new H(!0,[]));M.set(dr.dropCustomFunction.name,new H(!0,[]));M.set(dr.addComponent.name,new H(!0,[]));M.set(dr.dropCustomFunctionProject.name,new H(!0,[]));M.set(dr.packageComponent.name,new H(!0,[]));M.set(dr.deployComponent.name,new H(!0,[]));M.set(ap.getRegistrationInfo.name,new H(!1,[]));M.set(Mc.userInfo.name,new H(!1,[]));M.set(Lc.describeAll.name,new H(!1,[]));M.set(xj,new H(!1,[]));M.set(kj,new H(!0,[]));M.set(Gj,new H(!0,[]));M.set(K_.CSV_DATA_LOAD,new H(!1,[Dn,Si]));M.set(K_.CSV_URL_LOAD,new H(!1,[Dn,Si]));M.set(K_.CSV_FILE_LOAD,new H(!1,[Dn,Si]));M.set(K_.IMPORT_FROM_S3,new H(!1,[Dn,Si]));M.set(eL.EXPORT_TO_S3,new H(!0,[]));M.set(eL.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[ZD]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[js]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Dn]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[Si]));rL.exports={verifyPerms:Yj,verifyPermsAst:$j,verifyBulkLoadAttributePerms:Wj};function $j(e,t,r){if(Zs.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Zs.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Zs.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new JD,n=new Hj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&jD[r])throw zt(new Error,At.DROP_SYSTEM,Uc.FORBIDDEN);if(c&&!u)return null;let l=$D.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof Fj.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 _=tL(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=up(t.role.permission,E,d[f]);cp(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a($j,"verifyPermsAst");function Yj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,Uc.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 JD;if(Zs.isEmptyOrZeroLength(e.hdb_user.role)||Zs.isEmptyOrZeroLength(e.hdb_user.role.permission))return at.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.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(Cr.SYSTEM_SCHEMA_NAME)||n===Cr.SYSTEM_SCHEMA_NAME;if(_&&jD[r])throw zt(new Error,At.DROP_SYSTEM,Uc.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(Vj.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=$D.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===xD||r===kD){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===xD&&(!d[n]||!d[n][Dc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===kD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Dc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=tL(e.hdb_user,r,o,c,s);if(E)return E;if(M.get(r)&&M.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Cr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],p=d[n].tables[i];p[Cr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(O=>O[Cr.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=T)}let f=Kj(e),h=up(e.hdb_user.role.permission,n,i);return cp(f,h,r,i,n,c,s),c.getPermsResponse()}a(Yj,"verifyPerms");function tL(e,t,r,s,n){if(Zs.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw at.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),Uc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Dc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Dc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Zs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(at.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),zt(XD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(tL,"hasPermissions");function cp(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Zs.isEmptyOrZeroLength(t))return at.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Dc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Cr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==js)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Uc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(cp,"checkAttributePerms");function Kj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Cr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){at.info(r)}return t}a(Kj,"getRecordAttributes");function up(e,t,r){let s=new Map;if(Zs.isEmpty(e))return at.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{at.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(up,"getAttributePermissions");function Wj(e,t,r,s,n,i,o){let c=new Set(i),u=up(e,s,n);cp(c,u,t,n,s,o,r)}a(Wj,"verifyBulkLoadAttributePerms")});var z_=m((jue,aL)=>{"use strict";aL.exports={evaluateSQL:o5,processAST:oL,convertSQLToAST:iL,checkASTPermissions:nL};var Qj=Nr(),sL=require("util"),zj=sL.callbackify(Qj.insert),Jj=Or().search,Xj=nI().update,Zj=sL.callbackify(Xj),jj=oI().convertDelete,Ln=require("alasql"),e5=W_(),Q_=x(),t5=Cl(),r5=V(),Pc=A(),{hdb_errors:s5,handleHDBError:lp}=W(),{HTTP_STATUS_CODES:_p}=s5;t5(Ln);var n5=403,i5="There was a problem performing this insert. Please check the logs and try again.",dp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function o5(e,t){let r=e.parsed_sql_object;if(!r){r=iL(e.sql);let s,n=r.ast.statements[0];if(n instanceof Ln.yy.Insert?s=n.into.databaseid:n instanceof Ln.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Ln.yy.Update||n instanceof Ln.yy.Delete?s=n.table.databaseid:Q_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Ln.yy.Select)&&r5.isEmptyOrZeroLength(s))return t("No schema specified",null)}oL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(o5,"evaluateSQL");function nL(e,t){let r;try{r=e5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(nL,"checkASTPermissions");function iL(e){let t=new dp;if(!e)throw lp(new Error,"The 'sql' parameter is missing from the request body",_p.BAD_REQUEST);try{let r=e.trim(),s=Ln.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?lp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,_p.BAD_REQUEST):lp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",_p.BAD_REQUEST)}return t}a(iL,"convertSQLToAST");function oL(e,t,r){try{let s=a5;if(!e.bypass_auth&&!t.permissions_checked){let i=nL(e,t);if(i&&i.length>0)return r(n5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Pc.VALID_SQL_OPS_ENUM.SELECT:s=Jj,n=t.ast.statements[0];break;case Pc.VALID_SQL_OPS_ENUM.INSERT:s=c5;break;case Pc.VALID_SQL_OPS_ENUM.UPDATE:s=Zj;break;case Pc.VALID_SQL_OPS_ENUM.DELETE:s=jj;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(oL,"processAST");function a5(e,t){Q_.info(e),t("unknown sql statement")}a(a5,"nullFunction");function c5({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=u5(i,e.values)}catch(o){return r(o)}zj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Q_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(c5,"convertInsert");function u5(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]]=Ln.compile(`SELECT ${n.toString()} AS [${Pc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Q_.error(r),new Error(i5)}}a(u5,"createDataObjects")});var Ep=m((tle,uL)=>{"use strict";var{S3:l5,GetObjectCommand:_5}=require("@aws-sdk/client-s3");uL.exports={getFileStreamFromS3:d5,getS3AuthObj:cL};async function d5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await cL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new _5(r))).Body}a(d5,"getFileStreamFromS3");function cL(e,t,r){return new l5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(cL,"getS3AuthObj")});var J_=m((sle,TL)=>{"use strict";var dL=Or(),E5=z_(),f5=Ep(),{AsyncParser:h5,Transform:m5}=require("json2csv"),Bc=require("stream"),Er=V(),fp=require("fs-extra"),S5=require("path"),Dr=x(),{promisify:EL}=require("util"),vc=V(),{handleHDBError:Je,hdb_errors:p5}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Xe}=p5,{streamAsJSON:T5}=zE(),{Upload:R5}=require("@aws-sdk/lib-storage"),lL=["search_by_value","search_by_hash","sql"],_L=["json","csv"],fL="json",hL="csv",g5="Successfully exported JSON locally.",A5="Successfully exported CSV locally.",O5=1e3,N5=dL.searchByHash,b5=dL.searchByValue,y5=EL(E5.evaluateSQL),I5=EL(Bc.finished);TL.exports={export_to_s3:D5,export_local:w5,toCsvStream:mL};async function w5(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=SL(e);if(!Er.isEmpty(t))throw Dr.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(Er.isEmpty(e.path))throw Dr.error(Jt.MISSING_VALUE("path")),Je(new Error,Jt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(Er.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(S5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Er.buildFolderPath(e.path,r);await C5(e.path);let n=await pL(e);return await U5(s,e.format,n)}a(w5,"export_local");async function C5(e){if(Dr.trace("in confirmPath"),Er.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await fp.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,Dr.error(s),Je(new Error,s,Xe.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 Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}a(C5,"confirmPath");async function U5(e,t,r){if(Dr.trace("in saveToLocal"),vc.isEmptyOrZeroLength(e))throw Je(new Error,Jt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(vc.isEmptyOrZeroLength(t))throw Je(new Error,Jt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(vc.isEmpty(r))throw Je(new Error,Jt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===fL){let s=fp.createWriteStream(e);return T5(r).pipe(s),await I5(s),{message:g5,path:e}}else if(t===hL){let s=fp.createWriteStream(e),n=Bc.Readable.from(r),i={},o={objectMode:!0};return await new h5(i,o).fromInput(n).toOutput(s).promise(!1),{message:A5,path:e}}throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}a(U5,"saveToLocal");async function D5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,Jt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,Jt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,Jt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,Jt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=SL(e);if(!Er.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await pL(e)}catch(u){throw Dr.error(u),u}let s,n=await f5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Bc.PassThrough;if(e.format===hL){i=e.s3.key+".csv";let u=mL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===fL){i=e.s3.key+".json";let u=new Bc.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%O5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,Jt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new R5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(D5,"export_to_s3");function mL(e){let t=Bc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new m5(r,s);return t.pipe(n)}a(mL,"toCsvStream");function SL(e){if(Dr.trace("in exportCoreValidation"),Er.isEmpty(e.format))return"format missing";if(_L.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${_L.join(", ")}`;let t=e.search_operation.operation;if(Er.isEmpty(t))return"search_operation.operation missing";if(lL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${lL.join(", ")}`}a(SL,"exportCoreValidation");async function pL(e){Dr.trace("in getRecords");let t,r;if(vc.isEmpty(e.search_operation)||vc.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,Jt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=b5;break;case"search_by_hash":t=N5;break;case"sql":t=y5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(pL,"getRecords")});var bL={};je(bL,{contentTypes:()=>OL,findBestSerializer:()=>ed,getDeserializer:()=>yo,registerContentHandlers:()=>mp,serialize:()=>Sp,serializeMessage:()=>zs});function L5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function mp(e){e.register(P5,{serializers:[{regex:/^application\/json$/,serializer:X_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new pi.EncoderStream(Hc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?j_.Readable.from((0,Rs.encodeIter)(t,Hc)):(0,Rs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Rs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,pi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function ed(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=Et.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(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Sp(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=ed(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,Z_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Z_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=ed(t);return r=t.serialize=s.serializer.serialize,r(e)}function v5(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 yo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||gL(e,s);return o=>v5(o).then(i)}return Et.get(e)?.deserialize||gL(e,s)}function gL(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 B5(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 X_,hp,Rs,pi,Z_,j_,AL,Hc,Et,OL,RL,NL,M5,P5,go=Se(()=>{X_=C(zE()),hp=C(J_()),Rs=require("msgpackr"),pi=require("cbor-x"),Z_=require("zlib"),j_=require("stream");Xr();AL=require("../index"),Hc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,OL=Et;(0,AL._assignPackageExport)("contentTypes",OL);Et.set("application/json",{serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});RL=new pi.Encoder(Hc);Et.set("application/cbor",{serializeStream(e){return new pi.EncoderStream(Hc).end(e)},serialize:RL.encode,deserialize:RL.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?j_.Readable.from((0,Rs.encodeIter)(e,Hc)):(0,Rs.pack)(e)},serialize:Rs.pack,deserialize:Rs.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,hp.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return j_.Readable.from(B5(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
16
16
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
17
17
  `}return e.id&&(t+="id: "+e.id+`
18
18
  `),e.retry&&(t+="retry: "+e.retry+`
19
19
  `),t+`
20
20
  `}else return"data: "+e+`
21
21
 
22
- `},q:.8});dt.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()}});RL={type:"application/json",serializeStream:Q_.streamAsJSON,serialize:JSON.stringify,deserialize:I5,q:.8};dt.set("*/*",RL);dt.set("",RL);a(I5,"tryJSONParse");a(dp,"registerContentHandlers");w5=require("fastify-plugin"),C5=w5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=X_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(X_,"findBestSerializer");a(Ep,"serialize");a(Ws,"serializeMessage");a(U5,"streamToBuffer");a(No,"getDeserializer");a(SL,"deserializerUnknownType");a(D5,"transformIterable")});var Sp={};Ze(Sp,{start:()=>P5});async function M5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Lu(e);let s=performance.now(),n;try{let i=new mp;e.responseHeaders=i;let o=e.url.slice(1),c=hp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=No(e.headers["content-type"],!0)(e.body)}catch(T){throw new Bc.ClientError(T,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.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 Bc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Bc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){L5[0]=f;let T=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),S=e.headers["if-none-match"];S&&T==S?(_?.onDone&&_.onDone(),E=304,_=void 0):i.ETag=T}e.createdResource&&(E=201),e.newLocation&&(i.Location=e.newLocation);let h={status:E,headers:i,body:void 0};return i["Server-Timing"]=`db;dur=${d.toFixed(2)}`,oi(d,"TTFB",n,r),Ll(E<400,"success",n,r),_!==void 0&&(h.body=Ep(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let o=performance.now()-s;oi(o,"TTFB",n,r),Ll(!1,"success",n,r),i.http_resp_code||console.error(i);let c={};return i.http_resp_code===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),c.Allow=i.allow.map(u=>u.toUpperCase()).join(", "))),{status:i.http_resp_code||500,headers:c,body:Ws(i.toString(),e)}}}function P5(e){if(AL)return;AL=!0,hp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return M5(r,s)}),e.server.ws(async(r,s,n)=>{OL++,fp||(setTimeout(()=>{console.log("connection count",OL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),fp=!1},1e3),fp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=No(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 hp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Ws(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Ws(_.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 Bc,Ot,L5,AL,hp,OL,fp,mp,NL=pe(()=>{To();eo();Bc=D(W());Mu();ia();$n();Ot=new Uint8Array(8),L5=new Float64Array(Ot.buffer,0,1);a(M5,"http");OL=0;a(P5,"start");mp=class{static{a(this,"Headers")}set(t,r){this[t]=r}}});var pp=m((ile,bL)=>{var{recordAction:Z_,recordActionBinary:v5}=(eo(),re(Ml)),B5=require("fastify-plugin"),H5=200;bL.exports=B5(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),Z_(o,"TTFB",l,d,_),v5(n.raw.statusCode<400,"success",l,d,_);let E=H5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Z_(performance.now()-c,"transfer",l,d,_),Z_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Z_(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Ap=m((ole,UL)=>{var sd=require("clone"),nd=Pe(),q5=x(),td=g(),F5=F(),j_=require("fs"),Tp=require("joi"),{string:rd}=Tp.types(),{hdb_errors:G5,handleHDBError:Hc}=W(),{HDB_ERROR_MSGS:x5,HTTP_STATUS_CODES:ed}=G5,{common_validators:bo}=rs(),yL=1e9,IL=" is required",k5=["insert","update","upsert"],Rp={database:{presence:!1,format:bo.schema_format,length:bo.schema_length},schema:{presence:!1,format:bo.schema_format,length:bo.schema_length},table:{presence:!0,format:bo.schema_format,length:bo.schema_length},action:{inclusion:{within:k5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},V5={schema:rd.required(),table:rd.required(),action:rd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:$5,AWS_SECRET:Y5,AWS_BUCKET:K5,AWS_FILE_KEY:W5,REGION:Q5}=td.S3_BUCKET_AUTH_KEYS,z5={s3:{presence:!0},[`s3.${$5}`]:{presence:!0,type:"String"},[`s3.${Y5}`]:{presence:!0,type:"String"},[`s3.${K5}`]:{presence:!0,type:"String"},[`s3.${W5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${Q5}`]:{presence:!0,type:"String"}},wL=sd(Rp);wL.data.presence={message:IL};var CL=sd(Rp);CL.file_path.presence={message:IL};var J5=Object.assign(sd(Rp),z5),gp=sd(V5);gp.csv_url=rd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();gp.passthrough_headers=Tp.object();function X5(e){let t=nd.validateObject(e,wL);return id(e,t)}a(X5,"dataObject");function Z5(e){let t=nd.validateBySchema(e,Tp.object(gp));return id(e,t)}a(Z5,"urlObject");function j5(e){let t=nd.validateObject(e,CL);return id(e,t)}a(j5,"fileObject");function e8(e){let t=nd.validateObject(e,J5);return id(e,t)}a(e8,"s3FileObject");function id(e,t){if(!t){let r=q5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Hc(new Error,r,ed.BAD_REQUEST);if(e.operation===td.OPERATIONS_ENUM.CSV_FILE_LOAD){try{j_.accessSync(e.file_path,j_.constants.R_OK|j_.constants.F_OK)}catch(s){return s.code===td.NODE_ERROR_CODES.ENOENT?Hc(s,`No such file or directory ${s.path}`,ed.BAD_REQUEST):s.code===td.NODE_ERROR_CODES.EACCES?Hc(s,`Permission denied ${s.path}`,ed.BAD_REQUEST):Hc(s)}try{let s=j_.statSync(e.file_path).size;if(s>yL)return Hc(new Error,x5.MAX_FILE_SIZE_ERR(s,yL),ed.BAD_REQUEST)}catch(s){F5.error(s),console.error(s)}}}return t}a(id,"postValidateChecks");UL.exports={dataObject:X5,urlObject:Z5,fileObject:j5,s3FileObject:e8}});var Op=m((cle,DL)=>{"use strict";var qc=F(),od=g();async function t8(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===od.OPERATIONS_ENUM.INSERT||t.operation===od.OPERATIONS_ENUM.UPDATE||t.operation===od.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===od.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(qc.info(i.message),i):i.http_resp_msg?(qc.error(`Error calling operation: ${e.name}`),qc.error(i.http_resp_msg),i):(qc.error(`Error calling operation: ${e.name}`),qc.error(i),i)}}a(t8,"callOperationFunctionAsAwait");DL.exports={callOperationFunctionAsAwait:t8}});var ML=m((lle,LL)=>{"use strict";var Np=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}},bp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};LL.exports={BulkLoadFileObject:Np,BulkLoadDataObject:bp}});var vL=m((dle,PL)=>{"use strict";var yp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};PL.exports=yp});var Lp=m((ple,ZL)=>{"use strict";var ad=Ar(),ud=Ap(),r8=require("needle"),Kr=g(),fle=Be(),yo=x(),{handleHDBError:qe,hdb_errors:$L}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ot,CHECK_LOGS_WRAPPER:Ti}=$L,Io=F(),Ip=require("papaparse");yo.promisifyPapaParse();var Wr=require("fs-extra"),s8=require("path"),{chain:BL}=require("stream-chain"),HL=require("stream-json/streamers/StreamArray"),qL=require("stream-json/utils/Batch"),FL=require("stream-chain/utils/comp"),{finished:GL}=require("stream"),n8=Q(),YL=Op(),i8=up(),{BulkLoadFileObject:Cp,BulkLoadDataObject:o8}=ML(),Up=jS(),{verifyBulkLoadAttributePerms:KL}=$_(),hle=vL(),mle=rt(),Sle=Fs(),{databases:a8}=(de(),re(Ne)),{coerceType:c8}=(ld(),re(Mp)),xL="No records parsed from csv file.",pi=`${n8.get("HDB_ROOT")}/tmp`,{schema_regex:u8}=rs(),kL=1024*1024*2,VL=5e3,l8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};ZL.exports={csvDataLoad:_8,csvURLLoad:d8,csvFileLoad:E8,importFromS3:f8};async function _8(e,t){let r=ud.dataObject(e);if(r)throw qe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=zL(e.schema,e.table),i=Ip.parse(e.data,{header:!0,skipEmptyLines:!0,transform:wp.bind(null,n),dynamicTyping:!1}),o=new Up;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&KL(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 qe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new o8(e.action,e.schema,e.table,i.data);return s=await YL.callOperationFunctionAsAwait(JL,u,null),s.message===xL?xL:XL(s.records,s.number_written)}catch(n){throw Ri(n)}}a(_8,"csvDataLoad");async function d8(e){let t=ud.urlObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${pi}/${r}`;try{await h8(e,r)}catch(n){throw Io.error(ot.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,Ti(ot.DOWNLOAD_FILE_ERR(r)))}try{let n=new Cp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Dp(n);return await cd(s),i}catch(n){throw await cd(s),Ri(n)}}a(d8,"csvURLLoad");async function E8(e){let t=ud.fileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Cp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Dp(r)}catch(s){throw Ri(s)}}a(E8,"csvFileLoad");async function f8(e){let t=ud.s3FileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=s8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${pi}/${n}`;let i=new Cp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await m8(n,e);let o=await Dp(i);return await cd(r),o}catch(s){throw await cd(r),Ri(s)}}a(f8,"importFromS3");async function h8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await r8("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 qe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}p8(r,e.csv_url),await S8(t,r.raw)}a(h8,"downloadCSVFile");async function m8(e,t){try{let r=`${pi}/${e}`;await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await i8.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(){Io.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Io.error(ot.S3_DOWNLOAD_ERR+" - "+r),qe(r,Ti(ot.S3_DOWNLOAD_ERR))}}a(m8,"downloadFileFromS3");async function S8(e,t){try{await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,t)}catch(r){throw Io.error(ot.WRITE_TEMP_FILE_ERR),qe(r,Ti(ot.DEFAULT_BULK_LOAD_ERR))}}a(S8,"writeFileToTempFolder");async function cd(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Io.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(cd,"deleteTempFile");function p8(e,t){if(e.statusCode!==$L.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!l8[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(p8,"validateURLResponse");async function Dp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await T8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await R8(e);break;default:throw qe(new Error,ot.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ot.INVALID_FILE_EXT_ERR(e))}return XL(t.records,t.number_written)}catch(t){throw Ri(t)}}a(Dp,"fileLoad");async function WL(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 ad.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&KL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=qe(c);r(u)}}a(WL,"validateChunk");async function QL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;yo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!yo.isEmpty(c)&&!yo.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 YL.callOperationFunctionAsAwait(JL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,Ti(ot.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.INSERT_CSV_ERR+" - "+c);r(u)}}a(QL,"insertChunk");async function T8(e){let t={records:0,number_written:0},r=zL(e.schema,e.table);try{let s=new Up,n=Wr.createReadStream(e.file_path,{highWaterMark:kL});n.setEncoding("utf8"),await Ip.parsePromise(n,WL.bind(null,e,s),wp.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:kL}),n.setEncoding("utf8"),await Ip.parsePromise(n,QL.bind(null,e,t),wp.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,Ti(ot.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.PAPA_PARSE_ERR+s)}}a(T8,"callPapaParse");function zL(e,t){let r=a8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>c8(i,n));return s}a(zL,"createTransformMap");function wp(e,t,r){let s=e.get(r);return s?s(t):yo.autoCast(t)}a(wp,"typeFunction");async function R8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Up,n=BL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),HL.withParser(),c=>c.value,new qL({batchSize:VL}),FL(async c=>{await WL(e,s,r,c)})]);await new Promise((c,u)=>{GL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);let o=BL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),HL.withParser(),c=>c.value,new qL({batchSize:VL}),FL(async c=>{await QL(e,t,r,c)})]);return await new Promise((c,u)=>{GL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,Ti(ot.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.INSERT_JSON_ERR+s)}}a(R8,"insertJson");async function JL(e){let t={};try{e.data&&e.data.length>0&&g8(e.data[0])?t=await A8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Io.info(t.message))}catch(r){throw Ri(r)}return t}a(JL,"callBulkFileLoad");function g8(e){let t=Object.keys(e);for(let r of t)if(!u8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(g8,"validateColumnNames");async function A8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ad.insert;break;case"update":i=ad.update;break;case"upsert":i=ad.upsert;break;default:throw qe(new Error,ot.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ot.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=yo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ri(o)}}a(A8,"bulkFileLoad");function XL(e,t){return`successfully loaded ${t} of ${e} records`}a(XL,"buildResponseMsg");function Ri(e){return qe(e,Ti(ot.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ri,"buildTopLevelErrMsg")});var eM=m((Rle,jL)=>{"use strict";var Pp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};jL.exports=Pp});var sM=m((Ale,rM)=>{"use strict";var O8=g(),tM=require("moment"),N8=require("uuid").v4,vp=class{static{a(this,"JobObject")}constructor(){this.id=N8(),this.type=void 0,this.start_datetime=tM().valueOf(),this.created_datetime=tM().valueOf(),this.end_datetime=void 0,this.status=O8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};rM.exports=vp});var Bp=m((Nle,uM)=>{"use strict";var b8=require("uuid").v4,oM=Ar(),aM=gr(),y8=os(),I8=Xi(),w8=eM(),Fe=g(),C8=sM(),U8=wm(),Ur=F(),D8=Sa(),wo=x(),{promisify:L8}=require("util"),gi=require("moment"),M8=K_(),_d=Ap(),nM=Lf(),{deleteTransactionLogsBeforeValidator:P8}=WS(),{handleHDBError:v8,hdb_errors:B8}=W(),{HTTP_STATUS_CODES:H8}=B8,iM=aM.searchByValue,q8=aM.searchByHash,F8=oM.insert,G8=L8(M8.evaluateSQL),x8=oM.update;uM.exports={addJob:$8,updateJob:K8,handleGetJob:k8,handleGetJobsByStartDate:V8,getJobById:cM};async function k8(e){try{let t=await cM(e.id);return wo.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 Ur.error("There was an error getting job",t),new Error(r)}}a(k8,"handleGetJob");async function V8(e){try{let t=await Y8(e);if(Ur.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=gi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=gi(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 Ur.error(r),new Error(r)}}a(V8,"handleGetJobsByStartDate");async function $8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Ur.info(_),t.error=_,t}if(!Fe.JOB_TYPE_ENUM[e.operation])return Ur.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Fe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=_d.fileObject(e);break;case Fe.OPERATIONS_ENUM.CSV_URL_LOAD:s=_d.urlObject(e);break;case Fe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=_d.dataObject(e);break;case Fe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=_d.s3FileObject(e);break;case Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=nM(e,"date");break;case Fe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=nM(e,"timestamp");break;case Fe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=P8(e);break;default:break}if(s)throw v8(s,s.message,H8.BAD_REQUEST,void 0,void 0,!0);let n=new C8;n.type=e.operation===Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new y8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await iM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=b8();try{o=await iM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ur.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new D8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await F8(u)}catch(_){return Ur.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,Ur.trace(_)}return t}a($8,"addJob");async function Y8(e){let t=gi(e.from_date,gi.ISO_8601),r=gi(e.to_date,gi.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 w8(s,e.hdb_user);try{return await G8(n)}catch(i){throw Ur.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(Y8,"getJobsInDateRange");async function cM(e){if(wo.isEmptyOrZeroLength(e))return wo.errorizeMessage("Invalid job ID specified.");let t=new I8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await q8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ur.error(s),wo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(cM,"getJobById");async function K8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Fe.JOB_STATUS_ENUM.COMPLETE||e.status===Fe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=gi().valueOf());let t=new U8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await x8(t),r}a(K8,"updateJob")});var hM=m((yle,fM)=>{"use strict";var lM=x(),Xt=g(),W8=require("moment"),dd=Lp(),Ed=F(),_M=Bp(),dM=W_(),EM=jn(),Q8=_t(),z8=B_(),Hp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function J8(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(lM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(lM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await Zs(e,dd.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await Zs(e,dd.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await Zs(e,dd.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await Zs(e,dd.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await Zs(e,dM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await Zs(e,dM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await Zs(e,EM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await Zs(e,EM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Zs(e,z8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(J8,"parseMessage");async function Zs(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=W8().valueOf(),await _M.updateJob(e.job),await X8(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):Ed.error(`There was an error running ${t.name} job with id ${e.job.id}`),Ed.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await _M.updateJob(e.job)}catch(n){throw Ed.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Zs,"runJob");async function X8(e){Ed.trace("launching job thread:",e),Q8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(X8,"launchJobThread");fM.exports={parseMessage:J8,RunnerMessage:Hp}});var SM=m((wle,mM)=>{"use strict";var qp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};mM.exports=qp});var PM=m((Ule,Vp)=>{"use strict";var Sd=gr(),xp=K_(),fd=Lp(),js=kl(),hd=Qn(),Gc=jn(),Z8=Em(),Fc=Or(),md=Am(),bt=KS(),at=F(),j8=bm(),e6=sc(),t6=oS(),r6=ac(),s6=aS(),n6=cS(),i6=__(),o6=dS(),Fp=hS(),pM=W_(),a6=$_(),kp=Bp(),I=g(),{hdb_errors:kc,handleHDBError:xc}=W(),{HTTP_STATUS_CODES:TM}=kc,Gp=RS(),RM=qS(),CM=require("util"),Co=Ar(),c6=Gs(),u6=Eo(),gM=hM(),AM=ja(),OM=(L_(),re(Ac)),NM=Tr(),bM=B_(),yM=G_(),{setServerUtilities:l6}=(ld(),re(Mp)),{CONTEXT:_6}=(Zr(),re(vE)),{_assignPackageExport:d6}=require("../index"),{transformReq:E6}=x(),f6=Op(),IM=Sd.searchByHash,h6=Sd.searchByValue,m6=CM.promisify(Sd.search),S6=CM.promisify(xp.evaluateSQL),p6={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=SM();async function UM(e,t){try{if(e.body.operation!=="read_log"&&(at.log_level===I.LOG_LEVELS.INFO||at.log_level===I.LOG_LEVELS.DEBUG||at.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;at.info(o)}}catch(s){at.error(s)}let r=await f6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return p6[e.body.operation]&&c6.setSchemaDataToGlobal(s=>{s&&at.error(s)}),r}a(UM,"processLocalTransaction");var wM=R6();Vp.exports={chooseOperation:DM,getOperationFunction:LM,operation:MM,processLocalTransaction:UM};l6(Vp.exports);function DM(e){let t;try{t=LM(e)}catch(n){throw at.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=xp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=xp.checkASTPermissions(e,i);if(o)throw at.error(`${TM.FORBIDDEN} from operation ${e.operation}`),at.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),xc(new Error,o,kc.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.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=a6.verifyPerms(i,n);if(o)throw at.error(`${TM.FORBIDDEN} from operation ${e.operation}`),at.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),xc(new Error,o,kc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw xc(n,"There was an error when trying to choose an operation path")}return r}a(DM,"chooseOperation");function LM(e){if(at.trace(`getOperationFunction with operation: ${e.operation}`),wM.has(e.operation))return wM.get(e.operation);throw xc(new Error,kc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),kc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(LM,"getOperationFunction");d6("operation",MM);function MM(e,t){e.hdb_user=this[_6]?.user,e.bypass_auth=!t;let r=DM(e);return UM({body:e},r)}a(MM,"operation");async function T6(e){at.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[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Co.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Co.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Co.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await Gc.deleteRecord(i);break;default:at.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){at.info("Invalid operation in transaction"),at.error(o)}}a(T6,"catchup");async function Ts(e){E6(e);let t,r;try{r=await kp.addJob(e),t=r.createdJob,at.info("addJob result",r);let s=new gM.RunnerMessage(t,e);return await gM.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 at.error(n),xc(s,n)}}a(Ts,"executeJob");function R6(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Co.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Co.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Co.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Sd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(IM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(IM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(h6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(m6)),e.set(I.OPERATIONS_ENUM.SQL,new B(S6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Ts,fd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Ts,fd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Ts,fd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Ts,fd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(js.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(js.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(js.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(js.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(hd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(hd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(hd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(hd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Gc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Fc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Fc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Fc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Fc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(md.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(md.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(md.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(md.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Fc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(j8)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(e6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(t6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(r6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(s6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(n6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(NM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(i6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(o6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Fp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Fp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Fp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Ts,pM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Ts,Gc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Ts,Gc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Ts,pM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(kp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(kp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Gp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Gp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Gp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(RM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(RM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(T6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(u6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Ts,Gc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(Z8)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(AM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(AM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(OM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(OM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(NM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(bM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Ts,bM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(yM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(yM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(js.getBackup)),e}a(R6,"initializeOperationFunctionMap")});var Td=m((Lle,HM)=>{"use strict";var $p=g(),g6=x(),Vc=F(),{handleHDBError:Yp,hdb_errors:pd}=W(),{isMainThread:A6}=require("worker_threads"),{Readable:O6}=require("stream"),vM=require("os"),N6=require("util"),b6=Bm(),y6=N6.promisify(b6.authorize),BM=PM(),{Gzip:I6}=require("zlib");function w6(e){let t=`Found an uncaught exception with message: ${e.message}. ${vM.EOL}Stack: ${e.stack} ${vM.EOL}Terminating ${A6?"HDB":"thread"}.`;console.error(t),Vc.fatal(t),process.exit(1)}a(w6,"handleServerUncaughtException");function C6(e,t,r){if(Vc[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg!="object"?r.code(e.http_resp_code).send({error:e.http_resp_msg||e.message}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:pd.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(C6,"serverErrorHandler");function U6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Yp(new Error,"Invalid JSON.",pd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(g6.isEmpty(e.body.operation)){let s=Yp(new Error,"Request body must include an 'operation' property.",pd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(U6,"reqBodyValidationHandler");function D6(e,t,r){let s;e.body.operation!==$p.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==$p.OPERATIONS_ENUM.LOGIN&&e.body.operation!==$p.OPERATIONS_ENUM.LOGOUT?y6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Vc.warn(n),Vc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Yp(n,i,pd.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(D6,"authHandler");async function L6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=BM.chooseOperation(e.body);let n=await BM.processLocalTransaction(e,s);if(n instanceof O6&&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 I6))}return n}catch(n){throw Vc.error(n),n}}a(L6,"handlePostRequest");HM.exports={authHandler:D6,handlePostRequest:L6,handleServerUncaughtException:w6,serverErrorHandler:C6,reqBodyValidationHandler:U6}});var xM=m((Ple,GM)=>{"use strict";var M6=require("fastify-plugin"),{handlePostRequest:qM,authHandler:P6,reqBodyValidationHandler:v6}=Td();async function B6(e){e.decorate("hdbCore",{preValidation:[v6,P6],request:t=>FM(qM(t)),requestWithoutAuthentication:t=>FM(qM(t,!0))})}a(B6,"hdbCore");async function FM(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(FM,"convertAsyncIterators");GM.exports=M6(B6)});var VM=m((Ble,kM)=>{"use strict";var Kp=require("fs"),Uo=Q();Uo.initSync();var{CONFIG_PARAMS:$c}=g(),H6=1024*1024*1024;function q6(e){let t=Uo.get($c.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Uo.get($c.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:H6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Uo.get($c.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Uo.get($c.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Uo.get($c.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Kp.readFileSync(`${n}`),cert:Kp.readFileSync(i)+(o?`
22
+ `},q:.8});Et.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()}});NL={type:"application/json",serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:L5,q:.8};Et.set("*/*",NL);Et.set("",NL);a(L5,"tryJSONParse");a(mp,"registerContentHandlers");M5=require("fastify-plugin"),P5=M5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ed(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(ed,"findBestSerializer");a(Sp,"serialize");a(zs,"serializeMessage");a(v5,"streamToBuffer");a(yo,"getDeserializer");a(gL,"deserializerUnknownType");a(B5,"transformIterable")});var Rp={};je(Rp,{start:()=>F5});async function q5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Bu(e);let s=performance.now(),n,i=new To;try{e.responseHeaders=i;let o=e.url.slice(1),c=Tp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=yo(e.headers["content-type"],!0)(e.body)}catch(R){throw new qc.ClientError(R,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 qc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new qc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){H5[0]=f;let R=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),O=e.headers["if-none-match"];O&&R==O?(_?.onDone&&_.onDone(),E=304,_=void 0):i.set("ETag",R)}e.createdResource&&(E=201),e.newLocation&&i.set("Location",e.newLocation);let h={status:E,headers:i,body:void 0},T=`db;dur=${d.toFixed(2)}`,p=_?.wasLoadedFromSource?.();return p!==void 0&&(p?T+=", miss":f&&i.set("Age",Math.round((Date.now()-f)/1e3))),i.append("Server-Timing",T,!0),_s(d,"TTFB",n,r),to(E<400,"success",n,r),_!==void 0&&(h.body=Sp(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return _s(c,"TTFB",n,r),to(!1,"success",n,r),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(u=>u.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:zs(o.toString(),e)}}}function F5(e){if(yL)return;yL=!0,Tp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return q5(r,s)}),e.server.ws(async(r,s,n)=>{IL++,pp||(setTimeout(()=>{console.log("connection count",IL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),pp=!1},1e3),pp=!0),t(s);let i=new Zr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=yo(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 Tp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(zs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(zs(_.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 qc,Ot,H5,yL,Tp,IL,pp,wL=Se(()=>{go();ai();qc=C(W());Hu();aa();Yn();KS();Ot=new Uint8Array(8),H5=new Float64Array(Ot.buffer,0,1);a(q5,"http");IL=0;a(F5,"start")});var gp=m((hle,CL)=>{var{recordAction:td,recordActionBinary:G5}=(ai(),re(Bl)),x5=require("fastify-plugin"),k5=200;CL.exports=x5(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),td(o,"TTFB",l,d,_),G5(n.raw.statusCode<400,"success",l,d,_);let E=k5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{td(performance.now()-c,"transfer",l,d,_),td(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,td(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var bp=m((mle,PL)=>{var od=require("clone"),ad=Pe(),V5=V(),nd=A(),$5=x(),rd=require("fs"),Ap=require("joi"),{string:id}=Ap.types(),{hdb_errors:Y5,handleHDBError:Fc}=W(),{HDB_ERROR_MSGS:K5,HTTP_STATUS_CODES:sd}=Y5,{common_validators:Io}=ss(),UL=1e9,DL=" is required",W5=["insert","update","upsert"],Op={database:{presence:!1,format:Io.schema_format,length:Io.schema_length},schema:{presence:!1,format:Io.schema_format,length:Io.schema_length},table:{presence:!0,format:Io.schema_format,length:Io.schema_length},action:{inclusion:{within:W5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Q5={schema:id.required(),table:id.required(),action:id.valid("insert","update","upsert")},{AWS_ACCESS_KEY:z5,AWS_SECRET:J5,AWS_BUCKET:X5,AWS_FILE_KEY:Z5,REGION:j5}=nd.S3_BUCKET_AUTH_KEYS,e8={s3:{presence:!0},[`s3.${z5}`]:{presence:!0,type:"String"},[`s3.${J5}`]:{presence:!0,type:"String"},[`s3.${X5}`]:{presence:!0,type:"String"},[`s3.${Z5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${j5}`]:{presence:!0,type:"String"}},LL=od(Op);LL.data.presence={message:DL};var ML=od(Op);ML.file_path.presence={message:DL};var t8=Object.assign(od(Op),e8),Np=od(Q5);Np.csv_url=id.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Np.passthrough_headers=Ap.object();function r8(e){let t=ad.validateObject(e,LL);return cd(e,t)}a(r8,"dataObject");function s8(e){let t=ad.validateBySchema(e,Ap.object(Np));return cd(e,t)}a(s8,"urlObject");function n8(e){let t=ad.validateObject(e,ML);return cd(e,t)}a(n8,"fileObject");function i8(e){let t=ad.validateObject(e,t8);return cd(e,t)}a(i8,"s3FileObject");function cd(e,t){if(!t){let r=V5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Fc(new Error,r,sd.BAD_REQUEST);if(e.operation===nd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{rd.accessSync(e.file_path,rd.constants.R_OK|rd.constants.F_OK)}catch(s){return s.code===nd.NODE_ERROR_CODES.ENOENT?Fc(s,`No such file or directory ${s.path}`,sd.BAD_REQUEST):s.code===nd.NODE_ERROR_CODES.EACCES?Fc(s,`Permission denied ${s.path}`,sd.BAD_REQUEST):Fc(s)}try{let s=rd.statSync(e.file_path).size;if(s>UL)return Fc(new Error,K5.MAX_FILE_SIZE_ERR(s,UL),sd.BAD_REQUEST)}catch(s){$5.error(s),console.error(s)}}}return t}a(cd,"postValidateChecks");PL.exports={dataObject:r8,urlObject:s8,fileObject:n8,s3FileObject:i8}});var yp=m((ple,vL)=>{"use strict";var Gc=x(),ud=A();async function o8(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===ud.OPERATIONS_ENUM.INSERT||t.operation===ud.OPERATIONS_ENUM.UPDATE||t.operation===ud.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ud.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Gc.info(i.message),i):i.http_resp_msg?(Gc.error(`Error calling operation: ${e.name}`),Gc.error(i.http_resp_msg),i):(Gc.error(`Error calling operation: ${e.name}`),Gc.error(i),i)}}a(o8,"callOperationFunctionAsAwait");vL.exports={callOperationFunctionAsAwait:o8}});var HL=m((Rle,BL)=>{"use strict";var Ip=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}},wp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};BL.exports={BulkLoadFileObject:Ip,BulkLoadDataObject:wp}});var FL=m((Ale,qL)=>{"use strict";var Cp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};qL.exports=Cp});var vp=m((wle,rM)=>{"use strict";var ld=Nr(),dd=bp(),a8=require("needle"),Kr=A(),Nle=Be(),wo=V(),{handleHDBError:qe,hdb_errors:QL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:Ri}=QL,Co=x(),Up=require("papaparse");wo.promisifyPapaParse();var Wr=require("fs-extra"),c8=require("path"),{chain:GL}=require("stream-chain"),xL=require("stream-json/streamers/StreamArray"),kL=require("stream-json/utils/Batch"),VL=require("stream-chain/utils/comp"),{finished:$L}=require("stream"),u8=Q(),zL=yp(),l8=Ep(),{BulkLoadFileObject:Lp,BulkLoadDataObject:_8}=HL(),Mp=sp(),{verifyBulkLoadAttributePerms:JL}=W_(),ble=FL(),yle=nt(),Ile=xs(),{databases:d8}=(de(),re(Ne)),{coerceType:E8}=(Ed(),re(Bp)),YL="No records parsed from csv file.",Ti=`${u8.get("HDB_ROOT")}/tmp`,{schema_regex:f8}=ss(),KL=1024*1024*2,WL=5e3,h8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};rM.exports={csvDataLoad:m8,csvURLLoad:S8,csvFileLoad:p8,importFromS3:T8};async function m8(e,t){let r=dd.dataObject(e);if(r)throw qe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=jL(e.schema,e.table),i=Up.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Dp.bind(null,n),dynamicTyping:!1}),o=new Mp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&JL(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 qe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new _8(e.action,e.schema,e.table,i.data);return s=await zL.callOperationFunctionAsAwait(eM,u,null),s.message===YL?YL:tM(s.records,s.number_written)}catch(n){throw gi(n)}}a(m8,"csvDataLoad");async function S8(e){let t=dd.urlObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ti}/${r}`;try{await R8(e,r)}catch(n){throw Co.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,Ri(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Pp(n);return await _d(s),i}catch(n){throw await _d(s),gi(n)}}a(S8,"csvURLLoad");async function p8(e){let t=dd.fileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Pp(r)}catch(s){throw gi(s)}}a(p8,"csvFileLoad");async function T8(e){let t=dd.s3FileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=c8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ti}/${n}`;let i=new Lp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await g8(n,e);let o=await Pp(i);return await _d(r),o}catch(s){throw await _d(r),gi(s)}}a(T8,"importFromS3");async function R8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await a8("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 qe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}O8(r,e.csv_url),await A8(t,r.raw)}a(R8,"downloadCSVFile");async function g8(e,t){try{let r=`${Ti}/${e}`;await Wr.mkdirp(Ti),await Wr.writeFile(`${Ti}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await l8.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(){Co.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Co.error(ct.S3_DOWNLOAD_ERR+" - "+r),qe(r,Ri(ct.S3_DOWNLOAD_ERR))}}a(g8,"downloadFileFromS3");async function A8(e,t){try{await Wr.mkdirp(Ti),await Wr.writeFile(`${Ti}/${e}`,t)}catch(r){throw Co.error(ct.WRITE_TEMP_FILE_ERR),qe(r,Ri(ct.DEFAULT_BULK_LOAD_ERR))}}a(A8,"writeFileToTempFolder");async function _d(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Co.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(_d,"deleteTempFile");function O8(e,t){if(e.statusCode!==QL.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!h8[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(O8,"validateURLResponse");async function Pp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await N8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await b8(e);break;default:throw qe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return tM(t.records,t.number_written)}catch(t){throw gi(t)}}a(Pp,"fileLoad");async function XL(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 ld.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&JL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=qe(c);r(u)}}a(XL,"validateChunk");async function ZL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;wo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!wo.isEmpty(c)&&!wo.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 zL.callOperationFunctionAsAwait(eM,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,Ri(ct.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(ZL,"insertChunk");async function N8(e){let t={records:0,number_written:0},r=jL(e.schema,e.table);try{let s=new Mp,n=Wr.createReadStream(e.file_path,{highWaterMark:KL});n.setEncoding("utf8"),await Up.parsePromise(n,XL.bind(null,e,s),Dp.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:KL}),n.setEncoding("utf8"),await Up.parsePromise(n,ZL.bind(null,e,t),Dp.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,Ri(ct.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(N8,"callPapaParse");function jL(e,t){let r=d8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>E8(i,n));return s}a(jL,"createTransformMap");function Dp(e,t,r){let s=e.get(r);return s?s(t):wo.autoCast(t)}a(Dp,"typeFunction");async function b8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Mp,n=GL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),xL.withParser(),c=>c.value,new kL({batchSize:WL}),VL(async c=>{await XL(e,s,r,c)})]);await new Promise((c,u)=>{$L(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);let o=GL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),xL.withParser(),c=>c.value,new kL({batchSize:WL}),VL(async c=>{await ZL(e,t,r,c)})]);return await new Promise((c,u)=>{$L(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,Ri(ct.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(b8,"insertJson");async function eM(e){let t={};try{e.data&&e.data.length>0&&y8(e.data[0])?t=await I8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Co.info(t.message))}catch(r){throw gi(r)}return t}a(eM,"callBulkFileLoad");function y8(e){let t=Object.keys(e);for(let r of t)if(!f8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(y8,"validateColumnNames");async function I8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ld.insert;break;case"update":i=ld.update;break;case"upsert":i=ld.upsert;break;default:throw qe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.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=wo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw gi(o)}}a(I8,"bulkFileLoad");function tM(e,t){return`successfully loaded ${t} of ${e} records`}a(tM,"buildResponseMsg");function gi(e){return qe(e,Ri(ct.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(gi,"buildTopLevelErrMsg")});var nM=m((Ule,sM)=>{"use strict";var Hp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};sM.exports=Hp});var aM=m((Lle,oM)=>{"use strict";var w8=A(),iM=require("moment"),C8=require("uuid").v4,qp=class{static{a(this,"JobObject")}constructor(){this.id=C8(),this.type=void 0,this.start_datetime=iM().valueOf(),this.created_datetime=iM().valueOf(),this.end_datetime=void 0,this.status=w8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};oM.exports=qp});var Fp=m((Ple,EM)=>{"use strict";var U8=require("uuid").v4,lM=Nr(),_M=Or(),D8=as(),L8=Zi(),M8=nM(),Fe=A(),P8=aM(),v8=Dm(),Lr=x(),B8=Ta(),Uo=V(),{promisify:H8}=require("util"),Ai=require("moment"),q8=z_(),fd=bp(),cM=vf(),{deleteTransactionLogsBeforeValidator:F8}=XS(),{handleHDBError:G8,hdb_errors:x8}=W(),{HTTP_STATUS_CODES:k8}=x8,uM=_M.searchByValue,V8=_M.searchByHash,$8=lM.insert,Y8=H8(q8.evaluateSQL),K8=lM.update;EM.exports={addJob:z8,updateJob:X8,handleGetJob:W8,handleGetJobsByStartDate:Q8,getJobById:dM};async function W8(e){try{let t=await dM(e.id);return Uo.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 Lr.error("There was an error getting job",t),new Error(r)}}a(W8,"handleGetJob");async function Q8(e){try{let t=await J8(e);if(Lr.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=Ai(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ai(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 Lr.error(r),new Error(r)}}a(Q8,"handleGetJobsByStartDate");async function z8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Uo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!Fe.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Fe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=fd.fileObject(e);break;case Fe.OPERATIONS_ENUM.CSV_URL_LOAD:s=fd.urlObject(e);break;case Fe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=fd.dataObject(e);break;case Fe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=fd.s3FileObject(e);break;case Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=cM(e,"date");break;case Fe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=cM(e,"timestamp");break;case Fe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=F8(e);break;default:break}if(s)throw G8(s,s.message,k8.BAD_REQUEST,void 0,void 0,!0);let n=new P8;n.type=e.operation===Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new D8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await uM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=U8();try{o=await uM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Lr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Lr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new B8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await $8(u)}catch(_){return Lr.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,Lr.trace(_)}return t}a(z8,"addJob");async function J8(e){let t=Ai(e.from_date,Ai.ISO_8601),r=Ai(e.to_date,Ai.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 M8(s,e.hdb_user);try{return await Y8(n)}catch(i){throw Lr.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(J8,"getJobsInDateRange");async function dM(e){if(Uo.isEmptyOrZeroLength(e))return Uo.errorizeMessage("Invalid job ID specified.");let t=new L8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await V8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),Uo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(dM,"getJobById");async function X8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Uo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Fe.JOB_STATUS_ENUM.COMPLETE||e.status===Fe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ai().valueOf());let t=new v8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await K8(t),r}a(X8,"updateJob")});var TM=m((Ble,pM)=>{"use strict";var fM=V(),Xt=A(),Z8=require("moment"),hd=vp(),md=x(),hM=Fp(),mM=J_(),SM=ei(),j8=dt(),e6=F_(),Gp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function t6(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(fM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(fM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await en(e,hd.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await en(e,hd.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await en(e,hd.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await en(e,hd.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await en(e,mM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await en(e,mM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await en(e,SM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await en(e,SM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await en(e,e6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(t6,"parseMessage");async function en(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Z8().valueOf(),await hM.updateJob(e.job),await r6(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):md.error(`There was an error running ${t.name} job with id ${e.job.id}`),md.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await hM.updateJob(e.job)}catch(n){throw md.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(en,"runJob");async function r6(e){md.trace("launching job thread:",e),j8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(r6,"launchJobThread");pM.exports={parseMessage:t6,RunnerMessage:Gp}});var gM=m((qle,RM)=>{"use strict";var xp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};RM.exports=xp});var qM=m((Gle,Kp)=>{"use strict";var Rd=Or(),$p=z_(),Sd=vp(),tn=Yl(),pd=zn(),kc=ei(),s6=mm(),xc=br(),Td=bm(),bt=JS(),ut=x(),n6=wm(),i6=ic(),o6=uS(),a6=uc(),c6=lS(),u6=_S(),l6=f_(),_6=hS(),kp=pS(),AM=J_(),d6=W_(),Yp=Fp(),I=A(),{hdb_errors:$c,handleHDBError:Vc}=W(),{HTTP_STATUS_CODES:OM}=$c,Vp=OS(),NM=xS(),MM=require("util"),Do=Nr(),E6=ks(),f6=fo(),bM=TM(),yM=tc(),IM=(v_(),re(Nc)),wM=Tr(),CM=F_(),UM=V_(),{setServerUtilities:h6}=(Ed(),re(Bp)),{CONTEXT:m6}=(jr(),re(FE)),{_assignPackageExport:S6}=require("../index"),{transformReq:p6}=V(),T6=yp(),DM=Rd.searchByHash,R6=Rd.searchByValue,g6=MM.promisify(Rd.search),A6=MM.promisify($p.evaluateSQL),O6={[I.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.CREATE_TABLE]:!0,[I.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[I.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[I.OPERATIONS_ENUM.DROP_TABLE]:!0,[I.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=gM();async function PM(e,t){try{if(e.body.operation!=="read_log"&&(ut.log_level===I.LOG_LEVELS.INFO||ut.log_level===I.LOG_LEVELS.DEBUG||ut.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ut.info(o)}}catch(s){ut.error(s)}let r=await T6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return O6[e.body.operation]&&E6.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(PM,"processLocalTransaction");var LM=b6();Kp.exports={chooseOperation:vM,getOperationFunction:BM,operation:HM,processLocalTransaction:PM};h6(Kp.exports);function vM(e){let t;try{t=BM(e)}catch(n){throw ut.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=$p.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=$p.checkASTPermissions(e,i);if(o)throw ut.error(`${OM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Vc(new Error,o,$c.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.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=d6.verifyPerms(i,n);if(o)throw ut.error(`${OM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Vc(new Error,o,$c.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Vc(n,"There was an error when trying to choose an operation path")}return r}a(vM,"chooseOperation");function BM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),LM.has(e.operation))return LM.get(e.operation);throw Vc(new Error,$c.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),$c.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(BM,"getOperationFunction");S6("operation",HM);function HM(e,t){e.hdb_user=this[m6]?.user,e.bypass_auth=!t;let r=vM(e);return PM({body:e},r)}a(HM,"operation");async function N6(e){ut.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[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Do.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Do.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Do.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await kc.deleteRecord(i);break;default:ut.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ut.info("Invalid operation in transaction"),ut.error(o)}}a(N6,"catchup");async function gs(e){p6(e);let t,r;try{r=await Yp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new bM.RunnerMessage(t,e);return await bM.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 ut.error(n),Vc(s,n)}}a(gs,"executeJob");function b6(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Do.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Do.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Do.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(Rd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(DM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(DM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(R6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(g6)),e.set(I.OPERATIONS_ENUM.SQL,new B(A6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(gs,Sd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(gs,Sd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(gs,Sd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(gs,Sd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(tn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(tn.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(tn.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(tn.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(tn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(tn.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(tn.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(tn.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(pd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(pd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(pd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(pd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(kc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(xc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(xc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(xc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(xc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Td.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Td.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Td.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Td.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(xc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(n6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(i6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(o6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(a6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(c6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(u6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(wM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(l6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(_6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(kp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(kp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(kp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(gs,AM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(gs,kc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(gs,kc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(gs,AM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Yp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Yp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Vp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Vp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Vp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(NM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(NM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(N6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(f6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(gs,kc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(s6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(yM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(yM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(IM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(IM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(wM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(CM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(gs,CM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(UM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(UM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(tn.getBackup)),e}a(b6,"initializeOperationFunctionMap")});var Ad=m((kle,xM)=>{"use strict";var Wp=A(),y6=V(),Yc=x(),{handleHDBError:Qp,hdb_errors:gd}=W(),{isMainThread:I6}=require("worker_threads"),{Readable:w6}=require("stream"),FM=require("os"),C6=require("util"),U6=Fm(),D6=C6.promisify(U6.authorize),GM=qM(),{Gzip:L6}=require("zlib");function M6(e){let t=`Found an uncaught exception with message: ${e.message}. ${FM.EOL}Stack: ${e.stack} ${FM.EOL}Terminating ${I6?"HDB":"thread"}.`;console.error(t),Yc.fatal(t),process.exit(1)}a(M6,"handleServerUncaughtException");function P6(e,t,r){if(Yc[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:gd.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(P6,"serverErrorHandler");function v6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Qp(new Error,"Invalid JSON.",gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(y6.isEmpty(e.body.operation)){let s=Qp(new Error,"Request body must include an 'operation' property.",gd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(v6,"reqBodyValidationHandler");function B6(e,t,r){let s;e.body.operation!==Wp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Wp.OPERATIONS_ENUM.LOGOUT?D6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Yc.warn(n),Yc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Qp(n,i,gd.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(B6,"authHandler");async function H6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=GM.chooseOperation(e.body);let n=await GM.processLocalTransaction(e,s);if(n instanceof w6&&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 L6))}return n}catch(n){throw Yc.error(n),n}}a(H6,"handlePostRequest");xM.exports={authHandler:B6,handlePostRequest:H6,handleServerUncaughtException:M6,serverErrorHandler:P6,reqBodyValidationHandler:v6}});var YM=m(($le,$M)=>{"use strict";var q6=require("fastify-plugin"),{handlePostRequest:kM,authHandler:F6,reqBodyValidationHandler:G6}=Ad();async function x6(e){e.decorate("hdbCore",{preValidation:[G6,F6],request:t=>VM(kM(t,response)),requestWithoutAuthentication:(t,r)=>VM(kM(t,r,!0))})}a(x6,"hdbCore");async function VM(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(VM,"convertAsyncIterators");$M.exports=q6(x6)});var WM=m((Kle,KM)=>{"use strict";var zp=require("fs"),Lo=Q();Lo.initSync();var{CONFIG_PARAMS:Kc}=A(),k6=1024*1024*1024;function V6(e){let t=Lo.get(Kc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Lo.get(Kc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:k6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Lo.get(Kc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Lo.get(Kc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Lo.get(Kc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:zp.readFileSync(`${n}`),cert:zp.readFileSync(i)+(o?`
23
23
 
24
- `+Kp.readFileSync(o):"")},s.http2=!0}return s}a(q6,"getServerOptions");kM.exports=q6});var KM=m((qle,YM)=>{"use strict";var Wp=Q();Wp.initSync();var{CONFIG_PARAMS:$M}=g();function F6(){let e=Wp.get($M.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Wp.get($M.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(F6,"getCORSOptions");YM.exports=F6});var zM=m((Gle,QM)=>{"use strict";var WM=Q();WM.initSync();var G6=g();function x6(){return WM.get(G6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(x6,"getHeaderTimeoutConfig");QM.exports=x6});var Jp={};Ze(Jp,{customFunctionsServer:()=>$6,handleFile:()=>V6,ready:()=>W6});async function V6(e,t,r,s){if(!en){let c=Qp.get(zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);en=cP(c),mt.http((await en).server)}let n=await en,i=(0,XM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),JM.has(i)||(JM.add(i),n.register(K6(i,o)))}async function $6(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await Y6();let e=Qp.get(zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=en=await cP(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function Y6(){try{Ue.info("Custom Functions starting configuration."),await sP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function K6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,ZM.existsSync)(e)&&r.register(rP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function cP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,nP.default)(e),r=(0,jM.default)(t);r.server.headersTimeout=(0,oP.default)(),r.setErrorHandler(aP.serverErrorHandler);let s=(0,iP.default)();return s&&r.register(eP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(tP.default),await r.register(k6),await r.after(),dp(r),Ue.info("Custom Functions completed buildServer."),r}function W6(){if(en)return en.then?en.then(e=>e.ready()):en.ready()}var XM,ZM,jM,eP,tP,rP,Qp,zp,Ue,k6,sP,nP,iP,oP,aP,en,JM,uP=pe(()=>{XM=require("path"),ZM=require("fs"),jM=D(require("fastify")),eP=D(require("@fastify/cors")),tP=D(pp()),rP=D(require("@fastify/autoload")),Qp=D(Q()),zp=D(g()),Ue=D(F()),k6=D(xM()),sP=D(Or()),nP=D(VM()),iP=D(KM()),oP=D(zM()),aP=D(Td());To();_n();JM=new Set;a(V6,"handleFile");a($6,"customFunctionsServer");a(Y6,"setUp");a(K6,"buildRouteFolder");a(cP,"buildServer");a(W6,"ready")});var Xp={};Ze(Xp,{start:()=>Q6});function Q6(e){let t=e.root;return{handleFile(r,s,n){_P||(_P=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=lP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,dP.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))),lP.set(s,n)}}}var dP,lP,_P,EP=pe(()=>{dP=D(require("send")),lP=new Map;a(Q6,"start")});function X6(e,t=1,r){if(Zp++,(0,Ai.startWorker)("server/threads/threadServer.js",{name:Ad.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Ad.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});J6.push(n),await n,Do.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=gd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Do.indexOf(s);o>-1&&Do.splice(o,1)}if(a(i,"removeWorker"),Lo){let o=Lo;Lo=[];for(let c of o)pP[c.localPort](c)}}}),r){let s=setInterval(()=>{jp?jp=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ai.shutdownWorkers)(),Zp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function TP(e=0,t){if(typeof e=="string")try{(0,Od.existsSync)(e)&&(0,Od.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=Z6:r=j6(t):r=eT;let s=(0,mP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},pP[e]=i=>{jp=!0,r(i,(o,c)=>{if(!o){fP?(fP.deliverSocket(i,e,c),i.resume()):Zp>0?(Lo.length===0&&setTimeout(()=>{Lo.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(),Lo.push(i)):(console.log("start up a dynamic thread to handle request"),X6(0));return}o.requests++,i._handle.fd>=0?o.postMessage({port:e,fd:i._handle.fd,data:c}):s9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=xa();return SP.info(`HarperDB ${n.version} Server running on port ${e}`),s}function eT(e,t){let r,s=0;for(let n of Do){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Rd)return Rd=i,t(r);s=i}Rd=0,t(r)}function Z6(e,t){let r=e.remoteAddress,s=Mo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);eT(e,i=>{Mo.set(r,{worker:i,lastUsed:n}),t(i)})}function j6(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=Mo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);eT(s,_=>{Mo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function t9(){Rd=0;for(let e of Do)e.expectedIdle=e.recentELU.idle+e9,e.requests=1;Do.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function s9(e,t,r){let s=r9++;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(),gd.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")),gd.delete(s)),n.event=="destroy"&&(e.destroy(),gd.delete(s))})}var Ai,mP,Ad,SP,Od,z6,Do,Lo,pP,fP,Zp,J6,jp,Rd,hP,Mo,e9,gd,r9,RP=pe(()=>{Ai=D(_t()),mP=require("net"),Ad=D(g()),SP=D(F()),Od=require("fs"),{isMainThread:z6}=require("worker_threads"),Do=[],Lo=[],pP=[],Zp=0,J6=[];z6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(X6,"startHTTPWorker");a(TP,"startSocketServer");Rd=0;a(eT,"findMostIdleWorker");hP=36e5,Mo=new Map;a(Z6,"findByRemoteAddressAffinity");a(j6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mo)r.lastUsed+hP<e&&Mo.delete(t)},hP).unref();e9=1e3;a(t9,"updateWorkerIdleness");(0,Ai.setMonitorListener)(t9);gd=new Map,r9=1;a(s9,"proxySocket")});var bP=m((Xle,NP)=>{"use strict";var n9=require("cluster"),Qr=Q();Qr.initSync();var AP=g(),Qle=require("util"),tn=F(),tT=require("fs"),i9=require("fastify"),zle=xa(),o9=require("@fastify/cors"),a9=require("@fastify/compress"),c9=require("@fastify/static"),u9=pp(),l9=require("path"),{PACKAGE_ROOT:_9}=g(),d9=Gs(),E9=x(),f9=Or(),h9=Oa(),{server:m9}=(_n(),re(BE)),{authHandler:S9,handlePostRequest:p9,serverErrorHandler:T9,reqBodyValidationHandler:R9}=Td(),Jle=require("net"),{registerContentHandlers:g9}=(To(),re(gL)),A9=1024*1024*1024,OP="TRUE",{HDB_SETTINGS_NAMES:Ni,CONFIG_PARAMS:O9}=AP,N9=Ni.CORS_ENABLED_KEY,b9="CORS_ACCESSLIST",y9=Ni.SERVER_TIMEOUT_KEY,I9=Ni.SERVER_KEEP_ALIVE_TIMEOUT_KEY,w9=Ni.SERVER_HEADERS_TIMEOUT_KEY,C9=Ni.PRIVATE_KEY_KEY,U9=Ni.CERT_KEY,D9=Ni.HTTP_SECURE_ENABLED_KEY,Oi;NP.exports={hdbServer:gP,start:gP};async function gP(e){try{tn.info("In Fastify server"+process.cwd()),tn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),tn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=n9.isMaster,await L9();let t=Qr.get(D9),r=t&&(t===!0||t.toUpperCase()===OP);Oi=M9(r),await Oi.ready(),e||(e={}),e.isOperationsServer=!0,Oi.server.cantCleanupProperly=!0;try{m9.http(Oi.server,e),Oi.server.closeIdleConnections||await Oi.listen({port:0,host:"::"})}catch(s){throw Oi.close(),tn.error(s),tn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),tn.fatal(t),process.exit(1)}}a(gP,"operationsServer");async function L9(){tn.trace("Configuring HarperDB process."),d9.setSchemaDataToGlobal(),await f9.setUsersToGlobal(),await h9.getLicense()}a(L9,"setUp");function M9(e){tn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=P9(e),r=i9(t);r.server.headersTimeout=B9(),r.setErrorHandler(T9);let s=v9();s&&r.register(o9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(u9),r.register(a9),r.register(c9,{root:l9.join(_9,"docs")}),g9(r);let n=Qr.get(AP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!E9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[R9,S9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),p9(i,o)}),r.get("/health",()=>"HarperDB is running."),tn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(M9,"buildServer");function P9(e){let t=Qr.get(y9),r=Qr.get(I9),s={bodyLimit:A9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(C9),i=Qr.get(U9),o=Qr.get(O9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:tT.readFileSync(n),cert:tT.readFileSync(i)+(o?`
24
+ `+zp.readFileSync(o):"")},s.http2=!0}return s}a(V6,"getServerOptions");KM.exports=V6});var JM=m((Qle,zM)=>{"use strict";var Jp=Q();Jp.initSync();var{CONFIG_PARAMS:QM}=A();function $6(){let e=Jp.get(QM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Jp.get(QM.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($6,"getCORSOptions");zM.exports=$6});var jM=m((Jle,ZM)=>{"use strict";var XM=Q();XM.initSync();var Y6=A();function K6(){return XM.get(Y6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(K6,"getHeaderTimeoutConfig");ZM.exports=K6});var jp={};je(jp,{customFunctionsServer:()=>z6,handleFile:()=>Q6,ready:()=>Z6});async function Q6(e,t,r,s){if(!rn){let c=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);rn=dP(c),tt.http((await rn).server)}let n=await rn,i=(0,tP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),eP.has(i)||(eP.add(i),n.register(X6(i,o)))}async function z6(){try{Ue.info("In Custom Functions Fastify server"+process.cwd()),Ue.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Ue.debug(`Custom Functions server process ${process.pid} starting up.`),await J6();let e=Xp.get(Zp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=rn=await dP(t)}catch(s){throw Ue.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw Ue.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){Ue.error(`Custom Functions ${process.pid} Error: ${e}`),Ue.error(e),process.exit(1)}}async function J6(){try{Ue.info("Custom Functions starting configuration."),await aP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function X6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,rP.existsSync)(e)&&r.register(oP.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),o()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function dP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,cP.default)(e),r=(0,sP.default)(t);r.server.headersTimeout=(0,lP.default)(),r.setErrorHandler(_P.serverErrorHandler);let s=(0,uP.default)();return s&&r.register(nP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(iP.default),await r.register(W6),await r.after(),mp(r),Ue.info("Custom Functions completed buildServer."),r}function Z6(){if(rn)return rn.then?rn.then(e=>e.ready()):rn.ready()}var tP,rP,sP,nP,iP,oP,Xp,Zp,Ue,W6,aP,cP,uP,lP,_P,rn,eP,EP=Se(()=>{tP=require("path"),rP=require("fs"),sP=C(require("fastify")),nP=C(require("@fastify/cors")),iP=C(gp()),oP=C(require("@fastify/autoload")),Xp=C(Q()),Zp=C(A()),Ue=C(x()),W6=C(YM()),aP=C(br()),cP=C(WM()),uP=C(JM()),lP=C(jM()),_P=C(Ad());go();Xr();eP=new Set;a(Q6,"handleFile");a(z6,"customFunctionsServer");a(J6,"setUp");a(X6,"buildRouteFolder");a(dP,"buildServer");a(Z6,"ready")});var eT={};je(eT,{start:()=>j6});function j6(e){let t=e.root;return{handleFile(r,s,n){hP||(hP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=fP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,mP.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))),fP.set(s,n)}}}var mP,fP,hP,SP=Se(()=>{mP=C(require("send")),fP=new Map;a(j6,"start")});function r9(e,t=1,r){if(tT++,(0,Oi.startWorker)("server/threads/threadServer.js",{name:bd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===bd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});t9.push(n),await n,Mo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Nd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Mo.indexOf(s);o>-1&&Mo.splice(o,1)}if(a(i,"removeWorker"),Po){let o=Po;Po=[];for(let c of o)gP[c.localPort](c)}}}),r){let s=setInterval(()=>{rT?rT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oi.shutdownWorkers)(),tT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function AP(e=0,t){if(typeof e=="string")try{(0,Id.existsSync)(e)&&(0,Id.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=s9:r=n9(t):r=sT;let s=(0,RP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},gP[e]=i=>{rT=!0,r(i,(o,c)=>{if(!o){pP?(pP.deliverSocket(i,e,c),i.resume()):tT>0?(Po.length===0&&setTimeout(()=>{Po.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(),Po.push(i)):(console.log("start up a dynamic thread to handle request"),r9(0));return}o.requests++;let u=i._handle.fd;yd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):c9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Va();return yd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function sT(e,t){let r,s=0;for(let n of Mo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Od)return Od=i,t(r);s=i}Od=0,t(r)}function s9(e,t){let r=e.remoteAddress,s=vo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);sT(e,i=>{vo.set(r,{worker:i,lastUsed:n}),t(i)})}function n9(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=vo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);sT(s,_=>{vo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function o9(){Od=0;for(let e of Mo)e.expectedIdle=e.recentELU.idle+i9,e.requests=1;Mo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function c9(e,t,r){let s=a9++;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(),Nd.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")),Nd.delete(s)),n.event=="destroy"&&(e.destroy(),Nd.delete(s))})}var Oi,RP,bd,yd,Id,e9,Mo,Po,gP,pP,tT,t9,rT,Od,TP,vo,i9,Nd,a9,OP=Se(()=>{Oi=C(dt()),RP=require("net"),bd=C(A()),yd=C(x()),Id=require("fs"),{isMainThread:e9}=require("worker_threads"),Mo=[],Po=[],gP=[],tT=0,t9=[];e9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(r9,"startHTTPWorker");a(AP,"startSocketServer");Od=0;a(sT,"findMostIdleWorker");TP=36e5,vo=new Map;a(s9,"findByRemoteAddressAffinity");a(n9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vo)r.lastUsed+TP<e&&vo.delete(t)},TP).unref();i9=1e3;a(o9,"updateWorkerIdleness");(0,Oi.setMonitorListener)(o9);Nd=new Map,a9=1;a(c9,"proxySocket")});var wP=m((a_e,IP)=>{"use strict";var u9=require("cluster"),Qr=Q();Qr.initSync();var bP=A(),n_e=require("util"),sn=x(),nT=require("fs"),l9=require("fastify"),i_e=Va(),_9=require("@fastify/cors"),d9=require("@fastify/compress"),E9=require("@fastify/static"),f9=gp(),h9=require("path"),{PACKAGE_ROOT:m9}=A(),S9=ks(),p9=V(),T9=br(),R9=ba(),{server:g9}=(Xr(),re(gu)),{authHandler:A9,handlePostRequest:O9,serverErrorHandler:N9,reqBodyValidationHandler:b9}=Ad(),o_e=require("net"),{registerContentHandlers:y9}=(go(),re(bL)),I9=1024*1024*1024,yP="TRUE",{HDB_SETTINGS_NAMES:bi,CONFIG_PARAMS:w9}=bP,C9=bi.CORS_ENABLED_KEY,U9="CORS_ACCESSLIST",D9=bi.SERVER_TIMEOUT_KEY,L9=bi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,M9=bi.SERVER_HEADERS_TIMEOUT_KEY,P9=bi.PRIVATE_KEY_KEY,v9=bi.CERT_KEY,B9=bi.HTTP_SECURE_ENABLED_KEY,Ni;IP.exports={hdbServer:NP,start:NP};async function NP(e){try{sn.info("In Fastify server"+process.cwd()),sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=u9.isMaster,await H9();let t=Qr.get(B9),r=t&&(t===!0||t.toUpperCase()===yP);Ni=q9(r),await Ni.ready(),e||(e={}),e.isOperationsServer=!0,Ni.server.cantCleanupProperly=!0;try{g9.http(Ni.server,e),Ni.server.closeIdleConnections||await Ni.listen({port:0,host:"::"})}catch(s){throw Ni.close(),sn.error(s),sn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),sn.fatal(t),process.exit(1)}}a(NP,"operationsServer");async function H9(){sn.trace("Configuring HarperDB process."),S9.setSchemaDataToGlobal(),await T9.setUsersToGlobal(),await R9.getLicense()}a(H9,"setUp");function q9(e){sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=F9(e),r=l9(t);r.server.headersTimeout=x9(),r.setErrorHandler(N9);let s=G9();s&&r.register(_9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(f9),r.register(d9),r.register(E9,{root:h9.join(m9,"docs")}),y9(r);let n=Qr.get(bP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!p9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[b9,A9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),O9(i,o)}),r.get("/health",()=>"HarperDB is running."),sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(q9,"buildServer");function F9(e){let t=Qr.get(D9),r=Qr.get(L9),s={bodyLimit:I9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(P9),i=Qr.get(v9),o=Qr.get(w9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:nT.readFileSync(n),cert:nT.readFileSync(i)+(o?`
25
25
 
26
- `+tT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(P9,"getServerOptions");function v9(){let e=Qr.get(N9),t=Qr.get(b9),r;return e&&(e===!0||e.toUpperCase()===OP)&&(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(v9,"getCORSOpts");function B9(){return Qr.get(w9)}a(B9,"getHeaderTimeoutConfig")});var HP=m((t_e,BP)=>{"use strict";var{decode:H9}=require("msgpackr"),{isMainThread:q9,parentPort:F9,threadId:jle}=require("worker_threads"),rT=rt(),Po=Be(),G9=g(),Yc=F(),yP=Q(),CP=g();_t();var x9=Fs(),{recordAction:k9,recordActionBinary:V9}=(eo(),re(Ml)),{publishToStream:$9}=rT,e_e={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Y9,K9,W9,UP,DP;BP.exports={initialize:LP,workQueueListener:vP,setSubscription:Q9,setIgnoreOrigin:J9,getDatabaseSubscriptions:z9};async function LP(){DP=!0,Yc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await rT.getNATSReferences();Y9=e,K9=e.info.server_name,W9=t,UP=r}a(LP,"initialize");var bd=new Map;function Q9(e,t,r){let s=bd.get(e);s||bd.set(e,s=new Map),s.set(t,r),DP||LP().then(vP)}a(Q9,"setSubscription");function z9(){return bd}a(z9,"getDatabaseSubscriptions");var MP;function J9(e){MP=e}a(J9,"setIgnoreOrigin");var PP=100,IP=new Array(PP),Nd=0;async function vP(){let t=await(await UP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await IP[Nd],IP[Nd]=X9(r).catch(s=>{Yc.error(s)}),++Nd>=PP&&(Nd=0)}a(vP,"workQueueListener");q9||F9.on("message",async e=>{let{type:t}=e;t===CP.ITC_EVENT_TYPES.SHUTDOWN&&rT.closeConnection()});async function X9(e){let t=H9(e.data);k9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===yP.get(G9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!MP;if(V9(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;Yc.trace("processing message:",i,o,u,(l?"records: "+l.map(y=>y.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Yc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},S=bd.get(o)?.get(u);if(!S)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,S.send(t);else if(l.length===1&&!c)S.send({type:wP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let y=l.map((O,H)=>({type:wP(i),value:O,id:_?.[H],table:u}));for(;c;)y.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;S.send({type:"transaction",writes:y,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}yP.get(CP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&$9(e.subject.split(".").slice(0,-1).join("."),x9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Yc.error(i)}e.ack()}a(X9,"messageProcessor");function wP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(wP,"convertOperation")});var cT={};Ze(cT,{disableNATS:()=>j9,setNATSReplicator:()=>sT,start:()=>Z9});function Z9(){Id.default.get(wd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&t7()}function j9(e=!0){kP=e}function t7(){if(kP)return;let e=xr(),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];sT(n,r,i)}}uT((r,s)=>{sT(r.tableName,r.databaseName,r),s&&$P(r)}),!qP&&(qP=!0)}function sT(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 ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ie],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ie],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ie]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ie],record:o},c)}invalidate(o){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ie]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ie],this.getContext())}static defineSchema(o){$P(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 Xr;return(0,FP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<e7}static isNATSReplicator=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new yd(i.transaction,i)),o.user=i.user):o=VP),o}a(n,"getNATSTransaction")}function $P(e){let t=Id.default.get(wd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,iT.publishToStream)(`${oT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,aT.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 iT,oT,aT,FP,GP,Id,wd,xP,kP,e7,VP,qP,yd,nT,YP=pe(()=>{de();Zr();iT=D(rt()),oT=D(Be()),aT=D(Fs());ia();FP=D(HP()),GP=D(Ht()),Id=D(Q()),wd=D(g()),xP=D(F());a(Z9,"start");a(j9,"disableNATS");e7=2;a(t7,"assignReplicationSource");a(sT,"setNATSReplicator");a($P,"publishSchema");yd=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=Id.default.get(wd.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||(xP.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,iT.publishToStream)(`${oT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,aT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},nT=class extends yd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,GP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};VP=new nT});async function WP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await lT.getResource(e,{});n=new dT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await lT.get(e);i&&i.delete()}n=new Ud(e,t)}return n}function _T(){return Cd++,Cd>65500&&(Cd=1),Cd}var KP,Kc,lT,Cd,Ud,dT,QP=pe(()=>{de();gc();KP=D(Ht()),Kc=D(F());$n();lT=tt({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(WP,"getSession");Cd=1;a(_T,"getNextMessageId");Ud=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(O=>O.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=wn.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 T=h.path,S=h.Resource,y=await Ye(f,async()=>{let O=await S.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let H of O)try{let Y;if(H.type&&H.type!=="put"&&H.type!=="delete"&&H.type!=="message"||s&&!s(H))continue;r?(H.topic=n,Y=this.needsAcknowledge(H)):Y=_T();let A=H.id;Array.isArray(A)&&(A=So(A)),A==null&&(A=""),this.listener(T+"/"+A,H.value,Y,t)}catch(Y){(0,Kc.warn)(Y)}})(),O});return y.topic=n,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){return _T()}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=wn.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 Ye(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=[]}},dT=class extends Ud{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=_T();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,Kc.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,KP.getNextMonotonicTime)()),(0,Kc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),lT.put(this.sessionRecord)),t.qos}}});var hT={};Ze(hT,{start:()=>s7});async function s7({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:_}=XP(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,rn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;r7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,ZP.getSuperUser)());let{onMessage:u,onClose:l}=XP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,rn.info)("Socket error",_)})},{port:t,securePort:s})}function XP(e,t,r,s,n){JP||(JP=!0,tm(_=>{_.push({metric:"mqtt-connections",connections:ET})})),ET++;let i,o={protocolVersion:4},c=(0,Dd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){ET--,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 mt.auth(_.username,_.password.toString()),(0,fT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&zP.notify({username:s.username,status:sn.AUTH_AUDIT_STATUS.SUCCESS,type:sn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,fT.get)(sn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&zP.error({username:s.username,status:sn.AUTH_AUDIT_STATUS.FAILURE,type:sn.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=WP({user:s,..._}),i=await i}catch(O){return(0,rn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,H,Y,A)=>{try{let w=O.indexOf("/",1),G=w>0?O.slice(0,w):O;d({cmd:"publish",topic:O,payload:E(H),messageId:Y||Math.floor(Math.random()*1e8),qos:A.qos},G)}catch(w){(0,rn.error)(w),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let H;try{H=(await i.addSubscription(O,O.qos>=1)).qos||0}catch(Y){(0,rn.error)(Y),H=128}f.push(H)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=No(r?.headers["content-type"])),S=_.payload?.length>0?T(_.payload):void 0,y;try{y=await i.publish(_,S)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:y===!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 T=(0,Dd.generate)(f,o);t(T),oi(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ws(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Dd,ZP,fT,sn,rn,zP,r7,JP,ET,jP=pe(()=>{Dd=require("mqtt-packet");QP();ZP=D(Or());To();eo();_n();fT=D(Q()),sn=D(g()),rn=D(F()),zP=(0,rn.loggerWithTag)("auth-event"),r7=!0;a(s7,"start");ET=0;a(XP,"onSocket")});var uv={};Ze(uv,{loadComponent:()=>Ld,loadComponentDirectories:()=>cv});function cv(e,t){t&&(ST=t),e&&(pT=e);let r=[];if((0,Rs.existsSync)(mT)){let n=(0,Rs.readdirSync)(mT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dr.join)(mT,o);r.push(Ld(c,ST,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Ld(s,ST,s)),Promise.all(r).then(()=>{av=!0})}async function Ld(e,t,r,s,n){if(!tv.has(e)){tv.set(e,!0),n&&(pT=n);try{let i,o=(0,Dr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Rs.existsSync)(o)?i=(0,rv.parseDocument)((0,Rs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=a7;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,Rs.existsSync)(f=(0,Dr.join)(E,"node_modules",u));)if(E=(0,Dr.dirname)(E),E.length<(0,ov.getHdbBasePath)().length){f=null;break}if(f)_=await Ld(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=o7[u];if(_)try{c.push(_);let E=a(S=>(S.origin=r,tt(S)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Wc.isMainThread&&(_=await _.startOnMainThread?.({server:mt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let S of[T,h])try{if(+S&&!ev.includes(S)){ev.push(S);let y=TT.get(RT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);TP(S,y)}}catch(y){console.error("Error listening on socket",S,y,u)}if(t.isWorker&&(_=await _.start?.({server:mt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),pT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,iv.handleHDBError)("Can not reference parent directories");let S=(0,Dr.join)(e,l.files);for(let y of await(0,sv.default)(S,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:H}=y,Y=(0,Dr.relative)(e,O),A=(0,Dr.basename)(e),w=l.path||"/";w=w.startsWith("/")?w:w.startsWith("./")?"/"+A+w.slice(2):w==="."?"/"+A:"/"+A+"/"+w,w+=(w.endsWith("/")?"":"/")+Y;try{if(H.isFile()){let G=await i7(O);Wc.isMainThread&&await _.setupFile?.(G,w,O,t),t.isWorker&&await _.handleFile?.(G,w,O,t)}else Wc.isMainThread&&await _.setupDirectory?.(w,O,t),t.isWorker&&await _.handleDirectory?.(w,O,t)}catch(G){console.error(`Could not load ${H.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,G),t.set(l.path||"/",new Qc(G))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Qc(E),null,!0)}}if(Wc.isMainThread&&!av&&(0,nv.watchDir)(e,async()=>cv()),i.extensionModule)return await vu((0,Dr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Qc(i))}}}var Rs,Dr,Wc,rv,TT,RT,sv,nv,iv,ov,n7,i7,mT,pT,av,ST,o7,a7,ev,tv,Qc,lv=pe(()=>{Rs=require("fs"),Dr=require("path"),Wc=require("worker_threads"),rv=require("yaml"),TT=D(Q()),RT=D(g());Bg();Gg();xg();NL();uP();EP();sv=D(require("fast-glob")),nv=D(_t());GE();_n();iv=D(W());Zr();de();RP();ov=D(Q()),n7=D(bP());L_();YP();jP();({readFile:i7}=Rs.promises),mT=TT.get(RT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),pT=new Map;a(cv,"loadComponentDirectories");o7={REST:Sp,graphqlSchema:FE,jsResource:kE,fastifyRoutes:Jp,login:$E,static:Xp,operationsApi:n7,customFunctions:{},clustering:cT,authentication:Ac,mqtt:hT},a7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},ev=[],tv=new Map;a(Ld,"loadComponent");Qc=class extends ht{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 mv=m((C_e,hv)=>{"use strict";var vd=require("fs-extra"),gT=require("path"),Md=F(),_v=x(),Pd=g(),fv=Q(),c7=Tr();hv.exports=u7;async function u7(){let e=l7(),t=fv.get(Pd.CONFIG_PARAMS.ROOTPATH),r=gT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Pd.PACKAGE_ROOT}},n=gT.join(t,"node_modules");await vd.ensureDir(n);let i,o=!0,c=!1;try{i=await vd.readJson(r)}catch(u){if(_v.isEmptyOrZeroLength(e))return;if(u.code!==Pd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!_v.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await dv(l);s.dependencies[u]=_+l}if(!o){Md.notify("Installing components"),await Ev(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await dv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Md.notify("Removing component",u),c=!0);c&&(Md.notify("Updating components."),await Ev(r,s))}a(u7,"installComponents");function l7(){let e=c7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(l7,"getComponentsConfig");async function dv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":gT.extname(e)||await vd.pathExists(e)?"file:":"github:"}a(dv,"getPkgPrefix");async function Ev(e,t){Md.trace("npm installing components package.json",t),await vd.writeFile(e,JSON.stringify(t,null," ")),await G_().installAllRootModules(fv.get(Pd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Ev,"installPackages")});var Tv=m((D_e,pv)=>{var{isMainThread:Sv}=require("worker_threads"),{getTables:_7}=(de(),re(Ne)),{loadComponentDirectories:d7,loadComponent:E7}=(lv(),re(uv)),{resetResources:f7}=(gc(),re(eD)),h7=mv(),m7=Tr(),{dirname:S7}=require("path"),{getConnection:p7}=rt(),T7=Q(),R7=g(),AT=new Map;async function g7(e=!1){!Sv&&T7.get(R7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&p7(),Sv&&await h7();let t=f7();_7(),t.isWorker=e,await E7(S7(m7.getConfigFilePath()),t,"hdb",!0,AT),await d7(AT,t);let r=[];for(let[s]of AT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(g7,"loadRootComponents");pv.exports.loadRootComponents=g7});var _t=m((P_e,Pn)=>{"use strict";var{Worker:A7,MessageChannel:O7,parentPort:gs,isMainThread:IT,threadId:N7,workerData:zc}=require("worker_threads"),{PACKAGE_ROOT:b7}=g(),{join:Av,isAbsolute:y7,extname:Hd}=require("path"),{server:I7}=(_n(),re(BE)),{watch:w7,readdir:C7}=require("fs/promises"),{totalmem:Rv}=require("os"),wT=g(),bi=F(),M_e=g(),{randomBytes:U7}=require("crypto"),D7=1024*1024,Mn=[],Ln=[],L7=50,Ov=1e4,M7="restart",Nv="request_thread_info",bv="resource_report",yv="thread_info",Iv="added-port",P7="ack",OT;Pn.exports={startWorker:NT,restartWorkers:CT,shutdownWorkers:q7,workers:Mn,setMonitorListener:K7,onMessageFromWorkers:F7,onMessageByType:G7,broadcast:x7,broadcastWithAcknowledgement:V7,setChildListenerByType:H7,getWorkerIndex:Cv,getTicketKeys:Uv,setMainIsWorker:v7,restartNumber:zc?.restartNumber||1};var wv;function Cv(){return zc?zc.workerIndex:wv?0:void 0}a(Cv,"getWorkerIndex");function v7(e){wv=e}a(v7,"setMainIsWorker");var Bd;function Uv(){return Bd||(Bd=IT?U7(48):zc.ticketKeys,Bd)}a(Uv,"getTicketKeys");Object.defineProperty(I7,"workerIndex",{get(){return Cv()}});var Dv={[Nv](e,t){$7(t)},[bv](e,t){Y7(t,e)}};function NT(e,t={}){let r=process.constrainedMemory?.()||Rv();r=Math.min(r,Rv());let s=Math.max(Math.floor(r/D7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new O7;c.postMessage({type:Iv,port:u},[u]),i.push(l)}Hd(e)||(e+=".js");let o=new A7(y7(e)?e:Av(b7,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:Pn.exports.restartNumber,ticketKeys:Uv()},transferList:i},t));return Fd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{NT(e,t)},o.on("error",c=>{console.error("Worker error:",c),bi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<L7?(t.unexpectedRestarts=o.unexpectedRestarts+1,NT(e,t)):bi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Dv[c.type]?.(c,o)}),Mn.push(o),Q7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(NT,"startWorker");var B7=[wT.THREAD_TYPES.HTTP];async function CT(e=null,t=2,r=!0){if(IT){if(r){let{loadRootComponents:n}=Tv();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:wT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=B7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Ov*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 gs.postMessage({type:M7,workerType:e})}a(CT,"restartWorkers");function H7(e,t){Dv[e]=t}a(H7,"setChildListenerByType");function q7(e){return CT(e,1/0,!1)}a(q7,"shutdownWorkers");var Lv=[];function F7(e){Lv.push(e)}a(F7,"onMessageFromWorkers");var bT=new Map;function G7(e,t){let r=bT.get(e);r||bT.set(e,r=[]),r.push(t)}a(G7,"onMessageByType");function x7(e){for(let t of Ln)try{t.postMessage(e)}catch(r){bi.error("Unable to send message to worker",r)}}a(x7,"broadcast");var qd=new Map,k7=1;function V7(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=k7++,i=a(()=>{qd.delete(n),--r===0&&t(),s!==gs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,qd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of qd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bi.error("Unable to send message to worker",n)}r===0&&t()})}a(V7,"broadcastWithAcknowledgement");function $7(e){e.postMessage({type:yv,workers:Mv()})}a($7,"sendThreadInfo");function Mv(){let e=Date.now();return Mn.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(Mv,"getChildWorkerInfo");function Y7(e,t){e.resources=t,e.resources.updated=Date.now()}a(Y7,"recordResourceReport");var yT;function K7(e){yT=e}a(K7,"setMonitorListener");var W7=1e3,gv=!1;function Q7(){gv||(gv=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}yT&&yT()},W7).unref())}a(Q7,"startMonitoring");var z7=1e3;if(gs){Fd(gs);for(let e of zc.addPorts)Fd(e);setInterval(()=>{let e=process.memoryUsage();gs.postMessage({type:bv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},z7).unref(),OT=a(()=>new Promise((e,t)=>{gs.on("message",r),gs.postMessage({type:Nv});function r(s){s.type===yv&&(gs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else OT=Mv;Pn.exports.getThreadInfo=OT;function Fd(e,t){Ln.push(e),e.on("message",r=>{if(r.type===Iv)Fd(r.port);else if(r.type===P7){let s=qd.get(r.id);s&&s()}else{for(let n of Lv)n(r,e);let s=bT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fd,"addPort");if(IT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await C7(s,{withFileTypes:!0}))i.isDirectory()&&r(Av(s,i.name));for await(let{filename:i}of w7(s,{persistent:!1}))(Hd(i)===".ts"||Hd(i)===".js"||Hd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await CT(),bi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else gs.on("message",async e=>{let{type:t}=e;t===wT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,gs.unref(),setTimeout(()=>{bi.warn("Thread did not voluntarily terminate",N7),process.exit(0)},Ov).unref())})});function PT(e){let t=e.auditStore=e.openDB(qv.AUDIT_STORE_NAME,X7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Gv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{DT||(DT=setTimeout(()=>{if(DT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Pv,0]})){if((n[0]&15)===MT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Pv/10).unref())}),t}function kd(e,t,r){let s=Vv[r.type],n=3;if(t?t.length>80?(s|=Gd,n=(0,nn.writeKey)(t,As,e?14:6),UT.setUint16(2,n)):(n=(0,nn.writeKey)(t,As,e?11:3),As[1]=n):As[1]=0,e){s|=kv;let i=s&Gd?6:3;UT.setFloat64(i,e),t||(n=i+8)}return As[0]=s,s&Gd?UT.setUint16(4,0):As[2]=0,r.value?Buffer.concat([As.slice(0,n),r.value]):As.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Gd,i=n?6:3,o;r&kv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&LT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Vv[r&7],value:u,lastVersion:o,get user(){return c?(0,nn.readKey)(e,i,c):void 0}}}var nn,xd,qv,Fv,Gv,xv,As,UT,J7,X7,Pv,DT,LT,vv,MT,Bv,Hv,Gd,kv,Vv,Jc=pe(()=>{nn=require("ordered-binary"),xd=D(Q()),qv=D(xe()),Fv=D(g()),Gv=D(_t()),xv=D(x());(0,xd.initSync)();As=Buffer.alloc(1024),UT=new DataView(As.buffer,As.byteOffset,1024),J7={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,nn.writeKey)(e[2],t,r+12)}else return(0,nn.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,nn.readKey)(e,t+12,r)]}else return(0,nn.readKey)(e,t,r)}},X7={encoding:"binary",keyEncoder:J7},Pv=(0,xv.convertToMS)((0,xd.get)(Fv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,DT=null;a(PT,"openAuditStore");LT=16,vv=1,MT=2,Bv=3,Hv=4,Gd=128,kv=64,Vv={put:vv|LT,[vv]:"put",delete:MT,[MT]:"delete",message:Bv|LT,[Bv]:"message",invalidate:Hv,[Hv]:"invalidate"};a(kd,"createAuditEntry");a(vn,"readAuditEntry")});var vT,yi,Z7,Xc,Vd,$v=pe(()=>{vT=D(Ht());Jc();yi=Symbol("completion"),Z7=100,Xc=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,vT.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[yi]&&(i||(i=[]),i.push(d[yi])),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,kd(_.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<Z7>>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=[]}},Vd=class extends Xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,vT.getNextMonotonicTime)())}getReadTxn(){}}});function Qv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Bo||((0,Ii.onMessageByType)(Kv,d=>{let E=d.auditIds;HT(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(Wv,d=>{(0,Os.trace)("confirming to proceed with txn",d.txnId)}),Bo=Object.create(null));let c=Bo[i]||(Bo[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=So(t);let l=new BT(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 HT(e,t,r,s){if(!Bo)return;let n=Bo[e];if(n){if(vo&&vo+1!==r){(0,Os.trace)("Waiting to ensure latest txn id",vo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of $d)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c);if(vo+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:Wv,txnId:r});for(let[o,c]of $d)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c)}$d.delete(r),(0,Os.trace)("Proceeding with txn id",r),vo=r-1,HT(e,t,r,s)})();return $d.set(r,i),i}(0,Os.trace)("Notifying with txn id",r,s),vo=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,Yv.writeKey)(i,eee,0);let _=i[3];_&&(i.length=3);let d,E=So(u),f;do{let h=l.get(E);if(h){for(let S of h)if(!(f&&!S.includeDescendants)){if(S.startTime>=o){(0,Os.info)("omitting",u,S.startTime,o);continue}try{if(S.crossThreads===!1&&!s)continue;if(d===void 0){let y=n.auditStore.get(i);if(!y||(d=vn(y,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}S.listener(u,d,o)}catch(y){console.error(y),(0,Os.info)(y)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function zv(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&j7)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,Ii.broadcast)({type:Kv,path:n,auditIds:l,txnId:c,start:u}),HT(n,l,c,!0))})}}var Os,Ii,Yv,Kv,Wv,j7,Bo,eee,BT,vo,$d,Jv=pe(()=>{Os=D(F()),Ii=D(_t()),Yv=require("ordered-binary");ia();gc();Jc();Kv="transaction",Wv="transaction-await",j7=67108864,eee=Buffer.alloc(4096);a(Qv,"addSubscription");BT=class extends Xr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t}end(){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]}}}toJSON(){return{name:"subscription"}}},$d=new Map;a(HT,"notifyFromTransactionData");a(zv,"listenToCommits")});var Mp={};Ze(Mp,{coerceType:()=>Yd,makeTable:()=>Wd,setServerUtilities:()=>iee});function Wd(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=[]),zv(i,u);let T=0,S,y,O={},H,Y,A,w;for(let z of h)(z.assignCreatedTime||z.name==="__createdtime__")&&(H=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(Y=z),z.expiresAt&&(A=z),z.isPrimaryKey&&(O=z);let G;E&&zT();class k extends ht{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=H;static updatedTimeProperty=Y;static dbisDB=_;static schemaDefined=l;static sourcedFrom(p,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(p,this.sourceOptions);else if(p.mergeSource)this.Source=p.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=p;return(async()=>{let L=!1,b=a(async C=>{let v=C.value,U=C.table?ve[c][C.table]:k;if(c===zr.SYSTEM_SCHEMA_NAME&&(C.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=v[U.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let M=await U.getResource(C.id,C,Zc);switch(C.type){case"put":return M._writeUpdate(v,Zc);case"delete":return M._writeDelete(Zc);case"publish":return M._writePublish(v,Zc);case"invalidate":return M.invalidate(Zc);default:Ui.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe&&(!p.subscribe.reliesOnPrototype||p.prototype.subscribe);C&&f==null&&(f=!0);let v=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ci.getWorkerIndex)()):(0,Ci.getWorkerIndex)()===0,U=C&&v&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U)for await(let M of U)try{if(!(M.type==="transaction"?M.writes[0]:M)){console.error("Bad subscription event");continue}let J=Ye(M,()=>{if(M.type==="transaction"){let Z=[];for(let K of M.writes){K[Oe]=M;try{Z.push(b(K))}catch(te){throw te.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(M),te}}return Promise.all(Z)}else if(M.type==="define_schema"){let Z=this.attributes.slice(0),K;for(let te of M.attributes)Z.find(De=>De.name===te.name)||(Z.push(te),K=!0);K&&(tt({table:n,database:c,attributes:Z,origin:"cluster"}),tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(M)});M.onCommit&&(J?.then&&L&&tu.signalUserChange(new ru.UserEventMsg(process.pid)),J?.then?J.then(M.onCommit):M.onCommit())}catch(V){console.error("error in subscription handler",V)}}catch(C){console.error(C)}})(),this}static getResource(p,N,L){let b=super.getResource(p,N,L);if(p!=null)try{if(b.hasOwnProperty(ce))return b;let C=b._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let v,U,V={transaction:C?.getReadTxn()},J;return ct(p,N,V,(Z,K)=>{K?U(K):(b[ce]=Z?.value,b[Zt]=Z?.version,J=!0,v?.(b))}),J?b:new Promise((Z,K)=>{v=Z,U=K})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return b}static setTTLExpiration(p){(0,Ci.getWorkerIndex)()===0&&(d=p*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:L,version:b}of this.primaryStore.getRange({start:!1,versions:!0}))b<Date.now()-d&&b>0&&L?.__invalidated__==null&&k.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,zT(),k.audit=!0}static coerceId(p){return p===""?null:Yd(p,O)}static async dropTable(){if(delete ve[c][n],c===o){for(let p in r)_.remove(k.tableName+"/"+p),r[p].drop();_.remove(k.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));tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(p,N){return p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(p,N)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[vs])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.read){let b=L[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let v=qT(b,"read");N.select=C.filter(U=>v[U])}else N.select=b.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(p,N,L){if(!p)return!1;let b=p.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let v=qT(C,"update");for(let U in N)if(!v[U])return!1;if(L)for(let U of C){let M=U.attribute_name;!U.update&&!(M in N)&&(N[M]=this.getProperty(M))}}else return!0}}allowCreate(p,N){return this.allowUpdate(p,{})}static allowCreate(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let b=L[n].attribute_permissions;if(b){let C=qT(b,"insert");for(let v in N)if(!C[v])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let N=p.role.permission;if(N.super_user||N[n]?.delete)return!0}update(p,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;if(typeof p=="object"&&p){if(N)for(let C in this[ce])p[C]===void 0&&(p[C]=void 0);b=this[ft],b&&(p=Object.assign(b,p)),this[ft]=b=p}return!this[ce]&&t&&!(b||(b=this[ft]))?.[t]&&(b||(b=this[ft]=Object.create(null)),b[t]=this[ie]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ie],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let V in r)C[V]=this.getProperty(V);let v=k.Source,U,M=this[ie];return p?.isNotification||v?.invalidate&&(!v.invalidate.reliesOnPrototype||v.prototype.invalidate)&&(U=v.invalidate(M,this)),i.put(this[ie],C,L),{type:E&&"invalidate",[yi]:U}}})}static evict(p,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let v=i.getEntry(p);if(!v)return;N=v.value,L=v.version}if(N)for(let v in r)C||(C={__invalidated__:0}),C[v]=N[v];return C?i.put(p,C,L,L):i.remove(p,L)}else return i.remove(p,L)}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=n,p.schema||=c,nB.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let L=this._txnForRequest();if(this[ie]===void 0)throw new Error("Can not save record without an id");let b=this[ce],C,v,U=this[ie];b||(this[ce]={}),L.addWrite({key:U,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(M,V)=>{let J;if(V){if(C)return;let K=i.getEntry(U);b=K?.value;let te=this[Oe];te&&K?.version>(te.lastModified||0)&&(te.lastModified=K.version)}if(!v){if(v=!0,N?.isNotification)p=aa(p);else{if(p[jv]&&(C=!Iu(p),C))return;t&&p[t]!==U&&(p[t]=U),Y&&(p[Y.name]=Y.type==="Date"?new Date(M):Y.type==="String"?new Date(M).toISOString():M),H&&(b?p[H.name]=b[H.name]:p[H.name]=H.type==="Date"?new Date(M):H.type==="String"?new Date(M).toISOString():M),p=aa(p);let K=k.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(J=K.put(U,p,this))}if(p[ce])throw new Error("Can not assign a record with a record property");this[ce]=p}if(Ui.trace("Checking timestamp for put",U,this[Zt]>M,this[Zt],M),this[Zt]>M)return E&&{type:"put",value:i.encoder.encode(p)};let Z=i.encoder.encode(p);return i.put(this[ie],(0,Ho.asBinary)(Z),M),ge(this[ie],b,p),b===null&&!V&&qn(-1),{type:E&&"put",value:Z,[yi]:J}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ce]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),L,b=this[ie],C;return N.addWrite({key:b,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(v,U)=>{let M=this[ce];if(U){let V=i.getEntry(b);M=V?.value;let J=this[Oe];J&&V?.version>(J.lastModified||0)&&(J.lastModified=V.version)}if(!L&&(L=!0,!p?.isNotification)){let V=k.Source;V?.delete&&(!V.delete.reliesOnPrototype||V.prototype.delete)&&(C=V.delete(b,this))}if(!(this[Zt]>v))return ge(this[ie],M),Ui.trace("Write delete entry",E||f,v),E||f?(i.put(this[ie],null,v),E||QT(),U||qn(1)):i.remove(this[ie]),{type:E&&"delete",[yi]:C}}}),!0}search(p){let N=this._txnForRequest();if(!p)throw new Error("No query provided");let L=p.reverse===!0,b=p.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ie]&&(b=[{attribute:null,comparator:"prefix",value:this[ie]}].concat(b));for(let K of b){let te=K[0]??K.attribute,De=te==null?O:h.find(on=>on.name==te);if(De)De.type&&(K[1]===void 0?K.value=C(K.value,De):K[1]=C(K[1],De));else if(te!=null)throw(0,wi.handleHDBError)(new Error,`${te} is not a defined attribute`,404)}function C(K,te){return Array.isArray(K)?K.map(De=>Yd(De,te)):Yd(K,te)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,rB.sortBy)(b,K=>{if(K.estimated_count===void 0){let te=K.comparator||K.search_type;if(te===jc.SEARCH_TYPES.EQUALS){let De=K[0]??K.attribute;if(De==null||De===t)K.estimated_count=1;else{let on=r[De];K.estimated_count=on?on.getValuesCount(K[1]??K.value):1/0}}else te===jc.SEARCH_TYPES.CONTAINS||te===jc.SEARCH_TYPES.ENDS_WITH||te==="ne"?K.estimated_count=1/0:te===jc.SEARCH_TYPES.STARTS_WITH||te==="prefix"?K.estimated_count=ree:K.estimated_count=tee}return K.estimated_count}));let v=N.getReadTxn();v.use();let U=p.select,M=b[0],V;if(!M)V=i.getRange(L?{end:!1,reverse:!0,transaction:v,lazy:U?.length<4}:{start:!1,transaction:v,lazy:U?.length<4}).map(({value:K})=>K?new Promise(te=>setImmediate(()=>te(K))):Ho.SKIP);else{let K=DE(M,v,L,k,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let te=b.slice(1).map(LE);V=Z(K,te)}else{for(let De=1;De<b.length;De++){let on=b[De],rE=DE(on,v,L,k,p.allowFullScan);K=K.concat(rE)}let te=new Set;K=K.filter(De=>te.has(De)?!1:(te.add(De),!0)),V=Z(K)}}(p.offset||p.limit!==void 0)&&(V=V.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),V.onDone=()=>{v.done()};let J=this[Oe];function Z(K,te){let De=te?.length,on={transaction:v,lazy:De>0||U?.length<4,alwaysPrefetch:!0};return K.map(rE=>new Promise(sE=>ct(rE,J,on,IB=>{let nE=IB?.value;if(!nE)return sE(Ho.SKIP);for(let iE=0;iE<De;iE++)if(!te[iE](nE))return sE(Ho.SKIP);sE(nE)})))}return a(Z,"idsToRecords"),V}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Qv(k,this[ie]??null,function(v,U,M){try{this.send({id:v,timestamp:M,...U})}catch(V){console.error(V)}},p.startTime,this[vs]),L=this[ie],b=p.previousCount;b>1e3&&(b=1e3);let C=p.startTime;if(this[vs]){if(C){if(b)throw new wi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:U}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[M,V,J]=v;if(v.length>3&&(J=v.slice(2)),V!==s)continue;let Z=vn(U,i);(L==null||tB(L,J))&&N.send({id:J,timestamp:M,...Z}),N.startTime=M}}else if(b){let v=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[V,J,Z]=U;if(U.length>3&&(Z=U.slice(2)),J!==s)continue;if(L==null||tB(L,Z)){let K=vn(M,i);if(v.push({id:Z,timestamp:V,...K}),--b<=0)break}}catch(V){Ui.error("Error getting history entry",U,V)}for(let U=v.length;U>0;)N.send(v[--U]);v[0]&&(N.startTime=v[0].timestamp)}else if(!p.omitCurrent)for(let{key:v,value:U,version:M}of i.getRange({start:L??!1,end:L==null?void 0:[L,sB.MAXIMUM_KEY],versions:!0}))U&&N.send({id:v,timestamp:M,value:U})}else{b&&!C&&(C=0);let v=this[Zt];if(C<v){let U=[],M=v;do{let V=[M,s,L],J=u.get(V);if(J){p.omitCurrent=!0;let Z=vn(J,i);U.push({id:L,timestamp:M,...Z}),M=Z.lastVersion}else break;b&&b--}while(M>C&&b!==0);for(let V=U.length;V>0;)N.send(U[--V]);N.startTime=v}!p.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[Zt],value:this})}return p.listener&&N.on("data",p.listener),N}doesExist(){return!!this[ce]}async publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let L=this._txnForRequest(),b=this[ie]||null,C,v;L.addWrite({store:i,key:b,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(U,M)=>{if(this.validate(p),!v&&(v=!0,!N?.isNotification)){let Z=k.Source;Z?.publish&&(!Z.publish.reliesOnPrototype||Z.prototype.publish)&&(C=Z.publish(b,p,this))}let V=M>0?i.get(b):this[ce];V===void 0&&!M&&(E||f)&&(E||QT(),qn(1));let J={type:"message",value:i.encoder.encode(p),[yi]:C};return!L.hasWrittenTime&&this[Zt]>U&&(U=J.newTxnTime=this[Zt]+.001),i.put(b,V??null,U),J}})}_txnForRequest(){let p=this[Oe],N=p?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new Xc(i,p.user,u)),L}else return new Vd(i,p.user,u)}validate(p){let N;for(let L=0,b=h.length;L<b;L++){let C=h[L];if(C.type){let v=p[C.name];if(v!=null)switch(C.type){case"Int":case"Float":(typeof v!="number"||C.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(U=>typeof U=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${C.name} must be a string`)}}C.required&&p[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new wi.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}static async addAttributes(p){let N=h.slice(0);for(let L of p){if(!L.name)throw new wi.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return tt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static async removeAttributes(p){let N=h.filter(L=>!p.includes(L.name));return tt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static getRecordCount(){let p=0;for(let{key:N,value:L}of i.getRange({end:!1}))p++,N[0]?.description==="deletions"&&(p+=L||0);return i.getStats().entryCount-p}static updatedAttributes(){Cu(this,this)}static async deleteHistory(p=0){let N;for(let{key:L,value:b}of u.getRange({start:[0,0],end:[p,0]})){await new Promise(M=>setImmediate(M));let[C,v,U]=L;L.length>3&&(U=L.slice(2)),v===s&&(N=i.remove(U))}await N}static async*getHistory(p=0,N=1/0){for(let{key:L,value:b}of u.getRange({start:[p,0],end:[N,0]})){await new Promise(V=>setImmediate(V));let[C,v,U]=L;if(L.length>3&&(U=L.slice(2)),v!==s)continue;let M=vn(b,i);M.id=U,M.timestamp=C,yield M}}static async getHistoryOfRecord(p){let N=[],L=i.getEntry(p);if(!L)return N;let b=L.version,C=0;do{await new Promise(M=>setImmediate(M));let v=[b,s,p],U=u.get(v);if(U){let M=vn(U,i);M.timestamp=b,N.push(M),b=M.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){G?.remove()}}k.updatedAttributes();let X=k.prototype;return X[jv]=!0,d&&k.setTTLExpiration(d/1e3),A&&yB(),k;function ge(z,p,N){let L;for(let b in r){let C=r[b],v=C.isIndexing,U=N?.[b],M=p?.[b];if(U===M&&!v)continue;L=!0;let V=(0,eu.getIndexedValues)(M);if(V){Xv&&C.prefetch(V.map(J=>({key:J,value:z})),eB);for(let J=0,Z=V.length;J<Z;J++)C.remove(V[J],z)}if(V=(0,eu.getIndexedValues)(U),V){Xv&&C.prefetch(V.map(J=>({key:J,value:z})),eB);for(let J=0,Z=V.length;J<Z;J++)C.put(V[J],z)}}return L}a(ge,"updateIndices");function ct(z,p,N,L){let b=a(()=>{let C=N.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let v;C&&!C.hasRunLoadRecord&&(v=!0,C.hasRunLoadRecord=!0);let U;try{U=i.getEntry(z,N)}catch(Z){throw Z.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+v,console.error(Z),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),Z}let M,V,J;if(U?(p&&U?.version>(p.lastModified||0)&&(p.lastModified=U.version),V=U.version,M=U.value,(V<0||!M||typeof M.__invalidated__=="number"||d&&V<Date.now()-d)&&(J=!0)):J=!0,J&&!N?.allowInvalidated){let Z=k.Source;if(Z&&Z.get&&(!Z.get.reliesOnPrototype||Z.prototype.get))return ko(z,M,V,p).then(te=>{if(te?.value?.[ce])throw new Error("Can not assign a record with a record property");L(te)},te=>{L(null,te)})}if(U?.value?.[ce])throw new Error("Can not assign a record with a record property");L(U)},"whenPrefetched");if(!N.alwaysPrefetch&&(z==null||i.cache?.get(z)))return b();i.prefetch([z],b)}a(ct,"loadRecord");function Li(){w=new Set,(0,Ci.onMessageByType)("transaction",z),i.on("aftercommit",z);function z(){for(let p of w)p()}a(z,"onCommit")}a(Li,"setupCommitListeners");async function ko(z,p=null,N,L){if(N<0){let U;return w||Li(),await new Promise(M=>{let V,J=a(()=>{if(U=i.getEntry(z),!U||U.version>0){if(clearTimeout(V),w.delete(J),typeof U?.value?.__invalidated__=="number")return M(ko(z,U.value,U.version,L));M(U)}},"listener");w.add(J),V=setTimeout(()=>{w.delete(J),M(ko(z,U?.value,void 0,L))},1e4).unref()})}let b=p?.__invalidated__,C=-(N||1);i.put(z,p,C,N);let v={transaction:L?.transaction};try{let U=await k.Source.get(z,v),M=v.lastModified||N;(!M||d&&M<Date.now()-d)&&(M=(0,eu.getNextMonotonicTime)());let J=ge(z,p,U)&&N||b>0;return U?(t&&(U[t]=z),typeof U.toJSON=="function"&&(U=U.toJSON()),i.put(z,U,M,C)):i.remove(z,C),J&&E&&u.put([M,s,z],kd(b,null,U?{type:"put",value:i.encoder.encode(U)}:{type:"delete"})),{version:M,value:U}}catch(U){throw i.put(z,p,N,C),U}}a(ko,"getFromSource");function qn(z){T||(T=i.get([Zv,FT.threadId])||0),T+=z,y||(y=setTimeout(()=>{y=null,i.rootStore.status==="open"&&i.put([Zv,FT.threadId],T)},50))}a(qn,"recordDeletion");function QT(){S||(S=setTimeout(()=>{if(S=null,i.rootStore.status==="open"){for(let{key:z,value:p}of i.getRange({start:!0}))if(p===null){let N=i.getEntry(z);N?.value===null&&i.remove(z,N.version),qn(-1)}}},k.getRecordCount()*100+nee).unref())}a(QT,"enqueueDeletionCleanup");function zT(){G=u?.addDeleteRemovalCallback(s,z=>{let p=i.getEntry(z);p?.value===null&&i.remove(z,p.version),qn(-1)})}a(zT,"addDeleteRemoval");function yB(){(0,Ci.getWorkerIndex)()===0&&setInterval(async()=>{try{let z=A.name,p=r[z];if(!p)throw new Error(`expiresAt attribute ${A} must be indexed`);for(let{value:N}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(N);L.value?.[z]<Date.now()&&k.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(z){Ui.error("Error in evicting old records",z)}},see).unref()}a(yB,"runRecordExpirationEviction")}function qT(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 eB(){}function iee(e){nB=e}function Yd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!oee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Kd.autoCast)(e)}function tB(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 zr,Ho,eu,rB,FT,jc,su,wi,tu,ru,Ui,sB,Ci,Kd,nB,tee,ree,see,Xv,Zv,Zt,jv,rde,Zc,nee,oee,ld=pe(()=>{zr=D(g()),Ho=require("lmdb"),eu=D(Ht()),rB=require("lodash"),FT=require("worker_threads");Zr();$v();jc=D(xe()),su=D(Q());Jv();wi=D(W()),tu=D(xs()),ru=D(Fr());de();Mu();Ui=D(F());Du();$n();sB=require("ordered-binary"),Ci=D(_t());Jc();Kd=D(x()),tee=1e8,ree=1e7,see=6e4;su.initSync();Xv=su.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Zv=Symbol.for("deletions"),Zt=Symbol.for("version"),jv=Symbol.for("incremental-update"),rde=Symbol("source-resource"),Zc={isNotification:!0,allowInvalidated:!0},nee=(0,Kd.convertToMS)(su.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Wd,"makeTable");a(qT,"attributesAsObject");a(eB,"noop");a(iee,"setServerUtilities");oee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Yd,"coerceType");a(tB,"isDescendantId")});var Ne={};Ze(Ne,{database:()=>Ha,databases:()=>ve,dropDatabase:()=>xh,dropTableMeta:()=>dee,getDatabases:()=>xr,getTables:()=>aee,onUpdatedTable:()=>uT,readMetaDb:()=>nu,resetDatabases:()=>cee,table:()=>tt,tables:()=>nr});function aee(){return Xd||xr(),nr||{}}function xr(){if(Xd)return ve;Xd=!0,xo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&nu((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,Go.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,Go.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Go.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Go.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);nu((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&nu((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&nu(u,o,r,null,!0)}}for(let r in ve){let s=xo.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[Zd]}}return xo=null,ve}}function cee(){Xd=!1;for(let[,e]of Bn)e.needsDeletion=!0;xr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return ve}function nu(e,t,r=kT,s,n){let i=new GT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,Qd.open)(i),Bn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(qo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Qd.open)(i),l.isLegacy=!0):l=PT(o));let _=cB(r),d=_[Zd],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,S]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),S===""?S=h.name:S||(S=T,T=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(T);let y=E.get(T);y||E.set(T,y={attributes:[]}),(S==null||h.is_hash_attribute)&&(y.primary=h),S!=null&&y.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:S}=h;if(!S){for(let X of T)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let y=_[f],O={},H=[],Y,A,w=typeof S.audit=="boolean"?S.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),G=S.trackDeletes,k=S.expiration;if(y)O=y.indices,H=y.attributes,y.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Fo)||0)&&u.putSync(Fo,Y+1):(S.tableId=Y=u.get(Fo),Y||(Y=1),u.putSync(Fo,Y+1),u.putSync(S.key,S));let X=new Di.default(!S.is_hash_attribute,S.is_hash_attribute);Le.trace(`openDB ${S.key} from ${r}`),A=o.openDB(S.key,X),A.rootStore=o,A.tableId=Y}for(let X of T){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!O[X.name]){let ct=new Di.default(!X.is_hash_attribute,X.is_hash_attribute);Le.trace(`openDB ${X.key} from ${r}`),O[X.name]=o.openDB(X.key,ct)}let ge=H.find(ct=>ct.name===X.name);ge?H.splice(H.indexOf(ge),1,X):H.push(X)}}catch(ge){Le.error("Error trying to update attribute",X,H,O,ge)}}if(!y){Le.trace(`creating table class ${f}`,Object.keys(_)),y=uB(_,f,Wd({primaryStore:A,auditStore:l,audit:w,expirationMS:k&&k*1e3,trackDeletes:G,tableName:f,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:S.schemaDefined,dbisDB:u})),y.schemaVersion=1;for(let X of VT)X(y)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function cB(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),xo&&!xo.has(e)){let r=new Set;t[Zd]=r,xo.set(e,r)}return t}function uB(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=kT),xr();let r=cB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Bn.get(i);if(!o){let c=new GT.default(i,!1);o=(0,Qd.open)(c),Bn.set(i,o)}return o}async function xh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Bn.delete(n.path),n.status==="open"&&(await n.close(),await iB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[Zd]}delete ve[e]}function tt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=kT);let u=Ha({database:t,table:e}),l=ve[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 T=new Di.default(!1);for(let A of s)A.attribute?(A.name=A.attribute,A.indexed=!0):A.attribute=A.name,A.expiresAt&&(A.indexed=!0);let S,y;if(_){if(Le.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 A=u.auditStore;A||(A=PT(u)),E=s.find(X=>X.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let w=new Di.default(!1,!0),G=e+"/";Le.trace(`openDB ${G} from ${t}`);let k=u.openDB(G,w);k.rootStore=u,Le.trace(`openDB ${qo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(qo.INTERNAL_DBIS_NAME,T),k.tableId=h.get(Fo),k.tableId||(k.tableId=1),h.putSync(Fo,k.tableId+1),E.tableId=k.tableId,_=uB(l,e,Wd({primaryStore:k,auditStore:A,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,S=!0,Y(),h.put(G,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${qo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(qo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:A,value:w}of h.getRange({start:!0})){let[G,k]=A.toString().split("/");if(k===""&&(k=w.name),k){if(G!==e)continue}else k=G;if(!s.find(ge=>ge.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){Y(),S=!0,h.remove(A);let ge=_.indices[G];ge&&O.push(ge)}}Le.trace(`${e} table loading, comparing atributes`);let H=[];try{for(let A of s||[]){let w=e+"/"+(A.name||"");Object.defineProperty(A,"key",{value:w,configurable:!0});let G=h.get(w);if(A.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),G||(w=e+"/",G=h.get(w));let X=Object.assign({},G,{audit:!0});S=!0,Y(),h.put(w,X)}continue}G?.attribute&&!G.name&&(G.indexed=!0);let k=!G||G.type!==A.type||G.indexed!==A.indexed||JSON.stringify(G.attributes)!==JSON.stringify(A.attributes)||JSON.stringify(G.elements)!==JSON.stringify(A.elements);if(A.indexed){let X=new Di.default(!0,!1);Le.trace(`openDB ${w} from ${t}`);let ge=u.openDB(w,X);(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<iu.workerData?.restartNumber)&&(S=!0,Y(),G=h.get(w),(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<iu.workerData?.restartNumber)&&(S=!0,A.lastIndexedKey=G?.lastIndexedKey||!1,A.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(A,"dbi",{value:ge}),H.push(A)),h.put(w,A)),f[A.name]=ge}else k&&(S=!0,Y(),h.put(w,A))}}finally{y&&y()}if(S&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),H.length>0||O.length>0?_.indexingOperation=_ee(_,H,O):S&&zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,S)for(let A of VT)A(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function Y(){y||u.transactionSync(()=>({then(A){y=A}}))}a(Y,"startTxn")}async function _ee(e,t,r){try{let s=e.schemaVersion;await zd.signalSchemaChange(new Jd.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,T=(0,oB.getIndexedValues)(_[h]);if(T)for(let S=0,y=T.length;S<y;S++)f.dbi.put(T[S],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),iu.workerData&&iu.workerData.restartNumber!==aB.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>uee?await n:u>lee&&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 zd.signalSchemaChange(new Jd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function dee({table:e,database:t}){let r=Ha({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 uT(e){VT.push(e)}var yt,qo,Qd,Me,fr,Go,Di,GT,jt,iB,xT,oB,zd,Jd,iu,Le,aB,kT,Zd,nr,ve,Fo,VT,Xd,Bn,xo,uee,lee,de=pe(()=>{yt=D(Q()),qo=D(xe()),Qd=require("lmdb"),Me=require("path"),fr=require("fs"),Go=D(we());ld();Di=D(Hu()),GT=D(Fu()),jt=D(g()),iB=D(require("fs-extra")),xT=require("../index"),oB=D(Ht()),zd=D(xs()),Jd=D(Fr()),iu=require("worker_threads"),Le=D(F()),aB=D(_t());Jc();kT="data",Zd=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,xT._assignPackageExport)("databases",ve);(0,xT._assignPackageExport)("tables",nr);Fo=Symbol.for("next-table-id"),VT=[],Bn=new Map;a(aee,"getTables");a(xr,"getDatabases");a(cee,"resetDatabases");a(nu,"readMetaDb");a(cB,"ensureDB");a(uB,"setTable");a(Ha,"database");a(xh,"dropDatabase");a(tt,"table");uee=1e3,lee=10;a(_ee,"runIndexing");a(dee,"dropTableMeta");a(uT,"onUpdatedTable")});var x=m((_de,OB)=>{"use strict";var Hn=require("path"),fB=require("fs-extra"),er=F(),lB=require("fs-extra"),jd=require("os"),Eee=require("net"),fee=require("recursive-iterator"),Ge=g(),hee=wR(),_B=require("papaparse"),eE=require("moment"),{inspect:mee}=require("util"),dB=require("is-number"),lde=require("lodash"),See=require("minimist"),pee=require("https"),Tee=require("http"),{hdb_errors:tE}=W(),Ree=/^((\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)))$/,hB=require("util").promisify(setTimeout),gee=100,Aee=5,Oee="",Nee=4,EB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};OB.exports={isEmpty:hr,isEmptyOrZeroLength:Ns,arrayHasEmptyValues:Iee,arrayHasEmptyOrZeroLengthValues:wee,buildFolderPath:Cee,isBoolean:mB,errorizeMessage:bee,stripFileExtension:Dee,autoCast:Lee,autoCastJSON:SB,autoCastJSONDeep:YT,removeDir:Mee,compareVersions:Pee,isCompatibleDataVersion:vee,escapeRawValue:Bee,unescapeValue:Hee,stringifyProps:qee,timeoutPromise:Gee,isClusterOperation:kee,getClusterUser:$ee,checkGlobalSchemaTable:Vee,getHomeDir:TB,getPropsFilePath:Fee,promisifyPapaParse:Yee,removeBOM:RB,createEventPromise:Kee,checkProcessRunning:Wee,checkSchemaTableExist:Qee,checkSchemaExists:gB,checkTableExists:AB,getStartOfTomorrowInSeconds:zee,getLimitKey:Jee,isObject:Uee,isNotEmptyAndHasValue:yee,autoCasterIsNumberCheck:pB,backtickASTSchemaItems:Xee,isPortTaken:xee,createForkArgs:Zee,autoCastBoolean:jee,async_set_timeout:hB,getTableHashAttribute:ete,doesSchemaExist:tte,doesTableExist:rte,stringifyObj:ste,ms_to_time:nte,changeExtension:ite,getEnvCliRootPath:KT,noBootFile:ote,httpRequest:ate,transformReq:cte,convertToMS:ute,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function bee(e){return e instanceof Error?e:new Error(e)}a(bee,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function yee(e){return!hr(e)&&(e||e===0||e===""||mB(e))}a(yee,"isNotEmptyAndHasValue");function Ns(e){return hr(e)||e.length===0||e.size===0}a(Ns,"isEmptyOrZeroLength");function Iee(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(Iee,"arrayHasEmptyValues");function wee(e){if(Ns(e))return!0;for(let t=0;t<e.length;t++)if(Ns(e[t]))return!0;return!1}a(wee,"arrayHasEmptyOrZeroLengthValues");function Cee(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(Cee,"buildFolderPath");function mB(e){return hr(e)?!1:e===!0||e===!1}a(mB,"isBoolean");function Uee(e){return hr(e)?!1:typeof e=="object"}a(Uee,"isObject");function Dee(e){return Ns(e)?Oee:e.slice(0,-Nee)}a(Dee,"stripFileExtension");function Lee(e){return hr(e)||e===""||typeof e!="string"?e:EB[e]!==void 0?EB[e]:pB(e)===!0?Number(e):Ree.test(e)?new Date(e):e}a(Lee,"autoCast");function SB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(SB,"autoCastJSON");function YT(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=YT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=YT(r);s!==r&&(e[t]=s)}return e}else return SB(e)}a(YT,"autoCastJSONDeep");function pB(e){if(e.startsWith("0.")&&dB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&dB(e))}a(pB,"autoCasterIsNumberCheck");async function Mee(e){if(Ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await lB.emptyDir(e),await lB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(Mee,"removeDir");function Pee(e,t){if(Ns(e)){er.info("Invalid current version sent as parameter.");return}if(Ns(t)){er.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(Pee,"compareVersions");function vee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(vee,"isCompatibleDataVersion");function Bee(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(Bee,"escapeRawValue");function Hee(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Hee,"unescapeValue");function qee(e,t){if(hr(e))return er.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+jd.EOL}!Ns(s)&&s[0]===";"?r+=" "+s+n+jd.EOL:Ns(s)||(r+=s+"="+n+jd.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(qee,"stringifyProps");function TB(){let e;try{e=jd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(TB,"getHomeDir");function Fee(){let e=Hn.join(TB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return fB.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(Fee,"getPropsFilePath");function Gee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Gee,"timeoutPromise");async function xee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Eee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xee,"isPortTaken");function kee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kee,"isClusterOperation");function Vee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return tE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return tE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Vee,"checkGlobalSchemaTable");function $ee(e,t){if(hr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||Ns(e)){er.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){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($ee,"getClusterUser");function Yee(){_B.parsePromise=function(e,t,r){return new Promise(function(s,n){_B.parse(e,{header:!0,transformHeader:RB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Yee,"promisifyPapaParse");function RB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(RB,"removeBOM");function Kee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${mee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Kee,"createEventPromise");async function Wee(e){let t=!0,r=0;do await hB(gee*r++),(await hee.findPs(e)).length>0&&(t=!1);while(t&&r<Aee);if(t)throw new Error(`process ${e} was not started`)}a(Wee,"checkProcessRunning");function Qee(e,t){let r=gB(e);if(r)return r;let s=AB(e,t);if(s)return s}a(Qee,"checkSchemaTableExist");function gB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return tE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(gB,"checkSchemaExists");function AB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return tE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(AB,"checkTableExists");function zee(){let e=eE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=eE().utc().unix();return e-t}a(zee,"getStartOfTomorrowInSeconds");function Jee(){return eE().utc().format("DD-MM-YYYY")}a(Jee,"getLimitKey");function Xee(e){try{let t=new fee(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){er.error("Got an error back ticking items."),er.error(t)}}a(Xee,"backtickASTSchemaItems");function Zee(e){return[e]}a(Zee,"createForkArgs");function jee(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jee,"autoCastBoolean");function ete(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ete,"getTableHashAttribute");function tte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(tte,"doesSchemaExist");function rte(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(rte,"doesTableExist");function ste(e){try{return JSON.stringify(e)}catch{return e}}a(ste,"stringifyObj");function nte(e){let t=eE.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(nte,"ms_to_time");function ite(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(ite,"changeExtension");function KT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=See(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(KT,"getEnvCliRootPath");var $T;function ote(){if($T)return $T;let e=KT();KT()&&fB.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&($T=!0)}a(ote,"noBootFile");function ate(e,t){let r;return e.protocol==="http:"?r=Tee:r=pee,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(ate,"httpRequest");function cte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(cte,"transformReq");function ute(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(ute,"convertToMS")});var bB=m((fde,NB)=>{"use strict";var WT=g(),lte=x(),_te=_s(),Jr=F(),dte=__(),Ete=sc(),Ede=DS(),fte=Gs(),hte=ac(),mte=require("semver/functions/gte"),Ste=3e4,pte=7;NB.exports=Tte;async function Tte(){try{Jr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await fte.setSchemaDataToGlobalAsync();let e=await _te.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===WT.PRE_4_0_0_VERSION&&t.push(Rte(n))}await Promise.allSettled(t),Jr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Jr.error(e),e}}a(Tte,"updateAllNodes");async function Rte(e){try{let{name:t,subscriptions:r}=e;Jr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<pte;){let i=[];if(await dte.buildNodeStatus(e,i),Jr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&mte(i[0].system_info.hdb_version,"4.0.0")){Jr.notify("Received open status from node:",t,"calling add node");let o={operation:WT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await Ete(o,!0),Jr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Jr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await lte.async_set_timeout(Ste)}s||(Jr.error("4.0.0 node update was unable to update connection to node:",t),Jr.error("Removing following node record from hdb_nodes",e),await hte({operation:WT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Jr.error(t),t}}a(Rte,"updateNode")});var gte=bB();(async()=>{try{await gte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();
26
+ `+nT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(F9,"getServerOptions");function G9(){let e=Qr.get(C9),t=Qr.get(U9),r;return e&&(e===!0||e.toUpperCase()===yP)&&(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(G9,"getCORSOpts");function x9(){return Qr.get(M9)}a(x9,"getHeaderTimeoutConfig")});var GP=m((__e,FP)=>{"use strict";var{decode:k9}=require("msgpackr"),{isMainThread:V9,parentPort:$9,threadId:u_e}=require("worker_threads"),iT=nt(),Bo=Be(),Y9=A(),Wc=x(),CP=Q(),LP=A();dt();var K9=xs(),{recordAction:W9,recordActionBinary:Q9}=(ai(),re(Bl)),{publishToStream:z9}=iT,l_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},J9,X9,Z9,MP,PP;FP.exports={initialize:vP,workQueueListener:qP,setSubscription:j9,setIgnoreOrigin:t7,getDatabaseSubscriptions:e7};async function vP(){PP=!0,Wc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await iT.getNATSReferences();J9=e,X9=e.info.server_name,Z9=t,MP=r}a(vP,"initialize");var Cd=new Map;function j9(e,t,r){let s=Cd.get(e);s||Cd.set(e,s=new Map),s.set(t,r),PP||vP().then(qP)}a(j9,"setSubscription");function e7(){return Cd}a(e7,"getDatabaseSubscriptions");var BP;function t7(e){BP=e}a(t7,"setIgnoreOrigin");var HP=100,UP=new Array(HP),wd=0;async function qP(){let t=await(await MP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await UP[wd],UP[wd]=r7(r).catch(s=>{Wc.error(s)}),++wd>=HP&&(wd=0)}a(qP,"workQueueListener");V9||$9.on("message",async e=>{let{type:t}=e;t===LP.ITC_EVENT_TYPES.SHUTDOWN&&iT.closeConnection()});async function r7(e){let t=k9(e.data);W9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===CP.get(Y9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!BP;if(Q9(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;Wc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Wc.trace(`messageProcessor nats msg id: ${e.headers.get(Bo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Cd.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:DP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:DP(i),value:O,id:_?.[k],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}CP.get(LP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&z9(e.subject.split(".").slice(0,-1).join("."),K9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Wc.error(i)}e.ack()}a(r7,"messageProcessor");function DP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(DP,"convertOperation")});var _T={};je(_T,{disableNATS:()=>n7,setNATSReplicator:()=>oT,start:()=>s7});function s7(){Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&o7()}function n7(e=!0){YP=e}function o7(){if(YP)return;let e=xr(),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];oT(n,r,i)}}dT((r,s)=>{oT(r.tableName,r.databaseName,r),s&&WP(r)}),!xP&&(xP=!0)}function oT(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 mt{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ae],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ae],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ae]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ae],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ae],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ae]})}static defineSchema(o){WP(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 Zr;return(0,kP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<i7}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 Ud(i.transaction,i)),o.user=i.user):o=KP),o}a(n,"getNATSTransaction")}function WP(e){let t=Dd.default.get(Ld.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,lT.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 cT,uT,lT,kP,VP,Dd,Ld,$P,YP,i7,KP,xP,Ud,aT,QP=Se(()=>{de();jr();cT=C(nt()),uT=C(Be()),lT=C(xs());aa();kP=C(GP()),VP=C(Ht()),Dd=C(Q()),Ld=C(A()),$P=C(x());a(s7,"start");a(n7,"disableNATS");i7=2;a(o7,"assignReplicationSource");a(oT,"setNATSReplicator");a(WP,"publishSchema");Ud=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=Dd.default.get(Ld.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||($P.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,cT.publishToStream)(`${uT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,lT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},aT=class extends Ud{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,VP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};KP=new aT});async function JP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await ET.getResource(e,{});n=new hT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await ET.get(e);i&&i.delete()}n=new Pd(e,t)}return n}function fT(){return Md++,Md>65500&&(Md=1),Md}var zP,Qc,ET,Md,Pd,hT,XP=Se(()=>{de();Oc();zP=C(Ht()),Qc=C(x());Yn();ET=st({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(JP,"getSession");Md=1;a(fT,"getNextMessageId");Pd=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(O=>O.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=Cn.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 T=h.path,p=h.Resource,R=await Ye(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=fT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Qc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return fT()}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=Cn.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 Ye(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=[]}},hT=class extends Pd{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=fT();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,Qc.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,zP.getNextMonotonicTime)()),(0,Qc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),ET.put(this.sessionRecord)),t.qos}}});var pT={};je(pT,{start:()=>c7});async function c7({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:_}=ev(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,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;a7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,tv.getSuperUser)());let{onMessage:u,onClose:l}=ev(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function ev(e,t,r,s,n){jP||(jP=!0,nm(_=>{_.push({metric:"mqtt-connections",connections:mT})})),mT++;let i,o={protocolVersion:4},c=(0,vd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){mT--,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 tt.auth(_.username,_.password.toString()),(0,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&ZP.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ST.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&ZP.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.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=JP({user:s,..._}),i=await i}catch(O){return(0,nn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,nn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,nn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=yo(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!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 T=(0,vd.generate)(f,o);t(T),_s(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var vd,tv,ST,on,nn,ZP,a7,jP,mT,rv=Se(()=>{vd=require("mqtt-packet");XP();tv=C(br());go();ai();Xr();ST=C(Q()),on=C(A()),nn=C(x()),ZP=(0,nn.loggerWithTag)("auth-event"),a7=!0;a(c7,"start");mT=0;a(ev,"onSocket")});var dv={};je(dv,{loadComponent:()=>Bd,loadComponentDirectories:()=>_v});function _v(e,t){t&&(RT=t),e&&(gT=e);let r=[];if((0,As.existsSync)(TT)){let n=(0,As.readdirSync)(TT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(TT,o);r.push(Bd(c,RT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Bd(s,RT,s)),Promise.all(r).then(()=>{lv=!0})}async function Bd(e,t,r,s,n){if(!nv.has(e)){nv.set(e,!0),n&&(gT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(o)?i=(0,iv.parseDocument)((0,As.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=d7;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,As.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,uv.getHdbBasePath)().length){f=null;break}if(f)_=await Bd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=_7[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,st(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(zc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!sv.includes(p)){sv.push(p);let R=AT.get(OT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);AP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),gT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,cv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,ov.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await l7(O);zc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else zc.isMainThread&&await _.setupDirectory?.(b,O,t),t.isWorker&&await _.handleDirectory?.(b,O,t)}catch(P){console.error(`Could not load ${k.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,P),t.set(l.path||"/",new Jc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Jc(E),null,!0)}}if(zc.isMainThread&&!lv&&(0,av.watchDir)(e,async()=>_v()),i.extensionModule)return await Fu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Jc(i))}}}var As,Mr,zc,iv,AT,OT,ov,av,cv,uv,u7,l7,TT,gT,lv,RT,_7,d7,sv,nv,Jc,Ev=Se(()=>{As=require("fs"),Mr=require("path"),zc=require("worker_threads"),iv=require("yaml"),AT=C(Q()),OT=C(A());Fg();Vg();$g();wL();EP();SP();ov=C(require("fast-glob")),av=C(dt());VE();Xr();cv=C(W());jr();de();OP();uv=C(Q()),u7=C(wP());v_();QP();rv();({readFile:l7}=As.promises),TT=AT.get(OT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),gT=new Map;a(_v,"loadComponentDirectories");_7={REST:Rp,graphqlSchema:kE,jsResource:YE,fastifyRoutes:jp,login:WE,static:eT,operationsApi:u7,customFunctions:{},clustering:_T,authentication:Nc,mqtt:pT},d7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},sv=[],nv=new Map;a(Bd,"loadComponent");Jc=class extends mt{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 Tv=m((F_e,pv)=>{"use strict";var Fd=require("fs-extra"),NT=require("path"),Hd=x(),fv=V(),qd=A(),Sv=Q(),E7=Tr();pv.exports=f7;async function f7(){let e=h7(),t=Sv.get(qd.CONFIG_PARAMS.ROOTPATH),r=NT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+qd.PACKAGE_ROOT}},n=NT.join(t,"node_modules");await Fd.ensureDir(n);let i,o=!0,c=!1;try{i=await Fd.readJson(r)}catch(u){if(fv.isEmptyOrZeroLength(e))return;if(u.code!==qd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!fv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await hv(l);s.dependencies[u]=_+l}if(!o){Hd.notify("Installing components"),await mv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await hv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Hd.notify("Removing component",u),c=!0);c&&(Hd.notify("Updating components."),await mv(r,s))}a(f7,"installComponents");function h7(){let e=E7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(h7,"getComponentsConfig");async function hv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":NT.extname(e)||await Fd.pathExists(e)?"file:":"github:"}a(hv,"getPkgPrefix");async function mv(e,t){Hd.trace("npm installing components package.json",t),await Fd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(Sv.get(qd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(mv,"installPackages")});var Av=m((x_e,gv)=>{var{isMainThread:Rv}=require("worker_threads"),{getTables:m7}=(de(),re(Ne)),{loadComponentDirectories:S7,loadComponent:p7}=(Ev(),re(dv)),{resetResources:T7}=(Oc(),re(nD)),R7=Tv(),g7=Tr(),{dirname:A7}=require("path"),{getConnection:O7}=nt(),N7=Q(),b7=A(),bT=new Map;async function y7(e=!1){!Rv&&N7.get(b7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&O7(),Rv&&await R7();let t=T7();m7(),t.isWorker=e,await p7(A7(g7.getConfigFilePath()),t,"hdb",!0,bT),await S7(bT,t);let r=[];for(let[s]of bT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(y7,"loadRootComponents");gv.exports.loadRootComponents=y7});var dt=m(($_e,vn)=>{"use strict";var{Worker:I7,MessageChannel:w7,parentPort:Os,isMainThread:UT,threadId:C7,workerData:Xc}=require("worker_threads"),{PACKAGE_ROOT:U7}=A(),{join:bv,isAbsolute:D7,extname:xd}=require("path"),{server:L7}=(Xr(),re(gu)),{watch:M7,readdir:P7}=require("fs/promises"),{totalmem:Ov}=require("os"),DT=A(),yi=x(),V_e=A(),{randomBytes:v7}=require("crypto"),B7=1024*1024,Pn=[],Mn=[],H7=50,yv=1e4,q7="restart",Iv="request_thread_info",wv="resource_report",Cv="thread_info",Uv="added-port",F7="ack",yT;vn.exports={startWorker:IT,restartWorkers:LT,shutdownWorkers:V7,workers:Pn,setMonitorListener:X7,onMessageFromWorkers:$7,onMessageByType:Y7,broadcast:K7,broadcastWithAcknowledgement:Q7,setChildListenerByType:k7,getWorkerIndex:Lv,getTicketKeys:Mv,setMainIsWorker:G7,restartNumber:Xc?.restartNumber||1};var Dv;function Lv(){return Xc?Xc.workerIndex:Dv?0:void 0}a(Lv,"getWorkerIndex");function G7(e){Dv=e}a(G7,"setMainIsWorker");var Gd;function Mv(){return Gd||(Gd=UT?v7(48):Xc.ticketKeys,Gd)}a(Mv,"getTicketKeys");Object.defineProperty(L7,"workerIndex",{get(){return Lv()}});var Pv={[Iv](e,t){z7(t)},[wv](e,t){J7(t,e)}};function IT(e,t={}){let r=process.constrainedMemory?.()||Ov();r=Math.min(r,Ov());let s=Math.max(Math.floor(r/B7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Mn){let{port1:u,port2:l}=new w7;c.postMessage({type:Uv,port:u},[u]),i.push(l)}xd(e)||(e+=".js");let o=new I7(D7(e)?e:bv(U7,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:vn.exports.restartNumber,ticketKeys:Mv()},transferList:i},t));return Vd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{IT(e,t)},o.on("error",c=>{console.error("Worker error:",c),yi.error("Worker error:",c)}),o.on("exit",c=>{Pn.splice(Pn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<H7?(t.unexpectedRestarts=o.unexpectedRestarts+1,IT(e,t)):yi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Pv[c.type]?.(c,o)}),Pn.push(o),j7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(IT,"startWorker");var x7=[DT.THREAD_TYPES.HTTP];async function LT(e=null,t=2,r=!0){if(UT){if(r){let{loadRootComponents:n}=Av();await n()}vn.exports.restartNumber++,t<1&&(t=t*Pn.length);let s=[];for(let n of Pn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:vn.exports.restartNumber,type:DT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=x7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),yv*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 Os.postMessage({type:q7,workerType:e})}a(LT,"restartWorkers");function k7(e,t){Pv[e]=t}a(k7,"setChildListenerByType");function V7(e){return LT(e,1/0,!1)}a(V7,"shutdownWorkers");var vv=[];function $7(e){vv.push(e)}a($7,"onMessageFromWorkers");var wT=new Map;function Y7(e,t){let r=wT.get(e);r||wT.set(e,r=[]),r.push(t)}a(Y7,"onMessageByType");function K7(e){for(let t of Mn)try{t.postMessage(e)}catch(r){yi.error("Unable to send message to worker",r)}}a(K7,"broadcast");var kd=new Map,W7=1;function Q7(e){return new Promise(t=>{let r=0;for(let s of Mn)try{let n=W7++,i=a(()=>{kd.delete(n),--r===0&&t(),s!==Os&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,kd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of kd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){yi.error("Unable to send message to worker",n)}r===0&&t()})}a(Q7,"broadcastWithAcknowledgement");function z7(e){e.postMessage({type:Cv,workers:Bv()})}a(z7,"sendThreadInfo");function Bv(){let e=Date.now();return Pn.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(Bv,"getChildWorkerInfo");function J7(e,t){e.resources=t,e.resources.updated=Date.now()}a(J7,"recordResourceReport");var CT;function X7(e){CT=e}a(X7,"setMonitorListener");var Z7=1e3,Nv=!1;function j7(){Nv||(Nv=!0,setInterval(()=>{for(let e of Pn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}CT&&CT()},Z7).unref())}a(j7,"startMonitoring");var eee=1e3;if(Os){Vd(Os);for(let e of Xc.addPorts)Vd(e);setInterval(()=>{let e=process.memoryUsage();Os.postMessage({type:wv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},eee).unref(),yT=a(()=>new Promise((e,t)=>{Os.on("message",r),Os.postMessage({type:Iv});function r(s){s.type===Cv&&(Os.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else yT=Bv;vn.exports.getThreadInfo=yT;function Vd(e,t){Mn.push(e),e.on("message",r=>{if(r.type===Uv)Vd(r.port);else if(r.type===F7){let s=kd.get(r.id);s&&s()}else{for(let n of vv)n(r,e);let s=wT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){yi.error(i)}}}).on("close",()=>{Mn.splice(Mn.indexOf(e),1)}).on("exit",()=>{Mn.splice(Mn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Vd,"addPort");if(UT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await P7(s,{withFileTypes:!0}))i.isDirectory()&&r(bv(s,i.name));for await(let{filename:i}of M7(s,{persistent:!1}))(xd(i)===".ts"||xd(i)===".js"||xd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await LT(),yi.info("Reloaded HarperDB components")},100))},"watch_dir");vn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Os.on("message",async e=>{let{type:t}=e;t===DT.ITC_EVENT_TYPES.SHUTDOWN&&(vn.exports.restartNumber=e.restartNumber,Os.unref(),setTimeout(()=>{yi.warn("Thread did not voluntarily terminate",C7),process.exit(0)},yv).unref())})});function HT(e){let t=e.auditStore=e.openDB(xv.AUDIT_STORE_NAME,ree);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Vv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{PT||(PT=setTimeout(()=>{if(PT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Hv,0]})){if((n[0]&15)===BT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Hv/10).unref())}),t}function Kd(e,t,r){let s=Kv[r.type],n=3;if(t?t.length>80?(s|=$d,n=(0,an.writeKey)(t,Ns,e?14:6),MT.setUint16(2,n)):(n=(0,an.writeKey)(t,Ns,e?11:3),Ns[1]=n):Ns[1]=0,e){s|=Yv;let i=s&$d?6:3;MT.setFloat64(i,e),t||(n=i+8)}return Ns[0]=s,s&$d?MT.setUint16(4,0):Ns[2]=0,r.value?Buffer.concat([Ns.slice(0,n),r.value]):Ns.subarray(0,n)}function Bn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&$d,i=n?6:3,o;r&Yv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&vT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Kv[r&7],value:u,lastVersion:o,get user(){return c?(0,an.readKey)(e,i,c):void 0}}}var an,Yd,xv,kv,Vv,$v,Ns,MT,tee,ree,Hv,PT,vT,qv,BT,Fv,Gv,$d,Yv,Kv,Zc=Se(()=>{an=require("ordered-binary"),Yd=C(Q()),xv=C(xe()),kv=C(A()),Vv=C(dt()),$v=C(V());(0,Yd.initSync)();Ns=Buffer.alloc(1024),MT=new DataView(Ns.buffer,Ns.byteOffset,1024),tee={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,an.writeKey)(e[2],t,r+12)}else return(0,an.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,an.readKey)(e,t+12,r)]}else return(0,an.readKey)(e,t,r)}},ree={encoding:"binary",keyEncoder:tee},Hv=(0,$v.convertToMS)((0,Yd.get)(kv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,PT=null;a(HT,"openAuditStore");vT=16,qv=1,BT=2,Fv=3,Gv=4,$d=128,Yv=64,Kv={put:qv|vT,[qv]:"put",delete:BT,[BT]:"delete",message:Fv|vT,[Fv]:"message",invalidate:Gv,[Gv]:"invalidate"};a(Kd,"createAuditEntry");a(Bn,"readAuditEntry")});var qT,Ii,see,jc,Wd,Wv=Se(()=>{qT=C(Ht());Zc();Ii=Symbol("completion"),see=100,jc=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,qT.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[Ii]&&(i||(i=[]),i.push(d[Ii])),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,Kd(_.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<see>>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=[]}},Wd=class extends jc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,qT.getNextMonotonicTime)())}getReadTxn(){}}});function Xv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,wi.onMessageByType)(zv,d=>{let E=d.auditIds;GT(d.path,E,d.txnId)}),(0,wi.onMessageByType)(Jv,d=>{(0,bs.trace)("confirming to proceed with txn",d.txnId)}),qo=Object.create(null));let c=qo[i]||(qo[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=po(t);let l=new FT(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 GT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,bs.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,wi.broadcastWithAcknowledgement)({type:Jv,txnId:r});for(let[o,c]of Qd)o<r&&((0,bs.trace)("Txn",r,"waiting for txn",o),await c)}Qd.delete(r),(0,bs.trace)("Proceeding with txn id",r),Ho=r-1,GT(e,t,r,s)})();return Qd.set(r,i),i}(0,bs.trace)("Notifying with txn id",r,s),Ho=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,Qv.writeKey)(i,iee,0);let _=i[3];_&&(i.length=3);let d,E=po(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,bs.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Bn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,bs.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function Zv(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&nee)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,wi.broadcast)({type:zv,path:n,auditIds:l,txnId:c,start:u}),GT(n,l,c,!0))})}}var bs,wi,Qv,zv,Jv,nee,qo,iee,FT,Ho,Qd,jv=Se(()=>{bs=C(x()),wi=C(dt()),Qv=require("ordered-binary");aa();Oc();Zc();zv="transaction",Jv="transaction-await",nee=67108864,iee=Buffer.alloc(4096);a(Xv,"addSubscription");FT=class extends Zr{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"}}},Qd=new Map;a(GT,"notifyFromTransactionData");a(Zv,"listenToCommits")});var Bp={};je(Bp,{coerceType:()=>zd,makeTable:()=>Xd,setServerUtilities:()=>lee});function Xd(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=[]),Zv(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&ZT();class q extends mt{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=$;static updatedTimeProperty=U;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 R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?ve[c][w.table]:q;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,eu);switch(w.type){case"put":return L._writeUpdate(v,eu);case"delete":return L._writeDelete(eu);case"publish":return L._writePublish(v,eu);case"invalidate":return L.invalidate(eu);default:Di.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ui.getWorkerIndex)()):(0,Ui.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(st({table:n,database:c,attributes:J,origin:"cluster"}),su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&su.signalUserChange(new nu.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return cu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ui.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:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,ZT(),q.audit=!0}static coerceId(S){return S===""?null:zd(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.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));su.signalSchemaChange(new nu.SchemaEventMsg(process.pid,zr.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[Hs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=xT(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=xT(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=xT(y,"insert");for(let v in N)if(!w[v])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 w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ii]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,cB.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ua(S);else{if(S[rB]&&(w=!Du(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ua(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Di.trace("Checking timestamp for put",F,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Fo.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[Ii]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Zt]>v))return Ze(this[ae],L),Di.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||XT(),F||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[Ii]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=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[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(cn=>cn.name==j);if(De)De.type&&(Y[1]===void 0?Y.value=w(Y.value,De):Y[1]=w(Y[1],De));else if(j!=null)throw(0,Ci.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>zd(De,j)):zd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,oB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===tu.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let cn=r[De];Y.estimated_count=cn?cn.getValuesCount(Y[1]??Y.value):1/0}}else j===tu.SEARCH_TYPES.CONTAINS||j===tu.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===tu.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=aee:Y.estimated_count=oee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Fo.SKIP);else{let Y=vE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(BE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let cn=y[De],oE=vE(cn,v,D,q,S.allowFullScan);Y=Y.concat(oE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,cn={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(oE=>new Promise(aE=>cu(oE,X,cn,null,!1,DB=>{let cE=DB?.value;if(!cE)return aE(Fo.SKIP);for(let uE=0;uE<De;uE++)if(!j[uE](cE))return aE(Fo.SKIP);aE(cE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Xv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},S.startTime,this[Hs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Hs]){if(w){if(y)throw new Ci.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=Bn(F,i);(D==null||iB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||iB(D,J)){let Y=Bn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Di.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,aB.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=Bn(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||XT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[Ii]:w};return!D.hasWrittenTime&&this[Zt]>F&&(F=X.newTxnTime=this[Zt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new jc(i,S.user,u)),D}else return new Wd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ci.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[sB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ci.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ci.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Mu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=Bn(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=Bn(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[rB]=!0,d&&q.setTTLExpiration(d/1e3),b&&UB(),q;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ru.getIndexedValues)(L);if(G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ru.getIndexedValues)(F),G){eB&&w.prefetch(G.map(X=>({key:X,value:Z})),nB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function cu(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&to(Y,"cache-hit",n),Y&&!y&&(D&&(D[sB]=!0),R))return $o(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(cu,"loadRecord");function Mi(){P=new Set,(0,Ui.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Mi,"setupCommitListeners");async function $o(Z,S=null,N,D){if(N<0){let L;return P||Mi(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G($o(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G($o(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;_s(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,ru.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Kd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a($o,"getFromSource");function Fn(Z){T||(T=i.get([tB,kT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([tB,kT.threadId],T)},50))}a(Fn,"recordDeletion");function XT(){p||(p=setTimeout(()=>{if(p=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),Fn(-1)}}},q.getRecordCount()*100+uee).unref())}a(XT,"enqueueDeletionCleanup");function ZT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(ZT,"addDeleteRemoval");function UB(){(0,Ui.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Di.error("Error in evicting old records",Z)}},cee).unref()}a(UB,"runRecordExpirationEviction")}function xT(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 nB(){}function lee(e){cB=e}function zd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!_ee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Jd.autoCast)(e)}function iB(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 zr,Fo,ru,oB,kT,tu,iu,Ci,su,nu,Di,aB,Ui,Jd,cB,oee,aee,cee,eB,tB,Zt,rB,Ede,sB,eu,uee,_ee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),ru=C(Ht()),oB=require("lodash"),kT=require("worker_threads");jr();Wv();tu=C(xe()),iu=C(Q());jv();Ci=C(W()),su=C(Vs()),nu=C(Fr());de();Hu();Di=C(x());vu();Yn();aB=require("ordered-binary"),Ui=C(dt());Zc();Jd=C(V());ai();oee=1e8,aee=1e7,cee=6e4;iu.initSync();eB=iu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),tB=Symbol.for("deletions"),Zt=Symbol.for("version"),rB=Symbol.for("incremental-update"),Ede=Symbol("source-resource"),sB=Symbol("load-from-source"),eu={isNotification:!0,allowInvalidated:!0},uee=(0,Jd.convertToMS)(iu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Xd,"makeTable");a(xT,"attributesAsObject");a(nB,"noop");a(lee,"setServerUtilities");_ee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(zd,"coerceType");a(iB,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>$h,dropTableMeta:()=>See,getDatabases:()=>xr,getTables:()=>dee,onUpdatedTable:()=>dT,readMetaDb:()=>ou,resetDatabases:()=>Eee,table:()=>st,tables:()=>nr});function dee(){return tE||xr(),nr||{}}function xr(){if(tE)return ve;tE=!0,Vo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ou((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,ko.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,ko.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,ko.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ou((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ou((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&ou(u,o,r,null,!0)}}for(let r in ve){let s=Vo.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[rE]}}return Vo=null,ve}}function Eee(){tE=!1;for(let[,e]of Hn)e.needsDeletion=!0;xr();for(let[e,t]of Hn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Hn.delete(e));return ve}function ou(e,t,r=YT,s,n){let i=new VT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Hn.get(e);o?o.needsDeletion=!1:(o=(0,Zd.open)(i),Hn.set(e,o));let c=new Li.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Zd.open)(i),l.isLegacy=!0):l=HT(o));let _=dB(r),d=_[rE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(xo)||0)&&u.putSync(xo,$+1):(p.tableId=$=u.get(xo),$||($=1),u.putSync(xo,$+1),u.putSync(p.key,p));let q=new Li.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let Ze=new Li.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,Ze)}let Oe=k.find(Ze=>Ze.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=EB(_,f,Xd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of KT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function dB(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Vo&&!Vo.has(e)){let r=new Set;t[rE]=r,Vo.set(e,r)}return t}function EB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=YT),xr();let r=dB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Hn.get(i);if(!o){let c=new VT.default(i,!1);o=(0,Zd.open)(c),Hn.set(i,o)}return o}async function $h(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Hn.delete(n.path),n.status==="open"&&(await n.close(),await uB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[rE]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=YT);let u=Fa({database:t,table:e}),l=ve[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 T=new Li.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.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 U=u.auditStore;U||(U=HT(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Li.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T),z.tableId=h.get(xo),z.tableId||(z.tableId=1),h.putSync(xo,z.tableId+1),E.tableId=z.tableId,_=EB(l,e,Xd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Li.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<au.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=mee(_,k,O):p&&jd.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of KT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function mee(e,t,r){try{let s=e.schemaVersion;await jd.signalSchemaChange(new eE.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,T=(0,lB.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),au.workerData&&au.workerData.restartNumber!==_B.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>fee?await n:u>hee&&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 jd.signalSchemaChange(new eE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function See({table:e,database:t}){let r=Fa({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 dT(e){KT.push(e)}var yt,Go,Zd,Me,fr,ko,Li,VT,jt,uB,$T,lB,jd,eE,au,Le,_B,YT,rE,nr,ve,xo,KT,tE,Hn,Vo,fee,hee,de=Se(()=>{yt=C(Q()),Go=C(xe()),Zd=require("lmdb"),Me=require("path"),fr=require("fs"),ko=C(we());Ed();Li=C(xu()),VT=C(Vu()),jt=C(A()),uB=C(require("fs-extra")),$T=require("../index"),lB=C(Ht()),jd=C(Vs()),eE=C(Fr()),au=require("worker_threads"),Le=C(x()),_B=C(dt());Zc();YT="data",rE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,$T._assignPackageExport)("databases",ve);(0,$T._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),KT=[],Hn=new Map;a(dee,"getTables");a(xr,"getDatabases");a(Eee,"resetDatabases");a(ou,"readMetaDb");a(dB,"ensureDB");a(EB,"setTable");a(Fa,"database");a($h,"dropDatabase");a(st,"table");fee=1e3,hee=10;a(mee,"runIndexing");a(See,"dropTableMeta");a(dT,"onUpdatedTable")});var V=m((Ade,IB)=>{"use strict";var qn=require("path"),pB=require("fs-extra"),er=x(),fB=require("fs-extra"),sE=require("os"),pee=require("net"),Tee=require("recursive-iterator"),Ge=A(),Ree=DR(),hB=require("papaparse"),nE=require("moment"),{inspect:gee}=require("util"),mB=require("is-number"),gde=require("lodash"),Aee=require("minimist"),Oee=require("https"),Nee=require("http"),{hdb_errors:iE}=W(),bee=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,TB=require("util").promisify(setTimeout),yee=100,Iee=5,wee="",Cee=4,SB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};IB.exports={isEmpty:hr,isEmptyOrZeroLength:ys,arrayHasEmptyValues:Lee,arrayHasEmptyOrZeroLengthValues:Mee,buildFolderPath:Pee,isBoolean:RB,errorizeMessage:Uee,stripFileExtension:Bee,autoCast:Hee,autoCastJSON:gB,autoCastJSONDeep:QT,removeDir:qee,compareVersions:Fee,isCompatibleDataVersion:Gee,escapeRawValue:xee,unescapeValue:kee,stringifyProps:Vee,timeoutPromise:Yee,isClusterOperation:Wee,getClusterUser:zee,checkGlobalSchemaTable:Qee,getHomeDir:OB,getPropsFilePath:$ee,promisifyPapaParse:Jee,removeBOM:NB,createEventPromise:Xee,checkProcessRunning:Zee,checkSchemaTableExist:jee,checkSchemaExists:bB,checkTableExists:yB,getStartOfTomorrowInSeconds:ete,getLimitKey:tte,isObject:vee,isNotEmptyAndHasValue:Dee,autoCasterIsNumberCheck:AB,backtickASTSchemaItems:rte,isPortTaken:Kee,createForkArgs:ste,autoCastBoolean:nte,async_set_timeout:TB,getTableHashAttribute:ite,doesSchemaExist:ote,doesTableExist:ate,stringifyObj:cte,ms_to_time:ute,changeExtension:lte,getEnvCliRootPath:zT,noBootFile:_te,httpRequest:dte,transformReq:Ete,convertToMS:fte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Uee(e){return e instanceof Error?e:new Error(e)}a(Uee,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function Dee(e){return!hr(e)&&(e||e===0||e===""||RB(e))}a(Dee,"isNotEmptyAndHasValue");function ys(e){return hr(e)||e.length===0||e.size===0}a(ys,"isEmptyOrZeroLength");function Lee(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(Lee,"arrayHasEmptyValues");function Mee(e){if(ys(e))return!0;for(let t=0;t<e.length;t++)if(ys(e[t]))return!0;return!1}a(Mee,"arrayHasEmptyOrZeroLengthValues");function Pee(...e){try{return e.join(qn.sep)}catch{console.error(e)}}a(Pee,"buildFolderPath");function RB(e){return hr(e)?!1:e===!0||e===!1}a(RB,"isBoolean");function vee(e){return hr(e)?!1:typeof e=="object"}a(vee,"isObject");function Bee(e){return ys(e)?wee:e.slice(0,-Cee)}a(Bee,"stripFileExtension");function Hee(e){return hr(e)||e===""||typeof e!="string"?e:SB[e]!==void 0?SB[e]:AB(e)===!0?Number(e):bee.test(e)?new Date(e):e}a(Hee,"autoCast");function gB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(gB,"autoCastJSON");function QT(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=QT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=QT(r);s!==r&&(e[t]=s)}return e}else return gB(e)}a(QT,"autoCastJSONDeep");function AB(e){if(e.startsWith("0.")&&mB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&mB(e))}a(AB,"autoCasterIsNumberCheck");async function qee(e){if(ys(e))throw new Error(`Directory path: ${e} does not exist`);try{await fB.emptyDir(e),await fB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(qee,"removeDir");function Fee(e,t){if(ys(e)){er.info("Invalid current version sent as parameter.");return}if(ys(t)){er.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(Fee,"compareVersions");function Gee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Gee,"isCompatibleDataVersion");function xee(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(xee,"escapeRawValue");function kee(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(kee,"unescapeValue");function Vee(e,t){if(hr(e))return er.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+sE.EOL}!ys(s)&&s[0]===";"?r+=" "+s+n+sE.EOL:ys(s)||(r+=s+"="+n+sE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Vee,"stringifyProps");function OB(){let e;try{e=sE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(OB,"getHomeDir");function $ee(){let e=qn.join(OB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return pB.existsSync(e)||(e=qn.join(__dirname,"../","hdb_boot_properties.file")),e}a($ee,"getPropsFilePath");function Yee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Yee,"timeoutPromise");async function Kee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=pee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Kee,"isPortTaken");function Wee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(Wee,"isClusterOperation");function Qee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Qee,"checkGlobalSchemaTable");function zee(e,t){if(hr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||ys(e)){er.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){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(zee,"getClusterUser");function Jee(){hB.parsePromise=function(e,t,r){return new Promise(function(s,n){hB.parse(e,{header:!0,transformHeader:NB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Jee,"promisifyPapaParse");function NB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(NB,"removeBOM");function Xee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${gee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Xee,"createEventPromise");async function Zee(e){let t=!0,r=0;do await TB(yee*r++),(await Ree.findPs(e)).length>0&&(t=!1);while(t&&r<Iee);if(t)throw new Error(`process ${e} was not started`)}a(Zee,"checkProcessRunning");function jee(e,t){let r=bB(e);if(r)return r;let s=yB(e,t);if(s)return s}a(jee,"checkSchemaTableExist");function bB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return iE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(bB,"checkSchemaExists");function yB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return iE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(yB,"checkTableExists");function ete(){let e=nE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=nE().utc().unix();return e-t}a(ete,"getStartOfTomorrowInSeconds");function tte(){return nE().utc().format("DD-MM-YYYY")}a(tte,"getLimitKey");function rte(e){try{let t=new Tee(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){er.error("Got an error back ticking items."),er.error(t)}}a(rte,"backtickASTSchemaItems");function ste(e){return[e]}a(ste,"createForkArgs");function nte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(nte,"autoCastBoolean");function ite(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ite,"getTableHashAttribute");function ote(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(ote,"doesSchemaExist");function ate(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ate,"doesTableExist");function cte(e){try{return JSON.stringify(e)}catch{return e}}a(cte,"stringifyObj");function ute(e){let t=nE.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(ute,"ms_to_time");function lte(e,t){let r=qn.basename(e,qn.extname(e));return qn.join(qn.dirname(e),r+t)}a(lte,"changeExtension");function zT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Aee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(zT,"getEnvCliRootPath");var WT;function _te(){if(WT)return WT;let e=zT();zT()&&pB.pathExistsSync(qn.join(e,Ge.HDB_CONFIG_FILE))&&(WT=!0)}a(_te,"noBootFile");function dte(e,t){let r;return e.protocol==="http:"?r=Nee:r=Oee,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(dte,"httpRequest");function Ete(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Ete,"transformReq");function fte(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(fte,"convertToMS")});var CB=m((bde,wB)=>{"use strict";var JT=A(),hte=V(),mte=Es(),Jr=x(),Ste=f_(),pte=ic(),Nde=PS(),Tte=ks(),Rte=uc(),gte=require("semver/functions/gte"),Ate=3e4,Ote=7;wB.exports=Nte;async function Nte(){try{Jr.notify("Starting update nodes. This process will attempt to update any node connections the need to be reestablished after a 4.0.0 upgrade"),await Tte.setSchemaDataToGlobalAsync();let e=await mte.getAllNodeRecords(),t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];n.system_info.hdb_version===JT.PRE_4_0_0_VERSION&&t.push(bte(n))}await Promise.allSettled(t),Jr.notify("Shutting down 4.0.0 clustering upgrade process")}catch(e){throw Jr.error(e),e}}a(Nte,"updateAllNodes");async function bte(e){try{let{name:t,subscriptions:r}=e;Jr.notify("Running 4.0.0 update on node:",t);let s=!1,n=0;for(;n<Ote;){let i=[];if(await Ste.buildNodeStatus(e,i),Jr.trace("Received status:",i[0].status,"from node:",t),i[0].status==="open"&&gte(i[0].system_info.hdb_version,"4.0.0")){Jr.notify("Received open status from node:",t,"calling add node");let o={operation:JT.OPERATIONS_ENUM.ADD_NODE,node_name:t,subscriptions:r};await pte(o,!0),Jr.notify("Successfully added node",t),s=!0;break}n=(Date.now()-e.__updatedtime__)/(1e3*60*60*24),Jr.trace("Update node has been running for",n,"days. Calling node status again for node:",t),await hte.async_set_timeout(Ate)}s||(Jr.error("4.0.0 node update was unable to update connection to node:",t),Jr.error("Removing following node record from hdb_nodes",e),await Rte({operation:JT.OPERATIONS_ENUM.REMOVE_NODE,node_name:t}))}catch(t){throw Jr.error(t),t}}a(bte,"updateNode")});var yte=CB();(async()=>{try{await yte()}catch(e){console.error("Error launching 4.0.0 node update"),console.error(e),process.exit(1)}})();