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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/lite.js CHANGED
@@ -1,31 +1,31 @@
1
- var oH=Object.create;var Qo=Object.defineProperty;var aH=Object.getOwnPropertyDescriptor;var cH=Object.getOwnPropertyNames;var uH=Object.getPrototypeOf,lH=Object.prototype.hasOwnProperty;var a=(e,t)=>Qo(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),xe=(e,t)=>{for(var r in t)Qo(e,r,{get:t[r],enumerable:!0})},OR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of cH(t))!lH.call(e,n)&&n!==r&&Qo(e,n,{get:()=>t[n],enumerable:!(s=aH(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?oH(uH(e)):{},OR(t||!e||!e.__esModule?Qo(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>OR(Qo({},"__esModule",{value:!0}),e);var A=m((lre,HR)=>{"use strict";var mr=require("path"),_H=require("fs"),{relative:cre,join:ure}=mr,{existsSync:dH}=_H;function EH(){let e=__dirname;for(;!dH(mr.join(e,"package.json"));){let t=mr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(EH,"getHDBPackageRoot");var an=EH(),NR="js",mu=NR,fH="harperdb-config.yaml",hH="defaultConfig.yaml",mH="hdb",bR=`harperdb.${mu}`,yR=`customFunctionsServer.${mu}`,SH=`restartHdb.${mu}`,AE="HarperDB",hu="Custom Functions",Su="Clustering Hub",pu="Clustering Leaf",pH="Clustering Ingest Service",TH="Clustering Reply Service",RH="foreground.pid",gH="hdb.pid",AH="data",OH={HDB:AE,CLUSTERING_HUB:Su,CLUSTERING_LEAF:pu,CLUSTERING_INGEST_SERVICE:pH,CLUSTERING_REPLY_SERVICE:TH,CUSTOM_FUNCTIONS:hu,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"},NH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},bH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},yH={harperdb:AE,"clustering hub":Su,"clustering leaf":pu,"custom functions":hu,custom_functions:hu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},IH={CLUSTERING_HUB_PROC_DESCRIPTOR:Su,CLUSTERING_LEAF_PROC_DESCRIPTOR:pu},gE={HDB:mr.join(an,"server/harperdb"),CUSTOM_FUNCTIONS:mr.join(an,"server/customFunctions"),CLUSTERING_HUB:mr.join(an,"server/nats"),CLUSTERING_LEAF:mr.join(an,"server/nats")},wH={HDB:mr.join(gE.HDB,bR),CUSTOM_FUNCTIONS:mr.join(gE.CUSTOM_FUNCTIONS,yR)},CH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:mr.join(an,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:mr.join(an,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:mr.join(an,"launchServiceScripts/launchUpdateNodes4-0-0.js")},UH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},IR="support@harperdb.io",DH="customer-success@harperdb.io",wR=1,LH=4141,CR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",MH="https://www.harperdb.io/product",PH=`For support, please submit a request at ${CR} or contact ${IR}`,UR=`For license support, please contact ${DH}`,vH="None of the specified records were found.",BH="hash attribute not found",HH=`Your current license only supports ${wR} role. ${UR}`,qH="Your current license only supports 3 connections to a node.",FH="127.0.0.1",GH=1,xH=/^\.$/,kH=/^\.\.$/,VH="U+002E",$H=/\//g,YH="U+002F",KH=/U\+002F/g,WH=/^U\+002E$/,QH=/^U\+002EU\+002E$/,zH="d",JH=999999,XH="*",ZH="--max-old-space-size=",jH="system",e0="__hdb_hash",t0=".harperdb",r0=".hdb",s0="keys",n0="hdb_boot_properties.file",i0=".updateConfig.json",o0="SIGTSTP",a0=24,c0=6e4,u0=448,l0="blob",_0="trash",d0="database",E0="schema",f0="transactions",h0=".count",m0="id",S0="PROCESS_NAME",DR={SETTINGS_PATH_KEY:"settings_path"},LR=require("lodash"),p0={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"},T0={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},R0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},g0={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"},A0={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:",O0={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"},N0={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"},b0="060493.ks",y0=".license",I0={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"},w0={CSV:".csv",JSON:".json"},C0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},U0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},zo={};zo[K.INSERT]=K.INSERT;zo[K.UPDATE]=K.UPDATE;zo[K.UPSERT]=K.UPSERT;zo[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"},L0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},MR={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"},M0=LR.invert(MR),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"},PR={settings_path:DR.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];PR[t.toLowerCase()]=t}var P0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},v0={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"},B0={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"},H0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},q0={VERSION_DEFAULT:"2.2.0"},F0={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"},x0={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"},k0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},vR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},V0=Symbol("metadata"),$0="__clustering__",Y0=Object.values(vR),K0=15984864e5,BR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},W0=LR.invert(BR),Q0={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"},z0=111,J0=`\r
2
- `,X0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Z0=["*","%"],j0="unauthorized_access",eq="func_val",tq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},rq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},sq={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"},nq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},iq={HTTP:"http"},oq={STOPPED:"stopped",ONLINE:"online"},aq="3.x.x",cq={SUCCESS:"success",FAILURE:"failure"},uq={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};HR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:IR,HDB_SUPPORT_URL:CR,HDB_PRICING_URL:MH,SUPPORT_HELP_MSG:PH,LICENSE_HELP_MSG:UR,HDB_PROC_NAME:bR,HDB_PROC_DESCRIPTOR:AE,CLUSTERING_LEAF_PROC_DESCRIPTOR:pu,CLUSTERING_HUB_PROC_DESCRIPTOR:Su,SYSTEM_SCHEMA_NAME:jH,HASH_FOLDER_NAME:e0,HDB_HOME_DIR_NAME:t0,UPDATE_FILE_NAME:i0,LICENSE_KEY_DIR_NAME:s0,BOOT_PROPS_FILE_NAME:n0,JOB_TYPE_ENUM:v0,JOB_STATUS_ENUM:I0,SYSTEM_TABLE_NAMES:g0,SYSTEM_TABLE_HASH_ATTRIBUTES:A0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:w0,S3_BUCKET_AUTH_KEYS:C0,VALID_SQL_OPS_ENUM:U0,GEO_CONVERSION_ENUM:L0,HDB_SETTINGS_NAMES:MR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:M0,SERVICE_ACTIONS_ENUM:D0,CLUSTER_MESSAGE_TYPE_ENUM:B0,CLUSTER_CONNECTION_DIRECTION_ENUM:H0,CLUSTER_EVENTS_DEFS_ENUM:G0,PERIOD_REGEX:xH,DOUBLE_PERIOD_REGEX:kH,UNICODE_PERIOD:VH,FORWARD_SLASH_REGEX:$H,UNICODE_FORWARD_SLASH:YH,ESCAPED_FORWARD_SLASH_REGEX:KH,ESCAPED_PERIOD_REGEX:WH,ESCAPED_DOUBLE_PERIOD_REGEX:QH,REG_KEY_FILE_NAME:b0,RESTART_TIMEOUT_MS:c0,HDB_FILE_PERMISSIONS:u0,DATABASES_DIR_NAME:d0,LEGACY_DATABASES_DIR_NAME:E0,TRANSACTIONS_DIR_NAME:f0,LIMIT_COUNT_NAME:h0,ID_ATTRIBUTE_STRING:m0,INSERT_MODULE_ENUM:T0,UPGRADE_JSON_FIELD_NAMES_ENUM:R0,RESTART_CODE:o0,RESTART_CODE_NUM:a0,CLUSTER_OPERATIONS:zo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:N0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:O0,CLUSTERING_MESSAGE_TYPES:Q0,HDB_FILE_SUFFIX:r0,BLOB_FOLDER_NAME:l0,HDB_TRASH_DIR:_0,ORIGINATOR_SET_VALUE:z0,LICENSE_VALUES:q0,RAM_ALLOCATION_ENUM:F0,TIME_STAMP_NAMES_ENUM:vR,TIME_STAMP_NAMES:Y0,PERMS_UPDATE_RELEASE_TIMESTAMP:K0,SEARCH_NOT_FOUND_MESSAGE:vH,SEARCH_ATTRIBUTE_NOT_FOUND:BH,LICENSE_ROLE_DENIED_RESPONSE:HH,LICENSE_MAX_CONNS_REACHED:qH,BASIC_LICENSE_MAX_NON_CU_ROLES:wR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:LH,VALUE_SEARCH_COMPARATORS:BR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:W0,LICENSE_FILE_NAME:y0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:x0,NEW_LINE:J0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:GH,MOMENT_DAYS_TAG:zH,API_TURNOVER_SEC:JH,LOOPBACK:FH,CODE_EXTENSION:mu,WILDCARD_SEARCH_VALUE:XH,NODE_ERROR_CODES:k0,JAVASCRIPT_EXTENSION:NR,PERMS_CRUD_ENUM:X0,UNAUTHORIZED_PERMISSION_NAME:j0,SEARCH_WILDCARDS:Z0,FUNC_VAL:eq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:tq,JWT_ENUM:rq,CLUSTERING_FLAG:$0,ITC_EVENT_TYPES:sq,CUSTOM_FUNCTION_PROC_NAME:yR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:hu,SERVICES:nq,THREAD_TYPES:iq,MEM_SETTING_KEY:ZH,HDB_RESTART_SCRIPT:SH,PROCESS_DESCRIPTORS:OH,SERVICE_SERVERS:wH,SERVICE_SERVERS_CWD:gE,PROCESS_DESCRIPTORS_VALIDATE:yH,LAUNCH_SERVICE_SCRIPTS:CH,LOG_LEVELS:bH,PROCESS_NAME_ENV_PROP:S0,LOG_NAMES:NH,PM2_PROCESS_STATUSES:oq,CONFIG_PARAM_MAP:PR,CONFIG_PARAMS:R,HDB_CONFIG_FILE:fH,HDB_DEFAULT_CONFIG_FILE:hH,ROLE_TYPES_ENUM:UH,BOOT_PROP_PARAMS:DR,INSTALL_PROMPTS:p0,HDB_ROOT_DIR_NAME:mH,CLUSTERING_PROCESSES:IH,FOREGROUND_PID_FILE:RH,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:aq,SCHEMAS_PARAM_CONFIG:P0,METADATA_PROPERTY:V0,AUTH_AUDIT_STATUS:cq,AUTH_AUDIT_TYPES:uq,HDB_PID_FILE:gH,DEFAULT_DATABASE_NAME:AH};OE()});var OE=m((dre,FR)=>{var lq=require("fast-glob"),{statSync:NE,existsSync:bE,readFileSync:_q,writeFileSync:dq}=require("fs"),{spawnSync:Eq,spawn:fq}=require("child_process"),{isMainThread:hq}=require("worker_threads"),{join:bs,relative:qR}=require("path"),{PACKAGE_ROOT:Sr}=A(),{tmpdir:mq}=require("os");require("source-map-support").install();var Sq=["resources","server","dataLayer"],Jo="ts-build",yE,pq=__filename.endsWith("tsBuild.js");if(pq){if(hq){let r;try{NE(bs(Sr,Jo)),r=!0}catch{}if(r)for(let s of lq.sync(Sq.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=NE(bs(Sr,s)).mtimeMs-5e3,i=NE(bs(Sr,Jo,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."),yE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),yE=!0;if(yE){let s=Eq(process.argv[0],[bs(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=bs(mq(),"harperdb-tsc.pid"),i;if(bE(n))try{process.kill(+_q(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=fq(process.argv[0],[bs(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});dq(n,o.pid.toString()),o.unref()}}}}let e=FR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=qR(Sr,s[0]),o;i.startsWith(Jo)?o=bs(Sr,qR(Jo,i)):o=bs(Sr,Jo,i);let c=bs(o,r),u=c+".js";if(bE(u))return u;if(c.includes(".")&&bE(c))return c}return t(r,s,n)}}});var Xo={};xe(Xo,{server:()=>et});var GR,et,Pr=Se(()=>{GR=require("../index"),et={};(0,GR._assignPackageExport)("server",et)});var IE=m((Ere,VR)=>{"use strict";var xR=require("minimist");VR.exports=Tq;function Tq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=kR(process.env),s=kR(xR(process.argv))):(r=process.env,s=xR(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(Tq,"assignCMDENVVariables");function kR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(kR,"objKeysToLowerCase")});var x=m((hre,PE)=>{"use strict";var kn=require("fs-extra"),{workerData:Rq,threadId:gq}=require("worker_threads"),ws=require("path"),KR=require("yaml"),WR=require("properties-reader"),tt=A(),$R=IE(),Aq=require("os"),{PACKAGE_ROOT:CE}=A(),{_assignPackageExport:Oq}=require("../index"),jo={};for(let e in console)jo[e]||(jo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QR={STDOUT:"stdOut",STDERR:"stdErr"},Nq=ws.join(CE,"logs"),bq=ws.join(CE,"config/yaml/",tt.HDB_DEFAULT_CONFIG_FILE),yq=1e4,ys,Is,Lt,Tu,Ru,ea,Hi,Zo;Zo===void 0&&zR();PE.exports={notify:ZR,fatal:jR,error:ta,warn:ME,info:gu,debug:LE,trace:DE,setLogLevel:Mq,log_level:Lt,loggerWithTag:Iq,suppressLogging:wq,initLogSettings:zR,setupConsoleLogging:JR,logCustomLevel:Dq,closeLogFile:UE,getLogFilePath:()=>ea,OUTPUTS:QR,AuthAuditLog:Bq};Oq("logger",PE.exports);function zR(e=!1){try{if(Zo===void 0||e){UE();let t=Lq(),r=$R(["ROOTPATH"]);try{Zo=WR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!kn.pathExistsSync(ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Ru,to_file:ys,to_stream:Is}=Pq(r.ROOTPATH?ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE):Zo.get("settings_path"))),Tu=tt.LOG_NAMES.HDB,ea=ws.join(Ru,Tu)}}catch(t){if(Zo=void 0,t.code===tt.NODE_ERROR_CODES.ENOENT){let r=$R(Object.keys(tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===tt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===tt.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=vq();ys=ys===void 0?n:ys,ys=YR(ys),Is=Is===void 0?i:Is,Is=YR(Is),Lt=Lt===void 0?s:Lt,Ru=Nq,Tu=tt.LOG_NAMES.INSTALL,ea=ws.join(Ru,Tu);return}throw ta("Error initializing log settings"),ta(t),t}JR()}a(zR,"initLogSettings");var wE=!0;function JR(){Bi("error",ta),Bi("warn",ME),Bi("log",gu),Bi("info",gu),Bi("debug",LE),Bi("trace",DE)}a(JR,"setupConsoleLogging");function Bi(e,t){console[e]=function(...r){if(wE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return jo[e](...r)}}a(Bi,"logConsole");function Iq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(ZR),fatal:r(jR),error:r(ta),warn:r(ME),info:r(gu),debug:r(LE),trace:r(DE)};function r(s){return function(...n){return s(t,...n)}}}a(Iq,"loggerWithTag");function wq(e){try{wE=!1,e()}finally{wE=!0}}a(wq,"suppressLogging");var Cq=Rq?.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||Cq+"/"+gq);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 ra(e){ys&&XR(e),Is&&process.stdout.write(e)}a(ra,"logStdOut");function Au(e){ys&&XR(e),Is&&process.stderr.write(e)}a(Au,"logStdErr");function XR(e){Uq(),Hi?kn.appendFileSync(Hi,e):jo.log(e)}a(XR,"logToFile");function UE(){try{kn.closeSync(Hi)}catch{}Hi=null}a(UE,"closeLogFile");function Uq(){if(!Hi){try{if(!ea)debugger;Hi=kn.openSync(ea,"a")}catch(e){jo.error(e)}setTimeout(()=>{UE()},yq).unref()}}a(Uq,"openLogFile");function gu(...e){Mt[Lt]<=Mt.info&&ra(Cs("info",e))}a(gu,"info");function DE(...e){Mt[Lt]<=Mt.trace&&ra(Cs("trace",e))}a(DE,"trace");function ta(...e){Mt[Lt]<=Mt.error&&Au(Cs("error",e))}a(ta,"error");function LE(...e){Mt[Lt]<=Mt.debug&&ra(Cs("debug",e))}a(LE,"debug");function ZR(...e){Mt[Lt]<=Mt.notify&&ra(Cs("notify",e))}a(ZR,"notify");function jR(...e){Mt[Lt]<=Mt.fatal&&Au(Cs("fatal",e))}a(jR,"fatal");function ME(...e){Mt[Lt]<=Mt.warn&&Au(Cs("warn",e))}a(ME,"warn");function Dq(e,t,...r){t===QR.STDERR?Au(Cs(e,r)):ra(Cs(e,r))}a(Dq,"logCustomLevel");function Lq(){let e;try{e=Aq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return kn.existsSync(t)||(t=ws.join(CE,"utility/hdb_boot_properties.file")),t}a(Lq,"getPropsFilePath");function Mq(e){Lt=e}a(Mq,"setLogLevel");function YR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YR,"autoCastBoolean");function Pq(e){try{if(e.includes("config/settings.js")){let o=WR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=KR.parseDocument(kn.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Pq,"getLogConfig");function vq(){try{let e=KR.parseDocument(kn.readFileSync(bq,"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(vq,"getDefaultConfig");function Bq(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(Bq,"AuthAuditLog")});var tg=m((Sre,eg)=>{"use strict";var Hq=require("util"),qq=require("path"),Fq=require("child_process"),Gq=Hq.promisify(Fq.execFile),xq=1e3*1e3*10;eg.exports={findPs:kq};async function kq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await Gq("ps",["wwxo",`pid,${r}`],{maxBuffer:xq});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:qq.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(kq,"findPs")});var ke=m((Tre,sg)=>{"use strict";var Vq="__dbis__",$q="__txns__",Yq="__environment_name__",Kq="__dbi_defintion__",Wq={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"},Qq=["__createdtime__","__updatedtime__"],zq="\uFFFF",rg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Jq=Object.values(rg);sg.exports={AUDIT_STORE_NAME:$q,INTERNAL_DBIS_NAME:Vq,DBI_DEFINITION_NAME:Kq,SEARCH_TYPES:Wq,TIMESTAMP_NAMES:Qq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Yq,TRANSACTIONS_DBI_NAMES_ENUM:rg,TRANSACTIONS_DBIS:Jq,OVERFLOW_MARKER:zq}});var rr=m((Rre,dg)=>{"use strict";var ng=A(),ig=ke(),og={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},ag=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cg={500:ag("There was an error processing your request."),400:"Invalid request"},Xq=cg[og.INTERNAL_SERVER_ERROR],Zq={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.`},jq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},eF={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"},tF={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 ${ig.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ig.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"},rF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ng.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 ${ng.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"},ug={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"},sF={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."},nF={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`},iF={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"},oF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},aF={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`},lg={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.`},_g={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}`},cF={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."},uF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},lF={...ug,...eF,...Zq,...sF,...nF,...iF,...oF,...aF,...rF,...lg,..._g,...cF,...uF,...jq};dg.exports={CHECK_LOGS_WRAPPER:ag,HDB_ERROR_MSGS:lF,DEFAULT_ERROR_MSGS:cg,DEFAULT_ERROR_RESP:Xq,HTTP_STATUS_CODES:og,LMDB_ERRORS_ENUM:tF,AUTHENTICATION_ERROR_MSGS:ug,VALIDATION_ERROR_MSGS:lg,ITC_ERRORS:_g}});var W=m((Are,hg)=>{"use strict";var qi=rr(),_F=x(),dF=A(),Ou=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Eg),this.statusCode=s||qi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(qi.DEFAULT_ERROR_MSGS[s]?qi.DEFAULT_ERROR_MSGS[s]:qi.DEFAULT_ERROR_MSGS[qi.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&&_F[n](i)}},vE=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}},BE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Eg(e,t,r,s=dF.LOG_LEVELS.ERROR,n=null,i=!1){if(fg(e))return e;let o=new Ou(e,t,r,s,n);return i&&delete o.stack,o}a(Eg,"handleHDBError");function fg(e){return e.__proto__.constructor.name===Ou.name}a(fg,"isHDBError");hg.exports={isHDBError:fg,handleHDBError:Eg,ClientError:vE,ServerError:BE,hdb_errors:qi}});var V=m((bre,Cg)=>{"use strict";var cn=require("path"),Rg=require("fs-extra"),Pt=x(),mg=require("fs-extra"),Nu=require("os"),EF=require("net"),fF=require("recursive-iterator"),Pe=A(),hF=tg(),Sg=require("papaparse"),bu=require("moment"),{inspect:mF}=require("util"),pg=require("is-number"),Nre=require("lodash"),SF=require("minimist"),pF=require("https"),TF=require("http"),{hdb_errors:yu}=W(),RF=/^((\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)))$/,gg=require("util").promisify(setTimeout),gF=100,AF=5,OF="",NF=4,Tg={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Cg.exports={isEmpty:sr,isEmptyOrZeroLength:Xr,arrayHasEmptyValues:IF,arrayHasEmptyOrZeroLengthValues:wF,buildFolderPath:CF,isBoolean:Ag,errorizeMessage:bF,stripFileExtension:DF,autoCast:LF,autoCastJSON:Og,autoCastJSONDeep:qE,removeDir:MF,compareVersions:PF,isCompatibleDataVersion:vF,escapeRawValue:BF,unescapeValue:HF,stringifyProps:qF,timeoutPromise:GF,isClusterOperation:kF,getClusterUser:$F,checkGlobalSchemaTable:VF,getHomeDir:bg,getPropsFilePath:FF,promisifyPapaParse:YF,removeBOM:yg,createEventPromise:KF,checkProcessRunning:WF,checkSchemaTableExist:QF,checkSchemaExists:Ig,checkTableExists:wg,getStartOfTomorrowInSeconds:zF,getLimitKey:JF,isObject:UF,isNotEmptyAndHasValue:yF,autoCasterIsNumberCheck:Ng,backtickASTSchemaItems:XF,isPortTaken:xF,createForkArgs:ZF,autoCastBoolean:jF,async_set_timeout:gg,getTableHashAttribute:eG,doesSchemaExist:tG,doesTableExist:rG,stringifyObj:sG,ms_to_time:nG,changeExtension:iG,getEnvCliRootPath:FE,noBootFile:oG,httpRequest:aG,transformReq:cG,convertToMS:uG,PACKAGE_ROOT:Pe.PACKAGE_ROOT};function bF(e){return e instanceof Error?e:new Error(e)}a(bF,"errorizeMessage");function sr(e){return e==null}a(sr,"isEmpty");function yF(e){return!sr(e)&&(e||e===0||e===""||Ag(e))}a(yF,"isNotEmptyAndHasValue");function Xr(e){return sr(e)||e.length===0||e.size===0}a(Xr,"isEmptyOrZeroLength");function IF(e){if(sr(e))return!0;for(let t=0;t<e.length;t++)if(sr(e[t]))return!0;return!1}a(IF,"arrayHasEmptyValues");function wF(e){if(Xr(e))return!0;for(let t=0;t<e.length;t++)if(Xr(e[t]))return!0;return!1}a(wF,"arrayHasEmptyOrZeroLengthValues");function CF(...e){try{return e.join(cn.sep)}catch{console.error(e)}}a(CF,"buildFolderPath");function Ag(e){return sr(e)?!1:e===!0||e===!1}a(Ag,"isBoolean");function UF(e){return sr(e)?!1:typeof e=="object"}a(UF,"isObject");function DF(e){return Xr(e)?OF:e.slice(0,-NF)}a(DF,"stripFileExtension");function LF(e){return sr(e)||e===""||typeof e!="string"?e:Tg[e]!==void 0?Tg[e]:Ng(e)===!0?Number(e):RF.test(e)?new Date(e):e}a(LF,"autoCast");function Og(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Og,"autoCastJSON");function qE(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=qE(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=qE(r);s!==r&&(e[t]=s)}return e}else return Og(e)}a(qE,"autoCastJSONDeep");function Ng(e){if(e.startsWith("0.")&&pg(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pg(e))}a(Ng,"autoCasterIsNumberCheck");async function MF(e){if(Xr(e))throw new Error(`Directory path: ${e} does not exist`);try{await mg.emptyDir(e),await mg.remove(e)}catch(t){throw Pt.error(`Error removing files in ${e} -- ${t}`),t}}a(MF,"removeDir");function PF(e,t){if(Xr(e)){Pt.info("Invalid current version sent as parameter.");return}if(Xr(t)){Pt.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(PF,"compareVersions");function vF(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(vF,"isCompatibleDataVersion");function BF(e){if(sr(e))return e;let t=String(e);return t==="."?Pe.UNICODE_PERIOD:t===".."?Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD:t.replace(Pe.FORWARD_SLASH_REGEX,Pe.UNICODE_FORWARD_SLASH)}a(BF,"escapeRawValue");function HF(e){if(sr(e))return e;let t=String(e);return t===Pe.UNICODE_PERIOD?".":t===Pe.UNICODE_PERIOD+Pe.UNICODE_PERIOD?"..":String(e).replace(Pe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(HF,"unescapeValue");function qF(e,t){if(sr(e))return Pt.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+Nu.EOL}!Xr(s)&&s[0]===";"?r+=" "+s+n+Nu.EOL:Xr(s)||(r+=s+"="+n+Nu.EOL)}catch{Pt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(qF,"stringifyProps");function bg(){let e;try{e=Nu.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(bg,"getHomeDir");function FF(){let e=cn.join(bg(),Pe.HDB_HOME_DIR_NAME,Pe.BOOT_PROPS_FILE_NAME);return Rg.existsSync(e)||(e=cn.join(__dirname,"../","hdb_boot_properties.file")),e}a(FF,"getPropsFilePath");function GF(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(GF,"timeoutPromise");async function xF(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=EF.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(xF,"isPortTaken");function kF(e){try{return Pe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){Pt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(kF,"isClusterOperation");function VF(e,t){let r=(de(),ee(Ne)).getDatabases();if(!r[e])return yu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return yu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(VF,"checkGlobalSchemaTable");function $F(e,t){if(sr(t)){Pt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(sr(e)||Xr(e)){Pt.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){Pt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){Pt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a($F,"getClusterUser");function YF(){Sg.parsePromise=function(e,t,r){return new Promise(function(s,n){Sg.parse(e,{header:!0,transformHeader:yg,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(YF,"promisifyPapaParse");function yg(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(yg,"removeBOM");function KF(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;Pt.info(`Got cluster status event response: ${mF(n)}`);try{i.cancel()}catch{Pt.error("Error trying to cancel timeout.")}s(n)})})}a(KF,"createEventPromise");async function WF(e){let t=!0,r=0;do await gg(gF*r++),(await hF.findPs(e)).length>0&&(t=!1);while(t&&r<AF);if(t)throw new Error(`process ${e} was not started`)}a(WF,"checkProcessRunning");function QF(e,t){let r=Ig(e);if(r)return r;let s=wg(e,t);if(s)return s}a(QF,"checkSchemaTableExist");function Ig(e){let{getDatabases:t}=(de(),ee(Ne));if(!t()[e])return yu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ig,"checkSchemaExists");function wg(e,t){let{getDatabases:r}=(de(),ee(Ne));if(!r()[e][t])return yu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wg,"checkTableExists");function zF(){let e=bu().utc().add(1,Pe.MOMENT_DAYS_TAG).startOf(Pe.MOMENT_DAYS_TAG).unix(),t=bu().utc().unix();return e-t}a(zF,"getStartOfTomorrowInSeconds");function JF(){return bu().utc().format("DD-MM-YYYY")}a(JF,"getLimitKey");function XF(e){try{let t=new fF(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){Pt.error("Got an error back ticking items."),Pt.error(t)}}a(XF,"backtickASTSchemaItems");function ZF(e){return[e]}a(ZF,"createForkArgs");function jF(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(jF,"autoCastBoolean");function eG(e,t){let{getDatabases:r}=(de(),ee(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(eG,"getTableHashAttribute");function tG(e){let{getDatabases:t}=(de(),ee(Ne));return t()[e]!==void 0}a(tG,"doesSchemaExist");function rG(e,t){let{getDatabases:r}=(de(),ee(Ne));return r()[e]?.[t]!==void 0}a(rG,"doesTableExist");function sG(e){try{return JSON.stringify(e)}catch{return e}}a(sG,"stringifyObj");function nG(e){let t=bu.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(nG,"ms_to_time");function iG(e,t){let r=cn.basename(e,cn.extname(e));return cn.join(cn.dirname(e),r+t)}a(iG,"changeExtension");function FE(){if(process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=SF(process.argv);if(e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Pe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(FE,"getEnvCliRootPath");var HE;function oG(){if(HE)return HE;let e=FE();FE()&&Rg.pathExistsSync(cn.join(e,Pe.HDB_CONFIG_FILE))&&(HE=!0)}a(oG,"noBootFile");function aG(e,t){let r;return e.protocol==="http:"?r=TF:r=pF,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(aG,"httpRequest");function cG(e){if(!e.schema&&!e.database){e.schema=Pe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(cG,"transformReq");function uG(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(uG,"convertToMS")});var Dg=m((Ire,Ug)=>{"use strict";var lG={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))},_G="certificate.pem",dG="privateKey.pem",EG="ca.pem";Ug.exports={CERTIFICATE_VALUES:lG,CERTIFICATE_PEM_NAME:_G,PRIVATEKEY_PEM_NAME:dG,CA_PEM_NAME:EG}});var ve=m((wre,Lg)=>{"use strict";var vt=require("validate.js");vt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||vt.validators.type.checks[t](e)?null:` must be a '${t}' value`};vt.validators.type.checks={Object:function(e){return vt.isObject(e)&&!vt.isArray(e)},Array:vt.isArray,Integer:vt.isInteger,Number:vt.isNumber,String:vt.isString,Date:vt.isDate,Boolean:function(e){return typeof e=="boolean"}};vt.validators.hasValidFileExt=function(e,t){return vt.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};Lg.exports={validateObject:fG,validateObjectAsync:hG,validateBySchema:mG};function fG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=vt(e,t,{format:"flat"});return r?new Error(r):null}a(fG,"validateObject");async function hG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await vt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(hG,"validateObjectAsync");function mG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(mG,"validateBySchema")});var xE=m((Dre,qg)=>{"use strict";var Bg=require("fs-extra"),te=require("joi"),SG=require("os"),{boolean:pe,string:Ds,number:nr,array:GE}=te.types(),{totalmem:Mg}=require("os"),Fi=require("path"),pG=x(),wu=V(),Ure=Dg(),Pg=A(),TG=ve(),vg="log",RG="components",gG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",AG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",OG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",NG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",bG="rootPath config parameter is undefined",yG="clustering.enabled config parameter is undefined",Us=nr.min(0).required(),Cu=GE.items({host:Ds.required(),port:Us}).empty(null),Ls;qg.exports={configValidator:IG,routesValidator:MG,route_constraints:Cu};function IG(e){if(Ls=e.rootPath,wu.isEmpty(Ls))throw bG;let t=pe.required(),r=te.valid("production","development").required(),s=nr.min(0).max(1e3).empty(null).default(LG),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Iu),i=te.custom(wG).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=te.string().empty(null).default(Iu),u=te.custom(CG).empty(null).default(Iu),l=e.clustering?.enabled;if(wu.isEmpty(l))throw yG;let _;return l===!0?_=te.object({enabled:t,hubServer:te.object({cluster:te.object({name:te.required().empty(null),network:te.object({port:Us,routes:Cu}).required()}).required(),leafNodes:te.object({network:te.object({port:Us}).required()}).required(),network:te.object({port:Us}).required()}).required(),leafServer:te.object({network:te.object({port:Us,routes:Cu}).required(),streams:te.object({maxAge:nr.min(120).allow(null).optional(),maxBytes:nr.min(1).allow(null).optional(),maxMsgs:nr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ds.optional().empty(null)}).required():_=te.object({enabled:t,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),te.object({authentication:te.object({authorizeLocal:pe,cacheTTL:nr.required(),enableSessions:pe,operationTokenTimeout:te.required(),refreshTokenTimeout:te.required()}),analytics:te.object({aggregatePeriod:nr}),clustering:_,customFunctions:te.object({enabled:t,network:te.object({cors:pe.required(),corsAccessList:GE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Us,timeout:nr.min(1).required()}),nodeEnv:r,root:n,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:te.object({enabled:t}).required(),logging:te.object({auditAuthEvents:te.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:te.object({enabled:pe.optional(),compress:pe.optional(),interval:Ds.custom(DG).optional().empty(null),maxSize:Ds.custom(UG).optional().empty(null),path:Ds.optional().empty(null).default(Iu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:te.object({foreground:pe.required(),network:te.object({cors:pe.required(),corsAccessList:GE.required(),headersTimeout:nr.min(1).required(),https:pe.required(),keepAliveTimeout:nr.min(1).required(),port:Us,timeout:nr.min(1).required()}).required(),nodeEnv:r,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:te.object({network:te.object({port:Us,securePort:Us}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:te.object({threads:s}).required(),storage:te.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(IG,"configValidator");function Hg(e){return Bg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Hg,"doesPathExist");function wG(e,t){if(e===null)return;let r=Hg(e);return r?t.message(r):e}a(wG,"validatePemFile");function CG(e,t){te.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Hg(e);if(r)return t.message(r)}a(CG,"validatePath");function UG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(gG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(OG):e}a(UG,"validateRotationMaxSize");function DG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(AG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(NG):e}a(DG,"validateRotationInterval");function LG(e,t){let r=t.state.path.join("."),s=SG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Mg();return i=Math.round(Math.min(i,Mg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),pG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(LG,"setDefaultThreads");function Iu(e,t){if(!wu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(wu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Fi.join(Ls,RG);case"logging.root":return Fi.join(Ls,vg);case"clustering.leafServer.streams.path":return Fi.join(Ls,"clustering","leaf");case"storage.path":let s=Fi.join(Ls,Pg.LEGACY_DATABASES_DIR_NAME);return Bg.existsSync(s)?s:Fi.join(Ls,Pg.DATABASES_DIR_NAME);case"logging.rotation.path":return Fi.join(Ls,vg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Iu,"setDefaultRoot");function MG(e){let t=te.object({routes:Cu});return TG.validateBySchema({routes:e},t)}a(MG,"routesValidator")});var Tr=m((Pre,Qg)=>{"use strict";var pr=A(),_t=V(),rt=x(),{configValidator:PG,routesValidator:Fg}=xE(),Bt=require("fs-extra"),vG=require("yaml"),vr=require("path"),BG=require("is-number"),xg=require("properties-reader"),HG=require("lodash"),{handleHDBError:qG}=W(),{HTTP_STATUS_CODES:FG,HDB_ERROR_MSGS:Uu}=rr(),Mre=require("minimist"),{server:GG}=(Pr(),ee(Xo)),{SCHEMAS_PARAM_CONFIG:sa,CONFIG_PARAMS:un,CONFIG_PARAM_MAP:Ms}=pr,xG="Unable to get config value because config is uninitialized",kG="Config successfully initialized",VG="Error backing up config file",$G="Empty parameter sent to getConfigValue",kg=vr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),YG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Gg={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"},Du,ft;Qg.exports={createConfigFile:KG,getDefaultConfig:WG,getConfigValue:$g,initConfig:Yg,flattenConfig:$n,updateConfigValue:Kg,updateConfigObject:zG,getConfiguration:ZG,setConfiguration:jG,readConfigFile:$E,getClusteringRoutes:ex,initOldConfig:Wg,getConfigFromFile:tx,getConfigFilePath:Vn,addConfig:rx,deleteConfigFromFile:sx};function KG(e){let t=ln(kg);Du=$n(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===un.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=kE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&Vg(t,r),VE(t);let s=t.toJSON();ft=$n(s);let n=t.getIn(["rootPath"]),i=vr.join(n,pr.HDB_CONFIG_FILE);Bt.createFileSync(i),Bt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(KG,"createConfigFile");function Vg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(sa.TABLES))for(let i in s[n][sa.TABLES])for(let o in s[n][sa.TABLES][i]){let c=s[n][sa.TABLES][i][o],u=[un.SCHEMAS,n,sa.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=[un.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(Vg,"setSchemasConfig");function WG(e){if(Du===void 0){let r=ln(kg);Du=$n(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Du[t.toLowerCase()]}a(WG,"getDefaultConfig");function $g(e){if(e==null){rt.error($G);return}if(ft===void 0){rt.trace(xG);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a($g,"getConfigValue");function Vn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?vr.join(t,pr.HDB_CONFIG_FILE):xg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Vn,"getConfigFilePath");function Yg(e=!1){if(ft===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Bt.accessSync(t,Bt.constants.F_OK|Bt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Vn(t),s;if(r.includes("config/settings.js"))try{Wg(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ln(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}`)}QG(s,r),VE(s);let n=s.toJSON();if(GG.config=n,ft=$n(n),ft.logging_rotation_rotate)for(let i in Gg)ft[i]&&rt.error(`Config ${Gg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(kG)}}a(Yg,"initConfig");function QG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],vr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],vr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],vr.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"),Bt.writeFileSync(t,String(e)))}a(QG,"checkForUpdatedConfig");function VE(e){let t=e.toJSON(),r=PG(t);if(r.error)throw Uu.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(VE,"validateConfig");function zG(e,t){ft===void 0&&(ft={});let r=Ms[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(zG,"updateConfigObject");function Kg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&Yg();let o=$g(Ms.hdb_root),c=vr.join(o,pr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.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=kE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),S=kE(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(T){rt.error(T)}}}l&&Vg(u,l),VE(u);let _=u.getIn(["rootPath"]),d=vr.join(_,pr.HDB_CONFIG_FILE);s===!0&&JG(c,_),Bt.writeFileSync(d,String(u)),n&&(ft=$n(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Kg,"updateConfigValue");function JG(e,t){try{let r=vr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);Bt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(VG),rt.error(r)}}a(JG,"backupConfigFile");var XG=["schemas"];function $n(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!XG.includes(r)){let s=$n(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($n,"flattenConfig");function kE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.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(BG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(kE,"castConfigValue");function ZG(){let e=_t.getPropsFilePath(),t=Vn(e);return ln(t).toJSON()}a(ZG,"getConfiguration");async function jG(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Kg(void 0,void 0,n,!0),YG}catch(i){throw typeof i=="string"||i instanceof String?qG(i,i,FG.BAD_REQUEST,void 0,void 0,!0):i}}a(jG,"setConfiguration");function $E(){let e=_t.getPropsFilePath();try{Bt.accessSync(e,Bt.constants.F_OK|Bt.constants.R_OK)}catch(s){if(!_t.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Vn(e);return ln(t).toJSON()}a($E,"readConfigFile");function ln(e){return vG.parseDocument(Bt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function ex(){let e=$E(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=Fg(t);if(r)throw Uu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=Fg(s);if(n)throw Uu.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Uu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(ex,"getClusteringRoutes");function Wg(e){let t=xg(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===un.LOGGING_ROOT?ft[n]=vr.dirname(s):ft[n]=s}return ft}a(Wg,"initOldConfig");function tx(e){let t=$E();return HG.get(t,e.replaceAll("_","."))}a(tx,"getConfigFromFile");async function rx(e,t){let r=ln(Vn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Bt.writeFile(Vn(),String(r))}a(rx,"addConfig");function sx(e){let t=Vn(_t.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=vr.join(s,pr.HDB_CONFIG_FILE);Bt.writeFileSync(n,String(r))}a(sx,"deleteConfigFromFile")});var Q=m((Bre,Xg)=>{"use strict";var YE=require("fs-extra"),Br=require("path"),zg=require("os"),nx=require("properties-reader"),na=x(),Yn=V(),re=A(),Lu=Tr(),ix="Error initializing environment manager",Mu="BOOT_PROPS_FILE_PATH",Jg=!1,ox={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};Xg.exports={BOOT_PROPS_FILE_PATH:Mu,getHdbBasePath:ax,setHdbBasePath:cx,get:ux,initSync:_x,setProperty:Ee,initTestEnvironment:dx};function ax(){return Ps[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ax,"getHdbBasePath");function cx(e){Ps[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(cx,"setHdbBasePath");function ux(e){let t=Lu.getConfigValue(e);return t===void 0?Ps[e]:t}a(ux,"get");function Ee(e,t){ox[e]&&(Ps[e]=t),Lu.updateConfigObject(e,t)}a(Ee,"setProperty");function lx(){let e;try{e=Yn.getPropsFilePath(),YE.accessSync(e,YE.constants.F_OK|YE.constants.R_OK),Jg=!0;let t=nx(e);return Ps[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Mu]=e,!0}catch{return na.trace(`Environment manager found no properties file at ${e}`),!1}}a(lx,"doesPropFileExist");function _x(e=!1){try{(Jg||lx()||Yn.noBootFile())&&(Lu.initConfig(e),Ps[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Lu.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){na.error(ix),na.error(t),console.error(t),process.exit(1)}}a(_x,"initSync");function dx(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=Br.join(__dirname,"../../","unitTests");Ps[Mu]=Br.join(u,"hdb_boot_properties.file"),Ee(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Br.join(u,"settings.test")),Ee(re.HDB_SETTINGS_NAMES.INSTALL_USER,zg.userInfo()?zg.userInfo().username:void 0),Ee(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.HDB_SETTINGS_NAMES.CERT_KEY,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Br.join(u,"envDir","utility","keys","privateKey.pem")),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Br.join(u,"envDir","utility","keys","certificate.pem")),Ee(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Br.join(u,"envDir","log")),Ee(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Br.join(u,"envDir")),Ee(re.CONFIG_PARAMS.STORAGE_PATH,Br.join(u,"envDir")),Ee(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Yn.isEmpty(n)?!0:n),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Yn.isEmpty(n)?!0:n),Ee(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Yn.isEmpty(i)?!1:i),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Yn.isEmpty(i)?!1:i),Ee(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Br.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Yn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Mu}. Please check your boot props and settings files`;na.fatal(r),na.error(t)}}a(dx,"initTestEnvironment")});var we=m((qre,nA)=>{"use strict";var ua=A(),Ex=V(),Ht=Q(),la=require("path"),fx=require("minimist"),Zg=require("fs-extra"),jg=require("lodash");Ht.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:ia,SYSTEM_SCHEMA_NAME:Pu}=ua,oa,aa,ca;function eA(){if(oa!==void 0)return oa;if(Ht.getHdbBasePath()!==void 0)return oa=Ht.get(_n.STORAGE_PATH)||la.join(Ht.getHdbBasePath(),ua.DATABASES_DIR_NAME),oa}a(eA,"getBaseSchemaPath");function tA(){if(aa!==void 0)return aa;if(Ht.getHdbBasePath()!==void 0)return aa=sA(Pu),aa}a(tA,"getSystemSchemaPath");function rA(){if(ca!==void 0)return ca;if(Ht.getHdbBasePath()!==void 0)return ca=Ht.get(ua.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||la.join(Ht.getHdbBasePath(),ua.TRANSACTIONS_DIR_NAME),ca}a(rA,"getTransactionAuditStoreBasePath");function hx(e,t){let r=Ht.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||la.join(rA(),e.toString())}a(hx,"getTransactionAuditStorePath");function sA(e,t){e=e.toString(),t=t&&t.toString();let r=Ht.get(ua.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||la.join(eA(),e)}a(sA,"getSchemaPath");function mx(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,fx(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Ex.isObject(s))throw o;i=s}for(let o of i){let c=o[Pu];if(!c)continue;let u=Ht.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ia.PATH];if(l)return jg.set(u,[Pu,ia.TABLES,t,ia.PATH],l),Ht.setProperty(_n.SCHEMAS,u),l;let _=c?.[ia.PATH];if(_)return jg.set(u,[Pu,ia.PATH],_),Ht.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!Zg.pathExistsSync(n))throw new Error(n+" does not exist");let i=la.join(n,e);return Zg.mkdirsSync(i),Ht.setProperty(_n.STORAGE_PATH,n),i}return tA()}a(mx,"initSystemSchemaPaths");function Sx(){oa=void 0,aa=void 0,ca=void 0}a(Sx,"resetPaths");nA.exports={getBaseSchemaPath:eA,getSystemSchemaPath:tA,getTransactionAuditStorePath:hx,getTransactionAuditStoreBasePath:rA,getSchemaPath:sA,initSystemSchemaPaths:mx,resetPaths:Sx}});var qt=m((kre,uA)=>{"use strict";var px=rr().LMDB_ERRORS_ENUM,Gre=require("lmdb"),Tx=ke(),xre=require("buffer").Buffer,{OVERFLOW_MARKER:iA,MAX_SEARCH_KEY_LENGTH:vu}=Tx,oA=["number","string","symbol","boolean","bigint"];function Rx(e){if(e=e?.primaryStore||e,!e)throw new Error(px.ENV_REQUIRED)}a(Rx,"validateEnv");function gx(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(gx,"stringifyData");function Ax(e){return e instanceof Date?e.valueOf():e}a(Ax,"convertKeyValueToWrite");function Ox(e){if(e==null)return;if(oA.includes(typeof e))return e.length>vu?[e.slice(0,vu)+iA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(oA.includes(typeof n))n.length>vu?t.push(n.slice(0,vu)+iA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Ox,"getIndexedValues");var Bu=0,aA=0;function cA(){aA=Date.now()-performance.now()}a(cA,"adjustStartTime");cA();var Nx=6e4;setInterval(cA,Nx).unref();function bx(){let e=performance.now()+aA;return e>Bu?(Bu=e,e):(Bu+=488e-6,Bu)}a(bx,"getNextMonotonicTime");uA.exports={validateEnv:Rx,stringifyData:gx,convertKeyValueToWrite:Ax,getNextMonotonicTime:bx,getIndexedValues:Ox}});var lA,Zr,KE,_a=Se(()=>{lA=require("events"),Zr=class extends lA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new KE;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)}},KE=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 da(e){return e[ht]||(e[ht]=Object.create(null))}function xu(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=_A(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){da(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,Hu.ClientError)(`${c} must be a string, attempt to assign ${l}`);da(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Hu.ClientError)(`${c} must be a string, attempt to assign ${l}`);da(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 Hu.ClientError("Can not add a property to a sealed table schema");da(this)[o]=c}),i("deleteProperty",function(o){da(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 _A(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}},xu(r,t)),new r(e)):new qu(e);case Array:let s=new Gu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=_A(o,t?.elements)),s[n]=o}return s}}function ku(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=ku(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function Ea(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=Ea(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=Ea(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Fu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Kn]||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(Fu(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(Fu(n))return!0}else return!0}else return!0}}return!1}var Hu,ht,qu,Kn,Gu,Vu=Se(()=>{jr();Hu=C(W()),ht=Symbol("own-data");a(da,"getChanges");a(xu,"assignTrackedAccessors");a(_A,"trackObject");qu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};xu(qu,{});a(ku,"collapseData");a(Ea,"deepFreeze");a(Fu,"hasChanges");Kn=Symbol.for("has-array-changes"),Gu=class extends Array{static{a(this,"TrackedArray")}[Kn];constructor(t){super(t)}splice(...t){return this[Kn]=!0,super.splice(...t)}push(...t){return this[Kn]=!0,super.push(...t)}pop(){return this[Kn]=!0,super.pop()}unshift(...t){return this[Kn]=!0,super.unshift(...t)}shift(){return this[Kn]=!0,super.shift()}};Gu.prototype.constructor=Array});function Ke(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[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 dA,EA,WE,Wn=Se(()=>{dA=C(qt()),EA=require("../index");jr();a(Ke,"transaction");(0,EA._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Ae]||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,dA.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 JE(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(Ix[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 dt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new QE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=XE(e);if(!T)throw new QE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:O})=>new Promise(k=>setImmediate(()=>k(T(O)?g:hA.SKIP))))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(S):h.getRange(S).map(({value:T})=>T)}function XE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case dt.SEARCH_TYPES.EQUALS:case void 0:return es(r,n=>n===s);case dt.SEARCH_TYPES.CONTAINS:return es(r,n=>n?.toString().includes(s));case dt.SEARCH_TYPES.ENDS_WITH:case dt.SEARCH_TYPES._ENDS_WITH:return es(r,n=>n?.toString().endsWith(s));case dt.SEARCH_TYPES.STARTS_WITH:case dt.SEARCH_TYPES._STARTS_WITH:return es(r,n=>typeof n=="string"&&n.startsWith(s));case dt.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 dt.SEARCH_TYPES.GREATER_THAN:case dt.SEARCH_TYPES._GREATER_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)>0);case"ge":case dt.SEARCH_TYPES.GREATER_THAN_EQUAL:case dt.SEARCH_TYPES._GREATER_THAN_EQUAL:return es(r,n=>(0,ts.compareKeys)(n,s)>=0);case dt.SEARCH_TYPES.LESS_THAN:case"lt":case dt.SEARCH_TYPES._LESS_THAN:return es(r,n=>(0,ts.compareKeys)(n,s)<0);case"le":case dt.SEARCH_TYPES.LESS_THAN_EQUAL:case dt.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 $u(e){if(!e)return;let t=new zE,r,s,n,i,o;for(;r=fA.exec(e);){i=fA.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=yx[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 QE,dt,ts,hA,fA,yx,Ix,zE,Yu=Se(()=>{QE=C(W()),dt=C(ke()),ts=require("ordered-binary"),hA=require("lmdb"),fA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,yx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(JE,"idsForCondition");Ix={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(XE,"filterByType");a(es,"attributeComparator");a($u,"parseQuery");zE=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 ef={};xe(ef,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>gA,snake_case:()=>Cx});function Cx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mA(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 jE(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 Ke(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[gA]=!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 Ku(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!f)throw new Ku(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 RA.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 ZE(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 SA(e){if(typeof e=="string")return t=>ZE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=ZE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=ZE(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 pA,TA,RA,Ae,ae,vs,gA,ce,wx,mt,Ku,jE,jr=Se(()=>{pA=require("crypto");_a();TA=require("../index"),RA=C(W());Vu();Wn();Yu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),gA=Symbol("save-updates"),ce=Symbol("stored-record"),wx={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=SA(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[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):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,pA.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),Ke(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=SA(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[vs])return this.constructor.create(this[ae],t,this[Ae]);gr(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return $u(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&&wx[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:mA(t,this)}}return mA(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[vs]=!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,TA._assignPackageExport)("Resource",mt);a(Cx,"snake_case");Ku=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(mA,"pathToId");jE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(ZE,"selectFromObject");a(SA,"transformForSelect")});function of(e){let t=e.auditStore=e.openDB(yA.AUDIT_STORE_NAME,Dx);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,wA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{rf||(rf=setTimeout(()=>{if(rf=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-AA,0]})){if((n[0]&15)===nf){let i=s[1];r[i]?.(s[2])}t.remove(s)}},AA/10).unref())}),t}function zu(e,t,r){let s=DA[r.type],n=3;if(t?t.length>80?(s|=Wu,n=(0,Bs.writeKey)(t,rs,e?14:6),tf.setUint16(2,n)):(n=(0,Bs.writeKey)(t,rs,e?11:3),rs[1]=n):rs[1]=0,e){s|=UA;let i=s&Wu?6:3;tf.setFloat64(i,e),t||(n=i+8)}return rs[0]=s,s&Wu?tf.setUint16(4,0):rs[2]=0,r.value?Buffer.concat([rs.slice(0,n),r.value]):rs.subarray(0,n)}function dn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Wu,i=n?6:3,o;r&UA&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&sf?t.decoder.decode(e.subarray(c||i)):void 0;return{type:DA[r&7],value:u,lastVersion:o,get user(){return c?(0,Bs.readKey)(e,i,c):void 0}}}var Bs,Qu,yA,IA,wA,CA,rs,tf,Ux,Dx,AA,rf,sf,OA,nf,NA,bA,Wu,UA,DA,fa=Se(()=>{Bs=require("ordered-binary"),Qu=C(Q()),yA=C(ke()),IA=C(A()),wA=C(st()),CA=C(V());(0,Qu.initSync)();rs=Buffer.alloc(1024),tf=new DataView(rs.buffer,rs.byteOffset,1024),Ux={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,Bs.writeKey)(e[2],t,r+12)}else return(0,Bs.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,Bs.readKey)(e,t+12,r)]}else return(0,Bs.readKey)(e,t,r)}},Dx={encoding:"binary",keyEncoder:Ux},AA=(0,CA.convertToMS)((0,Qu.get)(IA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,rf=null;a(of,"openAuditStore");sf=16,OA=1,nf=2,NA=3,bA=4,Wu=128,UA=64,DA={put:OA|sf,[OA]:"put",delete:nf,[nf]:"delete",message:NA|sf,[NA]:"message",invalidate:bA,[bA]:"invalidate"};a(zu,"createAuditEntry");a(dn,"readAuditEntry")});var af,Qn,Lx,ha,Ju,LA=Se(()=>{af=C(qt());fa();Qn=Symbol("completion"),Lx=100,ha=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,af.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[Qn]&&(i||(i=[]),i.push(d[Qn])),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,zu(_.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<Lx>>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=[]}},Ju=class extends ha{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,af.getNextMonotonicTime)())}getReadTxn(){}}});var MA={};xe(MA,{Resources:()=>Xu,keyArrayToString:()=>Gi,resetResources:()=>Mx,resources:()=>En});function Mx(){return En=new Xu}function Gi(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Xu,En,ma=Se(()=>{Wn();Xu=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 Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Mx,"resetResources");a(Gi,"keyArrayToString")});function HA(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;ki||((0,zn.onMessageByType)(vA,d=>{let E=d.auditIds;uf(d.path,E,d.txnId)}),(0,zn.onMessageByType)(BA,d=>{(0,ss.trace)("confirming to proceed with txn",d.txnId)}),ki=Object.create(null));let c=ki[i]||(ki[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=Gi(t);let l=new cf(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 uf(e,t,r,s){if(!ki)return;let n=ki[e];if(n){if(xi&&xi+1!==r){(0,ss.trace)("Waiting to ensure latest txn id",xi,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Zu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c);if(xi+1!==r){await(0,zn.broadcastWithAcknowledgement)({type:BA,txnId:r});for(let[o,c]of Zu)o<r&&((0,ss.trace)("Txn",r,"waiting for txn",o),await c)}Zu.delete(r),(0,ss.trace)("Proceeding with txn id",r),xi=r-1,uf(e,t,r,s)})();return Zu.set(r,i),i}(0,ss.trace)("Notifying with txn id",r,s),xi=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,PA.writeKey)(i,vx,0);let _=i[3];_&&(i.length=3);let d,E=Gi(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,ss.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let g=n.auditStore.get(i);if(!g||(d=dn(g,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(g){console.error(g),(0,ss.info)(g)}}}if(E==null)break;let S=E.lastIndexOf?.("/",E.length-2);S>-1?E=E.slice(0,S+1):E=null,f=!0}while(!0)}}}function qA(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&Px)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,zn.broadcast)({type:vA,path:n,auditIds:l,txnId:c,start:u}),uf(n,l,c,!0))})}}var ss,zn,PA,vA,BA,Px,ki,vx,cf,xi,Zu,FA=Se(()=>{ss=C(x()),zn=C(st()),PA=require("ordered-binary");_a();ma();fa();vA="transaction",BA="transaction-await",Px=67108864,vx=Buffer.alloc(4096);a(HA,"addSubscription");cf=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"}}},Zu=new Map;a(uf,"notifyFromTransactionData");a(qA,"listenToCommits")});var xA=m((pse,GA)=>{"use strict";var lf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};GA.exports=lf});var VA=m((Rse,kA)=>{"use strict";var _f=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};kA.exports=_f});var ju=m((Ase,$A)=>{"use strict";var Ef=Q(),ff=A();Ef.initSync();var Bx=Ef.get(ff.CONFIG_PARAMS.STORAGE_COMPRESSION),Hx=Ef.get(ff.CONFIG_PARAMS.STORAGE_CACHING)!==!1,qx=ff.UPDATES_PROPERTY,df=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=Bx&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Hx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===qx)}};$A.exports=df});var tl=m((Nse,KA)=>{"use strict";var Vi=Q(),Sa=A();Vi.initSync();var Fx=Vi.get(Sa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Vi.get(Sa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Vi.get(Sa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",YA=Vi.get(Sa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),Gx=Vi.get(Sa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),el=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=Fx,this.noFSAccess=!0,YA!==void 0&&(this.overlappingSync=YA),this.noReadAhead=Gx}};KA.exports=el;el.MAX_DBS=1e4});var ye=m((yse,rO)=>{"use strict";var mf=require("lmdb"),Hr=require("fs-extra"),ir=require("path"),rl=qt(),zA=x(),Ft=rr().LMDB_ERRORS_ENUM,sl=VA(),Sf=ju(),JA=tl(),fn=ke(),WA=A(),{table:xx,resetDatabases:kx}=(de(),ee(Ne)),QA=Q(),qr=fn.INTERNAL_DBIS_NAME,XA=fn.DBI_DEFINITION_NAME,Vx="data.mdb",$x="lock.mdb",pa=".mdb",Yx="-lock",hf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[fn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[fn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new mf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function nl(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}a(nl,"pathEnvNameValidation");async function pf(e,t,r=!0){try{await Hr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+pa);return await Hr.access(s,Hr.constants.R_OK|Hr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Hr.access(ir.join(e,t,Vx),Hr.constants.R_OK|Hr.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ft.INVALID_ENVIRONMENT)}else throw new Error(Ft.INVALID_ENVIRONMENT);throw s}}a(pf,"validateEnvironmentPath");function il(e,t){if(rl.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a(il,"validateEnvDBIName");async function Kx(e,t,r=!1,s=!1){nl(e,t);let n=ir.basename(e);t=t.toString();let i=QA.get(WA.CONFIG_PARAMS.SCHEMAS);i||QA.setProperty(WA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await pf(e,t,s),ZA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Hr.mkdirp(s?c:e);let u=new JA(s?c:c+pa,!1),l=mf.open(u);l.dbis=Object.create(null);let _=new Sf(!1);l.openDB(qr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Tf(e,t,r);return l[fn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Kx,"createEnvironment");async function Wx(e,t,r,s=!0){nl(e,t),t=t.toString();let n=ir.join(e,t);return xx({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Wx,"copyEnvironment");async function ZA(e,t,r=!1){nl(e,t),t=t.toString();let s=Tf(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 pf(e,t),i=ir.join(e,t+pa),o=n!=i,c=new JA(n,o),u=mf.open(c);u.dbis=Object.create(null);let l=eO(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[fn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(ZA,"openEnvironment");async function Qx(e,t,r=!1){nl(e,t),t=t.toString();let s=ir.join(e,t+pa),n=await pf(e,t);if(global.lmdb_map!==void 0){let i=Tf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jA(o),delete global.lmdb_map[i]}}await Hr.remove(n),await Hr.remove(n===s?n+Yx:ir.join(ir.dirname(n),$x))}a(Qx,"deleteEnvironment");async function jA(e){rl.validateEnv(e);let t=e[fn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jA,"closeEnvironment");function Tf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Tf,"getCachedEnvironmentName");function zx(e){rl.validateEnv(e);let t=Object.create(null),r=Ar(e,qr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==qr)try{t[s]=Object.assign(new sl,n)}catch{zA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(zx,"listDBIDefinitions");function eO(e){rl.validateEnv(e);let t=[],r=Ar(e,qr);for(let{key:s}of r.getRange({start:!1}))s!==qr&&t.push(s);return t}a(eO,"listDBIs");function Jx(e,t){let s=Ar(e,qr).getEntry(t),n=new sl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Jx,"getDBIDefinition");function tO(e,t,r,s=!r){if(il(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new Sf(r,s===!0),o=e.openDB(t,i),c=new sl(r===!0,s);return o[XA]=c,Ar(e,qr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(tO,"createDBI");function Ar(e,t){if(il(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==qr?r=Jx(e,t):r=new sl,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new Sf(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(Ft.DBI_DOES_NOT_EXIST):n}return s[XA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function Xx(e,t){il(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[fn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Xx,"statDBI");async function Zx(e,t){try{let r=ir.join(e,t+pa);return(await Hr.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(Zx,"environmentDataSize");function jx(e,t){if(il(e,t),t=t.toString(),t===qr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,qr).removeSync(t)}a(jx,"dropDBI");function ek(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===Ft.DBI_DOES_NOT_EXIST)tO(e,i,i!==t,i===t),s=!0;else throw o}}s&&kx()}a(ek,"initializeDBIs");rO.exports={openDBI:Ar,openEnvironment:ZA,createEnvironment:Kx,listDBIs:eO,listDBIDefinitions:zx,createDBI:tO,dropDBI:jx,statDBI:Xx,deleteEnvironment:Qx,initializeDBIs:ek,TransactionCursor:hf,environmentDataSize:Zx,copyEnvironment:Wx,closeEnvironment:jA}});var iO=m((wse,nO)=>{"use strict";var Rf=ye(),tk=x(),sO=rr().LMDB_ERRORS_ENUM;nO.exports=rk;async function rk(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 Rf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==sO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Rf.closeEnvironment(global.lmdb_map[s]),await Rf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==sO.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){tk.error(t)}}a(rk,"cleanLMDBMap")});var Jn=m((Use,sk)=>{sk.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 pO=m((Lse,SO)=>{"use strict";var gf=require("recursive-iterator"),nk=require("alasql"),Af=require("clone"),oO=V(),{handleHDBError:aO,hdb_errors:ik}=W(),{HDB_ERROR_MSGS:cO,HTTP_STATUS_CODES:uO}=ik,{getDatabases:ok}=(de(),ee(Ne)),ak=["DISTINCT_ARRAY"],lO=Symbol("validateTables"),Of=Symbol("validateTable"),Dse=Symbol("getAllColumns"),_O=Symbol("validateAllColumns"),ol=Symbol("findColumn"),dO=Symbol("validateOrderBy"),Ta=Symbol("validateSegment"),Nf=Symbol("validateColumn"),EO=Symbol("setColumnsForTable"),fO=Symbol("checkColumnsForAsterisk"),hO=Symbol("validateGroupBy"),mO=Symbol("hasColumns"),bf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[lO](),this[fO](),this[_O]()}[lO](){if(this[mO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Of](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Of](t.table)})}}[mO](){let t=!1,r=new gf(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Of](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ok();if(!r[t.databaseid])throw aO(new Error,cO.SCHEMA_NOT_FOUND(t.databaseid),uO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw aO(new Error,cO.TABLE_NOT_FOUND(t.databaseid,t.tableid),uO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Af(n);i.table=Af(t),this.attributes.push(i)})}[ol](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)}[fO](){let t=new gf(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[EO](r.tableid)}[EO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new nk.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_O](){this[Ta](this.statement.columns,!1),this[Ta](this.statement.joins,!1),this[Ta](this.statement.where,!1),this[hO](this.statement.group,!1),this[Ta](this.statement.order,!0)}[Ta](t,r){if(!t)return;let s=new gf(t),n=[];for(let{node:i,path:o}of s)!oO.isEmpty(i)&&!oO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[dO](i):n.push(this[Nf](i)));return n}[hO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&ak.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Af(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ol](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[ol](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`}[dO](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[Nf](t)}[Nf](t){let r=this[ol](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]}};SO.exports=bf});var RO=m((Pse,TO)=>{"use strict";var yf=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")}};TO.exports=yf});var AO=m((Bse,gO)=>{"use strict";var If=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};gO.exports=If});var NO=m((qse,OO)=>{"use strict";var wf=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}};OO.exports=wf});var yO=m((Gse,bO)=>{"use strict";var Cf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};bO.exports=Cf});var $i=m((Yse,CO)=>{"use strict";var ck=ye(),uk=AO(),lk=NO(),_k=yO(),ns=qt(),Ra=rr().LMDB_ERRORS_ENUM,dk=ke(),Hs=A(),Ek=V(),fk=require("uuid"),kse=require("lmdb"),{handleHDBError:hk,hdb_errors:mk}=W(),{OVERFLOW_MARKER:Vse,MAX_SEARCH_KEY_LENGTH:$se}=dk,IO=Q();IO.initSync();var al=IO.get(Hs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Uf=Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Xn=Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Sk(e,t,r,s,n=ns.getNextMonotonicTime()){Pf(e,t,r,s),Df(e,t,r);let i=new uk,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];wO(l,!0,n);let _=pk(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Lf(o,c,s,i,n)}a(Sk,"insertRecords");function pk(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][Hs.FUNC_VAL],s[o]=c)}let u=ns.getIndexedValues(c),l=e.dbis[o];if(u){al&&l.prefetch(u.map(_=>({key:_,value:n})),cl);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}al&&e.dbis[t].prefetch([n],cl),e.dbis[t].put(n,s,s[Xn])})}a(pk,"insertRecord");function Tk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(Tk,"removeSkippedRecords");function wO(e,t,r){let s=r>0;(s||!Number.isInteger(e[Xn]))&&(e[Xn]=r||(r=ns.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Uf]))&&(e[Uf]=r||ns.getNextMonotonicTime()):delete e[Uf]}a(wO,"setTimestamps");function Df(e,t,r){r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Hs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),ck.initializeDBIs(e,t,r)}a(Df,"initializeTransaction");async function Rk(e,t,r,s,n=ns.getNextMonotonicTime()){Pf(e,t,r,s),Df(e,t,r);let i=new lk,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Mf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Lf(c,u,s,i,n,o)}a(Rk,"updateRecords");async function gk(e,t,r,s,n=ns.getNextMonotonicTime()){try{Pf(e,t,r,s)}catch(u){throw hk(u,u.message,mk.HTTP_STATUS_CODES.BAD_REQUEST)}Df(e,t,r);let i=new _k,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Ek.isEmpty(l[t])?(_=fk.v4(),l[t]=_):_=l[t];let d=Mf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Lf(o,c,s,i,n)}a(gk,"upsertRecords");async function Lf(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||ns.getNextMonotonicTime(),Tk(r,i),s}a(Lf,"finalizeWrite");function Mf(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(wO(r,!_,o),Number.isInteger(r[Xn])&&l[Xn]>r[Xn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],T=e.dbis[h];if(T===void 0)continue;let g=l[h];if(typeof S=="function"){let k=S([[l]]);Array.isArray(k)&&(S=k[0][Hs.FUNC_VAL],r[h]=S)}if(S===g)continue;let O=ns.getIndexedValues(g);if(O){al&&T.prefetch(O.map(k=>({key:k,value:s})),cl);for(let k=0,$=O.length;k<$;k++)T.remove(O[k],s)}if(O=ns.getIndexedValues(S),O){al&&T.prefetch(O.map(k=>({key:k,value:s})),cl);for(let k=0,$=O.length;k<$;k++)T.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Xn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Mf(e,t,r,s,n,i,o))}a(Mf,"updateUpsertRecord");function Ak(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(Ra.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ra.WRITE_ATTRIBUTES_REQUIRED):new Error(Ra.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Ak,"validateBasic");function Pf(e,t,r,s){if(Ak(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ra.RECORDS_REQUIRED):new Error(Ra.RECORDS_MUST_BE_ARRAY)}a(Pf,"validateWrite");function cl(){}a(cl,"noop");CO.exports={insertRecords:Sk,updateRecords:Rk,upsertRecords:gk}});var is=m((Wse,LO)=>{"use strict";var DO=V(),UO=A(),Yi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,qs=require("joi"),hn={schema_format:{pattern:Yi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Ok=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern(Yi).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()).required(),Nk=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern(Yi).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()),bk=qs.alternatives(qs.string().min(1).max(hn.schema_length.maximum).pattern(Yi).messages({"string.pattern.base":"{:#label} "+hn.schema_format.message}),qs.number()).required();function yk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>hn.schema_length.maximum?`'${e}' maximum of 250 characters`:Yi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(yk,"checkValidTable");function Ik(e,t){return DO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Ik,"validateSchemaExists");function wk(e,t){let r=t.state.ancestors[0].schema;return DO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(wk,"validateTableExists");function Ck(e,t){return e.toLowerCase()===UO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${UO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Ck,"validateSchemaName");LO.exports={common_validators:hn,schema_regex:Yi,hdb_schema_table:Ok,validateSchemaExists:Ik,validateTableExists:wk,validateSchemaName:Ck,checkValidTable:yk,hdb_database:Nk,hdb_table:bk}});var ul=m((zse,MO)=>{var{common_validators:os}=is(),Aa=ve(),ga="is required",We={database:{presence:!1,format:os.schema_format,length:os.schema_length},schema:{presence:!1,format:os.schema_format,length:os.schema_length},table:{presence:!0,format:os.schema_format,length:os.schema_length},attribute:{presence:!0,format:os.schema_format,length:os.schema_length},hash_attribute:{presence:!0,format:os.schema_format,length:os.schema_length}};function Oa(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(Oa,"makeAttributesStrings");function Uk(e){return e=Oa(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,Aa.validateObject(e,We)}a(Uk,"schema_object");function Dk(e){return e=Oa(e),We.table.presence={message:ga},We.attribute.presence=!1,We.hash_attribute.presence=!1,Aa.validateObject(e,We)}a(Dk,"table_object");function Lk(e){return e=Oa(e),We.table.presence={message:ga},We.attribute.presence=!1,Aa.validateObject(e,We)}a(Lk,"create_table_object");function Mk(e){return e=Oa(e),We.table.presence={message:ga},We.attribute.presence={message:ga},We.hash_attribute.presence=!1,Aa.validateObject(e,We)}a(Mk,"attribute_object");function Pk(e){return e=Oa(e),We.table.presence={message:ga},We.attribute.presence=!1,We.hash_attribute.presence=!1,Aa.validateObject(e,We)}a(Pk,"describe_table");function vk(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(vk,"validateTableResidence");MO.exports={schema_object:Uk,create_table_object:Lk,table_object:Dk,attribute_object:Mk,describe_table:Pk,validateTableResidence:vk}});var vO=m((Xse,PO)=>{"use strict";var Bk=require("uuid"),vf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||Bk.v4(),this.schema_table=`${this.schema}.${this.table}`}};PO.exports=vf});var ll=m((jse,BO)=>{"use strict";var Hk=vO(),Bf=class extends Hk{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}};BO.exports=Bf});var qO=m((tne,HO)=>{"use strict";HO.exports=Fk;var qk="inserted";function Fk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===qk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Fk,"returnObject")});var _l=m((sne,VO)=>{"use strict";var Gk=A(),Hf=ye(),xk=$i(),{getSystemSchemaPath:kk,getSchemaPath:Vk}=we(),$k=Jn(),Yk=ul(),Kk=ll(),Wk=qO(),{handleHDBError:FO,hdb_errors:xO}=W(),GO=V(),{HTTP_STATUS_CODES:Qk}=xO,qf=$k.hdb_attribute,kO=[];for(let e=0;e<qf.attributes.length;e++)kO.push(qf.attributes[e].attribute);var zk="inserted";VO.exports=Jk;async function Jk(e){let t=Yk.attribute_object(e);if(t)throw FO(new Error,t.message,xO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&GO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FO(new Error,r,Qk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=GO.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 Kk(e.schema,e.table,e.attribute,e.id);try{let i=await Hf.openEnvironment(Vk(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}`);Hf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Hf.openEnvironment(kk(),Gk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await xk.insertRecords(o,qf.hash_attribute,kO,[n]);return Wk(zk,c,{records:[n]},u)}catch(i){throw i}}a(Jk,"lmdbCreateAttribute")});var Gf=m((ine,YO)=>{var{hdb_table:Xk,hdb_database:$O}=is(),Zk=ve(),Ff=require("joi"),jk={undefined:"undefined",null:"null"},eV=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||jk[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"),tV=Ff.object({database:$O,schema:$O,table:Xk,records:Ff.array().items(Ff.object().custom(eV)).required()});YO.exports=function(e){return Zk.validateBySchema(e,tV)}});var Na=m((cne,WO)=>{"use strict";var Fs=V(),KO=x(),ane=Gf(),{getDatabases:rV}=(de(),ee(Ne)),{ClientError:Zn}=W();WO.exports=sV;function sV(e){if(Fs.isEmpty(e))throw new Zn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Zn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Zn("invalid table specified.");if(!Array.isArray(e.records))throw new Zn("records must be an array");let t=rV()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Zn(`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&&Fs.isEmptyOrZeroLength(o[r]))throw KO.error("a valid hash attribute must be provided with update record:",o),new Zn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Zn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Fs.isEmpty(o[r])&&o[r]!==""&&s.has(Fs.autoCast(o[r]))&&(o.skip=!0),s.add(Fs.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(sV,"insertUpdateValidate")});var ba=m((lne,QO)=>{"use strict";var nV=A().OPERATIONS_ENUM,xf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=nV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};QO.exports=xf});var Ca=m((Ene,zO)=>{"use strict";var dne=ba(),dl=A(),Vf=V(),kf=x(),iV=require("uuid"),{handleHDBError:ya,hdb_errors:oV}=W(),{HDB_ERROR_MSGS:Ia,HTTP_STATUS_CODES:wa}=oV;zO.exports=aV;function aV(e,t,r){for(let n=0;n<t.length;n++)cV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];uV(i,r,e.operation)}}a(aV,"processRows");function cV(e){if(Buffer.byteLength(String(e))>dl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ya(new Error,Ia.ATTR_NAME_LENGTH_ERR(e),wa.BAD_REQUEST,void 0,void 0,!0);if(Vf.isEmptyOrZeroLength(e)||Vf.isEmpty(e.trim()))throw ya(new Error,Ia.ATTR_NAME_NULLISH_ERR,wa.BAD_REQUEST,void 0,void 0,!0)}a(cV,"validateAttribute");function uV(e,t,r){if(!e.hasOwnProperty(t)||Vf.isEmptyOrZeroLength(e[t])){if(r===dl.OPERATIONS_ENUM.INSERT||r===dl.OPERATIONS_ENUM.UPSERT){e[t]=iV.v4();return}throw kf.error("Update transaction aborted due to record with no hash value:",e),ya(new Error,Ia.RECORD_MISSING_HASH_ERR,wa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>dl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw kf.error(e),ya(new Error,Ia.HASH_VAL_LENGTH_ERR,wa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw kf.error(e),ya(new Error,Ia.INVALID_FORWARD_SLASH_IN_HASH_ERR,wa.BAD_REQUEST,void 0,void 0,!0)}a(uV,"validateHash")});var El=m((hne,XO)=>{"use strict";var JO=V(),lV=A(),_V=x(),dV=_l(),EV=ll(),fV=Gs(),{SchemaEventMsg:hV}=Fr(),mV="already exists in";XO.exports=SV;async function SV(e,t,r){if(JO.isEmptyOrZeroLength(r))return r;let s=[];JO.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 pV(e,t.schema,t.name,i)})),n}a(SV,"lmdbCheckForNewAttributes");async function pV(e,t,r,s){let n=new EV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await TV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(mV))_V.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(pV,"createNewAttribute");async function TV(e){let t;return t=await dV(e),fV.signalSchemaChange(new hV(process.pid,lV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(TV,"createAttribute")});var Ki=m((Sne,ZO)=>{"use strict";var $f=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}};ZO.exports=$f});var eN=m((Tne,jO)=>{"use strict";var RV=Ki(),gV=A().OPERATIONS_ENUM,Yf=class extends RV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(gV.INSERT,r,s,n,i),this.records=t}};jO.exports=Yf});var rN=m((gne,tN)=>{"use strict";var AV=Ki(),OV=A().OPERATIONS_ENUM,Kf=class extends AV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(OV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};tN.exports=Kf});var nN=m((One,sN)=>{"use strict";var NV=Ki(),bV=A().OPERATIONS_ENUM,Wf=class extends NV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(bV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};sN.exports=Wf});var oN=m((bne,iN)=>{"use strict";var yV=Ki(),IV=A().OPERATIONS_ENUM,Qf=class extends yV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(IV.DELETE,s,n,t,i),this.original_records=r}};iN.exports=Qf});var Ua=m((wne,lN)=>{"use strict";var Ine=require("path"),aN=ye(),wV=eN(),CV=rN(),UV=nN(),DV=oN(),Wi=ke(),cN=V(),{CONFIG_PARAMS:LV}=A(),uN=Q();uN.initSync();var fl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:MV}=we();lN.exports=PV;async function PV(e,t){if(uN.get(LV.LOGGING_AUDITLOG)===!1)return;let r=MV(e.schema,e.table),s=await aN.openEnvironment(r,e.table,!0),n=vV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){aN.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),cN.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(PV,"writeTransaction");function vV(e,t){let r=cN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new wV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new CV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new UV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new DV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(vV,"createTransactionObject")});var zf=m((Dne,_N)=>{"use strict";var BV=Na(),Une=ba(),Da=A(),HV=Ca(),qV=$i().insertRecords,FV=ye(),GV=x(),xV=El(),{getSchemaPath:kV}=we(),VV=Ua();_N.exports=$V;async function $V(e){try{let{schema_table:t,attributes:r}=BV(e);HV(e,r,t.hash_attribute),e.schema!==Da.SYSTEM_SCHEMA_NAME&&(r.includes(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Da.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await xV(e.hdb_auth_header,t,r),n=kV(e.schema,e.table),i=await FV.openEnvironment(n,e.table),o=await qV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await VV(e,o)}catch(c){GV.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($V,"lmdbCreateRecords")});var fN=m((Mne,EN)=>{"use strict";var dN=A(),YV=zf(),KV=ba(),WV=require("fs-extra"),{getSchemaPath:QV}=we();EN.exports=zV;async function zV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new KV(dN.SYSTEM_SCHEMA_NAME,dN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await YV(r),await WV.mkdirp(QV(e.schema))}a(zV,"lmdbCreateSchema")});var mN=m((vne,hN)=>{"use strict";var Jf=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}};hN.exports=Jf});var RN=m((Gne,TN)=>{"use strict";var SN=ye(),Xf=qt(),Zf=rr().LMDB_ERRORS_ENUM,JV=ke(),pN=x(),Hne=V(),XV=require("lmdb"),ZV=mN(),jV=A(),{OVERFLOW_MARKER:qne,MAX_SEARCH_KEY_LENGTH:Fne}=JV,e$=jV.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function t$(e,t,r,s){if(Xf.validateEnv(e),t===void 0)throw new Error(Zf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zf.IDS_REQUIRED):new Error(Zf.IDS_MUST_BE_ITERABLE);try{let n=SN.listDBIs(e);SN.initializeDBIs(e,t,n);let i=new ZV,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[e$]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,XV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let g=n[T];if(!h.hasOwnProperty(g)||g===t)continue;let O=e.dbis[g],k=h[g];if(k!=null)try{let $=Xf.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{pN.warn(`cannot delete from attribute: ${g}, ${k}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){pN.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=Xf.getNextMonotonicTime(),i}catch(n){throw n}}a(t$,"deleteRecords");TN.exports={deleteRecords:t$}});var La=m((kne,AN)=>{"use strict";var Qi=V(),r$=RN(),s$=ye(),{getSchemaPath:n$}=we(),i$=Ua(),o$=x();AN.exports=a$;async function a$(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 gN([],[]);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=n$(e.schema,e.table),i=await s$.openEnvironment(n,e.table),o=await r$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await i$(e,o)}catch(c){o$.error(`unable to write transaction due to ${c.message}`)}return gN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(a$,"lmdbDeleteRecords");function gN(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(gN,"createDeleteResponse")});var eh=m((Yne,ON)=>{"use strict";var c$=A(),$ne=qt();function jf(e,t){let r=Object.create(null);if(t.length===1&&c$.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(jf,"parseRow");function u$(e,t,r,s){let n=jf(r,e);s.push(n)}a(u$,"searchAll");function l$(e,t,r,s){let n=jf(r,e);s[t]=n}a(l$,"searchAllToMap");function _$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(_$,"iterateDBI");function jn(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(jn,"pushResults");function d$(e,t,r,s,n,i){t.toString().endsWith(e)&&jn(t,r,s,n,i)}a(d$,"endsWith");function E$(e,t,r,s,n,i){t.toString().includes(e)&&jn(t,r,s,n,i)}a(E$,"contains");function f$(e,t,r,s,n,i){t>e&&jn(t,r,s,n,i)}a(f$,"greaterThanCompare");function h$(e,t,r,s,n,i){t>=e&&jn(t,r,s,n,i)}a(h$,"greaterThanEqualCompare");function m$(e,t,r,s,n,i){t<e&&jn(t,r,s,n,i)}a(m$,"lessThanCompare");function S$(e,t,r,s,n,i){t<=e&&jn(t,r,s,n,i)}a(S$,"lessThanEqualCompare");ON.exports={parseRow:jf,searchAll:u$,searchAllToMap:l$,iterateDBI:_$,endsWith:d$,contains:E$,greaterThanCompare:f$,greaterThanEqualCompare:h$,lessThanCompare:m$,lessThanEqualCompare:S$,pushResults:jn}});var zi=m((Jne,UN)=>{"use strict";var mn=ye(),Wne=x(),or=qt(),hl=ke(),Ve=rr().LMDB_ERRORS_ENUM,Qne=V(),p$=A(),ml=eh(),{parseRow:T$}=ml,zne=require("lmdb"),{OVERFLOW_MARKER:NN,MAX_SEARCH_KEY_LENGTH:R$}=hl;function bN(e,t,r,s=!1,n=void 0,i=void 0){return ei(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(bN,"iterateFullIndex");function Ma(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ei(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(Ma,"iterateRangeBetween");function ei(e,t,r,s){let n=e.database||e,i=mn.openDBI(n,r);i[hl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&mn.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(ei,"setupTransaction");function yN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(NN)){if(!n)if(r)n=mn.openDBI(e,r);else{let u=mn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=mn.openDBI(e,u[l]),!n[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(yN,"getOverflowCheck");function g$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return ei(e,t,t,(o,c,u)=>(Sl(r),r=Pa(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>T$(l.value,r))))}a(g$,"searchAll");function A$(e,t,r,s=!1,n=void 0,i=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);Sl(r),r=Pa(e.database||e,r);let o=new Map;for(let{key:c,value:u}of bN(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(A$,"searchAllToMap");function O$(e,t,r=!1,s=void 0,n=void 0){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=bN(e,void 0,t,r,s,n),c=o.transaction,u=yN(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(O$,"iterateDBI");function N$(e,t){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return mn.statDBI(e,t).entryCount}a(N$,"countAll");function b$(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,t,r,(c,u,l,_)=>(s=or.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(b$,"equals");function y$(e,t,r){return Sn(e,t,r),mn.openDBI(e,t).getValuesCount(r)}a(y$,"count");function I$(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,null,r,(c,u)=>{s=or.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(I$,"startsWith");function w$(e,t,r,s,n=!1,i=void 0,o=void 0){return IN(e,t,r,s,n,i,o,!0)}a(w$,"endsWith");function IN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Sn(e,r,s),ei(e,null,r,(u,l,_,d)=>{let E=yN(_,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(NN)?l.getValues(f,{transaction:u}).map(S=>{let T=E(f,S);if(c?T.endsWith(s):T.includes(s))return{key:T,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?l[hl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(S=>({key:f,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(IN,"contains");function C$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!0,!1)}a(C$,"greaterThan");function U$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ma(e,t,r,s,u,n,i,o,!1,!1)}a(U$,"greaterThanEqual");function D$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!0)}a(D$,"lessThan");function L$(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ma(e,t,r,u,s,n,i,o,!1,!1)}a(L$,"lessThanEqual");function M$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(or.validateEnv(e),r===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Ve.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Ve.END_VALUE_REQUIRED);if(s=or.convertKeyValueToWrite(s),n=or.convertKeyValueToWrite(n),s>n)throw new Error(Ve.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ma(e,t,r,s,n,i,o,c)}a(M$,"between");function P$(e,t,r,s){or.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),r=Pa(n,r),s===void 0)throw new Error(Ve.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ml.parseRow(c,r)),o}a(P$,"searchByHash");function v$(e,t,r){or.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(v$,"checkHashExists");function B$(e,t,r,s,n=[]){return CN(e,t,r,s,n),wN(e,t,r,s,n).map(i=>i[1])}a(B$,"batchSearchByHash");function H$(e,t,r,s,n=[]){CN(e,t,r,s,n);let i=new Map;for(let[o,c]of wN(e,t,r,s,n))i.set(o,c);return i}a(H$,"batchSearchByHashToMap");function wN(e,t,r,s,n=[]){return ei(e,t,t,(i,o,c)=>{r=Pa(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ml.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(wN,"batchHashSearch");function CN(e,t,r,s,n){if(or.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error(Ve.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ve.IDS_MUST_BE_ITERABLE)}a(CN,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error(Ve.FETCH_ATTRIBUTES_REQUIRED):new Error(Ve.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"validateFetchAttributes");function Sn(e,t,r){if(or.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.SEARCH_VALUE_REQUIRED);if(r?.length>R$)throw new Error(Ve.SEARCH_VALUE_TOO_LARGE)}a(Sn,"validateComparisonFunctions");function Pa(e,t){return t.length===1&&p$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=mn.listDBIs(e)),t}a(Pa,"setGetWholeRowAttributes");UN.exports={searchAll:g$,searchAllToMap:A$,count:y$,countAll:N$,equals:b$,startsWith:I$,endsWith:w$,contains:IN,searchByHash:P$,setGetWholeRowAttributes:Pa,batchSearchByHash:B$,batchSearchByHashToMap:H$,checkHashExists:v$,iterateDBI:O$,greaterThan:C$,greaterThanEqual:U$,lessThan:D$,lessThanEqual:L$,between:M$}});var Ji=m((Zne,vN)=>{var DN=require("lodash"),LN=ve(),Ce=require("joi"),q$=V(),{hdb_schema_table:pl,checkValidTable:MN,hdb_table:PN,hdb_database:Tl}=is(),{handleHDBError:F$,hdb_errors:G$}=W(),{getDatabases:x$}=(de(),ee(Ne)),{HTTP_STATUS_CODES:k$}=G$,V$=Ce.object({database:Tl,schema:Tl,table:PN,search_attribute:pl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(pl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),$$=Ce.object({database:Tl,schema:Tl,table:PN,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(pl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:pl,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()});vN.exports=function(e,t){let r=null;switch(t){case"value":r=LN.validateBySchema(e,V$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(MN("database",e.schema)),i(MN("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=LN.validateBySchema(e,$$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=q$.checkGlobalSchemaTable(e.schema,e.table);if(n)return F$(new Error,n,k$.NOT_FOUND);let o=x$()[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=DN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!DN.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 th=m((eie,BN)=>{"use strict";var Y$=ye(),K$=Ji(),{getSchemaPath:W$}=we();BN.exports=Q$;function Q$(e){let t=K$(e,"hashes");if(t)throw t;let r=W$(e.schema,e.table);return Y$.openEnvironment(r,e.table)}a(Q$,"initialize")});var rh=m((rie,HN)=>{"use strict";var z$=zi(),J$=th();HN.exports=X$;async function X$(e){let t=await J$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return z$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(X$,"lmdbGetDataByHash")});var Xi=m((nie,qN)=>{"use strict";var sh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};qN.exports=sh});var GN=m((aie,FN)=>{"use strict";var oie=Xi(),Z$=zi(),j$=th();FN.exports=eY;async function eY(e){let t=await j$(e),r=global.hdb_schema[e.schema][e.table];return Z$.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(eY,"lmdbSearchByHash")});var as=m((uie,xN)=>{"use strict";var nh=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=_}};xN.exports=nh});var Rl=m((_ie,WN)=>{"use strict";var It=zi(),tY=ye(),rY=V(),ie=ke(),ti=A(),sY=Jn(),kN=rr().LMDB_ERRORS_ENUM,{getSchemaPath:nY}=we(),xs=ti.SEARCH_WILDCARDS;async function iY(e,t,r){let s;e.schema===ti.SYSTEM_SCHEMA_NAME?s=sY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=KN(e,s.hash_attribute,r,t);return $N(e,n,s.hash_attribute,r)}a(iY,"prepSearch");async function $N(e,t,r,s){let n=nY(e.schema,e.table),i=await tY.openEnvironment(n,e.table),o=YN(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(oY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?VN(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?VN(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?It.batchSearchByHashToMap(c,r,e.get_attributes,l):It.batchSearchByHash(c,r,e.get_attributes,l)}a($N,"executeSearch");function YN(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=It.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=It.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=It.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=It.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return It.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return It.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return It.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return It.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=It.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=It.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=It.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=It.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=It.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(YN,"searchByType");function VN(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(VN,"createMapFromIterable");function oY(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(oY,"checkToFetchMore");function KN(e,t,r,s){if(rY.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),xs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(xs[0])<0&&n.indexOf(xs[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(xs.indexOf(i)>=0&&xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(xs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(xs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(xs[0])||n.includes(xs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(kN.UNKNOWN_SEARCH_TYPE)}else switch(s){case ti.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ti.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ti.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ti.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ti.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(kN.UNKNOWN_SEARCH_TYPE)}}a(KN,"createSearchTypeFromSearchObject");WN.exports={executeSearch:$N,createSearchTypeFromSearchObject:KN,prepSearch:iY,searchByType:YN}});var zN=m((fie,QN)=>{"use strict";var Eie=as(),aY=Ji(),cY=V(),uY=A(),lY=Rl();QN.exports=_Y;function _Y(e,t){if(!cY.isEmpty(t)&&uY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=aY(e,"value");if(s)throw s;let n=!0;return lY.prepSearch(e,t,n)}a(_Y,"lmdbGetDataByValue")});var va=m((Sie,JN)=>{"use strict";var mie=as(),dY=Ji(),EY=V(),fY=A(),hY=Rl();JN.exports=mY;async function mY(e,t){if(!EY.isEmpty(t)&&fY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=dY(e,"value");if(s)throw s;return hY.prepSearch(e,t,!1)}a(mY,"lmdbSearchByValue")});var ZN=m((Rie,XN)=>{"use strict";var Tie=ke(),ih=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}},oh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ah=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};XN.exports={SearchByConditionsObject:ih,SearchCondition:oh,SortAttribute:ah}});var sb=m((Nie,rb)=>{"use strict";var Aie=ZN().SearchByConditionsObject,SY=as(),pY=Ji(),ch=zi(),gl=ke(),{Resource:Oie}=(jr(),ee(ef)),tb=Rl(),TY=eh(),RY=require("lodash"),{getSchemaPath:gY}=we(),jN=ye(),{handleHDBError:AY,hdb_errors:OY}=W(),{HTTP_STATUS_CODES:NY}=OY,bY=1e8;rb.exports=yY;async function yY(e){let t=pY(e,"conditions");if(t)throw AY(t,t.message,NY.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=gY(e.schema,e.table),s=await jN.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)jN.openDBI(s,l.search_attribute);let i=RY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=ch.count(s,l.search_attribute,l.search_value):_===gl.SEARCH_TYPES.CONTAINS||_===gl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=bY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await eb(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(tb.filterByType),d=_.length,E=ch.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=>TY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await eb(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=ch.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(yY,"lmdbSearchByConditions");async function eb(e,t,r,s){let n=new SY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===gl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,tb.searchByType(e,n,i,s).map(o=>o.value)}a(eb,"executeConditionSearch")});var Ba=m((yie,nb)=>{"use strict";var IY=A().OPERATIONS_ENUM,uh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=IY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};nb.exports=uh});var lh=m((wie,db)=>{"use strict";var cb=as(),ub=Ba(),lb=va(),_b=La(),Gt=A(),ib=V(),ob=ye(),{getTransactionAuditStorePath:wY,getSchemaPath:CY}=we(),ab=x();db.exports=UY;async function UY(e){try{if(ib.isEmpty(global.hdb_schema[e.schema])||ib.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await DY(e),await LY(e);let t=CY(e.schema,e.table);try{await ob.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ab.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=wY(e.schema,e.table);await ob.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ab.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(UY,"lmdbDropTable");async function DY(e){let t=new cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await lb(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 ub(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await _b(n)}a(DY,"deleteAttributesFromSystem");async function LY(e){let t=new cb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await lb(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 ub(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await _b(n)}catch(i){throw i}}a(LY,"dropTableFromSystem")});var fb=m((Uie,Eb)=>{"use strict";var MY=require("fs-extra"),PY=as(),vY=Xi(),BY=Ba(),HY=lh(),qY=La(),FY=rh(),GY=va(),ks=A(),{getSchemaPath:xY}=we(),{handleHDBError:kY,hdb_errors:VY}=W(),{HDB_ERROR_MSGS:$Y,HTTP_STATUS_CODES:YY}=VY;Eb.exports=KY;async function KY(e){let t;try{t=await WY(e.schema);let r=new PY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await GY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await HY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new BY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await qY(n);let i=xY(t);await MY.remove(i)}catch(r){throw r}}a(KY,"lmdbDropSchema");async function WY(e){let t=new vY(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await FY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw kY(new Error,$Y.SCHEMA_NOT_FOUND(e),YY.NOT_FOUND,void 0,void 0,!0);return s}a(WY,"validateDropSchema")});var dh=m((Lie,hb)=>{"use strict";var _h=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};hb.exports=_h});var Sb=m((vie,mb)=>{"use strict";var QY=require("fs-extra"),Al=ye(),{getTransactionAuditStorePath:zY}=we(),Eh=ke(),Pie=dh();mb.exports=JY;async function JY(e){let t;try{let r=zY(e.schema,e.table);await QY.mkdirp(r),t=await Al.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{Al.createDBI(t,Eh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Al.createDBI(t,Eh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Al.createDBI(t,Eh.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(JY,"createTransactionsAuditEnvironment")});var gb=m((Hie,Rb)=>{"use strict";var fh=A(),pb=ye(),XY=$i(),{getSystemSchemaPath:ZY,getSchemaPath:jY}=we(),eK=Jn(),tK=_l(),hh=ll(),rK=x(),sK=Sb(),Sh=eK.hdb_table,Tb=[];for(let e=0;e<Sh.attributes.length;e++)Tb.push(Sh.attributes[e].attribute);Rb.exports=nK;async function nK(e,t){let r=jY(t.schema,t.table),s=new hh(t.schema,t.table,fh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new hh(t.schema,t.table,fh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await pb.createEnvironment(r,t.table),e!==void 0){let o=await pb.openEnvironment(ZY(),fh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await XY.insertRecords(o,Sh.hash_attribute,Tb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await mh(s),await mh(n),await mh(i)}await sK(t)}catch(o){throw o}}a(nK,"lmdbCreateTable");async function mh(e){try{await tK(e)}catch(t){rK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(mh,"createAttribute")});var Ob=m((Fie,Ab)=>{"use strict";var iK=Na(),oK=Ca(),aK=El(),Ha=A(),cK=$i().updateRecords,uK=ye(),{getSchemaPath:lK}=we(),_K=Ua(),dK=x();Ab.exports=EK;async function EK(e){try{let{schema_table:t,attributes:r}=iK(e);oK(e,r,t.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(r.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await aK(e.hdb_auth_header,t,r),n=lK(e.schema,e.table),i=await uK.openEnvironment(n,e.table),o=await cK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await _K(e,o)}catch(c){dK.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(EK,"lmdbUpdateRecords")});var bb=m((xie,Nb)=>{"use strict";var fK=A().OPERATIONS_ENUM,ph=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=fK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Nb.exports=ph});var Ib=m(($ie,yb)=>{"use strict";var Vie=bb(),hK=Na(),mK=Ca(),SK=El(),qa=A(),pK=$i().upsertRecords,TK=ye(),{getSchemaPath:RK}=we(),gK=Ua(),AK=x(),{handleHDBError:OK,hdb_errors:NK}=W();yb.exports=bK;async function bK(e){let t;try{t=hK(e)}catch(u){throw OK(u,u.message,NK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;mK(e,s,r.hash_attribute),e.schema!==qa.SYSTEM_SCHEMA_NAME&&(s.includes(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await SK(e.hdb_auth_header,r,s),i=RK(e.schema,e.table),o=await TK.openEnvironment(i,e.table),c=await pK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await gK(e,c)}catch(u){AK.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(bK,"lmdbUpsertRecords")});var Cb=m((Kie,wb)=>{"use strict";var Th=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};wb.exports=Th});var Db=m((Qie,Ub)=>{"use strict";var Rh=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}};Ub.exports=Rh});var Pb=m((Xie,Mb)=>{"use strict";var gh=ye(),{getTransactionAuditStorePath:yK}=we(),Jie=Cb(),Fa=ke(),IK=V(),Lb=Db(),wK=require("util").promisify,CK=wK(setTimeout),UK=1e4,DK=100;Mb.exports=LK;async function LK(e){let t=yK(e.schema,e.table),r=await gh.openEnvironment(t,e.table,!0),s=gh.listDBIs(r);gh.initializeDBIs(r,Fa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Lb;do n=await MK(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 CK(DK);while(n.transactions_deleted>0);return i}a(LK,"deleteAuditLogsBefore");async function MK(e,t){let r=new Lb;try{let s=e.dbis[Fa.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[Fa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];IK.isEmpty(c)||(n=e.dbis[Fa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Fa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>UK)break}return await n,r}catch(s){throw s}}a(MK,"deleteTransactions")});var Bb=m((jie,vb)=>{"use strict";var Ah=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};vb.exports=Ah});var qb=m((roe,Hb)=>{"use strict";var PK=as(),vK=Ba(),toe=Bb(),cs=A(),BK=V(),Oh=ye(),HK=Jn(),qK=va(),FK=La(),{getSchemaPath:GK}=we();Hb.exports=xK;async function xK(e,t=!0){let r;e.schema===cs.SYSTEM_SCHEMA_NAME?r=HK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await VK(e),n=GK(e.schema,e.table),i=await Oh.openEnvironment(n,e.table);return t===!0&&await kK(e,i,r.hash_attribute),Oh.dropDBI(i,e.attribute),s}a(xK,"lmdbDropAttribute");async function kK(e,t,r){let s=Oh.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(kK,"removeAttributeFromAllObjects");async function VK(e){let t=new PK(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 qK(t)).filter(o=>o[cs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(BK.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 vK(cs.SYSTEM_SCHEMA_NAME,cs.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return FK(i)}a(VK,"dropAttributeFromSystem")});var $b=m((ioe,Vb)=>{"use strict";var Nh=ye(),Zi=ke(),noe=qt(),bh=A(),Fb=V(),{getTransactionAuditStorePath:$K}=we(),YK=zi(),Ol=Ki(),KK=x();Vb.exports=WK;async function WK(e){let t=$K(e.schema,e.table),r=await Nh.openEnvironment(t,e.table,!0),s=Nh.listDBIs(r);Nh.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Gb(r,e.search_values);case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,zK(r,e.search_values,n);case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return QK(r,e.search_values);default:return Gb(r)}}a(WK,"readAuditLog");function Gb(e,t=[0,Date.now()]){Fb.isEmpty(t[0])&&(t[0]=0),Fb.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 Ol,n))}a(Gb,"searchTransactionsByTimestamp");function QK(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,kb(e,i))}return Object.fromEntries(r)}a(QK,"searchTransactionsByUsername");function zK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=YK.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=kb(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);xb(u,"records",r,_,o),xb(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(zK,"searchTransactionsByHashValues");function xb(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 Ol(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Ol(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(xb,"loopRecords");function kb(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 Ol,i);r.push(o)}}catch(i){KK.warn(i)}return r}catch(s){throw s}}a(kb,"batchSearchTransactions")});var Kb=m((uoe,Yb)=>{"use strict";var{getSchemaPath:aoe}=we(),coe=ye(),{database:JK}=(de(),ee(Ne));Yb.exports={writeTransaction:XK};async function XK(e,t,r){return JK({database:e,table:t}).transaction(r)}a(XK,"writeTransaction")});var Jb=m((_oe,zb)=>{"use strict";var{getSchemaPath:Wb}=we(),Qb=ye();zb.exports={flush:ZK,resetReadTxn:jK};async function ZK(e,t){return(await Qb.openEnvironment(Wb(e,t),t.toString())).flushed}a(ZK,"flush");async function jK(e,t){try{(await Qb.openEnvironment(Wb(e,t),t.toString())).resetReadTxn()}catch{}}a(jK,"resetReadTxn")});var ey=m((Eoe,jb)=>{"use strict";var{Readable:e1}=require("stream"),{getDatabases:t1}=(de(),ee(Ne)),{readSync:r1,openSync:s1,createReadStream:Xb}=require("fs"),{open:n1}=require("lmdb"),Zb=ju(),i1=tl(),{INTERNAL_DBIS_NAME:o1}=ke();jb.exports=c1;var yh=32768,a1=100;async function c1(e){let t=e.database||e.schema||"data",r=t1()[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=n1({noSync:!0,maxDbs:i1.MAX_DBS}),E,f=d.openDB(o1,new Zb(!1)),h=_.useReadTransaction(),S=0;for(let{key:g,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>g.startsWith?.(k+"/"))){f.put(g,O);let[,k]=g.split("/"),$=!k,U=new Zb(!$,$);U.encoding="binary";let b=d.openDB(g,U),P=_.openDB(g,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),S++%a1===0&&await new Promise(je=>setTimeout(je,20))}await E;let T=Xb(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=s1(o.path);return o.transaction(()=>{let l=Buffer.alloc(yh);r1(c,l,0,yh);let _=o.useReadTransaction(),d=Xb(null,{fd:c,start:yh}),E=new e1.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(c1,"getBackup")});var sy=m((hoe,ry)=>{"use strict";var u1=x(),{handleHDBError:l1}=W(),_1=RO(),d1=_l(),E1=zf(),f1=fN(),h1=La(),m1=rh(),S1=GN(),p1=zN(),T1=va(),R1=sb(),g1=fb(),A1=gb(),O1=Ob(),N1=Ib(),b1=Pb(),y1=lh(),I1=qb(),w1=$b(),C1=Kb(),ty=Jb(),U1=ey(),Ih=class extends _1{static{a(this,"LMDBBridge")}async searchByConditions(t){return R1(t)}async getDataByHash(t){return await m1(t)}async searchByHash(t){return await S1(t)}async getDataByValue(t,r){return await p1(t,r)}async searchByValue(t){return await T1(t)}async createSchema(t){return await f1(t)}async dropSchema(t){return await g1(t)}async createTable(t,r){return await A1(t,r)}async dropTable(t){return await y1(t)}async createAttribute(t){return await d1(t)}async createRecords(t){return await E1(t)}async updateRecords(t){return await O1(t)}async upsertRecords(t){try{return await N1(t)}catch(r){throw l1(r,null,null,u1.ERR,r)}}async deleteRecords(t){return await h1(t)}async dropAttribute(t){return await I1(t)}async deleteAuditLogsBefore(t){return await b1(t)}async readAuditLog(t){return await w1(t)}writeTransaction(t,r,s){return C1.writeTransaction(t,r,s)}flush(t,r){return ty.flush(t,r)}resetReadTxn(t,r){return ty.resetReadTxn(t,r)}getBackup(t){return U1(t)}};ry.exports=Ih});var dy={};xe(dy,{ResourceBridge:()=>Uh});function Dh({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 iy(e,t){let r=us(e),s=Dh(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 Ke(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&&ku(u),t?yield{key:c,value:u}:yield u}})}function us(e){let t=e.database||e.schema||L1,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,D1.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function oy(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*ay(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 cy,Nl,Gr,uy,ly,kr,wh,Ch,_y,D1,L1,M1,P1,ny,Uh,Ey=Se(()=>{"use strict";cy=C(sy()),Nl=C(Ji()),Gr=C(W());de();uy=C(Na()),ly=C(Ca()),kr=C(A()),wh=C(Gs()),Ch=C(Fr()),_y=C(V());Wn();Vu();({HDB_ERROR_MSGS:D1}=Gr.hdb_errors),L1="data",M1=1e4,P1=10,Uh=class extends cy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),ny=this}async searchByConditions(t){let r=(0,Nl.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:Dh(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}]}nt({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 Ga({database:t.schema,table:null}),wh.signalSchemaChange(new Ch.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Lh(t.schema),wh.signalSchemaChange(new Ch.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,uy.default)(t);(0,ly.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ke(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=ku(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 Ke(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 oy(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,_y.async_set_timeout)(P1),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%M1===0&&await l();return u.length>0&&await l(),n?oy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Nl.default)(t,"hashes");if(r)throw r;return iy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of iy(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,Nl.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:Dh(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 ay(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return ay(r,t.search_values?.[0],t.search_values?.[1])}}};a(Dh,"getSelect");a(iy,"getRecords");a(us,"getTable");a(oy,"createDeleteResponse");a(ay,"groupRecordsInHistory")});var Vr=m((goe,fy)=>{"use strict";var{ResourceBridge:v1}=(Ey(),ee(dy)),B1=Q();B1.initSync();var bl;function H1(){return bl||(bl=new v1,bl)}a(H1,"getBridge");fy.exports=H1()});var py=m((Ooe,Sy)=>{"use strict";var hy=require("lodash"),xa=require("mathjs"),q1=require("jsonata"),my=V();Sy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hy.uniqWith(e,hy.isEqual):e,searchJSON:F1,mad:ka.bind(null,xa.mad),mean:ka.bind(null,xa.mean),mode:ka.bind(null,xa.mode),prod:ka.bind(null,xa.prod),median:ka.bind(null,xa.median)};function ka(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(ka,"aggregateFunction");function F1(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(my.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),my.isEmpty(this.__ala__.res[r])){let s=q1(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(F1,"searchJSON")});var Ry=m((boe,Ty)=>{"use strict";var Qe=require("moment"),Mh="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;Ty.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format(Mh),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format(Mh),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format(Mh)}});var Ny=m((yoe,Oy)=>{"use strict";var G1=require("@turf/area"),x1=require("@turf/length"),k1=require("@turf/circle"),V1=require("@turf/difference"),$1=require("@turf/distance"),Y1=require("@turf/boolean-contains"),K1=require("@turf/boolean-equal"),W1=require("@turf/boolean-disjoint"),Q1=require("@turf/helpers"),gy=A(),ue=V();Oy.exports={geoArea:z1,geoLength:J1,geoCircle:X1,geoDifference:Z1,geoDistance:Ay,geoNear:j1,geoContains:eW,geoEqual:tW,geoCrosses:rW,geoConvert:sW};var Ph="geo1 is required",vh="geo2 is required";function z1(e){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),G1.default(e)}a(z1,"geoArea");function J1(e,t){if(ue.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),x1.default(e,{units:t||"kilometers"})}a(J1,"geoLength");function X1(e,t,r){if(ue.isEmpty(e))throw new Error("point is required");if(ue.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),k1.default(e,t,{units:r||"kilometers"})}a(X1,"geoCircle");function Z1(e,t){if(ue.isEmpty(e))throw new Error("poly1 is required");if(ue.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),V1(e,t)}a(Z1,"geoDifference");function Ay(e,t,r){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),$1.default(e,t,{units:r||"kilometers"})}a(Ay,"geoDistance");function j1(e,t,r,s){if(ue.isEmpty(e))throw new Error("point1 is required");if(ue.isEmpty(t))throw new Error("point2 is required");if(ue.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Ay(e,t,s)<=r}a(j1,"geoNear");function eW(e,t){if(ue.isEmpty(e))throw new Error(Ph);if(ue.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),Y1.default(e,t)}a(eW,"geoContains");function tW(e,t){if(ue.isEmpty(e))throw new Error(Ph);if(ue.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),K1.default(e,t)}a(tW,"geoEqual");function rW(e,t){if(ue.isEmpty(e))throw new Error(Ph);if(ue.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=ue.autoCastJSON(e)),typeof t=="string"&&(t=ue.autoCastJSON(t)),!W1.default(e,t)}a(rW,"geoCrosses");function sW(e,t,r){if(ue.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(ue.isEmpty(t))throw new Error("geo_type is required");if(ue.isEmpty(gy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(gy.GEO_CONVERSION_ENUM).join(",")}`);return Q1[t](e,r)}a(sW,"geoConvert")});var yl=m((woe,by)=>{var ri=py(),ar=Ry(),ls=Ny();by.exports=e=>{e.aggr.mad=e.aggr.MAD=ri.mad,e.aggr.mean=e.aggr.MEAN=ri.mean,e.aggr.mode=e.aggr.MODE=ri.mode,e.aggr.prod=e.aggr.PROD=ri.prod,e.aggr.median=e.aggr.MEDIAN=ri.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ri.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ri.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ar.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ar.current_time,e.fn.extract=e.fn.EXTRACT=ar.extract,e.fn.date=e.fn.DATE=ar.date,e.fn.date_format=e.fn.DATE_FORMAT=ar.date_format,e.fn.date_add=e.fn.DATE_ADD=ar.date_add,e.fn.date_sub=e.fn.DATE_SUB=ar.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ar.date_diff,e.fn.now=e.fn.NOW=ar.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ar.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ar.get_server_time,e.fn.getdate=e.fn.GETDATE=ar.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ar.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 Cy=m((Coe,wy)=>{"use strict";var Va=require("lodash"),St=require("alasql");St.options.cache=!1;var nW=yl(),yy=require("clone"),Il=require("recursive-iterator"),se=x(),ne=V(),ji=Vr(),iW=A(),{hdb_errors:oW}=W(),{getDatabases:Iy}=(de(),ee(Ne)),aW="IS NULL",$r="There was a problem performing this search. Please check the logs and try again.";nW(St);var Bh=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($r)}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($r)}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($r)}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($r)}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($r)}}_getColumns(){let t=new Il(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(yy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=Va.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=Iy()[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 Il(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 St.yy.LogicValue({value:s}):r.right instanceof St.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new St.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 St.yy.LogicValue({value:i}):s instanceof St.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new St.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 Il(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(iW.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&&Va.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 St.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(yy(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(aW)>-1&&this.tables.forEach(n=>{let i={columnid:Iy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=Va.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($r)}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($r)}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[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(S)));else for(let[S,T]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(S)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error($r)}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($r)}}}_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 St.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 St.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new St.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 St.yy.FuncValue:new St.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,S=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 St.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 S=E[f];o.forEach(T=>{S[T.key]!==null&&S[T.key]!==void 0&&T.keys.add(S[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),S=Va.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,g=S.length;T<g;T++){let O=S[T];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 Il(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=Va.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($r)}}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 S=n.columns[h],T=f[S]===void 0?null:f[S];this.data[s].__merged_data[E].push(T)}}}}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 St.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(oW.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($r)}}return Object.values(Object.values(this.data)[0].__merged_data)}};wy.exports=Bh});var Or=m((Doe,Uy)=>{"use strict";var cW=pO();Uy.exports={searchByConditions:lW,searchByHash:_W,searchByValue:dW,search:EW};var Hh=Vr(),{transformReq:qh}=V(),uW=Cy();async function lW(e){return qh(e),Hh.searchByConditions(e)}a(lW,"searchByConditions");async function _W(e){qh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Hh.searchByHash(e))r&&t.push(r);return t}a(_W,"searchByHash");async function dW(e){qh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Hh.searchByValue(e))t.push(r);return t}a(dW,"searchByValue");function EW(e,t){try{let r=new cW(e);r.validate(),new uW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(EW,"search")});var Vs=m((Moe,Py)=>{"use strict";var $a=require("crypto"),fW=Q(),{CONFIG_PARAMS:hW}=A(),Ly="aes-256-cbc",mW=32,SW=16,Fh=64,My=32,pW=Fh+My,Dy=new Map;Py.exports={encrypt:TW,decrypt:RW,createNatsTableStreamName:gW};function TW(e){let t=$a.randomBytes(mW),r=$a.randomBytes(SW),s=$a.createCipheriv(Ly,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(TW,"encrypt");function RW(e){let t=e.substr(0,Fh),r=e.substr(Fh,My),s=e.substr(pW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=$a.createDecipheriv(Ly,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(RW,"decrypt");function gW(e,t){let r=fW.get(hW.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=Dy.get(r);return s||(s=$a.createHash("md5").update(r).digest("hex"),Dy.set(r,s)),s}a(gW,"createNatsTableStreamName")});var si=m((Boe,By)=>{"use strict";var voe=Or(),wl=x(),vy=ul(),AW=Vs(),Cl=V(),{handleHDBError:Ul,hdb_errors:OW}=W(),{HDB_ERROR_MSGS:Dl,HTTP_STATUS_CODES:Gh}=OW,NW=Q();NW.initSync();var{getDatabases:xh}=(de(),ee(Ne));By.exports={describeAll:bW,describeTable:Ll,describeSchema:yW};async function bW(e){try{let t=Cl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=xh(),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 Ll({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 Ll({schema:l,table:d},f)}E&&c.push(E)}catch(E){wl.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 wl.error("Got an error in describeAll"),wl.error(t),Ul(new Error,Dl.DESCRIBE_ALL_ERR)}}a(bW,"describeAll");async function Ll(e,t){Cl.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=vy.describe_table(e);if(i)throw i;let c=xh()[r];if(!c)throw Ul(new Error,Dl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let u=c[s];if(!u)throw Ul(new Error,Dl.TABLE_NOT_FOUND(e.schema,e.table),Gh.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=AW.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){wl.warn(`unable to stat table dbi due to ${d}`)}return _}a(Ll,"descTable");async function yW(e){Cl.transformReq(e);let t=vy.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=xh()[s];if(!i)throw Ul(new Error,Dl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Cl.isEmpty(u)||u.describe){let l=await Ll({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(yW,"describeSchema")});var pn=m((Goe,xy)=>{var IW=Jn(),{callbackify:qy,promisify:wW}=require("util"),{getDatabases:Fy}=(de(),ee(Ne));xy.exports={setSchemaDataToGlobal:Hy,getTableSchema:CW,getSystemSchema:UW,setSchemaDataToGlobalAsync:wW(Hy)};var Gy=si(),qoe=qy(Gy.describeAll),Foe=qy(Gy.describeTable);function Hy(e){global.hdb_schema=Fy(),e&&e()}a(Hy,"setSchemaDataToGlobal");function CW(e,t,r){let s=Fy()[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(CW,"getTableSchema");function UW(){return IW}a(UW,"getSystemSchema")});var Nr=m((koe,Yy)=>{"use strict";var Pl=Gf(),pt=V(),DW=require("util"),vl=Vr(),LW=pn(),ky=x(),{handleHDBError:ni,hdb_errors:MW}=W(),{HTTP_STATUS_CODES:ii}=MW,PW=DW.promisify(LW.getTableSchema),vW="updated",Vy="inserted",$y="upserted";Yy.exports={insert:HW,update:qW,upsert:FW,validation:BW,flush:GW};async function BW(e){if(pt.isEmpty(e))throw new Error("invalid update parameters defined.");if(pt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(pt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await PW(e.schema,e.table),r=Pl(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&&pt.isEmptyOrZeroLength(c[s]))throw ky.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(!pt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ky.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!pt.isEmpty(c[s])&&c[s]!==""&&n.has(pt.autoCast(c[s]))&&(c.skip=!0),n.add(pt.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(BW,"validation");async function HW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Pl(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await vl.createRecords(e);return Ml(Vy,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(HW,"insertData");async function qW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Pl(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await vl.updateRecords(e);return pt.isEmpty(s.existing_rows)?Ml(vW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ml(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(qW,"updateData");async function FW(e){if(e.operation!=="upsert")throw ni(new Error,"invalid operation, must be upsert",ii.INTERNAL_SERVER_ERROR);let t=Pl(e);if(t)throw ni(new Error,t.message,ii.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ni(new Error,r,ii.BAD_REQUEST);let s=await vl.upsertRecords(e);return Ml($y,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(FW,"upsertData");function Ml(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===Vy?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===$y?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ml,"returnObject");function GW(e){return pt.transformReq(e),vl.flush(e.schema,e.table)}a(GW,"flush")});var Vh=m(($oe,Qy)=>{var xW=ve(),kh=require("joi"),{hdb_table:kW,hdb_database:Ky}=is(),Wy={schema:Ky,database:Ky,table:kW},VW={date:kh.date().iso().required()},$W={timestamp:kh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Qy.exports=function(e,t){let r=t==="timestamp"?{...Wy,...$W}:{...Wy,...VW},s=kh.object(r);return xW.validateBySchema(e,s)}});var Xy=m((Yoe,Jy)=>{var YW=ve(),$h=require("joi"),{hdb_table:KW,hdb_database:zy}=is(),WW=$h.object({schema:zy,database:zy,table:KW,hash_values:$h.array().required(),ids:$h.array()});Jy.exports=function(e){return YW.validateBySchema(e,WW)}});var jy=m((Koe,Zy)=>{"use strict";var Yh=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}},Kh=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}},Wh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Zy.exports={InsertObject:Yh,NoSQLSeachObject:Kh,DeleteResponseObject:Wh}});var ci=m((Qoe,nI)=>{"use strict";var tI=Vh(),QW=Xy(),oi=V(),eI=require("moment"),rI=x(),{promisify:zW,callbackify:JW}=require("util"),ai=A(),XW=pn(),Qh=zW(XW.getTableSchema),zh=Vr(),{DeleteResponseObject:ZW}=jy(),{handleHDBError:Tn,hdb_errors:jW}=W(),{HDB_ERROR_MSGS:Bl,HTTP_STATUS_CODES:Rn}=jW,eQ="records successfully deleted",tQ=JW(sI);nI.exports={delete:tQ,deleteRecord:sI,deleteFilesBefore:rQ,deleteAuditLogsBefore:sQ};async function rQ(e){let t=tI(e,"date");if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(oi.transformReq(e),!eI(e.date,eI.ISO_8601).isValid())throw Tn(new Error,Bl.INVALID_DATE,Rn.BAD_REQUEST,ai.LOG_LEVELS.ERROR,Bl.INVALID_DATE,!0);let s=oi.checkSchemaTableExist(e.schema,e.table);if(s)throw Tn(new Error,s,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,s,!0);let n=await zh.deleteRecordsBefore(e);if(await Qh(e.schema,e.table),rI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(rQ,"deleteFilesBefore");async function sQ(e){let t=tI(e,"timestamp");if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);if(oi.transformReq(e),isNaN(e.timestamp))throw Tn(new Error,Bl.INVALID_VALUE("Timestamp"),Rn.BAD_REQUEST,ai.LOG_LEVELS.ERROR,Bl.INVALID_VALUE("Timestamp"),!0);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Tn(new Error,r,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,r,!0);let s=await zh.deleteAuditLogsBefore(e);return await Qh(e.schema,e.table),rI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(sQ,"deleteAuditLogsBefore");async function sI(e){e.ids&&(e.hash_values=e.ids);let t=QW(e);if(t)throw Tn(t,t.message,Rn.BAD_REQUEST,void 0,void 0,!0);oi.transformReq(e);let r=oi.checkSchemaTableExist(e.schema,e.table);if(r)throw Tn(new Error,r,Rn.NOT_FOUND,ai.LOG_LEVELS.ERROR,r,!0);try{await Qh(e.schema,e.table);let s=await zh.deleteRecords(e);return oi.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${eQ}`),s}catch(s){if(s.message===ai.SEARCH_NOT_FOUND_MESSAGE){let n=new ZW;return n.message=ai.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(sI,"deleteRecord")});var Hl=m((Joe,aI)=>{var nQ=require("crypto"),iI=9;function iQ(e){let t=aQ(iI),r=oI(e+t);return t+r}a(iQ,"createHash");function oQ(e,t){let r=e.substr(0,iI),s=r+oI(t+r);return e===s}a(oQ,"validateHash");function aQ(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(aQ,"generateSalt");function oI(e){return nQ.createHash("md5").update(e).digest("hex")}a(oI,"md5");aI.exports={hash:iQ,validate:oQ}});var uI=m((Zoe,cI)=>{var Jh=ve(),wt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function cQ(e){return wt.password.presence=!0,wt.username.presence=!0,wt.role.presence=!0,wt.active.presence=!0,Jh.validateObject(e,wt)}a(cQ,"addUserValidation");function uQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Jh.validateObject(e,wt)}a(uQ,"alterUserValidation");function lQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Jh.validateObject(e,wt)}a(lQ,"dropUserValidation");cI.exports={addUserValidation:cQ,alterUserValidation:uQ,dropUserValidation:lQ}});var Be=m((tae,_I)=>{"use strict";var{platform:eae}=require("os"),_Q="nats-server.zip",Xh="nats-server",dQ=process.platform==="win32"?`${Xh}.exe`:Xh,Zh="HDB",EQ=/^[^\s.,*>]+$/,lI="__request__",fQ=a(e=>`${e}.${lI}`,"REQUEST_SUBJECT"),hQ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},mQ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},SQ={HUB:"hub.pid",LEAF:"leaf.pid"},pQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},TQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Zh,deliver_subject:"__HDB__.WORKQUEUE"},RQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Zh,deliver_subject:"HDB.SCHEMAQUEUE"},gQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Zh,deliver_subject:"HDB.USERQUEUE"},AQ={SUCCESS:"success",ERROR:"error"},OQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},NQ={TXN:"txn",MSGID:"msgid"},eo={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},bQ={[eo.ERR]:1,[eo.WRN]:2,[eo.INF]:3,[eo.DBG]:4,[eo.TRC]:5},yQ={debug:"-D",trace:"-DVV"};_I.exports={NATS_SERVER_ZIP:_Q,NATS_SERVER_NAME:Xh,NATS_BINARY_NAME:dQ,PID_FILES:SQ,NATS_CONFIG_FILES:mQ,SERVER_SUFFIX:pQ,WORK_QUEUE_CONSUMER_NAMES:TQ,SCHEMA_QUEUE_CONSUMER_NAMES:RQ,USER_QUEUE_CONSUMER_NAMES:gQ,NATS_TERM_CONSTRAINTS_RX:EQ,REQUEST_SUFFIX:lI,UPDATE_REMOTE_RESPONSE_STATUSES:AQ,CLUSTER_STATUS_STATUSES:OQ,REQUEST_SUBJECT:fQ,SUBJECT_PREFIXES:NQ,MSG_HEADERS:hQ,LOG_LEVELS:eo,LOG_LEVEL_FLAGS:yQ,LOG_LEVEL_HIERARCHY:bQ}});var EI=m((sae,dI)=>{"use strict";var ql=A(),Fl=class{static{a(this,"BaseLicense")}constructor(t=0,r=ql.RAM_ALLOCATION_ENUM.DEFAULT,s=ql.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},jh=class extends Fl{static{a(this,"ExtendedLicense")}constructor(t=0,r=ql.RAM_ALLOCATION_ENUM.DEFAULT,s=ql.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};dI.exports={BaseLicense:Fl,ExtendedLicense:jh}});var Ya=m((iae,TI)=>{"use strict";var ro=require("fs-extra"),fI=Hl(),hI=require("crypto"),IQ=require("moment"),wQ=require("uuid").v4,Ct=x(),tm=require("path"),CQ=V(),gn=A(),UQ=EI().ExtendedLicense,to="invalid license key format",DQ="061183",LQ="mofi25",MQ="aes-256-cbc",PQ=16,vQ=32,mI=Q();mI.initSync();var em;TI.exports={validateLicense:SI,generateFingerPrint:HQ,licenseSearch:pI,getLicense:GQ};function rm(){return tm.join(mI.getHdbBasePath(),gn.LICENSE_KEY_DIR_NAME,gn.LICENSE_FILE_NAME)}a(rm,"getLicenseDirPath");function BQ(){let e=rm();return tm.join(e,gn.LICENSE_FILE_NAME)}a(BQ,"getLicenseFilePath");function sm(){let e=rm();return tm.join(e,gn.REG_KEY_FILE_NAME)}a(sm,"getFingerPrintFilePath");async function HQ(){let e=sm();try{return await ro.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await qQ();throw Ct.error(`Error writing fingerprint file to ${e}`),Ct.error(t),new Error("There was an error generating the fingerprint")}}a(HQ,"generateFingerPrint");async function qQ(){let e=wQ(),t=fI.hash(e),r=sm();try{await ro.mkdirp(rm()),await ro.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ct.error(`Error writing fingerprint file to ${r}`),Ct.error(s),new Error("There was an error generating the fingerprint")}return t}a(qQ,"writeFingerprint");function SI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:gn.RAM_ALLOCATION_ENUM.DEFAULT,version:gn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ct.error("empty license key passed to validate."),r;let s=sm(),n=!1;try{n=ro.statSync(s)}catch(i){Ct.error(i)}if(n){let i;try{i=ro.readFileSync(s,"utf8")}catch{Ct.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(LQ),c=o[1];c=Buffer.concat([Buffer.from(c)],PQ);let u=Buffer.concat([Buffer.from(i)],vQ),l=hI.createDecipheriv(MQ,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=FQ(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(to),Ct.error(to),new Error(to)}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(to),Ct.error(to),new Error(to)}else r.exp_date=_;r.exp_date<IQ().valueOf()&&(r.valid_date=!1),fI.validate(o[1],`${DQ}${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||Ct.error("Invalid licence"),r}a(SI,"validateLicense");function FQ(e,t){try{let r=hI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ct.warn("Check old license failed")}}a(FQ,"checkOldLicense");function pI(){let e=new UQ,t=[];try{t=ro.readFileSync(BQ(),"utf-8").split(gn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ct.info("no license file found"):Ct.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(CQ.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=SI(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){Ct.error("There was an error parsing the license string."),Ct.error(n),e.ram_allocation=gn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return em=e,e}a(pI,"licenseSearch");async function GQ(){return em||await pI(),em}a(GQ,"getLicense")});var br=m((lae,vI)=>{"use strict";var NI="username is required",bI="nothing to update, must supply active, role or password to update",yI="password cannot be an empty string",II="If role is specified, it cannot be empty.",wI="active must be true or false";vI.exports={addUser:zQ,alterUser:JQ,dropUser:ZQ,getSuperUser:rz,userInfo:jQ,listUsers:xl,listUsersExternal:ez,setUsersToGlobal:no,findAndValidateUser:PI,getClusterUser:sz,USERNAME_REQUIRED:NI,ALTERUSER_NOTHING_TO_UPDATE:bI,EMPTY_PASSWORD:yI,EMPTY_ROLE:II,ACTIVE_BOOLEAN:wI};var CI=Nr(),xQ=ci(),im=Hl(),UI=uI(),DI=Or(),om=Gs(),cr=V(),LI=require("validate.js"),le=x(),{promisify:kQ}=require("util"),am=Vs(),RI=A(),gI=Be(),VQ=Tr(),aae=Q(),cae=Ya(),$Q=Jn(),{table:uae}=(de(),ee(Ne)),{handleHDBError:_s,hdb_errors:YQ}=W(),{HTTP_STATUS_CODES:ds,AUTHENTICATION_ERROR_MSGS:nm,HDB_ERROR_MSGS:so}=YQ,{UserEventMsg:cm}=Fr(),AI=require("lodash"),{_assignPackageExport:KQ}=require("../index");KQ("getUser",PI);var MI={username:!0,active:!0,role:!0,password:!0},OI=new Map,Gl=DI.searchByValue,WQ=DI.searchByHash,QQ=kQ(xQ.delete);async function zQ(e){let t=LI.cleanAttributes(e,MI),r=UI.addUserValidation(t);if(r)throw _s(new Error,r.message,ds.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 Gl(s),n=n&&Array.from(n)}catch(u){throw le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw _s(new Error,so.ROLE_NAME_NOT_FOUND(t.role),ds.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw _s(new Error,so.DUP_ROLES_FOUND(t.role),ds.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=am.encrypt(t.password)),t.password=im.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await CI.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await no()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw _s(new Error,so.USER_ALREADY_EXISTS(t.username),ds.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],om.signalUserChange(new cm(process.pid)),`${c.username} successfully added`}a(zQ,"addUser");async function JQ(e){let t=LI.cleanAttributes(e,MI);if(cr.isEmptyOrZeroLength(t.username))throw new Error(NI);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(bI);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(yI);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(wI);let r=XQ(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=am.encrypt(t.password)),t.password=im.hash(t.password)),t.role==="")throw new Error(II);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 Gl(i)||[])}catch(c){throw le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=so.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),_s(new Error,c,ds.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=so.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),_s(new Error,c,ds.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 CI.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await no()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return om.signalUserChange(new cm(process.pid)),n}a(JQ,"alterUser");function XQ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(XQ,"isClusterUser");async function ZQ(e){try{let t=UI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw _s(new Error,so.USER_NOT_EXIST(e.username),ds.NOT_FOUND,void 0,void 0,!0);let s;try{s=await QQ(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await no()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return om.signalUserChange(new cm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ZQ,"dropUser");async function jQ(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 WQ(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(jQ,"userInfo");async function ez(){let e;try{e=await xl()}catch(t){throw le.error("Got an error listing users."),le.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(ez,"listUsersExternal");async function xl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Gl(e)}catch(o){throw le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=AI.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 Gl(s)}catch(o){throw le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=AI.cloneDeep(o),o.role=r[o.role],tz(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(xl,"listUsers");function tz(e){try{if(!e){le.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($Q)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(tz,"appendSystemTablesToRole");async function no(){try{let e=await xl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(no,"setUsersToGlobal");async function PI(e,t,r=!0){global.hdb_users||await no();let s=global.hdb_users.get(e);if(!s)throw _s(new Error,nm.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw _s(new Error,nm.USER_INACTIVE,ds.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(OI.get(t)===s.password)return n;if(im.validate(s.password,t))OI.set(t,s.password);else throw _s(new Error,nm.GENERIC_AUTH_FAIL,ds.UNAUTHORIZED,void 0,void 0,!0)}return n}a(PI,"findAndValidateUser");async function rz(){global.hdb_users||await no();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(rz,"getSuperUser");async function sz(){let e=await xl(),t=VQ.getConfigFromFile(RI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.isEmpty(r)&&r?.role?.role===RI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=am.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gI.SERVER_SUFFIX.ADMIN,r}a(sz,"getClusterUser")});var Wa=m((fae,FI)=>{"use strict";var ui=x(),ur=A(),nz=iO(),dae=pn(),Eae=si(),iz=br(),{validateEvent:BI}=Fr(),Ka=Vr(),oz=require("process"),{resetDatabases:az}=(de(),ee(Ne)),cz={[ur.ITC_EVENT_TYPES.SCHEMA]:uz,[ur.ITC_EVENT_TYPES.USER]:qI};async function uz(e){let t=BI(e);if(t){ui.error(t);return}ui.trace("ITC schemaHandler received schema event:",e),await nz(e.message),await lz(e.message)}a(uz,"schemaHandler");async function lz(e){try{Ka.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Ka.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Ka.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=az();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ui.error(t)}}a(lz,"syncSchemaMetadata");var HI=[];async function qI(e){try{try{Ka.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Ka.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ui.warn(r)}let t=BI(e);if(t){ui.error(t);return}ui.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${oz.pid} received user event:`,e),await iz.setUsersToGlobal();for(let r of HI)r()}catch(t){ui.error(t)}}a(qI,"userHandler");qI.addListener=function(e){HI.push(e)};FI.exports=cz});var Fr=m((Rae,xI)=>{"use strict";var mae=x(),um=V(),_z=A(),{ITC_ERRORS:Qa}=rr(),{parentPort:Sae,threadId:dz,isMainThread:Ez,workerData:pae}=require("worker_threads"),{onMessageFromWorkers:fz,broadcast:Tae,broadcastWithAcknowledgement:hz}=st();xI.exports={sendItcEvent:mz,validateEvent:GI,SchemaEventMsg:Sz,UserEventMsg:pz};var kl;fz(async(e,t)=>{kl=kl||Wa(),GI(e),kl[e.type]&&await kl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function mz(e){return!Ez&&e.message&&(e.message.originator=dz),hz(e)}a(mz,"sendItcEvent");function GI(e){if(typeof e!="object")return Qa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||um.isEmpty(e.type))return Qa.MISSING_TYPE;if(!e.hasOwnProperty("message")||um.isEmpty(e.message))return Qa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||um.isEmpty(e.message.originator))return Qa.MISSING_ORIGIN;if(_z.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Qa.INVALID_EVENT(e.type)}a(GI,"validateEvent");function Sz(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(Sz,"SchemaEventMsg");function pz(e){this.originator=e}a(pz,"UserEventMsg")});var Gs=m((Oae,YI)=>{"use strict";var kI=A(),Aae=V(),Vl=x(),VI=xA(),io,{sendItcEvent:$I}=Fr();function Tz(e){try{Vl.trace("signalSchemaChange called with message:",e),io=io||Wa();let t=new VI(kI.ITC_EVENT_TYPES.SCHEMA,e);return io.schema(t),$I(t)}catch(t){Vl.error(t)}}a(Tz,"signalSchemaChange");function Rz(e){try{Vl.trace("signalUserChange called with message:",e),io=io||Wa();let t=new VI(kI.ITC_EVENT_TYPES.USER,e);return io.user(t),$I(t)}catch(t){Vl.error(t)}}a(Rz,"signalUserChange");YI.exports={signalSchemaChange:Tz,signalUserChange:Rz}});var Xa={};xe(Xa,{addAnalyticsListener:()=>fm,recordAction:()=>_i,recordActionBinary:()=>Em,setAnalyticsEnabled:()=>gz});function gz(e){ew=e}function _i(e,t,r,s,n){if(!ew)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Kl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Kl.set(i,o)),Yl||Az()}function Em(e,t,r,s,n){_i(e?1:0,t,r,s,n)}function fm(e){rw.push(e)}function Az(){Yl=performance.now(),setTimeout(()=>{let e=performance.now()-Yl;Yl=0;let t=[],r={time:Date.now(),period:e,threadId:li.threadId,metrics:t};for(let[n,i]of Kl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p1:i[Math.floor(o*.01)],p10:i[Math.floor(o*.1)],p25:i[Math.floor(o*.25)],p75:i[Math.floor(o*.75)],p90:i[Math.floor(o*.9)],p95:i[Math.floor(o*.95)],p99:i[Math.floor(o*.99)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:li.threadId,...s});for(let n of rw)n(t);Kl=new Map,li.parentPort?li.parentPort.postMessage({type:tw,report:r}):nw({report:r})},_m).unref()}async function Oz(e,t=6e4){let r=hm(),s;for(let _ of r.primaryStore.getRange({start:$l+"z",end:$l,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:S,type:T,metric:g,count:O,threadId:k,...$}=f;O||(O=1);let U=g+(h?"-"+h:"");S&&(U+="-"+S);let b=i.get(U);if(b){b.count||(b.count=1);let P=b.count;for(let z in $){let q=$[z];typeof q=="number"&&(b[z]=(b[z]*P+q*O)/(P+O))}b.count+=O}else b=Object.assign({period:t},f),i.set(U,b)}await Nz()}for(let[_,d]of i)d.id=$l+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:$l+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-KI,active:l-WI,time:c}),KI=u,WI=l}async function bz(e,t){let r=hm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function hm(){return QI||(QI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function Iz(){sw=!0;let e=(0,Ja.get)(dm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Oz(_m,e),await bz(yz,_m)},e/2).unref()}function nw(e,t){let r=e.report;r.threadId=t?.threadId||li.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(zI+=s.mean*s.count);r.totalBytesProcessed=zI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(JI.get(t))}),JI.set(t,t.performance.eventLoopUtilization())),r.id=(0,jI.getNextMonotonicTime)(),hm().put(r),sw||Iz(),wz&&(iw=Uz(r))}async function Uz(e){if(await iw,!An){let r=(0,za.dirname)((0,ZI.getLogFilePath)());try{An=await(0,lm.open)((0,za.join)(r,"analytics.log"),"r+")}catch{An=await(0,lm.open)((0,za.join)(r,"analytics.log"),"w+")}}let t=(await An.stat()).size;if(t>Cz){let r=Buffer.alloc(t);await An.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await An.write(r,{position:0}),await An.truncate(r.length),t=r.length}await An.write(JSON.stringify(e)+`
6
- `,t)}var li,XI,ZI,za,lm,jI,Ja,dm,Kl,ew,Yl,_m,tw,rw,$l,KI,WI,Nz,yz,QI,sw,zI,JI,wz,iw,An,Cz,di=Se(()=>{li=require("worker_threads"),XI=C(st());de();ZI=C(x()),za=require("path"),lm=require("fs/promises"),jI=C(qt()),Ja=C(Q()),dm=C(A());Pr();(0,Ja.initSync)();Kl=new Map,ew=(0,Ja.get)(dm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(gz,"setAnalyticsEnabled");a(_i,"recordAction");et.recordAnalytics=_i;a(Em,"recordActionBinary");Yl=0,_m=1e3,tw="analytics-report",rw=[];a(fm,"addAnalyticsListener");a(Az,"sendAnalytics");$l="sum-";a(Oz,"aggregation");KI=0,WI=0,Nz=a(()=>new Promise(setImmediate),"rest");a(bz,"cleanup");yz=36e5;a(hm,"getAnalyticsTable");(0,XI.setChildListenerByType)(tw,nw);a(Iz,"startScheduledTasks");zI=0,JI=new Map,wz=!1;a(nw,"recordAnalytics");Cz=1e6;a(Uz,"logAnalytics")});var pm={};xe(pm,{coerceType:()=>Wl,makeTable:()=>zl,setServerUtilities:()=>vz});function zl(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=[]),qA(i,u);let S=0,T,g,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&&AR();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(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 g=p&&p.get&&(!p.get.reliesOnPrototype||p.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?He[c][w.table]:q;if(c===Yr.SYSTEM_SCHEMA_NAME&&(w.table===Yr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Yr.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,Za);switch(w.type){case"put":return L._writeUpdate(v,Za);case"delete":return L._writeDelete(Za);case"publish":return L._writePublish(v,Za);case"invalidate":return L.invalidate(Za);default:hi.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=p.subscribe&&(!p.subscribe.reliesOnPrototype||p.prototype.subscribe);w&&f==null&&(f=!0);let v=p.subscribeOnThisThread?p.subscribeOnThisThread((0,fi.getWorkerIndex)()):(0,fi.getWorkerIndex)()===0,F=w&&v&&await p.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=Ke(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&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),tc.signalSchemaChange(new rc.SchemaEventMsg(process.pid,Yr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&tc.signalUserChange(new rc.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(p,N,D){let y=super.getResource(p,N,D);if(p!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let v,F,G={transaction:w?.getReadTxn()},X;return fu(p,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[xt]=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(p)),w}return y}static setTTLExpiration(p){(0,fi.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: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,AR(),q.audit=!0}static coerceId(p){return p===""?null:Wl(p,k)}static async dropTable(){if(delete He[c][n],c===o){for(let p in r)_.remove(q.tableName+"/"+p),r[p].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));tc.signalSchemaChange(new rc.SchemaEventMsg(process.pid,Yr.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[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(p,N){if(!p)return!1;let D=p.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=mm(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(p,N,D){if(!p)return!1;let y=p.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=mm(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(p,N){return this.allowUpdate(p,{})}static allowCreate(p,N){if(!p)return!1;let D=p.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=mm(y,"insert");for(let v in N)if(!w[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 y;if(typeof p=="object"&&p){if(N)for(let w in this[ce])p[w]===void 0&&(p[w]=void 0);y=this[ht],y&&(p=Object.assign(y,p)),this[ht]=y=p}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(p){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[xt],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 p?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Qn]:F}}})}static evict(p,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(p);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(p,w,D,D):i.remove(p,D)}else return i.remove(p,D)}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=n,p.schema||=c,fw.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,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[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(p)},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)p=Ea(p);else{if(p[cw]&&(w=!Fu(p),w))return;t&&p[t]!==F&&(p[t]=F),U&&(p[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?p[$.name]=y[$.name]:p[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),p=Ea(p);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,p,this))}if(p[ce])throw new Error("Can not assign a record with a record property");this[ce]=p}if(hi.trace("Checking timestamp for put",F,this[xt]>L,this[xt],L),this[xt]>L)return E&&{type:"put",value:i.encoder.encode(p)};let J=i.encoder.encode(p);return i.put(this[ae],(0,oo.asBinary)(J),L),je(this[ae],y,p),y===null&&!G&&xn(-1),{type:E&&"put",value:J,[Qn]:X}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ce]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[xt],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,!p?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[xt]>v))return je(this[ae],L),hi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||gR(),F||xn(1)):i.remove(this[ae]),{type:E&&"delete",[Qn]:w}}}),!0}search(p){let N=this._txnForRequest();if(!p)throw new Error("No query provided");let D=p.reverse===!0,y=p.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],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(on=>on.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,Ei.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Wl(De,j)):Wl(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,dw.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===ja.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let on=r[De];Y.estimated_count=on?on.getValuesCount(Y[1]??Y.value):1/0}}else j===ja.SEARCH_TYPES.CONTAINS||j===ja.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===ja.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=Lz:Y.estimated_count=Dz}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=p.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))):oo.SKIP);else{let Y=JE(L,v,D,q,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let j=y.slice(1).map(XE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],SE=JE(on,v,D,q,p.allowFullScan);Y=Y.concat(SE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(p.offset||p.limit!==void 0)&&(G=G.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,on={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(SE=>new Promise(pE=>fu(SE,X,on,null,!1,iH=>{let TE=iH?.value;if(!TE)return pE(oo.SKIP);for(let RE=0;RE<De;RE++)if(!j[RE](TE))return pE(oo.SKIP);pE(TE)})))}return a(J,"idsToRecords"),G}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=HA(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}catch(G){console.error(G)}},p.startTime,this[vs]),D=this[ae],y=p.previousCount;y>1e3&&(y=1e3);let w=p.startTime;if(this[vs]){if(w){if(y)throw new Ei.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=dn(F,i);(D==null||_w(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||_w(D,J)){let Y=dn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){hi.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(!p.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,Ew.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[xt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){p.omitCurrent=!0;let J=dn(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}!p.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[xt],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 D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(p)},commit:(F,L)=>{if(this.validate(p),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,p,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||gR(),xn(1));let X={type:"message",value:i.encoder.encode(p),[Qn]:w};return!D.hasWrittenTime&&this[xt]>F&&(F=X.newTxnTime=this[xt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let p=this[Ae],N=p?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new ha(i,p.user,u)),D}else return new Ju(i,p.user,u)}validate(p){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=p[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&&p[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ei.ClientError(N.join(". "))}getUpdatedTime(){return this[xt]}wasLoadedFromSource(){return g?!!this[uw]:void 0}static async addAttributes(p){let N=h.slice(0);for(let D of p){if(!D.name)throw new Ei.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ei.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(p){let N=h.filter(D=>!p.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let p=0;for(let{key:N,value:D}of i.getRange({end:!1}))p++,N[0]?.description==="deletions"&&(p+=D||0);return i.getStats().entryCount-p}static updatedAttributes(){xu(this,this)}static async deleteHistory(p=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[p,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(p=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[p,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=dn(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(p){let N=[],D=i.getEntry(p);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,p],F=u.get(v);if(F){let L=dn(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[cw]=!0,d&&q.setTTLExpiration(d/1e3),b&&nH(),q;function je(Z,p,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=p?.[y];if(F===L&&!v)continue;D=!0;let G=(0,ec.getIndexedValues)(L);if(G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,ec.getIndexedValues)(F),G){ow&&w.prefetch(G.map(X=>({key:X,value:Z})),lw);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function fu(Z,p,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?(p&&G?.version>(p.lastModified||0)&&(p.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,g&&Em(Y,"cache-hit",n),Y&&!y&&(D&&(D[uw]=!0),g))return Wo(Z,X,J,p).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");p&&j?.version>(p.lastModified||0)&&(p.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(fu,"loadRecord");function vi(){P=new Set,(0,fi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let p of P)p()}a(Z,"onCommit")}a(vi,"setupCommitListeners");async function Wo(Z,p=null,N,D){if(N<0){let L;return P||vi(),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(Wo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Wo(Z,L?.value,void 0,D))},1e4).unref()})}let y=p?.__invalidated__,w=-(N||1);i.put(Z,p,w,N);let v={transaction:D?.transaction,replacingRecord:p,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;_i(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,ec.getNextMonotonicTime)());let j=je(Z,p,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],zu(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,p,N,w),L}}a(Wo,"getFromSource");function xn(Z){S||(S=i.get([aw,Sm.threadId])||0),S+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([aw,Sm.threadId],S)},50))}a(xn,"recordDeletion");function gR(){T||(T=setTimeout(()=>{if(T=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),xn(-1)}}},q.getRecordCount()*100+Pz).unref())}a(gR,"enqueueDeletionCleanup");function AR(){z=u?.addDeleteRemovalCallback(s,Z=>{let p=i.getEntry(Z);p?.value===null&&i.remove(Z,p.version),xn(-1)})}a(AR,"addDeleteRemoval");function nH(){(0,fi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,p=r[Z];if(!p)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of p.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){hi.error("Error in evicting old records",Z)}},Mz).unref()}a(nH,"runRecordExpirationEviction")}function mm(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 lw(){}function vz(e){fw=e}function Wl(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Bz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Ql.autoCast)(e)}function _w(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 Yr,oo,ec,dw,Sm,ja,sc,Ei,tc,rc,hi,Ew,fi,Ql,fw,Dz,Lz,Mz,ow,aw,xt,cw,Yae,uw,Za,Pz,Bz,Jl=Se(()=>{Yr=C(A()),oo=require("lmdb"),ec=C(qt()),dw=require("lodash"),Sm=require("worker_threads");jr();LA();ja=C(ke()),sc=C(Q());FA();Ei=C(W()),tc=C(Gs()),rc=C(Fr());de();Yu();hi=C(x());Vu();Wn();Ew=require("ordered-binary"),fi=C(st());fa();Ql=C(V());di();Dz=1e8,Lz=1e7,Mz=6e4;sc.initSync();ow=sc.get(Yr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),aw=Symbol.for("deletions"),xt=Symbol.for("version"),cw=Symbol.for("incremental-update"),Yae=Symbol("source-resource"),uw=Symbol("load-from-source"),Za={isNotification:!0,allowInvalidated:!0},Pz=(0,Ql.convertToMS)(sc.get(Yr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(zl,"makeTable");a(mm,"attributesAsObject");a(lw,"noop");a(vz,"setServerUtilities");Bz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Wl,"coerceType");a(_w,"isDescendantId")});var Ne={};xe(Ne,{database:()=>Ga,databases:()=>He,dropDatabase:()=>Lh,dropTableMeta:()=>kz,getDatabases:()=>xr,getTables:()=>Hz,onUpdatedTable:()=>Om,readMetaDb:()=>nc,resetDatabases:()=>qz,table:()=>nt,tables:()=>_r});function Hz(){return e_||xr(),_r||{}}function xr(){if(e_)return He;e_=!0,lo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),t=(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,lr.existsSync)(e)?e:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,lr.existsSync)(e))for(let r of(0,lr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&nc((0,Me.join)(e,r.name),null,s)}if((0,lr.existsSync)((0,uo.getBaseSchemaPath)())){for(let r of(0,lr.readdirSync)((0,uo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,uo.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,uo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,lr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);nc((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,lr.existsSync)(n))for(let o of(0,lr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&nc((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,lr.existsSync)(u)&&nc(u,o,r,null,!0)}}for(let r in He){let s=lo.get(r);if(s){let n=He[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 He[r],r==="data"){for(let n in _r)delete _r[n];delete _r[t_]}}return lo=null,He}}function qz(){e_=!1;for(let[,e]of On)e.needsDeletion=!0;xr();for(let[e,t]of On)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),On.delete(e));return He}function nc(e,t,r=gm,s,n){let i=new Tm.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=On.get(e);o?o.needsDeletion=!1:(o=(0,Xl.open)(i),On.set(e,o));let c=new mi.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(ao.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,lr.existsSync)(s)&&(i.path=s,l=(0,Xl.open)(i),l.isLegacy=!0):l=of(o));let _=pw(r),d=_[t_],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[S,T]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),T===""?T=h.name:T||(T=S,S=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(S);let g=E.get(S);g||E.set(S,g={attributes:[]}),(T==null||h.is_hash_attribute)&&(g.primary=h),T!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:S,primary:T}=h;if(!T){for(let q of S)if(q.is_hash_attribute||q.isPrimaryKey){T=q;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(S)}`)}let g=_[f],O={},k=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,Tt.get)(kt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(g)O=g.indices,k=g.attributes,g.schemaVersion++;else{$=T.tableId,$?$>=(u.get(co)||0)&&u.putSync(co,$+1):(T.tableId=$=u.get(co),$||($=1),u.putSync(co,$+1),u.putSync(T.key,T));let q=new mi.default(!T.is_hash_attribute,T.is_hash_attribute);Le.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,q),U.rootStore=o,U.tableId=$}for(let q of S){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let je=new mi.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.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(!g){Le.trace(`creating table class ${f}`,Object.keys(_)),g=Tw(_,f,zl({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:S,schemaDefined:T.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let q of Am)q(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function pw(e){let t=He[e];if(t||(e==="data"?t=He[e]=_r:e==="system"?Object.defineProperty(He,"system",{value:t=Object.create(null),configurable:!0}):t=He[e]=Object.create(null)),lo&&!lo.has(e)){let r=new Set;t[t_]=r,lo.set(e,r)}return t}function Tw(e,t,r){return e[t]=r,r}function Ga({database:e,table:t}){e||(e=gm),xr();let r=pw(e),s=(0,Me.join)((0,Tt.getHdbBasePath)(),kt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(kt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(kt.CONFIG_PARAMS.STORAGE_PATH)||((0,lr.existsSync)(s)?s:(0,Me.join)((0,Tt.getHdbBasePath)(),kt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=On.get(i);if(!o){let c=new Tm.default(i,!1);o=(0,Xl.open)(c),On.set(i,o)}return o}async function Lh(e){if(!He[e])throw new Error("Schema does not exist");let t=He[e];for(let r in t){let n=t[r].primaryStore.rootStore;On.delete(n.path),n.status==="open"&&(await n.close(),await hw.remove(n.path))}if(e==="data"){for(let r in _r)delete _r[r];delete _r[t_]}delete He[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gm);let u=Ga({database:t,table:e}),l=He[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 S=new mi.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 T,g;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=of(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,Tt.get)(kt.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 mi.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${ao.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(ao.INTERNAL_DBIS_NAME,S),z.tableId=h.get(co),z.tableId||(z.tableId=1),h.putSync(co,z.tableId+1),E.tableId=z.tableId,_=Tw(l,e,zl({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,T=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${ao.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(ao.INTERNAL_DBIS_NAME,S)),_.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){$(),T=!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});T=!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 mi.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ic.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<ic.workerData?.restartNumber)&&(T=!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&&(T=!0,$(),h.put(b,U))}}finally{g&&g()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=xz(_,k,O):T&&Zl.signalSchemaChange(new jl.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of Am)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){g||u.transactionSync(()=>({then(U){g=U}}))}a($,"startTxn")}async function xz(e,t,r){try{let s=e.schemaVersion;await Zl.signalSchemaChange(new jl.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,S=(0,mw.getIndexedValues)(_[h]);if(S)for(let T=0,g=S.length;T<g;T++)f.dbi.put(S[T],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),ic.workerData&&ic.workerData.restartNumber!==Sw.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>Fz?await n:u>Gz&&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 Zl.signalSchemaChange(new jl.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function kz({table:e,database:t}){let r=Ga({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 Om(e){Am.push(e)}var Tt,ao,Xl,Me,lr,uo,mi,Tm,kt,hw,Rm,mw,Zl,jl,ic,Le,Sw,gm,t_,_r,He,co,Am,e_,On,lo,Fz,Gz,de=Se(()=>{Tt=C(Q()),ao=C(ke()),Xl=require("lmdb"),Me=require("path"),lr=require("fs"),uo=C(we());Jl();mi=C(ju()),Tm=C(tl()),kt=C(A()),hw=C(require("fs-extra")),Rm=require("../index"),mw=C(qt()),Zl=C(Gs()),jl=C(Fr()),ic=require("worker_threads"),Le=C(x()),Sw=C(st());fa();gm="data",t_=Symbol("defined-tables");(0,Tt.initSync)();_r=Object.create(null),He=Object.create(null);(0,Rm._assignPackageExport)("databases",He);(0,Rm._assignPackageExport)("tables",_r);co=Symbol.for("next-table-id"),Am=[],On=new Map;a(Hz,"getTables");a(xr,"getDatabases");a(qz,"resetDatabases");a(nc,"readMetaDb");a(pw,"ensureDB");a(Tw,"setTable");a(Ga,"database");a(Lh,"dropDatabase");a(nt,"table");Fz=1e3,Gz=10;a(xz,"runIndexing");a(kz,"dropTableMeta");a(Om,"onUpdatedTable")});var ym={};xe(ym,{loadGQLSchema:()=>$z,start:()=>bm,startOnMainThread:()=>Vz});function bm({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 S of d.definitions)switch(S.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 T=S.name.value,g=[],O={table:null,database:null,properties:g};E.set(T,O);for(let U of S.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=T),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 S.fields){let b=$(U.type);b.name=U.name.value,g.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=T,T==="Query"&&(h=O)}for(let[S,T]of E)for(let g of T.properties){let O=E.get(g.type);O&&(g.properties=O.properties)}for(let S of f)S.tableClass=e(S),S.export&&i.set((0,Nm.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass);if(h)for(let S of h.properties){let T=E.get(S.type);if(!T)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Nm.dirname)(s)+"/"+S.name,T.tableClass)}}}var Nm,Vz,$z,Rw=Se(()=>{Nm=require("path");de();a(bm,"start");Vz=bm,$z=bm({ensureTable:nt}).handleFile});async function r_(e){return Yz?(oc||(oc=Kz(Qz)),(await(await oc).import(e)).namespace):import(e)}async function Kz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),oc=new Compartment({console,Math,Date,fetch:Wz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Aw.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:_r,databases:He})}};let s=await(0,gw.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),oc}function Wz(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 Qz(){return{Resource:mt,tables:_r}}var gw,Aw,Yz,oc,Im=Se(()=>{jr();de();gw=require("fs/promises"),Aw=require("path"),Yz=!1;a(r_,"secureImport");a(Kz,"getCompartment");a(Wz,"secureOnlyFetch");a(Qz,"getGlobalVars")});var Cm={};xe(Cm,{handleFile:()=>zz});async function zz(e,t,r,s){let n=new Map,i=(0,Ow.pathToFileURL)(r).toString(),o=await r_(i);u(o.default)&&s.set((0,wm.dirname)(t),o.default),c(o,(0,wm.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 Ow,wm,Nw=Se(()=>{Ow=require("url");Im();wm=require("path");a(zz,"handleFile")});var Dm={};xe(Dm,{start:()=>Jz});function Jz({resources:e}){e.set("login",Um),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Um,bw=Se(()=>{jr();a(Jz,"start");Um=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 Mm=m((uce,ww)=>{"use strict";var{Readable:Xz}=require("stream"),Zz=1e4;ww.exports={streamAsJSON(e){return new Lm({value:e})}};var Lm=class extends Xz{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),yw)}catch(n){yield yw(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);Iw(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>Zz?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 Iw(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 yw(e){return console.error(e),JSON.stringify(e.toString())}a(yw,"handleError");function Iw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Iw,"when")});var s_=m((_ce,Cw)=>{"use strict";var jz=Vr();Cw.exports={writeTransaction:eJ};function eJ(e,t,r){return jz.writeTransaction(e,t,r)}a(eJ,"writeTransaction")});var Mw=m((fce,Lw)=>{"use strict";var tJ=Or(),rJ=pn(),Uw=x(),sJ=Nr(),Ece=s_(),nJ=require("clone"),vm=require("alasql"),iJ=yl(),Dw=require("util"),oJ=Dw.promisify(rJ.getTableSchema),aJ=Dw.promisify(tJ.search),cJ=A(),Pm=V();iJ(vm);Lw.exports={update:lJ};var uJ="There was a problem performing this update. Please check the logs and try again.";async function lJ({statement:e,hdb_user:t}){let r=await oJ(e.table.databaseid,e.table.tableid),s=_J(e.columns);Pm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=nJ(n),c=Pm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=vm.parse(u).statements[0],_=await aJ(l),d=dJ(s,_);return EJ(o,d,t)}a(lJ,"update");function _J(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vm.compile(`SELECT ${r.expression.toString()} AS [${cJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Uw.error(t),new Error(uJ)}}a(_J,"createUpdateRecord");function dJ(e,t){return Pm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(dJ,"buildUpdateRecords");async function EJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await sJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Uw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(EJ,"updateRecords")});var vw=m((pce,Pw)=>{var fJ=require("alasql"),hJ=Or(),mJ=x(),SJ=Vr(),Hm=require("util"),Bm=V(),pJ=A(),TJ=pn(),mce=s_(),Sce=Nr(),RJ="record",gJ="successfully deleted",AJ=Hm.callbackify(yJ),OJ=Hm.promisify(hJ.search),NJ=Hm.promisify(TJ.getTableSchema);Pw.exports={convertDelete:AJ};function bJ(e){return`${e.deleted_hashes.length} ${RJ}${e.deleted_hashes.length===1?"":"s"} ${gJ}`}a(bJ,"generateReturnMessage");async function yJ({statement:e,hdb_user:t}){let r=await NJ(e.table.databaseid,e.table.tableid);Bm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=fJ.parse(o).statements[0],u={operation:pJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await OJ(c);let l=await SJ.deleteRecords(u);return Bm.isEmptyOrZeroLength(l.message)&&(l.message=bJ(l)),delete l.txn_time,l}catch(l){throw mJ.error(l),l.hdb_code?l.message:l}}a(yJ,"convertDelete")});var Gw=m((Rce,Fw)=>{"use strict";var IJ=si(),{hdb_errors:Bw}=W(),{getDatabases:Hw}=(de(),ee(Ne));Fw.exports={checkSchemaExists:qw,checkSchemaTableExists:wJ,schema_describe:IJ};async function qw(e){if(!Hw()[e])return Bw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(qw,"checkSchemaExists");async function wJ(e,t){let r=await qw(e);if(r)return r;if(!Hw()[e][t])return Bw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wJ,"checkSchemaTableExists")});var ac=m((Ace,CJ)=>{CJ.exports={name:"harperdb",version:"4.2.0-alpha.14",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var it=m((Ice,iC)=>{"use strict";var Rt=Q();Rt.initSync();var UJ=require("fs-extra"),DJ=require("semver"),_c=require("path"),{monotonicFactory:LJ}=require("ulidx"),xm=LJ(),MJ=require("util"),kw=require("child_process"),PJ=MJ.promisify(kw.exec),vJ=kw.spawn,_e=Be(),Te=A(),n_=V(),yr=x(),i_=Vs(),BJ=s_(),cc=Tr(),{Encoder:HJ,decode:km}=require("msgpackr"),Vw=new HJ,{isEmpty:Si}=n_,$w=br(),Yw=12e10,qJ=48*36e11,FJ=5e9,{connect:GJ,StorageType:Kw,RetentionPolicy:Ww,AckPolicy:o_,DeliverPolicy:a_,DiscardPolicy:xJ,NatsConnection:Oce,JetStreamManager:Nce,JetStreamClient:bce,StringCodec:yce,JSONCodec:kJ,createInbox:Vm,headers:VJ,ErrorCode:xw}=require("nats"),{PACKAGE_ROOT:$J}=A(),YJ=ac(),{recordAction:KJ}=(di(),ee(Xa)),Qw=kJ(),WJ="clustering",QJ=YJ.engines[_e.NATS_SERVER_NAME],zJ=_c.join($J,"dependencies"),Gm=_c.join(zJ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qm,Fm,uc,_o,Eo;iC.exports={runCommand:zw,checkNATSServerInstalled:JJ,createConnection:$m,getConnection:c_,getJetStreamManager:dc,getJetStream:Jw,getNATSReferences:Vt,getServerList:ZJ,createLocalStream:Ym,listStreams:Xw,deleteLocalStream:jJ,getServerConfig:Ec,listRemoteStreams:e2,viewStream:t2,viewStreamIterator:r2,publishToStream:s2,createWorkQueueStream:n2,addSourceToWorkStream:jw,request:o2,removeSourceFromWorkStream:tC,reloadNATS:Km,reloadNATSHub:a2,reloadNATSLeaf:c2,extractServerName:eC,requestErrorHandler:u2,updateWorkStream:l2,createLocalTableStream:sC,createTableStreams:_2,purgeTableStream:nC,purgeSchemaTableStreams:d2,getStreamInfo:E2,updateLocalStreams:h2,closeConnection:XJ,getJsmServerName:fc,addNatsMsgHeader:Zw,updateIngestStreamConsumer:i2};async function zw(e,t=void 0){let{stdout:r,stderr:s}=await PJ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ var cH=Object.create;var zo=Object.defineProperty;var uH=Object.getOwnPropertyDescriptor;var lH=Object.getOwnPropertyNames;var _H=Object.getPrototypeOf,dH=Object.prototype.hasOwnProperty;var a=(e,t)=>zo(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),ke=(e,t)=>{for(var r in t)zo(e,r,{get:t[r],enumerable:!0})},OR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of lH(t))!dH.call(e,n)&&n!==r&&zo(e,n,{get:()=>t[n],enumerable:!(s=uH(t,n))||s.enumerable});return e};var U=(e,t,r)=>(r=e!=null?cH(_H(e)):{},OR(t||!e||!e.__esModule?zo(r,"default",{value:e,enumerable:!0}):r,e)),ee=e=>OR(zo({},"__esModule",{value:!0}),e);var A=m((_re,HR)=>{"use strict";var pr=require("path"),EH=require("fs"),{relative:ure,join:lre}=pr,{existsSync:fH}=EH;function hH(){let e=__dirname;for(;!fH(pr.join(e,"package.json"));){let t=pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(hH,"getHDBPackageRoot");var _n=hH(),NR="js",mu=NR,mH="harperdb-config.yaml",SH="defaultConfig.yaml",pH="hdb",bR=`harperdb.${mu}`,yR=`customFunctionsServer.${mu}`,TH=`restartHdb.${mu}`,AE="HarperDB",hu="Custom Functions",Su="Clustering Hub",pu="Clustering Leaf",RH="Clustering Ingest Service",gH="Clustering Reply Service",AH="foreground.pid",OH="hdb.pid",NH="data",bH={HDB:AE,CLUSTERING_HUB:Su,CLUSTERING_LEAF:pu,CLUSTERING_INGEST_SERVICE:RH,CLUSTERING_REPLY_SERVICE:gH,CUSTOM_FUNCTIONS:hu,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"},yH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},IH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},wH={harperdb:AE,"clustering hub":Su,"clustering leaf":pu,"custom functions":hu,custom_functions:hu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},CH={CLUSTERING_HUB_PROC_DESCRIPTOR:Su,CLUSTERING_LEAF_PROC_DESCRIPTOR:pu},gE={HDB:pr.join(_n,"server/harperdb"),CUSTOM_FUNCTIONS:pr.join(_n,"server/customFunctions"),CLUSTERING_HUB:pr.join(_n,"server/nats"),CLUSTERING_LEAF:pr.join(_n,"server/nats")},UH={HDB:pr.join(gE.HDB,bR),CUSTOM_FUNCTIONS:pr.join(gE.CUSTOM_FUNCTIONS,yR)},DH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:pr.join(_n,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:pr.join(_n,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:pr.join(_n,"launchServiceScripts/launchUpdateNodes4-0-0.js")},LH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},IR="support@harperdb.io",MH="customer-success@harperdb.io",wR=1,PH=4141,CR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",vH="https://www.harperdb.io/product",BH=`For support, please submit a request at ${CR} or contact ${IR}`,UR=`For license support, please contact ${MH}`,HH="None of the specified records were found.",qH="hash attribute not found",FH=`Your current license only supports ${wR} role. ${UR}`,GH="Your current license only supports 3 connections to a node.",xH="127.0.0.1",kH=1,VH=/^\.$/,$H=/^\.\.$/,YH="U+002E",KH=/\//g,WH="U+002F",QH=/U\+002F/g,zH=/^U\+002E$/,JH=/^U\+002EU\+002E$/,XH="d",ZH=999999,jH="*",e0="--max-old-space-size=",t0="system",r0="__hdb_hash",s0=".harperdb",n0=".hdb",i0="keys",o0="hdb_boot_properties.file",a0=".updateConfig.json",c0="SIGTSTP",u0=24,l0=6e4,_0=448,d0="blob",E0="trash",f0="database",h0="schema",m0="transactions",S0=".count",p0="id",T0="PROCESS_NAME",DR={SETTINGS_PATH_KEY:"settings_path"},LR=require("lodash"),R0={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"},g0={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},A0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},O0={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"},N0={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"},sr="hdb_internal:",b0={CREATE_SCHEMA:sr+"create_schema",CREATE_TABLE:sr+"create_table",CREATE_ATTRIBUTE:sr+"create_attribute",ADD_USER:sr+"add_user",ALTER_USER:sr+"alter_user",DROP_USER:sr+"drop_user",HDB_NODES:sr+"hdb_nodes",HDB_USERS:sr+"hdb_users",HDB_WORKERS:sr+"hdb_workers",CATCHUP:sr+"catchup",SCHEMA_CATCHUP:sr+"schema_catchup",WORKER_ROOM:sr+"cluster_workers"},y0={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"},I0="060493.ks",w0=".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"},D0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},L0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Jo={};Jo[K.INSERT]=K.INSERT;Jo[K.UPDATE]=K.UPDATE;Jo[K.UPSERT]=K.UPSERT;Jo[K.DELETE]=K.DELETE;var Ae=Object.create(null);Ae[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;Ae[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;Ae[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;Ae[K.READ_LOG]=K.READ_LOG;Ae[K.ADD_NODE]=K.ADD_NODE;Ae[K.LIST_USERS]=K.LIST_USERS;Ae[K.LIST_ROLES]=K.LIST_ROLES;Ae[K.USER_INFO]=K.USER_INFO;Ae[K.SQL]=K.SQL;Ae[K.GET_JOB]=K.GET_JOB;Ae[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;Ae[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;Ae[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;Ae[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;Ae[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;Ae[K.REMOVE_NODE]=K.REMOVE_NODE;Ae[K.RESTART]=K.RESTART;Ae[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;Ae[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;Ae[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;Ae[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;Ae[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;Ae[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;Ae[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;Ae[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var M0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},P0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},MR={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"},v0=LR.invert(MR),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"},PR={settings_path:DR.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];PR[t.toLowerCase()]=t}var B0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},H0={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"},q0={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"},G0={VERSION_DEFAULT:"2.2.0"},x0={DEVELOPMENT:8192,DEFAULT:512},k0={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"},V0={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"},$0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},vR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},Y0=Symbol("metadata"),K0="__clustering__",W0=Object.values(vR),Q0=15984864e5,BR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},z0=LR.invert(BR),J0={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"},X0=111,Z0=`\r
2
+ `,j0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},eq=["*","%"],tq="unauthorized_access",rq="func_val",sq={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},nq={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},iq={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"},oq={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},aq={HTTP:"http"},cq={STOPPED:"stopped",ONLINE:"online"},uq="3.x.x",lq={SUCCESS:"success",FAILURE:"failure"},_q={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};HR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:IR,HDB_SUPPORT_URL:CR,HDB_PRICING_URL:vH,SUPPORT_HELP_MSG:BH,LICENSE_HELP_MSG:UR,HDB_PROC_NAME:bR,HDB_PROC_DESCRIPTOR:AE,CLUSTERING_LEAF_PROC_DESCRIPTOR:pu,CLUSTERING_HUB_PROC_DESCRIPTOR:Su,SYSTEM_SCHEMA_NAME:t0,HASH_FOLDER_NAME:r0,HDB_HOME_DIR_NAME:s0,UPDATE_FILE_NAME:a0,LICENSE_KEY_DIR_NAME:i0,BOOT_PROPS_FILE_NAME:o0,JOB_TYPE_ENUM:H0,JOB_STATUS_ENUM:C0,SYSTEM_TABLE_NAMES:O0,SYSTEM_TABLE_HASH_ATTRIBUTES:N0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:U0,S3_BUCKET_AUTH_KEYS:D0,VALID_SQL_OPS_ENUM:L0,GEO_CONVERSION_ENUM:P0,HDB_SETTINGS_NAMES:MR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:v0,SERVICE_ACTIONS_ENUM:M0,CLUSTER_MESSAGE_TYPE_ENUM:q0,CLUSTER_CONNECTION_DIRECTION_ENUM:F0,CLUSTER_EVENTS_DEFS_ENUM:k0,PERIOD_REGEX:VH,DOUBLE_PERIOD_REGEX:$H,UNICODE_PERIOD:YH,FORWARD_SLASH_REGEX:KH,UNICODE_FORWARD_SLASH:WH,ESCAPED_FORWARD_SLASH_REGEX:QH,ESCAPED_PERIOD_REGEX:zH,ESCAPED_DOUBLE_PERIOD_REGEX:JH,REG_KEY_FILE_NAME:I0,RESTART_TIMEOUT_MS:l0,HDB_FILE_PERMISSIONS:_0,DATABASES_DIR_NAME:f0,LEGACY_DATABASES_DIR_NAME:h0,TRANSACTIONS_DIR_NAME:m0,LIMIT_COUNT_NAME:S0,ID_ATTRIBUTE_STRING:p0,INSERT_MODULE_ENUM:g0,UPGRADE_JSON_FIELD_NAMES_ENUM:A0,RESTART_CODE:c0,RESTART_CODE_NUM:u0,CLUSTER_OPERATIONS:Jo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:y0,HDB_INTERNAL_SC_CHANNEL_PREFIX:sr,INTERNAL_SC_CHANNELS:b0,CLUSTERING_MESSAGE_TYPES:J0,HDB_FILE_SUFFIX:n0,BLOB_FOLDER_NAME:d0,HDB_TRASH_DIR:E0,ORIGINATOR_SET_VALUE:X0,LICENSE_VALUES:G0,RAM_ALLOCATION_ENUM:x0,TIME_STAMP_NAMES_ENUM:vR,TIME_STAMP_NAMES:W0,PERMS_UPDATE_RELEASE_TIMESTAMP:Q0,SEARCH_NOT_FOUND_MESSAGE:HH,SEARCH_ATTRIBUTE_NOT_FOUND:qH,LICENSE_ROLE_DENIED_RESPONSE:FH,LICENSE_MAX_CONNS_REACHED:GH,BASIC_LICENSE_MAX_NON_CU_ROLES:wR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:PH,VALUE_SEARCH_COMPARATORS:BR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:z0,LICENSE_FILE_NAME:w0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:V0,NEW_LINE:Z0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:kH,MOMENT_DAYS_TAG:XH,API_TURNOVER_SEC:ZH,LOOPBACK:xH,CODE_EXTENSION:mu,WILDCARD_SEARCH_VALUE:jH,NODE_ERROR_CODES:$0,JAVASCRIPT_EXTENSION:NR,PERMS_CRUD_ENUM:j0,UNAUTHORIZED_PERMISSION_NAME:tq,SEARCH_WILDCARDS:eq,FUNC_VAL:rq,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:sq,JWT_ENUM:nq,CLUSTERING_FLAG:K0,ITC_EVENT_TYPES:iq,CUSTOM_FUNCTION_PROC_NAME:yR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:hu,SERVICES:oq,THREAD_TYPES:aq,MEM_SETTING_KEY:e0,HDB_RESTART_SCRIPT:TH,PROCESS_DESCRIPTORS:bH,SERVICE_SERVERS:UH,SERVICE_SERVERS_CWD:gE,PROCESS_DESCRIPTORS_VALIDATE:wH,LAUNCH_SERVICE_SCRIPTS:DH,LOG_LEVELS:IH,PROCESS_NAME_ENV_PROP:T0,LOG_NAMES:yH,PM2_PROCESS_STATUSES:cq,CONFIG_PARAM_MAP:PR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:mH,HDB_DEFAULT_CONFIG_FILE:SH,ROLE_TYPES_ENUM:LH,BOOT_PROP_PARAMS:DR,INSTALL_PROMPTS:R0,HDB_ROOT_DIR_NAME:pH,CLUSTERING_PROCESSES:CH,FOREGROUND_PID_FILE:AH,PACKAGE_ROOT:_n,PRE_4_0_0_VERSION:uq,SCHEMAS_PARAM_CONFIG:B0,METADATA_PROPERTY:Y0,AUTH_AUDIT_STATUS:lq,AUTH_AUDIT_TYPES:_q,HDB_PID_FILE:OH,DEFAULT_DATABASE_NAME:NH};OE()});var OE=m((Ere,FR)=>{var dq=require("fast-glob"),{statSync:NE,existsSync:bE,readFileSync:Eq,writeFileSync:fq}=require("fs"),{spawnSync:hq,spawn:mq}=require("child_process"),{isMainThread:Sq}=require("worker_threads"),{join:Cs,relative:qR}=require("path"),{PACKAGE_ROOT:Tr}=A(),{tmpdir:pq}=require("os");require("source-map-support").install();var Tq=["resources","server","dataLayer"],Xo="ts-build",yE,Rq=__filename.endsWith("tsBuild.js");if(Rq){if(Sq){let r;try{NE(Cs(Tr,Xo)),r=!0}catch{}if(r)for(let s of dq.sync(Tq.map(n=>n+"/**/*.ts"),{cwd:Tr})){let n=0,i=0;try{n=NE(Cs(Tr,s)).mtimeMs-5e3,i=NE(Cs(Tr,Xo,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."),yE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),yE=!0;if(yE){let s=hq(process.argv[0],[Cs(Tr,"node_modules/.bin/tsc")],{cwd:Tr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Cs(pq(),"harperdb-tsc.pid"),i;if(bE(n))try{process.kill(+Eq(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=mq(process.argv[0],[Cs(Tr,"node_modules/.bin/tsc"),"--watch"],{cwd:Tr,detached:!0,stdio:"ignore"});fq(n,o.pid.toString()),o.unref()}}}}let e=FR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Tr)&&!s[0].includes("node_modules")){let i=qR(Tr,s[0]),o;i.startsWith(Xo)?o=Cs(Tr,qR(Xo,i)):o=Cs(Tr,Xo,i);let c=Cs(o,r),u=c+".js";if(bE(u))return u;if(c.includes(".")&&bE(c))return c}return t(r,s,n)}}});var Zo={};ke(Zo,{server:()=>et});var GR,et,Br=pe(()=>{GR=require("../index"),et={};(0,GR._assignPackageExport)("server",et)});var IE=m((fre,VR)=>{"use strict";var xR=require("minimist");VR.exports=gq;function gq(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=kR(process.env),s=kR(xR(process.argv))):(r=process.env,s=xR(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(gq,"assignCMDENVVariables");function kR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(kR,"objKeysToLowerCase")});var x=m((mre,PE)=>{"use strict";var Kn=require("fs-extra"),{workerData:Aq,threadId:Oq}=require("worker_threads"),Ls=require("path"),KR=require("yaml"),WR=require("properties-reader"),tt=A(),$R=IE(),Nq=require("os"),{PACKAGE_ROOT:CE}=A(),{_assignPackageExport:bq}=require("../index"),ea={};for(let e in console)ea[e]||(ea[e]=console[e]);var Pt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},QR={STDOUT:"stdOut",STDERR:"stdErr"},yq=Ls.join(CE,"logs"),Iq=Ls.join(CE,"config/yaml/",tt.HDB_DEFAULT_CONFIG_FILE),wq=1e4,Us,Ds,Mt,Tu,Ru,ta,Fi,jo;jo===void 0&&zR();PE.exports={notify:ZR,fatal:jR,error:ra,warn:ME,info:gu,debug:LE,trace:DE,setLogLevel:vq,log_level:Mt,loggerWithTag:Cq,suppressLogging:Uq,initLogSettings:zR,setupConsoleLogging:JR,logCustomLevel:Mq,closeLogFile:UE,getLogFilePath:()=>ta,OUTPUTS:QR,AuthAuditLog:qq};bq("logger",PE.exports);function zR(e=!1){try{if(jo===void 0||e){UE();let t=Pq(),r=$R(["ROOTPATH"]);try{jo=WR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Kn.pathExistsSync(Ls.join(r.ROOTPATH,tt.HDB_CONFIG_FILE)))throw s}({level:Mt,config_log_path:Ru,to_file:Us,to_stream:Ds}=Bq(r.ROOTPATH?Ls.join(r.ROOTPATH,tt.HDB_CONFIG_FILE):jo.get("settings_path"))),Tu=tt.LOG_NAMES.HDB,ta=Ls.join(Ru,Tu)}}catch(t){if(jo=void 0,t.code===tt.NODE_ERROR_CODES.ENOENT){let r=$R(Object.keys(tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===tt.CONFIG_PARAMS.LOGGING_LEVEL){Mt=u;continue}if(c===tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Ds=u;continue}c===tt.CONFIG_PARAMS.LOGGING_FILE&&(Us=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=Hq();Us=Us===void 0?n:Us,Us=YR(Us),Ds=Ds===void 0?i:Ds,Ds=YR(Ds),Mt=Mt===void 0?s:Mt,Ru=yq,Tu=tt.LOG_NAMES.INSTALL,ta=Ls.join(Ru,Tu);return}throw ra("Error initializing log settings"),ra(t),t}JR()}a(zR,"initLogSettings");var wE=!0;function JR(){qi("error",ra),qi("warn",ME),qi("log",gu),qi("info",gu),qi("debug",LE),qi("trace",DE)}a(JR,"setupConsoleLogging");function qi(e,t){console[e]=function(...r){if(wE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return ea[e](...r)}}a(qi,"logConsole");function Cq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(ZR),fatal:r(jR),error:r(ra),warn:r(ME),info:r(gu),debug:r(LE),trace:r(DE)};function r(s){return function(...n){return s(t,...n)}}}a(Cq,"loggerWithTag");function Uq(e){try{wE=!1,e()}finally{wE=!0}}a(Uq,"suppressLogging");var Dq=Aq?.name?.replace(/ /g,"-")||"main";function Ms(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||Dq+"/"+Oq);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(Ms,"createLogRecord");function sa(e){Us&&XR(e),Ds&&process.stdout.write(e)}a(sa,"logStdOut");function Au(e){Us&&XR(e),Ds&&process.stderr.write(e)}a(Au,"logStdErr");function XR(e){Lq(),Fi?Kn.appendFileSync(Fi,e):ea.log(e)}a(XR,"logToFile");function UE(){try{Kn.closeSync(Fi)}catch{}Fi=null}a(UE,"closeLogFile");function Lq(){if(!Fi){try{if(!ta)debugger;Fi=Kn.openSync(ta,"a")}catch(e){ea.error(e)}setTimeout(()=>{UE()},wq).unref()}}a(Lq,"openLogFile");function gu(...e){Pt[Mt]<=Pt.info&&sa(Ms("info",e))}a(gu,"info");function DE(...e){Pt[Mt]<=Pt.trace&&sa(Ms("trace",e))}a(DE,"trace");function ra(...e){Pt[Mt]<=Pt.error&&Au(Ms("error",e))}a(ra,"error");function LE(...e){Pt[Mt]<=Pt.debug&&sa(Ms("debug",e))}a(LE,"debug");function ZR(...e){Pt[Mt]<=Pt.notify&&sa(Ms("notify",e))}a(ZR,"notify");function jR(...e){Pt[Mt]<=Pt.fatal&&Au(Ms("fatal",e))}a(jR,"fatal");function ME(...e){Pt[Mt]<=Pt.warn&&Au(Ms("warn",e))}a(ME,"warn");function Mq(e,t,...r){t===QR.STDERR?Au(Ms(e,r)):sa(Ms(e,r))}a(Mq,"logCustomLevel");function Pq(){let e;try{e=Nq.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ls.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return Kn.existsSync(t)||(t=Ls.join(CE,"utility/hdb_boot_properties.file")),t}a(Pq,"getPropsFilePath");function vq(e){Mt=e}a(vq,"setLogLevel");function YR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(YR,"autoCastBoolean");function Bq(e){try{if(e.includes("config/settings.js")){let o=WR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ls.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=KR.parseDocument(Kn.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(Bq,"getLogConfig");function Hq(){try{let e=KR.parseDocument(Kn.readFileSync(Iq,"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(Hq,"getDefaultConfig");function qq(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(qq,"AuthAuditLog")});var tg=m((pre,eg)=>{"use strict";var Fq=require("util"),Gq=require("path"),xq=require("child_process"),kq=Fq.promisify(xq.execFile),Vq=1e3*1e3*10;eg.exports={findPs:$q};async function $q(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await kq("ps",["wwxo",`pid,${r}`],{maxBuffer:Vq});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:Gq.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($q,"findPs")});var Ve=m((Rre,sg)=>{"use strict";var Yq="__dbis__",Kq="__txns__",Wq="__environment_name__",Qq="__dbi_defintion__",zq={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"},Jq=["__createdtime__","__updatedtime__"],Xq="\uFFFF",rg={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Zq=Object.values(rg);sg.exports={AUDIT_STORE_NAME:Kq,INTERNAL_DBIS_NAME:Yq,DBI_DEFINITION_NAME:Qq,SEARCH_TYPES:zq,TIMESTAMP_NAMES:Jq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Wq,TRANSACTIONS_DBI_NAMES_ENUM:rg,TRANSACTIONS_DBIS:Zq,OVERFLOW_MARKER:Xq}});var nr=m((gre,dg)=>{"use strict";var ng=A(),ig=Ve(),og={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},ag=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),cg={500:ag("There was an error processing your request."),400:"Invalid request"},jq=cg[og.INTERNAL_SERVER_ERROR],eF={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.`},tF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},rF={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"},sF={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 ${ig.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${ig.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"},nF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${ng.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 ${ng.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"},ug={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"},iF={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."},oF={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`},aF={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"},cF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},uF={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`},lg={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.`},_g={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}`},lF={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."},_F={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},dF={...ug,...rF,...eF,...iF,...oF,...aF,...cF,...uF,...nF,...lg,..._g,...lF,..._F,...tF};dg.exports={CHECK_LOGS_WRAPPER:ag,HDB_ERROR_MSGS:dF,DEFAULT_ERROR_MSGS:cg,DEFAULT_ERROR_RESP:jq,HTTP_STATUS_CODES:og,LMDB_ERRORS_ENUM:sF,AUTHENTICATION_ERROR_MSGS:ug,VALIDATION_ERROR_MSGS:lg,ITC_ERRORS:_g}});var W=m((Ore,hg)=>{"use strict";var Gi=nr(),EF=x(),fF=A(),Ou=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,Eg),this.statusCode=s||Gi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Gi.DEFAULT_ERROR_MSGS[s]?Gi.DEFAULT_ERROR_MSGS[s]:Gi.DEFAULT_ERROR_MSGS[Gi.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&&EF[n](i)}},vE=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}},BE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function Eg(e,t,r,s=fF.LOG_LEVELS.ERROR,n=null,i=!1){if(fg(e))return e;let o=new Ou(e,t,r,s,n);return i&&delete o.stack,o}a(Eg,"handleHDBError");function fg(e){return e.__proto__.constructor.name===Ou.name}a(fg,"isHDBError");hg.exports={isHDBError:fg,handleHDBError:Eg,ClientError:vE,ServerError:BE,hdb_errors:Gi}});var V=m((yre,Cg)=>{"use strict";var dn=require("path"),Rg=require("fs-extra"),vt=x(),mg=require("fs-extra"),Nu=require("os"),hF=require("net"),mF=require("recursive-iterator"),ve=A(),SF=tg(),Sg=require("papaparse"),bu=require("moment"),{inspect:pF}=require("util"),pg=require("is-number"),bre=require("lodash"),TF=require("minimist"),RF=require("https"),gF=require("http"),{hdb_errors:yu}=W(),AF=/^((\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)))$/,gg=require("util").promisify(setTimeout),OF=100,NF=5,bF="",yF=4,Tg={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Cg.exports={isEmpty:ir,isEmptyOrZeroLength:es,arrayHasEmptyValues:CF,arrayHasEmptyOrZeroLengthValues:UF,buildFolderPath:DF,isBoolean:Ag,errorizeMessage:IF,stripFileExtension:MF,autoCast:PF,autoCastJSON:Og,autoCastJSONDeep:qE,removeDir:vF,compareVersions:BF,isCompatibleDataVersion:HF,escapeRawValue:qF,unescapeValue:FF,stringifyProps:GF,timeoutPromise:kF,isClusterOperation:$F,getClusterUser:KF,checkGlobalSchemaTable:YF,getHomeDir:bg,getPropsFilePath:xF,promisifyPapaParse:WF,removeBOM:yg,createEventPromise:QF,checkProcessRunning:zF,checkSchemaTableExist:JF,checkSchemaExists:Ig,checkTableExists:wg,getStartOfTomorrowInSeconds:XF,getLimitKey:ZF,isObject:LF,isNotEmptyAndHasValue:wF,autoCasterIsNumberCheck:Ng,backtickASTSchemaItems:jF,isPortTaken:VF,createForkArgs:eG,autoCastBoolean:tG,async_set_timeout:gg,getTableHashAttribute:rG,doesSchemaExist:sG,doesTableExist:nG,stringifyObj:iG,ms_to_time:oG,changeExtension:aG,getEnvCliRootPath:FE,noBootFile:cG,httpRequest:uG,transformReq:lG,convertToMS:_G,PACKAGE_ROOT:ve.PACKAGE_ROOT};function IF(e){return e instanceof Error?e:new Error(e)}a(IF,"errorizeMessage");function ir(e){return e==null}a(ir,"isEmpty");function wF(e){return!ir(e)&&(e||e===0||e===""||Ag(e))}a(wF,"isNotEmptyAndHasValue");function es(e){return ir(e)||e.length===0||e.size===0}a(es,"isEmptyOrZeroLength");function CF(e){if(ir(e))return!0;for(let t=0;t<e.length;t++)if(ir(e[t]))return!0;return!1}a(CF,"arrayHasEmptyValues");function UF(e){if(es(e))return!0;for(let t=0;t<e.length;t++)if(es(e[t]))return!0;return!1}a(UF,"arrayHasEmptyOrZeroLengthValues");function DF(...e){try{return e.join(dn.sep)}catch{console.error(e)}}a(DF,"buildFolderPath");function Ag(e){return ir(e)?!1:e===!0||e===!1}a(Ag,"isBoolean");function LF(e){return ir(e)?!1:typeof e=="object"}a(LF,"isObject");function MF(e){return es(e)?bF:e.slice(0,-yF)}a(MF,"stripFileExtension");function PF(e){return ir(e)||e===""||typeof e!="string"?e:Tg[e]!==void 0?Tg[e]:Ng(e)===!0?Number(e):AF.test(e)?new Date(e):e}a(PF,"autoCast");function Og(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(Og,"autoCastJSON");function qE(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=qE(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=qE(r);s!==r&&(e[t]=s)}return e}else return Og(e)}a(qE,"autoCastJSONDeep");function Ng(e){if(e.startsWith("0.")&&pg(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&pg(e))}a(Ng,"autoCasterIsNumberCheck");async function vF(e){if(es(e))throw new Error(`Directory path: ${e} does not exist`);try{await mg.emptyDir(e),await mg.remove(e)}catch(t){throw vt.error(`Error removing files in ${e} -- ${t}`),t}}a(vF,"removeDir");function BF(e,t){if(es(e)){vt.info("Invalid current version sent as parameter.");return}if(es(t)){vt.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(BF,"compareVersions");function HF(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(HF,"isCompatibleDataVersion");function qF(e){if(ir(e))return e;let t=String(e);return t==="."?ve.UNICODE_PERIOD:t===".."?ve.UNICODE_PERIOD+ve.UNICODE_PERIOD:t.replace(ve.FORWARD_SLASH_REGEX,ve.UNICODE_FORWARD_SLASH)}a(qF,"escapeRawValue");function FF(e){if(ir(e))return e;let t=String(e);return t===ve.UNICODE_PERIOD?".":t===ve.UNICODE_PERIOD+ve.UNICODE_PERIOD?"..":String(e).replace(ve.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(FF,"unescapeValue");function GF(e,t){if(ir(e))return vt.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+Nu.EOL}!es(s)&&s[0]===";"?r+=" "+s+n+Nu.EOL:es(s)||(r+=s+"="+n+Nu.EOL)}catch{vt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(GF,"stringifyProps");function bg(){let e;try{e=Nu.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(bg,"getHomeDir");function xF(){let e=dn.join(bg(),ve.HDB_HOME_DIR_NAME,ve.BOOT_PROPS_FILE_NAME);return Rg.existsSync(e)||(e=dn.join(__dirname,"../","hdb_boot_properties.file")),e}a(xF,"getPropsFilePath");function kF(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(kF,"timeoutPromise");async function VF(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=hF.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(VF,"isPortTaken");function $F(e){try{return ve.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){vt.error(`Error checking operation against cluster ops ${t}`)}return!1}a($F,"isClusterOperation");function YF(e,t){let r=(Ee(),ee(be)).getDatabases();if(!r[e])return yu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return yu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(YF,"checkGlobalSchemaTable");function KF(e,t){if(ir(t)){vt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(ir(e)||es(e)){vt.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){vt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){vt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(KF,"getClusterUser");function WF(){Sg.parsePromise=function(e,t,r){return new Promise(function(s,n){Sg.parse(e,{header:!0,transformHeader:yg,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(WF,"promisifyPapaParse");function yg(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(yg,"removeBOM");function QF(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;vt.info(`Got cluster status event response: ${pF(n)}`);try{i.cancel()}catch{vt.error("Error trying to cancel timeout.")}s(n)})})}a(QF,"createEventPromise");async function zF(e){let t=!0,r=0;do await gg(OF*r++),(await SF.findPs(e)).length>0&&(t=!1);while(t&&r<NF);if(t)throw new Error(`process ${e} was not started`)}a(zF,"checkProcessRunning");function JF(e,t){let r=Ig(e);if(r)return r;let s=wg(e,t);if(s)return s}a(JF,"checkSchemaTableExist");function Ig(e){let{getDatabases:t}=(Ee(),ee(be));if(!t()[e])return yu.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Ig,"checkSchemaExists");function wg(e,t){let{getDatabases:r}=(Ee(),ee(be));if(!r()[e][t])return yu.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(wg,"checkTableExists");function XF(){let e=bu().utc().add(1,ve.MOMENT_DAYS_TAG).startOf(ve.MOMENT_DAYS_TAG).unix(),t=bu().utc().unix();return e-t}a(XF,"getStartOfTomorrowInSeconds");function ZF(){return bu().utc().format("DD-MM-YYYY")}a(ZF,"getLimitKey");function jF(e){try{let t=new mF(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){vt.error("Got an error back ticking items."),vt.error(t)}}a(jF,"backtickASTSchemaItems");function eG(e){return[e]}a(eG,"createForkArgs");function tG(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(tG,"autoCastBoolean");function rG(e,t){let{getDatabases:r}=(Ee(),ee(be)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(rG,"getTableHashAttribute");function sG(e){let{getDatabases:t}=(Ee(),ee(be));return t()[e]!==void 0}a(sG,"doesSchemaExist");function nG(e,t){let{getDatabases:r}=(Ee(),ee(be));return r()[e]?.[t]!==void 0}a(nG,"doesTableExist");function iG(e){try{return JSON.stringify(e)}catch{return e}}a(iG,"stringifyObj");function oG(e){let t=bu.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(oG,"ms_to_time");function aG(e,t){let r=dn.basename(e,dn.extname(e));return dn.join(dn.dirname(e),r+t)}a(aG,"changeExtension");function FE(){if(process.env[ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=TF(process.argv);if(e[ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[ve.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(FE,"getEnvCliRootPath");var HE;function cG(){if(HE)return HE;let e=FE();FE()&&Rg.pathExistsSync(dn.join(e,ve.HDB_CONFIG_FILE))&&(HE=!0)}a(cG,"noBootFile");function uG(e,t){let r;return e.protocol==="http:"?r=gF:r=RF,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(uG,"httpRequest");function lG(e){if(!e.schema&&!e.database){e.schema=ve.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(lG,"transformReq");function _G(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(_G,"convertToMS")});var Dg=m((wre,Ug)=>{"use strict";var dG={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))},EG="certificate.pem",fG="privateKey.pem",hG="ca.pem";Ug.exports={CERTIFICATE_VALUES:dG,CERTIFICATE_PEM_NAME:EG,PRIVATEKEY_PEM_NAME:fG,CA_PEM_NAME:hG}});var Be=m((Cre,Lg)=>{"use strict";var Bt=require("validate.js");Bt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Bt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Bt.validators.type.checks={Object:function(e){return Bt.isObject(e)&&!Bt.isArray(e)},Array:Bt.isArray,Integer:Bt.isInteger,Number:Bt.isNumber,String:Bt.isString,Date:Bt.isDate,Boolean:function(e){return typeof e=="boolean"}};Bt.validators.hasValidFileExt=function(e,t){return Bt.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};Lg.exports={validateObject:mG,validateObjectAsync:SG,validateBySchema:pG};function mG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Bt(e,t,{format:"flat"});return r?new Error(r):null}a(mG,"validateObject");async function SG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Bt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(SG,"validateObjectAsync");function pG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(pG,"validateBySchema")});var xE=m((Lre,qg)=>{"use strict";var Bg=require("fs-extra"),re=require("joi"),TG=require("os"),{boolean:Te,string:vs,number:or,array:GE}=re.types(),{totalmem:Mg}=require("os"),xi=require("path"),RG=x(),wu=V(),Dre=Dg(),Pg=A(),gG=Be(),vg="log",AG="components",OG="Invalid logging.rotation.maxSize unit. Available units are G, M or K",NG="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",bG="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",yG="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",IG="rootPath config parameter is undefined",wG="clustering.enabled config parameter is undefined",Ps=or.min(0).required(),Cu=GE.items({host:vs.required(),port:Ps}).empty(null),Bs;qg.exports={configValidator:CG,routesValidator:vG,route_constraints:Cu};function CG(e){if(Bs=e.rootPath,wu.isEmpty(Bs))throw IG;let t=Te.required(),r=re.valid("production","development").required(),s=or.min(0).max(1e3).empty(null).default(PG),n=vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Iu),i=re.custom(UG).messages({"any.custom":"{:#label} {:#error}"}),o=vs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=re.string().empty(null).default(Iu),u=re.custom(DG).empty(null).default(Iu),l=e.clustering?.enabled;if(wu.isEmpty(l))throw wG;let _;return l===!0?_=re.object({enabled:t,hubServer:re.object({cluster:re.object({name:re.required().empty(null),network:re.object({port:Ps,routes:Cu}).required()}).required(),leafNodes:re.object({network:re.object({port:Ps}).required()}).required(),network:re.object({port:Ps}).required()}).required(),leafServer:re.object({network:re.object({port:Ps,routes:Cu}).required(),streams:re.object({maxAge:or.min(120).allow(null).optional(),maxBytes:or.min(1).allow(null).optional(),maxMsgs:or.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:re.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Te.optional(),databaseLevel:Te.optional(),tls:re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required(),verify:Te.optional()}),user:vs.optional().empty(null)}).required():_=re.object({enabled:t,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required()})}).required(),re.object({authentication:re.object({authorizeLocal:Te,cacheTTL:or.required(),enableSessions:Te,operationTokenTimeout:re.required(),refreshTokenTimeout:re.required()}),analytics:re.object({aggregatePeriod:or}),clustering:_,customFunctions:re.object({enabled:t,network:re.object({cors:Te.required(),corsAccessList:GE.required(),headersTimeout:or.min(1).required(),https:Te.required(),keepAliveTimeout:or.min(1).required(),port:Ps,timeout:or.min(1).required()}),nodeEnv:r,root:n,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:re.object({enabled:t}).required(),logging:re.object({auditAuthEvents:re.object({logFailed:Te,logSuccessful:Te}),file:Te.required(),level:re.valid("notify","fatal","error","warn","info","debug","trace"),rotation:re.object({enabled:Te.optional(),compress:Te.optional(),interval:vs.custom(MG).optional().empty(null),maxSize:vs.custom(LG).optional().empty(null),path:vs.optional().empty(null).default(Iu)}).required(),root:n,stdStreams:Te.required(),auditLog:Te.required()}).required(),operationsApi:re.object({foreground:Te.required(),network:re.object({cors:Te.required(),corsAccessList:GE.required(),headersTimeout:or.min(1).required(),https:Te.required(),keepAliveTimeout:or.min(1).required(),port:Ps,timeout:or.min(1).required()}).required(),nodeEnv:r,tls:re.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:re.object({network:re.object({port:Ps,securePort:Ps}).required(),webSocket:Te.optional(),requireAuthentication:Te.optional()}),http:re.object({threads:s}).required(),storage:re.object({writeAsync:Te.required(),overlappingSync:Te.optional(),caching:Te.optional(),compression:Te.optional(),noReadAhead:Te.optional(),path:u,prefetchWrites:Te.optional()}).required(),ignoreScripts:Te.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(CG,"configValidator");function Hg(e){return Bg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(Hg,"doesPathExist");function UG(e,t){if(e===null)return;let r=Hg(e);return r?t.message(r):e}a(UG,"validatePemFile");function DG(e,t){re.assert(e,vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=Hg(e);if(r)return t.message(r)}a(DG,"validatePath");function LG(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(OG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(bG):e}a(LG,"validateRotationMaxSize");function MG(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(NG);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(yG):e}a(MG,"validateRotationInterval");function PG(e,t){let r=t.state.path.join("."),s=TG.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||Mg();return i=Math.round(Math.min(i,Mg())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),RG.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(PG,"setDefaultThreads");function Iu(e,t){if(!wu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(wu.isEmpty(Bs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return xi.join(Bs,AG);case"logging.root":return xi.join(Bs,vg);case"clustering.leafServer.streams.path":return xi.join(Bs,"clustering","leaf");case"storage.path":let s=xi.join(Bs,Pg.LEGACY_DATABASES_DIR_NAME);return Bg.existsSync(s)?s:xi.join(Bs,Pg.DATABASES_DIR_NAME);case"logging.rotation.path":return xi.join(Bs,vg);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Iu,"setDefaultRoot");function vG(e){let t=re.object({routes:Cu});return gG.validateBySchema({routes:e},t)}a(vG,"routesValidator")});var gr=m((vre,Qg)=>{"use strict";var Rr=A(),_t=V(),rt=x(),{configValidator:BG,routesValidator:Fg}=xE(),Ht=require("fs-extra"),HG=require("yaml"),Hr=require("path"),qG=require("is-number"),xg=require("properties-reader"),FG=require("lodash"),{handleHDBError:GG}=W(),{HTTP_STATUS_CODES:xG,HDB_ERROR_MSGS:Uu}=nr(),Pre=require("minimist"),{server:kG}=(Br(),ee(Zo)),{SCHEMAS_PARAM_CONFIG:na,CONFIG_PARAMS:En,CONFIG_PARAM_MAP:Hs}=Rr,VG="Unable to get config value because config is uninitialized",$G="Config successfully initialized",YG="Error backing up config file",KG="Empty parameter sent to getConfigValue",kg=Hr.join(Rr.PACKAGE_ROOT,"config","yaml",Rr.HDB_DEFAULT_CONFIG_FILE),WG="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",Gg={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"},Du,ft;Qg.exports={createConfigFile:QG,getDefaultConfig:zG,getConfigValue:$g,initConfig:Yg,flattenConfig:Qn,updateConfigValue:Kg,updateConfigObject:XG,getConfiguration:ex,setConfiguration:tx,readConfigFile:$E,getClusteringRoutes:rx,initOldConfig:Wg,getConfigFromFile:sx,getConfigFilePath:Wn,addConfig:nx,deleteConfigFromFile:ix};function QG(e){let t=fn(kg);Du=Qn(t.toJSON());let r;for(let o in e){let c=Hs[o.toLowerCase()];if(c===En.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=kE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&Vg(t,r),VE(t);let s=t.toJSON();ft=Qn(s);let n=t.getIn(["rootPath"]),i=Hr.join(n,Rr.HDB_CONFIG_FILE);Ht.createFileSync(i),Ht.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(QG,"createConfigFile");function Vg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(na.TABLES))for(let i in s[n][na.TABLES])for(let o in s[n][na.TABLES][i]){let c=s[n][na.TABLES][i][o],u=[En.SCHEMAS,n,na.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=[En.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(Vg,"setSchemasConfig");function zG(e){if(Du===void 0){let r=fn(kg);Du=Qn(r.toJSON())}let t=Hs[e.toLowerCase()];if(t!==void 0)return Du[t.toLowerCase()]}a(zG,"getDefaultConfig");function $g(e){if(e==null){rt.error(KG);return}if(ft===void 0){rt.trace(VG);return}let t=Hs[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a($g,"getConfigValue");function Wn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?Hr.join(t,Rr.HDB_CONFIG_FILE):xg(e).get(Rr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Wn,"getConfigFilePath");function Yg(e=!1){if(ft===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Ht.accessSync(t,Ht.constants.F_OK|Ht.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Wn(t),s;if(r.includes("config/settings.js"))try{Wg(r);return}catch(i){if(i.code!==Rr.NODE_ERROR_CODES.ENOENT)throw i}try{s=fn(r)}catch(i){if(i.code===Rr.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}`)}JG(s,r),VE(s);let n=s.toJSON();if(kG.config=n,ft=Qn(n),ft.logging_rotation_rotate)for(let i in Gg)ft[i]&&rt.error(`Config ${Gg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace($G)}}a(Yg,"initConfig");function JG(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Hr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Hr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Hr.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"),Ht.writeFileSync(t,String(e)))}a(JG,"checkForUpdatedConfig");function VE(e){let t=e.toJSON(),r=BG(t);if(r.error)throw Uu.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(VE,"validateConfig");function XG(e,t){ft===void 0&&(ft={});let r=Hs[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(XG,"updateConfigObject");function Kg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&Yg();let o=$g(Hs.hdb_root),c=Hr.join(o,Rr.HDB_CONFIG_FILE),u=fn(c),l;if(r===void 0&&e.toLowerCase()===En.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Hs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=kE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Hs[E.toLowerCase()];if(f===En.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),S=kE(f,r[E]);f==="rootPath"&&S?.endsWith("/")&&(S=S.slice(0,-1));try{u.setIn([...h],S)}catch(T){rt.error(T)}}}l&&Vg(u,l),VE(u);let _=u.getIn(["rootPath"]),d=Hr.join(_,Rr.HDB_CONFIG_FILE);s===!0&&ZG(c,_),Ht.writeFileSync(d,String(u)),n&&(ft=Qn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(Kg,"updateConfigValue");function ZG(e,t){try{let r=Hr.join(t,"backup",`${Rr.HDB_CONFIG_FILE}.bak`);Ht.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(YG),rt.error(r)}}a(ZG,"backupConfigFile");var jG=["schemas"];function Qn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!jG.includes(r)){let s=Qn(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(Qn,"flattenConfig");function kE(e,t){if(e===En.CLUSTERING_NODENAME||e===En.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(qG(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.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 _t.autoCast(t)}a(kE,"castConfigValue");function ex(){let e=_t.getPropsFilePath(),t=Wn(e);return fn(t).toJSON()}a(ex,"getConfiguration");async function tx(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return Kg(void 0,void 0,n,!0),WG}catch(i){throw typeof i=="string"||i instanceof String?GG(i,i,xG.BAD_REQUEST,void 0,void 0,!0):i}}a(tx,"setConfiguration");function $E(){let e=_t.getPropsFilePath();try{Ht.accessSync(e,Ht.constants.F_OK|Ht.constants.R_OK)}catch(s){if(!_t.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Wn(e);return fn(t).toJSON()}a($E,"readConfigFile");function fn(e){return HG.parseDocument(Ht.readFileSync(e,"utf8"),{simpleKeys:!0})}a(fn,"parseYamlDoc");function rx(){let e=$E(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=Fg(t);if(r)throw Uu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=Fg(s);if(n)throw Uu.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Uu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(rx,"getClusteringRoutes");function Wg(e){let t=xg(e);ft={};for(let r in Hs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Hs[r].toLowerCase();n===En.LOGGING_ROOT?ft[n]=Hr.dirname(s):ft[n]=s}return ft}a(Wg,"initOldConfig");function sx(e){let t=$E();return FG.get(t,e.replaceAll("_","."))}a(sx,"getConfigFromFile");async function nx(e,t){let r=fn(Wn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ht.writeFile(Wn(),String(r))}a(nx,"addConfig");function ix(e){let t=Wn(_t.getPropsFilePath()),r=fn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Hr.join(s,Rr.HDB_CONFIG_FILE);Ht.writeFileSync(n,String(r))}a(ix,"deleteConfigFromFile")});var Q=m((Hre,Xg)=>{"use strict";var YE=require("fs-extra"),qr=require("path"),zg=require("os"),ox=require("properties-reader"),ia=x(),zn=V(),se=A(),Lu=gr(),ax="Error initializing environment manager",Mu="BOOT_PROPS_FILE_PATH",Jg=!1,cx={[se.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},qs={};Xg.exports={BOOT_PROPS_FILE_PATH:Mu,getHdbBasePath:ux,setHdbBasePath:lx,get:_x,initSync:Ex,setProperty:fe,initTestEnvironment:fx};function ux(){return qs[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(ux,"getHdbBasePath");function lx(e){qs[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(lx,"setHdbBasePath");function _x(e){let t=Lu.getConfigValue(e);return t===void 0?qs[e]:t}a(_x,"get");function fe(e,t){cx[e]&&(qs[e]=t),Lu.updateConfigObject(e,t)}a(fe,"setProperty");function dx(){let e;try{e=zn.getPropsFilePath(),YE.accessSync(e,YE.constants.F_OK|YE.constants.R_OK),Jg=!0;let t=ox(e);return qs[se.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(se.HDB_SETTINGS_NAMES.INSTALL_USER),qs[se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),qs[Mu]=e,!0}catch{return ia.trace(`Environment manager found no properties file at ${e}`),!1}}a(dx,"doesPropFileExist");function Ex(e=!1){try{(Jg||dx()||zn.noBootFile())&&(Lu.initConfig(e),qs[se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Lu.getConfigValue(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ia.error(ax),ia.error(t),console.error(t),process.exit(1)}}a(Ex,"initSync");function fx(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=qr.join(__dirname,"../../","unitTests");qs[Mu]=qr.join(u,"hdb_boot_properties.file"),fe(se.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,qr.join(u,"settings.test")),fe(se.HDB_SETTINGS_NAMES.INSTALL_USER,zg.userInfo()?zg.userInfo().username:void 0),fe(se.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,qr.join(u,"envDir","utility","keys","privateKey.pem")),fe(se.HDB_SETTINGS_NAMES.CERT_KEY,qr.join(u,"envDir","utility","keys","certificate.pem")),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,qr.join(u,"envDir","utility","keys","privateKey.pem")),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,qr.join(u,"envDir","utility","keys","certificate.pem")),fe(se.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),fe(se.HDB_SETTINGS_NAMES.LOG_PATH_KEY,qr.join(u,"envDir","log")),fe(se.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),fe(se.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),fe(se.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),fe(se.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,qr.join(u,"envDir")),fe(se.CONFIG_PARAMS.STORAGE_PATH,qr.join(u,"envDir")),fe(se.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,zn.isEmpty(n)?!0:n),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,zn.isEmpty(n)?!0:n),fe(se.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),fe(se.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,zn.isEmpty(i)?!1:i),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,zn.isEmpty(i)?!1:i),fe(se.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),fe(se.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),fe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),fe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),fe(se.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,qr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),fe(se.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,zn.isEmpty(c)?!1:c),o&&(fe("CORS_ACCESSLIST",o),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(fe(se.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(fe(se.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(fe(se.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),fe(se.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Mu}. Please check your boot props and settings files`;ia.fatal(r),ia.error(t)}}a(fx,"initTestEnvironment")});var Ce=m((Fre,nA)=>{"use strict";var la=A(),hx=V(),qt=Q(),_a=require("path"),mx=require("minimist"),Zg=require("fs-extra"),jg=require("lodash");qt.initSync();var{CONFIG_PARAMS:hn,SCHEMAS_PARAM_CONFIG:oa,SYSTEM_SCHEMA_NAME:Pu}=la,aa,ca,ua;function eA(){if(aa!==void 0)return aa;if(qt.getHdbBasePath()!==void 0)return aa=qt.get(hn.STORAGE_PATH)||_a.join(qt.getHdbBasePath(),la.DATABASES_DIR_NAME),aa}a(eA,"getBaseSchemaPath");function tA(){if(ca!==void 0)return ca;if(qt.getHdbBasePath()!==void 0)return ca=sA(Pu),ca}a(tA,"getSystemSchemaPath");function rA(){if(ua!==void 0)return ua;if(qt.getHdbBasePath()!==void 0)return ua=qt.get(la.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||_a.join(qt.getHdbBasePath(),la.TRANSACTIONS_DIR_NAME),ua}a(rA,"getTransactionAuditStoreBasePath");function Sx(e,t){let r=qt.get(hn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||_a.join(rA(),e.toString())}a(Sx,"getTransactionAuditStorePath");function sA(e,t){e=e.toString(),t=t&&t.toString();let r=qt.get(la.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||_a.join(eA(),e)}a(sA,"getSchemaPath");function px(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,mx(process.argv));let s=r[hn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!hx.isObject(s))throw o;i=s}for(let o of i){let c=o[Pu];if(!c)continue;let u=qt.get(hn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[oa.PATH];if(l)return jg.set(u,[Pu,oa.TABLES,t,oa.PATH],l),qt.setProperty(hn.SCHEMAS,u),l;let _=c?.[oa.PATH];if(_)return jg.set(u,[Pu,oa.PATH],_),qt.setProperty(hn.SCHEMAS,u),_}}let n=r[hn.STORAGE_PATH.toUpperCase()];if(n){if(!Zg.pathExistsSync(n))throw new Error(n+" does not exist");let i=_a.join(n,e);return Zg.mkdirsSync(i),qt.setProperty(hn.STORAGE_PATH,n),i}return tA()}a(px,"initSystemSchemaPaths");function Tx(){aa=void 0,ca=void 0,ua=void 0}a(Tx,"resetPaths");nA.exports={getBaseSchemaPath:eA,getSystemSchemaPath:tA,getTransactionAuditStorePath:Sx,getTransactionAuditStoreBasePath:rA,getSchemaPath:sA,initSystemSchemaPaths:px,resetPaths:Tx}});var Ft=m((Vre,uA)=>{"use strict";var Rx=nr().LMDB_ERRORS_ENUM,xre=require("lmdb"),gx=Ve(),kre=require("buffer").Buffer,{OVERFLOW_MARKER:iA,MAX_SEARCH_KEY_LENGTH:vu}=gx,oA=["number","string","symbol","boolean","bigint"];function Ax(e){if(e=e?.primaryStore||e,!e)throw new Error(Rx.ENV_REQUIRED)}a(Ax,"validateEnv");function Ox(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(Ox,"stringifyData");function Nx(e){return e instanceof Date?e.valueOf():e}a(Nx,"convertKeyValueToWrite");function bx(e){if(e==null)return;if(oA.includes(typeof e))return e.length>vu?[e.slice(0,vu)+iA]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(oA.includes(typeof n))n.length>vu?t.push(n.slice(0,vu)+iA):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(bx,"getIndexedValues");var Bu=0,aA=0;function cA(){aA=Date.now()-performance.now()}a(cA,"adjustStartTime");cA();var yx=6e4;setInterval(cA,yx).unref();function Ix(){let e=performance.now()+aA;return e>Bu?(Bu=e,e):(Bu+=488e-6,Bu)}a(Ix,"getNextMonotonicTime");uA.exports={validateEnv:Ax,stringifyData:Ox,convertKeyValueToWrite:Nx,getNextMonotonicTime:Ix,getIndexedValues:bx}});var lA,ts,KE,da=pe(()=>{lA=require("events"),ts=class extends lA.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new KE;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)}},KE=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 Ea(e){return e[ht]||(e[ht]=Object.create(null))}function xu(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[ue]?.[c];if(_&&typeof _=="object"){let d=_A(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){Ea(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,Hu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Hu.ClientError)(`${c} must be a string, attempt to assign ${l}`);Ea(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[ue]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Hu.ClientError("Can not add a property to a sealed table schema");Ea(this)[o]=c}),i("deleteProperty",function(o){Ea(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ue])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ue])),Object.assign(c,this)),c||this[ue]}),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 _A(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[ue]=n}},xu(r,t)),new r(e)):new qu(e);case Array:let s=new Gu(e.length);s[ue]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=_A(o,t?.elements)),s[n]=o}return s}}function ku(e){let t=e[ht],r;for(let n in t){r||(r=Object.assign({},e[ue]));let i=t[n];i&&typeof i=="object"&&(i=ku(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ue])),Object.assign(r,e)),r||e[ue]}function fa(e){let t;if(e[ue]&&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=fa(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[ue]));let n=r[s];n&&typeof n=="object"&&(n=fa(n)),t[s]=n}return t?Object.freeze(t):e[ue]||Object.freeze(e)}function Fu(e){let t=e[ue];if(!t)return!0;if(e.constructor===Array){if(e[Jn]||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?.[ue]===n){if(Fu(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[ue]===i){if(Fu(n))return!0}else return!0}else return!0}}return!1}var Hu,ht,qu,Jn,Gu,Vu=pe(()=>{rs();Hu=U(W()),ht=Symbol("own-data");a(Ea,"getChanges");a(xu,"assignTrackedAccessors");a(_A,"trackObject");qu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ue]=t}};xu(qu,{});a(ku,"collapseData");a(fa,"deepFreeze");a(Fu,"hasChanges");Jn=Symbol.for("has-array-changes"),Gu=class extends Array{static{a(this,"TrackedArray")}[Jn];constructor(t){super(t)}splice(...t){return this[Jn]=!0,super.splice(...t)}push(...t){return this[Jn]=!0,super.push(...t)}pop(){return this[Jn]=!0,super.pop()}unshift(...t){return this[Jn]=!0,super.unshift(...t)}shift(){return this[Jn]=!0,super.shift()}};Gu.prototype.constructor=Array});function We(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 dA,EA,WE,Xn=pe(()=>{dA=U(Ft()),EA=require("../index");rs();a(We,"transaction");(0,EA._assignPackageExport)("transaction",We);We.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};We.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,dA.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 JE(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(Cx[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]=ns.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 dt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new QE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=XE(e);if(!T)throw new QE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(q=>setImmediate(()=>q(T(O)?R:hA.SKIP))))}let S={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(S):h.getRange(S).map(({value:T})=>T)}function XE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case dt.SEARCH_TYPES.EQUALS:case void 0:return ss(r,n=>n===s);case dt.SEARCH_TYPES.CONTAINS:return ss(r,n=>n?.toString().includes(s));case dt.SEARCH_TYPES.ENDS_WITH:case dt.SEARCH_TYPES._ENDS_WITH:return ss(r,n=>n?.toString().endsWith(s));case dt.SEARCH_TYPES.STARTS_WITH:case dt.SEARCH_TYPES._STARTS_WITH:return ss(r,n=>typeof n=="string"&&n.startsWith(s));case dt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),ss(r,n=>(0,ns.compareKeys)(n,s[0])>=0&&(0,ns.compareKeys)(n,s[1])<=0);case"gt":case dt.SEARCH_TYPES.GREATER_THAN:case dt.SEARCH_TYPES._GREATER_THAN:return ss(r,n=>(0,ns.compareKeys)(n,s)>0);case"ge":case dt.SEARCH_TYPES.GREATER_THAN_EQUAL:case dt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ss(r,n=>(0,ns.compareKeys)(n,s)>=0);case dt.SEARCH_TYPES.LESS_THAN:case"lt":case dt.SEARCH_TYPES._LESS_THAN:return ss(r,n=>(0,ns.compareKeys)(n,s)<0);case"le":case dt.SEARCH_TYPES.LESS_THAN_EQUAL:case dt.SEARCH_TYPES._LESS_THAN_EQUAL:return ss(r,n=>(0,ns.compareKeys)(n,s)<=0);case"ne":return ss(r,n=>(0,ns.compareKeys)(n,s)!==0);default:return}}function ss(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 $u(e){if(!e)return;let t=new zE,r,s,n,i,o;for(;r=fA.exec(e);){i=fA.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=wx[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 QE,dt,ns,hA,fA,wx,Cx,zE,Yu=pe(()=>{QE=U(W()),dt=U(Ve()),ns=require("ordered-binary"),hA=require("lmdb"),fA=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,wx={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(JE,"idsForCondition");Cx={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(XE,"filterByType");a(ss,"attributeComparator");a($u,"parseQuery");zE=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 ef={};ke(ef,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ce,IS_COLLECTION:()=>Fs,RECORD_PROPERTY:()=>ue,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>gA,snake_case:()=>Dx});function Dx(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function mA(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 jE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Ar(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[ce]??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 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 We(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[gA]=!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 Ku(o.user);return typeof l?.then=="function"?l.then(S=>e(E,u,o,S)):e(E,u,o,l)});if(!f)throw new Ku(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Or(e,t){let r=new RA.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 ZE(e){let t=e[ue];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 SA(e){if(typeof e=="string")return t=>ZE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=ZE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=ZE(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 pA,TA,RA,Oe,ce,Fs,gA,ue,Ux,mt,Ku,jE,rs=pe(()=>{pA=require("crypto");da();TA=require("../index"),RA=U(W());Vu();Xn();Yu();Oe=Symbol.for("context"),ce=Symbol.for("primary-key"),Fs=Symbol("is-collection"),gA=Symbol("save-updates"),ue=Symbol("stored-record"),Ux={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},mt=class{static{a(this,"Resource")}[Oe];[ce];static transactions;constructor(t,r){this[ce]=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=Ar(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=SA(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Ar(function(t,r,s,n){if(Array.isArray(n)&&t[Fs]){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):Or(t,"put")},{hasContent:!0,type:"update"});static delete=Ar(function(t,r,s,n){return t.delete?t.delete(r):Or(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,pA.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),We(s,()=>{let i=new this(n,s),o=i.put?i.put(r):Or(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Ar(function(t,r,s,n){return t.invalidate?t.invalidate(r):Or(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Ar(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Ar(function(t,r,s,n){return t.connect?t.connect(r):Or(t,"connect")},{type:"read"});static subscribe=Ar(function(t,r,s,n){return t.subscribe?t.subscribe(r):Or(t,"subscribe")},{type:"read"});static publish=Ar(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.publish?t.publish(n,r):Or(t,"publish")},{hasContent:!0,type:"create"});static search=Ar(function(t,r,s,n){let i=t.search?t.search(s):Or(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=SA(o);return i.map(c)}return i},{type:"read"});static query=Ar(function(t,r,s,n){return t.search?t.search(n,r):Or(t,"search")},{hasContent:!0,type:"read"});static copy=Ar(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Or(t,"copy")},{type:"create"});static move=Ar(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Or(t,"move")},{type:"delete"});post(t){if(this[Fs])return this.constructor.create(this[ce],t,this[Oe]);Or(this,"post")}static isCollection(t){return t?.[Fs]}static coerceId(t){return t}static parseQuery(t){return $u(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&&Ux[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:mA(t,this)}}return mA(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[ce]===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=_[ce],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[Fs]=!0),n}connect(t){let r=new ts;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ce]}getContext(){return this[Oe]}};mt.prototype[Oe]=null;(0,TA._assignPackageExport)("Resource",mt);a(Dx,"snake_case");Ku=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(mA,"pathToId");jE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Ar,"transactional");a(Or,"missingMethod");a(ZE,"selectFromObject");a(SA,"transformForSelect")});function of(e){let t=e.auditStore=e.openDB(yA.AUDIT_STORE_NAME,Mx);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,wA.getWorkerIndex)()===0&&e.on("aftercommit",()=>{rf||(rf=setTimeout(()=>{if(rf=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-AA,0]})){if((n[0]&15)===nf){let i=s[1];r[i]?.(s[2])}t.remove(s)}},AA/10).unref())}),t}function zu(e,t,r){let s=DA[r.type],n=3;if(t?t.length>80?(s|=Wu,n=(0,Gs.writeKey)(t,is,e?14:6),tf.setUint16(2,n)):(n=(0,Gs.writeKey)(t,is,e?11:3),is[1]=n):is[1]=0,e){s|=UA;let i=s&Wu?6:3;tf.setFloat64(i,e),t||(n=i+8)}return is[0]=s,s&Wu?tf.setUint16(4,0):is[2]=0,r.value?Buffer.concat([is.slice(0,n),r.value]):is.subarray(0,n)}function mn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Wu,i=n?6:3,o;r&UA&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&sf?t.decoder.decode(e.subarray(c||i)):void 0;return{type:DA[r&7],value:u,lastVersion:o,get user(){return c?(0,Gs.readKey)(e,i,c):void 0}}}var Gs,Qu,yA,IA,wA,CA,is,tf,Lx,Mx,AA,rf,sf,OA,nf,NA,bA,Wu,UA,DA,ha=pe(()=>{Gs=require("ordered-binary"),Qu=U(Q()),yA=U(Ve()),IA=U(A()),wA=U(st()),CA=U(V());(0,Qu.initSync)();is=Buffer.alloc(1024),tf=new DataView(is.buffer,is.byteOffset,1024),Lx={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,Gs.writeKey)(e[2],t,r+12)}else return(0,Gs.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,Gs.readKey)(e,t+12,r)]}else return(0,Gs.readKey)(e,t,r)}},Mx={encoding:"binary",keyEncoder:Lx},AA=(0,CA.convertToMS)((0,Qu.get)(IA.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,rf=null;a(of,"openAuditStore");sf=16,OA=1,nf=2,NA=3,bA=4,Wu=128,UA=64,DA={put:OA|sf,[OA]:"put",delete:nf,[nf]:"delete",message:NA|sf,[NA]:"message",invalidate:bA,[bA]:"invalidate"};a(zu,"createAuditEntry");a(mn,"readAuditEntry")});var af,Zn,Px,ma,Ju,LA=pe(()=>{af=U(Ft());ha();Zn=Symbol("completion"),Px=100,ma=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,af.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[Zn]&&(i||(i=[]),i.push(d[Zn])),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,zu(_.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<Px>>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=[]}},Ju=class extends ma{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,af.getNextMonotonicTime)())}getReadTxn(){}}});var MA={};ke(MA,{Resources:()=>Xu,keyArrayToString:()=>ki,resetResources:()=>vx,resources:()=>Sn});function vx(){return Sn=new Xu}function ki(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var Xu,Sn,Sa=pe(()=>{Xn();Xu=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 We(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(vx,"resetResources");a(ki,"keyArrayToString")});function HA(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;$i||((0,jn.onMessageByType)(vA,d=>{let E=d.auditIds;uf(d.path,E,d.txnId)}),(0,jn.onMessageByType)(BA,d=>{(0,os.trace)("confirming to proceed with txn",d.txnId)}),$i=Object.create(null));let c=$i[i]||($i[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=ki(t);let l=new cf(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 uf(e,t,r,s){if(!$i)return;let n=$i[e];if(n){if(Vi&&Vi+1!==r){(0,os.trace)("Waiting to ensure latest txn id",Vi,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Zu)o<r&&((0,os.trace)("Txn",r,"waiting for txn",o),await c);if(Vi+1!==r){await(0,jn.broadcastWithAcknowledgement)({type:BA,txnId:r});for(let[o,c]of Zu)o<r&&((0,os.trace)("Txn",r,"waiting for txn",o),await c)}Zu.delete(r),(0,os.trace)("Proceeding with txn id",r),Vi=r-1,uf(e,t,r,s)})();return Zu.set(r,i),i}(0,os.trace)("Notifying with txn id",r,s),Vi=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,PA.writeKey)(i,Hx,0);let _=i[3];_&&(i.length=3);let d,E=ki(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,os.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=mn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(R){console.error(R),(0,os.info)(R)}}}if(E==null)break;let S=E.lastIndexOf?.("/",E.length-2);S>-1?E=E.slice(0,S+1):E=null,f=!0}while(!0)}}}function qA(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&Bx)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,jn.broadcast)({type:vA,path:n,auditIds:l,txnId:c,start:u}),uf(n,l,c,!0))})}}var os,jn,PA,vA,BA,Bx,$i,Hx,cf,Vi,Zu,FA=pe(()=>{os=U(x()),jn=U(st()),PA=require("ordered-binary");da();Sa();ha();vA="transaction",BA="transaction-await",Bx=67108864,Hx=Buffer.alloc(4096);a(HA,"addSubscription");cf=class extends ts{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"}}},Zu=new Map;a(uf,"notifyFromTransactionData");a(qA,"listenToCommits")});var xA=m((Tse,GA)=>{"use strict";var lf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};GA.exports=lf});var VA=m((gse,kA)=>{"use strict";var _f=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};kA.exports=_f});var ju=m((Ose,$A)=>{"use strict";var Ef=Q(),ff=A();Ef.initSync();var qx=Ef.get(ff.CONFIG_PARAMS.STORAGE_COMPRESSION),Fx=Ef.get(ff.CONFIG_PARAMS.STORAGE_CACHING)!==!1,Gx=ff.UPDATES_PROPERTY,df=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=qx&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Fx&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===Gx)}};$A.exports=df});var tl=m((bse,KA)=>{"use strict";var Yi=Q(),pa=A();Yi.initSync();var xx=Yi.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Yi.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Yi.get(pa.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",YA=Yi.get(pa.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),kx=Yi.get(pa.CONFIG_PARAMS.STORAGE_NOREADAHEAD),el=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=xx,this.noFSAccess=!0,YA!==void 0&&(this.overlappingSync=YA),this.noReadAhead=kx}};KA.exports=el;el.MAX_DBS=1e4});var Ie=m((Ise,rO)=>{"use strict";var mf=require("lmdb"),Fr=require("fs-extra"),ar=require("path"),rl=Ft(),zA=x(),Gt=nr().LMDB_ERRORS_ENUM,sl=VA(),Sf=ju(),JA=tl(),pn=Ve(),WA=A(),{table:Vx,resetDatabases:$x}=(Ee(),ee(be)),QA=Q(),Gr=pn.INTERNAL_DBIS_NAME,XA=pn.DBI_DEFINITION_NAME,Yx="data.mdb",Kx="lock.mdb",Ta=".mdb",Wx="-lock",hf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Nr(t,r),this.key_type=this.dbi[pn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[pn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new mf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function nl(e,t){if(e===void 0)throw new Error(Gt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Gt.ENV_NAME_REQUIRED)}a(nl,"pathEnvNameValidation");async function pf(e,t,r=!0){try{await Fr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Gt.INVALID_BASE_PATH):s}try{let s=ar.join(e,t+Ta);return await Fr.access(s,Fr.constants.R_OK|Fr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Fr.access(ar.join(e,t,Yx),Fr.constants.R_OK|Fr.constants.F_OK),ar.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Gt.INVALID_ENVIRONMENT)}else throw new Error(Gt.INVALID_ENVIRONMENT);throw s}}a(pf,"validateEnvironmentPath");function il(e,t){if(rl.validateEnv(e),t===void 0)throw new Error(Gt.DBI_NAME_REQUIRED)}a(il,"validateEnvDBIName");async function Qx(e,t,r=!1,s=!1){nl(e,t);let n=ar.basename(e);t=t.toString();let i=QA.get(WA.CONFIG_PARAMS.SCHEMAS);i||QA.setProperty(WA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await pf(e,t,s),ZA(e,t,r)}catch(o){if(o.message===Gt.INVALID_ENVIRONMENT){let c=ar.join(e,t);await Fr.mkdirp(s?c:e);let u=new JA(s?c:c+Ta,!1),l=mf.open(u);l.dbis=Object.create(null);let _=new Sf(!1);l.openDB(Gr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Tf(e,t,r);return l[pn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Qx,"createEnvironment");async function zx(e,t,r,s=!0){nl(e,t),t=t.toString();let n=ar.join(e,t);return Vx({table:t,database:ar.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(zx,"copyEnvironment");async function ZA(e,t,r=!1){nl(e,t),t=t.toString();let s=Tf(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 pf(e,t),i=ar.join(e,t+Ta),o=n!=i,c=new JA(n,o),u=mf.open(c);u.dbis=Object.create(null);let l=eO(u);for(let _=0;_<l.length;_++)Nr(u,l[_]);return u[pn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(ZA,"openEnvironment");async function Jx(e,t,r=!1){nl(e,t),t=t.toString();let s=ar.join(e,t+Ta),n=await pf(e,t);if(global.lmdb_map!==void 0){let i=Tf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await jA(o),delete global.lmdb_map[i]}}await Fr.remove(n),await Fr.remove(n===s?n+Wx:ar.join(ar.dirname(n),Kx))}a(Jx,"deleteEnvironment");async function jA(e){rl.validateEnv(e);let t=e[pn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(jA,"closeEnvironment");function Tf(e,t,r=!1){let n=`${ar.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Tf,"getCachedEnvironmentName");function Xx(e){rl.validateEnv(e);let t=Object.create(null),r=Nr(e,Gr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Gr)try{t[s]=Object.assign(new sl,n)}catch{zA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Xx,"listDBIDefinitions");function eO(e){rl.validateEnv(e);let t=[],r=Nr(e,Gr);for(let{key:s}of r.getRange({start:!1}))s!==Gr&&t.push(s);return t}a(eO,"listDBIs");function Zx(e,t){let s=Nr(e,Gr).getEntry(t),n=new sl;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{zA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(Zx,"getDBIDefinition");function tO(e,t,r,s=!r){if(il(e,t),t=t.toString(),t===Gr)throw new Error(Gt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Nr(e,t)}catch(n){if(n.message===Gt.DBI_DOES_NOT_EXIST){let i=new Sf(r,s===!0),o=e.openDB(t,i),c=new sl(r===!0,s);return o[XA]=c,Nr(e,Gr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(tO,"createDBI");function Nr(e,t){if(il(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Gr?r=Zx(e,t):r=new sl,r===void 0)throw new Error(Gt.DBI_DOES_NOT_EXIST);let s;try{let n=new Sf(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(Gt.DBI_DOES_NOT_EXIST):n}return s[XA]=r,e.dbis[t]=s,s}a(Nr,"openDBI");function jx(e,t){il(e,t),t=t.toString();let r=Nr(e,t),s=r.getStats();return r[pn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(jx,"statDBI");async function ek(e,t){try{let r=ar.join(e,t+Ta);return(await Fr.stat(r)).size}catch{throw new Error(Gt.INVALID_ENVIRONMENT)}}a(ek,"environmentDataSize");function tk(e,t){if(il(e,t),t=t.toString(),t===Gr)throw new Error(Gt.CANNOT_DROP_INTERNAL_DBIS_NAME);Nr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Nr(e,Gr).removeSync(t)}a(tk,"dropDBI");function rk(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Nr(e,i)}catch(o){if(o.message===Gt.DBI_DOES_NOT_EXIST)tO(e,i,i!==t,i===t),s=!0;else throw o}}s&&$x()}a(rk,"initializeDBIs");rO.exports={openDBI:Nr,openEnvironment:ZA,createEnvironment:Qx,listDBIs:eO,listDBIDefinitions:Xx,createDBI:tO,dropDBI:tk,statDBI:jx,deleteEnvironment:Jx,initializeDBIs:rk,TransactionCursor:hf,environmentDataSize:ek,copyEnvironment:zx,closeEnvironment:jA}});var iO=m((Cse,nO)=>{"use strict";var Rf=Ie(),sk=x(),sO=nr().LMDB_ERRORS_ENUM;nO.exports=nk;async function nk(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 Rf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==sO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Rf.closeEnvironment(global.lmdb_map[s]),await Rf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==sO.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){sk.error(t)}}a(nk,"cleanLMDBMap")});var ei=m((Dse,ik)=>{ik.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 pO=m((Mse,SO)=>{"use strict";var gf=require("recursive-iterator"),ok=require("alasql"),Af=require("clone"),oO=V(),{handleHDBError:aO,hdb_errors:ak}=W(),{HDB_ERROR_MSGS:cO,HTTP_STATUS_CODES:uO}=ak,{getDatabases:ck}=(Ee(),ee(be)),uk=["DISTINCT_ARRAY"],lO=Symbol("validateTables"),Of=Symbol("validateTable"),Lse=Symbol("getAllColumns"),_O=Symbol("validateAllColumns"),ol=Symbol("findColumn"),dO=Symbol("validateOrderBy"),Ra=Symbol("validateSegment"),Nf=Symbol("validateColumn"),EO=Symbol("setColumnsForTable"),fO=Symbol("checkColumnsForAsterisk"),hO=Symbol("validateGroupBy"),mO=Symbol("hasColumns"),bf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[lO](),this[fO](),this[_O]()}[lO](){if(this[mO]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[Of](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[Of](t.table)})}}[mO](){let t=!1,r=new gf(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[Of](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=ck();if(!r[t.databaseid])throw aO(new Error,cO.SCHEMA_NOT_FOUND(t.databaseid),uO.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw aO(new Error,cO.TABLE_NOT_FOUND(t.databaseid,t.tableid),uO.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=Af(n);i.table=Af(t),this.attributes.push(i)})}[ol](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)}[fO](){let t=new gf(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[EO](r.tableid)}[EO](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new ok.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[_O](){this[Ra](this.statement.columns,!1),this[Ra](this.statement.joins,!1),this[Ra](this.statement.where,!1),this[hO](this.statement.group,!1),this[Ra](this.statement.order,!0)}[Ra](t,r){if(!t)return;let s=new gf(t),n=[];for(let{node:i,path:o}of s)!oO.isEmpty(i)&&!oO.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[dO](i):n.push(this[Nf](i)));return n}[hO](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&uk.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=Af(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[ol](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[ol](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`}[dO](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[Nf](t)}[Nf](t){let r=this[ol](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]}};SO.exports=bf});var RO=m((vse,TO)=>{"use strict";var yf=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")}};TO.exports=yf});var AO=m((Hse,gO)=>{"use strict";var If=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};gO.exports=If});var NO=m((Fse,OO)=>{"use strict";var wf=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}};OO.exports=wf});var yO=m((xse,bO)=>{"use strict";var Cf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};bO.exports=Cf});var Ki=m((Kse,CO)=>{"use strict";var lk=Ie(),_k=AO(),dk=NO(),Ek=yO(),as=Ft(),ga=nr().LMDB_ERRORS_ENUM,fk=Ve(),xs=A(),hk=V(),mk=require("uuid"),Vse=require("lmdb"),{handleHDBError:Sk,hdb_errors:pk}=W(),{OVERFLOW_MARKER:$se,MAX_SEARCH_KEY_LENGTH:Yse}=fk,IO=Q();IO.initSync();var al=IO.get(xs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Uf=xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,ti=xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Tk(e,t,r,s,n=as.getNextMonotonicTime()){Pf(e,t,r,s),Df(e,t,r);let i=new _k,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];wO(l,!0,n);let _=Rk(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Lf(o,c,s,i,n)}a(Tk,"insertRecords");function Rk(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][xs.FUNC_VAL],s[o]=c)}let u=as.getIndexedValues(c),l=e.dbis[o];if(u){al&&l.prefetch(u.map(_=>({key:_,value:n})),cl);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}al&&e.dbis[t].prefetch([n],cl),e.dbis[t].put(n,s,s[ti])})}a(Rk,"insertRecord");function gk(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(gk,"removeSkippedRecords");function wO(e,t,r){let s=r>0;(s||!Number.isInteger(e[ti]))&&(e[ti]=r||(r=as.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Uf]))&&(e[Uf]=r||as.getNextMonotonicTime()):delete e[Uf]}a(wO,"setTimestamps");function Df(e,t,r){r.indexOf(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(xs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(xs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),lk.initializeDBIs(e,t,r)}a(Df,"initializeTransaction");async function Ak(e,t,r,s,n=as.getNextMonotonicTime()){Pf(e,t,r,s),Df(e,t,r);let i=new dk,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Mf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Lf(c,u,s,i,n,o)}a(Ak,"updateRecords");async function Ok(e,t,r,s,n=as.getNextMonotonicTime()){try{Pf(e,t,r,s)}catch(u){throw Sk(u,u.message,pk.HTTP_STATUS_CODES.BAD_REQUEST)}Df(e,t,r);let i=new Ek,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;hk.isEmpty(l[t])?(_=mk.v4(),l[t]=_):_=l[t];let d=Mf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Lf(o,c,s,i,n)}a(Ok,"upsertRecords");async function Lf(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||as.getNextMonotonicTime(),gk(r,i),s}a(Lf,"finalizeWrite");function Mf(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(wO(r,!_,o),Number.isInteger(r[ti])&&l[ti]>r[ti])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let S=r[h],T=e.dbis[h];if(T===void 0)continue;let R=l[h];if(typeof S=="function"){let q=S([[l]]);Array.isArray(q)&&(S=q[0][xs.FUNC_VAL],r[h]=S)}if(S===R)continue;let O=as.getIndexedValues(R);if(O){al&&T.prefetch(O.map(q=>({key:q,value:s})),cl);for(let q=0,$=O.length;q<$;q++)T.remove(O[q],s)}if(O=as.getIndexedValues(S),O){al&&T.prefetch(O.map(q=>({key:q,value:s})),cl);for(let q=0,$=O.length;q<$;q++)T.put(O[q],s)}}let f=Object.assign({},l,r);c.put(s,f,f[ti])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Mf(e,t,r,s,n,i,o))}a(Mf,"updateUpsertRecord");function Nk(e,t,r){if(as.validateEnv(e),t===void 0)throw new Error(ga.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ga.WRITE_ATTRIBUTES_REQUIRED):new Error(ga.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Nk,"validateBasic");function Pf(e,t,r,s){if(Nk(e,t,r),!Array.isArray(s))throw s===void 0?new Error(ga.RECORDS_REQUIRED):new Error(ga.RECORDS_MUST_BE_ARRAY)}a(Pf,"validateWrite");function cl(){}a(cl,"noop");CO.exports={insertRecords:Tk,updateRecords:Ak,upsertRecords:Ok}});var cs=m((Qse,LO)=>{"use strict";var DO=V(),UO=A(),Wi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,ks=require("joi"),Tn={schema_format:{pattern:Wi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},bk=ks.alternatives(ks.string().min(1).max(Tn.schema_length.maximum).pattern(Wi).messages({"string.pattern.base":"{:#label} "+Tn.schema_format.message}),ks.number()).required(),yk=ks.alternatives(ks.string().min(1).max(Tn.schema_length.maximum).pattern(Wi).messages({"string.pattern.base":"{:#label} "+Tn.schema_format.message}),ks.number()),Ik=ks.alternatives(ks.string().min(1).max(Tn.schema_length.maximum).pattern(Wi).messages({"string.pattern.base":"{:#label} "+Tn.schema_format.message}),ks.number()).required();function wk(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>Tn.schema_length.maximum?`'${e}' maximum of 250 characters`:Wi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(wk,"checkValidTable");function Ck(e,t){return DO.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Ck,"validateSchemaExists");function Uk(e,t){let r=t.state.ancestors[0].schema;return DO.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Uk,"validateTableExists");function Dk(e,t){return e.toLowerCase()===UO.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${UO.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(Dk,"validateSchemaName");LO.exports={common_validators:Tn,schema_regex:Wi,hdb_schema_table:bk,validateSchemaExists:Ck,validateTableExists:Uk,validateSchemaName:Dk,checkValidTable:wk,hdb_database:yk,hdb_table:Ik}});var ul=m((Jse,MO)=>{var{common_validators:us}=cs(),Oa=Be(),Aa="is required",Qe={database:{presence:!1,format:us.schema_format,length:us.schema_length},schema:{presence:!1,format:us.schema_format,length:us.schema_length},table:{presence:!0,format:us.schema_format,length:us.schema_length},attribute:{presence:!0,format:us.schema_format,length:us.schema_length},hash_attribute:{presence:!0,format:us.schema_format,length:us.schema_length}};function Na(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(Na,"makeAttributesStrings");function Lk(e){return e=Na(e),Qe.table.presence=!1,Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,Oa.validateObject(e,Qe)}a(Lk,"schema_object");function Mk(e){return e=Na(e),Qe.table.presence={message:Aa},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,Oa.validateObject(e,Qe)}a(Mk,"table_object");function Pk(e){return e=Na(e),Qe.table.presence={message:Aa},Qe.attribute.presence=!1,Oa.validateObject(e,Qe)}a(Pk,"create_table_object");function vk(e){return e=Na(e),Qe.table.presence={message:Aa},Qe.attribute.presence={message:Aa},Qe.hash_attribute.presence=!1,Oa.validateObject(e,Qe)}a(vk,"attribute_object");function Bk(e){return e=Na(e),Qe.table.presence={message:Aa},Qe.attribute.presence=!1,Qe.hash_attribute.presence=!1,Oa.validateObject(e,Qe)}a(Bk,"describe_table");function Hk(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(Hk,"validateTableResidence");MO.exports={schema_object:Lk,create_table_object:Pk,table_object:Mk,attribute_object:vk,describe_table:Bk,validateTableResidence:Hk}});var vO=m((Zse,PO)=>{"use strict";var qk=require("uuid"),vf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||qk.v4(),this.schema_table=`${this.schema}.${this.table}`}};PO.exports=vf});var ll=m((ene,BO)=>{"use strict";var Fk=vO(),Bf=class extends Fk{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}};BO.exports=Bf});var qO=m((rne,HO)=>{"use strict";HO.exports=xk;var Gk="inserted";function xk(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Gk?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(xk,"returnObject")});var _l=m((nne,VO)=>{"use strict";var kk=A(),Hf=Ie(),Vk=Ki(),{getSystemSchemaPath:$k,getSchemaPath:Yk}=Ce(),Kk=ei(),Wk=ul(),Qk=ll(),zk=qO(),{handleHDBError:FO,hdb_errors:xO}=W(),GO=V(),{HTTP_STATUS_CODES:Jk}=xO,qf=Kk.hdb_attribute,kO=[];for(let e=0;e<qf.attributes.length;e++)kO.push(qf.attributes[e].attribute);var Xk="inserted";VO.exports=Zk;async function Zk(e){let t=Wk.attribute_object(e);if(t)throw FO(new Error,t.message,xO.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&GO.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FO(new Error,r,Jk.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=GO.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 Qk(e.schema,e.table,e.attribute,e.id);try{let i=await Hf.openEnvironment(Yk(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}`);Hf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Hf.openEnvironment($k(),kk.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Vk.insertRecords(o,qf.hash_attribute,kO,[n]);return zk(Xk,c,{records:[n]},u)}catch(i){throw i}}a(Zk,"lmdbCreateAttribute")});var Gf=m((one,YO)=>{var{hdb_table:jk,hdb_database:$O}=cs(),eV=Be(),Ff=require("joi"),tV={undefined:"undefined",null:"null"},rV=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||tV[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"),sV=Ff.object({database:$O,schema:$O,table:jk,records:Ff.array().items(Ff.object().custom(rV)).required()});YO.exports=function(e){return eV.validateBySchema(e,sV)}});var ba=m((une,WO)=>{"use strict";var Vs=V(),KO=x(),cne=Gf(),{getDatabases:nV}=(Ee(),ee(be)),{ClientError:ri}=W();WO.exports=iV;function iV(e){if(Vs.isEmpty(e))throw new ri("invalid update parameters defined.");if(Vs.isEmptyOrZeroLength(e.schema))throw new ri("invalid schema specified.");if(Vs.isEmptyOrZeroLength(e.table))throw new ri("invalid table specified.");if(!Array.isArray(e.records))throw new ri("records must be an array");let t=nV()[e.schema]?.[e.table];if(Vs.isEmpty(t))throw new ri(`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&&Vs.isEmptyOrZeroLength(o[r]))throw KO.error("a valid hash attribute must be provided with update record:",o),new ri("a valid hash attribute must be provided with update record, check log for more info");if(!Vs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw KO.error(`a valid hash value must be provided with ${e.operation} record:`,o),new ri(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Vs.isEmpty(o[r])&&o[r]!==""&&s.has(Vs.autoCast(o[r]))&&(o.skip=!0),s.add(Vs.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(iV,"insertUpdateValidate")});var ya=m((_ne,QO)=>{"use strict";var oV=A().OPERATIONS_ENUM,xf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=oV.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};QO.exports=xf});var Ua=m((fne,zO)=>{"use strict";var Ene=ya(),dl=A(),Vf=V(),kf=x(),aV=require("uuid"),{handleHDBError:Ia,hdb_errors:cV}=W(),{HDB_ERROR_MSGS:wa,HTTP_STATUS_CODES:Ca}=cV;zO.exports=uV;function uV(e,t,r){for(let n=0;n<t.length;n++)lV(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];_V(i,r,e.operation)}}a(uV,"processRows");function lV(e){if(Buffer.byteLength(String(e))>dl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ia(new Error,wa.ATTR_NAME_LENGTH_ERR(e),Ca.BAD_REQUEST,void 0,void 0,!0);if(Vf.isEmptyOrZeroLength(e)||Vf.isEmpty(e.trim()))throw Ia(new Error,wa.ATTR_NAME_NULLISH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(lV,"validateAttribute");function _V(e,t,r){if(!e.hasOwnProperty(t)||Vf.isEmptyOrZeroLength(e[t])){if(r===dl.OPERATIONS_ENUM.INSERT||r===dl.OPERATIONS_ENUM.UPSERT){e[t]=aV.v4();return}throw kf.error("Update transaction aborted due to record with no hash value:",e),Ia(new Error,wa.RECORD_MISSING_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>dl.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw kf.error(e),Ia(new Error,wa.HASH_VAL_LENGTH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw kf.error(e),Ia(new Error,wa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ca.BAD_REQUEST,void 0,void 0,!0)}a(_V,"validateHash")});var El=m((mne,XO)=>{"use strict";var JO=V(),dV=A(),EV=x(),fV=_l(),hV=ll(),mV=$s(),{SchemaEventMsg:SV}=xr(),pV="already exists in";XO.exports=TV;async function TV(e,t,r){if(JO.isEmptyOrZeroLength(r))return r;let s=[];JO.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 RV(e,t.schema,t.name,i)})),n}a(TV,"lmdbCheckForNewAttributes");async function RV(e,t,r,s){let n=new hV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await gV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(pV))EV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(RV,"createNewAttribute");async function gV(e){let t;return t=await fV(e),mV.signalSchemaChange(new SV(process.pid,dV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(gV,"createAttribute")});var Qi=m((pne,ZO)=>{"use strict";var $f=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}};ZO.exports=$f});var eN=m((Rne,jO)=>{"use strict";var AV=Qi(),OV=A().OPERATIONS_ENUM,Yf=class extends AV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(OV.INSERT,r,s,n,i),this.records=t}};jO.exports=Yf});var rN=m((Ane,tN)=>{"use strict";var NV=Qi(),bV=A().OPERATIONS_ENUM,Kf=class extends NV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(bV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};tN.exports=Kf});var nN=m((Nne,sN)=>{"use strict";var yV=Qi(),IV=A().OPERATIONS_ENUM,Wf=class extends yV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(IV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};sN.exports=Wf});var oN=m((yne,iN)=>{"use strict";var wV=Qi(),CV=A().OPERATIONS_ENUM,Qf=class extends wV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(CV.DELETE,s,n,t,i),this.original_records=r}};iN.exports=Qf});var Da=m((Cne,lN)=>{"use strict";var wne=require("path"),aN=Ie(),UV=eN(),DV=rN(),LV=nN(),MV=oN(),zi=Ve(),cN=V(),{CONFIG_PARAMS:PV}=A(),uN=Q();uN.initSync();var fl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:vV}=Ce();lN.exports=BV;async function BV(e,t){if(uN.get(PV.LOGGING_AUDITLOG)===!1)return;let r=vV(e.schema,e.table),s=await aN.openEnvironment(r,e.table,!0),n=HV(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){aN.initializeDBIs(s,zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,zi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),cN.isEmpty(n.user_name)||s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[zi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(BV,"writeTransaction");function HV(e,t){let r=cN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new UV(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new DV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new LV(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new MV(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(HV,"createTransactionObject")});var zf=m((Lne,_N)=>{"use strict";var qV=ba(),Dne=ya(),La=A(),FV=Ua(),GV=Ki().insertRecords,xV=Ie(),kV=x(),VV=El(),{getSchemaPath:$V}=Ce(),YV=Da();_N.exports=KV;async function KV(e){try{let{schema_table:t,attributes:r}=qV(e);FV(e,r,t.hash_attribute),e.schema!==La.SYSTEM_SCHEMA_NAME&&(r.includes(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(La.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await VV(e.hdb_auth_header,t,r),n=$V(e.schema,e.table),i=await xV.openEnvironment(n,e.table),o=await GV(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await YV(e,o)}catch(c){kV.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(KV,"lmdbCreateRecords")});var fN=m((Pne,EN)=>{"use strict";var dN=A(),WV=zf(),QV=ya(),zV=require("fs-extra"),{getSchemaPath:JV}=Ce();EN.exports=XV;async function XV(e){let t=[{name:e.schema,createddate:Date.now()}],r=new QV(dN.SYSTEM_SCHEMA_NAME,dN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await WV(r),await zV.mkdirp(JV(e.schema))}a(XV,"lmdbCreateSchema")});var mN=m((Bne,hN)=>{"use strict";var Jf=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}};hN.exports=Jf});var RN=m((xne,TN)=>{"use strict";var SN=Ie(),Xf=Ft(),Zf=nr().LMDB_ERRORS_ENUM,ZV=Ve(),pN=x(),qne=V(),jV=require("lmdb"),e$=mN(),t$=A(),{OVERFLOW_MARKER:Fne,MAX_SEARCH_KEY_LENGTH:Gne}=ZV,r$=t$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function s$(e,t,r,s){if(Xf.validateEnv(e),t===void 0)throw new Error(Zf.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Zf.IDS_REQUIRED):new Error(Zf.IDS_MUST_BE_ITERABLE);try{let n=SN.listDBIs(e);SN.initializeDBIs(e,t,n);let i=new e$,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[r$]>s){i.skipped.push(o);continue}let S=e.dbis[t].ifVersion(o,jV.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let R=n[T];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],q=h[R];if(q!=null)try{let $=Xf.getIndexedValues(q);if($)for(let w=0,I=$.length;w<I;w++)O.remove($[w],o)}catch{pN.warn(`cannot delete from attribute: ${R}, ${q}:${o}`)}}});c.push(S),u.push(o),i.original_records.push(h)}catch(h){pN.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=Xf.getNextMonotonicTime(),i}catch(n){throw n}}a(s$,"deleteRecords");TN.exports={deleteRecords:s$}});var Ma=m((Vne,AN)=>{"use strict";var Ji=V(),n$=RN(),i$=Ie(),{getSchemaPath:o$}=Ce(),a$=Da(),c$=x();AN.exports=u$;async function u$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ji.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ji.isEmptyOrZeroLength(e.hash_values)&&!Ji.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ji.isEmpty(u)||e.hash_values.push(u)}}if(Ji.isEmptyOrZeroLength(e.hash_values))return gN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ji.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=o$(e.schema,e.table),i=await i$.openEnvironment(n,e.table),o=await n$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await a$(e,o)}catch(c){c$.error(`unable to write transaction due to ${c.message}`)}return gN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(u$,"lmdbDeleteRecords");function gN(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(gN,"createDeleteResponse")});var eh=m((Kne,ON)=>{"use strict";var l$=A(),Yne=Ft();function jf(e,t){let r=Object.create(null);if(t.length===1&&l$.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(jf,"parseRow");function _$(e,t,r,s){let n=jf(r,e);s.push(n)}a(_$,"searchAll");function d$(e,t,r,s){let n=jf(r,e);s[t]=n}a(d$,"searchAllToMap");function E$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(E$,"iterateDBI");function si(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(si,"pushResults");function f$(e,t,r,s,n,i){t.toString().endsWith(e)&&si(t,r,s,n,i)}a(f$,"endsWith");function h$(e,t,r,s,n,i){t.toString().includes(e)&&si(t,r,s,n,i)}a(h$,"contains");function m$(e,t,r,s,n,i){t>e&&si(t,r,s,n,i)}a(m$,"greaterThanCompare");function S$(e,t,r,s,n,i){t>=e&&si(t,r,s,n,i)}a(S$,"greaterThanEqualCompare");function p$(e,t,r,s,n,i){t<e&&si(t,r,s,n,i)}a(p$,"lessThanCompare");function T$(e,t,r,s,n,i){t<=e&&si(t,r,s,n,i)}a(T$,"lessThanEqualCompare");ON.exports={parseRow:jf,searchAll:_$,searchAllToMap:d$,iterateDBI:E$,endsWith:f$,contains:h$,greaterThanCompare:m$,greaterThanEqualCompare:S$,lessThanCompare:p$,lessThanEqualCompare:T$,pushResults:si}});var Xi=m((Xne,UN)=>{"use strict";var Rn=Ie(),Qne=x(),cr=Ft(),hl=Ve(),$e=nr().LMDB_ERRORS_ENUM,zne=V(),R$=A(),ml=eh(),{parseRow:g$}=ml,Jne=require("lmdb"),{OVERFLOW_MARKER:NN,MAX_SEARCH_KEY_LENGTH:A$}=hl;function bN(e,t,r,s=!1,n=void 0,i=void 0){return ni(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(bN,"iterateFullIndex");function Pa(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ni(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(q=>({value:q}))):d.getRange(O)})}a(Pa,"iterateRangeBetween");function ni(e,t,r,s){let n=e.database||e,i=Rn.openDBI(n,r);i[hl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rn.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(ni,"setupTransaction");function yN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(NN)){if(!n)if(r)n=Rn.openDBI(e,r);else{let u=Rn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Rn.openDBI(e,u[l]),!n[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(yN,"getOverflowCheck");function O$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return ni(e,t,t,(o,c,u)=>(Sl(r),r=va(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>g$(l.value,r))))}a(O$,"searchAll");function N$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);Sl(r),r=va(e.database||e,r);let o=new Map;for(let{key:c,value:u}of bN(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(N$,"searchAllToMap");function b$(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=bN(e,void 0,t,r,s,n),c=o.transaction,u=yN(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(b$,"iterateDBI");function y$(e,t){if(cr.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);return Rn.statDBI(e,t).entryCount}a(y$,"countAll");function I$(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),ni(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(I$,"equals");function w$(e,t,r){return gn(e,t,r),Rn.openDBI(e,t).getValuesCount(r)}a(w$,"count");function C$(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),ni(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(C$,"startsWith");function U$(e,t,r,s,n=!1,i=void 0,o=void 0){return IN(e,t,r,s,n,i,o,!0)}a(U$,"endsWith");function IN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return gn(e,r,s),ni(e,null,r,(u,l,_,d)=>{let E=yN(_,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(NN)?l.getValues(f,{transaction:u}).map(S=>{let T=E(f,S);if(c?T.endsWith(s):T.includes(s))return{key:T,value:S}}).filter(S=>S):(c?h.endsWith(s):h.includes(s))?l[hl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(S=>({key:f,value:S})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(IN,"contains");function D$(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!0,!1)}a(D$,"greaterThan");function L$(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Pa(e,t,r,s,u,n,i,o,!1,!1)}a(L$,"greaterThanEqual");function M$(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!0)}a(M$,"lessThan");function P$(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Pa(e,t,r,u,s,n,i,o,!1,!1)}a(P$,"lessThanEqual");function v$(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error($e.START_VALUE_REQUIRED);if(n===void 0)throw new Error($e.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error($e.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Pa(e,t,r,s,n,i,o,c)}a(v$,"between");function B$(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),r=va(n,r),s===void 0)throw new Error($e.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ml.parseRow(c,r)),o}a(B$,"searchByHash");function H$(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(H$,"checkHashExists");function q$(e,t,r,s,n=[]){return CN(e,t,r,s,n),wN(e,t,r,s,n).map(i=>i[1])}a(q$,"batchSearchByHash");function F$(e,t,r,s,n=[]){CN(e,t,r,s,n);let i=new Map;for(let[o,c]of wN(e,t,r,s,n))i.set(o,c);return i}a(F$,"batchSearchByHashToMap");function wN(e,t,r,s,n=[]){return ni(e,t,t,(i,o,c)=>{r=va(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,ml.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(wN,"batchHashSearch");function CN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error($e.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error($e.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error($e.IDS_MUST_BE_ITERABLE)}a(CN,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error($e.FETCH_ATTRIBUTES_REQUIRED):new Error($e.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"validateFetchAttributes");function gn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error($e.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error($e.SEARCH_VALUE_REQUIRED);if(r?.length>A$)throw new Error($e.SEARCH_VALUE_TOO_LARGE)}a(gn,"validateComparisonFunctions");function va(e,t){return t.length===1&&R$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rn.listDBIs(e)),t}a(va,"setGetWholeRowAttributes");UN.exports={searchAll:O$,searchAllToMap:N$,count:w$,countAll:y$,equals:I$,startsWith:C$,endsWith:U$,contains:IN,searchByHash:B$,setGetWholeRowAttributes:va,batchSearchByHash:q$,batchSearchByHashToMap:F$,checkHashExists:H$,iterateDBI:b$,greaterThan:D$,greaterThanEqual:L$,lessThan:M$,lessThanEqual:P$,between:v$}});var Zi=m((jne,vN)=>{var DN=require("lodash"),LN=Be(),Ue=require("joi"),G$=V(),{hdb_schema_table:pl,checkValidTable:MN,hdb_table:PN,hdb_database:Tl}=cs(),{handleHDBError:x$,hdb_errors:k$}=W(),{getDatabases:V$}=(Ee(),ee(be)),{HTTP_STATUS_CODES:$$}=k$,Y$=Ue.object({database:Tl,schema:Tl,table:PN,search_attribute:pl,search_value:Ue.any().required(),get_attributes:Ue.array().min(1).items(pl).optional(),desc:Ue.bool(),limit:Ue.number().integer().min(1),offset:Ue.number().integer().min(0)}),K$=Ue.object({database:Tl,schema:Tl,table:PN,operator:Ue.string().valid("and","or").default("and").lowercase(),offset:Ue.number().integer().min(0),limit:Ue.number().integer().min(1),get_attributes:Ue.array().min(1).items(pl).optional(),conditions:Ue.array().min(1).items(Ue.object({search_attribute:pl,search_type:Ue.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ue.when("search_type",{switch:[{is:"equals",then:Ue.any()},{is:"between",then:Ue.array().items(Ue.alternatives([Ue.string(),Ue.number()])).length(2)}],otherwise:Ue.alternatives(Ue.string(),Ue.number())}).required()})).required()});vN.exports=function(e,t){let r=null;switch(t){case"value":r=LN.validateBySchema(e,Y$);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(MN("database",e.schema)),i(MN("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=LN.validateBySchema(e,K$);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=G$.checkGlobalSchemaTable(e.schema,e.table);if(n)return x$(new Error,n,$$.NOT_FOUND);let o=V$()[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=DN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!DN.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 th=m((tie,BN)=>{"use strict";var W$=Ie(),Q$=Zi(),{getSchemaPath:z$}=Ce();BN.exports=J$;function J$(e){let t=Q$(e,"hashes");if(t)throw t;let r=z$(e.schema,e.table);return W$.openEnvironment(r,e.table)}a(J$,"initialize")});var rh=m((sie,HN)=>{"use strict";var X$=Xi(),Z$=th();HN.exports=j$;async function j$(e){let t=await Z$(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return X$.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(j$,"lmdbGetDataByHash")});var ji=m((iie,qN)=>{"use strict";var sh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};qN.exports=sh});var GN=m((cie,FN)=>{"use strict";var aie=ji(),eY=Xi(),tY=th();FN.exports=rY;async function rY(e){let t=await tY(e),r=global.hdb_schema[e.schema][e.table];return eY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(rY,"lmdbSearchByHash")});var ls=m((lie,xN)=>{"use strict";var nh=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=_}};xN.exports=nh});var Rl=m((die,WN)=>{"use strict";var It=Xi(),sY=Ie(),nY=V(),oe=Ve(),ii=A(),iY=ei(),kN=nr().LMDB_ERRORS_ENUM,{getSchemaPath:oY}=Ce(),Ys=ii.SEARCH_WILDCARDS;async function aY(e,t,r){let s;e.schema===ii.SYSTEM_SCHEMA_NAME?s=iY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=KN(e,s.hash_attribute,r,t);return $N(e,n,s.hash_attribute,r)}a(aY,"prepSearch");async function $N(e,t,r,s){let n=oY(e.schema,e.table),i=await sY.openEnvironment(n,e.table),o=YN(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(cY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?VN(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?VN(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?It.batchSearchByHashToMap(c,r,e.get_attributes,l):It.batchSearchByHash(c,r,e.get_attributes,l)}a($N,"executeSearch");function YN(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=It.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=It.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=It.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=It.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return It.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return It.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return It.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return It.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=It.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=It.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=It.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=It.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=It.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(YN,"searchByType");function VN(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(VN,"createMapFromIterable");function cY(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(cY,"checkToFetchMore");function KN(e,t,r,s){if(nY.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),Ys.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Ys[0])<0&&n.indexOf(Ys[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(Ys.indexOf(i)>=0&&Ys.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(Ys.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(Ys.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(Ys[0])||n.includes(Ys[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(kN.UNKNOWN_SEARCH_TYPE)}else switch(s){case ii.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case ii.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case ii.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case ii.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case ii.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(kN.UNKNOWN_SEARCH_TYPE)}}a(KN,"createSearchTypeFromSearchObject");WN.exports={executeSearch:$N,createSearchTypeFromSearchObject:KN,prepSearch:aY,searchByType:YN}});var zN=m((hie,QN)=>{"use strict";var fie=ls(),uY=Zi(),lY=V(),_Y=A(),dY=Rl();QN.exports=EY;function EY(e,t){if(!lY.isEmpty(t)&&_Y.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=uY(e,"value");if(s)throw s;let n=!0;return dY.prepSearch(e,t,n)}a(EY,"lmdbGetDataByValue")});var Ba=m((pie,JN)=>{"use strict";var Sie=ls(),fY=Zi(),hY=V(),mY=A(),SY=Rl();JN.exports=pY;async function pY(e,t){if(!hY.isEmpty(t)&&mY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=fY(e,"value");if(s)throw s;return SY.prepSearch(e,t,!1)}a(pY,"lmdbSearchByValue")});var ZN=m((gie,XN)=>{"use strict";var Rie=Ve(),ih=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}},oh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ah=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};XN.exports={SearchByConditionsObject:ih,SearchCondition:oh,SortAttribute:ah}});var sb=m((bie,rb)=>{"use strict";var Oie=ZN().SearchByConditionsObject,TY=ls(),RY=Zi(),ch=Xi(),gl=Ve(),{Resource:Nie}=(rs(),ee(ef)),tb=Rl(),gY=eh(),AY=require("lodash"),{getSchemaPath:OY}=Ce(),jN=Ie(),{handleHDBError:NY,hdb_errors:bY}=W(),{HTTP_STATUS_CODES:yY}=bY,IY=1e8;rb.exports=wY;async function wY(e){let t=RY(e,"conditions");if(t)throw NY(t,t.message,yY.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=OY(e.schema,e.table),s=await jN.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)jN.openDBI(s,l.search_attribute);let i=AY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=ch.count(s,l.search_attribute,l.search_value):_===gl.SEARCH_TYPES.CONTAINS||_===gl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=IY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await eb(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(tb.filterByType),d=_.length,E=ch.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=>gY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await eb(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=ch.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(wY,"lmdbSearchByConditions");async function eb(e,t,r,s){let n=new TY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===gl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,tb.searchByType(e,n,i,s).map(o=>o.value)}a(eb,"executeConditionSearch")});var Ha=m((Iie,nb)=>{"use strict";var CY=A().OPERATIONS_ENUM,uh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=CY.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};nb.exports=uh});var lh=m((Cie,db)=>{"use strict";var cb=ls(),ub=Ha(),lb=Ba(),_b=Ma(),xt=A(),ib=V(),ob=Ie(),{getTransactionAuditStorePath:UY,getSchemaPath:DY}=Ce(),ab=x();db.exports=LY;async function LY(e){try{if(ib.isEmpty(global.hdb_schema[e.schema])||ib.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await MY(e),await PY(e);let t=DY(e.schema,e.table);try{await ob.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")ab.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=UY(e.schema,e.table);await ob.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")ab.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(LY,"lmdbDropTable");async function MY(e){let t=new cb(xt.SYSTEM_SCHEMA_NAME,xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await lb(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 ub(xt.SYSTEM_SCHEMA_NAME,xt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await _b(n)}a(MY,"deleteAttributesFromSystem");async function PY(e){let t=new cb(xt.SYSTEM_SCHEMA_NAME,xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,xt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await lb(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 ub(xt.SYSTEM_SCHEMA_NAME,xt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await _b(n)}catch(i){throw i}}a(PY,"dropTableFromSystem")});var fb=m((Die,Eb)=>{"use strict";var vY=require("fs-extra"),BY=ls(),HY=ji(),qY=Ha(),FY=lh(),GY=Ma(),xY=rh(),kY=Ba(),Ks=A(),{getSchemaPath:VY}=Ce(),{handleHDBError:$Y,hdb_errors:YY}=W(),{HDB_ERROR_MSGS:KY,HTTP_STATUS_CODES:WY}=YY;Eb.exports=QY;async function QY(e){let t;try{t=await zY(e.schema);let r=new BY(Ks.SYSTEM_SCHEMA_NAME,Ks.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await kY(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await FY(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new qY(Ks.SYSTEM_SCHEMA_NAME,Ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await GY(n);let i=VY(t);await vY.remove(i)}catch(r){throw r}}a(QY,"lmdbDropSchema");async function zY(e){let t=new HY(Ks.SYSTEM_SCHEMA_NAME,Ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Ks.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await xY(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw $Y(new Error,KY.SCHEMA_NOT_FOUND(e),WY.NOT_FOUND,void 0,void 0,!0);return s}a(zY,"validateDropSchema")});var dh=m((Mie,hb)=>{"use strict";var _h=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};hb.exports=_h});var Sb=m((Bie,mb)=>{"use strict";var JY=require("fs-extra"),Al=Ie(),{getTransactionAuditStorePath:XY}=Ce(),Eh=Ve(),vie=dh();mb.exports=ZY;async function ZY(e){let t;try{let r=XY(e.schema,e.table);await JY.mkdirp(r),t=await Al.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{Al.createDBI(t,Eh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Al.createDBI(t,Eh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Al.createDBI(t,Eh.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(ZY,"createTransactionsAuditEnvironment")});var gb=m((qie,Rb)=>{"use strict";var fh=A(),pb=Ie(),jY=Ki(),{getSystemSchemaPath:e1,getSchemaPath:t1}=Ce(),r1=ei(),s1=_l(),hh=ll(),n1=x(),i1=Sb(),Sh=r1.hdb_table,Tb=[];for(let e=0;e<Sh.attributes.length;e++)Tb.push(Sh.attributes[e].attribute);Rb.exports=o1;async function o1(e,t){let r=t1(t.schema,t.table),s=new hh(t.schema,t.table,fh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new hh(t.schema,t.table,fh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new hh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await pb.createEnvironment(r,t.table),e!==void 0){let o=await pb.openEnvironment(e1(),fh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await jY.insertRecords(o,Sh.hash_attribute,Tb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await mh(s),await mh(n),await mh(i)}await i1(t)}catch(o){throw o}}a(o1,"lmdbCreateTable");async function mh(e){try{await s1(e)}catch(t){n1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(mh,"createAttribute")});var Ob=m((Gie,Ab)=>{"use strict";var a1=ba(),c1=Ua(),u1=El(),qa=A(),l1=Ki().updateRecords,_1=Ie(),{getSchemaPath:d1}=Ce(),E1=Da(),f1=x();Ab.exports=h1;async function h1(e){try{let{schema_table:t,attributes:r}=a1(e);c1(e,r,t.hash_attribute),e.schema!==qa.SYSTEM_SCHEMA_NAME&&(r.includes(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(qa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await u1(e.hdb_auth_header,t,r),n=d1(e.schema,e.table),i=await _1.openEnvironment(n,e.table),o=await l1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await E1(e,o)}catch(c){f1.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(h1,"lmdbUpdateRecords")});var bb=m((kie,Nb)=>{"use strict";var m1=A().OPERATIONS_ENUM,ph=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=m1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Nb.exports=ph});var Ib=m((Yie,yb)=>{"use strict";var $ie=bb(),S1=ba(),p1=Ua(),T1=El(),Fa=A(),R1=Ki().upsertRecords,g1=Ie(),{getSchemaPath:A1}=Ce(),O1=Da(),N1=x(),{handleHDBError:b1,hdb_errors:y1}=W();yb.exports=I1;async function I1(e){let t;try{t=S1(e)}catch(u){throw b1(u,u.message,y1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;p1(e,s,r.hash_attribute),e.schema!==Fa.SYSTEM_SCHEMA_NAME&&(s.includes(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Fa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await T1(e.hdb_auth_header,r,s),i=A1(e.schema,e.table),o=await g1.openEnvironment(i,e.table),c=await R1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await O1(e,c)}catch(u){N1.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(I1,"lmdbUpsertRecords")});var Cb=m((Wie,wb)=>{"use strict";var Th=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};wb.exports=Th});var Db=m((zie,Ub)=>{"use strict";var Rh=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}};Ub.exports=Rh});var Pb=m((Zie,Mb)=>{"use strict";var gh=Ie(),{getTransactionAuditStorePath:w1}=Ce(),Xie=Cb(),Ga=Ve(),C1=V(),Lb=Db(),U1=require("util").promisify,D1=U1(setTimeout),L1=1e4,M1=100;Mb.exports=P1;async function P1(e){let t=w1(e.schema,e.table),r=await gh.openEnvironment(t,e.table,!0),s=gh.listDBIs(r);gh.initializeDBIs(r,Ga.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Lb;do n=await v1(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 D1(M1);while(n.transactions_deleted>0);return i}a(P1,"deleteAuditLogsBefore");async function v1(e,t){let r=new Lb;try{let s=e.dbis[Ga.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[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];C1.isEmpty(c)||(n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ga.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>L1)break}return await n,r}catch(s){throw s}}a(v1,"deleteTransactions")});var Bb=m((eoe,vb)=>{"use strict";var Ah=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};vb.exports=Ah});var qb=m((soe,Hb)=>{"use strict";var B1=ls(),H1=Ha(),roe=Bb(),_s=A(),q1=V(),Oh=Ie(),F1=ei(),G1=Ba(),x1=Ma(),{getSchemaPath:k1}=Ce();Hb.exports=V1;async function V1(e,t=!0){let r;e.schema===_s.SYSTEM_SCHEMA_NAME?r=F1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await Y1(e),n=k1(e.schema,e.table),i=await Oh.openEnvironment(n,e.table);return t===!0&&await $1(e,i,r.hash_attribute),Oh.dropDBI(i,e.attribute),s}a(V1,"lmdbDropAttribute");async function $1(e,t,r){let s=Oh.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($1,"removeAttributeFromAllObjects");async function Y1(e){let t=new B1(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await G1(t)).filter(o=>o[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(q1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[_s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new H1(_s.SYSTEM_SCHEMA_NAME,_s.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return x1(i)}a(Y1,"dropAttributeFromSystem")});var $b=m((ooe,Vb)=>{"use strict";var Nh=Ie(),eo=Ve(),ioe=Ft(),bh=A(),Fb=V(),{getTransactionAuditStorePath:K1}=Ce(),W1=Xi(),Ol=Qi(),Q1=x();Vb.exports=z1;async function z1(e){let t=K1(e.schema,e.table),r=await Nh.openEnvironment(t,e.table,!0),s=Nh.listDBIs(r);Nh.initializeDBIs(r,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return Gb(r,e.search_values);case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,X1(r,e.search_values,n);case bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return J1(r,e.search_values);default:return Gb(r)}}a(z1,"readAuditLog");function Gb(e,t=[0,Date.now()]){Fb.isEmpty(t[0])&&(t[0]=0),Fb.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[eo.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 Ol,n))}a(Gb,"searchTransactionsByTimestamp");function J1(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[eo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,kb(e,i))}return Object.fromEntries(r)}a(J1,"searchTransactionsByUsername");function X1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=W1.equals(e,eo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,eo.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=kb(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);xb(u,"records",r,_,o),xb(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(X1,"searchTransactionsByHashValues");function xb(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 Ol(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Ol(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(xb,"loopRecords");function kb(e,t){let r=[];try{let s=e.dbis[eo.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 Ol,i);r.push(o)}}catch(i){Q1.warn(i)}return r}catch(s){throw s}}a(kb,"batchSearchTransactions")});var Kb=m((loe,Yb)=>{"use strict";var{getSchemaPath:coe}=Ce(),uoe=Ie(),{database:Z1}=(Ee(),ee(be));Yb.exports={writeTransaction:j1};async function j1(e,t,r){return Z1({database:e,table:t}).transaction(r)}a(j1,"writeTransaction")});var Jb=m((doe,zb)=>{"use strict";var{getSchemaPath:Wb}=Ce(),Qb=Ie();zb.exports={flush:eK,resetReadTxn:tK};async function eK(e,t){return(await Qb.openEnvironment(Wb(e,t),t.toString())).flushed}a(eK,"flush");async function tK(e,t){try{(await Qb.openEnvironment(Wb(e,t),t.toString())).resetReadTxn()}catch{}}a(tK,"resetReadTxn")});var ey=m((foe,jb)=>{"use strict";var{Readable:rK}=require("stream"),{getDatabases:sK}=(Ee(),ee(be)),{readSync:nK,openSync:iK,createReadStream:Xb}=require("fs"),{open:oK}=require("lmdb"),Zb=ju(),aK=tl(),{INTERNAL_DBIS_NAME:cK}=Ve();jb.exports=lK;var yh=32768,uK=100;async function lK(e){let t=e.database||e.schema||"data",r=sK()[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=oK({noSync:!0,maxDbs:aK.MAX_DBS}),E,f=d.openDB(cK,new Zb(!1)),h=_.useReadTransaction(),S=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(q=>R.startsWith?.(q+"/"))){f.put(R,O);let[,q]=R.split("/"),$=!q,w=new Zb(!$,$);w.encoding="binary";let I=d.openDB(R,w),D=_.openDB(R,w);for(let{key:z,version:M,value:te}of D.getRange({transaction:h,versions:$}))E=I.put(z,te,M),S++%uK===0&&await new Promise(Ne=>setTimeout(Ne,20))}await E;let T=Xb(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=iK(o.path);return o.transaction(()=>{let l=Buffer.alloc(yh);nK(c,l,0,yh);let _=o.useReadTransaction(),d=Xb(null,{fd:c,start:yh}),E=new rK.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(lK,"getBackup")});var sy=m((moe,ry)=>{"use strict";var _K=x(),{handleHDBError:dK}=W(),EK=RO(),fK=_l(),hK=zf(),mK=fN(),SK=Ma(),pK=rh(),TK=GN(),RK=zN(),gK=Ba(),AK=sb(),OK=fb(),NK=gb(),bK=Ob(),yK=Ib(),IK=Pb(),wK=lh(),CK=qb(),UK=$b(),DK=Kb(),ty=Jb(),LK=ey(),Ih=class extends EK{static{a(this,"LMDBBridge")}async searchByConditions(t){return AK(t)}async getDataByHash(t){return await pK(t)}async searchByHash(t){return await TK(t)}async getDataByValue(t,r){return await RK(t,r)}async searchByValue(t){return await gK(t)}async createSchema(t){return await mK(t)}async dropSchema(t){return await OK(t)}async createTable(t,r){return await NK(t,r)}async dropTable(t){return await wK(t)}async createAttribute(t){return await fK(t)}async createRecords(t){return await hK(t)}async updateRecords(t){return await bK(t)}async upsertRecords(t){try{return await yK(t)}catch(r){throw dK(r,null,null,_K.ERR,r)}}async deleteRecords(t){return await SK(t)}async dropAttribute(t){return await CK(t)}async deleteAuditLogsBefore(t){return await IK(t)}async readAuditLog(t){return await UK(t)}writeTransaction(t,r,s){return DK.writeTransaction(t,r,s)}flush(t,r){return ty.flush(t,r)}resetReadTxn(t,r){return ty.resetReadTxn(t,r)}getBackup(t){return LK(t)}};ry.exports=Ih});var dy={};ke(dy,{ResourceBridge:()=>Uh});function Dh({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 iy(e,t){let r=ds(e),s=Dh(e,r);if(!r)throw new kr.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 We(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&&ku(u),t?yield{key:c,value:u}:yield u}})}function ds(e){let t=e.database||e.schema||PK,r=Vr()[t];if(!r)throw(0,kr.handleHDBError)(new Error,MK.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function oy(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*ay(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 cy,Nl,kr,uy,ly,$r,wh,Ch,_y,MK,PK,vK,BK,ny,Uh,Ey=pe(()=>{"use strict";cy=U(sy()),Nl=U(Zi()),kr=U(W());Ee();uy=U(ba()),ly=U(Ua()),$r=U(A()),wh=U($s()),Ch=U(xr()),_y=U(V());Xn();Vu();({HDB_ERROR_MSGS:MK}=kr.hdb_errors),PK="data",vK=1e4,BK=10,Uh=class extends cy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),ny=this}async searchByConditions(t){let r=(0,Nl.default)(t,"conditions");if(r)throw(0,kr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=ds(t);if(!s)throw new kr.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:Dh(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 kr.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}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await ds(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=ds(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){ds(t).dropTable()}createSchema(t){return xa({database:t.schema,table:null}),wh.signalSchemaChange(new Ch.SchemaEventMsg(process.pid,$r.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Lh(t.schema),wh.signalSchemaChange(new Ch.SchemaEventMsg(process.pid,$r.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,uy.default)(t);(0,ly.default)(t,s,r.primaryKey);let n,i=Vr()[t.schema][t.table],o={user:t.hdb_user};return We(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=ku(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=Vr()[t.schema][t.table],s={user:t.hdb_user};return We(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return oy(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Vr()[t.schema][t.table];if(!r.createdTimeProperty)throw new kr.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:$r.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,_y.async_set_timeout)(BK),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%vK===0&&await l();return u.length>0&&await l(),n?oy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Nl.default)(t,"hashes");if(r)throw r;return iy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of iy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&$r.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r]===void 0)throw new Error(`Value search comparator - ${r} - is not valid`);let s=(0,Nl.default)(t,"value");if(s)throw s;let n=ds(t);if(!n)throw new kr.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===$r.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:Dh(t,n)})}async getDataByValue(t,r){let s=new Map,n=ds(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){ds({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return ds(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=ds(t),s={};switch(t.search_type){case $r.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 $r.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of ay(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return ay(r,t.search_values?.[0],t.search_values?.[1])}}};a(Dh,"getSelect");a(iy,"getRecords");a(ds,"getTable");a(oy,"createDeleteResponse");a(ay,"groupRecordsInHistory")});var Yr=m((Aoe,fy)=>{"use strict";var{ResourceBridge:HK}=(Ey(),ee(dy)),qK=Q();qK.initSync();var bl;function FK(){return bl||(bl=new HK,bl)}a(FK,"getBridge");fy.exports=FK()});var py=m((Noe,Sy)=>{"use strict";var hy=require("lodash"),ka=require("mathjs"),GK=require("jsonata"),my=V();Sy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?hy.uniqWith(e,hy.isEqual):e,searchJSON:xK,mad:Va.bind(null,ka.mad),mean:Va.bind(null,ka.mean),mode:Va.bind(null,ka.mode),prod:Va.bind(null,ka.prod),median:Va.bind(null,ka.median)};function Va(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(Va,"aggregateFunction");function xK(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(my.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),my.isEmpty(this.__ala__.res[r])){let s=GK(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(xK,"searchJSON")});var Ry=m((yoe,Ty)=>{"use strict";var ze=require("moment"),Mh="YYYY-MM-DDTHH:mm:ss.SSSZZ";ze.suppressDeprecationWarnings=!0;Ty.exports={current_date:()=>ze().utc().format("YYYY-MM-DD"),current_time:()=>ze().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return ze(e).utc().format("YYYY");case"month":return ze(e).utc().format("MM");case"day":return ze(e).utc().format("DD");case"hour":return ze(e).utc().format("HH");case"minute":return ze(e).utc().format("mm");case"second":return ze(e).utc().format("ss");case"millisecond":return ze(e).utc().format("SSS");default:break}},date:e=>ze(e).utc().format(Mh),date_format:(e,t)=>ze(e).utc().format(t),date_add:(e,t,r)=>ze(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>ze(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=ze(e).utc(),n=ze(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>ze().utc().valueOf(),get_server_time:()=>ze().format(Mh),offset_utc:(e,t)=>ze(e).utc().utcOffset(t).format(Mh)}});var Ny=m((Ioe,Oy)=>{"use strict";var kK=require("@turf/area"),VK=require("@turf/length"),$K=require("@turf/circle"),YK=require("@turf/difference"),KK=require("@turf/distance"),WK=require("@turf/boolean-contains"),QK=require("@turf/boolean-equal"),zK=require("@turf/boolean-disjoint"),JK=require("@turf/helpers"),gy=A(),le=V();Oy.exports={geoArea:XK,geoLength:ZK,geoCircle:jK,geoDifference:eW,geoDistance:Ay,geoNear:tW,geoContains:rW,geoEqual:sW,geoCrosses:nW,geoConvert:iW};var Ph="geo1 is required",vh="geo2 is required";function XK(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),kK.default(e)}a(XK,"geoArea");function ZK(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),VK.default(e,{units:t||"kilometers"})}a(ZK,"geoLength");function jK(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)),$K.default(e,t,{units:r||"kilometers"})}a(jK,"geoCircle");function eW(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)),YK(e,t)}a(eW,"geoDifference");function Ay(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)),KK.default(e,t,{units:r||"kilometers"})}a(Ay,"geoDistance");function tW(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 Ay(e,t,s)<=r}a(tW,"geoNear");function rW(e,t){if(le.isEmpty(e))throw new Error(Ph);if(le.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),WK.default(e,t)}a(rW,"geoContains");function sW(e,t){if(le.isEmpty(e))throw new Error(Ph);if(le.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),QK.default(e,t)}a(sW,"geoEqual");function nW(e,t){if(le.isEmpty(e))throw new Error(Ph);if(le.isEmpty(e))throw new Error(vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!zK.default(e,t)}a(nW,"geoCrosses");function iW(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(gy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(gy.GEO_CONVERSION_ENUM).join(",")}`);return JK[t](e,r)}a(iW,"geoConvert")});var yl=m((Coe,by)=>{var oi=py(),ur=Ry(),Es=Ny();by.exports=e=>{e.aggr.mad=e.aggr.MAD=oi.mad,e.aggr.mean=e.aggr.MEAN=oi.mean,e.aggr.mode=e.aggr.MODE=oi.mode,e.aggr.prod=e.aggr.PROD=oi.prod,e.aggr.median=e.aggr.MEDIAN=oi.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=oi.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=oi.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=Es.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=Es.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=Es.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=Es.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=Es.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=Es.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=Es.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=Es.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=Es.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=Es.geoNear}});var Cy=m((Uoe,wy)=>{"use strict";var $a=require("lodash"),St=require("alasql");St.options.cache=!1;var oW=yl(),yy=require("clone"),Il=require("recursive-iterator"),ne=x(),ie=V(),to=Yr(),aW=A(),{hdb_errors:cW}=W(),{getDatabases:Iy}=(Ee(),ee(be)),uW="IS NULL",Kr="There was a problem performing this search. Please check the logs and try again.";oW(St);var Bh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw ne.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error(Kr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error(Kr)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error(Kr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error(Kr)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error(Kr)}}_getColumns(){let t=new Il(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(yy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=$a.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=Iy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new Il(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new St.yy.LogicValue({value:s}):r.right instanceof St.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new St.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new St.yy.LogicValue({value:i}):s instanceof St.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new St.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Il(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(!ie.isEmpty(aW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.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(ie.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"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.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(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.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&&$a.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(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.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(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await St.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(yy(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(ie.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(uW)>-1&&this.tables.forEach(n=>{let i={columnid:Iy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=$a.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),!ie.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await to.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 ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error(Kr)}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 to.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,ie.autoCast(f)))}))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error(Kr)}else if(!ie.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ie.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 to.getDataByValue(c,f.operation);if(u)for(let[S]of h)this.data[i].__merged_data[S]||(this.data[i].__merged_data[S]=[...s[i]],this._setMergedHashAttribute(i,ie.autoCast(S)));else for(let[S,T]of h)this.data[i].__merged_data[S]?this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]):(this.data[i].__merged_data[S]=[...s[i]],this._updateMergedAttribute(i,S,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(S)))}}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(_),new Error(Kr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await to.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,ie.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,ie.autoCast(d)))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(_),new Error(Kr)}}}_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 St.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 St.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new St.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 St.yy.FuncValue:new St.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,S=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${S}.${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 "${S}.${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 St.promise(h,t),t=null}catch(f){throw ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.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 S=E[f];o.forEach(T=>{S[T.key]!==null&&S[T.key]!==void 0&&T.keys.add(S[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),S=$a.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,R=S.length;T<R;T++){let O=S[T];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 Il(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=$a.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error(Kr)}}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 to.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 S=n.columns[h],T=f[S]===void 0?null:f[S];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await St.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(cW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],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 to.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error(Kr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};wy.exports=Bh});var br=m((Loe,Uy)=>{"use strict";var lW=pO();Uy.exports={searchByConditions:dW,searchByHash:EW,searchByValue:fW,search:hW};var Hh=Yr(),{transformReq:qh}=V(),_W=Cy();async function dW(e){return qh(e),Hh.searchByConditions(e)}a(dW,"searchByConditions");async function EW(e){qh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Hh.searchByHash(e))r&&t.push(r);return t}a(EW,"searchByHash");async function fW(e){qh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Hh.searchByValue(e))t.push(r);return t}a(fW,"searchByValue");function hW(e,t){try{let r=new lW(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(hW,"search")});var Ws=m((Poe,Py)=>{"use strict";var Ya=require("crypto"),mW=Q(),{CONFIG_PARAMS:SW}=A(),Ly="aes-256-cbc",pW=32,TW=16,Fh=64,My=32,RW=Fh+My,Dy=new Map;Py.exports={encrypt:gW,decrypt:AW,createNatsTableStreamName:OW};function gW(e){let t=Ya.randomBytes(pW),r=Ya.randomBytes(TW),s=Ya.createCipheriv(Ly,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(gW,"encrypt");function AW(e){let t=e.substr(0,Fh),r=e.substr(Fh,My),s=e.substr(RW,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ya.createDecipheriv(Ly,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(AW,"decrypt");function OW(e,t){let r=mW.get(SW.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=Dy.get(r);return s||(s=Ya.createHash("md5").update(r).digest("hex"),Dy.set(r,s)),s}a(OW,"createNatsTableStreamName")});var ai=m((Hoe,By)=>{"use strict";var Boe=br(),wl=x(),vy=ul(),NW=Ws(),Cl=V(),{handleHDBError:Ul,hdb_errors:bW}=W(),{HDB_ERROR_MSGS:Dl,HTTP_STATUS_CODES:Gh}=bW,yW=Q();yW.initSync();var{getDatabases:xh}=(Ee(),ee(be));By.exports={describeAll:IW,describeTable:Ll,describeSchema:wW};async function IW(e){try{let t=Cl.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=xh(),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 Ll({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 Ll({schema:l,table:d},f)}E&&c.push(E)}catch(E){wl.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 wl.error("Got an error in describeAll"),wl.error(t),Ul(new Error,Dl.DESCRIBE_ALL_ERR)}}a(IW,"describeAll");async function Ll(e,t){Cl.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=vy.describe_table(e);if(i)throw i;let c=xh()[r];if(!c)throw Ul(new Error,Dl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let u=c[s];if(!u)throw Ul(new Error,Dl.TABLE_NOT_FOUND(e.schema,e.table),Gh.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=NW.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){wl.warn(`unable to stat table dbi due to ${d}`)}return _}a(Ll,"descTable");async function wW(e){Cl.transformReq(e);let t=vy.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=xh()[s];if(!i)throw Ul(new Error,Dl.SCHEMA_NOT_FOUND(e.schema),Gh.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Cl.isEmpty(u)||u.describe){let l=await Ll({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(wW,"describeSchema")});var An=m((xoe,xy)=>{var CW=ei(),{callbackify:qy,promisify:UW}=require("util"),{getDatabases:Fy}=(Ee(),ee(be));xy.exports={setSchemaDataToGlobal:Hy,getTableSchema:DW,getSystemSchema:LW,setSchemaDataToGlobalAsync:UW(Hy)};var Gy=ai(),Foe=qy(Gy.describeAll),Goe=qy(Gy.describeTable);function Hy(e){global.hdb_schema=Fy(),e&&e()}a(Hy,"setSchemaDataToGlobal");function DW(e,t,r){let s=Fy()[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(DW,"getTableSchema");function LW(){return CW}a(LW,"getSystemSchema")});var yr=m((Voe,Yy)=>{"use strict";var Pl=Gf(),pt=V(),MW=require("util"),vl=Yr(),PW=An(),ky=x(),{handleHDBError:ci,hdb_errors:vW}=W(),{HTTP_STATUS_CODES:ui}=vW,BW=MW.promisify(PW.getTableSchema),HW="updated",Vy="inserted",$y="upserted";Yy.exports={insert:FW,update:GW,upsert:xW,validation:qW,flush:kW};async function qW(e){if(pt.isEmpty(e))throw new Error("invalid update parameters defined.");if(pt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(pt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await BW(e.schema,e.table),r=Pl(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&&pt.isEmptyOrZeroLength(c[s]))throw ky.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(!pt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw ky.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!pt.isEmpty(c[s])&&c[s]!==""&&n.has(pt.autoCast(c[s]))&&(c.skip=!0),n.add(pt.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(qW,"validation");async function FW(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Pl(e);if(t)throw ci(new Error,t.message,ui.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ci(new Error,r,ui.BAD_REQUEST);let s=await vl.createRecords(e);return Ml(Vy,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(FW,"insertData");async function GW(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Pl(e);if(t)throw ci(new Error,t.message,ui.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ci(new Error,r,ui.BAD_REQUEST);let s=await vl.updateRecords(e);return pt.isEmpty(s.existing_rows)?Ml(HW,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Ml(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(GW,"updateData");async function xW(e){if(e.operation!=="upsert")throw ci(new Error,"invalid operation, must be upsert",ui.INTERNAL_SERVER_ERROR);let t=Pl(e);if(t)throw ci(new Error,t.message,ui.BAD_REQUEST);pt.transformReq(e);let r=pt.checkSchemaTableExist(e.schema,e.table);if(r)throw ci(new Error,r,ui.BAD_REQUEST);let s=await vl.upsertRecords(e);return Ml($y,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(xW,"upsertData");function Ml(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===Vy?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===$y?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(Ml,"returnObject");function kW(e){return pt.transformReq(e),vl.flush(e.schema,e.table)}a(kW,"flush")});var Vh=m((Yoe,Qy)=>{var VW=Be(),kh=require("joi"),{hdb_table:$W,hdb_database:Ky}=cs(),Wy={schema:Ky,database:Ky,table:$W},YW={date:kh.date().iso().required()},KW={timestamp:kh.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};Qy.exports=function(e,t){let r=t==="timestamp"?{...Wy,...KW}:{...Wy,...YW},s=kh.object(r);return VW.validateBySchema(e,s)}});var Xy=m((Koe,Jy)=>{var WW=Be(),$h=require("joi"),{hdb_table:QW,hdb_database:zy}=cs(),zW=$h.object({schema:zy,database:zy,table:QW,hash_values:$h.array().required(),ids:$h.array()});Jy.exports=function(e){return WW.validateBySchema(e,zW)}});var jy=m((Woe,Zy)=>{"use strict";var Yh=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}},Kh=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}},Wh=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};Zy.exports={InsertObject:Yh,NoSQLSeachObject:Kh,DeleteResponseObject:Wh}});var di=m((zoe,nI)=>{"use strict";var tI=Vh(),JW=Xy(),li=V(),eI=require("moment"),rI=x(),{promisify:XW,callbackify:ZW}=require("util"),_i=A(),jW=An(),Qh=XW(jW.getTableSchema),zh=Yr(),{DeleteResponseObject:eQ}=jy(),{handleHDBError:On,hdb_errors:tQ}=W(),{HDB_ERROR_MSGS:Bl,HTTP_STATUS_CODES:Nn}=tQ,rQ="records successfully deleted",sQ=ZW(sI);nI.exports={delete:sQ,deleteRecord:sI,deleteFilesBefore:nQ,deleteAuditLogsBefore:iQ};async function nQ(e){let t=tI(e,"date");if(t)throw On(t,t.message,Nn.BAD_REQUEST,void 0,void 0,!0);if(li.transformReq(e),!eI(e.date,eI.ISO_8601).isValid())throw On(new Error,Bl.INVALID_DATE,Nn.BAD_REQUEST,_i.LOG_LEVELS.ERROR,Bl.INVALID_DATE,!0);let s=li.checkSchemaTableExist(e.schema,e.table);if(s)throw On(new Error,s,Nn.NOT_FOUND,_i.LOG_LEVELS.ERROR,s,!0);let n=await zh.deleteRecordsBefore(e);if(await Qh(e.schema,e.table),rI.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(nQ,"deleteFilesBefore");async function iQ(e){let t=tI(e,"timestamp");if(t)throw On(t,t.message,Nn.BAD_REQUEST,void 0,void 0,!0);if(li.transformReq(e),isNaN(e.timestamp))throw On(new Error,Bl.INVALID_VALUE("Timestamp"),Nn.BAD_REQUEST,_i.LOG_LEVELS.ERROR,Bl.INVALID_VALUE("Timestamp"),!0);let r=li.checkSchemaTableExist(e.schema,e.table);if(r)throw On(new Error,r,Nn.NOT_FOUND,_i.LOG_LEVELS.ERROR,r,!0);let s=await zh.deleteAuditLogsBefore(e);return await Qh(e.schema,e.table),rI.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(iQ,"deleteAuditLogsBefore");async function sI(e){e.ids&&(e.hash_values=e.ids);let t=JW(e);if(t)throw On(t,t.message,Nn.BAD_REQUEST,void 0,void 0,!0);li.transformReq(e);let r=li.checkSchemaTableExist(e.schema,e.table);if(r)throw On(new Error,r,Nn.NOT_FOUND,_i.LOG_LEVELS.ERROR,r,!0);try{await Qh(e.schema,e.table);let s=await zh.deleteRecords(e);return li.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${rQ}`),s}catch(s){if(s.message===_i.SEARCH_NOT_FOUND_MESSAGE){let n=new eQ;return n.message=_i.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(sI,"deleteRecord")});var Hl=m((Xoe,aI)=>{var oQ=require("crypto"),iI=9;function aQ(e){let t=uQ(iI),r=oI(e+t);return t+r}a(aQ,"createHash");function cQ(e,t){let r=e.substr(0,iI),s=r+oI(t+r);return e===s}a(cQ,"validateHash");function uQ(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(uQ,"generateSalt");function oI(e){return oQ.createHash("md5").update(e).digest("hex")}a(oI,"md5");aI.exports={hash:aQ,validate:cQ}});var uI=m((joe,cI)=>{var Jh=Be(),wt={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function lQ(e){return wt.password.presence=!0,wt.username.presence=!0,wt.role.presence=!0,wt.active.presence=!0,Jh.validateObject(e,wt)}a(lQ,"addUserValidation");function _Q(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Jh.validateObject(e,wt)}a(_Q,"alterUserValidation");function dQ(e){return wt.password.presence=!1,wt.username.presence=!0,wt.role.presence=!1,wt.active.presence=!1,Jh.validateObject(e,wt)}a(dQ,"dropUserValidation");cI.exports={addUserValidation:lQ,alterUserValidation:_Q,dropUserValidation:dQ}});var He=m((rae,_I)=>{"use strict";var{platform:tae}=require("os"),EQ="nats-server.zip",Xh="nats-server",fQ=process.platform==="win32"?`${Xh}.exe`:Xh,Zh="HDB",hQ=/^[^\s.,*>]+$/,lI="__request__",mQ=a(e=>`${e}.${lI}`,"REQUEST_SUBJECT"),SQ={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},pQ={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},TQ={HUB:"hub.pid",LEAF:"leaf.pid"},RQ={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},gQ={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Zh,deliver_subject:"__HDB__.WORKQUEUE"},AQ={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Zh,deliver_subject:"HDB.SCHEMAQUEUE"},OQ={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Zh,deliver_subject:"HDB.USERQUEUE"},NQ={SUCCESS:"success",ERROR:"error"},bQ={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},yQ={TXN:"txn",MSGID:"msgid"},ro={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},IQ={[ro.ERR]:1,[ro.WRN]:2,[ro.INF]:3,[ro.DBG]:4,[ro.TRC]:5},wQ={debug:"-D",trace:"-DVV"};_I.exports={NATS_SERVER_ZIP:EQ,NATS_SERVER_NAME:Xh,NATS_BINARY_NAME:fQ,PID_FILES:TQ,NATS_CONFIG_FILES:pQ,SERVER_SUFFIX:RQ,WORK_QUEUE_CONSUMER_NAMES:gQ,SCHEMA_QUEUE_CONSUMER_NAMES:AQ,USER_QUEUE_CONSUMER_NAMES:OQ,NATS_TERM_CONSTRAINTS_RX:hQ,REQUEST_SUFFIX:lI,UPDATE_REMOTE_RESPONSE_STATUSES:NQ,CLUSTER_STATUS_STATUSES:bQ,REQUEST_SUBJECT:mQ,SUBJECT_PREFIXES:yQ,MSG_HEADERS:SQ,LOG_LEVELS:ro,LOG_LEVEL_FLAGS:wQ,LOG_LEVEL_HIERARCHY:IQ}});var EI=m((nae,dI)=>{"use strict";var ql=A(),Fl=class{static{a(this,"BaseLicense")}constructor(t=0,r=ql.RAM_ALLOCATION_ENUM.DEFAULT,s=ql.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},jh=class extends Fl{static{a(this,"ExtendedLicense")}constructor(t=0,r=ql.RAM_ALLOCATION_ENUM.DEFAULT,s=ql.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};dI.exports={BaseLicense:Fl,ExtendedLicense:jh}});var Ka=m((oae,TI)=>{"use strict";var no=require("fs-extra"),fI=Hl(),hI=require("crypto"),CQ=require("moment"),UQ=require("uuid").v4,Ct=x(),tm=require("path"),DQ=V(),bn=A(),LQ=EI().ExtendedLicense,so="invalid license key format",MQ="061183",PQ="mofi25",vQ="aes-256-cbc",BQ=16,HQ=32,mI=Q();mI.initSync();var em;TI.exports={validateLicense:SI,generateFingerPrint:FQ,licenseSearch:pI,getLicense:kQ};function rm(){return tm.join(mI.getHdbBasePath(),bn.LICENSE_KEY_DIR_NAME,bn.LICENSE_FILE_NAME)}a(rm,"getLicenseDirPath");function qQ(){let e=rm();return tm.join(e,bn.LICENSE_FILE_NAME)}a(qQ,"getLicenseFilePath");function sm(){let e=rm();return tm.join(e,bn.REG_KEY_FILE_NAME)}a(sm,"getFingerPrintFilePath");async function FQ(){let e=sm();try{return await no.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await GQ();throw Ct.error(`Error writing fingerprint file to ${e}`),Ct.error(t),new Error("There was an error generating the fingerprint")}}a(FQ,"generateFingerPrint");async function GQ(){let e=UQ(),t=fI.hash(e),r=sm();try{await no.mkdirp(rm()),await no.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw Ct.error(`Error writing fingerprint file to ${r}`),Ct.error(s),new Error("There was an error generating the fingerprint")}return t}a(GQ,"writeFingerprint");function SI(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:bn.RAM_ALLOCATION_ENUM.DEFAULT,version:bn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return Ct.error("empty license key passed to validate."),r;let s=sm(),n=!1;try{n=no.statSync(s)}catch(i){Ct.error(i)}if(n){let i;try{i=no.readFileSync(s,"utf8")}catch{Ct.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(PQ),c=o[1];c=Buffer.concat([Buffer.from(c)],BQ);let u=Buffer.concat([Buffer.from(i)],HQ),l=hI.createDecipheriv(vQ,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=xQ(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(so),Ct.error(so),new Error(so)}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(so),Ct.error(so),new Error(so)}else r.exp_date=_;r.exp_date<CQ().valueOf()&&(r.valid_date=!1),fI.validate(o[1],`${MQ}${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||Ct.error("Invalid licence"),r}a(SI,"validateLicense");function xQ(e,t){try{let r=hI.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{Ct.warn("Check old license failed")}}a(xQ,"checkOldLicense");function pI(){let e=new LQ,t=[];try{t=no.readFileSync(qQ(),"utf-8").split(bn.NEW_LINE)}catch(r){r.code==="ENOENT"?Ct.info("no license file found"):Ct.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(DQ.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=SI(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){Ct.error("There was an error parsing the license string."),Ct.error(n),e.ram_allocation=bn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return em=e,e}a(pI,"licenseSearch");async function kQ(){return em||await pI(),em}a(kQ,"getLicense")});var Ir=m((_ae,vI)=>{"use strict";var NI="username is required",bI="nothing to update, must supply active, role or password to update",yI="password cannot be an empty string",II="If role is specified, it cannot be empty.",wI="active must be true or false";vI.exports={addUser:XQ,alterUser:ZQ,dropUser:ez,getSuperUser:nz,userInfo:tz,listUsers:xl,listUsersExternal:rz,setUsersToGlobal:oo,findAndValidateUser:PI,getClusterUser:iz,USERNAME_REQUIRED:NI,ALTERUSER_NOTHING_TO_UPDATE:bI,EMPTY_PASSWORD:yI,EMPTY_ROLE:II,ACTIVE_BOOLEAN:wI};var CI=yr(),VQ=di(),im=Hl(),UI=uI(),DI=br(),om=$s(),lr=V(),LI=require("validate.js"),_e=x(),{promisify:$Q}=require("util"),am=Ws(),RI=A(),gI=He(),YQ=gr(),cae=Q(),uae=Ka(),KQ=ei(),{table:lae}=(Ee(),ee(be)),{handleHDBError:hs,hdb_errors:WQ}=W(),{HTTP_STATUS_CODES:ms,AUTHENTICATION_ERROR_MSGS:nm,HDB_ERROR_MSGS:io}=WQ,{UserEventMsg:cm}=xr(),AI=require("lodash"),{_assignPackageExport:QQ}=require("../index");QQ("getUser",PI);var MI={username:!0,active:!0,role:!0,password:!0},OI=new Map,Gl=DI.searchByValue,zQ=DI.searchByHash,JQ=$Q(VQ.delete);async function XQ(e){let t=LI.cleanAttributes(e,MI),r=UI.addUserValidation(t);if(r)throw hs(new Error,r.message,ms.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 Gl(s),n=n&&Array.from(n)}catch(u){throw _e.error("There was an error searching for a role in add user"),_e.error(u),u}if(!n||n.length<1)throw hs(new Error,io.ROLE_NAME_NOT_FOUND(t.role),ms.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw hs(new Error,io.DUP_ROLES_FOUND(t.role),ms.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=am.encrypt(t.password)),t.password=im.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await CI.insert(i)}catch(u){throw _e.error("There was an error searching for a user."),_e.error(u),u}_e.debug(o);try{await oo()}catch(u){throw _e.error("Got an error setting users to global"),_e.error(u),u}if(o.skipped_hashes.length===1)throw hs(new Error,io.USER_ALREADY_EXISTS(t.username),ms.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],om.signalUserChange(new cm(process.pid)),`${c.username} successfully added`}a(XQ,"addUser");async function ZQ(e){let t=LI.cleanAttributes(e,MI);if(lr.isEmptyOrZeroLength(t.username))throw new Error(NI);if(lr.isEmptyOrZeroLength(t.password)&&lr.isEmptyOrZeroLength(t.role)&&lr.isEmptyOrZeroLength(t.active))throw new Error(bI);if(!lr.isEmpty(t.password)&&lr.isEmptyOrZeroLength(t.password.trim()))throw new Error(yI);if(!lr.isEmpty(t.active)&&!lr.isBoolean(t.active))throw new Error(wI);let r=jQ(t.username);if(!lr.isEmpty(t.password)&&!lr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=am.encrypt(t.password)),t.password=im.hash(t.password)),t.role==="")throw new Error(II);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 Gl(i)||[])}catch(c){throw _e.error("Got an error searching for a role."),_e.error(c),c}if(!o||o.length===0){let c=io.ALTER_USER_ROLE_NOT_FOUND(t.role);throw _e.error(c),hs(new Error,c,ms.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=io.ALTER_USER_DUP_ROLES(t.role);throw _e.error(c),hs(new Error,c,ms.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 CI.update(s)}catch(i){throw _e.error("Error during update."),_e.error(i),i}try{await oo()}catch(i){throw _e.error("Got an error setting users to global"),_e.error(i),i}return om.signalUserChange(new cm(process.pid)),n}a(ZQ,"alterUser");function jQ(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(jQ,"isClusterUser");async function ez(e){try{let t=UI.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(lr.isEmpty(global.hdb_users.get(e.username)))throw hs(new Error,io.USER_NOT_EXIST(e.username),ms.NOT_FOUND,void 0,void 0,!0);let s;try{s=await JQ(r)}catch(n){throw _e.error("Got an error deleting a user."),_e.error(n),n}_e.debug(s);try{await oo()}catch(n){throw _e.error("Got an error setting users to global."),_e.error(n),n}return om.signalUserChange(new cm(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(ez,"dropUser");async function tz(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 zQ(r)}catch(n){throw _e.error("Got an error searching for a role."),_e.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw _e.error(r),r}return t}a(tz,"userInfo");async function rz(){let e;try{e=await xl()}catch(t){throw _e.error("Got an error listing users."),_e.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(rz,"listUsersExternal");async function xl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await Gl(e)}catch(o){throw _e.error("Got an error searching for roles."),_e.error(o),o}let r={};for(let o of t)r[o.id]=AI.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 Gl(s)}catch(o){throw _e.error("Got an error searching for users."),_e.error(o),o}let i=new Map;for(let o of n)o=AI.cloneDeep(o),o.role=r[o.role],sz(o.role),i.set(o.username,o);return i}catch(e){throw _e.error("got an error listing users"),_e.error(e),lr.errorizeMessage(e)}return null}a(xl,"listUsers");function sz(e){try{if(!e){_e.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(KQ)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){_e.error("Got an error trying to set system permissions."),_e.error(t)}}a(sz,"appendSystemTablesToRole");async function oo(){try{let e=await xl();global.hdb_users=e}catch(e){throw _e.error(e),e}}a(oo,"setUsersToGlobal");async function PI(e,t,r=!0){global.hdb_users||await oo();let s=global.hdb_users.get(e);if(!s)throw hs(new Error,nm.GENERIC_AUTH_FAIL,ms.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw hs(new Error,nm.USER_INACTIVE,ms.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(OI.get(t)===s.password)return n;if(im.validate(s.password,t))OI.set(t,s.password);else throw hs(new Error,nm.GENERIC_AUTH_FAIL,ms.UNAUTHORIZED,void 0,void 0,!0)}return n}a(PI,"findAndValidateUser");async function nz(){global.hdb_users||await oo();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(nz,"getSuperUser");async function iz(){let e=await xl(),t=YQ.getConfigFromFile(RI.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!lr.isEmpty(r)&&r?.role?.role===RI.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=am.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+gI.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+gI.SERVER_SUFFIX.ADMIN,r}a(iz,"getClusterUser")});var Qa=m((hae,FI)=>{"use strict";var Ei=x(),_r=A(),oz=iO(),Eae=An(),fae=ai(),az=Ir(),{validateEvent:BI}=xr(),Wa=Yr(),cz=require("process"),{resetDatabases:uz}=(Ee(),ee(be)),lz={[_r.ITC_EVENT_TYPES.SCHEMA]:_z,[_r.ITC_EVENT_TYPES.USER]:qI};async function _z(e){let t=BI(e);if(t){Ei.error(t);return}Ei.trace("ITC schemaHandler received schema event:",e),await oz(e.message),await dz(e.message)}a(_z,"schemaHandler");async function dz(e){try{Wa.resetReadTxn(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Wa.resetReadTxn(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Wa.resetReadTxn(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=uz();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Ei.error(t)}}a(dz,"syncSchemaMetadata");var HI=[];async function qI(e){try{try{Wa.resetReadTxn(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Wa.resetReadTxn(_r.SYSTEM_SCHEMA_NAME,_r.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Ei.warn(r)}let t=BI(e);if(t){Ei.error(t);return}Ei.trace(`ITC userHandler ${_r.HDB_ITC_CLIENT_PREFIX}${cz.pid} received user event:`,e),await az.setUsersToGlobal();for(let r of HI)r()}catch(t){Ei.error(t)}}a(qI,"userHandler");qI.addListener=function(e){HI.push(e)};FI.exports=lz});var xr=m((gae,xI)=>{"use strict";var Sae=x(),um=V(),Ez=A(),{ITC_ERRORS:za}=nr(),{parentPort:pae,threadId:fz,isMainThread:hz,workerData:Tae}=require("worker_threads"),{onMessageFromWorkers:mz,broadcast:Rae,broadcastWithAcknowledgement:Sz}=st();xI.exports={sendItcEvent:pz,validateEvent:GI,SchemaEventMsg:Tz,UserEventMsg:Rz};var kl;mz(async(e,t)=>{kl=kl||Qa(),GI(e),kl[e.type]&&await kl[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function pz(e){return!hz&&e.message&&(e.message.originator=fz),Sz(e)}a(pz,"sendItcEvent");function GI(e){if(typeof e!="object")return za.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||um.isEmpty(e.type))return za.MISSING_TYPE;if(!e.hasOwnProperty("message")||um.isEmpty(e.message))return za.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||um.isEmpty(e.message.originator))return za.MISSING_ORIGIN;if(Ez.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return za.INVALID_EVENT(e.type)}a(GI,"validateEvent");function Tz(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(Tz,"SchemaEventMsg");function Rz(e){this.originator=e}a(Rz,"UserEventMsg")});var $s=m((Nae,YI)=>{"use strict";var kI=A(),Oae=V(),Vl=x(),VI=xA(),ao,{sendItcEvent:$I}=xr();function gz(e){try{Vl.trace("signalSchemaChange called with message:",e),ao=ao||Qa();let t=new VI(kI.ITC_EVENT_TYPES.SCHEMA,e);return ao.schema(t),$I(t)}catch(t){Vl.error(t)}}a(gz,"signalSchemaChange");function Az(e){try{Vl.trace("signalUserChange called with message:",e),ao=ao||Qa();let t=new VI(kI.ITC_EVENT_TYPES.USER,e);return ao.user(t),$I(t)}catch(t){Vl.error(t)}}a(Az,"signalUserChange");YI.exports={signalSchemaChange:gz,signalUserChange:Az}});var Za={};ke(Za,{addAnalyticsListener:()=>fm,recordAction:()=>hi,recordActionBinary:()=>Em,setAnalyticsEnabled:()=>Oz});function Oz(e){ew=e}function hi(e,t,r,s,n){if(!ew)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Kl.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let l=c;o.values=c=new Float32Array(u*2),c.set(l),c.index=u+1}c[u]=Math.random(),o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},Kl.set(i,o)}Yl||Nz()}function Em(e,t,r,s,n){hi(!!e,t,r,s,n)}function fm(e){rw.push(e)}function Nz(){Yl=performance.now(),setTimeout(async()=>{let e=performance.now()-Yl;Yl=0;let t=[],r={time:Date.now(),period:e,threadId:fi.threadId,metrics:t};for(let[n,i]of Kl){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,l=[],_;for(let d of sw){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;f===_?l[l.length-1].count+=h:(l.push(h>1?{value:f,count:h}:f),_=f),u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:l,count:c}))}else t.push(i);await nw()}let s=process.memoryUsage();t.push({metric:"memory",threadId:fi.threadId,...s});for(let n of rw)n(t);Kl=new Map,fi.parentPort?fi.parentPort.postMessage({type:tw,report:r}):ow({report:r})},_m).unref()}async function bz(e,t=6e4){let r=hm(),s;for(let E of r.primaryStore.getRange({start:$l+"z",end:$l,reverse:!0}))if(E.value?.time){s=E.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o=new Map,c;for(let{key:E,value:f}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!f)continue;if(n){if(E>n+t)break}else n=E;c=E;let{metrics:h,threadId:S}=f;for(let T of h||[]){let{path:R,method:O,type:q,metric:$,count:w,total:I,distribution:D,...z}=T;w||(w=1);let M=$+(R?"-"+R:"");O&&(M+="-"+O);let te=i.get(M);if(te){te.count||(te.count=1);let Ne=te.count;for(let Lt in z){let rr=z[Lt];typeof rr=="number"&&(te[Lt]=(te[Lt]*Ne+rr*w)/(Ne+w))}te.count+=w,I>=0&&(te.total+=I,te.ratio=te.total/te.count)}else te=Object.assign({period:t},T),delete te.distribution,i.set(M,te);if(D){D=D.map(Lt=>typeof Lt=="number"?{value:Lt,count:1}:Lt);let Ne=o.get(M);Ne?Ne.push(...D):o.set(M,D)}}await nw()}for(let[E,f]of o){let h=i.get(E);f.sort((rr,jr)=>rr.value>jr.value?1:-1);let S=h.count-1,T=[],R=0,O=0,q;for(let rr of sw){let jr=S*rr;for(;R<jr;)q=f[O++],R+=q.count,O===1&&R--;let ws=f[O>1?O-2:0];q||(q=f[0]),T.push(q.value-(q.value-ws.value)*(R-jr)/q.count)}let[$,w,I,D,z,M,te,Ne,Lt]=T;Object.assign(h,{p1:$,p10:w,p25:I,median:D,p75:z,p90:M,p95:te,p99:Ne,p999:Lt})}let u;for(let[E,f]of i)f.id=$l+Math.round(c)+"-"+E,f.time=c,r.put(f),u=!0;let l=Date.now(),{idle:_,active:d}=performance.eventLoopUtilization();(u||d*10>_)&&r.put({id:$l+Math.round(l)+"-main-thread-utilization",metric:"main-thread-utilization",idle:_-KI,active:d-WI,time:l}),KI=_,WI=d}async function yz(e,t){let r=hm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function hm(){return QI||(QI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function wz(){iw=!0;let e=(0,Xa.get)(dm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await bz(_m,e),await yz(Iz,_m)},e/2).unref()}function ow(e,t){let r=e.report;r.threadId=t?.threadId||fi.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(zI+=s.mean*s.count);r.totalBytesProcessed=zI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(JI.get(t))}),JI.set(t,t.performance.eventLoopUtilization())),r.id=(0,jI.getNextMonotonicTime)(),hm().put(r),iw||wz(),Cz&&(aw=Dz(r))}async function Dz(e){if(await aw,!yn){let r=(0,Ja.dirname)((0,ZI.getLogFilePath)());try{yn=await(0,lm.open)((0,Ja.join)(r,"analytics.log"),"r+")}catch{yn=await(0,lm.open)((0,Ja.join)(r,"analytics.log"),"w+")}}let t=(await yn.stat()).size;if(t>Uz){let r=Buffer.alloc(t);await yn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await yn.write(r,{position:0}),await yn.truncate(r.length),t=r.length}await yn.write(JSON.stringify(e)+`
6
+ `,t)}var fi,XI,ZI,Ja,lm,jI,Xa,dm,Kl,ew,Yl,_m,tw,rw,sw,$l,KI,WI,nw,Iz,QI,iw,zI,JI,Cz,aw,yn,Uz,mi=pe(()=>{fi=require("worker_threads"),XI=U(st());Ee();ZI=U(x()),Ja=require("path"),lm=require("fs/promises"),jI=U(Ft()),Xa=U(Q()),dm=U(A());Br();(0,Xa.initSync)();Kl=new Map,ew=(0,Xa.get)(dm.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Oz,"setAnalyticsEnabled");a(hi,"recordAction");et.recordAnalytics=hi;a(Em,"recordActionBinary");Yl=0,_m=1e3,tw="analytics-report",rw=[];a(fm,"addAnalyticsListener");sw=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Nz,"sendAnalytics");$l="sum-";a(bz,"aggregation");KI=0,WI=0,nw=a(()=>new Promise(setImmediate),"rest");a(yz,"cleanup");Iz=36e5;a(hm,"getAnalyticsTable");(0,XI.setChildListenerByType)(tw,ow);a(wz,"startScheduledTasks");zI=0,JI=new Map,Cz=!1;a(ow,"recordAnalytics");Uz=1e6;a(Dz,"logAnalytics")});var pm={};ke(pm,{coerceType:()=>Wl,makeTable:()=>zl,setServerUtilities:()=>Bz});function zl(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=[]),qA(i,u);let S=0,T,R,O,q={},$,w,I,D;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(w=Z),Z.expiresAt&&(I=Z),Z.isPrimaryKey&&(q=Z);let z;E&&AR();class M 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=w;static get expirationMS(){return d}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 R=p&&p.get&&(!p.get.reliesOnPrototype||p.prototype.get),(async()=>{let L=!1,b=a(async C=>{let H=C.value,k=C.table?qe[c][C.table]:M;if(c===Wr.SYSTEM_SCHEMA_NAME&&(C.table===Wr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===Wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=H[k.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let P=await k.getResource(C.id,C,ja);switch(C.type){case"put":return P._writeUpdate(H,ja);case"delete":return P._writeDelete(ja);case"publish":return P._writePublish(H,ja);case"invalidate":return P.invalidate(ja);default:Ti.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 H=p.subscribeOnThisThread?p.subscribeOnThisThread((0,pi.getWorkerIndex)()):(0,pi.getWorkerIndex)()===0,k=C&&H&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(k)for await(let P of k)try{if(!(P.type==="transaction"?P.writes[0]:P)){console.error("Bad subscription event");continue}let X=We(P,()=>{if(P.type==="transaction"){let J=[];for(let Y of P.writes){Y[Oe]=P;try{J.push(b(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(P),j}}return Promise.all(J)}else if(P.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of P.attributes)J.find(Le=>Le.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),rc.signalSchemaChange(new sc.SchemaEventMsg(process.pid,Wr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(P)});P.onCommit&&(X?.then&&L&&rc.signalUserChange(new sc.UserEventMsg(process.pid)),X?.then?X.then(P.onCommit):P.onCommit())}catch(G){console.error("error in subscription handler",G)}}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(ue))return b;let C=b._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let H,k,G={transaction:C?.getReadTxn()},X;return Lt(p,N,G,b,L?.allowInvalidated,(J,Y)=>{Y?k(Y):(b[ue]=J?.value,b[kt]=J?.version,X=!0,H?.(b))}),X?b:new Promise((J,Y)=>{H=J,k=Y})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return b}static setTTLExpiration(p){(0,pi.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&&M.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,AR(),M.audit=!0}static coerceId(p){return p===""?null:Wl(p,q)}static async dropTable(){if(delete qe[c][n],c===o){for(let p in r)_.remove(M.tableName+"/"+p),r[p].drop();_.remove(M.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));rc.signalSchemaChange(new sc.SchemaEventMsg(process.pid,Wr.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[Fs])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 H=mm(b,"read");N.select=C.filter(k=>H[k])}else N.select=b.filter(H=>H.read).map(H=>H.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 H=mm(C,"update");for(let k in N)if(!H[k])return!1;if(L)for(let k of C){let P=k.attribute_name;!k.update&&!(P in N)&&(N[P]=this.getProperty(P))}}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=mm(b,"insert");for(let H in N)if(!C[H])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[ue])p[C]===void 0&&(p[C]=void 0);b=this[ht],b&&(p=Object.assign(b,p)),this[ht]=b=p}return!this[ue]&&t&&!(b||(b=this[ht]))?.[t]&&(b||(b=this[ht]=Object.create(null)),b[t]=this[ce]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ce],store:i,invalidated:!0,lastVersion:this[kt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let G in r)C[G]=this.getProperty(G);let H=M.Source,k,P=this[ce];return p?.isNotification||H?.shouldReceiveInvalidations&&(k=H.invalidate(P,this)),i.put(this[ce],C,L),{type:E&&"invalidate",[Zn]:k}}})}static evict(p,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let H=i.getEntry(p);if(!H)return;N=H.value,L=H.version}if(N)for(let H in r)C||(C={__invalidated__:0}),C[H]=N[H];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,mw.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let L=this._txnForRequest();if(this[ce]===void 0)throw new Error("Can not save record without an id");let b=this[ue],C,H,k=this[ce];b||(this[ue]={}),L.addWrite({key:k,store:i,lastVersion:this[kt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(P,G)=>{let X;if(G){if(C)return;let Y=i.getEntry(k);b=Y?.value;let j=this[Oe];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!H){if(H=!0,N?.isNotification)p=fa(p);else{if(p[lw]&&(C=!Fu(p),C))return;t&&p[t]!==k&&(p[t]=k),w&&(p[w.name]=w.type==="Date"?new Date(P):w.type==="String"?new Date(P).toISOString():P),$&&(b?p[$.name]=b[$.name]:p[$.name]=$.type==="Date"?new Date(P):$.type==="String"?new Date(P).toISOString():P),p=fa(p);let Y=M.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(k,p,this))}if(p[ue])throw new Error("Can not assign a record with a record property");this[ue]=p}if(Ti.trace("Checking timestamp for put",k,this[kt]>P,this[kt],P),this[kt]>P)return E&&{type:"put",value:i.encoder.encode(p)};let J=i.encoder.encode(p);return i.put(this[ce],(0,co.asBinary)(J),P),Ne(this[ce],b,p),b===null&&!G&&ws(-1),{type:E&&"put",value:J,[Zn]:X}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ue]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),L,b=this[ce],C;return N.addWrite({key:b,store:i,lastVersion:this[kt],nodeName:this[Oe]?.nodeName,commit:(H,k)=>{let P=this[ue];if(k){let G=i.getEntry(b);P=G?.value;let X=this[Oe];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!L&&(L=!0,!p?.isNotification)){let G=M.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(C=G.delete(b,this))}if(!(this[kt]>H))return Ne(this[ce],P),Ti.trace("Write delete entry",E||f,H),E||f?(i.put(this[ce],null,H),E||gR(),k||ws(1)):i.remove(this[ce]),{type:E&&"delete",[Zn]: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[ce]&&(b=[{attribute:null,comparator:"prefix",value:this[ce]}].concat(b));for(let Y of b){let j=Y[0]??Y.attribute,Le=j==null?q:h.find(ln=>ln.name==j);if(Le)Le.type&&(Y[1]===void 0?Y.value=C(Y.value,Le):Y[1]=C(Y[1],Le));else if(j!=null)throw(0,Si.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function C(Y,j){return Array.isArray(Y)?Y.map(Le=>Wl(Le,j)):Wl(Y,j)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,fw.sortBy)(b,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===ec.SEARCH_TYPES.EQUALS){let Le=Y[0]??Y.attribute;if(Le==null||Le===t)Y.estimated_count=1;else{let ln=r[Le];Y.estimated_count=ln?ln.getValuesCount(Y[1]??Y.value):1/0}}else j===ec.SEARCH_TYPES.CONTAINS||j===ec.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===ec.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=Mz:Y.estimated_count=Lz}return Y.estimated_count}));let H=N.getReadTxn();H.use();let k=p.select,P=b[0],G;if(!P)G=i.getRange(L?{end:!1,reverse:!0,transaction:H,lazy:k?.length<4}:{start:!1,transaction:H,lazy:k?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):co.SKIP);else{let Y=JE(P,H,L,M,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let j=b.slice(1).map(XE);G=J(Y,j)}else{for(let Le=1;Le<b.length;Le++){let ln=b[Le],SE=JE(ln,H,L,M,p.allowFullScan);Y=Y.concat(SE)}let j=new Set;Y=Y.filter(Le=>j.has(Le)?!1:(j.add(Le),!0)),G=J(Y)}}(p.offset||p.limit!==void 0)&&(G=G.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),G.onDone=()=>{H.done()};let X=this[Oe];function J(Y,j){let Le=j?.length,ln={transaction:H,lazy:Le>0||k?.length<4,alwaysPrefetch:!0};return Y.map(SE=>new Promise(pE=>Lt(SE,X,ln,null,!1,aH=>{let TE=aH?.value;if(!TE)return pE(co.SKIP);for(let RE=0;RE<Le;RE++)if(!j[RE](TE))return pE(co.SKIP);pE(TE)})))}return a(J,"idsToRecords"),G}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=HA(M,this[ce]??null,function(H,k,P){try{this.send({id:H,timestamp:P,...k})}catch(G){console.error(G)}},p.startTime,this[Fs]),L=this[ce],b=p.previousCount;b>1e3&&(b=1e3);let C=p.startTime;if(this[Fs]){if(C){if(b)throw new Si.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:k}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[P,G,X]=H;if(H.length>3&&(X=H.slice(2)),G!==s)continue;let J=mn(k,i);(L==null||Ew(L,X))&&N.send({id:X,timestamp:P,...J}),N.startTime=P}}else if(b){let H=[];for(let{key:k,value:P}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=k;if(k.length>3&&(J=k.slice(2)),X!==s)continue;if(L==null||Ew(L,J)){let Y=mn(P,i);if(H.push({id:J,timestamp:G,...Y}),--b<=0)break}}catch(G){Ti.error("Error getting history entry",k,G)}for(let k=H.length;k>0;)N.send(H[--k]);H[0]&&(N.startTime=H[0].timestamp)}else if(!p.omitCurrent)for(let{key:H,value:k,version:P}of i.getRange({start:L??!1,end:L==null?void 0:[L,hw.MAXIMUM_KEY],versions:!0}))k&&N.send({id:H,timestamp:P,value:k})}else{b&&!C&&(C=0);let H=this[kt];if(C<H){let k=[],P=H;do{let G=[P,s,L],X=u.get(G);if(X){p.omitCurrent=!0;let J=mn(X,i);k.push({id:L,timestamp:P,...J}),P=J.lastVersion}else break;b&&b--}while(P>C&&b!==0);for(let G=k.length;G>0;)N.send(k[--G]);N.startTime=H}!p.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[kt],value:this})}return p.listener&&N.on("data",p.listener),N}doesExist(){return!!this[ue]}async publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let L=this._txnForRequest(),b=this[ce]||null,C,H;L.addWrite({store:i,key:b,lastVersion:this[kt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(k,P)=>{if(this.validate(p),!H&&(H=!0,!N?.isNotification)){let J=M.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(C=J.publish(b,p,this))}let G=P>0?i.get(b):this[ue];G===void 0&&!P&&(E||f)&&(E||gR(),ws(1));let X={type:"message",value:i.encoder.encode(p),[Zn]:C};return!L.hasWrittenTime&&this[kt]>k&&(k=X.newTxnTime=this[kt]+.001),i.put(b,G??null,k),X}})}_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 ma(i,p.user,u)),L}else return new Ju(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 H=p[C.name];if(H!=null)switch(C.type){case"Int":case"Float":(typeof H!="number"||C.type==="Int"&&H!==Math.floor(H))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof H=="string"||H?.length>0&&H.every?.(k=>typeof k=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof H!="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 Si.ClientError(N.join(". "))}getUpdatedTime(){return this[kt]}wasLoadedFromSource(){return R?!!this[_w]:void 0}static async addAttributes(p){let N=h.slice(0);for(let L of p){if(!L.name)throw new Si.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Si.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static async removeAttributes(p){let N=h.filter(L=>!p.includes(L.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),M.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(){xu(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(P=>setImmediate(P));let[C,H,k]=L;L.length>3&&(k=L.slice(2)),H===s&&(N=i.remove(k))}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(G=>setImmediate(G));let[C,H,k]=L;if(L.length>3&&(k=L.slice(2)),H!==s)continue;let P=mn(b,i);P.id=k,P.timestamp=C,yield P}}static async getHistoryOfRecord(p){let N=[],L=i.getEntry(p);if(!L)return N;let b=L.version,C=0;do{await new Promise(P=>setImmediate(P));let H=[b,s,p],k=u.get(H);if(k){let P=mn(k,i);P.timestamp=b,N.push(P),b=P.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){z?.remove()}}M.updatedAttributes();let te=M.prototype;return te[lw]=!0,d&&M.setTTLExpiration(d/1e3),I&&oH(),M;function Ne(Z,p,N){let L;for(let b in r){let C=r[b],H=C.isIndexing,k=N?.[b],P=p?.[b];if(k===P&&!H)continue;L=!0;let G=(0,tc.getIndexedValues)(P);if(G){cw&&C.prefetch(G.map(X=>({key:X,value:Z})),dw);for(let X=0,J=G.length;X<J;X++)C.remove(G[X],Z)}if(G=(0,tc.getIndexedValues)(k),G){cw&&C.prefetch(G.map(X=>({key:X,value:Z})),dw);for(let X=0,J=G.length;X<J;X++)C.put(G[X],Z)}}return L}a(Ne,"updateIndices");function Lt(Z,p,N,L,b,C){let H=a(()=>{let k=N.transaction;if(k?.isDone)throw new Error("Invalid read transaction");let P;k&&!k.hasRunLoadRecord&&(P=!0,k.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(k)+" first loadRecord: "+P,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?(p&&G?.version>(p.lastModified||0)&&(p.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&&Em(Y,"cache-hit",n),Y&&!b&&(L&&(L[_w]=!0),R))return jr(Z,X,J,p).then(j=>{if(j?.value?.[ue])throw new Error("Can not assign a record with a record property");p&&j?.version>(p.lastModified||0)&&(p.lastModified=j.version),C(j)},j=>{C(null,j)});if(G?.value?.[ue])throw new Error("Can not assign a record with a record property");C(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return H();i.prefetch([Z],H)}a(Lt,"loadRecord");function rr(){D=new Set,(0,pi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let p of D)p()}a(Z,"onCommit")}a(rr,"setupCommitListeners");async function jr(Z,p=null,N,L){if(N<0){let P;return D||rr(),await new Promise(G=>{let X,J=a(()=>{if(P=i.getEntry(Z),!P||P.version>0){if(clearTimeout(X),D.delete(J),typeof P?.value?.__invalidated__=="number")return G(jr(Z,P.value,P.version,L));G(P)}},"listener");D.add(J),X=setTimeout(()=>{D.delete(J),G(jr(Z,P?.value,void 0,L))},1e4).unref()})}let b=p?.__invalidated__,C=-(N||1);i.put(Z,p,C,N);let H={requestContext:L,replacingRecord:p,replacingVersion:N},k=L?.responseHeaders;try{let P=performance.now(),G=await M.Source.get(Z,H),X=performance.now()-P;hi(X,"cache-resolution",n),k&&k.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=H.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,tc.getNextMonotonicTime)());let j=Ne(Z,p,G)&&N||b>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,C)):i.remove(Z,C),j&&E&&u.put([J,s,Z],zu(b,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(P){throw i.put(Z,p,N,C),P}}a(jr,"getFromSource");function ws(Z){S||(S=i.get([uw,Sm.threadId])||0),S+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([uw,Sm.threadId],S)},50))}a(ws,"recordDeletion");function gR(){T||(T=setTimeout(()=>{if(T=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),ws(-1)}}},M.getRecordCount()*100+vz).unref())}a(gR,"enqueueDeletionCleanup");function AR(){z=u?.addDeleteRemovalCallback(s,Z=>{let p=i.getEntry(Z);p?.value===null&&i.remove(Z,p.version),ws(-1)})}a(AR,"addDeleteRemoval");function oH(){(0,pi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=I.name,p=r[Z];if(!p)throw new Error(`expiresAt attribute ${I} 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()&&M.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(Z){Ti.error("Error in evicting old records",Z)}},Pz).unref()}a(oH,"runRecordExpirationEviction")}function mm(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 dw(){}function Bz(e){mw=e}function Wl(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Hz.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Ql.autoCast)(e)}function Ew(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 Wr,co,tc,fw,Sm,ec,nc,Si,rc,sc,Ti,hw,pi,Ql,mw,Lz,Mz,Pz,cw,uw,kt,lw,Kae,_w,ja,vz,Hz,Jl=pe(()=>{Wr=U(A()),co=require("lmdb"),tc=U(Ft()),fw=require("lodash"),Sm=require("worker_threads");rs();LA();ec=U(Ve()),nc=U(Q());FA();Si=U(W()),rc=U($s()),sc=U(xr());Ee();Yu();Ti=U(x());Vu();Xn();hw=require("ordered-binary"),pi=U(st());ha();Ql=U(V());mi();Lz=1e8,Mz=1e7,Pz=6e4;nc.initSync();cw=nc.get(Wr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),uw=Symbol.for("deletions"),kt=Symbol.for("version"),lw=Symbol.for("incremental-update"),Kae=Symbol("source-resource"),_w=Symbol("load-from-source"),ja={isNotification:!0,allowInvalidated:!0},vz=(0,Ql.convertToMS)(nc.get(Wr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(zl,"makeTable");a(mm,"attributesAsObject");a(dw,"noop");a(Bz,"setServerUtilities");Hz=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Wl,"coerceType");a(Ew,"isDescendantId")});var be={};ke(be,{database:()=>xa,databases:()=>qe,dropDatabase:()=>Lh,dropTableMeta:()=>Vz,getDatabases:()=>Vr,getTables:()=>qz,onUpdatedTable:()=>Om,readMetaDb:()=>ic,resetDatabases:()=>Fz,table:()=>nt,tables:()=>Er});function qz(){return e_||Vr(),Er||{}}function Vr(){if(e_)return qe;e_=!0,Eo=new Map;let e=(0,Tt.getHdbBasePath)()&&(0,Pe.join)((0,Tt.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),t=(0,Tt.get)(Vt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,Tt.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,dr.existsSync)(e)?e:(0,Pe.join)((0,Tt.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,dr.existsSync)(e))for(let r of(0,dr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pe.basename)(r.name,".mdb");r.isFile()&&(0,Pe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ic((0,Pe.join)(e,r.name),null,s)}if((0,dr.existsSync)((0,_o.getBaseSchemaPath)())){for(let r of(0,dr.readdirSync)((0,_o.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Pe.join)((0,_o.getBaseSchemaPath)(),r.name),n=(0,Pe.join)((0,_o.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,dr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Pe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Pe.join)(n,i.name);ic((0,Pe.join)(s,i.name),(0,Pe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,dr.existsSync)(n))for(let o of(0,dr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Pe.extname)(o.name).toLowerCase()===".mdb"&&ic((0,Pe.join)(n,o.name),(0,Pe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Pe.join)(c.path,(0,Pe.basename)(o+".mdb"));(0,dr.existsSync)(u)&&ic(u,o,r,null,!0)}}for(let r in qe){let s=Eo.get(r);if(s){let n=qe[r];r.includes("delete")&&Me.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Me.trace(`delete table class ${i}`),delete n[i])}else if(delete qe[r],r==="data"){for(let n in Er)delete Er[n];delete Er[t_]}}return Eo=null,qe}}function Fz(){e_=!1;for(let[,e]of In)e.needsDeletion=!0;Vr();for(let[e,t]of In)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),In.delete(e));return qe}function ic(e,t,r=gm,s,n){let i=new Tm.default(e,!1);e.includes("delete")&&Me.trace(`reading meta data from ${e}`);try{let o=In.get(e);o?o.needsDeletion=!1:(o=(0,Xl.open)(i),In.set(e,o));let c=new Ri.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(uo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,dr.existsSync)(s)&&(i.path=s,l=(0,Xl.open)(i),l.isLegacy=!0):l=of(o));let _=Rw(r),d=_[t_],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[S,T]=f.toString().split("/");e.includes("delete")&&Me.trace(`read key ${f}`),T===""?T=h.name:T||(T=S,S=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(S);let R=E.get(S);R||E.set(S,R={attributes:[]}),(T==null||h.is_hash_attribute)&&(R.primary=h),T!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:S,primary:T}=h;if(!T){for(let M of S)if(M.is_hash_attribute||M.isPrimaryKey){T=M;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(S)}`)}let R=_[f],O={},q=[],$,w,I=typeof T.audit=="boolean"?T.audit:(0,Tt.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),D=T.trackDeletes,z=T.expiration;if(R)O=R.indices,q=R.attributes,R.schemaVersion++;else{$=T.tableId,$?$>=(u.get(lo)||0)&&u.putSync(lo,$+1):(T.tableId=$=u.get(lo),$||($=1),u.putSync(lo,$+1),u.putSync(T.key,T));let M=new Ri.default(!T.is_hash_attribute,T.is_hash_attribute);Me.trace(`openDB ${T.key} from ${r}`),w=o.openDB(T.key,M),w.rootStore=o,w.tableId=$}for(let M of S){M.attribute=M.name;try{if(!M.is_hash_attribute&&(M.indexed||M.attribute&&!M.name)){if(!O[M.name]){let Ne=new Ri.default(!M.is_hash_attribute,M.is_hash_attribute);Me.trace(`openDB ${M.key} from ${r}`),O[M.name]=o.openDB(M.key,Ne)}let te=q.find(Ne=>Ne.name===M.name);te?q.splice(q.indexOf(te),1,M):q.push(M)}}catch(te){Me.error("Error trying to update attribute",M,q,O,te)}}if(!R){Me.trace(`creating table class ${f}`,Object.keys(_)),R=gw(_,f,zl({primaryStore:w,auditStore:l,audit:I,expirationMS:z&&z*1e3,trackDeletes:D,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:S,schemaDefined:T.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let M of Am)M(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Rw(e){let t=qe[e];if(t||(e==="data"?t=qe[e]=Er:e==="system"?Object.defineProperty(qe,"system",{value:t=Object.create(null),configurable:!0}):t=qe[e]=Object.create(null)),Eo&&!Eo.has(e)){let r=new Set;t[t_]=r,Eo.set(e,r)}return t}function gw(e,t,r){return e[t]=r,r}function xa({database:e,table:t}){e||(e=gm),Vr();let r=Rw(e),s=(0,Pe.join)((0,Tt.getHdbBasePath)(),Vt.DATABASES_DIR_NAME),n=t&&(0,Tt.get)(Vt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,Tt.get)(Vt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,Tt.get)(Vt.CONFIG_PARAMS.STORAGE_PATH)||((0,dr.existsSync)(s)?s:(0,Pe.join)((0,Tt.getHdbBasePath)(),Vt.LEGACY_DATABASES_DIR_NAME));let i=(0,Pe.join)(s,(n?t:e)+".mdb"),o=In.get(i);if(!o){let c=new Tm.default(i,!1);o=(0,Xl.open)(c),In.set(i,o)}return o}async function Lh(e){if(!qe[e])throw new Error("Schema does not exist");let t=qe[e];for(let r in t){let n=t[r].primaryStore.rootStore;In.delete(n.path),n.status==="open"&&(await n.close(),await Sw.remove(n.path))}if(e==="data"){for(let r in Er)delete Er[r];delete Er[t_]}delete qe[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=gm);let u=xa({database:t,table:e}),l=qe[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 S=new Ri.default(!1);for(let w of s)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let T,R;if(_){if(Me.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 w=u.auditStore;w||(w=of(u)),E=s.find(M=>M.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,Tt.get)(Vt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Me.trace(`${e} table loading, opening primary store`);let I=new Ri.default(!1,!0),D=e+"/";Me.trace(`openDB ${D} from ${t}`);let z=u.openDB(D,I);z.rootStore=u,Me.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,S),z.tableId=h.get(lo),z.tableId||(z.tableId=1),h.putSync(lo,z.tableId+1),E.tableId=z.tableId,_=gw(l,e,zl({primaryStore:z,auditStore:w,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,T=!0,$(),h.put(D,E)}Me.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Me.trace(`openDB ${uo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(uo.INTERNAL_DBIS_NAME,S)),_.dbisDB=h;let O=[];for(let{key:w,value:I}of h.getRange({start:!0})){let[D,z]=w.toString().split("/");if(z===""&&(z=I.name),z){if(D!==e)continue}else z=D;if(!s.find(te=>te.name===z)?.indexed&&I.indexed&&!I.isPrimaryKey){$(),T=!0,h.remove(w);let te=_.indices[D];te&&O.push(te)}}Me.trace(`${e} table loading, comparing atributes`);let q=[];try{for(let w of s||[]){let I=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:I,configurable:!0});let D=h.get(I);if(w.isPrimaryKey){if(D=D||h.get(I=e+"/"),n===!0&&!_.audit||(+r||void 0)!==(+D.expiration||void 0)){let M=Object.assign({},D);n&&(_.enableAuditing(),M.audit=!0),r&&(M.expiration=+r),T=!0,$(),h.put(I,M)}continue}D?.attribute&&!D.name&&(D.indexed=!0);let z=!D||D.type!==w.type||D.indexed!==w.indexed||JSON.stringify(D.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(D.elements)!==JSON.stringify(w.elements);if(w.indexed){let M=new Ri.default(!0,!1);Me.trace(`openDB ${I} from ${t}`);let te=u.openDB(I,M);(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<oc.workerData?.restartNumber)&&(T=!0,$(),D=h.get(I),(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<oc.workerData?.restartNumber)&&(T=!0,w.lastIndexedKey=D?.lastIndexedKey||!1,w.indexingPID=process.pid,te.isIndexing=!0,Object.defineProperty(w,"dbi",{value:te}),q.push(w)),h.put(I,w)),f[w.name]=te}else z&&(T=!0,$(),h.put(I,w))}}finally{R&&R()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Me.trace(`${e} table loading, running index`),q.length>0||O.length>0?_.indexingOperation=kz(_,q,O):T&&Zl.signalSchemaChange(new jl.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let w of Am)w(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Me.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(w){R=w}}))}a($,"startTxn")}async function kz(e,t,r){try{let s=e.schemaVersion;await Zl.signalSchemaChange(new jl.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,S=(0,pw.getIndexedValues)(_[h]);if(S)for(let T=0,R=S.length;T<R;T++)f.dbi.put(S[T],l)}}),n.then(()=>u--,E=>{u--,Me.error(E)}),oc.workerData&&oc.workerData.restartNumber!==Tw.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>Gz?await n:u>xz&&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 Zl.signalSchemaChange(new jl.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Me.error("Error in indexing",s)}}function Vz({table:e,database:t}){let r=xa({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 Om(e){Am.push(e)}var Tt,uo,Xl,Pe,dr,_o,Ri,Tm,Vt,Sw,Rm,pw,Zl,jl,oc,Me,Tw,gm,t_,Er,qe,lo,Am,e_,In,Eo,Gz,xz,Ee=pe(()=>{Tt=U(Q()),uo=U(Ve()),Xl=require("lmdb"),Pe=require("path"),dr=require("fs"),_o=U(Ce());Jl();Ri=U(ju()),Tm=U(tl()),Vt=U(A()),Sw=U(require("fs-extra")),Rm=require("../index"),pw=U(Ft()),Zl=U($s()),jl=U(xr()),oc=require("worker_threads"),Me=U(x()),Tw=U(st());ha();gm="data",t_=Symbol("defined-tables");(0,Tt.initSync)();Er=Object.create(null),qe=Object.create(null);(0,Rm._assignPackageExport)("databases",qe);(0,Rm._assignPackageExport)("tables",Er);lo=Symbol.for("next-table-id"),Am=[],In=new Map;a(qz,"getTables");a(Vr,"getDatabases");a(Fz,"resetDatabases");a(ic,"readMetaDb");a(Rw,"ensureDB");a(gw,"setTable");a(xa,"database");a(Lh,"dropDatabase");a(nt,"table");Gz=1e3,xz=10;a(kz,"runIndexing");a(Vz,"dropTableMeta");a(Om,"onUpdatedTable")});var ym={};ke(ym,{loadGQLSchema:()=>Yz,start:()=>bm,startOnMainThread:()=>$z});function bm({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 S of d.definitions)switch(S.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(w){if(w.kind==="NonNullType"){let D=$(w.type);return D.nullable=!0,D}return w.kind==="ListType"?{type:"array",elements:$(w.type)}:{type:w.name?.value}};a($,"getProperty");let T=S.name.value,R=[],O={table:null,database:null,properties:R};E.set(T,O);for(let w of S.directives){if(w.name.value==="table"){for(let I of w.arguments)O[I.name.value]=I.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=T),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(w.name.value==="sealed"&&(O.sealed=!0),w.name.value==="export"){O.export=!0;for(let I of w.arguments)I.name.value==="name"&&(O.export={name:I.value.value})}}let q=!1;for(let w of S.fields){let I=$(w.type);I.name=w.name.value,R.push(I);for(let D of w.directives)if(D.name.value==="primaryKey")q?console.warn("Can not define two attributes as a primary key"):(I.isPrimaryKey=!0,q=!0);else if(D.name.value==="indexed")I.indexed=!0;else if(D.name.value==="createdTime")I.assignCreatedTime=!0;else if(D.name.value==="updatedTime")I.assignUpdatedTime=!0;else if(D.name.value==="expiresAt")I.expiresAt=!0;else if(D.name.value==="allow"){let z=I.authorizedRoles=[];for(let M of D.arguments)M.name.value==="role"&&z.push(M.value.value)}}O.typeName=T,T==="Query"&&(h=O)}for(let[S,T]of E)for(let R of T.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let S of f)S.tableClass=e(S),S.export&&i.set((0,Nm.dirname)(s)+"/"+(S.export.name||S.typeName),S.tableClass);if(h)for(let S of h.properties){let T=E.get(S.type);if(!T)throw new Error(`${S.type} was not found as a Query export`);i.set((0,Nm.dirname)(s)+"/"+S.name,T.tableClass)}}}var Nm,$z,Yz,Aw=pe(()=>{Nm=require("path");Ee();a(bm,"start");$z=bm,Yz=bm({ensureTable:nt}).handleFile});async function r_(e){return Kz?(ac||(ac=Wz(zz)),(await(await ac).import(e)).namespace):import(e)}async function Wz(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ac=new Compartment({console,Math,Date,fetch:Qz,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Nw.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:Er,databases:qe})}};let s=await(0,Ow.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ac}function Qz(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 zz(){return{Resource:mt,tables:Er}}var Ow,Nw,Kz,ac,Im=pe(()=>{rs();Ee();Ow=require("fs/promises"),Nw=require("path"),Kz=!1;a(r_,"secureImport");a(Wz,"getCompartment");a(Qz,"secureOnlyFetch");a(zz,"getGlobalVars")});var Cm={};ke(Cm,{handleFile:()=>Jz});async function Jz(e,t,r,s){let n=new Map,i=(0,bw.pathToFileURL)(r).toString(),o=await r_(i);u(o.default)&&s.set((0,wm.dirname)(t),o.default),c(o,(0,wm.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 bw,wm,yw=pe(()=>{bw=require("url");Im();wm=require("path");a(Jz,"handleFile")});var Dm={};ke(Dm,{start:()=>Xz});function Xz({resources:e}){e.set("login",Um),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var Um,Iw=pe(()=>{rs();a(Xz,"start");Um=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 Mm=m((lce,Uw)=>{"use strict";var{Readable:Zz}=require("stream"),jz=1e4;Uw.exports={streamAsJSON(e){return new Lm({value:e})}};var Lm=class extends Zz{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),ww)}catch(n){yield ww(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);Cw(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>jz?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 Cw(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 ww(e){return console.error(e),JSON.stringify(e.toString())}a(ww,"handleError");function Cw(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Cw,"when")});var s_=m((dce,Dw)=>{"use strict";var eJ=Yr();Dw.exports={writeTransaction:tJ};function tJ(e,t,r){return eJ.writeTransaction(e,t,r)}a(tJ,"writeTransaction")});var vw=m((hce,Pw)=>{"use strict";var rJ=br(),sJ=An(),Lw=x(),nJ=yr(),fce=s_(),iJ=require("clone"),vm=require("alasql"),oJ=yl(),Mw=require("util"),aJ=Mw.promisify(sJ.getTableSchema),cJ=Mw.promisify(rJ.search),uJ=A(),Pm=V();oJ(vm);Pw.exports={update:_J};var lJ="There was a problem performing this update. Please check the logs and try again.";async function _J({statement:e,hdb_user:t}){let r=await aJ(e.table.databaseid,e.table.tableid),s=dJ(e.columns);Pm.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=iJ(n),c=Pm.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=vm.parse(u).statements[0],_=await cJ(l),d=EJ(s,_);return fJ(o,d,t)}a(_J,"update");function dJ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=vm.compile(`SELECT ${r.expression.toString()} AS [${uJ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Lw.error(t),new Error(lJ)}}a(dJ,"createUpdateRecord");function EJ(e,t){return Pm.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(EJ,"buildUpdateRecords");async function fJ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await nJ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Lw.error(`Error delete new_attributes from update response: ${i}`)}return n}a(fJ,"updateRecords")});var Hw=m((Tce,Bw)=>{var hJ=require("alasql"),mJ=br(),SJ=x(),pJ=Yr(),Hm=require("util"),Bm=V(),TJ=A(),RJ=An(),Sce=s_(),pce=yr(),gJ="record",AJ="successfully deleted",OJ=Hm.callbackify(IJ),NJ=Hm.promisify(mJ.search),bJ=Hm.promisify(RJ.getTableSchema);Bw.exports={convertDelete:OJ};function yJ(e){return`${e.deleted_hashes.length} ${gJ}${e.deleted_hashes.length===1?"":"s"} ${AJ}`}a(yJ,"generateReturnMessage");async function IJ({statement:e,hdb_user:t}){let r=await bJ(e.table.databaseid,e.table.tableid);Bm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Bm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=hJ.parse(o).statements[0],u={operation:TJ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await NJ(c);let l=await pJ.deleteRecords(u);return Bm.isEmptyOrZeroLength(l.message)&&(l.message=yJ(l)),delete l.txn_time,l}catch(l){throw SJ.error(l),l.hdb_code?l.message:l}}a(IJ,"convertDelete")});var kw=m((gce,xw)=>{"use strict";var wJ=ai(),{hdb_errors:qw}=W(),{getDatabases:Fw}=(Ee(),ee(be));xw.exports={checkSchemaExists:Gw,checkSchemaTableExists:CJ,schema_describe:wJ};async function Gw(e){if(!Fw()[e])return qw.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Gw,"checkSchemaExists");async function CJ(e,t){let r=await Gw(e);if(r)return r;if(!Fw()[e][t])return qw.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(CJ,"checkSchemaTableExists")});var cc=m((Oce,UJ)=>{UJ.exports={name:"harperdb",version:"4.2.0-alpha.15",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.388.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.19.1","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.15","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var it=m((wce,aC)=>{"use strict";var Rt=Q();Rt.initSync();var DJ=require("fs-extra"),LJ=require("semver"),dc=require("path"),{monotonicFactory:MJ}=require("ulidx"),xm=MJ(),PJ=require("util"),$w=require("child_process"),vJ=PJ.promisify($w.exec),BJ=$w.spawn,de=He(),Re=A(),n_=V(),wr=x(),i_=Ws(),HJ=s_(),uc=gr(),{Encoder:qJ,decode:km}=require("msgpackr"),Yw=new qJ,{isEmpty:gi}=n_,Kw=Ir(),Ww=12e10,FJ=48*36e11,GJ=5e9,{connect:xJ,StorageType:Qw,RetentionPolicy:zw,AckPolicy:o_,DeliverPolicy:a_,DiscardPolicy:kJ,NatsConnection:Nce,JetStreamManager:bce,JetStreamClient:yce,StringCodec:Ice,JSONCodec:VJ,createInbox:Vm,headers:$J,ErrorCode:Vw}=require("nats"),{PACKAGE_ROOT:YJ}=A(),KJ=cc(),{recordAction:WJ}=(mi(),ee(Za)),Jw=VJ(),QJ="clustering",zJ=KJ.engines[de.NATS_SERVER_NAME],JJ=dc.join(YJ,"dependencies"),Gm=dc.join(JJ,`${process.platform}-${process.arch}`,de.NATS_BINARY_NAME),qm,Fm,lc,fo,ho;aC.exports={runCommand:Xw,checkNATSServerInstalled:XJ,createConnection:$m,getConnection:c_,getJetStreamManager:Ec,getJetStream:Zw,getNATSReferences:$t,getServerList:jJ,createLocalStream:Ym,listStreams:jw,deleteLocalStream:e2,getServerConfig:fc,listRemoteStreams:t2,viewStream:r2,viewStreamIterator:s2,publishToStream:n2,createWorkQueueStream:i2,addSourceToWorkStream:tC,request:a2,removeSourceFromWorkStream:sC,reloadNATS:Km,reloadNATSHub:c2,reloadNATSLeaf:u2,extractServerName:rC,requestErrorHandler:l2,updateWorkStream:_2,createLocalTableStream:iC,createTableStreams:d2,purgeTableStream:oC,purgeSchemaTableStreams:E2,getStreamInfo:f2,updateLocalStreams:m2,closeConnection:ZJ,getJsmServerName:hc,addNatsMsgHeader:eC,updateIngestStreamConsumer:o2};async function Xw(e,t=void 0){let{stdout:r,stderr:s}=await vJ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(zw,"runCommand");async function JJ(){try{await UJ.access(Gm)}catch{return!1}let e=await zw(`${Gm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return DJ.eq(t,QJ)}a(JJ,"checkNATSServerInstalled");async function $m(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await $w.getClusterUser();if(Si(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 GJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.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($m,"createConnection");async function XJ(){Es&&(await Es.drain(),Es=void 0,_o=void 0,Eo=void 0,lc=void 0)}a(XJ,"closeConnection");var Es,lc;async function c_(){return lc||(lc=$m(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Es=await lc),Es||lc}a(c_,"getConnection");async function dc(){if(_o)return _o;Si(Es)&&await c_();let{domain:e}=Ec(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return _o=await Es.jetstreamManager({domain:e}),_o}a(dc,"getJetStreamManager");async function Jw(){if(Eo)return Eo;Si(Es)&&await c_();let{domain:e}=Ec(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Si(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Eo=Es.jetstream({domain:e}),Eo}a(Jw,"getJetStream");async function Vt(){let e=Es||await c_(),t=_o||await dc(),r=Eo||await Jw();return{connection:e,jsm:t,js:r}}a(Vt,"getNATSReferences");async function ZJ(e){let t=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await $w.getClusterUser(),n=await $m(t,r,s),i=Vm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=Qw.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 n_.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(ZJ,"getServerList");async function Ym(e,t){let{jsm:r}=await Vt(),s=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Kw.File,retention:Ww.Limits,subjects:t,discard:xJ.Old,duplicate_window:Yw,max_msgs:n,max_bytes:i,max_age:s})}a(Ym,"createLocalStream");async function Xw(){let{jsm:e}=await Vt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(Xw,"listStreams");async function jJ(e){let{jsm:t}=await Vt();await t.streams.delete(e)}a(jJ,"deleteLocalStream");async function e2(e){let{connection:t}=await Vt(),r=[],s=Vm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Qw.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(e2,"listRemoteStreams");async function t2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:o_.Explicit};t&&(o.deliver_policy=a_.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=km(_.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(t2,"viewStream");async function*r2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Vt(),i=xm(),o={durable_name:i,ack_policy:o_.Explicit};t&&(o.deliver_policy=a_.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 _=km(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(r2,"viewStreamIterator");async function s2(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=Zw(s,r);let{js:n}=await Vt(),i=await fc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Vw.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),KJ(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 rC(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 Ym(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(s2,"publishToStream");function Zw(e,t){t===void 0&&(t=VJ());let r=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=n_.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${xm()}`;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(Zw,"addNatsMsgHeader");function Ec(e){e=e.toLowerCase();let t=_c.join(Rt.get(Te.CONFIG_PARAMS.ROOTPATH),WJ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Si(Fm)&&(Fm={port:cc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:cc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:_c.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),Fm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Si(qm)&&(qm={port:cc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:cc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:cc.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:_c.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),qm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ec,"getServerConfig");async function n2(e){let{jsm:t}=await Vt(),r=await fc();try{await t.streams.add({name:e.stream_name,storage:Kw.File,retention:Ww.Limits,duplicate_window:Yw,max_age:qJ,max_bytes:FJ,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:o_.Explicit,durable_name:e.durable_name,deliver_policy:a_.All,max_ack_pending:1e4});else throw s}}a(n2,"createWorkQueueStream");async function i2(){let{jsm:e}=await Vt();(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:o_.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:a_.All,max_ack_pending:1e4}))}a(i2,"updateIngestStreamConsumer");async function jw(e,t,r){let{jsm:s}=await Vt(),n=await s.streams.info(t),i=eC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=i_.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 S=0,T=n.config.sources.length;S<T;S++)if(d=n.config.sources[S],E=S,_&&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(jw,"addSourceToWorkStream");function eC(e){return e.split(".")[1]}a(eC,"extractServerName");async function tC(e,t,r){let{schema:s,table:n}=r,i=i_.createNatsTableStreamName(s,n),{jsm:o}=await Vt(),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(tC,"removeSourceFromWorkStream");async function o2(e,t,r=2e4,s=Vm()){if(!n_.isObject(t))throw new Error("data param must be an object");let n=Vw.encode(t),{connection:i}=await Vt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return km(c.data)}a(o2,"request");function Km(e){return new Promise(async(t,r)=>{let s=vJ(Gm,["--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(Km,"reloadNATS");async function a2(){let{pid_file_path:e}=Ec(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Km(e)}a(a2,"reloadNATSHub");async function c2(){let{pid_file_path:e}=Ec(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Km(e)}a(c2,"reloadNATSLeaf");function u2(e,t,r){let s;switch(e.code){case xw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case xw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(u2,"requestErrorHandler");async function l2(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await rC(async()=>{e.subscribe===!0?await jw(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await tC(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(l2,"updateWorkStream");function rC(e){return BJ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(rC,"exclusiveLock");async function sC(e,t){let r=i_.createNatsTableStreamName(e,t),s=await fc(),n=f2(e,t,s);await Ym(r,[n])}a(sC,"createLocalTableStream");async function _2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await sC(s,n)}}a(_2,"createTableStreams");async function nC(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=i_.createNatsTableStreamName(e,t),{jsm:s}=await Vt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(nC,"purgeTableStream");async function d2(e,t){if(Rt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await nC(e,t[r])}a(d2,"purgeSchemaTableStreams");async function E2(e){return(await dc()).streams.info(e)}a(E2,"getStreamInfo");function f2(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(f2,"createSubjectName");async function fc(){if(uc)return uc;if(uc=(await dc())?.nc?.info?.server_name,uc===void 0)throw new Error("Unable to get jetstream manager server name");return uc}a(fc,"getJsmServerName");async function h2(){let e=await dc(),t=await fc(),r=await Xw();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=m2(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(h2,"updateLocalStreams");function m2(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=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Rt.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(m2,"updateStreamLimits")});var d_=m((Uce,uC)=>{"use strict";var fo=ul(),ho=Gw(),S2=x(),p2=require("uuid").v4,Cce=require("clone"),l_=Gs(),mo=A(),T2=require("util"),Nn=Vr(),{handleHDBError:$t,hdb_errors:R2}=W(),{HDB_ERROR_MSGS:u_,HTTP_STATUS_CODES:Yt}=R2,{SchemaEventMsg:__}=Fr(),oC=it(),{getDatabases:g2}=(de(),ee(Ne)),{transformReq:So}=V();uC.exports={createSchema:A2,createSchemaStructure:aC,createTable:O2,createTableStructure:cC,createAttribute:w2,dropSchema:N2,dropTable:b2,dropAttribute:y2,getBackup:C2};async function A2(e){let t=await aC(e);return l_.signalSchemaChange(new __(process.pid,e.operation,e.schema)),t}a(A2,"createSchema");async function aC(e){let t=fo.schema_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(So(e),!await ho.checkSchemaExists(e.schema))throw $t(new Error,u_.SCHEMA_EXISTS_ERR(e.schema),Yt.BAD_REQUEST,mo.LOG_LEVELS.ERROR,u_.SCHEMA_EXISTS_ERR(e.schema),!0);return await Nn.createSchema(e),`database '${e.schema}' successfully created`}a(aC,"createSchemaStructure");async function O2(e){return So(e),await cC(e)}a(O2,"createTable");async function cC(e){let t=fo.create_table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);if(fo.validateTableResidence(e.residence),!await ho.checkSchemaTableExists(e.schema,e.table))throw $t(new Error,u_.TABLE_EXISTS_ERR(e.schema,e.table),Yt.BAD_REQUEST,mo.LOG_LEVELS.ERROR,u_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:p2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Nn.createTable(s,e);else throw $t(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Yt.BAD_REQUEST);else await Nn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(cC,"createTableStructure");async function N2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=fo.schema_object(e),s=t??r;if(s)throw $t(s,s.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let n=await ho.checkSchemaExists(e.schema);if(n)throw $t(new Error,n,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,n,!0);let i=await ho.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Nn.dropSchema(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema)),await oC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(N2,"dropSchema");async function b2(e){let t=fo.table_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let r=await ho.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,r,!0);return await Nn.dropTable(e),await oC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(b2,"dropTable");async function y2(e){let t=fo.attribute_object(e);if(t)throw $t(t,t.message,Yt.BAD_REQUEST,void 0,void 0,!0);So(e);let r=await ho.checkSchemaTableExists(e.schema,e.table);if(r)throw $t(new Error,r,Yt.NOT_FOUND,mo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw $t(new Error,"You cannot drop a hash attribute",Yt.BAD_REQUEST,void 0,void 0,!0);if(mo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw $t(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Yt.BAD_REQUEST,void 0,void 0,!0);try{return await Nn.dropAttribute(e),I2(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw S2.error(`Got an error deleting attribute ${T2.inspect(e)}.`),s}}a(y2,"dropAttribute");function I2(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(I2,"dropAttributeFromGlobal");async function w2(e){So(e);let t=g2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw $t(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Yt.BAD_REQUEST,void 0,void 0,!0);return await Nn.createAttribute(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(w2,"createAttribute");function C2(e){return Nn.getBackup(e)}a(C2,"getBackup")});var _C=m((Lce,lC)=>{"use strict";var{OPERATIONS_ENUM:U2}=A(),Wm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=U2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};lC.exports=Wm});var Qm=m((vce,mC)=>{"use strict";var D2=Vr(),Pce=_C(),E_=V(),f_=A(),L2=Q(),{handleHDBError:dC,hdb_errors:M2}=W(),{HDB_ERROR_MSGS:EC,HTTP_STATUS_CODES:fC}=M2,P2=Object.values(f_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),hC="To use this operation audit log must be enabled in harperdb-config.yaml";mC.exports=v2;async function v2(e){if(E_.isEmpty(e.schema))throw new Error(EC.SCHEMA_REQUIRED_ERR);if(E_.isEmpty(e.table))throw new Error(EC.TABLE_REQUIRED_ERR);if(!L2.get(f_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw dC(new Error,hC,fC.BAD_REQUEST,f_.LOG_LEVELS.ERROR,hC,!0);let t=E_.checkSchemaTableExist(e.schema,e.table);if(t)throw dC(new Error,t,fC.NOT_FOUND,f_.LOG_LEVELS.ERROR,t,!0);if(!E_.isEmpty(e.search_type)&&P2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await D2.readAuditLog(e)}a(v2,"readAuditLog")});var pC=m((Hce,SC)=>{"use strict";var{OPERATIONS_ENUM:B2}=A(),zm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=B2.GET_BACKUP,this.schema=t,this.table=r}};SC.exports=zm});var gC=m((xce,RC)=>{"use strict";var H2=Vr(),Fce=pC(),Jm=V(),q2=A(),Gce=Q(),{handleHDBError:F2,hdb_errors:G2}=W(),{HDB_ERROR_MSGS:TC,HTTP_STATUS_CODES:x2}=G2;RC.exports=k2;async function k2(e){if(Jm.isEmpty(e.schema))throw new Error(TC.SCHEMA_REQUIRED_ERR);if(Jm.isEmpty(e.table))throw new Error(TC.TABLE_REQUIRED_ERR);let t=Jm.checkSchemaTableExist(e.schema,e.table);if(t)throw F2(new Error,t,x2.NOT_FOUND,q2.LOG_LEVELS.ERROR,t,!0);return await H2.getBackup(read_audit_log_object)}a(k2,"getBackup")});var IC=m((Vce,yC)=>{var bn=require("validate.js"),OC=ve(),po=A(),{handleHDBError:V2,hdb_errors:$2}=W(),{HDB_ERROR_MSGS:$e,HTTP_STATUS_CODES:Y2}=$2,Xm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),K2={STRUCTURE_USER:"structure_user"},AC=Object.values(po.ROLE_TYPES_ENUM),W2="attribute_permissions",Q2="attribute_name",{PERMS_CRUD_ENUM:To}=po,z2=[W2,...Object.values(To)],NC=[To.READ,To.INSERT,To.UPDATE],J2=[Q2,...NC];function X2(e){let t=Xm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,bC(e,t)}a(X2,"addRoleValidation");function Z2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,bC(e,t)}a(Z2,"alterRoleValidation");function j2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,OC.validateObject(e,t)}a(j2,"dropRoleValidation");var e3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function bC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)e3.includes(s[o])||n.push(s[o]);n.length>0&&ze($e.INVALID_ROLE_JSON_KEYS(n),r);let i=OC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=t3(e);o&&ze(o,r),AC.forEach(c=>{e.permission[c]&&!bn.isBoolean(e.permission[c])&&ze($e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(AC.indexOf(o)<0){if(o===K2.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]||ze($e.SCHEMA_NOT_FOUND(d),r)}continue}ze($e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze($e.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]){ze($e.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{z2.includes(_)||ze($e.INVALID_PERM_KEY(_),r,o,u)}),Object.values(To).forEach(_=>{bn.isDefined(l[_])?bn.isBoolean(l[_])||ze($e.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze($e.TABLE_PERM_MISSING(_),r,o,u)}),bn.isDefined(l.attribute_permissions)){if(!bn.isArray(l.attribute_permissions)){ze($e.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze($e.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(S=>{!J2.includes(S)&&S!==To.DELETE&&ze($e.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!bn.isDefined(f.attribute_name)){ze($e.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze($e.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}NC.forEach(S=>{bn.isDefined(f[S])?bn.isBoolean(f[S])||ze($e.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):ze($e.ATTR_PERM_MISSING(S,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}`;ze($e.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return r3(r)}a(bC,"customValidate");yC.exports={addRoleValidation:X2,alterRoleValidation:Z2,dropRoleValidation:j2};function t3(e){let{operation:t,permission:r}=e;if(t===po.OPERATIONS_ENUM.ADD_ROLE||t===po.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 $e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?po.ROLE_TYPES_ENUM.SUPER_USER:po.ROLE_TYPES_ENUM.CLUSTER_USER;return $e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(t3,"validateNoSUPerms");function r3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:$e.ROLE_PERMS_ERROR,...e};return V2(new Error,s,Y2.BAD_REQUEST)}else return null}a(r3,"generateRolePermResponse");function ze(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(ze,"addPermError")});var sS=m((Yce,DC)=>{"use strict";var wC=Nr(),CC=Or(),s3=ci(),jm=IC(),eS=Gs(),n3=require("uuid").v4,i3=require("util"),h_=A(),o3=V(),tS=CC.searchByValue,a3=CC.searchByHash,c3=i3.promisify(s3.delete),u3=as(),l3=Xi(),{hdb_errors:_3,handleHDBError:Ro}=W(),{HDB_ERROR_MSGS:UC,HTTP_STATUS_CODES:m_}=_3,{UserEventMsg:rS}=Fr();DC.exports={addRole:d3,alterRole:E3,dropRole:f3,listRoles:h3};function Zm(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(Zm,"scrubRoleDetails");async function d3(e){let t=jm.addRoleValidation(e);if(t)throw t;e=Zm(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 tS(r)||[])}catch(i){throw Ro(i)}if(s&&s.length>0)throw Ro(new Error,UC.ROLE_ALREADY_EXISTS(e.role),m_.CONFLICT,void 0,void 0,!0);e.id||(e.id=n3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await wC.insert(n),eS.signalUserChange(new rS(process.pid)),e=Zm(e),e}a(d3,"addRole");async function E3(e){let t=jm.alterRoleValidation(e);if(t)throw t;e=Zm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await wC.update(r)}catch(n){throw Ro(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ro(new Error,"Invalid role id",m_.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(E3,"alterRole");async function f3(e){let t=jm.dropRoleValidation(e);if(t)throw Ro(new Error,t,m_.BAD_REQUEST,void 0,void 0,!0);let r=new l3(h_.SYSTEM_SCHEMA_NAME,h_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await a3(r));if(s.length===0)throw Ro(new Error,UC.ROLE_NOT_FOUND,m_.NOT_FOUND,void 0,void 0,!0);let n=new u3(h_.SYSTEM_SCHEMA_NAME,h_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(o3.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 c3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(f3,"dropRole");async function h3(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(h3,"listRoles")});var vC=m((Wce,PC)=>{"use strict";var m3=Q(),yn=require("joi"),S3=ve(),LC=require("moment"),p3=require("fs-extra"),nS=require("path"),T3=require("lodash"),hc=A(),{LOG_LEVELS:pi}=A(),R3="YYYY-MM-DD hh:mm:ss",g3=nS.resolve(__dirname,"../logs");PC.exports=function(e){return S3.validateBySchema(e,A3)};var A3=yn.object({from:yn.custom(MC),until:yn.custom(MC),level:yn.valid(pi.NOTIFY,pi.FATAL,pi.ERROR,pi.WARN,pi.INFO,pi.DEBUG,pi.TRACE),order:yn.valid("asc","desc"),limit:yn.number().min(1),start:yn.number().min(0),log_name:yn.custom(O3)});function MC(e,t){if(LC(e,LC.ISO_8601).format(R3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(MC,"validateDatetime");function O3(e,t){if(T3.invert(hc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=m3.get(hc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?hc.LOG_NAMES.HDB:e,i=n===hc.LOG_NAMES.INSTALL?nS.join(g3,hc.LOG_NAMES.INSTALL):nS.join(s,n);return p3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(O3,"validateReadLogPath")});var oS=m((zce,HC)=>{"use strict";var S_=A(),N3=x(),b3=Q(),y3=vC(),iS=require("path"),BC=require("fs-extra"),{once:I3}=require("events"),{handleHDBError:w3,hdb_errors:C3}=W(),{PACKAGE_ROOT:U3}=A(),D3=iS.join(U3,"logs"),L3=1e3,M3=200;HC.exports=P3;async function P3(e){let t=y3(e);if(t)throw w3(t,t.message,C3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=b3.get(S_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?S_.LOG_NAMES.HDB:e.log_name,n=s===S_.LOG_NAMES.INSTALL?iS.join(D3,S_.LOG_NAMES.INSTALL):iS.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?L3:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,S=0;E==="desc"&&!u&&!_&&(S=Math.max(BC.statSync(n).size-(h+5)*M3,0));let T=BC.createReadStream(n,{start:S});T.on("error",b=>{N3.error(b)});let g=0,O=[],k="",$;T.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))&&!T.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,je,fu]=q,vi=fu.split("] ["),Wo=vi[0],xn=vi[1];vi.splice(0,2),$={timestamp:je,thread:Wo,level:xn,tags:vi,message:""},z=q.index+Oe.length}k=b.slice(z)}),T.on("end",b=>{T.destroyed||$&&($.message=k.trim(),U($))}),T.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&&g<f?g++:b.level===o&&P>=z&&P<=q&&(In(b,E,O),g++,g===h&&T.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&g<f?g++:b.level===o&&P>=z&&(In(b,E,O),g++,g===h&&T.destroy());break;case(i&&l):P=new Date(b.timestamp),q=new Date(_),b.level===o&&P<=q&&g<f?g++:b.level===o&&P<=q&&(In(b,E,O),g++,g===h&&T.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&g<f?g++:P>=z&&P<=q&&(In(b,E,O),g++,g===h&&T.destroy());break;case i:b.level===o&&g<f?g++:b.level===o&&(In(b,E,O),g++,g===h&&T.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&g<f?g++:P>=z&&g>=f&&(In(b,E,O),g++,g===h&&T.destroy());break;case l:P=new Date(b.timestamp),q=new Date(_),P<=q&&g<f?g++:P<=q&&g>=f&&(In(b,E,O),g++,g===h&&T.destroy());break;default:g<f?g++:(In(b,E,O),g++,g===h&&T.destroy())}}return a(U,"onLogMessage"),await I3(T,"close"),O}a(P3,"readLog");function In(e,t,r){t==="desc"?v3(e,r):t==="asc"?B3(e,r):r.push(e)}a(In,"pushLineToResult");function v3(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(v3,"insertDescending");function B3(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(B3,"insertAscending")});var T_=m((eue,xC)=>{"use strict";var aS=require("joi"),{string:p_,boolean:qC,date:H3}=aS.types(),q3=ve(),{validateSchemaExists:Xce,validateTableExists:Zce,validateSchemaName:jce}=is(),F3=A(),G3=Be(),FC=Q();FC.initSync();var x3=p_.invalid(FC.get(F3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(G3.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(),GC={operation:p_.valid("add_node","update_node"),node_name:x3,subscriptions:aS.array().items({table:p_.optional(),schema:p_.required(),subscribe:qC.required(),publish:qC.required().custom(V3),start_time:H3.iso()}).min(1).required()};function k3(e){return q3.validateBySchema(e,aS.object(GC))}a(k3,"addUpdateNodeValidator");function V3(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(V3,"checkForFalsy");xC.exports={addUpdateNodeValidator:k3,validation_schema:GC}});var VC=m((rue,kC)=>{var $3=ve(),Y3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};kC.exports=function(e){return $3.validateObject(e,Y3)}});var uS=m((sue,$C)=>{"use strict";var K3=A().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=K3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};$C.exports=cS});var KC=m((iue,YC)=>{"use strict";var W3={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};YC.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:W3,JWTRSAKeys:_S}});var pc=m((aue,JC)=>{"use strict";var Sc=require("jsonwebtoken"),dS=require("fs-extra"),ES=V(),Ir=A(),{handleHDBError:Kt,hdb_errors:Q3}=W(),{HTTP_STATUS_CODES:Wt,AUTHENTICATION_ERROR_MSGS:Qt}=Q3,mc=x(),WC=Hl(),mS=br(),z3=Nr().update,J3=uS(),X3=Gs(),{UserEventMsg:Z3}=Fr(),wn=Q();wn.initSync();var fS=require("path"),{JWTTokens:j3,JWTRSAKeys:e4,TOKEN_TYPE_ENUM:R_}=KC(),t4=wn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?wn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",r4=wn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?wn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",g_="RS256",hS;JC.exports={createTokens:s4,validateOperationToken:i4,refreshOperationToken:n4,validateRefreshToken:zC};async function s4(e){if(ES.isEmpty(e)||typeof e!="object")throw Kt(new Error,Qt.INVALID_AUTH_OBJECT,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.username))throw Kt(new Error,Qt.USERNAME_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.password))throw Kt(new Error,Qt.PASSWORD_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw mc.error(E),Kt(new Error,Qt.INVALID_CREDENTIALS,Wt.UNAUTHORIZED,void 0,void 0,!0)}let r=await A_(),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 QC(i,r.private_key,r.passphrase),c=await Sc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:r4,algorithm:g_,subject:R_.REFRESH}),u=WC.hash(c),l=new J3(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await z3(l)}catch(E){mc.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Kt(new Error,Qt.REFRESH_TOKEN_SAVE_FAILED,Wt.INTERNAL_SERVER_ERROR);return X3.signalUserChange(new Z3(process.pid)),new j3(o,c)}a(s4,"createTokens");async function QC(e,t,r){return await Sc.sign(e,{key:t,passphrase:r},{expiresIn:t4,algorithm:g_,subject:R_.OPERATION})}a(QC,"signOperationToken");async function A_(){if(hS===void 0)try{let e=fS.join(wn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fS.join(wn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fS.join(wn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new e4(i,n,s)}catch(e){throw mc.error(e),Kt(new Error,Qt.NO_ENCRYPTION_KEYS,Wt.INTERNAL_SERVER_ERROR)}return hS}a(A_,"getJWTRSAKeys");async function n4(e){if(!e)throw Kt(new Error,Qt.INVALID_BODY,Wt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Kt(new Error,Qt.REFRESH_TOKEN_REQUIRED,Wt.BAD_REQUEST,void 0,void 0,!0);await zC(e.refresh_token);let t=await A_(),r=await Sc.decode(e.refresh_token);return{operation_token:await QC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(n4,"refreshOperationToken");async function i4(e){try{let t=await A_(),r=await Sc.verify(e,t.public_key,{algorithms:g_,subject:R_.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw mc.warn(t),t.name&&t.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}}a(i4,"validateOperationToken");async function zC(e){let t;try{let r=await A_(),s=await Sc.verify(e,r.public_key,{algorithms:g_,subject:R_.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw mc.warn(r),r.name&&r.name==="TokenExpiredError"?Kt(new Error,Qt.TOKEN_EXPIRED,Wt.FORBIDDEN):Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED)}if(!WC.validate(t.refresh_token,e))throw Kt(new Error,Qt.INVALID_TOKEN,Wt.UNAUTHORIZED);return t}a(zC,"validateRefreshToken")});var SS=m((lue,jC)=>{"use strict";var o4=VC(),go=require("passport"),a4=require("passport-local").Strategy,c4=require("passport-http").BasicStrategy,u4=require("util"),l4=br(),ZC=u4.callbackify(l4.findAndValidateUser),uue=rr(),_4=A(),XC=pc();go.use(new a4(function(e,t,r){ZC(e,t,r)}));go.use(new c4(function(e,t,r){ZC(e,t,r)}));go.serializeUser(function(e,t){t(null,e)});go.deserializeUser(function(e,t){t(null,e)});function d4(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":go.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?XC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):XC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:go.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(d4,"authorize");function E4(e,t){let r=o4(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(E4,"checkPermissions");jC.exports={authorize:d4,checkPermissions:E4}});var Ao=m((due,eU)=>{"use strict";var pS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};eU.exports={Node:pS,NodeSubscription:TS}});var rU=m((fue,tU)=>{"use strict";var f4=A().OPERATIONS_ENUM,RS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=f4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};tU.exports=RS});var Tc=m((mue,sU)=>{"use strict";var gS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=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)}};sU.exports={RemotePayloadObject:gS,RemotePayloadSubscription:AS}});var iU=m((pue,nU)=>{"use strict";var OS=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}};nU.exports=OS});var cU=m((Oue,aU)=>{"use strict";var h4=iU(),Rue=ke(),oU=ye(),m4=x(),{getSchemaPath:gue,getTransactionAuditStorePath:Aue}=we(),{getDatabases:S4}=(de(),ee(Ne));aU.exports=p4;async function p4(e){let t=new h4;try{let r=S4()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await oU.environmentDataSize(schema_path,e.name),o=await oU.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){m4.warn(`unable to stat table dbi due to ${r}`)}return t}a(p4,"lmdbGetTableSize")});var lU=m((bue,uU)=>{"use strict";var NS=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}};uU.exports=NS});var Oo=m((Cue,fU)=>{"use strict";var T4=require("fs-extra"),R4=require("path"),Ut=require("systeminformation"),Cn=x(),g4=it(),bS=Be(),N_=A(),A4=cU(),EU=si(),{getThreadInfo:_U}=st(),vS=Q();vS.initSync();var O4=lU(),{openEnvironment:Iue}=ye(),{getSchemaPath:wue}=we(),{database:N4}=(de(),ee(Ne)),O_;fU.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:US,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:LS,systemInformation:b4,getTableSize:MS,getMetrics:PS};function yS(){return Ut.time()}a(yS,"getTimeInfo");async function IS(){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:S,raw_currentload_user:T,cpus:g,...O}=await Ut.currentLoad();return O.cpus=[],g.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 Cn.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Cn.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await T4.readFile(R4.join(vS.get(N_.CONFIG_PARAMS.ROOTPATH),N_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===N_.NODE_ERROR_CODES.ENOENT)Cn.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 Cn.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function US(){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 Cn.error(`error in getDiskInfo: ${t}`),e}}a(US,"getDiskInfo");async function DS(){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 Cn.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function LS(){if(O_!==void 0)return O_;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,O_=e,O_}catch(t){return Cn.error(`error in getSystemInformation: ${t}`),e}}a(LS,"getSystemInformation");async function MS(){let e=[],t=await EU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await A4(s));return e}a(MS,"getTableSize");async function PS(){let e=await EU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=N4({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){Cn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function dU(){if(vS.get(N_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await g4.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.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(dU,"getNatsStreamInfo");async function b4(e){let t=new O4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LS(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await US(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await _U(),t.replication=await dU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LS();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await US();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await _U();break;case"replication":t.replication=await dU();break;default:break}return t}a(b4,"systemInformation")});var BS=m((Mue,hU)=>{"use strict";var Due=require("fs-extra"),Lue=x();hU.exports={version:y4,printVersion:w4,nodeVersion:I4};var Un=ac();function y4(){if(Un)return Un.version}a(y4,"version");function I4(){if(Un&&Un.engines&&Un.engines["preferred-node"])return Un.engines["preferred-node"]}a(I4,"nodeVersion");function w4(){Un&&console.log(`HarperDB Version ${Un.version}`)}a(w4,"printVersion")});var $s=m((Hue,TU)=>{"use strict";var C4=Nr(),HS=V(),U4=require("util"),Ti=A(),mU=Q();mU.initSync();var D4=SS(),SU=Or(),{Node:vue,NodeSubscription:Bue}=Ao(),L4=Xi(),M4=rU(),{RemotePayloadObject:P4,RemotePayloadSubscription:v4}=Tc(),{handleHDBError:B4,hdb_errors:H4}=W(),{HTTP_STATUS_CODES:q4,HDB_ERROR_MSGS:F4}=H4,G4=as(),x4=Oo(),k4=BS(),{getDatabases:V4}=(de(),ee(Ne)),$4=U4.promisify(D4.authorize),Y4=SU.searchByHash,K4=SU.searchByValue;TU.exports={authHeaderToUser:W4,isEmpty:Q4,getNodeRecord:z4,upsertNodeRecord:J4,buildNodePayloads:X4,checkClusteringEnabled:Z4,getAllNodeRecords:j4,getSystemInfo:eX,reverseSubscription:pU};async function W4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await $4(t,null),e}a(W4,"authHeaderToUser");function Q4(e){return e==null}a(Q4,"isEmpty");async function z4(e){let t=new L4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return Y4(t)}a(z4,"getNodeRecord");async function J4(e){let t=new M4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return C4.upsert(t)}a(J4,"upsertNodeRecord");function pU(e){if(HS.isEmpty(e.subscribe)||HS.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(pU,"reverseSubscription");function X4(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,_=HS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=pU(c),f=V4()[u]?.[l],h=new v4(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new P4(r,t,n,s)}a(X4,"buildNodePayloads");function Z4(){if(!mU.get(Ti.CONFIG_PARAMS.CLUSTERING_ENABLED))throw B4(new Error,F4.CLUSTERING_NOT_ENABLED,q4.BAD_REQUEST,void 0,void 0,!0)}a(Z4,"checkClusteringEnabled");async function j4(){let e=new G4(Ti.SYSTEM_SCHEMA_NAME,Ti.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await K4(e))}a(j4,"getAllNodeRecords");async function eX(){let e=await x4.getSystemInformation();return{hdb_version:k4.version(),node_version:e.node_version,platform:e.platform}}a(eX,"getSystemInfo")});var qS=m((Fue,IU)=>{"use strict";var b_=it(),RU=V(),gU=Be(),AU=A(),y_=x(),OU=d_(),tX=dh(),{RemotePayloadObject:rX}=Tc(),{handleHDBError:NU,hdb_errors:sX}=W(),{HTTP_STATUS_CODES:bU}=sX,{NodeSubscription:yU}=Ao();IU.exports=nX;async function nX(e,t){let r;try{r=await b_.request(`${t}.${gU.REQUEST_SUFFIX}`,new rX(AU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),y_.trace("Response from remote describe all request:",r)}catch(o){y_.error(`addNode received error from describe all request to remote node: ${o}`);let c=b_.requestErrorHandler(o,"add_node",t);throw NU(new Error,c,bU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===gU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw NU(new Error,o,bU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===AU.SYSTEM_SCHEMA_NAME){await b_.createLocalTableStream(c,u);let h=new yU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=RU.doesSchemaExist(c),_=s[c]!==void 0,d=u?RU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(y_.trace(`addNode creating schema: ${c}`),await OU.createSchema({operation:"create_schema",schema:c})),!d&&E){y_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new tX(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await OU.createTable(h)}await b_.createLocalTableStream(c,u);let f=new yU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(nX,"reviewSubscriptions")});var C_=m((xue,UU)=>{"use strict";var{handleHDBError:I_,hdb_errors:iX}=W(),{HTTP_STATUS_CODES:w_}=iX,{addUpdateNodeValidator:oX}=T_(),Rc=x(),CU=A(),wU=Be(),aX=V(),FS=it(),gc=$s(),cX=Q(),uX=qS(),{Node:lX,NodeSubscription:_X}=Ao(),{broadcast:dX}=st(),EX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",fX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",hX=cX.get(CU.CONFIG_PARAMS.CLUSTERING_NODENAME);UU.exports=mX;async function mX(e,t=!1){Rc.trace("addNode called with:",e),gc.checkClusteringEnabled();let r=oX(e);if(r)throw I_(r,r.message,w_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await gc.getNodeRecord(s);if(!aX.isEmptyOrZeroLength(d))throw I_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,w_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await uX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=EX,o;let c=gc.buildNodePayloads(n,hX,CU.OPERATIONS_ENUM.ADD_NODE,await gc.getSystemInfo());Rc.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${wU.REQUEST_SUFFIX}`,c)}catch(d){Rc.error(`addNode received error from request: ${d}`);let E=FS.requestErrorHandler(d,"add_node",s);throw I_(new Error,E,w_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===wU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw I_(new Error,d,w_.INTERNAL_SERVER_ERROR,"error",d)}Rc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Rc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await FS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new _X(f.schema,f.table,f.publish,f.subscribe))}let _=new lX(s,l,u.system_info);return await gc.upsertNodeRecord(_),dX({type:"nats_update"}),i.length>0?o.message=fX:o.message=`Successfully added '${s}' to manifest`,o}a(mX,"addNode")});var xS=m((Vue,MU)=>{"use strict";var{handleHDBError:U_,hdb_errors:SX}=W(),{HTTP_STATUS_CODES:D_}=SX,{addUpdateNodeValidator:pX}=T_(),Ac=x(),LU=A(),DU=Be(),TX=V(),GS=it(),Oc=$s(),RX=Q(),{cloneDeep:gX}=require("lodash"),AX=qS(),{NodeSubscription:OX}=Ao(),{broadcast:NX}=st(),bX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",yX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",IX=RX.get(LU.CONFIG_PARAMS.CLUSTERING_NODENAME);MU.exports=wX;async function wX(e){Ac.trace("updateNode called with:",e),Oc.checkClusteringEnabled();let t=pX(e);if(t)throw U_(t,t.message,D_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=gX(await Oc.getNodeRecord(r));if(TX.isEmptyOrZeroLength(s))throw U_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,D_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await AX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=bX,o;let c=Oc.buildNodePayloads(n,IX,LU.OPERATIONS_ENUM.UPDATE_NODE,await Oc.getSystemInfo());Ac.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${DU.REQUEST_SUFFIX}`,c)}catch(l){Ac.error(`updateNode received error from request: ${l}`);let _=GS.requestErrorHandler(l,"update_node",r);throw U_(new Error,_,D_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===DU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw U_(new Error,l,D_.INTERNAL_SERVER_ERROR,"error",l)}Ac.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Ac.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await GS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await CX(s[0],n,u.system_info),i.length>0?o.message=yX:o.message=`Successfully updated '${r}'`,o}a(wX,"updateNode");async function CX(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 OX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Oc.upsertNodeRecord(s),NX({type:"nats_update"})}a(CX,"updateNodeTable")});var qU=m((Yue,HU)=>{"use strict";var BU=require("joi"),{string:PU}=BU.types(),UX=ve(),vU=A(),DX=Q(),LX=Be();HU.exports=MX;function MX(e){let t=PU.invalid(DX.get(vU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(LX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=BU.object({operation:PU.valid(vU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return UX.validateBySchema(e,r)}a(MX,"removeNodeValidator")});var M_=m((Wue,$U)=>{"use strict";var{handleHDBError:FU,hdb_errors:PX}=W(),{HTTP_STATUS_CODES:GU}=PX,vX=qU(),Nc=x(),xU=$s(),BX=V(),L_=A(),kU=Be(),VU=it(),HX=Q(),{RemotePayloadObject:qX}=Tc(),{NodeSubscription:FX}=Ao(),GX=Ba(),xX=ci(),{broadcast:kX}=st(),VX=HX.get(L_.CONFIG_PARAMS.CLUSTERING_NODENAME);$U.exports=$X;async function $X(e){Nc.trace("removeNode called with:",e),xU.checkClusteringEnabled();let t=vX(e);if(t)throw FU(t,t.message,GU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await xU.getNodeRecord(r);if(BX.isEmptyOrZeroLength(s))throw FU(new Error,`Node '${r}' was not found.`,GU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new qX(L_.OPERATIONS_ENUM.REMOVE_NODE,VX,[]),i,o=!1;try{i=await VU.request(`${r}.${kU.REQUEST_SUFFIX}`,n),Nc.trace("Remove node reply from remote node:",r,i)}catch(u){Nc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Nc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new FX(_.schema,_.table,!1,!1);await VU.updateWorkStream(d,r)}let c=new GX(L_.SYSTEM_SCHEMA_NAME,L_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await xX.deleteRecord(c),kX({type:"nats_update"}),i?.status===kU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Nc.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($X,"removeNode")});var WU=m((zue,KU)=>{"use strict";var YU=require("joi"),{string:YX,array:KX}=YU.types(),WX=ve(),QX=T_();KU.exports=zX;function zX(e){let t=YU.object({operation:YX.valid("configure_cluster").required(),connections:KX.items(QX.validation_schema).required()});return WX.validateBySchema(e,t)}a(zX,"configureClusterValidator")});var kS=m((Xue,ZU)=>{"use strict";var JX=A(),P_=x(),XX=V(),ZX=M_(),jX=C_(),QU=$s(),eZ=WU(),{handleHDBError:zU,hdb_errors:tZ}=W(),{HTTP_STATUS_CODES:JU}=tZ,rZ="Configure cluster complete.",sZ="Failed to configure the cluster. Check the logs for more details.",nZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";ZU.exports=iZ;async function iZ(e){P_.trace("configure cluster called with:",e),QU.checkClusteringEnabled();let t=eZ(e);if(t)throw zU(t,t.message,JU.BAD_REQUEST,void 0,void 0,!0);let r=await QU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(XU(ZX,{operation:JX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);P_.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(XU(jX,f,f.node_name))}let c=await Promise.allSettled(i);P_.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"&&(P_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(XX.isEmptyOrZeroLength(u))return{message:rZ,connections:l};if(_)return{message:nZ,failed_nodes:u,connections:l};throw zU(new Error,sZ,JU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(iZ,"configureCluster");async function XU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(XU,"functionWrapper")});var eD=m((jue,jU)=>{"use strict";var v_=require("joi"),oZ=ve(),{validateSchemaExists:aZ,validateTableExists:cZ,validateSchemaName:uZ}=is(),lZ=v_.object({operation:v_.string().valid("purge_stream"),schema:v_.string().custom(aZ).custom(uZ).required(),table:v_.string().custom(cZ).required()});function _Z(e){return oZ.validateBySchema(e,lZ)}a(_Z,"purgeStreamValidator");jU.exports=_Z});var VS=m((tle,tD)=>{"use strict";var{handleHDBError:dZ,hdb_errors:EZ}=W(),{HTTP_STATUS_CODES:fZ}=EZ,hZ=eD(),mZ=it(),SZ=$s();tD.exports=pZ;async function pZ(e){let t=hZ(e);if(t)throw dZ(t,t.message,fZ.BAD_REQUEST,void 0,void 0,!0);SZ.checkClusteringEnabled();let{schema:r,table:s}=e;return await mZ.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(pZ,"purgeStream")});var KS=m((sle,aD)=>{"use strict";var YS=$s(),TZ=it(),nD=Q(),B_=A(),Ri=Be(),RZ=V(),$S=x(),{RemotePayloadObject:gZ}=Tc(),{ErrorCode:rD}=require("nats"),sD=nD.get(B_.CONFIG_PARAMS.CLUSTERING_ENABLED),iD=nD.get(B_.CONFIG_PARAMS.CLUSTERING_NODENAME);aD.exports={clusterStatus:AZ,buildNodeStatus:oD};async function AZ(){let e={node_name:iD,is_enabled:sD,connections:[]};if(!sD)return e;let t=await YS.getAllNodeRecords();if(RZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(oD(t[s],e.connections));return await Promise.allSettled(r),e}a(AZ,"clusterStatus");async function oD(e,t){let r=e.name,s=new gZ(B_.OPERATIONS_ENUM.CLUSTER_STATUS,iD,void 0,await YS.getSystemInfo()),n,i,o=Ri.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await TZ.request(Ri.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ri.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ri.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===rD.NoResponders?o=Ri.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===rD.Timeout?o=Ri.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ri.CLUSTER_STATUS_STATUSES.CLOSED}let c=new OZ(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!==B_.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(oD,"buildNodeStatus");function OZ(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(OZ,"NodeStatusObject")});var QS=m((ile,cD)=>{"use strict";var{handleHDBError:NZ,hdb_errors:bZ}=W(),{HTTP_STATUS_CODES:yZ}=bZ,IZ=it(),wZ=$s(),WS=V(),H_=require("joi"),CZ=ve(),UZ=2e3,DZ=H_.object({timeout:H_.number().min(1),connected_nodes:H_.boolean(),routes:H_.boolean()});cD.exports=LZ;async function LZ(e){wZ.checkClusteringEnabled();let t=CZ.validateBySchema(e,DZ);if(t)throw NZ(t,t.message,yZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await IZ.getServerList(r??UZ),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(S=>S.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(S=>({host:S.split(":")[0],port:WS.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(LZ,"clusterNetwork")});var dD=m((ale,_D)=>{"use strict";var zS=require("joi"),uD=ve(),{route_constraints:lD}=xE();_D.exports={setRoutesValidator:MZ,deleteRoutesValidator:PZ};function MZ(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:lD.required()});return uD.validateBySchema(e,t)}a(MZ,"setRoutesValidator");function PZ(e){let t=zS.object({routes:lD.required()});return uD.validateBySchema(e,t)}a(PZ,"deleteRoutesValidator")});var XS=m((ule,mD)=>{"use strict";var gi=Tr(),JS=V(),q_=A(),ED=dD(),{handleHDBError:fD,hdb_errors:vZ}=W(),{HTTP_STATUS_CODES:hD}=vZ,BZ="cluster routes successfully set",HZ="cluster routes successfully deleted";mD.exports={setRoutes:qZ,getRoutes:FZ,deleteRoutes:GZ};function qZ(e){let t=ED.setRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.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=JS.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"?gi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):gi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:BZ,set:o,skipped:i}}a(qZ,"setRoutes");function FZ(){let e=gi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(FZ,"getRoutes");function GZ(e){let t=ED.deleteRoutesValidator(e);if(t)throw fD(t,t.message,hD.BAD_REQUEST,void 0,void 0,!0);let r=gi.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 S=s[f];if(d.host===S.host&&d.port===S.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,S=n.length;h<S;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,gi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,gi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:HZ,deleted:i,skipped:o}}a(GZ,"deleteRoutes")});var pD=m((_le,SD)=>{"use strict";var bc=require("alasql"),Ai=require("recursive-iterator"),Kr=x(),xZ=V(),yc=A(),ZS=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,VZ(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=>yc.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=>!yc.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][yc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=kZ(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=>!yc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new bc.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 kZ(e){return e.filter(t=>t[yc.PERMS_CRUD_ENUM.READ])}a(kZ,"filterReadRestrictedAttrs");function VZ(e,t,r,s,n){$Z(e,t,r,s,n)}a(VZ,"interpretAST");function Ic(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(Ic,"addSchemaTableToMap");function $Z(e,t,r,s,n){if(!e){Kr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof bc.yy.Insert?QZ(e,t,r):e instanceof bc.yy.Select?YZ(e,t,r,s,n):e instanceof bc.yy.Update?KZ(e,t,r):e instanceof bc.yy.Delete?WZ(e,t,r):Kr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a($Z,"getRecordAttributesAST");function YZ(e,t,r,s,n){if(!e){Kr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(xZ.isEmptyOrZeroLength(i)){Kr.error("No schema specified");return}e.from.forEach(c=>{Ic(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),Ic(c.table,t,r,s,n)});let o=new Ai(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{Kr.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 Ai(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{Kr.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 Ai(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{Kr.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 Ai(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{Kr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(YZ,"getSelectAttributes");function KZ(e,t,r){if(!e){Kr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.table.databaseid;Ic(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(KZ,"getUpdateAttributes");function WZ(e,t,r){if(!e){Kr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new Ai(e.where),n=e.table.databaseid;Ic(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(WZ,"getDeleteAttributes");function QZ(e,t,r){if(!e){Kr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new Ai(e.columns),n=e.into.databaseid;Ic(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.into.tableid,n,i.columnid,t,r)}a(QZ,"getInsertAttributes");function jS(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(jS,"pushAttribute");SD.exports=ZS});var rp=m((Ele,AD)=>{var F_=Ya(),TD=require("chalk"),dr=x(),RD=require("prompt"),{promisify:zZ}=require("util"),ep=A(),JZ=require("fs-extra"),XZ=require("path"),ZZ=V(),jZ=BS(),gD=Q();gD.initSync();var ej=require("moment"),tj=zZ(RD.get),rj=XZ.join(gD.getHdbBasePath(),ep.LICENSE_KEY_DIR_NAME,ep.LICENSE_FILE_NAME,ep.LICENSE_FILE_NAME);AD.exports={getFingerprint:nj,setLicense:sj,parseLicense:tp,register:ij,getRegistrationInfo:aj};async function sj(e){if(e&&e.key&&e.company){try{dr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tp(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(sj,"setLicense");async function nj(){let e={};try{e=await F_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(nj,"getFingerprint");async function tp(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=F_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await JZ.writeFile(rj,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(tp,"parseLicense");async function ij(){let e=await oj();return tp(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(ij,"register");async function oj(){let e=await F_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:TD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:TD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{RD.start()}catch(s){dr.error(s)}let r;try{r=await tj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(oj,"promptForRegistration");async function aj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await F_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(ZZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=jZ.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=ej.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(aj,"getRegistrationInfo")});var ND=m((hle,OD)=>{"use strict";var cj=Be(),sp=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+cj.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"}};OD.exports=sp});var ID=m((Sle,yD)=>{"use strict";var bD=Be(),np=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+bD.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+bD.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"}};yD.exports=np});var CD=m((Tle,wD)=>{"use strict";var ip=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};wD.exports=ip});var DD=m((gle,UD)=>{"use strict";var uj=Be(),op=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+uj.SERVER_SUFFIX.ADMIN,this.password=r}};UD.exports=op});var up=m((Ole,PD)=>{"use strict";var wc=require("path"),V_=require("fs-extra"),lj=ND(),_j=ID(),dj=CD(),Ej=DD(),ap=br(),No=V(),zt=Tr(),k_=A(),G_=Be(),{CONFIG_PARAMS:Je}=k_,Uc=x(),$_=Q(),LD=Vs(),cp=it(),Cc="clustering",fj=1e4,MD=5;PD.exports={generateNatsConfig:hj,removeNatsConfig:mj};async function hj(e=!1,t=void 0){$_.initSync();let r=$_.get(Je.ROOTPATH),s=wc.join(r,Cc,G_.PID_FILES.HUB),n=wc.join(r,Cc,G_.PID_FILES.LEAF),i=zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=wc.join(r,Cc,G_.NATS_CONFIG_FILES.HUB_SERVER),c=wc.join(r,Cc,G_.NATS_CONFIG_FILES.LEAF_SERVER),u=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=zt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=zt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=zt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=zt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=zt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cp.checkNATSServerInstalled()||Y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await ap.listUsers(),T=zt.getConfigFromFile(Je.CLUSTERING_USER),g=await ap.getClusterUser();(No.isEmpty(g)||g.active!==!0)&&Y_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await x_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await x_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await x_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await x_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,je]of S.entries())je.role.role===k_.ROLE_TYPES_ENUM.CLUSTER_USER&&je.active&&(O.push(new Ej(je.username,LD.decrypt(je.hash))),k.push(new dj(je.username,LD.decrypt(je.hash))));let $=[],{hub_routes:U}=zt.getClusteringRoutes();if(!No.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new lj(zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),zt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=No.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===k_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await V_.writeJson(o,b),Uc.trace(`Hub server config written to ${o}`));let P=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new _j(zt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===k_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await V_.writeJson(c,q),Uc.trace(`Leaf server config written to ${c}`))}a(hj,"generateNatsConfig");async function x_(e){let t=$_.get(e);return No.isEmpty(t)&&Y_(`port undefined for '${e}'`),await No.isPortTaken(t)&&Y_(`'${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(x_,"isPortAvailable");function Y_(e){let t=`Error generating clustering config: ${e}`;Uc.error(t),console.error(t),process.exit(1)}a(Y_,"generateNatsConfigError");async function mj(e){let{port:t,config_file:r}=cp.getServerConfig(e),{username:s,decrypt_hash:n}=await ap.getClusterUser(),i=0,o=500;for(;i<MD;){try{let l=await cp.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Uc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=MD)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 No.async_set_timeout(o*i)}let c="0".repeat(fj),u=wc.join($_.get(Je.ROOTPATH),Cc,r);await V_.writeFile(u,c),await V_.remove(u),Uc.notify(e,"started.")}a(mj,"removeNatsConfig")});var GD=m((ble,FD)=>{"use strict";var Er=Q(),Sj=Ya(),oe=A(),Dc=Be(),Ys=require("path"),{PACKAGE_ROOT:W_}=A(),vD=Q(),K_=V(),bo="/dev/null",pj=Ys.join(W_,"launchServiceScripts"),BD=Ys.join(W_,"utility/scripts"),Tj=Ys.join(BD,oe.HDB_RESTART_SCRIPT),HD=Ys.resolve(W_,"dependencies",`${process.platform}-${process.arch}`,Dc.NATS_BINARY_NAME);function qD(){let t=Sj.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 K_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=K_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:W_}}a(qD,"generateMainServerConfig");var Rj=9930;function gj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",Dc.NATS_CONFIG_FILES.HUB_SERVER),r=Ys.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Dc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Rj?"-"+s:""),script:HD,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 Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=bo,i.error_file=bo),i}a(gj,"generateNatsHubServerConfig");var Aj=9940;function Oj(){Er.initSync(!0);let e=Er.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",Dc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ys.join(Er.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=vD.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Dc.LOG_LEVEL_FLAGS[Er.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Aj?"-"+s:""),script:HD,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 Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=bo,i.error_file=bo),i}a(Oj,"generateNatsLeafServerConfig");function Nj(){Er.initSync();let e=Ys.join(Er.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:pj,autorestart:!1};return Er.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=bo,t.error_file=bo),t}a(Nj,"generateClusteringUpgradeV4ServiceConfig");function bj(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return K_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=K_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:BD},script:Tj}}a(bj,"generateRestart");function yj(){return{apps:[qD()]}}a(yj,"generateAllServiceConfigs");FD.exports={generateAllServiceConfigs:yj,generateMainServerConfig:qD,generateRestart:bj,generateNatsHubServerConfig:gj,generateNatsLeafServerConfig:Oj,generateClusteringUpgradeV4ServiceConfig:Nj}});var tL=m((Lle,eL)=>{"use strict";var Re=A(),Ij=V(),Lc=up(),Mc=it(),hs=Be(),Dn=GD(),Q_=Q(),Ks=x(),wj=$s(),{startWorker:xD,onMessageFromWorkers:Cj}=st(),Uj=Oo(),Dj=require("util"),VD=require("child_process"),{execFile:Lj}=VD,Ile=Dj.promisify(VD.exec),wle=require("systeminformation"),fe;eL.exports={enterPM2Mode:Mj,start:Oi,stop:lp,reload:$D,restart:YD,list:_p,describe:WD,connect:Ws,kill:qj,startAllServices:Fj,startService:dp,getUniqueServicesList:QD,restartAllServices:Gj,isServiceRegistered:zD,reloadStopStart:JD,restartHdb:KD,deleteProcess:Bj,startClusteringProcesses:ZD,startClusteringThreads:jD,isHdbRestartRunning:Hj,isClusteringRunning:kj,stopClustering:xj,reloadClustering:Vj};var{PACKAGE_ROOT:Cle}=A(),Ule=A(),{loggerWithTag:Dle}=Ks,Pc=!1;Cj(e=>{e.type==="restart"&&Q_.initSync(!0)});function Mj(){Pc=!0}a(Mj,"enterPM2Mode");function Ws(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ks.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ws,"connect");var Jt,Pj=10,kD;function Oi(e){if(Pc)return vj(e);let t=Lj(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Jt.indexOf(t);i>-1&&Jt.splice(i,1),!kD&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Pj&&Oi(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=Q_.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?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.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?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Jt){Jt=[];let n=a(()=>{kD=!0,Jt&&(Jt.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)}Jt.push(t)}a(Oi,"start");function vj(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(vj,"startWithPM2");function lp(e){if(!Pc){for(let t of Jt||[])t.name===e&&(Jt.splice(Jt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ws()}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(lp,"stop");function $D(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a($D,"reload");function YD(e){if(!Pc)for(let t of Jt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(YD,"restart");function Bj(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Bj,"deleteProcess");async function KD(){await Oi(Dn.generateRestart())}a(KD,"restartHdb");async function Hj(){let e=await _p();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(Hj,"isHdbRestartRunning");function _p(){return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(_p,"list");function WD(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(WD,"describe");function qj(){if(!Pc){for(let e of Jt||[])e.kill();Jt=[];return}return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(qj,"kill");async function Fj(){try{await ZD(),await jD(),await Oi(Dn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Fj,"startAllServices");async function dp(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Dn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Dn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Dn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Dn.generateNatsHubServerConfig(),await Oi(t),await Lc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Dn.generateNatsLeafServerConfig(),await Oi(t),await Lc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Dn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Oi(t)}catch(t){throw fe.disconnect(),t}}a(dp,"startService");async function QD(){try{let e=await _p(),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(QD,"getUniqueServicesList");async function Gj(e=[]){try{let t=!1,r=await QD();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 YD(o))}t&&await JD(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(Gj,"restartAllServices");async function zD(e){if(Jt?.find(r=>r.name===e))return!0;let t=await Uj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(zD,"isServiceRegistered");async function JD(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?Q_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Q_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await WD(e),s=Ij.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lp(e),await dp(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await KD():await $D(e)}a(JD,"reloadStopStart");var XD;async function ZD(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await dp(t)}}a(ZD,"startClusteringProcesses");async function jD(){XD=xD(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Mc.createWorkQueueStream(hs.WORK_QUEUE_CONSUMER_NAMES),await Mc.updateIngestStreamConsumer(),await Mc.updateLocalStreams();let e=await wj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ks.info("Starting clustering upgrade 4.0.0 process"),xD(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(jD,"startClusteringThreads");async function xj(){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 XD.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await lp(t)}}a(xj,"stopClustering");async function kj(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await zD(t)===!1)return!1}return!0}a(kj,"isClusteringRunning");async function Vj(){await Lc.generateNatsConfig(!0),await Mc.reloadNATSHub(),await Mc.reloadNATSLeaf(),await Lc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Lc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(Vj,"reloadClustering")});var Tp=m((Ple,aL)=>{"use strict";var $j=require("minimist"),{isMainThread:hp,parentPort:nL}=require("worker_threads"),qe=A(),{PROCESS_DESCRIPTORS_VALIDATE:vc}=qe,ms=x(),mp=V(),z_=up(),yo=it(),Ep=Be(),iL=Tr(),Ss=tL(),rL=Oo(),Yj=IE(),{restartWorkers:J_,onMessageByType:Kj}=st(),{handleHDBError:Wj,hdb_errors:Qj}=W(),{HTTP_STATUS_CODES:zj}=Qj,X_=Q();X_.initSync();var Bc=`Restarting HarperDB. This may take up to ${qe.RESTART_TIMEOUT_MS/1e3} seconds.`,Jj="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",sL="Clustering is not enabled so cannot be restarted",Xj="Invalid service",Ni,Wr;aL.exports={restart:oL,restartService:Sp};hp&&Kj(qe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Sp({service:e.workerType}):oL({operation:"restart"})});async function oL(e){Wr=Object.keys(e).length===0,Ni=await Ss.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR);let t=$j(process.argv);if(t.service){await Sp(t);return}if(Wr&&!Ni){console.error(Jj);return}if(Wr&&console.log(Bc),Ni){Ss.enterPM2Mode(),ms.notify(Bc);let r=Yj(Object.keys(qe.CONFIG_PARAM_MAP),!0);return mp.isEmptyOrZeroLength(Object.keys(r))||iL.updateConfigValue(void 0,void 0,r,!0,!0),jj(),Bc}return hp?(ms.notify(Bc),await pp(),setTimeout(()=>{J_()},50)):nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART}),Bc}a(oL,"restart");async function Sp(e){let{service:t}=e;if(qe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Wj(new Error,Xj,zj.BAD_REQUEST,void 0,void 0,!0);if(Ni=await Ss.isServiceRegistered(qe.HDB_PROC_DESCRIPTOR),!hp)return nL.postMessage({type:qe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case vc.clustering:if(!X_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering"),ms.notify("Restarting clustering"),await pp();break;case vc.clustering_config:case vc["clustering config"]:if(!X_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=sL;break}Wr&&console.log("Restarting clustering_config"),ms.notify("Restarting clustering_config"),await Ss.reloadClustering();break;case"custom_functions":case"custom functions":case vc.harperdb:case vc.http_workers:if(Wr&&!Ni){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}Wr&&console.log("Restarting http_workers"),ms.notify("Restarting http_workers"),Ni?await Ss.restart(qe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{J_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ms.error(r),Wr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Sp,"restartService");async function Zj(){await yo.publishToStream(`${Ep.SUBJECT_PREFIXES.TXN}.${Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name,yo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(Zj,"postDummyNatsMsg");async function jj(){await pp(),await Ss.restart(qe.HDB_PROC_DESCRIPTOR),await mp.async_set_timeout(2e3),X_.get(qe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fp(),Wr&&(await yo.closeConnection(),process.exit(0))}a(jj,"restartPM2Mode");async function pp(){if(!iL.getConfigFromFile(qe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await rL.getHDBProcessInfo()).clustering.length===0)ms.trace("Clustering not running, restart will start clustering services"),await z_.generateNatsConfig(!0),await Ss.startClusteringProcesses(),await Ss.startClusteringThreads(),await fp(),Wr&&await yo.closeConnection();else{await Zj(),await z_.generateNatsConfig(!0),Ni?(ms.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Ss.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Ss.restart(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await rL.getHDBProcessInfo()).clustering.forEach(n=>{ms.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mp.async_set_timeout(3e3),await fp(),await yo.updateLocalStreams(),Wr&&await yo.closeConnection(),ms.trace("Restart clustering restarting ingest and reply service threads");let t=J_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=J_(qe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pp,"restartClustering");async function fp(){await z_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await z_.removeNatsConfig(qe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fp,"removeNatsConfig")});var pL=m((Hle,SL)=>{"use strict";var Ble=require("lodash"),Xt=A(),{handleHDBError:cL,hdb_errors:e5}=W(),{HDB_ERROR_MSGS:t5,HTTP_STATUS_CODES:r5}=e5,Rp=x();SL.exports={getRolePermissions:n5};var bi=Object.create(null),s5=a(e=>({key:e,perms:{}}),"perms_template_obj"),dL=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),EL=a((e=!1,t=!1,r=!1,s=!1)=>({[Xt.PERMS_CRUD_ENUM.READ]:e,[Xt.PERMS_CRUD_ENUM.INSERT]:t,[Xt.PERMS_CRUD_ENUM.UPDATE]:r,[Xt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),gp=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...EL(t,r,s,n)}),"table_perms_template"),uL=a((e,t=EL())=>({attribute_name:e,describe:mL(t),[Hc]:t[Hc],[Ap]:t[Ap],[Op]:t[Op]}),"attr_perms_template"),lL=a((e,t=!1)=>({attribute_name:e,describe:t,[Hc]:t}),"timestamp_attr_perms_template"),{READ:Hc,INSERT:Ap,UPDATE:Op}=Xt.PERMS_CRUD_ENUM,fL=Object.values(Xt.PERMS_CRUD_ENUM),hL=[Hc,Ap,Op];function n5(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[Xt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(bi[t]&&bi[t].key===s)return bi[t].perms;let n=i5(e,r);return bi[t]?bi[t].key=s:bi[t]=s5(s),bi[t].perms=n,n}catch(r){if(!e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Xt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Xt.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 Rp.error(s),Rp.debug(r),cL(new Error,t5.OUTDATED_PERMS_TRANSLATION_ERROR,r5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw Rp.error(s),cL(new Error)}}}a(n5,"getRolePermissions");function i5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Xt.SYSTEM_SCHEMA_NAME]=s[Xt.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]=o5(t[i]);return}r[i]=dL(),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=a5(c,u);r[i].describe||fL.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=gp()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gp()})}),r}a(i5,"translateRolePermissions");function o5(e){let t=dL(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gp(!0,!0,!0,!0,!0)}),t}a(o5,"createStructureUserPermissions");function a5(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 Xt.TIME_STAMP_NAMES.includes(d)&&(E=lL(d,_[Hc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=uL(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=mL(_),n.attribute_permissions.push(_),c||c5(_,u)}else if(l!==o){let _;Xt.TIME_STAMP_NAMES.includes(l)?_=lL(l):_=uL(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=_L(n),n}else return e.describe=_L(e),e}a(a5,"getTableAttrPerms");function _L(e){return fL.filter(t=>e[t]).length>0}a(_L,"getSchemaTableDescribePerm");function mL(e){return hL.filter(t=>e[t]).length>0}a(mL,"getAttributeDescribePerm");function c5(e,t){hL.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(c5,"checkForHashPerms")});var TL={};xe(TL,{Headers:()=>yi});var yi,Z_=Se(()=>{yi=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 qc={};xe(qc,{authentication:()=>bL,login:()=>S5,logout:()=>p5,start:()=>m5});async function bL(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?d5?_5:[]:l5?u5:[];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 j_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),j_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(j_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let S=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,S===-1?n.length:S),u=await gL.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,S)=>{let T=new rd.AuthAuditLog(f,h,gt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=S,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===gt.AUTH_AUDIT_STATUS.SUCCESS?RL.notify(T):RL.error(T)},"authAuditLog"),_;if(s){if(_=Io.get(s),!_){let[f,h]=s.split(" "),S,T;try{switch(f){case"Basic":[S,T]=atob(h).split(":"),_=S||T?await et.auth(S,T):null;break;case"Bearer":try{_=await(0,td.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,td.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return h5&&(Io.get(h)||(Io.set(h,h),l(S,gt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Qs({error:g.message},e)}}Io.set(s,_),f5&&l(_.username,gt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await et.auth(u.user,null,!1):E5&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,ed.getSuperUser)());j_&&(e.session.update=function(f){if(!c){c=(0,OL.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return f.id=c,gL.put(f)},e.login=async function(f,h){e.user=await et.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&En.loginPath?(d.status=302,d.headers.set("Location",En.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new yi);for(let h=0;h<E;){let S=o[h++];f.set(S,o[h++])}}return o=null,d}function m5({server:e,port:t}){e.request(bL,{port:t||"all"}),AL||(AL=!0,setInterval(()=>{Io=new Map},wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),NL.user.addListener(()=>{Io=new Map}))}async function S5(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 p5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var ed,td,OL,wr,gt,rd,NL,RL,u5,l5,_5,d5,gL,j_,E5,f5,h5,Io,AL,sd=Se(()=>{ed=C(br());Pr();ma();td=C(pc());de();OL=require("uuid"),wr=C(Q()),gt=C(A()),rd=C(x());wo();NL=C(Wa());Z_();RL=(0,rd.loggerWithTag)("auth-event");wr.initSync();u5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),l5=wr.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),_5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),d5=wr.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);et.auth=ed.findAndValidateUser;gL=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),j_=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,E5=wr.get(gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,f5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,h5=wr.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Io=new Map;a(bL,"authentication");a(m5,"start");a(S5,"login");a(p5,"logout")});var LL=m((Kle,DL)=>{"use strict";var he=require("joi"),yL=require("fs-extra"),IL=require("path"),Js=ve(),wL=Q(),CL=A(),UL=x(),{hdb_errors:T5}=W(),{HDB_ERROR_MSGS:Dt}=T5,zs=/^[a-zA-Z0-9-_]+$/;DL.exports={getDropCustomFunctionValidator:g5,setCustomFunctionValidator:A5,addComponentValidator:y5,dropCustomFunctionProjectValidator:I5,packageComponentValidator:w5,deployComponentValidator:C5,setComponentFileValidator:O5,getComponentFileValidator:b5,dropComponentFileValidator:N5};function nd(e,t,r){try{let s=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=IL.join(s,t);return yL.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return UL.error(s),r.message(Dt.VALIDATION_ERR)}}a(nd,"checkProjectExists");function Fc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Fc,"checkFilePath");function R5(e,t,r,s){try{let n=wL.get(CL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=IL.join(n,e,t,r+".js");return yL.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return UL.error(n),s.message(Dt.VALIDATION_ERR)}}a(R5,"checkFileExists");function g5(e){let t=he.object({project:he.string().pattern(zs).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(zs).custom(R5.bind(null,e.project,e.type)).custom(Fc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Js.validateBySchema(e,t)}a(g5,"getDropCustomFunctionValidator");function A5(e){let t=he.object({project:he.string().pattern(zs).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Fc).required(),function_content:he.string().required()});return Js.validateBySchema(e,t)}a(A5,"setCustomFunctionValidator");function O5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Fc).required(),payload:he.string().allow("").optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(O5,"setComponentFileValidator");function N5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Fc).optional()});return Js.validateBySchema(e,t)}a(N5,"dropComponentFileValidator");function b5(e){let t=he.object({project:he.string().required(),file:he.string().custom(Fc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(b5,"getComponentFileValidator");function y5(e){let t=he.object({project:he.string().pattern(zs).custom(nd.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(y5,"addComponentValidator");function I5(e){let t=he.object({project:he.string().pattern(zs).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(I5,"dropCustomFunctionProjectValidator");function w5(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Js.validateBySchema(e,t)}a(w5,"packageComponentValidator");function C5(e){let t=he.object({project:he.string().pattern(zs).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 Js.validateBySchema(e,t)}a(C5,"deployComponentValidator")});var Ip=m((Qle,vL)=>{"use strict";var be=require("fs-extra"),Np=require("fast-glob"),me=require("path"),ML=require("tar-fs"),U5=require("uuid").v4,bp=require("normalize-path"),ps=LL(),At=x(),Ie=A(),Ye=Q(),id=Tr(),D5=V(),{PACKAGE_ROOT:L5}=A(),{handleHDBError:ot,hdb_errors:M5}=W(),{HDB_ERROR_MSGS:Ln,HTTP_STATUS_CODES:at}=M5,P5=me.join(L5,"application-template"),yp=me.join(Ye.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function PL(){let e=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ot(new Error,Ln.NOT_ENABLED,at.BAD_REQUEST,void 0,void 0,!0)}a(PL,"isCFEnabled");function v5(){At.trace("getting custom api status");let e={};try{e={is_enabled:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ot(new Error,Ln.FUNCTION_STATUS,at.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(v5,"customFunctionsStatus");function B5(){At.trace("getting custom api endpoints");let e={},t=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Np.sync(bp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Np.sync(bp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Np.sync(bp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ot(new Error,Ln.GET_FUNCTIONS,at.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(B5,"getCustomFunctions");function H5(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 ot(t,t.message,at.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Ye.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 ot(new Error,Ln.GET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(H5,"getCustomFunction");function q5(e){PL(),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 ot(t,t.message,at.BAD_REQUEST);At.trace("setting custom function file content");let r=Ye.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 ot(new Error,Ln.SET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(q5,"setCustomFunction");function F5(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 ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function file");let r=Ye.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 ot(new Error,Ln.DROP_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(F5,"dropCustomFunction");function G5(e){PL(),e.project&&(e.project=me.parse(e.project).name);let t=ps.addComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("adding component");let r=Ye.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(P5,n),`Successfully added project: ${s}`}catch(n){throw ot(new Error,Ln.ADD_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(G5,"addComponent");function x5(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.dropCustomFunctionProjectValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function project");let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ye.get(Ie.CONFIG_PARAMS.APPS);if(!D5.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 id.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 ot(new Error,Ln.DROP_FUNCTION_PROJECT,at.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(x5,"dropCustomFunctionProject");async function k5(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.packageComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;At.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(Ye.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(yp);let i=me.join(yp,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),ML.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(k5,"packageComponent");async function V5(e){e.project&&(e.project=me.parse(e.project).name);let t=ps.deployComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ye.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(At.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(yp,U5()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(ML.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return id.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(V5,"deployComponent");async function $5(){let e=id.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(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a($5,"getComponents");async function Y5(e){let t=ps.getComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join(Ye.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(Y5,"getComponentFile");async function K5(e){let t=ps.setComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join(Ye.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(K5,"setComponentFile");async function W5(e){let t=ps.dropComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join(Ye.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),id.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(W5,"dropComponent");vL.exports={customFunctionsStatus:v5,getCustomFunctions:B5,getCustomFunction:H5,setCustomFunction:q5,dropCustomFunction:F5,addComponent:G5,dropCustomFunctionProject:x5,packageComponent:k5,deployComponent:V5,getComponents:$5,getComponentFile:Y5,setComponentFile:K5,dropComponent:W5}});var wp=m((Jle,HL)=>{"use strict";var Ts=require("joi"),BL=ve();HL.exports={readTransactionLogValidator:Q5,deleteTransactionLogsBeforeValidator:z5};function Q5(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 BL.validateBySchema(e,t)}a(Q5,"readTransactionLogValidator");function z5(e){let t=Ts.object({schema:Ts.string().required(),table:Ts.string().required(),timestamp:Ts.date().timestamp().required()});return BL.validateBySchema(e,t)}a(z5,"deleteTransactionLogsBeforeValidator")});var ad=m((Zle,kL)=>{"use strict";var Cp=A(),od=it(),qL=V(),FL=Q(),GL=Vs(),{handleHDBError:Co,hdb_errors:J5}=W(),{HTTP_STATUS_CODES:Uo}=J5,{readTransactionLogValidator:X5,deleteTransactionLogsBeforeValidator:Z5}=wp(),xL="This operation relies on clustering and cannot run with it disable.",j5="Logs successfully deleted from transaction log.",e8="All logs successfully deleted from transaction log.";kL.exports={readTransactionLog:t8,deleteTransactionLogsBefore:r8};async function*t8(e){let t=X5(e);if(t)throw Co(t,t.message,Uo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Co(new Error,xL,Uo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qL.checkSchemaTableExist(r,s);if(n)throw Co(new Error,n,Uo.NOT_FOUND,void 0,void 0,!0);let i=GL.createNatsTableStreamName(r,s),o=await od.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===Cp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(t8,"readTransactionLog");async function r8(e){let t=Z5(e);if(t)throw Co(t,t.message,Uo.BAD_REQUEST,void 0,void 0,!0);if(!FL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Co(new Error,xL,Uo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qL.checkSchemaTableExist(r,s);if(i)throw Co(new Error,i,Uo.NOT_FOUND,void 0,void 0,!0);let o=GL.createNatsTableStreamName(r,s),{jsm:c}=await od.getNATSReferences(),u=await od.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=j5,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=e8):d=(await od.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(r8,"deleteTransactionLogsBefore")});var _d=m((e_e,zL)=>{"use strict";var cd=require("joi"),ud=require("path"),VL=require("fs-extra"),{exec:s8}=require("child_process"),n8=require("util"),$L=n8.promisify(s8),Gc=A(),{handleHDBError:Do,hdb_errors:i8}=W(),{HTTP_STATUS_CODES:Lo}=i8,kc=Q(),o8=ve(),xc=x();kc.initSync();var Up=kc.get(Gc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),YL="npm install --omit=dev --json",a8=`${YL} --dry-run`;zL.exports={installModules:_8,auditModules:d8,installAllRootModules:c8,uninstallRootModule:u8,linkHarperdb:l8};async function c8(e=!1){await ld(),await Vc(e?"npm install --ignore-scripts":"npm install",kc.get(Gc.CONFIG_PARAMS.ROOTPATH))}a(c8,"installAllRootModules");async function u8(e){await Vc(`npm uninstall ${e}`,kc.get(Gc.CONFIG_PARAMS.ROOTPATH))}a(u8,"uninstallRootModule");async function l8(){await ld(),await Vc(`npm link ${Gc.PACKAGE_ROOT}`,kc.get(Gc.CONFIG_PARAMS.ROOTPATH))}a(l8,"linkHarperdb");async function Vc(e,t=void 0){let{stdout:r,stderr:s}=await $L(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return xc.trace(r,s),r.replace(`
11
- `,"")}a(Vc,"runCommand");async function _8(e){xc.info(`starting installModules for request: ${e}`);let t=QL(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?a8:YL;await ld(),await WL(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=ud.join(Up,u),_,d=null;try{let{stdout:E,stderr:f}=await $L(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(Xw,"runCommand");async function XJ(){try{await DJ.access(Gm)}catch{return!1}let e=await Xw(`${Gm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return LJ.eq(t,zJ)}a(XJ,"checkNATSServerInstalled");async function $m(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Kw.getClusterUser();if(gi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}wr.trace("create nats connection called");let i=await xJ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Rt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Rt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Rt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return wr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a($m,"createConnection");async function ZJ(){Ss&&(await Ss.drain(),Ss=void 0,fo=void 0,ho=void 0,_c=void 0)}a(ZJ,"closeConnection");var Ss,_c;async function c_(){return _c||(_c=$m(Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Ss=await _c),Ss||_c}a(c_,"getConnection");async function Ec(){if(fo)return fo;gi(Ss)&&await c_();let{domain:e}=fc(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(gi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return fo=await Ss.jetstreamManager({domain:e}),fo}a(Ec,"getJetStreamManager");async function Zw(){if(ho)return ho;gi(Ss)&&await c_();let{domain:e}=fc(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(gi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ho=Ss.jetstream({domain:e}),ho}a(Zw,"getJetStream");async function $t(){let e=Ss||await c_(),t=fo||await Ec(),r=ho||await Zw();return{connection:e,jsm:t,js:r}}a($t,"getNATSReferences");async function jJ(e){let t=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Kw.getClusterUser(),n=await $m(t,r,s),i=Vm(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=Jw.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 n_.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(jJ,"getServerList");async function Ym(e,t){let{jsm:r}=await $t(),s=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:Qw.File,retention:zw.Limits,subjects:t,discard:kJ.Old,duplicate_window:Ww,max_msgs:n,max_bytes:i,max_age:s})}a(Ym,"createLocalStream");async function jw(){let{jsm:e}=await $t(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(jw,"listStreams");async function e2(e){let{jsm:t}=await $t();await t.streams.delete(e)}a(e2,"deleteLocalStream");async function t2(e){let{connection:t}=await $t(),r=[],s=Vm(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(Jw.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(t2,"listRemoteStreams");async function r2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await $t(),i=xm(),o={durable_name:i,ack_policy:o_.Explicit};t&&(o.deliver_policy=a_.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=km(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(r2,"viewStream");async function*s2(e,t=void 0,r=void 0){let{jsm:s,js:n}=await $t(),i=xm(),o={durable_name:i,ack_policy:o_.Explicit};t&&(o.deliver_policy=a_.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 _=km(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(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(s2,"viewStreamIterator");async function n2(e,t,r,s){wr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=eC(s,r);let{js:n}=await $t(),i=await hc(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Yw.encode(s);try{wr.trace(`publishToStream publishing to subject: ${o}`),WJ(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 nC(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){wr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await Ym(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(n2,"publishToStream");function eC(e,t){t===void 0&&(t=$J());let r=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(de.MSG_HEADERS.NATS_MSG_ID)){let s=n_.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${xm()}`;t.append(de.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(de.MSG_HEADERS.ORIGIN)||t.append(de.MSG_HEADERS.ORIGIN,r),t}a(eC,"addNatsMsgHeader");function fc(e){e=e.toLowerCase();let t=dc.join(Rt.get(Re.CONFIG_PARAMS.ROOTPATH),QJ);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return gi(Fm)&&(Fm={port:uc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:uc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.HUB,config_file:de.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:dc.join(t,de.PID_FILES.HUB),hdb_nats_path:t}),Fm;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return gi(qm)&&(qm={port:uc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:uc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,config_file:de.NATS_CONFIG_FILES.LEAF_SERVER,domain:uc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,pid_file_path:dc.join(t,de.PID_FILES.LEAF),hdb_nats_path:t}),qm;wr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(fc,"getServerConfig");async function i2(e){let{jsm:t}=await $t(),r=await hc();try{await t.streams.add({name:e.stream_name,storage:Qw.File,retention:zw.Limits,duplicate_window:Ww,max_age:FJ,max_bytes:GJ,subjects:[`${de.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:o_.Explicit,durable_name:e.durable_name,deliver_policy:a_.All,max_ack_pending:1e4});else throw s}}a(i2,"createWorkQueueStream");async function o2(){let{jsm:e}=await $t();(await e.consumers.info(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(wr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name),wr.info("Adding pull consumer to ingest stream"),await e.consumers.add(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:o_.Explicit,durable_name:de.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:a_.All,max_ack_pending:1e4}))}a(o2,"updateIngestStreamConsumer");async function tC(e,t,r){let{jsm:s}=await $t(),n=await s.streams.info(t),i=rC(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=i_.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 S=0,T=n.config.sources.length;S<T;S++)if(d=n.config.sources[S],E=S,_&&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:`${de.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(tC,"addSourceToWorkStream");function rC(e){return e.split(".")[1]}a(rC,"extractServerName");async function sC(e,t,r){let{schema:s,table:n}=r,i=i_.createNatsTableStreamName(s,n),{jsm:o}=await $t(),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(sC,"removeSourceFromWorkStream");async function a2(e,t,r=2e4,s=Vm()){if(!n_.isObject(t))throw new Error("data param must be an object");let n=Yw.encode(t),{connection:i}=await $t(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return km(c.data)}a(a2,"request");function Km(e){return new Promise(async(t,r)=>{let s=BJ(Gm,["--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(Km,"reloadNATS");async function c2(){let{pid_file_path:e}=fc(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Km(e)}a(c2,"reloadNATSHub");async function u2(){let{pid_file_path:e}=fc(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Km(e)}a(u2,"reloadNATSLeaf");function l2(e,t,r){let s;switch(e.code){case Vw.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Vw.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(l2,"requestErrorHandler");async function _2(e,t){let r=t+de.SERVER_SUFFIX.LEAF;await nC(async()=>{e.subscribe===!0?await tC(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await sC(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(_2,"updateWorkStream");function nC(e){return HJ.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(nC,"exclusiveLock");async function iC(e,t){let r=i_.createNatsTableStreamName(e,t),s=await hc(),n=h2(e,t,s);await Ym(r,[n])}a(iC,"createLocalTableStream");async function d2(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await iC(s,n)}}a(d2,"createTableStreams");async function oC(e,t){if(Rt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=i_.createNatsTableStreamName(e,t),{jsm:s}=await $t();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")wr.warn(r);else throw r}}a(oC,"purgeTableStream");async function E2(e,t){if(Rt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await oC(e,t[r])}a(E2,"purgeSchemaTableStreams");async function f2(e){return(await Ec()).streams.info(e)}a(f2,"getStreamInfo");function h2(e,t,r){return`${de.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(h2,"createSubjectName");async function hc(){if(lc)return lc;if(lc=(await Ec())?.nc?.info?.server_name,lc===void 0)throw new Error("Unable to get jetstream manager server name");return lc}a(hc,"getJsmServerName");async function m2(){let e=await Ec(),t=await hc(),r=await jw();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=S2(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;wr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;wr.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(".");wr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(m2,"updateLocalStreams");function S2(e){let{config:t}=e,r=!1;if(t.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Rt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(S2,"updateStreamLimits")});var d_=m((Dce,_C)=>{"use strict";var mo=ul(),So=kw(),p2=x(),T2=require("uuid").v4,Uce=require("clone"),l_=$s(),po=A(),R2=require("util"),wn=Yr(),{handleHDBError:Yt,hdb_errors:g2}=W(),{HDB_ERROR_MSGS:u_,HTTP_STATUS_CODES:Kt}=g2,{SchemaEventMsg:__}=xr(),cC=it(),{getDatabases:A2}=(Ee(),ee(be)),{transformReq:To}=V();_C.exports={createSchema:O2,createSchemaStructure:uC,createTable:N2,createTableStructure:lC,createAttribute:C2,dropSchema:b2,dropTable:y2,dropAttribute:I2,getBackup:U2};async function O2(e){let t=await uC(e);return l_.signalSchemaChange(new __(process.pid,e.operation,e.schema)),t}a(O2,"createSchema");async function uC(e){let t=mo.schema_object(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);if(To(e),!await So.checkSchemaExists(e.schema))throw Yt(new Error,u_.SCHEMA_EXISTS_ERR(e.schema),Kt.BAD_REQUEST,po.LOG_LEVELS.ERROR,u_.SCHEMA_EXISTS_ERR(e.schema),!0);return await wn.createSchema(e),`database '${e.schema}' successfully created`}a(uC,"createSchemaStructure");async function N2(e){return To(e),await lC(e)}a(N2,"createTable");async function lC(e){let t=mo.create_table_object(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);if(mo.validateTableResidence(e.residence),!await So.checkSchemaTableExists(e.schema,e.table))throw Yt(new Error,u_.TABLE_EXISTS_ERR(e.schema,e.table),Kt.BAD_REQUEST,po.LOG_LEVELS.ERROR,u_.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:T2(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await wn.createTable(s,e);else throw Yt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",Kt.BAD_REQUEST);else await wn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(lC,"createTableStructure");async function b2(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=mo.schema_object(e),s=t??r;if(s)throw Yt(s,s.message,Kt.BAD_REQUEST,void 0,void 0,!0);To(e);let n=await So.checkSchemaExists(e.schema);if(n)throw Yt(new Error,n,Kt.NOT_FOUND,po.LOG_LEVELS.ERROR,n,!0);let i=await So.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await wn.dropSchema(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema)),await cC.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(b2,"dropSchema");async function y2(e){let t=mo.table_object(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw Yt(new Error,r,Kt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);return await wn.dropTable(e),await cC.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(y2,"dropTable");async function I2(e){let t=mo.attribute_object(e);if(t)throw Yt(t,t.message,Kt.BAD_REQUEST,void 0,void 0,!0);To(e);let r=await So.checkSchemaTableExists(e.schema,e.table);if(r)throw Yt(new Error,r,Kt.NOT_FOUND,po.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Yt(new Error,"You cannot drop a hash attribute",Kt.BAD_REQUEST,void 0,void 0,!0);if(po.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Yt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,Kt.BAD_REQUEST,void 0,void 0,!0);try{return await wn.dropAttribute(e),w2(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw p2.error(`Got an error deleting attribute ${R2.inspect(e)}.`),s}}a(I2,"dropAttribute");function w2(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(w2,"dropAttributeFromGlobal");async function C2(e){To(e);let t=A2()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Yt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,Kt.BAD_REQUEST,void 0,void 0,!0);return await wn.createAttribute(e),l_.signalSchemaChange(new __(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(C2,"createAttribute");function U2(e){return wn.getBackup(e)}a(U2,"getBackup")});var EC=m((Mce,dC)=>{"use strict";var{OPERATIONS_ENUM:D2}=A(),Wm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=D2.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};dC.exports=Wm});var Qm=m((Bce,pC)=>{"use strict";var L2=Yr(),vce=EC(),E_=V(),f_=A(),M2=Q(),{handleHDBError:fC,hdb_errors:P2}=W(),{HDB_ERROR_MSGS:hC,HTTP_STATUS_CODES:mC}=P2,v2=Object.values(f_.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),SC="To use this operation audit log must be enabled in harperdb-config.yaml";pC.exports=B2;async function B2(e){if(E_.isEmpty(e.schema))throw new Error(hC.SCHEMA_REQUIRED_ERR);if(E_.isEmpty(e.table))throw new Error(hC.TABLE_REQUIRED_ERR);if(!M2.get(f_.CONFIG_PARAMS.LOGGING_AUDITLOG))throw fC(new Error,SC,mC.BAD_REQUEST,f_.LOG_LEVELS.ERROR,SC,!0);let t=E_.checkSchemaTableExist(e.schema,e.table);if(t)throw fC(new Error,t,mC.NOT_FOUND,f_.LOG_LEVELS.ERROR,t,!0);if(!E_.isEmpty(e.search_type)&&v2.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await L2.readAuditLog(e)}a(B2,"readAuditLog")});var RC=m((qce,TC)=>{"use strict";var{OPERATIONS_ENUM:H2}=A(),zm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=H2.GET_BACKUP,this.schema=t,this.table=r}};TC.exports=zm});var OC=m((kce,AC)=>{"use strict";var q2=Yr(),Gce=RC(),Jm=V(),F2=A(),xce=Q(),{handleHDBError:G2,hdb_errors:x2}=W(),{HDB_ERROR_MSGS:gC,HTTP_STATUS_CODES:k2}=x2;AC.exports=V2;async function V2(e){if(Jm.isEmpty(e.schema))throw new Error(gC.SCHEMA_REQUIRED_ERR);if(Jm.isEmpty(e.table))throw new Error(gC.TABLE_REQUIRED_ERR);let t=Jm.checkSchemaTableExist(e.schema,e.table);if(t)throw G2(new Error,t,k2.NOT_FOUND,F2.LOG_LEVELS.ERROR,t,!0);return await q2.getBackup(read_audit_log_object)}a(V2,"getBackup")});var CC=m(($ce,wC)=>{var Cn=require("validate.js"),bC=Be(),Ro=A(),{handleHDBError:$2,hdb_errors:Y2}=W(),{HDB_ERROR_MSGS:Ye,HTTP_STATUS_CODES:K2}=Y2,Xm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),W2={STRUCTURE_USER:"structure_user"},NC=Object.values(Ro.ROLE_TYPES_ENUM),Q2="attribute_permissions",z2="attribute_name",{PERMS_CRUD_ENUM:go}=Ro,J2=[Q2,...Object.values(go)],yC=[go.READ,go.INSERT,go.UPDATE],X2=[z2,...yC];function Z2(e){let t=Xm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,IC(e,t)}a(Z2,"addRoleValidation");function j2(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,IC(e,t)}a(j2,"alterRoleValidation");function e3(e){let t=Xm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,bC.validateObject(e,t)}a(e3,"dropRoleValidation");var t3=["operation","role","id","permission","hdb_user","hdb_auth_header"];function IC(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)t3.includes(s[o])||n.push(s[o]);n.length>0&&Je(Ye.INVALID_ROLE_JSON_KEYS(n),r);let i=bC.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Je(o,r)}),e.permission){let o=r3(e);o&&Je(o,r),NC.forEach(c=>{e.permission[c]&&!Cn.isBoolean(e.permission[c])&&Je(Ye.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(NC.indexOf(o)<0){if(o===W2.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]||Je(Ye.SCHEMA_NOT_FOUND(d),r)}continue}Je(Ye.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Je(Ye.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]){Je(Ye.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{J2.includes(_)||Je(Ye.INVALID_PERM_KEY(_),r,o,u)}),Object.values(go).forEach(_=>{Cn.isDefined(l[_])?Cn.isBoolean(l[_])||Je(Ye.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Je(Ye.TABLE_PERM_MISSING(_),r,o,u)}),Cn.isDefined(l.attribute_permissions)){if(!Cn.isArray(l.attribute_permissions)){Je(Ye.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Je(Ye.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(S=>{!X2.includes(S)&&S!==go.DELETE&&Je(Ye.INVALID_ATTR_PERM_KEY(S),r,o,u)}),!Cn.isDefined(f.attribute_name)){Je(Ye.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Je(Ye.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}yC.forEach(S=>{Cn.isDefined(f[S])?Cn.isBoolean(f[S])||Je(Ye.ATTR_PERM_NOT_BOOLEAN(S,h),r,o,u):Je(Ye.ATTR_PERM_MISSING(S,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}`;Je(Ye.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return s3(r)}a(IC,"customValidate");wC.exports={addRoleValidation:Z2,alterRoleValidation:j2,dropRoleValidation:e3};function r3(e){let{operation:t,permission:r}=e;if(t===Ro.OPERATIONS_ENUM.ADD_ROLE||t===Ro.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 Ye.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?Ro.ROLE_TYPES_ENUM.SUPER_USER:Ro.ROLE_TYPES_ENUM.CLUSTER_USER;return Ye.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(r3,"validateNoSUPerms");function s3(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ye.ROLE_PERMS_ERROR,...e};return $2(new Error,s,K2.BAD_REQUEST)}else return null}a(s3,"generateRolePermResponse");function Je(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(Je,"addPermError")});var sS=m((Kce,MC)=>{"use strict";var UC=yr(),DC=br(),n3=di(),jm=CC(),eS=$s(),i3=require("uuid").v4,o3=require("util"),h_=A(),a3=V(),tS=DC.searchByValue,c3=DC.searchByHash,u3=o3.promisify(n3.delete),l3=ls(),_3=ji(),{hdb_errors:d3,handleHDBError:Ao}=W(),{HDB_ERROR_MSGS:LC,HTTP_STATUS_CODES:m_}=d3,{UserEventMsg:rS}=xr();MC.exports={addRole:E3,alterRole:f3,dropRole:h3,listRoles:m3};function Zm(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(Zm,"scrubRoleDetails");async function E3(e){let t=jm.addRoleValidation(e);if(t)throw t;e=Zm(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 tS(r)||[])}catch(i){throw Ao(i)}if(s&&s.length>0)throw Ao(new Error,LC.ROLE_ALREADY_EXISTS(e.role),m_.CONFLICT,void 0,void 0,!0);e.id||(e.id=i3());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await UC.insert(n),eS.signalUserChange(new rS(process.pid)),e=Zm(e),e}a(E3,"addRole");async function f3(e){let t=jm.alterRoleValidation(e);if(t)throw t;e=Zm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await UC.update(r)}catch(n){throw Ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw Ao(new Error,"Invalid role id",m_.BAD_REQUEST,void 0,void 0,!0);return await eS.signalUserChange(new rS(process.pid)),e}a(f3,"alterRole");async function h3(e){let t=jm.dropRoleValidation(e);if(t)throw Ao(new Error,t,m_.BAD_REQUEST,void 0,void 0,!0);let r=new _3(h_.SYSTEM_SCHEMA_NAME,h_.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await c3(r));if(s.length===0)throw Ao(new Error,LC.ROLE_NOT_FOUND,m_.NOT_FOUND,void 0,void 0,!0);let n=new l3(h_.SYSTEM_SCHEMA_NAME,h_.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await tS(n)),o=!1;if(a3.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 u3(c),eS.signalUserChange(new rS(process.pid)),`${s[0].role} successfully deleted`}a(h3,"dropRole");async function m3(){return tS({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(m3,"listRoles")});var HC=m((Qce,BC)=>{"use strict";var S3=Q(),Un=require("joi"),p3=Be(),PC=require("moment"),T3=require("fs-extra"),nS=require("path"),R3=require("lodash"),mc=A(),{LOG_LEVELS:Ai}=A(),g3="YYYY-MM-DD hh:mm:ss",A3=nS.resolve(__dirname,"../logs");BC.exports=function(e){return p3.validateBySchema(e,O3)};var O3=Un.object({from:Un.custom(vC),until:Un.custom(vC),level:Un.valid(Ai.NOTIFY,Ai.FATAL,Ai.ERROR,Ai.WARN,Ai.INFO,Ai.DEBUG,Ai.TRACE),order:Un.valid("asc","desc"),limit:Un.number().min(1),start:Un.number().min(0),log_name:Un.custom(N3)});function vC(e,t){if(PC(e,PC.ISO_8601).format(g3)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(vC,"validateDatetime");function N3(e,t){if(R3.invert(mc.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=S3.get(mc.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?mc.LOG_NAMES.HDB:e,i=n===mc.LOG_NAMES.INSTALL?nS.join(A3,mc.LOG_NAMES.INSTALL):nS.join(s,n);return T3.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(N3,"validateReadLogPath")});var oS=m((Jce,FC)=>{"use strict";var S_=A(),b3=x(),y3=Q(),I3=HC(),iS=require("path"),qC=require("fs-extra"),{once:w3}=require("events"),{handleHDBError:C3,hdb_errors:U3}=W(),{PACKAGE_ROOT:D3}=A(),L3=iS.join(D3,"logs"),M3=1e3,P3=200;FC.exports=v3;async function v3(e){let t=I3(e);if(t)throw C3(t,t.message,U3.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=y3.get(S_.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?S_.LOG_NAMES.HDB:e.log_name,n=s===S_.LOG_NAMES.INSTALL?iS.join(L3,S_.LOG_NAMES.INSTALL):iS.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?M3:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,S=0;E==="desc"&&!u&&!_&&(S=Math.max(qC.statSync(n).size-(h+5)*P3,0));let T=qC.createReadStream(n,{start:S});T.on("error",I=>{b3.error(I)});let R=0,O=[],q="",$;T.on("data",I=>{let D=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;I=q+I;let z=0,M;for(;(M=D.exec(I))&&!T.destroyed;){$&&($.message=I.slice(z,M.index),w($));let[te,Ne,Lt]=M,rr=Lt.split("] ["),jr=rr[0],ws=rr[1];rr.splice(0,2),$={timestamp:Ne,thread:jr,level:ws,tags:rr,message:""},z=M.index+te.length}q=I.slice(z)}),T.on("end",I=>{T.destroyed||$&&($.message=q.trim(),w($))}),T.resume();function w(I){let D,z,M;switch(!0){case(i&&c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),I.level===o&&D>=z&&D<=M&&R<f?R++:I.level===o&&D>=z&&D<=M&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case(i&&c):D=new Date(I.timestamp),z=new Date(u),I.level===o&&D>=z&&R<f?R++:I.level===o&&D>=z&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case(i&&l):D=new Date(I.timestamp),M=new Date(_),I.level===o&&D<=M&&R<f?R++:I.level===o&&D<=M&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case(c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),D>=z&&D<=M&&R<f?R++:D>=z&&D<=M&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case i:I.level===o&&R<f?R++:I.level===o&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case c:D=new Date(I.timestamp),z=new Date(u),D>=z&&R<f?R++:D>=z&&R>=f&&(Dn(I,E,O),R++,R===h&&T.destroy());break;case l:D=new Date(I.timestamp),M=new Date(_),D<=M&&R<f?R++:D<=M&&R>=f&&(Dn(I,E,O),R++,R===h&&T.destroy());break;default:R<f?R++:(Dn(I,E,O),R++,R===h&&T.destroy())}}return a(w,"onLogMessage"),await w3(T,"close"),O}a(v3,"readLog");function Dn(e,t,r){t==="desc"?B3(e,r):t==="asc"?H3(e,r):r.push(e)}a(Dn,"pushLineToResult");function B3(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(B3,"insertDescending");function H3(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(H3,"insertAscending")});var T_=m((tue,VC)=>{"use strict";var aS=require("joi"),{string:p_,boolean:GC,date:q3}=aS.types(),F3=Be(),{validateSchemaExists:Zce,validateTableExists:jce,validateSchemaName:eue}=cs(),G3=A(),x3=He(),xC=Q();xC.initSync();var k3=p_.invalid(xC.get(G3.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(x3.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(),kC={operation:p_.valid("add_node","update_node"),node_name:k3,subscriptions:aS.array().items({table:p_.optional(),schema:p_.required(),subscribe:GC.required(),publish:GC.required().custom($3),start_time:q3.iso()}).min(1).required()};function V3(e){return F3.validateBySchema(e,aS.object(kC))}a(V3,"addUpdateNodeValidator");function $3(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($3,"checkForFalsy");VC.exports={addUpdateNodeValidator:V3,validation_schema:kC}});var YC=m((sue,$C)=>{var Y3=Be(),K3={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};$C.exports=function(e){return Y3.validateObject(e,K3)}});var uS=m((nue,KC)=>{"use strict";var W3=A().OPERATIONS_ENUM,cS=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=W3.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};KC.exports=cS});var QC=m((oue,WC)=>{"use strict";var Q3={OPERATION:"operation",REFRESH:"refresh"},lS=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},_S=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};WC.exports={JWTTokens:lS,TOKEN_TYPE_ENUM:Q3,JWTRSAKeys:_S}});var Tc=m((cue,ZC)=>{"use strict";var pc=require("jsonwebtoken"),dS=require("fs-extra"),ES=V(),Cr=A(),{handleHDBError:Wt,hdb_errors:z3}=W(),{HTTP_STATUS_CODES:Qt,AUTHENTICATION_ERROR_MSGS:zt}=z3,Sc=x(),zC=Hl(),mS=Ir(),J3=yr().update,X3=uS(),Z3=$s(),{UserEventMsg:j3}=xr(),Ln=Q();Ln.initSync();var fS=require("path"),{JWTTokens:e4,JWTRSAKeys:t4,TOKEN_TYPE_ENUM:R_}=QC(),r4=Ln.get(Cr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Ln.get(Cr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",s4=Ln.get(Cr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Ln.get(Cr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",g_="RS256",hS;ZC.exports={createTokens:n4,validateOperationToken:o4,refreshOperationToken:i4,validateRefreshToken:XC};async function n4(e){if(ES.isEmpty(e)||typeof e!="object")throw Wt(new Error,zt.INVALID_AUTH_OBJECT,Qt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.username))throw Wt(new Error,zt.USERNAME_REQUIRED,Qt.BAD_REQUEST,void 0,void 0,!0);if(ES.isEmpty(e.password))throw Wt(new Error,zt.PASSWORD_REQUIRED,Qt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await mS.findAndValidateUser(e.username,e.password),!t)throw Wt(new Error,zt.INVALID_CREDENTIALS,Qt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Sc.error(E),Wt(new Error,zt.INVALID_CREDENTIALS,Qt.UNAUTHORIZED,void 0,void 0,!0)}let r=await A_(),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 JC(i,r.private_key,r.passphrase),c=await pc.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:s4,algorithm:g_,subject:R_.REFRESH}),u=zC.hash(c),l=new X3(Cr.SYSTEM_SCHEMA_NAME,Cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await J3(l)}catch(E){Sc.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Wt(new Error,zt.REFRESH_TOKEN_SAVE_FAILED,Qt.INTERNAL_SERVER_ERROR);return Z3.signalUserChange(new j3(process.pid)),new e4(o,c)}a(n4,"createTokens");async function JC(e,t,r){return await pc.sign(e,{key:t,passphrase:r},{expiresIn:r4,algorithm:g_,subject:R_.OPERATION})}a(JC,"signOperationToken");async function A_(){if(hS===void 0)try{let e=fS.join(Ln.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=fS.join(Ln.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=fS.join(Ln.getHdbBasePath(),Cr.LICENSE_KEY_DIR_NAME,Cr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await dS.readFile(e)).toString(),n=(await dS.readFile(t)).toString(),i=(await dS.readFile(r)).toString();hS=new t4(i,n,s)}catch(e){throw Sc.error(e),Wt(new Error,zt.NO_ENCRYPTION_KEYS,Qt.INTERNAL_SERVER_ERROR)}return hS}a(A_,"getJWTRSAKeys");async function i4(e){if(!e)throw Wt(new Error,zt.INVALID_BODY,Qt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Wt(new Error,zt.REFRESH_TOKEN_REQUIRED,Qt.BAD_REQUEST,void 0,void 0,!0);await XC(e.refresh_token);let t=await A_(),r=await pc.decode(e.refresh_token);return{operation_token:await JC({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(i4,"refreshOperationToken");async function o4(e){try{let t=await A_(),r=await pc.verify(e,t.public_key,{algorithms:g_,subject:R_.OPERATION});return await mS.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Sc.warn(t),t.name&&t.name==="TokenExpiredError"?Wt(new Error,zt.TOKEN_EXPIRED,Qt.FORBIDDEN):Wt(new Error,zt.INVALID_TOKEN,Qt.UNAUTHORIZED)}}a(o4,"validateOperationToken");async function XC(e){let t;try{let r=await A_(),s=await pc.verify(e,r.public_key,{algorithms:g_,subject:R_.REFRESH});t=await mS.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Sc.warn(r),r.name&&r.name==="TokenExpiredError"?Wt(new Error,zt.TOKEN_EXPIRED,Qt.FORBIDDEN):Wt(new Error,zt.INVALID_TOKEN,Qt.UNAUTHORIZED)}if(!zC.validate(t.refresh_token,e))throw Wt(new Error,zt.INVALID_TOKEN,Qt.UNAUTHORIZED);return t}a(XC,"validateRefreshToken")});var SS=m((_ue,tU)=>{"use strict";var a4=YC(),Oo=require("passport"),c4=require("passport-local").Strategy,u4=require("passport-http").BasicStrategy,l4=require("util"),_4=Ir(),eU=l4.callbackify(_4.findAndValidateUser),lue=nr(),d4=A(),jC=Tc();Oo.use(new c4(function(e,t,r){eU(e,t,r)}));Oo.use(new u4(function(e,t,r){eU(e,t,r)}));Oo.serializeUser(function(e,t){t(null,e)});Oo.deserializeUser(function(e,t){t(null,e)});function E4(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":Oo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===d4.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?jC.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):jC.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:Oo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(E4,"authorize");function f4(e,t){let r=a4(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(f4,"checkPermissions");tU.exports={authorize:E4,checkPermissions:f4}});var No=m((Eue,rU)=>{"use strict";var pS=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},TS=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};rU.exports={Node:pS,NodeSubscription:TS}});var nU=m((hue,sU)=>{"use strict";var h4=A().OPERATIONS_ENUM,RS=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=h4.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};sU.exports=RS});var Rc=m((Sue,iU)=>{"use strict";var gS=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},AS=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)}};iU.exports={RemotePayloadObject:gS,RemotePayloadSubscription:AS}});var aU=m((Tue,oU)=>{"use strict";var OS=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}};oU.exports=OS});var lU=m((Nue,uU)=>{"use strict";var m4=aU(),gue=Ve(),cU=Ie(),S4=x(),{getSchemaPath:Aue,getTransactionAuditStorePath:Oue}=Ce(),{getDatabases:p4}=(Ee(),ee(be));uU.exports=T4;async function T4(e){let t=new m4;try{let r=p4()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await cU.environmentDataSize(schema_path,e.name),o=await cU.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){S4.warn(`unable to stat table dbi due to ${r}`)}return t}a(T4,"lmdbGetTableSize")});var dU=m((yue,_U)=>{"use strict";var NS=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}};_U.exports=NS});var bo=m((Uue,mU)=>{"use strict";var R4=require("fs-extra"),g4=require("path"),Ut=require("systeminformation"),Mn=x(),A4=it(),bS=He(),N_=A(),O4=lU(),hU=ai(),{getThreadInfo:EU}=st(),vS=Q();vS.initSync();var N4=dU(),{openEnvironment:wue}=Ie(),{getSchemaPath:Cue}=Ce(),{database:b4}=(Ee(),ee(be)),O_;mU.exports={getHDBProcessInfo:CS,getNetworkInfo:DS,getDiskInfo:US,getMemoryInfo:wS,getCPUInfo:IS,getTimeInfo:yS,getSystemInformation:LS,systemInformation:y4,getTableSize:MS,getMetrics:PS};function yS(){return Ut.time()}a(yS,"getTimeInfo");async function IS(){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:S,raw_currentload_user:T,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(q=>{let{raw_load:$,raw_load_idle:w,raw_load_irq:I,raw_load_nice:D,raw_load_system:z,raw_load_user:M,...te}=q;O.cpus.push(te)}),_.current_load=O,_}catch(e){return Mn.error(`error in getCPUInfo: ${e}`),{}}}a(IS,"getCPUInfo");async function wS(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Mn.error(`error in getMemoryInfo: ${e}`),{}}}a(wS,"getMemoryInfo");async function CS(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await R4.readFile(g4.join(vS.get(N_.CONFIG_PARAMS.ROOTPATH),N_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===N_.NODE_ERROR_CODES.ENOENT)Mn.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 Mn.error(`error in getHDBProcessInfo: ${t}`),e}}a(CS,"getHDBProcessInfo");async function US(){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 Mn.error(`error in getDiskInfo: ${t}`),e}}a(US,"getDiskInfo");async function DS(){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 Mn.error(`error in getNetworkInfo: ${t}`),e}}a(DS,"getNetworkInfo");async function LS(){if(O_!==void 0)return O_;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,O_=e,O_}catch(t){return Mn.error(`error in getSystemInformation: ${t}`),e}}a(LS,"getSystemInformation");async function MS(){let e=[],t=await hU.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await O4(s));return e}a(MS,"getTableSize");async function PS(){let e=await hU.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=b4({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){Mn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(PS,"getMetrics");async function fU(){if(vS.get(N_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await A4.getNATSReferences(),r=await t.streams.info(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(bS.WORK_QUEUE_CONSUMER_NAMES.stream_name,bS.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(fU,"getNatsStreamInfo");async function y4(e){let t=new N4;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await LS(),t.time=yS(),t.cpu=await IS(),t.memory=await wS(),t.disk=await US(),t.network=await DS(),t.harperdb_processes=await CS(),t.table_size=await MS(),t.metrics=await PS(),t.threads=await EU(),t.replication=await fU(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await LS();break;case"time":t.time=yS();break;case"cpu":t.cpu=await IS();break;case"memory":t.memory=await wS();break;case"disk":t.disk=await US();break;case"network":t.network=await DS();break;case"harperdb_processes":t.harperdb_processes=await CS();break;case"table_size":t.table_size=await MS();break;case"database_metrics":case"metrics":t.metrics=await PS();break;case"threads":t.threads=await EU();break;case"replication":t.replication=await fU();break;default:break}return t}a(y4,"systemInformation")});var BS=m((Pue,SU)=>{"use strict";var Lue=require("fs-extra"),Mue=x();SU.exports={version:I4,printVersion:C4,nodeVersion:w4};var Pn=cc();function I4(){if(Pn)return Pn.version}a(I4,"version");function w4(){if(Pn&&Pn.engines&&Pn.engines["preferred-node"])return Pn.engines["preferred-node"]}a(w4,"nodeVersion");function C4(){Pn&&console.log(`HarperDB Version ${Pn.version}`)}a(C4,"printVersion")});var Qs=m((que,gU)=>{"use strict";var U4=yr(),HS=V(),D4=require("util"),Oi=A(),pU=Q();pU.initSync();var L4=SS(),TU=br(),{Node:Bue,NodeSubscription:Hue}=No(),M4=ji(),P4=nU(),{RemotePayloadObject:v4,RemotePayloadSubscription:B4}=Rc(),{handleHDBError:H4,hdb_errors:q4}=W(),{HTTP_STATUS_CODES:F4,HDB_ERROR_MSGS:G4}=q4,x4=ls(),k4=bo(),V4=BS(),{getDatabases:$4}=(Ee(),ee(be)),Y4=D4.promisify(L4.authorize),K4=TU.searchByHash,W4=TU.searchByValue;gU.exports={authHeaderToUser:Q4,isEmpty:z4,getNodeRecord:J4,upsertNodeRecord:X4,buildNodePayloads:Z4,checkClusteringEnabled:j4,getAllNodeRecords:eX,getSystemInfo:tX,reverseSubscription:RU};async function Q4(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Y4(t,null),e}a(Q4,"authHeaderToUser");function z4(e){return e==null}a(z4,"isEmpty");async function J4(e){let t=new M4(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return K4(t)}a(J4,"getNodeRecord");async function X4(e){let t=new P4(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return U4.upsert(t)}a(X4,"upsertNodeRecord");function RU(e){if(HS.isEmpty(e.subscribe)||HS.isEmpty(e.publish))throw new Error("Received invalid subscription object");let{schema:t,table:r,hash_attribute:s}=e,n={schema:t,table:r,hash_attribute:s};return e.subscribe===!0&&e.publish===!1?(n.subscribe=!1,n.publish=!0):e.subscribe===!1&&e.publish===!0?(n.subscribe=!0,n.publish=!1):(n.subscribe=e.subscribe,n.publish=e.publish),n}a(RU,"reverseSubscription");function Z4(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,_=HS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=RU(c),f=$4()[u]?.[l],h=new B4(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new v4(r,t,n,s)}a(Z4,"buildNodePayloads");function j4(){if(!pU.get(Oi.CONFIG_PARAMS.CLUSTERING_ENABLED))throw H4(new Error,G4.CLUSTERING_NOT_ENABLED,F4.BAD_REQUEST,void 0,void 0,!0)}a(j4,"checkClusteringEnabled");async function eX(){let e=new x4(Oi.SYSTEM_SCHEMA_NAME,Oi.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await W4(e))}a(eX,"getAllNodeRecords");async function tX(){let e=await k4.getSystemInformation();return{hdb_version:V4.version(),node_version:e.node_version,platform:e.platform}}a(tX,"getSystemInfo")});var qS=m((Gue,CU)=>{"use strict";var b_=it(),AU=V(),OU=He(),NU=A(),y_=x(),bU=d_(),rX=dh(),{RemotePayloadObject:sX}=Rc(),{handleHDBError:yU,hdb_errors:nX}=W(),{HTTP_STATUS_CODES:IU}=nX,{NodeSubscription:wU}=No();CU.exports=iX;async function iX(e,t){let r;try{r=await b_.request(`${t}.${OU.REQUEST_SUFFIX}`,new sX(NU.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),y_.trace("Response from remote describe all request:",r)}catch(o){y_.error(`addNode received error from describe all request to remote node: ${o}`);let c=b_.requestErrorHandler(o,"add_node",t);throw yU(new Error,c,IU.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===OU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw yU(new Error,o,IU.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===NU.SYSTEM_SCHEMA_NAME){await b_.createLocalTableStream(c,u);let h=new wU(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=AU.doesSchemaExist(c),_=s[c]!==void 0,d=u?AU.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(y_.trace(`addNode creating schema: ${c}`),await bU.createSchema({operation:"create_schema",schema:c})),!d&&E){y_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new rX(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await bU.createTable(h)}await b_.createLocalTableStream(c,u);let f=new wU(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(iX,"reviewSubscriptions")});var C_=m((kue,LU)=>{"use strict";var{handleHDBError:I_,hdb_errors:oX}=W(),{HTTP_STATUS_CODES:w_}=oX,{addUpdateNodeValidator:aX}=T_(),gc=x(),DU=A(),UU=He(),cX=V(),FS=it(),Ac=Qs(),uX=Q(),lX=qS(),{Node:_X,NodeSubscription:dX}=No(),{broadcast:EX}=st(),fX="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",hX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",mX=uX.get(DU.CONFIG_PARAMS.CLUSTERING_NODENAME);LU.exports=SX;async function SX(e,t=!1){gc.trace("addNode called with:",e),Ac.checkClusteringEnabled();let r=aX(e);if(r)throw I_(r,r.message,w_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Ac.getNodeRecord(s);if(!cX.isEmptyOrZeroLength(d))throw I_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,w_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await lX(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=fX,o;let c=Ac.buildNodePayloads(n,mX,DU.OPERATIONS_ENUM.ADD_NODE,await Ac.getSystemInfo());gc.trace("addNode sending remote payload:",c);let u;try{u=await FS.request(`${s}.${UU.REQUEST_SUFFIX}`,c)}catch(d){gc.error(`addNode received error from request: ${d}`);let E=FS.requestErrorHandler(d,"add_node",s);throw I_(new Error,E,w_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===UU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw I_(new Error,d,w_.INTERNAL_SERVER_ERROR,"error",d)}gc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];gc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await FS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new dX(f.schema,f.table,f.publish,f.subscribe))}let _=new _X(s,l,u.system_info);return await Ac.upsertNodeRecord(_),EX({type:"nats_update"}),i.length>0?o.message=hX:o.message=`Successfully added '${s}' to manifest`,o}a(SX,"addNode")});var xS=m(($ue,vU)=>{"use strict";var{handleHDBError:U_,hdb_errors:pX}=W(),{HTTP_STATUS_CODES:D_}=pX,{addUpdateNodeValidator:TX}=T_(),Oc=x(),PU=A(),MU=He(),RX=V(),GS=it(),Nc=Qs(),gX=Q(),{cloneDeep:AX}=require("lodash"),OX=qS(),{NodeSubscription:NX}=No(),{broadcast:bX}=st(),yX="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",IX="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",wX=gX.get(PU.CONFIG_PARAMS.CLUSTERING_NODENAME);vU.exports=CX;async function CX(e){Oc.trace("updateNode called with:",e),Nc.checkClusteringEnabled();let t=TX(e);if(t)throw U_(t,t.message,D_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=AX(await Nc.getNodeRecord(r));if(RX.isEmptyOrZeroLength(s))throw U_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,D_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await OX(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=yX,o;let c=Nc.buildNodePayloads(n,wX,PU.OPERATIONS_ENUM.UPDATE_NODE,await Nc.getSystemInfo());Oc.trace("updateNode sending remote payload:",c);let u;try{u=await GS.request(`${r}.${MU.REQUEST_SUFFIX}`,c)}catch(l){Oc.error(`updateNode received error from request: ${l}`);let _=GS.requestErrorHandler(l,"update_node",r);throw U_(new Error,_,D_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===MU.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw U_(new Error,l,D_.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 GS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await UX(s[0],n,u.system_info),i.length>0?o.message=IX:o.message=`Successfully updated '${r}'`,o}a(CX,"updateNode");async function UX(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 NX(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Nc.upsertNodeRecord(s),bX({type:"nats_update"})}a(UX,"updateNodeTable")});var GU=m((Kue,FU)=>{"use strict";var qU=require("joi"),{string:BU}=qU.types(),DX=Be(),HU=A(),LX=Q(),MX=He();FU.exports=PX;function PX(e){let t=BU.invalid(LX.get(HU.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(MX.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=qU.object({operation:BU.valid(HU.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return DX.validateBySchema(e,r)}a(PX,"removeNodeValidator")});var M_=m((Que,KU)=>{"use strict";var{handleHDBError:xU,hdb_errors:vX}=W(),{HTTP_STATUS_CODES:kU}=vX,BX=GU(),bc=x(),VU=Qs(),HX=V(),L_=A(),$U=He(),YU=it(),qX=Q(),{RemotePayloadObject:FX}=Rc(),{NodeSubscription:GX}=No(),xX=Ha(),kX=di(),{broadcast:VX}=st(),$X=qX.get(L_.CONFIG_PARAMS.CLUSTERING_NODENAME);KU.exports=YX;async function YX(e){bc.trace("removeNode called with:",e),VU.checkClusteringEnabled();let t=BX(e);if(t)throw xU(t,t.message,kU.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await VU.getNodeRecord(r);if(HX.isEmptyOrZeroLength(s))throw xU(new Error,`Node '${r}' was not found.`,kU.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new FX(L_.OPERATIONS_ENUM.REMOVE_NODE,$X,[]),i,o=!1;try{i=await YU.request(`${r}.${$U.REQUEST_SUFFIX}`,n),bc.trace("Remove node reply from remote node:",r,i)}catch(u){bc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];bc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new GX(_.schema,_.table,!1,!1);await YU.updateWorkStream(d,r)}let c=new xX(L_.SYSTEM_SCHEMA_NAME,L_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await kX.deleteRecord(c),VX({type:"nats_update"}),i?.status===$U.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(bc.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(YX,"removeNode")});var zU=m((Jue,QU)=>{"use strict";var WU=require("joi"),{string:KX,array:WX}=WU.types(),QX=Be(),zX=T_();QU.exports=JX;function JX(e){let t=WU.object({operation:KX.valid("configure_cluster").required(),connections:WX.items(zX.validation_schema).required()});return QX.validateBySchema(e,t)}a(JX,"configureClusterValidator")});var kS=m((Zue,eD)=>{"use strict";var XX=A(),P_=x(),ZX=V(),jX=M_(),eZ=C_(),JU=Qs(),tZ=zU(),{handleHDBError:XU,hdb_errors:rZ}=W(),{HTTP_STATUS_CODES:ZU}=rZ,sZ="Configure cluster complete.",nZ="Failed to configure the cluster. Check the logs for more details.",iZ="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";eD.exports=oZ;async function oZ(e){P_.trace("configure cluster called with:",e),JU.checkClusteringEnabled();let t=tZ(e);if(t)throw XU(t,t.message,ZU.BAD_REQUEST,void 0,void 0,!0);let r=await JU.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(jU(jX,{operation:XX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);P_.trace("All results from configure_cluster remove node:",n);let i=[],o=e.connections.length;for(let E=0;E<o;E++){let f=e.connections[E];i.push(jU(eZ,f,f.node_name))}let c=await Promise.allSettled(i);P_.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"&&(P_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let S=h?.value?.result;typeof S=="string"&&S.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(ZX.isEmptyOrZeroLength(u))return{message:sZ,connections:l};if(_)return{message:iZ,failed_nodes:u,connections:l};throw XU(new Error,nZ,ZU.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(oZ,"configureCluster");async function jU(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(jU,"functionWrapper")});var rD=m((ele,tD)=>{"use strict";var v_=require("joi"),aZ=Be(),{validateSchemaExists:cZ,validateTableExists:uZ,validateSchemaName:lZ}=cs(),_Z=v_.object({operation:v_.string().valid("purge_stream"),schema:v_.string().custom(cZ).custom(lZ).required(),table:v_.string().custom(uZ).required()});function dZ(e){return aZ.validateBySchema(e,_Z)}a(dZ,"purgeStreamValidator");tD.exports=dZ});var VS=m((rle,sD)=>{"use strict";var{handleHDBError:EZ,hdb_errors:fZ}=W(),{HTTP_STATUS_CODES:hZ}=fZ,mZ=rD(),SZ=it(),pZ=Qs();sD.exports=TZ;async function TZ(e){let t=mZ(e);if(t)throw EZ(t,t.message,hZ.BAD_REQUEST,void 0,void 0,!0);pZ.checkClusteringEnabled();let{schema:r,table:s}=e;return await SZ.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(TZ,"purgeStream")});var KS=m((nle,uD)=>{"use strict";var YS=Qs(),RZ=it(),oD=Q(),B_=A(),Ni=He(),gZ=V(),$S=x(),{RemotePayloadObject:AZ}=Rc(),{ErrorCode:nD}=require("nats"),iD=oD.get(B_.CONFIG_PARAMS.CLUSTERING_ENABLED),aD=oD.get(B_.CONFIG_PARAMS.CLUSTERING_NODENAME);uD.exports={clusterStatus:OZ,buildNodeStatus:cD};async function OZ(){let e={node_name:aD,is_enabled:iD,connections:[]};if(!iD)return e;let t=await YS.getAllNodeRecords();if(gZ.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(cD(t[s],e.connections));return await Promise.allSettled(r),e}a(OZ,"clusterStatus");async function cD(e,t){let r=e.name,s=new AZ(B_.OPERATIONS_ENUM.CLUSTER_STATUS,aD,void 0,await YS.getSystemInfo()),n,i,o=Ni.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await RZ.request(Ni.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===Ni.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=Ni.CLUSTER_STATUS_STATUSES.CLOSED,$S.error(`Error getting node status from ${r} `,n))}catch(u){$S.warn(`Error getting node status from ${r}`,u),u.code===nD.NoResponders?o=Ni.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===nD.Timeout?o=Ni.CLUSTER_STATUS_STATUSES.TIMEOUT:o=Ni.CLUSTER_STATUS_STATUSES.CLOSED}let c=new NZ(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!==B_.PRE_4_0_0_VERSION&&await YS.upsertNodeRecord(u)}catch(u){$S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(cD,"buildNodeStatus");function NZ(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(NZ,"NodeStatusObject")});var QS=m((ole,lD)=>{"use strict";var{handleHDBError:bZ,hdb_errors:yZ}=W(),{HTTP_STATUS_CODES:IZ}=yZ,wZ=it(),CZ=Qs(),WS=V(),H_=require("joi"),UZ=Be(),DZ=2e3,LZ=H_.object({timeout:H_.number().min(1),connected_nodes:H_.boolean(),routes:H_.boolean()});lD.exports=MZ;async function MZ(e){CZ.checkClusteringEnabled();let t=UZ.validateBySchema(e,LZ);if(t)throw bZ(t,t.message,IZ.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||WS.autoCastBoolean(s),o=n===void 0||WS.autoCastBoolean(n),c={nodes:[]},u=await wZ.getServerList(r??DZ),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(S=>S.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(S=>({host:S.split(":")[0],port:WS.autoCast(S.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(MZ,"clusterNetwork")});var fD=m((cle,ED)=>{"use strict";var zS=require("joi"),_D=Be(),{route_constraints:dD}=xE();ED.exports={setRoutesValidator:PZ,deleteRoutesValidator:vZ};function PZ(e){let t=zS.object({server:zS.valid("hub","leaf").required(),routes:dD.required()});return _D.validateBySchema(e,t)}a(PZ,"setRoutesValidator");function vZ(e){let t=zS.object({routes:dD.required()});return _D.validateBySchema(e,t)}a(vZ,"deleteRoutesValidator")});var XS=m((lle,pD)=>{"use strict";var bi=gr(),JS=V(),q_=A(),hD=fD(),{handleHDBError:mD,hdb_errors:BZ}=W(),{HTTP_STATUS_CODES:SD}=BZ,HZ="cluster routes successfully set",qZ="cluster routes successfully deleted";pD.exports={setRoutes:FZ,getRoutes:GZ,deleteRoutes:xZ};function FZ(e){let t=hD.setRoutesValidator(e);if(t)throw mD(t,t.message,SD.BAD_REQUEST,void 0,void 0,!0);let r=bi.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=JS.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"?bi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):bi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:HZ,set:o,skipped:i}}a(FZ,"setRoutes");function GZ(){let e=bi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(GZ,"getRoutes");function xZ(e){let t=hD.deleteRoutesValidator(e);if(t)throw mD(t,t.message,SD.BAD_REQUEST,void 0,void 0,!0);let r=bi.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 S=s[f];if(d.host===S.host&&d.port===S.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,S=n.length;h<S;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=JS.isEmptyOrZeroLength(s)?null:s,bi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=JS.isEmptyOrZeroLength(n)?null:n,bi.updateConfigValue(q_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:qZ,deleted:i,skipped:o}}a(xZ,"deleteRoutes")});var RD=m((dle,TD)=>{"use strict";var yc=require("alasql"),yi=require("recursive-iterator"),Qr=x(),kZ=V(),Ic=A(),ZS=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,$Z(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=>Ic.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=>!Ic.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][Ic.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=VZ(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=>!Ic.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new yc.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 VZ(e){return e.filter(t=>t[Ic.PERMS_CRUD_ENUM.READ])}a(VZ,"filterReadRestrictedAttrs");function $Z(e,t,r,s,n){YZ(e,t,r,s,n)}a($Z,"interpretAST");function wc(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(wc,"addSchemaTableToMap");function YZ(e,t,r,s,n){if(!e){Qr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof yc.yy.Insert?zZ(e,t,r):e instanceof yc.yy.Select?KZ(e,t,r,s,n):e instanceof yc.yy.Update?WZ(e,t,r):e instanceof yc.yy.Delete?QZ(e,t,r):Qr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(YZ,"getRecordAttributesAST");function KZ(e,t,r,s,n){if(!e){Qr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(kZ.isEmptyOrZeroLength(i)){Qr.error("No schema specified");return}e.from.forEach(c=>{wc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),wc(c.table,t,r,s,n)});let o=new yi(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{Qr.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 yi(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{Qr.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 yi(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{Qr.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 yi(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{Qr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(KZ,"getSelectAttributes");function WZ(e,t,r){if(!e){Qr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new yi(e.columns),n=e.table.databaseid;wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(WZ,"getUpdateAttributes");function QZ(e,t,r){if(!e){Qr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new yi(e.where),n=e.table.databaseid;wc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.table.tableid,n,i.columnid,t,r)}a(QZ,"getDeleteAttributes");function zZ(e,t,r){if(!e){Qr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new yi(e.columns),n=e.into.databaseid;wc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&jS(e.into.tableid,n,i.columnid,t,r)}a(zZ,"getInsertAttributes");function jS(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(jS,"pushAttribute");TD.exports=ZS});var rp=m((fle,ND)=>{var F_=Ka(),gD=require("chalk"),fr=x(),AD=require("prompt"),{promisify:JZ}=require("util"),ep=A(),XZ=require("fs-extra"),ZZ=require("path"),jZ=V(),ej=BS(),OD=Q();OD.initSync();var tj=require("moment"),rj=JZ(AD.get),sj=ZZ.join(OD.getHdbBasePath(),ep.LICENSE_KEY_DIR_NAME,ep.LICENSE_FILE_NAME,ep.LICENSE_FILE_NAME);ND.exports={getFingerprint:ij,setLicense:nj,parseLicense:tp,register:oj,getRegistrationInfo:cj};async function nj(e){if(e&&e.key&&e.company){try{fr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await tp(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw fr.error(r),fr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(nj,"setLicense");async function ij(){let e={};try{e=await F_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw fr.error(r),fr.error(t),new Error(r)}return e}a(ij,"getFingerprint");async function tp(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");fr.info("Validating license input...");let r=F_.validateLicense(e,t);if(fr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(fr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(fr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{fr.info("writing license to disk"),await XZ.writeFile(sj,JSON.stringify({license_key:e,company:t}))}catch(s){throw fr.error("Failed to write License"),s}return"Registration successful."}a(tp,"parseLicense");async function oj(){let e=await aj();return tp(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(oj,"register");async function aj(){let e=await F_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:gD.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:gD.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{AD.start()}catch(s){fr.error(s)}let r;try{r=await rj(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(aj,"promptForRegistration");async function cj(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await F_.getLicense()}catch(r){throw fr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(jZ.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=ej.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=tj.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(cj,"getRegistrationInfo")});var yD=m((mle,bD)=>{"use strict";var uj=He(),sp=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+uj.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"}};bD.exports=sp});var CD=m((ple,wD)=>{"use strict";var ID=He(),np=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+ID.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+ID.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"}};wD.exports=np});var DD=m((Rle,UD)=>{"use strict";var ip=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};UD.exports=ip});var MD=m((Ale,LD)=>{"use strict";var lj=He(),op=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+lj.SERVER_SUFFIX.ADMIN,this.password=r}};LD.exports=op});var up=m((Nle,BD)=>{"use strict";var Cc=require("path"),V_=require("fs-extra"),_j=yD(),dj=CD(),Ej=DD(),fj=MD(),ap=Ir(),yo=V(),Jt=gr(),k_=A(),G_=He(),{CONFIG_PARAMS:Xe}=k_,Dc=x(),$_=Q(),PD=Ws(),cp=it(),Uc="clustering",hj=1e4,vD=5;BD.exports={generateNatsConfig:mj,removeNatsConfig:Sj};async function mj(e=!1,t=void 0){$_.initSync();let r=$_.get(Xe.ROOTPATH),s=Cc.join(r,Uc,G_.PID_FILES.HUB),n=Cc.join(r,Uc,G_.PID_FILES.LEAF),i=Jt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=Cc.join(r,Uc,G_.NATS_CONFIG_FILES.HUB_SERVER),c=Cc.join(r,Uc,G_.NATS_CONFIG_FILES.LEAF_SERVER),u=Jt.getConfigFromFile(Xe.CLUSTERING_TLS_CERTIFICATE),l=Jt.getConfigFromFile(Xe.CLUSTERING_TLS_PRIVATEKEY),_=Jt.getConfigFromFile(Xe.CLUSTERING_TLS_CERT_AUTH),d=Jt.getConfigFromFile(Xe.CLUSTERING_TLS_INSECURE),E=Jt.getConfigFromFile(Xe.CLUSTERING_TLS_VERIFY),f=Jt.getConfigFromFile(Xe.CLUSTERING_NODENAME),h=Jt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await cp.checkNATSServerInstalled()||Y_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let S=await ap.listUsers(),T=Jt.getConfigFromFile(Xe.CLUSTERING_USER),R=await ap.getClusterUser();(yo.isEmpty(R)||R.active!==!0)&&Y_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await x_(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await x_(Xe.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await x_(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),await x_(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],q=[];for(let[te,Ne]of S.entries())Ne.role.role===k_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ne.active&&(O.push(new fj(Ne.username,PD.decrypt(Ne.hash))),q.push(new Ej(Ne.username,PD.decrypt(Ne.hash))));let $=[],{hub_routes:w}=Jt.getClusteringRoutes();if(!yo.isEmptyOrZeroLength(w))for(let te of w)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${te.host}:${te.port}`);let I=new _j(Jt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Jt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NAME),Jt.getConfigFromFile(Xe.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,q);_==null&&(delete I.tls.ca_file,delete I.leafnodes.tls.ca_file),t=yo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===k_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await V_.writeJson(o,I),Dc.trace(`Hub server config written to ${o}`));let D=`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}`,M=new dj(Jt.getConfigFromFile(Xe.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[D],[z],O,q,u,l,_,d);_==null&&delete M.tls.ca_file,(t===void 0||t===k_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await V_.writeJson(c,M),Dc.trace(`Leaf server config written to ${c}`))}a(mj,"generateNatsConfig");async function x_(e){let t=$_.get(e);return yo.isEmpty(t)&&Y_(`port undefined for '${e}'`),await yo.isPortTaken(t)&&Y_(`'${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(x_,"isPortAvailable");function Y_(e){let t=`Error generating clustering config: ${e}`;Dc.error(t),console.error(t),process.exit(1)}a(Y_,"generateNatsConfigError");async function Sj(e){let{port:t,config_file:r}=cp.getServerConfig(e),{username:s,decrypt_hash:n}=await ap.getClusterUser(),i=0,o=500;for(;i<vD;){try{let l=await cp.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Dc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=vD)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 yo.async_set_timeout(o*i)}let c="0".repeat(hj),u=Cc.join($_.get(Xe.ROOTPATH),Uc,r);await V_.writeFile(u,c),await V_.remove(u),Dc.notify(e,"started.")}a(Sj,"removeNatsConfig")});var kD=m((yle,xD)=>{"use strict";var hr=Q(),pj=Ka(),ae=A(),Lc=He(),zs=require("path"),{PACKAGE_ROOT:W_}=A(),HD=Q(),K_=V(),Io="/dev/null",Tj=zs.join(W_,"launchServiceScripts"),qD=zs.join(W_,"utility/scripts"),Rj=zs.join(qD,ae.HDB_RESTART_SCRIPT),FD=zs.resolve(W_,"dependencies",`${process.platform}-${process.arch}`,Lc.NATS_BINARY_NAME);function GD(){let t=pj.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 K_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=K_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:W_}}a(GD,"generateMainServerConfig");var gj=9930;function Aj(){hr.initSync(!0);let e=hr.get(ae.CONFIG_PARAMS.ROOTPATH),t=zs.join(e,"clustering",Lc.NATS_CONFIG_FILES.HUB_SERVER),r=zs.join(hr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=HD.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=Lc.LOG_LEVEL_FLAGS[hr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==gj?"-"+s:""),script:FD,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 hr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(Aj,"generateNatsHubServerConfig");var Oj=9940;function Nj(){hr.initSync(!0);let e=hr.get(ae.CONFIG_PARAMS.ROOTPATH),t=zs.join(e,"clustering",Lc.NATS_CONFIG_FILES.LEAF_SERVER),r=zs.join(hr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=HD.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=Lc.LOG_LEVEL_FLAGS[hr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Oj?"-"+s:""),script:FD,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 hr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Io,i.error_file=Io),i}a(Nj,"generateNatsLeafServerConfig");function bj(){hr.initSync();let e=zs.join(hr.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:Tj,autorestart:!1};return hr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Io,t.error_file=Io),t}a(bj,"generateClusteringUpgradeV4ServiceConfig");function yj(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return K_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=K_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:qD},script:Rj}}a(yj,"generateRestart");function Ij(){return{apps:[GD()]}}a(Ij,"generateAllServiceConfigs");xD.exports={generateAllServiceConfigs:Ij,generateMainServerConfig:GD,generateRestart:yj,generateNatsHubServerConfig:Aj,generateNatsLeafServerConfig:Nj,generateClusteringUpgradeV4ServiceConfig:bj}});var sL=m((Mle,rL)=>{"use strict";var ge=A(),wj=V(),Mc=up(),Pc=it(),ps=He(),vn=kD(),Q_=Q(),Js=x(),Cj=Qs(),{startWorker:VD,onMessageFromWorkers:Uj}=st(),Dj=bo(),Lj=require("util"),YD=require("child_process"),{execFile:Mj}=YD,wle=Lj.promisify(YD.exec),Cle=require("systeminformation"),he;rL.exports={enterPM2Mode:Pj,start:Ii,stop:lp,reload:KD,restart:WD,list:_p,describe:zD,connect:Xs,kill:Fj,startAllServices:Gj,startService:dp,getUniqueServicesList:JD,restartAllServices:xj,isServiceRegistered:XD,reloadStopStart:ZD,restartHdb:QD,deleteProcess:Hj,startClusteringProcesses:eL,startClusteringThreads:tL,isHdbRestartRunning:qj,isClusteringRunning:Vj,stopClustering:kj,reloadClustering:$j};var{PACKAGE_ROOT:Ule}=A(),Dle=A(),{loggerWithTag:Lle}=Js,vc=!1;Uj(e=>{e.type==="restart"&&Q_.initSync(!0)});function Pj(){vc=!0}a(Pj,"enterPM2Mode");function Xs(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{Js.setupConsoleLogging(),r&&t(r),e(s)})})}a(Xs,"connect");var Xt,vj=10,$D;function Ii(e){if(vc)return Bj(e);let t=Mj(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Xt.indexOf(t);i>-1&&Xt.splice(i,1),!$D&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<vj&&Ii(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=Q_.get(ge.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ps.LOG_LEVEL_HIERARCHY[i]>=ps.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ps.LOG_LEVELS.ERR||l===ps.LOG_LEVELS.WRN?Js.OUTPUTS.STDERR:Js.OUTPUTS.STDOUT;Js.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ps.LOG_LEVELS[d]}if(ps.LOG_LEVEL_HIERARCHY[i]>=ps.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ps.LOG_LEVELS.ERR||l===ps.LOG_LEVELS.WRN?Js.OUTPUTS.STDERR:Js.OUTPUTS.STDOUT;Js.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Xt){Xt=[];let n=a(()=>{$D=!0,Xt&&(Xt.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)}Xt.push(t)}a(Ii,"start");function Bj(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(Bj,"startWithPM2");function lp(e){if(!vc){for(let t of Xt||[])t.name===e&&(Xt.splice(Xt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,o)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(o)})})})}a(lp,"stop");function KD(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(KD,"reload");function WD(e){if(!vc)for(let t of Xt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(WD,"restart");function Hj(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(Hj,"deleteProcess");async function QD(){await Ii(vn.generateRestart())}a(QD,"restartHdb");async function qj(){let e=await _p();for(let t in e)if(e[t].name===ge.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(qj,"isHdbRestartRunning");function _p(){return new Promise(async(e,t)=>{try{await Xs()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(_p,"list");function zD(e){return new Promise(async(t,r)=>{try{await Xs()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(zD,"describe");function Fj(){if(!vc){for(let e of Xt||[])e.kill();Xt=[];return}return new Promise(async(e,t)=>{try{await Xs()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(Fj,"kill");async function Gj(){try{await eL(),await tL(),await Ii(vn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(Gj,"startAllServices");async function dp(e){try{let t;switch(e=e.toLowerCase(),e){case ge.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=vn.generateMainServerConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=vn.generateNatsIngestServiceConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=vn.generateNatsReplyServiceConfig();break;case ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=vn.generateNatsHubServerConfig(),await Ii(t),await Mc.removeNatsConfig(e);return;case ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=vn.generateNatsLeafServerConfig(),await Ii(t),await Mc.removeNatsConfig(e);return;case ge.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=vn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ii(t)}catch(t){throw he.disconnect(),t}}a(dp,"startService");async function JD(){try{let e=await _p(),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 he.disconnect(),e}}a(JD,"getUniqueServicesList");async function xj(e=[]){try{let t=!1,r=await JD();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===ge.PROCESS_DESCRIPTORS.HDB?t=!0:await WD(o))}t&&await ZD(ge.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(xj,"restartAllServices");async function XD(e){if(Xt?.find(r=>r.name===e))return!0;let t=await Dj.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(XD,"isServiceRegistered");async function ZD(e){let t=e===ge.PROCESS_DESCRIPTORS.HDB?Q_.get(ge.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):Q_.get(ge.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await zD(e),s=wj.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await lp(e),await dp(e)):e===ge.PROCESS_DESCRIPTORS.HDB?await QD():await KD(e)}a(ZD,"reloadStopStart");var jD;async function eL(){for(let e in ge.CLUSTERING_PROCESSES){let t=ge.CLUSTERING_PROCESSES[e];await dp(t)}}a(eL,"startClusteringProcesses");async function tL(){jD=VD(ge.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:ge.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await Pc.createWorkQueueStream(ps.WORK_QUEUE_CONSUMER_NAMES),await Pc.updateIngestStreamConsumer(),await Pc.updateLocalStreams();let e=await Cj.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===ge.PRE_4_0_0_VERSION){Js.info("Starting clustering upgrade 4.0.0 process"),VD(ge.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(tL,"startClusteringThreads");async function kj(){for(let e in ge.CLUSTERING_PROCESSES)if(e!==ge.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===ge.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await jD.terminate();else{let t=ge.CLUSTERING_PROCESSES[e];await lp(t)}}a(kj,"stopClustering");async function Vj(){for(let e in ge.CLUSTERING_PROCESSES){let t=ge.CLUSTERING_PROCESSES[e];if(await XD(t)===!1)return!1}return!0}a(Vj,"isClusteringRunning");async function $j(){await Mc.generateNatsConfig(!0),await Pc.reloadNATSHub(),await Pc.reloadNATSLeaf(),await Mc.removeNatsConfig(ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Mc.removeNatsConfig(ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($j,"reloadClustering")});var Tp=m((vle,uL)=>{"use strict";var Yj=require("minimist"),{isMainThread:hp,parentPort:oL}=require("worker_threads"),Fe=A(),{PROCESS_DESCRIPTORS_VALIDATE:Bc}=Fe,Ts=x(),mp=V(),z_=up(),wo=it(),Ep=He(),aL=gr(),Rs=sL(),nL=bo(),Kj=IE(),{restartWorkers:J_,onMessageByType:Wj}=st(),{handleHDBError:Qj,hdb_errors:zj}=W(),{HTTP_STATUS_CODES:Jj}=zj,X_=Q();X_.initSync();var Hc=`Restarting HarperDB. This may take up to ${Fe.RESTART_TIMEOUT_MS/1e3} seconds.`,Xj="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",iL="Clustering is not enabled so cannot be restarted",Zj="Invalid service",wi,zr;uL.exports={restart:cL,restartService:Sp};hp&&Wj(Fe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?Sp({service:e.workerType}):cL({operation:"restart"})});async function cL(e){zr=Object.keys(e).length===0,wi=await Rs.isServiceRegistered(Fe.HDB_PROC_DESCRIPTOR);let t=Yj(process.argv);if(t.service){await Sp(t);return}if(zr&&!wi){console.error(Xj);return}if(zr&&console.log(Hc),wi){Rs.enterPM2Mode(),Ts.notify(Hc);let r=Kj(Object.keys(Fe.CONFIG_PARAM_MAP),!0);return mp.isEmptyOrZeroLength(Object.keys(r))||aL.updateConfigValue(void 0,void 0,r,!0,!0),e5(),Hc}return hp?(Ts.notify(Hc),await pp(),setTimeout(()=>{J_()},50)):oL.postMessage({type:Fe.ITC_EVENT_TYPES.RESTART}),Hc}a(cL,"restart");async function Sp(e){let{service:t}=e;if(Fe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw Qj(new Error,Zj,Jj.BAD_REQUEST,void 0,void 0,!0);if(wi=await Rs.isServiceRegistered(Fe.HDB_PROC_DESCRIPTOR),!hp)return oL.postMessage({type:Fe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Bc.clustering:if(!X_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=iL;break}zr&&console.log("Restarting clustering"),Ts.notify("Restarting clustering"),await pp();break;case Bc.clustering_config:case Bc["clustering config"]:if(!X_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=iL;break}zr&&console.log("Restarting clustering_config"),Ts.notify("Restarting clustering_config"),await Rs.reloadClustering();break;case"custom_functions":case"custom functions":case Bc.harperdb:case Bc.http_workers:if(zr&&!wi){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}zr&&console.log("Restarting http_workers"),Ts.notify("Restarting http_workers"),wi?await Rs.restart(Fe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{J_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Ts.error(r),zr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(Sp,"restartService");async function jj(){await wo.publishToStream(`${Ep.SUBJECT_PREFIXES.TXN}.${Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,Ep.WORK_QUEUE_CONSUMER_NAMES.stream_name,wo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(jj,"postDummyNatsMsg");async function e5(){await pp(),await Rs.restart(Fe.HDB_PROC_DESCRIPTOR),await mp.async_set_timeout(2e3),X_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await fp(),zr&&(await wo.closeConnection(),process.exit(0))}a(e5,"restartPM2Mode");async function pp(){if(!aL.getConfigFromFile(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await nL.getHDBProcessInfo()).clustering.length===0)Ts.trace("Clustering not running, restart will start clustering services"),await z_.generateNatsConfig(!0),await Rs.startClusteringProcesses(),await Rs.startClusteringThreads(),await fp(),zr&&await wo.closeConnection();else{await jj(),await z_.generateNatsConfig(!0),wi?(Ts.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Rs.restart(Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Rs.restart(Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await nL.getHDBProcessInfo()).clustering.forEach(n=>{Ts.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await mp.async_set_timeout(3e3),await fp(),await wo.updateLocalStreams(),zr&&await wo.closeConnection(),Ts.trace("Restart clustering restarting ingest and reply service threads");let t=J_(Fe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=J_(Fe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(pp,"restartClustering");async function fp(){await z_.removeNatsConfig(Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await z_.removeNatsConfig(Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(fp,"removeNatsConfig")});var RL=m((qle,TL)=>{"use strict";var Hle=require("lodash"),Zt=A(),{handleHDBError:lL,hdb_errors:t5}=W(),{HDB_ERROR_MSGS:r5,HTTP_STATUS_CODES:s5}=t5,Rp=x();TL.exports={getRolePermissions:i5};var Ci=Object.create(null),n5=a(e=>({key:e,perms:{}}),"perms_template_obj"),fL=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),hL=a((e=!1,t=!1,r=!1,s=!1)=>({[Zt.PERMS_CRUD_ENUM.READ]:e,[Zt.PERMS_CRUD_ENUM.INSERT]:t,[Zt.PERMS_CRUD_ENUM.UPDATE]:r,[Zt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),gp=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...hL(t,r,s,n)}),"table_perms_template"),_L=a((e,t=hL())=>({attribute_name:e,describe:pL(t),[qc]:t[qc],[Ap]:t[Ap],[Op]:t[Op]}),"attr_perms_template"),dL=a((e,t=!1)=>({attribute_name:e,describe:t,[qc]:t}),"timestamp_attr_perms_template"),{READ:qc,INSERT:Ap,UPDATE:Op}=Zt.PERMS_CRUD_ENUM,mL=Object.values(Zt.PERMS_CRUD_ENUM),SL=[qc,Ap,Op];function i5(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[Zt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ci[t]&&Ci[t].key===s)return Ci[t].perms;let n=o5(e,r);return Ci[t]?Ci[t].key=s:Ci[t]=n5(s),Ci[t].perms=n,n}catch(r){if(!e[Zt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Zt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Zt.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 Rp.error(s),Rp.debug(r),lL(new Error,r5.OUTDATED_PERMS_TRANSLATION_ERROR,s5.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw Rp.error(s),lL(new Error)}}}a(i5,"getRolePermissions");function o5(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Zt.SYSTEM_SCHEMA_NAME]=s[Zt.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]=a5(t[i]);return}r[i]=fL(),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=c5(c,u);r[i].describe||mL.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=gp()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=gp()})}),r}a(o5,"translateRolePermissions");function a5(e){let t=fL(!0);return Object.keys(e).forEach(r=>{t.tables[r]=gp(!0,!0,!0,!0,!0)}),t}a(a5,"createStructureUserPermissions");function c5(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 Zt.TIME_STAMP_NAMES.includes(d)&&(E=dL(d,_[qc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=_L(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=pL(_),n.attribute_permissions.push(_),c||u5(_,u)}else if(l!==o){let _;Zt.TIME_STAMP_NAMES.includes(l)?_=dL(l):_=_L(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=EL(n),n}else return e.describe=EL(e),e}a(c5,"getTableAttrPerms");function EL(e){return mL.filter(t=>e[t]).length>0}a(EL,"getSchemaTableDescribePerm");function pL(e){return SL.filter(t=>e[t]).length>0}a(pL,"getAttributeDescribePerm");function u5(e,t){SL.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(u5,"checkForHashPerms")});var gL={};ke(gL,{Headers:()=>Bn});var Bn,Z_=pe(()=>{Bn=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 Fc={};ke(Fc,{authentication:()=>IL,login:()=>p5,logout:()=>T5,start:()=>S5});async function IL(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?E5?d5:[]:_5?l5:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new Bn([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return j_&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),j_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(j_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let S=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,S===-1?n.length:S),u=await OL.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,S)=>{let T=new rd.AuthAuditLog(f,h,gt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=S,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===gt.AUTH_AUDIT_STATUS.SUCCESS?AL.notify(T):AL.error(T)},"authAuditLog"),_;if(s){if(_=Co.get(s),!_){let[f,h]=s.split(" "),S,T;try{switch(f){case"Basic":[S,T]=atob(h).split(":"),_=S||T?await et.auth(S,T):null;break;case"Bearer":try{_=await(0,td.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,td.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return m5&&(Co.get(h)||(Co.set(h,h),l(S,gt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Zs({error:R.message},e)}}Co.set(s,_),h5&&l(_.username,gt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await et.auth(u.user,null,!1):f5&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,ed.getSuperUser)());j_&&(e.session.update=function(f){if(!c){c=(0,bL.v4)();let S=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",S):d?.headers?.set&&d.headers.set("Set-Cookie",S)}return f.id=c,OL.put(f)},e.login=async function(f,h){e.user=await et.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Sn.loginPath?(d.status=302,d.headers.set("Location",Sn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new Bn);for(let h=0;h<E;){let S=o[h++];f.set(S,o[h++])}}return o=null,d}function S5({server:e,port:t}){e.request(IL,{port:t||"all"}),NL||(NL=!0,setInterval(()=>{Co=new Map},Ur.get(gt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),yL.user.addListener(()=>{Co=new Map}))}async function p5(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 T5(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var ed,td,bL,Ur,gt,rd,yL,AL,l5,_5,d5,E5,OL,j_,f5,h5,m5,Co,NL,sd=pe(()=>{ed=U(Ir());Br();Sa();td=U(Tc());Ee();bL=require("uuid"),Ur=U(Q()),gt=U(A()),rd=U(x());Uo();yL=U(Qa());Z_();AL=(0,rd.loggerWithTag)("auth-event");Ur.initSync();l5=Ur.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),_5=Ur.get(gt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),d5=Ur.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),E5=Ur.get(gt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);et.auth=ed.findAndValidateUser;OL=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),j_=Ur.get(gt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,f5=Ur.get(gt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,h5=Ur.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,m5=Ur.get(gt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Co=new Map;a(IL,"authentication");a(S5,"start");a(p5,"login");a(T5,"logout")});var PL=m((Wle,ML)=>{"use strict";var me=require("joi"),wL=require("fs-extra"),CL=require("path"),en=Be(),UL=Q(),DL=A(),LL=x(),{hdb_errors:R5}=W(),{HDB_ERROR_MSGS:Dt}=R5,js=/^[a-zA-Z0-9-_]+$/;ML.exports={getDropCustomFunctionValidator:A5,setCustomFunctionValidator:O5,addComponentValidator:I5,dropCustomFunctionProjectValidator:w5,packageComponentValidator:C5,deployComponentValidator:U5,setComponentFileValidator:N5,getComponentFileValidator:y5,dropComponentFileValidator:b5};function nd(e,t,r){try{let s=UL.get(DL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=CL.join(s,t);return wL.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return LL.error(s),r.message(Dt.VALIDATION_ERR)}}a(nd,"checkProjectExists");function Gc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Gc,"checkFilePath");function g5(e,t,r,s){try{let n=UL.get(DL.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=CL.join(n,e,t,r+".js");return wL.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return LL.error(n),s.message(Dt.VALIDATION_ERR)}}a(g5,"checkFileExists");function A5(e){let t=me.object({project:me.string().pattern(js).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().pattern(js).custom(g5.bind(null,e.project,e.type)).custom(Gc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return en.validateBySchema(e,t)}a(A5,"getDropCustomFunctionValidator");function O5(e){let t=me.object({project:me.string().pattern(js).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().custom(Gc).required(),function_content:me.string().required()});return en.validateBySchema(e,t)}a(O5,"setCustomFunctionValidator");function N5(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(Gc).required(),payload:me.string().allow("").optional(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return en.validateBySchema(e,t)}a(N5,"setComponentFileValidator");function b5(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(Gc).optional()});return en.validateBySchema(e,t)}a(b5,"dropComponentFileValidator");function y5(e){let t=me.object({project:me.string().required(),file:me.string().custom(Gc).required(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return en.validateBySchema(e,t)}a(y5,"getComponentFileValidator");function I5(e){let t=me.object({project:me.string().pattern(js).custom(nd.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return en.validateBySchema(e,t)}a(I5,"addComponentValidator");function w5(e){let t=me.object({project:me.string().pattern(js).custom(nd.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return en.validateBySchema(e,t)}a(w5,"dropCustomFunctionProjectValidator");function C5(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:me.boolean()});return en.validateBySchema(e,t)}a(C5,"packageComponentValidator");function U5(e){let t=me.object({project:me.string().pattern(js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:me.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:me.string().optional()});return en.validateBySchema(e,t)}a(U5,"deployComponentValidator")});var Ip=m((zle,HL)=>{"use strict";var ye=require("fs-extra"),Np=require("fast-glob"),Se=require("path"),vL=require("tar-fs"),D5=require("uuid").v4,bp=require("normalize-path"),gs=PL(),At=x(),we=A(),Ke=Q(),id=gr(),L5=V(),{PACKAGE_ROOT:M5}=A(),{handleHDBError:ot,hdb_errors:P5}=W(),{HDB_ERROR_MSGS:Hn,HTTP_STATUS_CODES:at}=P5,v5=Se.join(M5,"application-template"),yp=Se.join(Ke.get(we.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function BL(){let e=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw ot(new Error,Hn.NOT_ENABLED,at.BAD_REQUEST,void 0,void 0,!0)}a(BL,"isCFEnabled");function B5(){At.trace("getting custom api status");let e={};try{e={is_enabled:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw ot(new Error,Hn.FUNCTION_STATUS,at.INTERNAL_SERVER_ERROR,At.ERR,t)}return e}a(B5,"customFunctionsStatus");function H5(){At.trace("getting custom api endpoints");let e={},t=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{Np.sync(bp(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:Np.sync(bp(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:Np.sync(bp(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw ot(new Error,Hn.GET_FUNCTIONS,at.INTERNAL_SERVER_ERROR,At.ERR,r)}return e}a(H5,"getCustomFunctions");function q5(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=gs.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("getting custom api endpoint file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw ot(new Error,Hn.GET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(q5,"getCustomFunction");function F5(e){BL(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=gs.setCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("setting custom function file content");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return ye.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw ot(new Error,Hn.SET_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,c)}}a(F5,"setCustomFunction");function G5(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=gs.getDropCustomFunctionValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function file");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return ye.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw ot(new Error,Hn.DROP_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,o)}}a(G5,"dropCustomFunction");function x5(e){BL(),e.project&&(e.project=Se.parse(e.project).name);let t=gs.addComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("adding component");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return ye.mkdirSync(n,{recursive:!0}),ye.copySync(v5,n),`Successfully added project: ${s}`}catch(n){throw ot(new Error,Hn.ADD_FUNCTION,at.INTERNAL_SERVER_ERROR,At.ERR,n)}}a(x5,"addComponent");function k5(e){e.project&&(e.project=Se.parse(e.project).name);let t=gs.dropCustomFunctionProjectValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);At.trace("dropping custom function project");let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ke.get(we.CONFIG_PARAMS.APPS);if(!L5.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 id.updateConfigValue(we.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw ot(new Error,Hn.DROP_FUNCTION_PROJECT,at.INTERNAL_SERVER_ERROR,At.ERR,i)}}a(k5,"dropCustomFunctionProject");async function V5(e){e.project&&(e.project=Se.parse(e.project).name);let t=gs.packageComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;At.trace("packaging component",s);let n;try{n=await ye.realpath(Se.join(r,s))}catch(u){if(u.code!==we.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ye.realpath(Se.join(Ke.get(we.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===we.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ye.ensureDir(yp);let i=Se.join(yp,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),vL.pack(n,o).pipe(ye.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ye.readFileSync(i,{encoding:"base64"});return await ye.remove(i),{project:s,payload:c}}a(V5,"packageComponent");async function $5(e){e.project&&(e.project=Se.parse(e.project).name);let t=gs.deployComponentValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=Ke.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(At.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=Se.join(r,s);i="file:"+o,await ye.ensureDir(o);let c,u;do c=Se.join(yp,D5()+".tar"),u=await ye.pathExists(c);while(u);await ye.outputFile(c,n,{encoding:"base64"});let l=ye.createReadStream(c);l.pipe(vL.extract(o)),await new Promise(_=>l.on("end",_)),await ye.unlink(c)}return id.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a($5,"deployComponent");async function Y5(){let e=id.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 ye.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=Se.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await ye.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(Y5,"getComponents");async function K5(e){let t=gs.getComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await ye.readFile(Se.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===we.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(K5,"getComponentFile");async function W5(e){let t=gs.setComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await ye.ensureFile(s),await ye.outputFile(s,e.payload,r)):await ye.ensureDir(s),"Successfully set component: "+e.file}a(W5,"setComponentFile");async function Q5(e){let t=gs.dropComponentFileValidator(e);if(t)throw ot(t,t.message,at.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(Ke.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await ye.pathExists(s)&&await ye.remove(s),id.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(Q5,"dropComponent");HL.exports={customFunctionsStatus:B5,getCustomFunctions:H5,getCustomFunction:q5,setCustomFunction:F5,dropCustomFunction:G5,addComponent:x5,dropCustomFunctionProject:k5,packageComponent:V5,deployComponent:$5,getComponents:Y5,getComponentFile:K5,setComponentFile:W5,dropComponent:Q5}});var wp=m((Xle,FL)=>{"use strict";var As=require("joi"),qL=Be();FL.exports={readTransactionLogValidator:z5,deleteTransactionLogsBeforeValidator:J5};function z5(e){let t=As.object({schema:As.string().required(),table:As.string().required(),from:As.date().timestamp(),to:As.date().timestamp(),limit:As.number().min(1)});return qL.validateBySchema(e,t)}a(z5,"readTransactionLogValidator");function J5(e){let t=As.object({schema:As.string().required(),table:As.string().required(),timestamp:As.date().timestamp().required()});return qL.validateBySchema(e,t)}a(J5,"deleteTransactionLogsBeforeValidator")});var ad=m((jle,$L)=>{"use strict";var Cp=A(),od=it(),GL=V(),xL=Q(),kL=Ws(),{handleHDBError:Do,hdb_errors:X5}=W(),{HTTP_STATUS_CODES:Lo}=X5,{readTransactionLogValidator:Z5,deleteTransactionLogsBeforeValidator:j5}=wp(),VL="This operation relies on clustering and cannot run with it disable.",e8="Logs successfully deleted from transaction log.",t8="All logs successfully deleted from transaction log.";$L.exports={readTransactionLog:r8,deleteTransactionLogsBefore:s8};async function*r8(e){let t=Z5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!xL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,VL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=GL.checkSchemaTableExist(r,s);if(n)throw Do(new Error,n,Lo.NOT_FOUND,void 0,void 0,!0);let i=kL.createNatsTableStreamName(r,s),o=await od.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===Cp.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(r8,"readTransactionLog");async function s8(e){let t=j5(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST,void 0,void 0,!0);if(!xL.get(Cp.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Do(new Error,VL,Lo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=GL.checkSchemaTableExist(r,s);if(i)throw Do(new Error,i,Lo.NOT_FOUND,void 0,void 0,!0);let o=kL.createNatsTableStreamName(r,s),{jsm:c}=await od.getNATSReferences(),u=await od.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=e8,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=t8):d=(await od.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(s8,"deleteTransactionLogsBefore")});var _d=m((t_e,XL)=>{"use strict";var cd=require("joi"),ud=require("path"),YL=require("fs-extra"),{exec:n8}=require("child_process"),i8=require("util"),KL=i8.promisify(n8),xc=A(),{handleHDBError:Mo,hdb_errors:o8}=W(),{HTTP_STATUS_CODES:Po}=o8,Vc=Q(),a8=Be(),kc=x();Vc.initSync();var Up=Vc.get(xc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),WL="npm install --omit=dev --json",c8=`${WL} --dry-run`;XL.exports={installModules:d8,auditModules:E8,installAllRootModules:u8,uninstallRootModule:l8,linkHarperdb:_8};async function u8(e=!1){await ld(),await $c(e?"npm install --ignore-scripts":"npm install",Vc.get(xc.CONFIG_PARAMS.ROOTPATH))}a(u8,"installAllRootModules");async function l8(e){await $c(`npm uninstall ${e}`,Vc.get(xc.CONFIG_PARAMS.ROOTPATH))}a(l8,"uninstallRootModule");async function _8(){await ld(),await $c(`npm link ${xc.PACKAGE_ROOT}`,Vc.get(xc.CONFIG_PARAMS.ROOTPATH))}a(_8,"linkHarperdb");async function $c(e,t=void 0){let{stdout:r,stderr:s}=await KL(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return kc.trace(r,s),r.replace(`
11
+ `,"")}a($c,"runCommand");async function d8(e){kc.info(`starting installModules for request: ${e}`);let t=JL(e);if(t)throw Mo(t,t.message,Po.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?c8:WL;await ld(),await zL(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=ud.join(Up,u),_,d=null;try{let{stdout:E,stderr:f}=await KL(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=KL(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 xc.info(`finished installModules with response ${i}`),i}a(_8,"installModules");function KL(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(KL,"parseNPMStdErr");async function d8(e){xc.info(`starting auditModules for request: ${e}`);let t=QL(e);if(t)throw Do(t,t.message,Lo.BAD_REQUEST);let{projects:r}=e;await ld(),await WL(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=ud.join(Up,o);s[o]={npm_output:null,npm_error:null};try{let u=await Vc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=KL(u.stderr)}}return xc.info(`finished auditModules with response ${s}`),s}a(d8,"auditModules");async function ld(){try{return await Vc("npm -v"),!0}catch{throw Do(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Lo.BAD_REQUEST,void 0,void 0,!0)}}a(ld,"checkNPMInstalled");async function WL(e){if(!Array.isArray(e)||e.length===0)throw Do(new Error,"projects argument must be an array with at least 1 element",Lo.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=ud.join(Up,i.toString());if(!await VL.pathExists(o)){t.push(i);continue}let u=ud.join(o,"package.json");await VL.pathExists(u)||r.push(i)}if(t.length>0)throw Do(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Lo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Do(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Lo.BAD_REQUEST,void 0,void 0,!0)}a(WL,"checkProjectPaths");function QL(e){let t=cd.object({projects:cd.array().min(1).items(cd.string()).required(),dry_run:cd.boolean().default(!1)});return o8.validateBySchema(e,t)}a(QL,"modulesValidator")});var XL=m((r_e,JL)=>{"use strict";var Dp=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}};JL.exports=Dp});var jL=m((n_e,ZL)=>{"use strict";var Lp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};ZL.exports=Lp});var Pp=m((o_e,tM)=>{"use strict";var eM=XL(),E8=jL(),{HDB_ERROR_MSGS:f8}=rr(),Mp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=f8.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 eM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new E8(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 eM(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}};tM.exports=Mp});var hd=m((c_e,SM)=>{"use strict";var vp=Nr(),dd=Or(),Ur=d_(),Kc=si(),Bp=ci(),h8=Qm(),m8=gC(),Wc=br(),Ed=sS(),ct=x(),S8=oS(),p8=C_(),T8=xS(),R8=M_(),g8=kS(),A8=VS(),O8=KS(),N8=QS(),Hp=XS(),Xs=V(),b8=pD(),qp=rp(),nM=Tp(),Cr=A(),iM=pL(),y8=Oo(),oM=pc(),aM=(sd(),ee(qc)),cM=Tr(),fr=Ip(),I8=require("alasql"),uM=ad(),lM=_d(),_M=Pp(),{handleHDBError:Zt,hdb_errors:dM}=W(),{HDB_ERROR_MSGS:Ot,HTTP_STATUS_CODES:$c}=dM,M=new Map,EM="delete",Mn="insert",Zs="read",Ii="update",Yc="describe",rM=Kc.describeSchema.name,sM=Kc.describeTable.name,fM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},w8="catchup",C8="handleGetJob",U8="handleGetJobsByStartDate",fd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},D8=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],hM={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(vp.insert.name,new H(!1,[Mn]));M.set(vp.update.name,new H(!1,[Ii]));M.set(vp.upsert.name,new H(!1,[Mn,Ii]));M.set(dd.searchByConditions.name,new H(!1,[Zs]));M.set(dd.searchByHash.name,new H(!1,[Zs]));M.set(dd.searchByValue.name,new H(!1,[Zs]));M.set(dd.search.name,new H(!1,[Zs]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Mn]));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(Kc.describeSchema.name,new H(!1,[Zs]));M.set(Kc.describeTable.name,new H(!1,[Zs]));M.set(Bp.deleteRecord.name,new H(!1,[EM]));M.set(Wc.addUser.name,new H(!0,[]));M.set(Wc.alterUser.name,new H(!0,[]));M.set(Wc.dropUser.name,new H(!0,[]));M.set(Wc.listUsersExternal.name,new H(!0,[]));M.set(Ed.listRoles.name,new H(!0,[]));M.set(Ed.addRole.name,new H(!0,[]));M.set(Ed.alterRole.name,new H(!0,[]));M.set(Ed.dropRole.name,new H(!0,[]));M.set(S8.name,new H(!0,[]));M.set(p8.name,new H(!0,[]));M.set(T8.name,new H(!0,[]));M.set(R8.name,new H(!0,[]));M.set(g8.name,new H(!0,[]));M.set(A8.name,new H(!0,[]));M.set(Hp.setRoutes.name,new H(!0,[]));M.set(Hp.getRoutes.name,new H(!0,[]));M.set(Hp.deleteRoutes.name,new H(!0,[]));M.set(cM.setConfiguration.name,new H(!0,[]));M.set(O8.clusterStatus.name,new H(!0,[]));M.set(N8.name,new H(!0,[]));M.set(qp.getFingerprint.name,new H(!0,[]));M.set(qp.setLicense.name,new H(!0,[]));M.set(Bp.deleteFilesBefore.name,new H(!0,[]));M.set(Bp.deleteAuditLogsBefore.name,new H(!0,[]));M.set(nM.restart.name,new H(!0,[]));M.set(nM.restartService.name,new H(!0,[]));M.set(h8.name,new H(!0,[]));M.set(m8.name,new H(!0,[Zs]));M.set(y8.systemInformation.name,new H(!0,[]));M.set(cM.getConfiguration.name,new H(!0,[]));M.set(uM.readTransactionLog.name,new H(!0,[]));M.set(uM.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(lM.installModules.name,new H(!0,[]));M.set(lM.auditModules.name,new H(!0,[]));M.set(oM.createTokens.name,new H(!1,[]));M.set(oM.refreshOperationToken.name,new H(!1,[]));M.set(aM.login.name,new H(!1,[]));M.set(aM.logout.name,new H(!1,[]));M.set(fr.customFunctionsStatus.name,new H(!0,[]));M.set(fr.getCustomFunctions.name,new H(!0,[]));M.set(fr.getComponents.name,new H(!0,[]));M.set(fr.getComponentFile.name,new H(!0,[]));M.set(fr.setComponentFile.name,new H(!0,[]));M.set(fr.dropComponent.name,new H(!0,[]));M.set(fr.getCustomFunction.name,new H(!0,[]));M.set(fr.setCustomFunction.name,new H(!0,[]));M.set(fr.dropCustomFunction.name,new H(!0,[]));M.set(fr.addComponent.name,new H(!0,[]));M.set(fr.dropCustomFunctionProject.name,new H(!0,[]));M.set(fr.packageComponent.name,new H(!0,[]));M.set(fr.deployComponent.name,new H(!0,[]));M.set(qp.getRegistrationInfo.name,new H(!1,[]));M.set(Wc.userInfo.name,new H(!1,[]));M.set(Kc.describeAll.name,new H(!1,[]));M.set(C8,new H(!1,[]));M.set(U8,new H(!0,[]));M.set(w8,new H(!0,[]));M.set(fd.CSV_DATA_LOAD,new H(!1,[Mn,Ii]));M.set(fd.CSV_URL_LOAD,new H(!1,[Mn,Ii]));M.set(fd.CSV_FILE_LOAD,new H(!1,[Mn,Ii]));M.set(fd.IMPORT_FROM_S3,new H(!1,[Mn,Ii]));M.set(hM.EXPORT_TO_S3,new H(!0,[]));M.set(hM.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[EM]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[Zs]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Mn]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[Ii]));SM.exports={verifyPerms:M8,verifyPermsAst:L8,verifyBulkLoadAttributePerms:v8};function L8(e,t,r){if(Xs.isEmptyOrZeroLength(e))throw ct.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Xs.isEmptyOrZeroLength(t))throw ct.info("verify_perms_ast has an empty user parameter"),Zt(new Error);if(Xs.isEmptyOrZeroLength(r))throw ct.info("verify_perms_ast has a null operation parameter"),Zt(new Error);try{let s=new _M,n=new b8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ct.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&&fM[r])throw Zt(new Error,Ot.DROP_SYSTEM,$c.FORBIDDEN);if(c&&!u)return null;let l=iM.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof I8.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 _=mM(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),S=Gp(t.role.permission,E,d[f]);Fp(h,S,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Zt(s)}}a(L8,"verifyPermsAst");function M8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ct.info("null required parameter in verifyPerms"),Zt(new Error,Ot.DEFAULT_INVALID_REQUEST,$c.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 _M;if(Xs.isEmptyOrZeroLength(e.hdb_user.role)||Xs.isEmptyOrZeroLength(e.hdb_user.role.permission))return ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ot.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(_&&fM[r])throw Zt(new Error,Ot.DROP_SYSTEM,$c.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(D8.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=iM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===rM||r===sM){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ot.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===rM&&(!d[n]||!d[n][Yc]))return c.handleInvalidItem(Ot.SCHEMA_NOT_FOUND(n));if(r===sM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Yc]))return c.handleInvalidItem(Ot.TABLE_NOT_FOUND(n,i))}}let E=mM(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 S=[],T=d[n].tables[i];T[Cr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(O=>O[Cr.PERMS_CRUD_ENUM.READ]).forEach(O=>{S.push(O.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=S)}let f=P8(e),h=Gp(e.hdb_user.role.permission,n,i);return Fp(f,h,r,i,n,c,s),c.getPermsResponse()}a(M8,"verifyPerms");function mM(e,t,r,s,n){if(Xs.arrayHasEmptyValues([e,t,r]))throw ct.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 ct.info(`operation ${t} not found.`),Zt(new Error,Ot.OP_NOT_FOUND(t),$c.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ot.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Yc]===!1){s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Yc]===!1)s.addInvalidItem(Ot.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Xs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let S=f[h],T=d[S];(T==null||T===!1)&&(ct.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(S))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ot.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ct.error(f),ct.error(E),Zt(dM.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(mM,"hasPermissions");function Fp(e,t,r,s,n,i,o){if(!e||!t)throw ct.info("no attributes specified in checkAttributePerms."),Zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw ct.info(`no permissions found for ${r} in checkAttributePerms().`),Zt(new Error);if(Xs.isEmptyOrZeroLength(t))return ct.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[Yc]===!1){i.addInvalidItem(Ot.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!==Zs)throw Zt(new Error,Ot.SYSTEM_TIMESTAMP_PERMS_ERR,$c.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Fp,"checkAttributePerms");function P8(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){ct.info(r)}return t}a(P8,"getRecordAttributes");function Gp(e,t,r){let s=new Map;if(Xs.isEmpty(e))return ct.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{ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Gp,"getAttributePermissions");function v8(e,t,r,s,n,i,o){let c=new Set(i),u=Gp(e,s,n);Fp(c,u,t,n,s,o,r)}a(v8,"verifyBulkLoadAttributePerms")});var Sd=m((l_e,AM)=>{"use strict";AM.exports={evaluateSQL:Q8,processAST:gM,convertSQLToAST:RM,checkASTPermissions:TM};var B8=Nr(),pM=require("util"),H8=pM.callbackify(B8.insert),q8=Or().search,F8=Mw().update,G8=pM.callbackify(F8),x8=vw().convertDelete,Pn=require("alasql"),k8=hd(),md=x(),V8=yl(),$8=V(),Qc=A(),{hdb_errors:Y8,handleHDBError:xp}=W(),{HTTP_STATUS_CODES:kp}=Y8;V8(Pn);var K8=403,W8="There was a problem performing this insert. Please check the logs and try again.",Vp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Q8(e,t){let r=e.parsed_sql_object;if(!r){r=RM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Pn.yy.Insert?s=n.into.databaseid:n instanceof Pn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Pn.yy.Update||n instanceof Pn.yy.Delete?s=n.table.databaseid:md.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Pn.yy.Select)&&$8.isEmptyOrZeroLength(s))return t("No schema specified",null)}gM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Q8,"evaluateSQL");function TM(e,t){let r;try{r=k8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(TM,"checkASTPermissions");function RM(e){let t=new Vp;if(!e)throw xp(new Error,"The 'sql' parameter is missing from the request body",kp.BAD_REQUEST);try{let r=e.trim(),s=Pn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?xp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,kp.BAD_REQUEST):xp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",kp.BAD_REQUEST)}return t}a(RM,"convertSQLToAST");function gM(e,t,r){try{let s=z8;if(!e.bypass_auth&&!t.permissions_checked){let i=TM(e,t);if(i&&i.length>0)return r(K8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Qc.VALID_SQL_OPS_ENUM.SELECT:s=q8,n=t.ast.statements[0];break;case Qc.VALID_SQL_OPS_ENUM.INSERT:s=J8;break;case Qc.VALID_SQL_OPS_ENUM.UPDATE:s=G8;break;case Qc.VALID_SQL_OPS_ENUM.DELETE:s=x8;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(gM,"processAST");function z8(e,t){md.info(e),t("unknown sql statement")}a(z8,"nullFunction");function J8({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=X8(i,e.values)}catch(o){return r(o)}H8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){md.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(J8,"convertInsert");function X8(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]]=Pn.compile(`SELECT ${n.toString()} AS [${Qc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw md.error(r),new Error(W8)}}a(X8,"createDataObjects")});var $p=m((d_e,NM)=>{"use strict";var{S3:Z8,GetObjectCommand:j8}=require("@aws-sdk/client-s3");NM.exports={getFileStreamFromS3:e6,getS3AuthObj:OM};async function e6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await OM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new j8(r))).Body}a(e6,"getFileStreamFromS3");function OM(e,t,r){return new Z8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(OM,"getS3AuthObj")});var pd=m((f_e,PM)=>{"use strict";var IM=Or(),t6=Sd(),r6=$p(),{AsyncParser:s6,Transform:n6}=require("json2csv"),Jc=require("stream"),hr=V(),Yp=require("fs-extra"),i6=require("path"),Dr=x(),{promisify:wM}=require("util"),zc=V(),{handleHDBError:Xe,hdb_errors:o6}=W(),{HDB_ERROR_MSGS:jt,HTTP_STATUS_CODES:Ze}=o6,{streamAsJSON:a6}=Mm(),{Upload:c6}=require("@aws-sdk/lib-storage"),bM=["search_by_value","search_by_hash","sql"],yM=["json","csv"],CM="json",UM="csv",u6="Successfully exported JSON locally.",l6="Successfully exported CSV locally.",_6=1e3,d6=IM.searchByHash,E6=IM.searchByValue,f6=wM(t6.evaluateSQL),h6=wM(Jc.finished);PM.exports={export_to_s3:T6,export_local:m6,toCsvStream:DM};async function m6(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=LM(e);if(!hr.isEmpty(t))throw Dr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(hr.isEmpty(e.path))throw Dr.error(jt.MISSING_VALUE("path")),Xe(new Error,jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(hr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(i6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=hr.buildFolderPath(e.path,r);await S6(e.path);let n=await MM(e);return await p6(s,e.format,n)}a(m6,"export_local");async function S6(e){if(Dr.trace("in confirmPath"),hr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Yp.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),Xe(new Error,s,Ze.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),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(S6,"confirmPath");async function p6(e,t,r){if(Dr.trace("in saveToLocal"),zc.isEmptyOrZeroLength(e))throw Xe(new Error,jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(zc.isEmptyOrZeroLength(t))throw Xe(new Error,jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(zc.isEmpty(r))throw Xe(new Error,jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===CM){let s=Yp.createWriteStream(e);return a6(r).pipe(s),await h6(s),{message:u6,path:e}}else if(t===UM){let s=Yp.createWriteStream(e),n=Jc.Readable.from(r),i={},o={objectMode:!0};return await new s6(i,o).fromInput(n).toOutput(s).promise(!1),{message:l6,path:e}}throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(p6,"saveToLocal");async function T6(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=LM(e);if(!hr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await MM(e)}catch(u){throw Dr.error(u),u}let s,n=await r6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Jc.PassThrough;if(e.format===UM){i=e.s3.key+".csv";let u=DM(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===CM){i=e.s3.key+".json";let u=new Jc.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%_6===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,jt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new c6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(T6,"export_to_s3");function DM(e){let t=Jc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new n6(r,s);return t.pipe(n)}a(DM,"toCsvStream");function LM(e){if(Dr.trace("in exportCoreValidation"),hr.isEmpty(e.format))return"format missing";if(yM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${yM.join(", ")}`;let t=e.search_operation.operation;if(hr.isEmpty(t))return"search_operation.operation missing";if(bM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${bM.join(", ")}`}a(LM,"exportCoreValidation");async function MM(e){Dr.trace("in getRecords");let t,r;if(zc.isEmpty(e.search_operation)||zc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,jt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=E6;break;case"search_by_hash":t=d6;break;case"sql":t=f6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(MM,"getRecords")});var GM={};xe(GM,{contentTypes:()=>qM,findBestSerializer:()=>Ad,getDeserializer:()=>Mo,registerContentHandlers:()=>Wp,serialize:()=>Qp,serializeMessage:()=>Qs});function R6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Wp(e){e.register(A6,{serializers:[{regex:/^application\/json$/,serializer:Td.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new wi.EncoderStream(Xc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?gd.Readable.from((0,Rs.encodeIter)(t,Xc)):(0,Rs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Kp.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,wi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Ad(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 Qp(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=Ad(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,Rd.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Rd.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Qs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=Ad(t);return r=t.serialize=s.serializer.serialize,r(e)}function O6(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 Mo(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||BM(e,s);return o=>O6(o).then(i)}return Et.get(e)?.deserialize||BM(e,s)}function BM(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 N6(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 Td,Kp,Rs,wi,Rd,gd,HM,Xc,Et,qM,vM,FM,g6,A6,wo=Se(()=>{Td=C(Mm()),Kp=C(pd()),Rs=require("msgpackr"),wi=require("cbor-x"),Rd=require("zlib"),gd=require("stream");Pr();HM=require("../index"),Xc={useRecords:!1,useToJSON:!0};et.contentType=function(e,t){Et.set(e,t)};Et=new Map,qM=Et;(0,HM._assignPackageExport)("contentTypes",qM);Et.set("application/json",{serializeStream:Td.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});vM=new wi.Encoder(Xc);Et.set("application/cbor",{serializeStream(e){return new wi.EncoderStream(Xc).end(e)},serialize:vM.encode,deserialize:vM.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?gd.Readable.from((0,Rs.encodeIter)(e,Xc)):(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,Kp.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 gd.Readable.from(N6(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=QL(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 kc.info(`finished installModules with response ${i}`),i}a(d8,"installModules");function QL(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(QL,"parseNPMStdErr");async function E8(e){kc.info(`starting auditModules for request: ${e}`);let t=JL(e);if(t)throw Mo(t,t.message,Po.BAD_REQUEST);let{projects:r}=e;await ld(),await zL(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=ud.join(Up,o);s[o]={npm_output:null,npm_error:null};try{let u=await $c("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=QL(u.stderr)}}return kc.info(`finished auditModules with response ${s}`),s}a(E8,"auditModules");async function ld(){try{return await $c("npm -v"),!0}catch{throw Mo(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Po.BAD_REQUEST,void 0,void 0,!0)}}a(ld,"checkNPMInstalled");async function zL(e){if(!Array.isArray(e)||e.length===0)throw Mo(new Error,"projects argument must be an array with at least 1 element",Po.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=ud.join(Up,i.toString());if(!await YL.pathExists(o)){t.push(i);continue}let u=ud.join(o,"package.json");await YL.pathExists(u)||r.push(i)}if(t.length>0)throw Mo(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Po.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Mo(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Po.BAD_REQUEST,void 0,void 0,!0)}a(zL,"checkProjectPaths");function JL(e){let t=cd.object({projects:cd.array().min(1).items(cd.string()).required(),dry_run:cd.boolean().default(!1)});return a8.validateBySchema(e,t)}a(JL,"modulesValidator")});var jL=m((s_e,ZL)=>{"use strict";var Dp=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}};ZL.exports=Dp});var tM=m((i_e,eM)=>{"use strict";var Lp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};eM.exports=Lp});var Pp=m((a_e,sM)=>{"use strict";var rM=jL(),f8=tM(),{HDB_ERROR_MSGS:h8}=nr(),Mp=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=h8.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 rM(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new f8(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 rM(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}};sM.exports=Mp});var hd=m((u_e,TM)=>{"use strict";var vp=yr(),dd=br(),Lr=d_(),Wc=ai(),Bp=di(),m8=Qm(),S8=OC(),Qc=Ir(),Ed=sS(),ct=x(),p8=oS(),T8=C_(),R8=xS(),g8=M_(),A8=kS(),O8=VS(),N8=KS(),b8=QS(),Hp=XS(),tn=V(),y8=RD(),qp=rp(),oM=Tp(),Dr=A(),aM=RL(),I8=bo(),cM=Tc(),uM=(sd(),ee(Fc)),lM=gr(),mr=Ip(),w8=require("alasql"),_M=ad(),dM=_d(),EM=Pp(),{handleHDBError:jt,hdb_errors:fM}=W(),{HDB_ERROR_MSGS:Ot,HTTP_STATUS_CODES:Yc}=fM,v=new Map,hM="delete",qn="insert",rn="read",Ui="update",Kc="describe",nM=Wc.describeSchema.name,iM=Wc.describeTable.name,mM={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},C8="catchup",U8="handleGetJob",D8="handleGetJobsByStartDate",fd={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},L8=[Lr.createTable.name,Lr.createAttribute.name,Lr.dropTable.name,Lr.dropAttribute.name],SM={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};v.set(vp.insert.name,new F(!1,[qn]));v.set(vp.update.name,new F(!1,[Ui]));v.set(vp.upsert.name,new F(!1,[qn,Ui]));v.set(dd.searchByConditions.name,new F(!1,[rn]));v.set(dd.searchByHash.name,new F(!1,[rn]));v.set(dd.searchByValue.name,new F(!1,[rn]));v.set(dd.search.name,new F(!1,[rn]));v.set(Lr.createSchema.name,new F(!0,[]));v.set(Lr.createTable.name,new F(!0,[]));v.set(Lr.createAttribute.name,new F(!1,[qn]));v.set(Lr.dropSchema.name,new F(!0,[]));v.set(Lr.dropTable.name,new F(!0,[]));v.set(Lr.dropAttribute.name,new F(!0,[]));v.set(Wc.describeSchema.name,new F(!1,[rn]));v.set(Wc.describeTable.name,new F(!1,[rn]));v.set(Bp.deleteRecord.name,new F(!1,[hM]));v.set(Qc.addUser.name,new F(!0,[]));v.set(Qc.alterUser.name,new F(!0,[]));v.set(Qc.dropUser.name,new F(!0,[]));v.set(Qc.listUsersExternal.name,new F(!0,[]));v.set(Ed.listRoles.name,new F(!0,[]));v.set(Ed.addRole.name,new F(!0,[]));v.set(Ed.alterRole.name,new F(!0,[]));v.set(Ed.dropRole.name,new F(!0,[]));v.set(p8.name,new F(!0,[]));v.set(T8.name,new F(!0,[]));v.set(R8.name,new F(!0,[]));v.set(g8.name,new F(!0,[]));v.set(A8.name,new F(!0,[]));v.set(O8.name,new F(!0,[]));v.set(Hp.setRoutes.name,new F(!0,[]));v.set(Hp.getRoutes.name,new F(!0,[]));v.set(Hp.deleteRoutes.name,new F(!0,[]));v.set(lM.setConfiguration.name,new F(!0,[]));v.set(N8.clusterStatus.name,new F(!0,[]));v.set(b8.name,new F(!0,[]));v.set(qp.getFingerprint.name,new F(!0,[]));v.set(qp.setLicense.name,new F(!0,[]));v.set(Bp.deleteFilesBefore.name,new F(!0,[]));v.set(Bp.deleteAuditLogsBefore.name,new F(!0,[]));v.set(oM.restart.name,new F(!0,[]));v.set(oM.restartService.name,new F(!0,[]));v.set(m8.name,new F(!0,[]));v.set(S8.name,new F(!0,[rn]));v.set(I8.systemInformation.name,new F(!0,[]));v.set(lM.getConfiguration.name,new F(!0,[]));v.set(_M.readTransactionLog.name,new F(!0,[]));v.set(_M.deleteTransactionLogsBefore.name,new F(!0,[]));v.set(dM.installModules.name,new F(!0,[]));v.set(dM.auditModules.name,new F(!0,[]));v.set(cM.createTokens.name,new F(!1,[]));v.set(cM.refreshOperationToken.name,new F(!1,[]));v.set(uM.login.name,new F(!1,[]));v.set(uM.logout.name,new F(!1,[]));v.set(mr.customFunctionsStatus.name,new F(!0,[]));v.set(mr.getCustomFunctions.name,new F(!0,[]));v.set(mr.getComponents.name,new F(!0,[]));v.set(mr.getComponentFile.name,new F(!0,[]));v.set(mr.setComponentFile.name,new F(!0,[]));v.set(mr.dropComponent.name,new F(!0,[]));v.set(mr.getCustomFunction.name,new F(!0,[]));v.set(mr.setCustomFunction.name,new F(!0,[]));v.set(mr.dropCustomFunction.name,new F(!0,[]));v.set(mr.addComponent.name,new F(!0,[]));v.set(mr.dropCustomFunctionProject.name,new F(!0,[]));v.set(mr.packageComponent.name,new F(!0,[]));v.set(mr.deployComponent.name,new F(!0,[]));v.set(qp.getRegistrationInfo.name,new F(!1,[]));v.set(Qc.userInfo.name,new F(!1,[]));v.set(Wc.describeAll.name,new F(!1,[]));v.set(U8,new F(!1,[]));v.set(D8,new F(!0,[]));v.set(C8,new F(!0,[]));v.set(fd.CSV_DATA_LOAD,new F(!1,[qn,Ui]));v.set(fd.CSV_URL_LOAD,new F(!1,[qn,Ui]));v.set(fd.CSV_FILE_LOAD,new F(!1,[qn,Ui]));v.set(fd.IMPORT_FROM_S3,new F(!1,[qn,Ui]));v.set(SM.EXPORT_TO_S3,new F(!0,[]));v.set(SM.EXPORT_LOCAL,new F(!0,[]));v.set(Dr.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[hM]));v.set(Dr.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[rn]));v.set(Dr.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[qn]));v.set(Dr.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[Ui]));TM.exports={verifyPerms:P8,verifyPermsAst:M8,verifyBulkLoadAttributePerms:B8};function M8(e,t,r){if(tn.isEmptyOrZeroLength(e))throw ct.info("verify_perms_ast has an empty user parameter"),jt(new Error);if(tn.isEmptyOrZeroLength(t))throw ct.info("verify_perms_ast has an empty user parameter"),jt(new Error);if(tn.isEmptyOrZeroLength(r))throw ct.info("verify_perms_ast has a null operation parameter"),jt(new Error);try{let s=new EM,n=new y8(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw ct.info("No schemas defined in verifyPermsAst(), will not continue."),jt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&mM[r])throw jt(new Error,Ot.DROP_SYSTEM,Yc.FORBIDDEN);if(c&&!u)return null;let l=aM.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof w8.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 _=pM(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),S=Gp(t.role.permission,E,d[f]);Fp(h,S,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw jt(s)}}a(M8,"verifyPermsAst");function P8(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw ct.info("null required parameter in verifyPerms"),jt(new Error,Ot.DEFAULT_INVALID_REQUEST,Yc.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 EM;if(tn.isEmptyOrZeroLength(e.hdb_user.role)||tn.isEmptyOrZeroLength(e.hdb_user.role.permission))return ct.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(Ot.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(Dr.SYSTEM_SCHEMA_NAME)||n===Dr.SYSTEM_SCHEMA_NAME;if(_&&mM[r])throw jt(new Error,Ot.DROP_SYSTEM,Yc.FORBIDDEN);if(u&&!_||l===!0&&(r===Lr.createSchema.name||r===Lr.dropSchema.name))return null;if(L8.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=aM.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===nM||r===iM){if(n===Dr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(Ot.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===nM&&(!d[n]||!d[n][Kc]))return c.handleInvalidItem(Ot.SCHEMA_NOT_FOUND(n));if(r===iM&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Kc]))return c.handleInvalidItem(Ot.TABLE_NOT_FOUND(n,i))}}let E=pM(e.hdb_user,r,o,c,s);if(E)return E;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Dr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let S=[],T=d[n].tables[i];T[Dr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(O=>O[Dr.PERMS_CRUD_ENUM.READ]).forEach(O=>{S.push(O.attribute_name)}):S=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=S)}let f=v8(e),h=Gp(e.hdb_user.role.permission,n,i);return Fp(f,h,r,i,n,c,s),c.getPermsResponse()}a(P8,"verifyPerms");function pM(e,t,r,s,n){if(tn.arrayHasEmptyValues([e,t,r]))throw ct.info("hasPermissions has an invalid parameter"),jt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw ct.info(`operation ${t} not found.`),jt(new Error,Ot.OP_NOT_FOUND(t),Yc.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return ct.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(Ot.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Kc]===!1){s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(Ot.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Kc]===!1)s.addInvalidItem(Ot.TABLE_NOT_FOUND(u,_));else try{let E=[],f=v.get(t).perms;!tn.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let S=f[h],T=d[S];(T==null||T===!1)&&(ct.info(`Required ${S} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(S))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=Ot.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw ct.error(f),ct.error(E),jt(fM.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(pM,"hasPermissions");function Fp(e,t,r,s,n,i,o){if(!e||!t)throw ct.info("no attributes specified in checkAttributePerms."),jt(new Error);let c=v.get(r).perms;if(!c||c==="")throw ct.info(`no permissions found for ${r} in checkAttributePerms().`),jt(new Error);if(tn.isEmptyOrZeroLength(t))return ct.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[Kc]===!1){i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Dr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==rn)throw jt(new Error,Ot.SYSTEM_TIMESTAMP_PERMS_ERR,Yc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(Ot.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(Fp,"checkAttributePerms");function v8(e){let t=new Set;try{if(e.action)return t;if(e.operation===Dr.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){ct.info(r)}return t}a(v8,"getRecordAttributes");function Gp(e,t,r){let s=new Map;if(tn.isEmpty(e))return ct.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{ct.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(Gp,"getAttributePermissions");function B8(e,t,r,s,n,i,o){let c=new Set(i),u=Gp(e,s,n);Fp(c,u,t,n,s,o,r)}a(B8,"verifyBulkLoadAttributePerms")});var Sd=m((__e,NM)=>{"use strict";NM.exports={evaluateSQL:z8,processAST:OM,convertSQLToAST:AM,checkASTPermissions:gM};var H8=yr(),RM=require("util"),q8=RM.callbackify(H8.insert),F8=br().search,G8=vw().update,x8=RM.callbackify(G8),k8=Hw().convertDelete,Fn=require("alasql"),V8=hd(),md=x(),$8=yl(),Y8=V(),zc=A(),{hdb_errors:K8,handleHDBError:xp}=W(),{HTTP_STATUS_CODES:kp}=K8;$8(Fn);var W8=403,Q8="There was a problem performing this insert. Please check the logs and try again.",Vp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function z8(e,t){let r=e.parsed_sql_object;if(!r){r=AM(e.sql);let s,n=r.ast.statements[0];if(n instanceof Fn.yy.Insert?s=n.into.databaseid:n instanceof Fn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Fn.yy.Update||n instanceof Fn.yy.Delete?s=n.table.databaseid:md.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Fn.yy.Select)&&Y8.isEmptyOrZeroLength(s))return t("No schema specified",null)}OM(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(z8,"evaluateSQL");function gM(e,t){let r;try{r=V8.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(gM,"checkASTPermissions");function AM(e){let t=new Vp;if(!e)throw xp(new Error,"The 'sql' parameter is missing from the request body",kp.BAD_REQUEST);try{let r=e.trim(),s=Fn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?xp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,kp.BAD_REQUEST):xp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",kp.BAD_REQUEST)}return t}a(AM,"convertSQLToAST");function OM(e,t,r){try{let s=J8;if(!e.bypass_auth&&!t.permissions_checked){let i=gM(e,t);if(i&&i.length>0)return r(W8,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case zc.VALID_SQL_OPS_ENUM.SELECT:s=F8,n=t.ast.statements[0];break;case zc.VALID_SQL_OPS_ENUM.INSERT:s=X8;break;case zc.VALID_SQL_OPS_ENUM.UPDATE:s=x8;break;case zc.VALID_SQL_OPS_ENUM.DELETE:s=k8;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(OM,"processAST");function J8(e,t){md.info(e),t("unknown sql statement")}a(J8,"nullFunction");function X8({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=Z8(i,e.values)}catch(o){return r(o)}q8(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){md.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(X8,"convertInsert");function Z8(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]]=Fn.compile(`SELECT ${n.toString()} AS [${zc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw md.error(r),new Error(Q8)}}a(Z8,"createDataObjects")});var $p=m((E_e,yM)=>{"use strict";var{S3:j8,GetObjectCommand:e6}=require("@aws-sdk/client-s3");yM.exports={getFileStreamFromS3:t6,getS3AuthObj:bM};async function t6(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await bM(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new e6(r))).Body}a(t6,"getFileStreamFromS3");function bM(e,t,r){return new j8({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(bM,"getS3AuthObj")});var pd=m((h_e,BM)=>{"use strict";var CM=br(),r6=Sd(),s6=$p(),{AsyncParser:n6,Transform:i6}=require("json2csv"),Xc=require("stream"),Sr=V(),Yp=require("fs-extra"),o6=require("path"),Mr=x(),{promisify:UM}=require("util"),Jc=V(),{handleHDBError:Ze,hdb_errors:a6}=W(),{HDB_ERROR_MSGS:er,HTTP_STATUS_CODES:je}=a6,{streamAsJSON:c6}=Mm(),{Upload:u6}=require("@aws-sdk/lib-storage"),IM=["search_by_value","search_by_hash","sql"],wM=["json","csv"],DM="json",LM="csv",l6="Successfully exported JSON locally.",_6="Successfully exported CSV locally.",d6=1e3,E6=CM.searchByHash,f6=CM.searchByValue,h6=UM(r6.evaluateSQL),m6=UM(Xc.finished);BM.exports={export_to_s3:R6,export_local:S6,toCsvStream:MM};async function S6(e){Mr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=PM(e);if(!Sr.isEmpty(t))throw Mr.error(t),Ze(new Error,t,je.BAD_REQUEST,void 0,void 0,!0);if(Sr.isEmpty(e.path))throw Mr.error(er.MISSING_VALUE("path")),Ze(new Error,er.MISSING_VALUE("path"),je.BAD_REQUEST,void 0,void 0,!0);let r=(Sr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(o6.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Sr.buildFolderPath(e.path,r);await p6(e.path);let n=await vM(e);return await T6(s,e.format,n)}a(S6,"export_local");async function p6(e){if(Mr.trace("in confirmPath"),Sr.isEmptyOrZeroLength(e))throw Ze(new Error,`Invalid path: ${e}`,je.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await Yp.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,Mr.error(s),Ze(new Error,s,je.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 Mr.error(r),Ze(new Error,r,je.BAD_REQUEST,void 0,void 0,!0)}return!0}a(p6,"confirmPath");async function T6(e,t,r){if(Mr.trace("in saveToLocal"),Jc.isEmptyOrZeroLength(e))throw Ze(new Error,er.INVALID_VALUE("file_path"),je.BAD_REQUEST,void 0,void 0,!0);if(Jc.isEmptyOrZeroLength(t))throw Ze(new Error,er.INVALID_VALUE("Source format"),je.BAD_REQUEST,void 0,void 0,!0);if(Jc.isEmpty(r))throw Ze(new Error,er.NOT_FOUND("Data"),je.BAD_REQUEST,void 0,void 0,!0);if(t===DM){let s=Yp.createWriteStream(e);return c6(r).pipe(s),await m6(s),{message:l6,path:e}}else if(t===LM){let s=Yp.createWriteStream(e),n=Xc.Readable.from(r),i={},o={objectMode:!0};return await new n6(i,o).fromInput(n).toOutput(s).promise(!1),{message:_6,path:e}}throw Ze(new Error,er.INVALID_VALUE("format"),je.BAD_REQUEST)}a(T6,"saveToLocal");async function R6(e){if(!e.s3||Object.keys(e.s3).length===0)throw Ze(new Error,er.MISSING_VALUE("S3 object"),je.BAD_REQUEST);if(Sr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Ze(new Error,er.MISSING_VALUE("aws_access_key_id"),je.BAD_REQUEST);if(Sr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Ze(new Error,er.MISSING_VALUE("aws_secret_access_key"),je.BAD_REQUEST);if(Sr.isEmptyOrZeroLength(e.s3.bucket))throw Ze(new Error,er.MISSING_VALUE("bucket"),je.BAD_REQUEST);if(Sr.isEmptyOrZeroLength(e.s3.key))throw Ze(new Error,er.MISSING_VALUE("key"),je.BAD_REQUEST);if(Sr.isEmptyOrZeroLength(e.s3.region))throw Ze(new Error,er.MISSING_VALUE("region"),je.BAD_REQUEST);let t=PM(e);if(!Sr.isEmpty(t))throw Ze(new Error,t,je.BAD_REQUEST);Mr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await vM(e)}catch(u){throw Mr.error(u),u}let s,n=await s6.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Xc.PassThrough;if(e.format===LM){i=e.s3.key+".csv";let u=MM(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===DM){i=e.s3.key+".json";let u=new Xc.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%d6===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Ze(new Error,er.INVALID_VALUE("format"),je.BAD_REQUEST);return new u6({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(R6,"export_to_s3");function MM(e){let t=Xc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new i6(r,s);return t.pipe(n)}a(MM,"toCsvStream");function PM(e){if(Mr.trace("in exportCoreValidation"),Sr.isEmpty(e.format))return"format missing";if(wM.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${wM.join(", ")}`;let t=e.search_operation.operation;if(Sr.isEmpty(t))return"search_operation.operation missing";if(IM.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${IM.join(", ")}`}a(PM,"exportCoreValidation");async function vM(e){Mr.trace("in getRecords");let t,r;if(Jc.isEmpty(e.search_operation)||Jc.isEmptyOrZeroLength(e.search_operation.operation))throw Ze(new Error,er.INVALID_VALUE("Search operation"),je.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=f6;break;case"search_by_hash":t=E6;break;case"sql":t=h6;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Mr.error(r),Ze(new Error,r,je.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(vM,"getRecords")});var kM={};ke(kM,{contentTypes:()=>GM,findBestSerializer:()=>Ad,getDeserializer:()=>vo,registerContentHandlers:()=>Wp,serialize:()=>Qp,serializeMessage:()=>Zs});function g6(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function Wp(e){e.register(O6,{serializers:[{regex:/^application\/json$/,serializer:Td.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Di.EncoderStream(Zc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?gd.Readable.from((0,Os.encodeIter)(t,Zc)):(0,Os.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Kp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Os.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Di.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function Ad(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 Qp(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=Ad(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,Rd.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Rd.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=Ad(t);return r=t.serialize=s.serializer.serialize,r(e)}function N6(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 vo(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||qM(e,s);return o=>N6(o).then(i)}return Et.get(e)?.deserialize||qM(e,s)}function qM(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 b6(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 Td,Kp,Os,Di,Rd,gd,FM,Zc,Et,GM,HM,xM,A6,O6,Uo=pe(()=>{Td=U(Mm()),Kp=U(pd()),Os=require("msgpackr"),Di=require("cbor-x"),Rd=require("zlib"),gd=require("stream");Br();FM=require("../index"),Zc={useRecords:!1,useToJSON:!0};et.contentType=function(e,t){Et.set(e,t)};Et=new Map,GM=Et;(0,FM._assignPackageExport)("contentTypes",GM);Et.set("application/json",{serializeStream:Td.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});HM=new Di.Encoder(Zc);Et.set("application/cbor",{serializeStream(e){return new Di.EncoderStream(Zc).end(e)},serialize:HM.encode,deserialize:HM.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?gd.Readable.from((0,Os.encodeIter)(e,Zc)):(0,Os.pack)(e)},serialize:Os.pack,deserialize:Os.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Kp.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 gd.Readable.from(b6(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});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()}});FM={type:"application/json",serializeStream:Td.streamAsJSON,serialize:JSON.stringify,deserialize:R6,q:.8};Et.set("*/*",FM);Et.set("",FM);a(R6,"tryJSONParse");a(Wp,"registerContentHandlers");g6=require("fastify-plugin"),A6=g6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Ad(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Ad,"findBestSerializer");a(Qp,"serialize");a(Qs,"serializeMessage");a(O6,"streamToBuffer");a(Mo,"getDeserializer");a(BM,"deserializerUnknownType");a(N6,"transformIterable")});var Xp={};xe(Xp,{start:()=>I6});async function y6(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&$u(e);let s=performance.now(),n,i=new yi;try{e.responseHeaders=i;let o=e.url.slice(1),c=Jp.getMatch(o);if(!c)return t(e);e.handlerPath=c.path;let u={url:c.relativeURL},l=c.Resource,_=await Ke(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Mo(e.headers["content-type"],!0)(e.body)}catch(S){throw new Zc.ClientError(S,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 Zc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Zc.ServerError(`Method ${r} is not recognized`,501)}}),d=200,E;if(_==null)d=r==="GET"||r==="HEAD"?404:204;else if(E=e?.lastModified){b6[0]=E;let S=String.fromCharCode(34,(Nt[0]&63)+62,(Nt[0]>>6)+(Nt[1]<<2&63)+62,(Nt[1]>>4)+(Nt[2]<<4&63)+62,(Nt[2]>>2)+62,(Nt[3]&63)+62,(Nt[3]>>6)+(Nt[4]<<2&63)+62,(Nt[4]>>4)+(Nt[5]<<4&63)+62,(Nt[5]>>2)+62,(Nt[6]&63)+62,(Nt[6]>>6)+(Nt[7]<<2&63)+62,34),T=e.headers["if-none-match"];T&&S==T?(_?.onDone&&_.onDone(),d=304,_=void 0):i.set("ETag",S)}e.createdResource&&(d=201),e.newLocation&&i.set("Location",e.newLocation);let f={status:d,headers:i,body:void 0},h=_?.wasLoadedFromSource?.();return h!==void 0&&(h?f.wasCacheMiss=!0:E&&i.set("Age",Math.round((Date.now()-E)/1e3))),_!==void 0&&(f.body=Qp(_,e,f),r==="HEAD"&&(f.body=void 0)),f}catch(o){return o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(c=>c.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:Qs(o.toString(),e)}}}function I6(e){if(xM)return;xM=!0,Jp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return y6(r,s)}),e.server.ws(async(r,s,n)=>{kM++,zp||(setTimeout(()=>{console.log("connection count",kM,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),zp=!1},1e3),zp=!0),t(s);let i=new Zr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Mo(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 Jp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Qs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Qs(_.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 Zc,Nt,b6,xM,Jp,kM,zp,VM=Se(()=>{wo();Zc=C(W());Yu();_a();Wn();Z_();Nt=new Uint8Array(8),b6=new Float64Array(Nt.buffer,0,1);a(y6,"http");kM=0;a(I6,"start")});var Zp=m((b_e,$M)=>{var{recordAction:Od,recordActionBinary:w6}=(di(),ee(Xa)),C6=require("fastify-plugin"),U6=200;$M.exports=C6(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),Od(o,"TTFB",l,d,_),w6(n.raw.statusCode<400,"success",l,d,_);let E=U6;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Od(performance.now()-c,"transfer",l,d,_),Od(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Od(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var rT=m((y_e,zM)=>{var wd=require("clone"),Cd=ve(),D6=V(),yd=A(),L6=x(),Nd=require("fs"),jp=require("joi"),{string:Id}=jp.types(),{hdb_errors:M6,handleHDBError:jc}=W(),{HDB_ERROR_MSGS:P6,HTTP_STATUS_CODES:bd}=M6,{common_validators:Po}=is(),YM=1e9,KM=" is required",v6=["insert","update","upsert"],eT={database:{presence:!1,format:Po.schema_format,length:Po.schema_length},schema:{presence:!1,format:Po.schema_format,length:Po.schema_length},table:{presence:!0,format:Po.schema_format,length:Po.schema_length},action:{inclusion:{within:v6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},B6={schema:Id.required(),table:Id.required(),action:Id.valid("insert","update","upsert")},{AWS_ACCESS_KEY:H6,AWS_SECRET:q6,AWS_BUCKET:F6,AWS_FILE_KEY:G6,REGION:x6}=yd.S3_BUCKET_AUTH_KEYS,k6={s3:{presence:!0},[`s3.${H6}`]:{presence:!0,type:"String"},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${x6}`]:{presence:!0,type:"String"}},WM=wd(eT);WM.data.presence={message:KM};var QM=wd(eT);QM.file_path.presence={message:KM};var V6=Object.assign(wd(eT),k6),tT=wd(B6);tT.csv_url=Id.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tT.passthrough_headers=jp.object();function $6(e){let t=Cd.validateObject(e,WM);return Ud(e,t)}a($6,"dataObject");function Y6(e){let t=Cd.validateBySchema(e,jp.object(tT));return Ud(e,t)}a(Y6,"urlObject");function K6(e){let t=Cd.validateObject(e,QM);return Ud(e,t)}a(K6,"fileObject");function W6(e){let t=Cd.validateObject(e,V6);return Ud(e,t)}a(W6,"s3FileObject");function Ud(e,t){if(!t){let r=D6.checkGlobalSchemaTable(e.schema,e.table);if(r)return jc(new Error,r,bd.BAD_REQUEST);if(e.operation===yd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Nd.accessSync(e.file_path,Nd.constants.R_OK|Nd.constants.F_OK)}catch(s){return s.code===yd.NODE_ERROR_CODES.ENOENT?jc(s,`No such file or directory ${s.path}`,bd.BAD_REQUEST):s.code===yd.NODE_ERROR_CODES.EACCES?jc(s,`Permission denied ${s.path}`,bd.BAD_REQUEST):jc(s)}try{let s=Nd.statSync(e.file_path).size;if(s>YM)return jc(new Error,P6.MAX_FILE_SIZE_ERR(s,YM),bd.BAD_REQUEST)}catch(s){L6.error(s),console.error(s)}}}return t}a(Ud,"postValidateChecks");zM.exports={dataObject:$6,urlObject:Y6,fileObject:K6,s3FileObject:W6}});var sT=m((w_e,JM)=>{"use strict";var eu=x(),Dd=A();async function Q6(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===Dd.OPERATIONS_ENUM.INSERT||t.operation===Dd.OPERATIONS_ENUM.UPDATE||t.operation===Dd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Dd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(eu.info(i.message),i):i.http_resp_msg?(eu.error(`Error calling operation: ${e.name}`),eu.error(i.http_resp_msg),i):(eu.error(`Error calling operation: ${e.name}`),eu.error(i),i)}}a(Q6,"callOperationFunctionAsAwait");JM.exports={callOperationFunctionAsAwait:Q6}});var ZM=m((U_e,XM)=>{"use strict";var nT=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}},iT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};XM.exports={BulkLoadFileObject:nT,BulkLoadDataObject:iT}});var eP=m((L_e,jM)=>{"use strict";var oT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};jM.exports=oT});var dT=m((q_e,SP)=>{"use strict";var Ld=Nr(),Pd=rT(),z6=require("needle"),Qr=A(),P_e=Be(),vo=V(),{handleHDBError:Fe,hdb_errors:uP}=W(),{HTTP_STATUS_CODES:bt,HDB_ERROR_MSGS:ut,CHECK_LOGS_WRAPPER:Ui}=uP,Bo=x(),aT=require("papaparse");vo.promisifyPapaParse();var zr=require("fs-extra"),J6=require("path"),{chain:tP}=require("stream-chain"),rP=require("stream-json/streamers/StreamArray"),sP=require("stream-json/utils/Batch"),nP=require("stream-chain/utils/comp"),{finished:iP}=require("stream"),X6=Q(),lP=sT(),Z6=$p(),{BulkLoadFileObject:uT,BulkLoadDataObject:j6}=ZM(),lT=Pp(),{verifyBulkLoadAttributePerms:_P}=hd(),v_e=eP(),B_e=it(),H_e=Vs(),{databases:e9}=(de(),ee(Ne)),{coerceType:t9}=(Jl(),ee(pm)),oP="No records parsed from csv file.",Ci=`${X6.get("HDB_ROOT")}/tmp`,{schema_regex:r9}=is(),aP=1024*1024*2,cP=5e3,s9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};SP.exports={csvDataLoad:n9,csvURLLoad:i9,csvFileLoad:o9,importFromS3:a9};async function n9(e,t){let r=Pd.dataObject(e);if(r)throw Fe(r,r.message,bt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=fP(e.schema,e.table),i=aT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cT.bind(null,n),dynamicTyping:!1}),o=new lT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&_P(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 Fe(new Error,c,bt.BAD_REQUEST,void 0,void 0,!0);let u=new j6(e.action,e.schema,e.table,i.data);return s=await lP.callOperationFunctionAsAwait(hP,u,null),s.message===oP?oP:mP(s.records,s.number_written)}catch(n){throw Di(n)}}a(n9,"csvDataLoad");async function i9(e){let t=Pd.urlObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ci}/${r}`;try{await c9(e,r)}catch(n){throw Bo.error(ut.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Ui(ut.DOWNLOAD_FILE_ERR(r)))}try{let n=new uT(this.job_operation_function.name,e.action,e.schema,e.table,s,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await _T(n);return await Md(s),i}catch(n){throw await Md(s),Di(n)}}a(i9,"csvURLLoad");async function o9(e){let t=Pd.fileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=new uT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Qr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await _T(r)}catch(s){throw Di(s)}}a(o9,"csvFileLoad");async function a9(e){let t=Pd.s3FileObject(e);if(t)throw Fe(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=J6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ci}/${n}`;let i=new uT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await u9(n,e);let o=await _T(i);return await Md(r),o}catch(s){throw await Md(r),Di(s)}}a(a9,"importFromS3");async function c9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await z6("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 Fe(s,n,s.statusCode,Qr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}_9(r,e.csv_url),await l9(t,r.raw)}a(c9,"downloadCSVFile");async function u9(e,t){try{let r=`${Ci}/${e}`;await zr.mkdirp(Ci),await zr.writeFile(`${Ci}/${e}`,"",{flag:"a+"});let s=await zr.createWriteStream(r),n=await Z6.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(){Bo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Bo.error(ut.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Ui(ut.S3_DOWNLOAD_ERR))}}a(u9,"downloadFileFromS3");async function l9(e,t){try{await zr.mkdirp(Ci),await zr.writeFile(`${Ci}/${e}`,t)}catch(r){throw Bo.error(ut.WRITE_TEMP_FILE_ERR),Fe(r,Ui(ut.DEFAULT_BULK_LOAD_ERR))}}a(l9,"writeFileToTempFolder");async function Md(e){if(e)try{await zr.access(e),await zr.unlink(e)}catch{Bo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Md,"deleteTempFile");function _9(e,t){if(e.statusCode!==uP.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,bt.BAD_REQUEST);if(!s9[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,bt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,bt.BAD_REQUEST)}a(_9,"validateURLResponse");async function _T(e){try{let t;switch(e.file_type){case Qr.VALID_S3_FILE_TYPES.CSV:t=await d9(e);break;case Qr.VALID_S3_FILE_TYPES.JSON:t=await E9(e);break;default:throw Fe(new Error,ut.DEFAULT_BULK_LOAD_ERR,bt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ut.INVALID_FILE_EXT_ERR(e))}return mP(t.records,t.number_written)}catch(t){throw Di(t)}}a(_T,"fileLoad");async function dP(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&&_P(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(dP,"validateChunk");async function EP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;vo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!vo.isEmpty(c)&&!vo.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 lP.callOperationFunctionAsAwait(hP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Ui(ut.INSERT_CSV_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.INSERT_CSV_ERR+" - "+c);r(u)}}a(EP,"insertChunk");async function d9(e){let t={records:0,number_written:0},r=fP(e.schema,e.table);try{let s=new lT,n=zr.createReadStream(e.file_path,{highWaterMark:aP});n.setEncoding("utf8"),await aT.parsePromise(n,dP.bind(null,e,s),cT.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);return n=zr.createReadStream(e.file_path,{highWaterMark:aP}),n.setEncoding("utf8"),await aT.parsePromise(n,EP.bind(null,e,t),cT.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Ui(ut.PAPA_PARSE_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.PAPA_PARSE_ERR+s)}}a(d9,"callPapaParse");function fP(e,t){let r=e9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>t9(i,n));return s}a(fP,"createTransformMap");function cT(e,t,r){let s=e.get(r);return s?s(t):vo.autoCast(t)}a(cT,"typeFunction");async function E9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new lT,n=tP([zr.createReadStream(e.file_path,{encoding:"utf-8"}),rP.withParser(),c=>c.value,new sP({batchSize:cP}),nP(async c=>{await dP(e,s,r,c)})]);await new Promise((c,u)=>{iP(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,bt.BAD_REQUEST);let o=tP([zr.createReadStream(e.file_path,{encoding:"utf-8"}),rP.withParser(),c=>c.value,new sP({batchSize:cP}),nP(async c=>{await EP(e,t,r,c)})]);return await new Promise((c,u)=>{iP(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,Ui(ut.INSERT_JSON_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.INSERT_JSON_ERR+s)}}a(E9,"insertJson");async function hP(e){let t={};try{e.data&&e.data.length>0&&f9(e.data[0])?t=await h9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Bo.info(t.message))}catch(r){throw Di(r)}return t}a(hP,"callBulkFileLoad");function f9(e){let t=Object.keys(e);for(let r of t)if(!r9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(f9,"validateColumnNames");async function h9(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 Fe(new Error,ut.INVALID_ACTION_PARAM_ERR(s),bt.BAD_REQUEST,Qr.LOG_LEVELS.ERROR,ut.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=vo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Di(o)}}a(h9,"bulkFileLoad");function mP(e,t){return`successfully loaded ${t} of ${e} records`}a(mP,"buildResponseMsg");function Di(e){return Fe(e,Ui(ut.DEFAULT_BULK_LOAD_ERR),bt.INTERNAL_SERVER_ERROR,Qr.LOG_LEVELS.ERROR,ut.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Di,"buildTopLevelErrMsg")});var TP=m((G_e,pP)=>{"use strict";var ET=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};pP.exports=ET});var AP=m((k_e,gP)=>{"use strict";var m9=A(),RP=require("moment"),S9=require("uuid").v4,fT=class{static{a(this,"JobObject")}constructor(){this.id=S9(),this.type=void 0,this.start_datetime=RP().valueOf(),this.created_datetime=RP().valueOf(),this.end_datetime=void 0,this.status=m9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};gP.exports=fT});var hT=m(($_e,wP)=>{"use strict";var p9=require("uuid").v4,bP=Nr(),yP=Or(),T9=as(),R9=Xi(),g9=TP(),Ge=A(),A9=AP(),O9=uS(),Lr=x(),N9=ba(),Ho=V(),{promisify:b9}=require("util"),Li=require("moment"),y9=Sd(),vd=rT(),OP=Vh(),{deleteTransactionLogsBeforeValidator:I9}=wp(),{handleHDBError:w9,hdb_errors:C9}=W(),{HTTP_STATUS_CODES:U9}=C9,NP=yP.searchByValue,D9=yP.searchByHash,L9=bP.insert,M9=b9(y9.evaluateSQL),P9=bP.update;wP.exports={addJob:H9,updateJob:F9,handleGetJob:v9,handleGetJobsByStartDate:B9,getJobById:IP};async function v9(e){try{let t=await IP(e.id);return Ho.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(v9,"handleGetJob");async function B9(e){try{let t=await q9(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=Li(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Li(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(B9,"handleGetJobsByStartDate");async function H9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Ho.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=vd.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=vd.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=vd.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=vd.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=OP(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=OP(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=I9(e);break;default:break}if(s)throw w9(s,s.message,U9.BAD_REQUEST,void 0,void 0,!0);let n=new A9;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new T9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await NP(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=p9();try{o=await NP(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 N9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await L9(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(H9,"addJob");async function q9(e){let t=Li(e.from_date,Li.ISO_8601),r=Li(e.to_date,Li.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 g9(s,e.hdb_user);try{return await M9(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(q9,"getJobsInDateRange");async function IP(e){if(Ho.isEmptyOrZeroLength(e))return Ho.errorizeMessage("Invalid job ID specified.");let t=new R9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await D9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),Ho.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(IP,"getJobById");async function F9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Ho.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Li().valueOf());let t=new O9(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await P9(t),r}a(F9,"updateJob")});var PP=m((K_e,MP)=>{"use strict";var CP=V(),er=A(),G9=require("moment"),Bd=dT(),Hd=x(),UP=hT(),DP=pd(),LP=ci(),x9=st(),k9=ad(),mT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function V9(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(CP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(CP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case er.JOB_TYPE_ENUM.csv_file_load:await js(e,Bd.csvFileLoad);break;case er.JOB_TYPE_ENUM.csv_url_load:await js(e,Bd.csvURLLoad);break;case er.JOB_TYPE_ENUM.csv_data_load:await js(e,Bd.csvDataLoad);break;case er.JOB_TYPE_ENUM.import_from_s3:await js(e,Bd.importFromS3);break;case er.JOB_TYPE_ENUM.empty_trash:break;case er.JOB_TYPE_ENUM.export_local:await js(e,DP.export_local);break;case er.JOB_TYPE_ENUM.export_to_s3:await js(e,DP.export_to_s3);break;case er.JOB_TYPE_ENUM.delete_files_before:case er.JOB_TYPE_ENUM.delete_records_before:await js(e,LP.deleteFilesBefore);break;case er.JOB_TYPE_ENUM.delete_audit_logs_before:await js(e,LP.deleteAuditLogsBefore);break;case er.JOB_TYPE_ENUM.delete_transaction_logs_before:await js(e,k9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(V9,"parseMessage");async function js(e,t){try{e.job.status=er.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=G9().valueOf(),await UP.updateJob(e.job),await $9(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):Hd.error(`There was an error running ${t.name} job with id ${e.job.id}`),Hd.error(s),e.job.message=s,e.job.status=er.JOB_STATUS_ENUM.ERROR;try{await UP.updateJob(e.job)}catch(n){throw Hd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(js,"runJob");async function $9(e){Hd.trace("launching job thread:",e),x9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[er.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a($9,"launchJobThread");MP.exports={parseMessage:V9,RunnerMessage:mT}});var BP=m((Q_e,vP)=>{"use strict";var ST=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};vP.exports=ST});var jP=m((J_e,AT)=>{"use strict";var xd=Or(),RT=Sd(),qd=dT(),en=d_(),Fd=si(),ru=ci(),Y9=Qm(),tu=br(),Gd=sS(),yt=Ip(),lt=x(),K9=oS(),W9=C_(),Q9=xS(),z9=M_(),J9=kS(),X9=VS(),Z9=KS(),j9=QS(),pT=XS(),HP=pd(),e7=hd(),gT=hT(),I=A(),{hdb_errors:nu,handleHDBError:su}=W(),{HTTP_STATUS_CODES:qP}=nu,TT=rp(),FP=Tp(),QP=require("util"),qo=Nr(),t7=pn(),r7=Oo(),GP=PP(),xP=pc(),kP=(sd(),ee(qc)),VP=Tr(),$P=ad(),YP=_d(),{setServerUtilities:s7}=(Jl(),ee(pm)),{CONTEXT:n7}=(jr(),ee(ef)),{_assignPackageExport:i7}=require("../index"),{transformReq:o7}=V(),a7=sT(),KP=xd.searchByHash,c7=xd.searchByValue,u7=QP.promisify(xd.search),l7=QP.promisify(RT.evaluateSQL),_7={[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=BP();async function zP(e,t){try{if(e.body.operation!=="read_log"&&(lt.log_level===I.LOG_LEVELS.INFO||lt.log_level===I.LOG_LEVELS.DEBUG||lt.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;lt.info(o)}}catch(s){lt.error(s)}let r=await a7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return _7[e.body.operation]&&t7.setSchemaDataToGlobal(s=>{s&&lt.error(s)}),r}a(zP,"processLocalTransaction");var WP=E7();AT.exports={chooseOperation:JP,getOperationFunction:XP,operation:ZP,processLocalTransaction:zP};s7(AT.exports);function JP(e){let t;try{t=XP(e)}catch(n){throw lt.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=RT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=RT.checkASTPermissions(e,i);if(o)throw lt.error(`${qP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),su(new Error,o,nu.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=e7.verifyPerms(i,n);if(o)throw lt.error(`${qP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),su(new Error,o,nu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw su(n,"There was an error when trying to choose an operation path")}return r}a(JP,"chooseOperation");function XP(e){if(lt.trace(`getOperationFunction with operation: ${e.operation}`),WP.has(e.operation))return WP.get(e.operation);throw su(new Error,nu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),nu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(XP,"getOperationFunction");i7("operation",ZP);function ZP(e,t){e.hdb_user=this[n7]?.user,e.bypass_auth=!t;let r=JP(e);return zP({body:e},r)}a(ZP,"operation");async function d7(e){lt.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 qo.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await qo.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await qo.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await ru.deleteRecord(i);break;default:lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){lt.info("Invalid operation in transaction"),lt.error(o)}}a(d7,"catchup");async function gs(e){o7(e);let t,r;try{r=await gT.addJob(e),t=r.createdJob,lt.info("addJob result",r);let s=new GP.RunnerMessage(t,e);return await GP.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 lt.error(n),su(s,n)}}a(gs,"executeJob");function E7(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(qo.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(qo.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(qo.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(xd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(KP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(KP)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(c7)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(u7)),e.set(I.OPERATIONS_ENUM.SQL,new B(l7)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(gs,qd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(gs,qd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(gs,qd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(gs,qd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(en.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(en.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(en.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(en.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Fd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Fd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Fd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Fd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(ru.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(tu.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(tu.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(tu.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(tu.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Gd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Gd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Gd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Gd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(tu.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(K9)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(W9)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(Q9)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(z9)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(J9)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(X9)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(VP.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(Z9.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(j9)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(pT.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(pT.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(pT.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(gs,HP.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(gs,ru.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(gs,ru.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(gs,HP.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(gT.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(gT.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(TT.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(TT.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(TT.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(FP.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(FP.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(d7)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(r7.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(gs,ru.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(Y9)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(xP.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(xP.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(kP.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(kP.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(VP.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(yt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(yt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(yt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(yt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(yt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(yt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(yt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(yt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(yt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(yt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(yt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(yt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(yt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B($P.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(gs,$P.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(YP.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(YP.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(en.getBackup)),e}a(E7,"initializeOperationFunctionMap")});var Vd=m((Z_e,rv)=>{"use strict";var OT=A(),f7=V(),iu=x(),{handleHDBError:NT,hdb_errors:kd}=W(),{isMainThread:h7}=require("worker_threads"),{Readable:m7}=require("stream"),ev=require("os"),S7=require("util"),p7=SS(),T7=S7.promisify(p7.authorize),tv=jP(),{Gzip:R7}=require("zlib");function g7(e){let t=`Found an uncaught exception with message: ${e.message}. ${ev.EOL}Stack: ${e.stack} ${ev.EOL}Terminating ${h7?"HDB":"thread"}.`;console.error(t),iu.fatal(t),process.exit(1)}a(g7,"handleServerUncaughtException");function A7(e,t,r){if(iu[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:kd.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(A7,"serverErrorHandler");function O7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=NT(new Error,"Invalid JSON.",kd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(f7.isEmpty(e.body.operation)){let s=NT(new Error,"Request body must include an 'operation' property.",kd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(O7,"reqBodyValidationHandler");function N7(e,t,r){let s;e.body.operation!==OT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==OT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==OT.OPERATIONS_ENUM.LOGOUT?T7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{iu.warn(n),iu.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(NT(n,i,kd.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(N7,"authHandler");async function b7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=tv.chooseOperation(e.body);let n=await tv.processLocalTransaction(e,s);if(n instanceof m7&&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 R7))}return n}catch(n){throw iu.error(n),n}}a(b7,"handlePostRequest");rv.exports={authHandler:N7,handlePostRequest:b7,handleServerUncaughtException:g7,serverErrorHandler:A7,reqBodyValidationHandler:O7}});var ov=m((ede,iv)=>{"use strict";var y7=require("fastify-plugin"),{handlePostRequest:sv,authHandler:I7,reqBodyValidationHandler:w7}=Vd();async function C7(e){e.decorate("hdbCore",{preValidation:[w7,I7],request:t=>nv(sv(t,response)),requestWithoutAuthentication:(t,r)=>nv(sv(t,r,!0))})}a(C7,"hdbCore");async function nv(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(nv,"convertAsyncIterators");iv.exports=y7(C7)});var cv=m((rde,av)=>{"use strict";var bT=require("fs"),Fo=Q();Fo.initSync();var{CONFIG_PARAMS:ou}=A(),U7=1024*1024*1024;function D7(e){let t=Fo.get(ou.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Fo.get(ou.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:U7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Fo.get(ou.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Fo.get(ou.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Fo.get(ou.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:bT.readFileSync(`${n}`),cert:bT.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()}});xM={type:"application/json",serializeStream:Td.streamAsJSON,serialize:JSON.stringify,deserialize:g6,q:.8};Et.set("*/*",xM);Et.set("",xM);a(g6,"tryJSONParse");a(Wp,"registerContentHandlers");A6=require("fastify-plugin"),O6=A6(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=Ad(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(Ad,"findBestSerializer");a(Qp,"serialize");a(Zs,"serializeMessage");a(N6,"streamToBuffer");a(vo,"getDeserializer");a(qM,"deserializerUnknownType");a(b6,"transformIterable")});var Xp={};ke(Xp,{start:()=>w6});async function I6(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&$u(e);let s=new Bn;try{e.responseHeaders=s;let n=e.url.slice(1),i=Jp.getMatch(n);if(!i)return t(e);e.handlerPath=i.path;let o={url:i.relativeURL},c=i.Resource,u=await We(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=vo(e.headers["content-type"],!0)(e.body)}catch(f){throw new jc.ClientError(f,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,e.headers.destination,e);case"MOVE":return c.move(o,e.headers.destination,e);case"BREW":throw new jc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new jc.ServerError(`Method ${r} is not recognized`,501)}}),l=200,_;if(u==null)l=r==="GET"||r==="HEAD"?404:204;else if(_=e?.lastModified){y6[0]=_;let f=String.fromCharCode(34,(Nt[0]&63)+62,(Nt[0]>>6)+(Nt[1]<<2&63)+62,(Nt[1]>>4)+(Nt[2]<<4&63)+62,(Nt[2]>>2)+62,(Nt[3]&63)+62,(Nt[3]>>6)+(Nt[4]<<2&63)+62,(Nt[4]>>4)+(Nt[5]<<4&63)+62,(Nt[5]>>2)+62,(Nt[6]&63)+62,(Nt[6]>>6)+(Nt[7]<<2&63)+62,34),h=e.headers["if-none-match"];h&&f==h?(u?.onDone&&u.onDone(),l=304,u=void 0):s.set("ETag",f)}e.createdResource&&(l=201),e.newLocation&&s.set("Location",e.newLocation);let d={status:l,headers:s,body:void 0},E=u?.wasLoadedFromSource?.();return E!==void 0&&(E?d.wasCacheMiss=!0:_&&s.set("Age",Math.round((Date.now()-_)/1e3))),u!==void 0&&(d.body=Qp(u,e,d),r==="HEAD"&&(d.body=void 0)),d}catch(n){return n.statusCode||console.error(n),n.statusCode===405&&(n.method&&(n.message+=` to handle HTTP method ${n.method.toUpperCase()||""}`),n.allow&&(n.allow.push("trace","head","options"),s.set("Allow",n.allow.map(i=>i.toUpperCase()).join(", ")))),{status:n.statusCode||500,headers:s,body:Zs(n.toString(),e)}}}function w6(e){if(VM)return;VM=!0,Jp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return I6(r,s)}),e.server.ws(async(r,s,n)=>{$M++,zp||(setTimeout(()=>{console.log("connection count",$M,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),zp=!1},1e3),zp=!0),t(s);let i=new ts;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=vo(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 Jp.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 jc,Nt,y6,VM,Jp,$M,zp,YM=pe(()=>{Uo();jc=U(W());Yu();da();Xn();Z_();Nt=new Uint8Array(8),y6=new Float64Array(Nt.buffer,0,1);a(I6,"http");$M=0;a(w6,"start")});var Zp=m((y_e,KM)=>{var{recordAction:Od,recordActionBinary:C6}=(mi(),ee(Za)),U6=require("fastify-plugin"),D6=200;KM.exports=U6(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),Od(o,"TTFB",l,d,_),C6(n.raw.statusCode<400,"success",l,d,_);let E=D6;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Od(performance.now()-c,"transfer",l,d,_),Od(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Od(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var rT=m((I_e,XM)=>{var wd=require("clone"),Cd=Be(),L6=V(),yd=A(),M6=x(),Nd=require("fs"),jp=require("joi"),{string:Id}=jp.types(),{hdb_errors:P6,handleHDBError:eu}=W(),{HDB_ERROR_MSGS:v6,HTTP_STATUS_CODES:bd}=P6,{common_validators:Bo}=cs(),WM=1e9,QM=" is required",B6=["insert","update","upsert"],eT={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:B6,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},H6={schema:Id.required(),table:Id.required(),action:Id.valid("insert","update","upsert")},{AWS_ACCESS_KEY:q6,AWS_SECRET:F6,AWS_BUCKET:G6,AWS_FILE_KEY:x6,REGION:k6}=yd.S3_BUCKET_AUTH_KEYS,V6={s3:{presence:!0},[`s3.${q6}`]:{presence:!0,type:"String"},[`s3.${F6}`]:{presence:!0,type:"String"},[`s3.${G6}`]:{presence:!0,type:"String"},[`s3.${x6}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${k6}`]:{presence:!0,type:"String"}},zM=wd(eT);zM.data.presence={message:QM};var JM=wd(eT);JM.file_path.presence={message:QM};var $6=Object.assign(wd(eT),V6),tT=wd(H6);tT.csv_url=Id.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();tT.passthrough_headers=jp.object();function Y6(e){let t=Cd.validateObject(e,zM);return Ud(e,t)}a(Y6,"dataObject");function K6(e){let t=Cd.validateBySchema(e,jp.object(tT));return Ud(e,t)}a(K6,"urlObject");function W6(e){let t=Cd.validateObject(e,JM);return Ud(e,t)}a(W6,"fileObject");function Q6(e){let t=Cd.validateObject(e,$6);return Ud(e,t)}a(Q6,"s3FileObject");function Ud(e,t){if(!t){let r=L6.checkGlobalSchemaTable(e.schema,e.table);if(r)return eu(new Error,r,bd.BAD_REQUEST);if(e.operation===yd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Nd.accessSync(e.file_path,Nd.constants.R_OK|Nd.constants.F_OK)}catch(s){return s.code===yd.NODE_ERROR_CODES.ENOENT?eu(s,`No such file or directory ${s.path}`,bd.BAD_REQUEST):s.code===yd.NODE_ERROR_CODES.EACCES?eu(s,`Permission denied ${s.path}`,bd.BAD_REQUEST):eu(s)}try{let s=Nd.statSync(e.file_path).size;if(s>WM)return eu(new Error,v6.MAX_FILE_SIZE_ERR(s,WM),bd.BAD_REQUEST)}catch(s){M6.error(s),console.error(s)}}}return t}a(Ud,"postValidateChecks");XM.exports={dataObject:Y6,urlObject:K6,fileObject:W6,s3FileObject:Q6}});var sT=m((C_e,ZM)=>{"use strict";var tu=x(),Dd=A();async function z6(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===Dd.OPERATIONS_ENUM.INSERT||t.operation===Dd.OPERATIONS_ENUM.UPDATE||t.operation===Dd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===Dd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(tu.info(i.message),i):i.http_resp_msg?(tu.error(`Error calling operation: ${e.name}`),tu.error(i.http_resp_msg),i):(tu.error(`Error calling operation: ${e.name}`),tu.error(i),i)}}a(z6,"callOperationFunctionAsAwait");ZM.exports={callOperationFunctionAsAwait:z6}});var eP=m((D_e,jM)=>{"use strict";var nT=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}},iT=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};jM.exports={BulkLoadFileObject:nT,BulkLoadDataObject:iT}});var rP=m((M_e,tP)=>{"use strict";var oT=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};tP.exports=oT});var dT=m((F_e,TP)=>{"use strict";var Ld=yr(),Pd=rT(),J6=require("needle"),Jr=A(),v_e=He(),Ho=V(),{handleHDBError:Ge,hdb_errors:_P}=W(),{HTTP_STATUS_CODES:bt,HDB_ERROR_MSGS:ut,CHECK_LOGS_WRAPPER:Mi}=_P,qo=x(),aT=require("papaparse");Ho.promisifyPapaParse();var Xr=require("fs-extra"),X6=require("path"),{chain:sP}=require("stream-chain"),nP=require("stream-json/streamers/StreamArray"),iP=require("stream-json/utils/Batch"),oP=require("stream-chain/utils/comp"),{finished:aP}=require("stream"),Z6=Q(),dP=sT(),j6=$p(),{BulkLoadFileObject:uT,BulkLoadDataObject:e9}=eP(),lT=Pp(),{verifyBulkLoadAttributePerms:EP}=hd(),B_e=rP(),H_e=it(),q_e=Ws(),{databases:t9}=(Ee(),ee(be)),{coerceType:r9}=(Jl(),ee(pm)),cP="No records parsed from csv file.",Li=`${Z6.get("HDB_ROOT")}/tmp`,{schema_regex:s9}=cs(),uP=1024*1024*2,lP=5e3,n9={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};TP.exports={csvDataLoad:i9,csvURLLoad:o9,csvFileLoad:a9,importFromS3:c9};async function i9(e,t){let r=Pd.dataObject(e);if(r)throw Ge(r,r.message,bt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=mP(e.schema,e.table),i=aT.parse(e.data,{header:!0,skipEmptyLines:!0,transform:cT.bind(null,n),dynamicTyping:!1}),o=new lT;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&EP(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 Ge(new Error,c,bt.BAD_REQUEST,void 0,void 0,!0);let u=new e9(e.action,e.schema,e.table,i.data);return s=await dP.callOperationFunctionAsAwait(SP,u,null),s.message===cP?cP:pP(s.records,s.number_written)}catch(n){throw Pi(n)}}a(i9,"csvDataLoad");async function o9(e){let t=Pd.urlObject(e);if(t)throw Ge(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Li}/${r}`;try{await u9(e,r)}catch(n){throw qo.error(ut.DOWNLOAD_FILE_ERR(r)+" - "+n),Ge(n,Mi(ut.DOWNLOAD_FILE_ERR(r)))}try{let n=new uT(this.job_operation_function.name,e.action,e.schema,e.table,s,Jr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await _T(n);return await Md(s),i}catch(n){throw await Md(s),Pi(n)}}a(o9,"csvURLLoad");async function a9(e){let t=Pd.fileObject(e);if(t)throw Ge(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r=new uT(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Jr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await _T(r)}catch(s){throw Pi(s)}}a(a9,"csvFileLoad");async function c9(e){let t=Pd.s3FileObject(e);if(t)throw Ge(t,t.message,bt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=X6.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Li}/${n}`;let i=new uT(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await l9(n,e);let o=await _T(i);return await Md(r),o}catch(s){throw await Md(r),Pi(s)}}a(c9,"importFromS3");async function u9(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await J6("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 Ge(s,n,s.statusCode,Jr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}d9(r,e.csv_url),await _9(t,r.raw)}a(u9,"downloadCSVFile");async function l9(e,t){try{let r=`${Li}/${e}`;await Xr.mkdirp(Li),await Xr.writeFile(`${Li}/${e}`,"",{flag:"a+"});let s=await Xr.createWriteStream(r),n=await j6.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(){qo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw qo.error(ut.S3_DOWNLOAD_ERR+" - "+r),Ge(r,Mi(ut.S3_DOWNLOAD_ERR))}}a(l9,"downloadFileFromS3");async function _9(e,t){try{await Xr.mkdirp(Li),await Xr.writeFile(`${Li}/${e}`,t)}catch(r){throw qo.error(ut.WRITE_TEMP_FILE_ERR),Ge(r,Mi(ut.DEFAULT_BULK_LOAD_ERR))}}a(_9,"writeFileToTempFolder");async function Md(e){if(e)try{await Xr.access(e),await Xr.unlink(e)}catch{qo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(Md,"deleteTempFile");function d9(e,t){if(e.statusCode!==_P.HTTP_STATUS_CODES.OK)throw Ge(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,bt.BAD_REQUEST);if(!n9[e.headers["content-type"]])throw Ge(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,bt.BAD_REQUEST);if(!e.raw)throw Ge(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,bt.BAD_REQUEST)}a(d9,"validateURLResponse");async function _T(e){try{let t;switch(e.file_type){case Jr.VALID_S3_FILE_TYPES.CSV:t=await E9(e);break;case Jr.VALID_S3_FILE_TYPES.JSON:t=await f9(e);break;default:throw Ge(new Error,ut.DEFAULT_BULK_LOAD_ERR,bt.BAD_REQUEST,Jr.LOG_LEVELS.ERROR,ut.INVALID_FILE_EXT_ERR(e))}return pP(t.records,t.number_written)}catch(t){throw Pi(t)}}a(_T,"fileLoad");async function fP(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&&EP(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Ge(c);r(u)}}a(fP,"validateChunk");async function hP(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Ho.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Ho.isEmpty(c)&&!Ho.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 dP.callOperationFunctionAsAwait(SP,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Ge(c,Mi(ut.INSERT_CSV_ERR),bt.INTERNAL_SERVER_ERROR,Jr.LOG_LEVELS.ERROR,ut.INSERT_CSV_ERR+" - "+c);r(u)}}a(hP,"insertChunk");async function E9(e){let t={records:0,number_written:0},r=mP(e.schema,e.table);try{let s=new lT,n=Xr.createReadStream(e.file_path,{highWaterMark:uP});n.setEncoding("utf8"),await aT.parsePromise(n,fP.bind(null,e,s),cT.bind(null,r));let i=s.getPermsResponse();if(i)throw Ge(new Error,i,bt.BAD_REQUEST);return n=Xr.createReadStream(e.file_path,{highWaterMark:uP}),n.setEncoding("utf8"),await aT.parsePromise(n,hP.bind(null,e,t),cT.bind(null,r)),n.destroy(),t}catch(s){throw Ge(s,Mi(ut.PAPA_PARSE_ERR),bt.INTERNAL_SERVER_ERROR,Jr.LOG_LEVELS.ERROR,ut.PAPA_PARSE_ERR+s)}}a(E9,"callPapaParse");function mP(e,t){let r=t9[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>r9(i,n));return s}a(mP,"createTransformMap");function cT(e,t,r){let s=e.get(r);return s?s(t):Ho.autoCast(t)}a(cT,"typeFunction");async function f9(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new lT,n=sP([Xr.createReadStream(e.file_path,{encoding:"utf-8"}),nP.withParser(),c=>c.value,new iP({batchSize:lP}),oP(async c=>{await fP(e,s,r,c)})]);await new Promise((c,u)=>{aP(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Ge(new Error,i,bt.BAD_REQUEST);let o=sP([Xr.createReadStream(e.file_path,{encoding:"utf-8"}),nP.withParser(),c=>c.value,new iP({batchSize:lP}),oP(async c=>{await hP(e,t,r,c)})]);return await new Promise((c,u)=>{aP(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Ge(s,Mi(ut.INSERT_JSON_ERR),bt.INTERNAL_SERVER_ERROR,Jr.LOG_LEVELS.ERROR,ut.INSERT_JSON_ERR+s)}}a(f9,"insertJson");async function SP(e){let t={};try{e.data&&e.data.length>0&&h9(e.data[0])?t=await m9(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",qo.info(t.message))}catch(r){throw Pi(r)}return t}a(SP,"callBulkFileLoad");function h9(e){let t=Object.keys(e);for(let r of t)if(!s9.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(h9,"validateColumnNames");async function m9(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 Ge(new Error,ut.INVALID_ACTION_PARAM_ERR(s),bt.BAD_REQUEST,Jr.LOG_LEVELS.ERROR,ut.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=Ho.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Pi(o)}}a(m9,"bulkFileLoad");function pP(e,t){return`successfully loaded ${t} of ${e} records`}a(pP,"buildResponseMsg");function Pi(e){return Ge(e,Mi(ut.DEFAULT_BULK_LOAD_ERR),bt.INTERNAL_SERVER_ERROR,Jr.LOG_LEVELS.ERROR,ut.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Pi,"buildTopLevelErrMsg")});var gP=m((x_e,RP)=>{"use strict";var ET=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};RP.exports=ET});var NP=m((V_e,OP)=>{"use strict";var S9=A(),AP=require("moment"),p9=require("uuid").v4,fT=class{static{a(this,"JobObject")}constructor(){this.id=p9(),this.type=void 0,this.start_datetime=AP().valueOf(),this.created_datetime=AP().valueOf(),this.end_datetime=void 0,this.status=S9.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};OP.exports=fT});var hT=m((Y_e,UP)=>{"use strict";var T9=require("uuid").v4,IP=yr(),wP=br(),R9=ls(),g9=ji(),A9=gP(),xe=A(),O9=NP(),N9=uS(),Pr=x(),b9=ya(),Fo=V(),{promisify:y9}=require("util"),vi=require("moment"),I9=Sd(),vd=rT(),bP=Vh(),{deleteTransactionLogsBeforeValidator:w9}=wp(),{handleHDBError:C9,hdb_errors:U9}=W(),{HTTP_STATUS_CODES:D9}=U9,yP=wP.searchByValue,L9=wP.searchByHash,M9=IP.insert,P9=y9(I9.evaluateSQL),v9=IP.update;UP.exports={addJob:q9,updateJob:G9,handleGetJob:B9,handleGetJobsByStartDate:H9,getJobById:CP};async function B9(e){try{let t=await CP(e.id);return Fo.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 Pr.error("There was an error getting job",t),new Error(r)}}a(B9,"handleGetJob");async function H9(e){try{let t=await F9(e);if(Pr.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=vi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=vi(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 Pr.error(r),new Error(r)}}a(H9,"handleGetJobsByStartDate");async function q9(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Fo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Pr.info(_),t.error=_,t}if(!xe.JOB_TYPE_ENUM[e.operation])return Pr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case xe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=vd.fileObject(e);break;case xe.OPERATIONS_ENUM.CSV_URL_LOAD:s=vd.urlObject(e);break;case xe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=vd.dataObject(e);break;case xe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=vd.s3FileObject(e);break;case xe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case xe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=bP(e,"date");break;case xe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=bP(e,"timestamp");break;case xe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=w9(e);break;default:break}if(s)throw C9(s,s.message,D9.BAD_REQUEST,void 0,void 0,!0);let n=new O9;n.type=e.operation===xe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?xe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new R9(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await yP(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Pr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=T9();try{o=await yP(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Pr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Pr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new b9(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await M9(u)}catch(_){return Pr.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,Pr.trace(_)}return t}a(q9,"addJob");async function F9(e){let t=vi(e.from_date,vi.ISO_8601),r=vi(e.to_date,vi.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 A9(s,e.hdb_user);try{return await P9(n)}catch(i){throw Pr.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(F9,"getJobsInDateRange");async function CP(e){if(Fo.isEmptyOrZeroLength(e))return Fo.errorizeMessage("Invalid job ID specified.");let t=new g9(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await L9(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Pr.error(s),Fo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(CP,"getJobById");async function G9(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Fo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===xe.JOB_STATUS_ENUM.COMPLETE||e.status===xe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=vi().valueOf());let t=new N9(xe.SYSTEM_SCHEMA_NAME,xe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await v9(t),r}a(G9,"updateJob")});var BP=m((W_e,vP)=>{"use strict";var DP=V(),tr=A(),x9=require("moment"),Bd=dT(),Hd=x(),LP=hT(),MP=pd(),PP=di(),k9=st(),V9=ad(),mT=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function $9(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(DP.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(DP.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case tr.JOB_TYPE_ENUM.csv_file_load:await sn(e,Bd.csvFileLoad);break;case tr.JOB_TYPE_ENUM.csv_url_load:await sn(e,Bd.csvURLLoad);break;case tr.JOB_TYPE_ENUM.csv_data_load:await sn(e,Bd.csvDataLoad);break;case tr.JOB_TYPE_ENUM.import_from_s3:await sn(e,Bd.importFromS3);break;case tr.JOB_TYPE_ENUM.empty_trash:break;case tr.JOB_TYPE_ENUM.export_local:await sn(e,MP.export_local);break;case tr.JOB_TYPE_ENUM.export_to_s3:await sn(e,MP.export_to_s3);break;case tr.JOB_TYPE_ENUM.delete_files_before:case tr.JOB_TYPE_ENUM.delete_records_before:await sn(e,PP.deleteFilesBefore);break;case tr.JOB_TYPE_ENUM.delete_audit_logs_before:await sn(e,PP.deleteAuditLogsBefore);break;case tr.JOB_TYPE_ENUM.delete_transaction_logs_before:await sn(e,V9.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a($9,"parseMessage");async function sn(e,t){try{e.job.status=tr.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=x9().valueOf(),await LP.updateJob(e.job),await Y9(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):Hd.error(`There was an error running ${t.name} job with id ${e.job.id}`),Hd.error(s),e.job.message=s,e.job.status=tr.JOB_STATUS_ENUM.ERROR;try{await LP.updateJob(e.job)}catch(n){throw Hd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(sn,"runJob");async function Y9(e){Hd.trace("launching job thread:",e),k9.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[tr.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(Y9,"launchJobThread");vP.exports={parseMessage:$9,RunnerMessage:mT}});var qP=m((z_e,HP)=>{"use strict";var ST=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};HP.exports=ST});var tv=m((X_e,AT)=>{"use strict";var xd=br(),RT=Sd(),qd=dT(),nn=d_(),Fd=ai(),su=di(),K9=Qm(),ru=Ir(),Gd=sS(),yt=Ip(),lt=x(),W9=oS(),Q9=C_(),z9=xS(),J9=M_(),X9=kS(),Z9=VS(),j9=KS(),e7=QS(),pT=XS(),FP=pd(),t7=hd(),gT=hT(),y=A(),{hdb_errors:iu,handleHDBError:nu}=W(),{HTTP_STATUS_CODES:GP}=iu,TT=rp(),xP=Tp(),JP=require("util"),Go=yr(),r7=An(),s7=bo(),kP=BP(),VP=Tc(),$P=(sd(),ee(Fc)),YP=gr(),KP=ad(),WP=_d(),{setServerUtilities:n7}=(Jl(),ee(pm)),{CONTEXT:i7}=(rs(),ee(ef)),{_assignPackageExport:o7}=require("../index"),{transformReq:a7}=V(),c7=sT(),QP=xd.searchByHash,u7=xd.searchByValue,l7=JP.promisify(xd.search),_7=JP.promisify(RT.evaluateSQL),d7={[y.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.CREATE_TABLE]:!0,[y.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[y.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.DROP_TABLE]:!0,[y.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=qP();async function XP(e,t){try{if(e.body.operation!=="read_log"&&(lt.log_level===y.LOG_LEVELS.INFO||lt.log_level===y.LOG_LEVELS.DEBUG||lt.log_level===y.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;lt.info(o)}}catch(s){lt.error(s)}let r=await c7.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return d7[e.body.operation]&&r7.setSchemaDataToGlobal(s=>{s&&lt.error(s)}),r}a(XP,"processLocalTransaction");var zP=f7();AT.exports={chooseOperation:ZP,getOperationFunction:jP,operation:ev,processLocalTransaction:XP};n7(AT.exports);function ZP(e){let t;try{t=jP(e)}catch(n){throw lt.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=RT.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=RT.checkASTPermissions(e,i);if(o)throw lt.error(`${GP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),nu(new Error,o,iu.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==y.OPERATIONS_ENUM.LOGIN&&e.operation!==y.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=t7.verifyPerms(i,n);if(o)throw lt.error(`${GP.FORBIDDEN} from operation ${e.operation}`),lt.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),nu(new Error,o,iu.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw nu(n,"There was an error when trying to choose an operation path")}return r}a(ZP,"chooseOperation");function jP(e){if(lt.trace(`getOperationFunction with operation: ${e.operation}`),zP.has(e.operation))return zP.get(e.operation);throw nu(new Error,iu.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),iu.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(jP,"getOperationFunction");o7("operation",ev);function ev(e,t){e.hdb_user=this[i7]?.user,e.bypass_auth=!t;let r=ZP(e);return XP({body:e},r)}a(ev,"operation");async function E7(e){lt.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[y.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case y.OPERATIONS_ENUM.INSERT:o=await Go.insert(i);break;case y.OPERATIONS_ENUM.UPDATE:o=await Go.update(i);break;case y.OPERATIONS_ENUM.UPSERT:o=await Go.upsert(i);break;case y.OPERATIONS_ENUM.DELETE:o=await su.deleteRecord(i);break;default:lt.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){lt.info("Invalid operation in transaction"),lt.error(o)}}a(E7,"catchup");async function Ns(e){a7(e);let t,r;try{r=await gT.addJob(e),t=r.createdJob,lt.info("addJob result",r);let s=new kP.RunnerMessage(t,e);return await kP.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 lt.error(n),nu(s,n)}}a(Ns,"executeJob");function f7(){let e=new Map;return e.set(y.OPERATIONS_ENUM.INSERT,new B(Go.insert)),e.set(y.OPERATIONS_ENUM.UPDATE,new B(Go.update)),e.set(y.OPERATIONS_ENUM.UPSERT,new B(Go.upsert)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(xd.searchByConditions)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(QP)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_ID,new B(QP)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(u7)),e.set(y.OPERATIONS_ENUM.SEARCH,new B(l7)),e.set(y.OPERATIONS_ENUM.SQL,new B(_7)),e.set(y.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Ns,qd.csvDataLoad)),e.set(y.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Ns,qd.csvFileLoad)),e.set(y.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Ns,qd.csvURLLoad)),e.set(y.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Ns,qd.importFromS3)),e.set(y.OPERATIONS_ENUM.CREATE_SCHEMA,new B(nn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_DATABASE,new B(nn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_TABLE,new B(nn.createTable)),e.set(y.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(nn.createAttribute)),e.set(y.OPERATIONS_ENUM.DROP_SCHEMA,new B(nn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_DATABASE,new B(nn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_TABLE,new B(nn.dropTable)),e.set(y.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(nn.dropAttribute)),e.set(y.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Fd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Fd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Fd.describeTable)),e.set(y.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Fd.describeAll)),e.set(y.OPERATIONS_ENUM.DELETE,new B(su.deleteRecord)),e.set(y.OPERATIONS_ENUM.ADD_USER,new B(ru.addUser)),e.set(y.OPERATIONS_ENUM.ALTER_USER,new B(ru.alterUser)),e.set(y.OPERATIONS_ENUM.DROP_USER,new B(ru.dropUser)),e.set(y.OPERATIONS_ENUM.LIST_USERS,new B(ru.listUsersExternal)),e.set(y.OPERATIONS_ENUM.LIST_ROLES,new B(Gd.listRoles)),e.set(y.OPERATIONS_ENUM.ADD_ROLE,new B(Gd.addRole)),e.set(y.OPERATIONS_ENUM.ALTER_ROLE,new B(Gd.alterRole)),e.set(y.OPERATIONS_ENUM.DROP_ROLE,new B(Gd.dropRole)),e.set(y.OPERATIONS_ENUM.USER_INFO,new B(ru.userInfo)),e.set(y.OPERATIONS_ENUM.READ_LOG,new B(W9)),e.set(y.OPERATIONS_ENUM.ADD_NODE,new B(Q9)),e.set(y.OPERATIONS_ENUM.UPDATE_NODE,new B(z9)),e.set(y.OPERATIONS_ENUM.REMOVE_NODE,new B(J9)),e.set(y.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(X9)),e.set(y.OPERATIONS_ENUM.PURGE_STREAM,new B(Z9)),e.set(y.OPERATIONS_ENUM.SET_CONFIGURATION,new B(YP.setConfiguration)),e.set(y.OPERATIONS_ENUM.CLUSTER_STATUS,new B(j9.clusterStatus)),e.set(y.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(e7)),e.set(y.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(pT.setRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(pT.getRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(pT.deleteRoutes)),e.set(y.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Ns,FP.export_to_s3)),e.set(y.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Ns,su.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Ns,su.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Ns,FP.export_local)),e.set(y.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(gT.handleGetJobsByStartDate)),e.set(y.OPERATIONS_ENUM.GET_JOB,new B(gT.handleGetJob)),e.set(y.OPERATIONS_ENUM.GET_FINGERPRINT,new B(TT.getFingerprint)),e.set(y.OPERATIONS_ENUM.SET_LICENSE,new B(TT.setLicense)),e.set(y.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(TT.getRegistrationInfo)),e.set(y.OPERATIONS_ENUM.RESTART,new B(xP.restart)),e.set(y.OPERATIONS_ENUM.RESTART_SERVICE,new B(xP.restartService)),e.set(y.OPERATIONS_ENUM.CATCHUP,new B(E7)),e.set(y.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(s7.systemInformation)),e.set(y.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Ns,su.deleteAuditLogsBefore)),e.set(y.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(K9)),e.set(y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(VP.createTokens)),e.set(y.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(VP.refreshOperationToken)),e.set(y.OPERATIONS_ENUM.LOGIN,new B($P.login)),e.set(y.OPERATIONS_ENUM.LOGOUT,new B($P.logout)),e.set(y.OPERATIONS_ENUM.GET_CONFIGURATION,new B(YP.getConfiguration)),e.set(y.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(yt.customFunctionsStatus)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(yt.getCustomFunctions)),e.set(y.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(yt.getComponentFile)),e.set(y.OPERATIONS_ENUM.GET_COMPONENTS,new B(yt.getComponents)),e.set(y.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(yt.setComponentFile)),e.set(y.OPERATIONS_ENUM.DROP_COMPONENT,new B(yt.dropComponent)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(yt.getCustomFunction)),e.set(y.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(yt.setCustomFunction)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(yt.dropCustomFunction)),e.set(y.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(yt.addComponent)),e.set(y.OPERATIONS_ENUM.ADD_COMPONENT,new B(yt.addComponent)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(yt.dropCustomFunctionProject)),e.set(y.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(yt.packageComponent)),e.set(y.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(yt.packageComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(yt.deployComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(yt.deployComponent)),e.set(y.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(KP.readTransactionLog)),e.set(y.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Ns,KP.deleteTransactionLogsBefore)),e.set(y.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(WP.installModules)),e.set(y.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(WP.auditModules)),e.set(y.OPERATIONS_ENUM.GET_BACKUP,new B(nn.getBackup)),e}a(f7,"initializeOperationFunctionMap")});var Vd=m((j_e,nv)=>{"use strict";var OT=A(),h7=V(),ou=x(),{handleHDBError:NT,hdb_errors:kd}=W(),{isMainThread:m7}=require("worker_threads"),{Readable:S7}=require("stream"),rv=require("os"),p7=require("util"),T7=SS(),R7=p7.promisify(T7.authorize),sv=tv(),{Gzip:g7}=require("zlib");function A7(e){let t=`Found an uncaught exception with message: ${e.message}. ${rv.EOL}Stack: ${e.stack} ${rv.EOL}Terminating ${m7?"HDB":"thread"}.`;console.error(t),ou.fatal(t),process.exit(1)}a(A7,"handleServerUncaughtException");function O7(e,t,r){if(ou[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:kd.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(O7,"serverErrorHandler");function N7(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=NT(new Error,"Invalid JSON.",kd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(h7.isEmpty(e.body.operation)){let s=NT(new Error,"Request body must include an 'operation' property.",kd.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(N7,"reqBodyValidationHandler");function b7(e,t,r){let s;e.body.operation!==OT.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==OT.OPERATIONS_ENUM.LOGIN&&e.body.operation!==OT.OPERATIONS_ENUM.LOGOUT?R7(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{ou.warn(n),ou.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(NT(n,i,kd.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(b7,"authHandler");async function y7(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=sv.chooseOperation(e.body);let n=await sv.processLocalTransaction(e,s);if(n instanceof S7&&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 g7))}return n}catch(n){throw ou.error(n),n}}a(y7,"handlePostRequest");nv.exports={authHandler:b7,handlePostRequest:y7,handleServerUncaughtException:A7,serverErrorHandler:O7,reqBodyValidationHandler:N7}});var cv=m((tde,av)=>{"use strict";var I7=require("fastify-plugin"),{handlePostRequest:iv,authHandler:w7,reqBodyValidationHandler:C7}=Vd();async function U7(e){e.decorate("hdbCore",{preValidation:[C7,w7],request:t=>ov(iv(t,response)),requestWithoutAuthentication:(t,r)=>ov(iv(t,r,!0))})}a(U7,"hdbCore");async function ov(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(ov,"convertAsyncIterators");av.exports=I7(U7)});var lv=m((sde,uv)=>{"use strict";var bT=require("fs"),xo=Q();xo.initSync();var{CONFIG_PARAMS:au}=A(),D7=1024*1024*1024;function L7(e){let t=xo.get(au.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=xo.get(au.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:D7,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=xo.get(au.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=xo.get(au.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=xo.get(au.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:bT.readFileSync(`${n}`),cert:bT.readFileSync(i)+(o?`
23
23
 
24
- `+bT.readFileSync(o):"")},s.http2=!0}return s}a(D7,"getServerOptions");av.exports=D7});var _v=m((nde,lv)=>{"use strict";var yT=Q();yT.initSync();var{CONFIG_PARAMS:uv}=A();function L7(){let e=yT.get(uv.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=yT.get(uv.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(L7,"getCORSOptions");lv.exports=L7});var fv=m((ode,Ev)=>{"use strict";var dv=Q();dv.initSync();var M7=A();function P7(){return dv.get(M7.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(P7,"getHeaderTimeoutConfig");Ev.exports=P7});var CT={};xe(CT,{customFunctionsServer:()=>H7,handleFile:()=>B7,ready:()=>G7});async function B7(e,t,r,s){if(!tn){let c=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);tn=Iv(c),et.http((await tn).server)}let n=await tn,i=(0,mv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),hv.has(i)||(hv.add(i),n.register(F7(i,o)))}async function H7(){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 q7();let e=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=tn=await Iv(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 q7(){try{Ue.info("Custom Functions starting configuration."),await Av.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function F7(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,Sv.existsSync)(e)&&r.register(gv.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 Iv(e){Ue.info("Custom Functions starting buildServer.");let t=(0,Ov.default)(e),r=(0,pv.default)(t);r.server.headersTimeout=(0,bv.default)(),r.setErrorHandler(yv.serverErrorHandler);let s=(0,Nv.default)();return s&&r.register(Tv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Rv.default),await r.register(v7),await r.after(),Wp(r),Ue.info("Custom Functions completed buildServer."),r}function G7(){if(tn)return tn.then?tn.then(e=>e.ready()):tn.ready()}var mv,Sv,pv,Tv,Rv,gv,IT,wT,Ue,v7,Av,Ov,Nv,bv,yv,tn,hv,wv=Se(()=>{mv=require("path"),Sv=require("fs"),pv=C(require("fastify")),Tv=C(require("@fastify/cors")),Rv=C(Zp()),gv=C(require("@fastify/autoload")),IT=C(Q()),wT=C(A()),Ue=C(x()),v7=C(ov()),Av=C(br()),Ov=C(cv()),Nv=C(_v()),bv=C(fv()),yv=C(Vd());wo();Pr();hv=new Set;a(B7,"handleFile");a(H7,"customFunctionsServer");a(q7,"setUp");a(F7,"buildRouteFolder");a(Iv,"buildServer");a(G7,"ready")});var UT={};xe(UT,{start:()=>x7});function x7(e){let t=e.root;return{handleFile(r,s,n){Uv||(Uv=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=Cv.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,Dv.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))),Cv.set(s,n)}}}var Dv,Cv,Uv,Lv=Se(()=>{Dv=C(require("send")),Cv=new Map;a(x7,"start")});var Hv=m((hde,Bv)=>{"use strict";var k7=require("cluster"),Jr=Q();Jr.initSync();var Pv=A(),dde=require("util"),rn=x(),DT=require("fs"),V7=require("fastify"),Ede=ac(),$7=require("@fastify/cors"),Y7=require("@fastify/compress"),K7=require("@fastify/static"),W7=Zp(),Q7=require("path"),{PACKAGE_ROOT:z7}=A(),J7=pn(),X7=V(),Z7=br(),j7=Ya(),{server:eee}=(Pr(),ee(Xo)),{authHandler:tee,handlePostRequest:ree,serverErrorHandler:see,reqBodyValidationHandler:nee}=Vd(),fde=require("net"),{registerContentHandlers:iee}=(wo(),ee(GM)),oee=1024*1024*1024,vv="TRUE",{HDB_SETTINGS_NAMES:Pi,CONFIG_PARAMS:aee}=Pv,cee=Pi.CORS_ENABLED_KEY,uee="CORS_ACCESSLIST",lee=Pi.SERVER_TIMEOUT_KEY,_ee=Pi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,dee=Pi.SERVER_HEADERS_TIMEOUT_KEY,Eee=Pi.PRIVATE_KEY_KEY,fee=Pi.CERT_KEY,hee=Pi.HTTP_SECURE_ENABLED_KEY,Mi;Bv.exports={hdbServer:Mv,start:Mv};async function Mv(e){try{rn.info("In Fastify server"+process.cwd()),rn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),rn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=k7.isMaster,await mee();let t=Jr.get(hee),r=t&&(t===!0||t.toUpperCase()===vv);Mi=See(r),await Mi.ready(),e||(e={}),e.isOperationsServer=!0,Mi.server.cantCleanupProperly=!0;try{eee.http(Mi.server,e),Mi.server.closeIdleConnections||await Mi.listen({port:0,host:"::"})}catch(s){throw Mi.close(),rn.error(s),rn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),rn.fatal(t),process.exit(1)}}a(Mv,"operationsServer");async function mee(){rn.trace("Configuring HarperDB process."),J7.setSchemaDataToGlobal(),await Z7.setUsersToGlobal(),await j7.getLicense()}a(mee,"setUp");function See(e){rn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=pee(e),r=V7(t);r.server.headersTimeout=Ree(),r.setErrorHandler(see);let s=Tee();s&&r.register($7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(W7),r.register(Y7),r.register(K7,{root:Q7.join(z7,"docs")}),iee(r);let n=Jr.get(Pv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!X7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[nee,tee],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),ree(i,o)}),r.get("/health",()=>"HarperDB is running."),rn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(See,"buildServer");function pee(e){let t=Jr.get(lee),r=Jr.get(_ee),s={bodyLimit:oee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Jr.get(Eee),i=Jr.get(fee),o=Jr.get(aee.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:DT.readFileSync(n),cert:DT.readFileSync(i)+(o?`
24
+ `+bT.readFileSync(o):"")},s.http2=!0}return s}a(L7,"getServerOptions");uv.exports=L7});var Ev=m((ide,dv)=>{"use strict";var yT=Q();yT.initSync();var{CONFIG_PARAMS:_v}=A();function M7(){let e=yT.get(_v.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=yT.get(_v.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(M7,"getCORSOptions");dv.exports=M7});var mv=m((ade,hv)=>{"use strict";var fv=Q();fv.initSync();var P7=A();function v7(){return fv.get(P7.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(v7,"getHeaderTimeoutConfig");hv.exports=v7});var CT={};ke(CT,{customFunctionsServer:()=>q7,handleFile:()=>H7,ready:()=>x7});async function H7(e,t,r,s){if(!on){let c=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);on=Cv(c),et.http((await on).server)}let n=await on,i=(0,pv.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),Sv.has(i)||(Sv.add(i),n.register(G7(i,o)))}async function q7(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await F7();let e=IT.get(wT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=on=await Cv(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function F7(){try{De.info("Custom Functions starting configuration."),await Nv.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function G7(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,Tv.existsSync)(e)&&r.register(Ov.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function Cv(e){De.info("Custom Functions starting buildServer.");let t=(0,bv.default)(e),r=(0,Rv.default)(t);r.server.headersTimeout=(0,Iv.default)(),r.setErrorHandler(wv.serverErrorHandler);let s=(0,yv.default)();return s&&r.register(gv.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(Av.default),await r.register(B7),await r.after(),Wp(r),De.info("Custom Functions completed buildServer."),r}function x7(){if(on)return on.then?on.then(e=>e.ready()):on.ready()}var pv,Tv,Rv,gv,Av,Ov,IT,wT,De,B7,Nv,bv,yv,Iv,wv,on,Sv,Uv=pe(()=>{pv=require("path"),Tv=require("fs"),Rv=U(require("fastify")),gv=U(require("@fastify/cors")),Av=U(Zp()),Ov=U(require("@fastify/autoload")),IT=U(Q()),wT=U(A()),De=U(x()),B7=U(cv()),Nv=U(Ir()),bv=U(lv()),yv=U(Ev()),Iv=U(mv()),wv=U(Vd());Uo();Br();Sv=new Set;a(H7,"handleFile");a(q7,"customFunctionsServer");a(F7,"setUp");a(G7,"buildRouteFolder");a(Cv,"buildServer");a(x7,"ready")});var UT={};ke(UT,{start:()=>k7});function k7(e){let t=e.root;return{handleFile(r,s,n){Lv||(Lv=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=Dv.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,Mv.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))),Dv.set(s,n)}}}var Mv,Dv,Lv,Pv=pe(()=>{Mv=U(require("send")),Dv=new Map;a(k7,"start")});var Fv=m((mde,qv)=>{"use strict";var V7=require("cluster"),Zr=Q();Zr.initSync();var Bv=A(),Ede=require("util"),an=x(),DT=require("fs"),$7=require("fastify"),fde=cc(),Y7=require("@fastify/cors"),K7=require("@fastify/compress"),W7=require("@fastify/static"),Q7=Zp(),z7=require("path"),{PACKAGE_ROOT:J7}=A(),X7=An(),Z7=V(),j7=Ir(),eee=Ka(),{server:tee}=(Br(),ee(Zo)),{authHandler:ree,handlePostRequest:see,serverErrorHandler:nee,reqBodyValidationHandler:iee}=Vd(),hde=require("net"),{registerContentHandlers:oee}=(Uo(),ee(kM)),aee=1024*1024*1024,Hv="TRUE",{HDB_SETTINGS_NAMES:Hi,CONFIG_PARAMS:cee}=Bv,uee=Hi.CORS_ENABLED_KEY,lee="CORS_ACCESSLIST",_ee=Hi.SERVER_TIMEOUT_KEY,dee=Hi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,Eee=Hi.SERVER_HEADERS_TIMEOUT_KEY,fee=Hi.PRIVATE_KEY_KEY,hee=Hi.CERT_KEY,mee=Hi.HTTP_SECURE_ENABLED_KEY,Bi;qv.exports={hdbServer:vv,start:vv};async function vv(e){try{an.info("In Fastify server"+process.cwd()),an.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),an.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=V7.isMaster,await See();let t=Zr.get(mee),r=t&&(t===!0||t.toUpperCase()===Hv);Bi=pee(r),await Bi.ready(),e||(e={}),e.isOperationsServer=!0,Bi.server.cantCleanupProperly=!0;try{tee.http(Bi.server,e),Bi.server.closeIdleConnections||await Bi.listen({port:0,host:"::"})}catch(s){throw Bi.close(),an.error(s),an.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),an.fatal(t),process.exit(1)}}a(vv,"operationsServer");async function See(){an.trace("Configuring HarperDB process."),X7.setSchemaDataToGlobal(),await j7.setUsersToGlobal(),await eee.getLicense()}a(See,"setUp");function pee(e){an.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=Tee(e),r=$7(t);r.server.headersTimeout=gee(),r.setErrorHandler(nee);let s=Ree();s&&r.register(Y7,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(Q7),r.register(K7),r.register(W7,{root:z7.join(J7,"docs")}),oee(r);let n=Zr.get(Bv.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!Z7.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[iee,ree],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),see(i,o)}),r.get("/health",()=>"HarperDB is running."),an.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(pee,"buildServer");function Tee(e){let t=Zr.get(_ee),r=Zr.get(dee),s={bodyLimit:aee,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Zr.get(fee),i=Zr.get(hee),o=Zr.get(cee.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:DT.readFileSync(n),cert:DT.readFileSync(i)+(o?`
25
25
 
26
- `+DT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(pee,"getServerOptions");function Tee(){let e=Jr.get(cee),t=Jr.get(uee),r;return e&&(e===!0||e.toUpperCase()===vv)&&(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(Tee,"getCORSOpts");function Ree(){return Jr.get(dee)}a(Ree,"getHeaderTimeoutConfig")});var zv=m((Tde,Qv)=>{"use strict";var{decode:gee}=require("msgpackr"),{isMainThread:Aee,parentPort:Oee,threadId:Sde}=require("worker_threads"),LT=it(),Go=Be(),Nee=A(),au=x(),qv=Q(),xv=A();st();var bee=Vs(),{recordAction:yee,recordActionBinary:Iee}=(di(),ee(Xa)),{publishToStream:wee}=LT,pde={durable:Go.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Go.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Cee,Uee,Dee,kv,Vv;Qv.exports={initialize:$v,workQueueListener:Wv,setSubscription:Lee,setIgnoreOrigin:Pee,getDatabaseSubscriptions:Mee};async function $v(){Vv=!0,au.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await LT.getNATSReferences();Cee=e,Uee=e.info.server_name,Dee=t,kv=r}a($v,"initialize");var Yd=new Map;function Lee(e,t,r){let s=Yd.get(e);s||Yd.set(e,s=new Map),s.set(t,r),Vv||$v().then(Wv)}a(Lee,"setSubscription");function Mee(){return Yd}a(Mee,"getDatabaseSubscriptions");var Yv;function Pee(e){Yv=e}a(Pee,"setIgnoreOrigin");var Kv=100,Fv=new Array(Kv),$d=0;async function Wv(){let t=await(await kv.consumers.get(Go.WORK_QUEUE_CONSUMER_NAMES.stream_name,Go.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await Fv[$d],Fv[$d]=vee(r).catch(s=>{au.error(s)}),++$d>=Kv&&($d=0)}a(Wv,"workQueueListener");Aee||Oee.on("message",async e=>{let{type:t}=e;t===xv.ITC_EVENT_TYPES.SHUTDOWN&&LT.closeConnection()});async function vee(e){let t=gee(e.data);yee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Go.MSG_HEADERS.ORIGIN)===qv.get(Nee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!Yv;if(Iee(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;au.trace("processing message:",i,o,u,(l?"records: "+l.map(g=>g.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),au.trace(`messageProcessor nats msg id: ${e.headers.get(Go.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:S}=d||{},T=Yd.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:Gv(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:S});else{let g=l.map((O,k)=>({type:Gv(i),value:O,id:_?.[k],table:u}));for(;c;)g.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:g,table:u,timestamp:f,onCommit:E,user:h,nodeName:S})}qv.get(xv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&wee(e.subject.split(".").slice(0,-1).join("."),bee.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){au.error(i)}e.ack()}a(vee,"messageProcessor");function Gv(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(Gv,"convertOperation")});var qT={};xe(qT,{disableNATS:()=>Hee,setNATSReplicator:()=>MT,start:()=>Bee});function Bee(){Wd.default.get(Qd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Fee()}function Hee(e=!0){eB=e}function Fee(){if(eB)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];MT(n,r,i)}}Om((r,s)=>{MT(r.tableName,r.databaseName,r),s&&rB(r)}),!Jv&&(Jv=!0)}function MT(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){rB(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,Xv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<qee}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 Kd(i.transaction,i)),o.user=i.user):o=tB),o}a(n,"getNATSTransaction")}function rB(e){let t=Wd.default.get(Qd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,HT.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 vT,BT,HT,Xv,Zv,Wd,Qd,jv,eB,qee,tB,Jv,Kd,PT,sB=Se(()=>{de();jr();vT=C(it()),BT=C(Be()),HT=C(Vs());_a();Xv=C(zv()),Zv=C(qt()),Wd=C(Q()),Qd=C(A()),jv=C(x());a(Bee,"start");a(Hee,"disableNATS");qee=2;a(Fee,"assignReplicationSource");a(MT,"setNATSReplicator");a(rB,"publishSchema");Kd=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=Wd.default.get(Qd.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||(jv.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,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,HT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},PT=class extends Kd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,Zv.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};tB=new PT});async function iB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await FT.getResource(e,{});n=new xT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await FT.get(e);i&&i.delete()}n=new Jd(e,t)}return n}function GT(){return zd++,zd>65500&&(zd=1),zd}var nB,cu,FT,zd,Jd,xT,oB=Se(()=>{de();ma();nB=C(qt()),cu=C(x());Wn();FT=nt({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(iB,"getSession");zd=1;a(GT,"getNextMessageId");Jd=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=En.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 S=h.path,T=h.Resource,g=await Ke(f,async()=>{let O=await T.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)):$=GT();let U=k.id;Array.isArray(U)&&(U=Gi(U)),U==null&&(U=""),this.listener(S+"/"+U,k.value,$,t)}catch($){(0,cu.warn)($)}})(),O});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){return GT()}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=En.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 Ke(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=[]}},xT=class extends Jd{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=GT();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,cu.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,nB.getNextMonotonicTime)()),(0,cu.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),FT.put(this.sessionRecord)),t.qos}}});var $T={};xe($T,{start:()=>xee});async function xee({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:_}=uB(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,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;Gee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,lB.getSuperUser)());let{onMessage:u,onClose:l}=uB(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function uB(e,t,r,s,n){cB||(cB=!0,fm(_=>{_.push({metric:"mqtt-connections",connections:kT})})),kT++;let i,o={protocolVersion:4},c=(0,Xd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){kT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await et.auth(_.username,_.password.toString()),(0,VT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&aB.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,VT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&aB.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.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=iB({user:s,..._}),i=await i}catch(O){return(0,sn.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,sn.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,sn.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",S=e.deserialize||(e.deserialize=Mo(r?.headers["content-type"])),T=_.payload?.length>0?S(_.payload):void 0,g;try{g=await i.publish(_,T)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:g===!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 S=(0,Xd.generate)(f,o);t(S),_i(S.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Xd,lB,VT,nn,sn,aB,Gee,cB,kT,_B=Se(()=>{Xd=require("mqtt-packet");oB();lB=C(br());wo();di();Pr();VT=C(Q()),nn=C(A()),sn=C(x()),aB=(0,sn.loggerWithTag)("auth-event"),Gee=!0;a(xee,"start");kT=0;a(uB,"onSocket")});var gB={};xe(gB,{loadComponent:()=>Zd,loadComponentDirectories:()=>RB});function RB(e,t){t&&(KT=t),e&&(WT=e);let r=[];if((0,As.existsSync)(YT)){let n=(0,As.readdirSync)(YT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(YT,o);r.push(Zd(c,KT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Zd(s,KT,s)),Promise.all(r).then(()=>{TB=!0})}async function Zd(e,t,r,s,n){if(!EB.has(e)){EB.set(e,!0),n&&(WT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,As.existsSync)(o)?i=(0,fB.parseDocument)((0,As.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Yee;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,pB.getHdbBasePath)().length){f=null;break}if(f)_=await Zd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=$ee[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,nt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,S=!f?.https&&f?.port;if(uu.isMainThread&&(_=await _.startOnMainThread?.({server:et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_,s&&f))for(let T of[S,h])try{if(+T&&!dB.includes(T)){dB.push(T);let g=QT.get(zT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);JT(T,g)}}catch(g){console.error("Error listening on socket",T,g,u)}if(t.isWorker&&(_=await _.start?.({server:et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_),WT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,SB.handleHDBError)("Can not reference parent directories");let T=(0,Mr.join)(e,l.files);for(let g of await(0,hB.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=g,$=(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 Vee(O);uu.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else uu.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 lu(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new lu(E),null,!0)}}if(uu.isMainThread&&!TB&&(0,mB.watchDir)(e,async()=>RB()),i.extensionModule)return await r_((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new lu(i))}}}var As,Mr,uu,fB,QT,zT,hB,mB,SB,pB,kee,Vee,YT,WT,TB,KT,$ee,Yee,dB,EB,lu,AB=Se(()=>{As=require("fs"),Mr=require("path"),uu=require("worker_threads"),fB=require("yaml"),QT=C(Q()),zT=C(A());Rw();Nw();bw();VM();wv();Lv();hB=C(require("fast-glob")),mB=C(st());Im();Pr();SB=C(W());jr();de();XT();pB=C(Q()),kee=C(Hv());sd();sB();_B();({readFile:Vee}=As.promises),YT=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),WT=new Map;a(RB,"loadComponentDirectories");$ee={REST:Xp,graphqlSchema:ym,jsResource:Cm,fastifyRoutes:CT,login:Dm,static:UT,operationsApi:kee,customFunctions:{},clustering:qT,authentication:qc,mqtt:$T},Yee={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},dB=[],EB=new Map;a(Zd,"loadComponent");lu=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 wB=m((Wde,IB)=>{"use strict";var tE=require("fs-extra"),ZT=require("path"),jd=x(),OB=V(),eE=A(),yB=Q(),Kee=Tr();IB.exports=Wee;async function Wee(){let e=Qee(),t=yB.get(eE.CONFIG_PARAMS.ROOTPATH),r=ZT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+eE.PACKAGE_ROOT}},n=ZT.join(t,"node_modules");await tE.ensureDir(n);let i,o=!0,c=!1;try{i=await tE.readJson(r)}catch(u){if(OB.isEmptyOrZeroLength(e))return;if(u.code!==eE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!OB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await NB(l);s.dependencies[u]=_+l}if(!o){jd.notify("Installing components"),await bB(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await NB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(jd.notify("Removing component",u),c=!0);c&&(jd.notify("Updating components."),await bB(r,s))}a(Wee,"installComponents");function Qee(){let e=Kee.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(Qee,"getComponentsConfig");async function NB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZT.extname(e)||await tE.pathExists(e)?"file:":"github:"}a(NB,"getPkgPrefix");async function bB(e,t){jd.trace("npm installing components package.json",t),await tE.writeFile(e,JSON.stringify(t,null," ")),await _d().installAllRootModules(yB.get(eE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(bB,"installPackages")});var rE=m((zde,UB)=>{var{isMainThread:CB}=require("worker_threads"),{getTables:zee}=(de(),ee(Ne)),{loadComponentDirectories:Jee,loadComponent:Xee}=(AB(),ee(gB)),{resetResources:Zee}=(ma(),ee(MA)),jee=wB(),ete=Tr(),{dirname:tte}=require("path"),{getConnection:rte}=it(),ste=Q(),nte=A(),jT=new Map;async function ite(e=!1){!CB&&ste.get(nte.CONFIG_PARAMS.CLUSTERING_ENABLED)&&rte(),CB&&await jee();let t=Zee();zee(),t.isWorker=e,await Xee(tte(ete.getConfigFilePath()),t,"hdb",!0,jT),await Jee(jT,t);let r=[];for(let[s]of jT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ite,"loadRootComponents");UB.exports.loadRootComponents=ite});var st=m((Zde,Hn)=>{"use strict";var{Worker:ote,MessageChannel:ate,parentPort:Os,isMainThread:nR,threadId:cte,workerData:_u}=require("worker_threads"),{PACKAGE_ROOT:ute}=A(),{join:MB,isAbsolute:lte,extname:nE}=require("path"),{server:_te}=(Pr(),ee(Xo)),{watch:dte,readdir:Ete}=require("fs/promises"),{totalmem:DB}=require("os"),iR=A(),xo=x(),Xde=A(),{randomBytes:fte}=require("crypto"),hte=1024*1024,Bn=[],vn=[],mte=50,PB=1e4,Ste="restart",vB="request_thread_info",BB="resource_report",HB="thread_info",qB="added-port",pte="ack",eR;Hn.exports={startWorker:tR,restartWorkers:oR,shutdownWorkers:Ate,workers:Bn,setMonitorListener:Ute,onMessageFromWorkers:Ote,onMessageByType:Nte,broadcast:bte,broadcastWithAcknowledgement:Ite,setChildListenerByType:gte,getWorkerIndex:GB,getTicketKeys:xB,setMainIsWorker:Tte,restartNumber:_u?.restartNumber||1};var FB;function GB(){return _u?_u.workerIndex:FB?0:void 0}a(GB,"getWorkerIndex");function Tte(e){FB=e}a(Tte,"setMainIsWorker");var sE;function xB(){return sE||(sE=nR?fte(48):_u.ticketKeys,sE)}a(xB,"getTicketKeys");Object.defineProperty(_te,"workerIndex",{get(){return GB()}});var kB={[vB](e,t){wte(t)},[BB](e,t){Cte(t,e)}};function tR(e,t={}){let r=process.constrainedMemory?.()||DB();r=Math.min(r,DB());let s=Math.max(Math.floor(r/hte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of vn){let{port1:u,port2:l}=new ate;c.postMessage({type:qB,port:u},[u]),i.push(l)}nE(e)||(e+=".js");let o=new ote(lte(e)?e:MB(ute,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:Hn.exports.restartNumber,ticketKeys:xB()},transferList:i},t));return oE(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{tR(e,t)},o.on("error",c=>{console.error("Worker error:",c),xo.error("Worker error:",c)}),o.on("exit",c=>{Bn.splice(Bn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<mte?(t.unexpectedRestarts=o.unexpectedRestarts+1,tR(e,t)):xo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{kB[c.type]?.(c,o)}),Bn.push(o),Lte(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(tR,"startWorker");var Rte=[iR.THREAD_TYPES.HTTP];async function oR(e=null,t=2,r=!0){if(nR){if(r){let{loadRootComponents:n}=rE();await n()}Hn.exports.restartNumber++,t<1&&(t=t*Bn.length);let s=[];for(let n of Bn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Hn.exports.restartNumber,type:iR.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=Rte.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),PB*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:Ste,workerType:e})}a(oR,"restartWorkers");function gte(e,t){kB[e]=t}a(gte,"setChildListenerByType");function Ate(e){return oR(e,1/0,!1)}a(Ate,"shutdownWorkers");var VB=[];function Ote(e){VB.push(e)}a(Ote,"onMessageFromWorkers");var rR=new Map;function Nte(e,t){let r=rR.get(e);r||rR.set(e,r=[]),r.push(t)}a(Nte,"onMessageByType");function bte(e){for(let t of vn)try{t.postMessage(e)}catch(r){xo.error("Unable to send message to worker",r)}}a(bte,"broadcast");var iE=new Map,yte=1;function Ite(e){return new Promise(t=>{let r=0;for(let s of vn)try{let n=yte++,i=a(()=>{iE.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,iE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of iE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){xo.error("Unable to send message to worker",n)}r===0&&t()})}a(Ite,"broadcastWithAcknowledgement");function wte(e){e.postMessage({type:HB,workers:$B()})}a(wte,"sendThreadInfo");function $B(){let e=Date.now();return Bn.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($B,"getChildWorkerInfo");function Cte(e,t){e.resources=t,e.resources.updated=Date.now()}a(Cte,"recordResourceReport");var sR;function Ute(e){sR=e}a(Ute,"setMonitorListener");var Dte=1e3,LB=!1;function Lte(){LB||(LB=!0,setInterval(()=>{for(let e of Bn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}sR&&sR()},Dte).unref())}a(Lte,"startMonitoring");var Mte=1e3;if(Os){oE(Os);for(let e of _u.addPorts)oE(e);setInterval(()=>{let e=process.memoryUsage();Os.postMessage({type:BB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Mte).unref(),eR=a(()=>new Promise((e,t)=>{Os.on("message",r),Os.postMessage({type:vB});function r(s){s.type===HB&&(Os.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eR=$B;Hn.exports.getThreadInfo=eR;function oE(e,t){vn.push(e),e.on("message",r=>{if(r.type===qB)oE(r.port);else if(r.type===pte){let s=iE.get(r.id);s&&s()}else{for(let n of VB)n(r,e);let s=rR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){xo.error(i)}}}).on("close",()=>{vn.splice(vn.indexOf(e),1)}).on("exit",()=>{vn.splice(vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(oE,"addPort");if(nR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await Ete(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(MB(s,i.name));try{for await(let{filename:i}of dte(s,{persistent:!1}))(nE(i)===".ts"||nE(i)===".js"||nE(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await oR(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Hn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Os.on("message",async e=>{let{type:t}=e;t===iR.ITC_EVENT_TYPES.SHUTDOWN&&(Hn.exports.restartNumber=e.restartNumber,Os.unref(),setTimeout(()=>{xo.warn("Thread did not voluntarily terminate",cte),process.exit(0)},PB).unref())})});var zB=m(_E=>{"use strict";var{isMainThread:Pte,parentPort:Eu,threadId:vte}=require("worker_threads"),{Socket:Bte}=require("net"),{createServer:Hte,IncomingMessage:qte}=require("http"),{createServer:Fte}=require("https"),{readFileSync:ko}=require("fs"),aE=x(),Ns=Q(),Vo=A(),{server:lE}=(Pr(),ee(Xo)),{WebSocketServer:Gte}=require("ws"),{createServer:xte}=require("tls"),{getTicketKeys:kte}=st(),{Headers:Vte}=(Z_(),ee(TL)),{recordAction:aR,recordActionBinary:$te}=(di(),ee(Xa));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:eEe,CONFIG_PARAMS:tEe}=Vo;Ns.initSync();var Fn={};_E.registerServer=fR;_E.httpServer=hR;_E.deliverSocket=ER;lE.http=hR;lE.request=zte;lE.socket=Jte;lE.ws=Xte;var cR=[],uR=[],Yte,du={},cE={},Kte=[],lR=[];Pte||rE().loadRootComponents(!0).then(()=>{Eu.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)ER(r,t,s);else if(e.requestId)Wte(e);else if(e.type===Vo.ITC_EVENT_TYPES.SHUTDOWN)for(let n in Fn){let i=Fn[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||aE.warn("Had to forcefully exit the thread",vte),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),Eu.postMessage({type:Vo.ITC_EVENT_TYPES.CHILD_STARTED})});function ER(e,t,r){let s=e?.read?e:new Bte({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=Fn[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=Fn[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(aE.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var YB=new Map;function Wte(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=YB.get(n),r){case"connection":i=ER(void 0,t),YB.set(n,i),i.write=(c,u,l)=>(Eu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(Eu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),Eu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Wte,"proxyRequest");function fR(e,t){+t||(t=parseInt(Ns.get(Vo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=Fn[t];if(r){let s=r.lastServer||r;s.off("unhandled",KB),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else Fn[t]=e;e.on("unhandled",KB)}a(fR,"registerServer");function WB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[{port:parseInt(Ns.get(Vo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:Ns.get(Vo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(WB,"getPorts");function hR(e,t){for(let{port:r,secure:s}of WB(t))QB(r,s,t?.isOperationsServer),typeof e=="function"?lR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):fR(e,r),cE[r]=_R(lR,r),Yte=_R(Kte,r)}a(hR,"httpServer");function QB(e,t,r){if(!du[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=Ns.get(n+"_tls_privatekey"),o=Ns.get(n+"_tls_certificate"),c=Ns.get(n+"_tls_certificateauthority");s={key:ko(i),cert:ko(o)+(c?`
26
+ `+DT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(Tee,"getServerOptions");function Ree(){let e=Zr.get(uee),t=Zr.get(lee),r;return e&&(e===!0||e.toUpperCase()===Hv)&&(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(Ree,"getCORSOpts");function gee(){return Zr.get(Eee)}a(gee,"getHeaderTimeoutConfig")});var Xv=m((Rde,Jv)=>{"use strict";var{decode:Aee}=require("msgpackr"),{isMainThread:Oee,parentPort:Nee,threadId:pde}=require("worker_threads"),LT=it(),ko=He(),bee=A(),cu=x(),Gv=Q(),Vv=A();st();var yee=Ws(),{recordAction:Iee,recordActionBinary:wee}=(mi(),ee(Za)),{publishToStream:Cee}=LT,Tde={durable:ko.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:ko.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Uee,Dee,Lee,$v,Yv;Jv.exports={initialize:Kv,workQueueListener:zv,setSubscription:Mee,setIgnoreOrigin:vee,getDatabaseSubscriptions:Pee};async function Kv(){Yv=!0,cu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await LT.getNATSReferences();Uee=e,Dee=e.info.server_name,Lee=t,$v=r}a(Kv,"initialize");var Yd=new Map;function Mee(e,t,r){let s=Yd.get(e);s||Yd.set(e,s=new Map),s.set(t,r),Yv||Kv().then(zv)}a(Mee,"setSubscription");function Pee(){return Yd}a(Pee,"getDatabaseSubscriptions");var Wv;function vee(e){Wv=e}a(vee,"setIgnoreOrigin");var Qv=100,xv=new Array(Qv),$d=0;async function zv(){let t=await(await $v.consumers.get(ko.WORK_QUEUE_CONSUMER_NAMES.stream_name,ko.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await xv[$d],xv[$d]=Bee(r).catch(s=>{cu.error(s)}),++$d>=Qv&&($d=0)}a(zv,"workQueueListener");Oee||Nee.on("message",async e=>{let{type:t}=e;t===Vv.ITC_EVENT_TYPES.SHUTDOWN&&LT.closeConnection()});async function Bee(e){let t=Aee(e.data);Iee(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(ko.MSG_HEADERS.ORIGIN)===Gv.get(bee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!Wv;if(wee(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;cu.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),cu.trace(`messageProcessor nats msg id: ${e.headers.get(ko.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:S}=d||{},T=Yd.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:kv(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:S});else{let R=l.map((O,q)=>({type:kv(i),value:O,id:_?.[q],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:S})}Gv.get(Vv.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&Cee(e.subject.split(".").slice(0,-1).join("."),yee.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){cu.error(i)}e.ack()}a(Bee,"messageProcessor");function kv(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(kv,"convertOperation")});var qT={};ke(qT,{disableNATS:()=>qee,setNATSReplicator:()=>MT,start:()=>Hee});function Hee(){Wd.default.get(Qd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Gee()}function qee(e=!0){rB=e}function Gee(){if(rB)return;let e=Vr(),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];MT(n,r,i)}}Om((r,s)=>{MT(r.tableName,r.databaseName,r),s&&nB(r)}),!Zv&&(Zv=!0)}function MT(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[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ce],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ce],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ce]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ce],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ce]})}static defineSchema(o){nB(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 ts;return(0,jv.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Fee}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 Kd(i.transaction,i)),o.user=i.user):o=sB),o}a(n,"getNATSTransaction")}function nB(e){let t=Wd.default.get(Qd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,HT.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 vT,BT,HT,jv,eB,Wd,Qd,tB,rB,Fee,sB,Zv,Kd,PT,iB=pe(()=>{Ee();rs();vT=U(it()),BT=U(He()),HT=U(Ws());da();jv=U(Xv()),eB=U(Ft()),Wd=U(Q()),Qd=U(A()),tB=U(x());a(Hee,"start");a(qee,"disableNATS");Fee=2;a(Gee,"assignReplicationSource");a(MT,"setNATSReplicator");a(nB,"publishSchema");Kd=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=Wd.default.get(Qd.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||(tB.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,vT.publishToStream)(`${BT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,HT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},PT=class extends Kd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,eB.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};sB=new PT});async function aB({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await FT.getResource(e,{});n=new xT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await FT.get(e);i&&i.delete()}n=new Jd(e,t)}return n}function GT(){return zd++,zd>65500&&(zd=1),zd}var oB,uu,FT,zd,Jd,xT,cB=pe(()=>{Ee();Sa();oB=U(Ft()),uu=U(x());Xn();FT=nt({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(aB,"getSession");zd=1;a(GT,"getNextMessageId");Jd=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=Sn.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 S=h.path,T=h.Resource,R=await We(f,async()=>{let O=await T.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 q of O)try{let $;if(q.type&&q.type!=="put"&&q.type!=="delete"&&q.type!=="message"||s&&!s(q))continue;r?(q.topic=n,$=this.needsAcknowledge(q)):$=GT();let w=q.id;Array.isArray(w)&&(w=ki(w)),w==null&&(w=""),this.listener(S+"/"+w,q.value,$,t)}catch($){(0,uu.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return GT()}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=Sn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return We(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},xT=class extends Jd{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=GT();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,uu.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,oB.getNextMonotonicTime)()),(0,uu.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),FT.put(this.sessionRecord)),t.qos}}});var $T={};ke($T,{start:()=>kee});async function kee({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:_}=_B(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,cn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;xee&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,dB.getSuperUser)());let{onMessage:u,onClose:l}=_B(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,cn.info)("Socket error",_)})},{port:t,securePort:s})}function _B(e,t,r,s,n){lB||(lB=!0,fm(_=>{_.push({metric:"mqtt-connections",connections:kT})})),kT++;let i,o={protocolVersion:4},c=(0,Xd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){kT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await et.auth(_.username,_.password.toString()),(0,VT.get)(un.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&uB.notify({username:s.username,status:un.AUTH_AUDIT_STATUS.SUCCESS,type:un.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,VT.get)(un.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&uB.error({username:s.username,status:un.AUTH_AUDIT_STATUS.FAILURE,type:un.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=aB({user:s,..._}),i=await i}catch(O){return(0,cn.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,q,$,w)=>{try{let I=O.indexOf("/",1),D=I>0?O.slice(0,I):O;d({cmd:"publish",topic:O,payload:E(q),messageId:$||Math.floor(Math.random()*1e8),qos:w.qos},D)}catch(I){(0,cn.error)(I),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let q;try{q=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,cn.error)($),q=128}f.push(q)}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",S=e.deserialize||(e.deserialize=vo(r?.headers["content-type"])),T=_.payload?.length>0?S(_.payload):void 0,R;try{R=await i.publish(_,T)}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 S=(0,Xd.generate)(f,o);t(S),hi(S.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 Xd,dB,VT,un,cn,uB,xee,lB,kT,EB=pe(()=>{Xd=require("mqtt-packet");cB();dB=U(Ir());Uo();mi();Br();VT=U(Q()),un=U(A()),cn=U(x()),uB=(0,cn.loggerWithTag)("auth-event"),xee=!0;a(kee,"start");kT=0;a(_B,"onSocket")});var OB={};ke(OB,{loadComponent:()=>Zd,loadComponentDirectories:()=>AB});function AB(e,t){t&&(KT=t),e&&(WT=e);let r=[];if((0,bs.existsSync)(YT)){let n=(0,bs.readdirSync)(YT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,vr.join)(YT,o);r.push(Zd(c,KT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Zd(s,KT,s)),Promise.all(r).then(()=>{gB=!0})}async function Zd(e,t,r,s,n){if(!hB.has(e)){hB.set(e,!0),n&&(WT=n);try{let i,o=(0,vr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,bs.existsSync)(o)?i=(0,mB.parseDocument)((0,bs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Kee;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,bs.existsSync)(f=(0,vr.join)(E,"node_modules",u));)if(E=(0,vr.dirname)(E),E.length<(0,RB.getHdbBasePath)().length){f=null;break}if(f)_=await Zd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=Yee[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,nt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,S=!f?.https&&f?.port;if(lu.isMainThread&&(_=await _.startOnMainThread?.({server:et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_,s&&f))for(let T of[S,h])try{if(+T&&!fB.includes(T)){fB.push(T);let R=QT.get(zT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);JT(T,R)}}catch(R){console.error("Error listening on socket",T,R,u)}if(t.isWorker&&(_=await _.start?.({server:et,ensureTable:E,port:S,securePort:h,resources:t,...l})||_),WT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,TB.handleHDBError)("Can not reference parent directories");let T=(0,vr.join)(e,l.files);for(let R of await(0,SB.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:q}=R,$=(0,vr.relative)(e,O),w=(0,vr.basename)(e),I=l.path||"/";I=I.startsWith("/")?I:I.startsWith("./")?"/"+w+I.slice(2):I==="."?"/"+w:"/"+w+"/"+I,I+=(I.endsWith("/")?"":"/")+$;try{if(q.isFile()){let D=await $ee(O);lu.isMainThread&&await _.setupFile?.(D,I,O,t),t.isWorker&&await _.handleFile?.(D,I,O,t)}else lu.isMainThread&&await _.setupDirectory?.(I,O,t),t.isWorker&&await _.handleDirectory?.(I,O,t)}catch(D){console.error(`Could not load ${q.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,D),t.set(l.path||"/",new _u(D))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new _u(E),null,!0)}}if(lu.isMainThread&&!gB&&(0,pB.watchDir)(e,async()=>AB()),i.extensionModule)return await r_((0,vr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new _u(i))}}}var bs,vr,lu,mB,QT,zT,SB,pB,TB,RB,Vee,$ee,YT,WT,gB,KT,Yee,Kee,fB,hB,_u,NB=pe(()=>{bs=require("fs"),vr=require("path"),lu=require("worker_threads"),mB=require("yaml"),QT=U(Q()),zT=U(A());Aw();yw();Iw();YM();Uv();Pv();SB=U(require("fast-glob")),pB=U(st());Im();Br();TB=U(W());rs();Ee();XT();RB=U(Q()),Vee=U(Fv());sd();iB();EB();({readFile:$ee}=bs.promises),YT=QT.get(zT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),WT=new Map;a(AB,"loadComponentDirectories");Yee={REST:Xp,graphqlSchema:ym,jsResource:Cm,fastifyRoutes:CT,login:Dm,static:UT,operationsApi:Vee,customFunctions:{},clustering:qT,authentication:Fc,mqtt:$T},Kee={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},fB=[],hB=new Map;a(Zd,"loadComponent");_u=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 UB=m((Qde,CB)=>{"use strict";var tE=require("fs-extra"),ZT=require("path"),jd=x(),bB=V(),eE=A(),wB=Q(),Wee=gr();CB.exports=Qee;async function Qee(){let e=zee(),t=wB.get(eE.CONFIG_PARAMS.ROOTPATH),r=ZT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+eE.PACKAGE_ROOT}},n=ZT.join(t,"node_modules");await tE.ensureDir(n);let i,o=!0,c=!1;try{i=await tE.readJson(r)}catch(u){if(bB.isEmptyOrZeroLength(e))return;if(u.code!==eE.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!bB.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await yB(l);s.dependencies[u]=_+l}if(!o){jd.notify("Installing components"),await IB(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await yB(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(jd.notify("Removing component",u),c=!0);c&&(jd.notify("Updating components."),await IB(r,s))}a(Qee,"installComponents");function zee(){let e=Wee.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(zee,"getComponentsConfig");async function yB(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ZT.extname(e)||await tE.pathExists(e)?"file:":"github:"}a(yB,"getPkgPrefix");async function IB(e,t){jd.trace("npm installing components package.json",t),await tE.writeFile(e,JSON.stringify(t,null," ")),await _d().installAllRootModules(wB.get(eE.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(IB,"installPackages")});var rE=m((Jde,LB)=>{var{isMainThread:DB}=require("worker_threads"),{getTables:Jee}=(Ee(),ee(be)),{loadComponentDirectories:Xee,loadComponent:Zee}=(NB(),ee(OB)),{resetResources:jee}=(Sa(),ee(MA)),ete=UB(),tte=gr(),{dirname:rte}=require("path"),{getConnection:ste}=it(),nte=Q(),ite=A(),jT=new Map;async function ote(e=!1){!DB&&nte.get(ite.CONFIG_PARAMS.CLUSTERING_ENABLED)&&ste(),DB&&await ete();let t=jee();Jee(),t.isWorker=e,await Zee(rte(tte.getConfigFilePath()),t,"hdb",!0,jT),await Xee(jT,t);let r=[];for(let[s]of jT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(ote,"loadRootComponents");LB.exports.loadRootComponents=ote});var st=m((jde,kn)=>{"use strict";var{Worker:ate,MessageChannel:cte,parentPort:ys,isMainThread:nR,threadId:ute,workerData:du}=require("worker_threads"),{PACKAGE_ROOT:lte}=A(),{join:vB,isAbsolute:_te,extname:nE}=require("path"),{server:dte}=(Br(),ee(Zo)),{watch:Ete,readdir:fte}=require("fs/promises"),{totalmem:MB}=require("os"),iR=A(),Vo=x(),Zde=A(),{randomBytes:hte}=require("crypto"),mte=1024*1024,xn=[],Gn=[],Ste=50,BB=1e4,pte="restart",HB="request_thread_info",qB="resource_report",FB="thread_info",GB="added-port",Tte="ack",eR;kn.exports={startWorker:tR,restartWorkers:oR,shutdownWorkers:Ote,workers:xn,setMonitorListener:Dte,onMessageFromWorkers:Nte,onMessageByType:bte,broadcast:yte,broadcastWithAcknowledgement:wte,setChildListenerByType:Ate,getWorkerIndex:kB,getTicketKeys:VB,setMainIsWorker:Rte,restartNumber:du?.restartNumber||1};var xB;function kB(){return du?du.workerIndex:xB?0:void 0}a(kB,"getWorkerIndex");function Rte(e){xB=e}a(Rte,"setMainIsWorker");var sE;function VB(){return sE||(sE=nR?hte(48):du.ticketKeys,sE)}a(VB,"getTicketKeys");Object.defineProperty(dte,"workerIndex",{get(){return kB()}});var $B={[HB](e,t){Cte(t)},[qB](e,t){Ute(t,e)}};function tR(e,t={}){let r=process.constrainedMemory?.()||MB();r=Math.min(r,MB());let s=Math.max(Math.floor(r/mte/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Gn){let{port1:u,port2:l}=new cte;c.postMessage({type:GB,port:u},[u]),i.push(l)}nE(e)||(e+=".js");let o=new ate(_te(e)?e:vB(lte,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:kn.exports.restartNumber,ticketKeys:VB()},transferList:i},t));return oE(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{tR(e,t)},o.on("error",c=>{console.error("Worker error:",c),Vo.error("Worker error:",c)}),o.on("exit",c=>{xn.splice(xn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<Ste?(t.unexpectedRestarts=o.unexpectedRestarts+1,tR(e,t)):Vo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{$B[c.type]?.(c,o)}),xn.push(o),Mte(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(tR,"startWorker");var gte=[iR.THREAD_TYPES.HTTP];async function oR(e=null,t=2,r=!0){if(nR){if(r){let{loadRootComponents:n}=rE();await n()}kn.exports.restartNumber++,t<1&&(t=t*xn.length);let s=[];for(let n of xn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:kn.exports.restartNumber,type:iR.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=gte.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),BB*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 ys.postMessage({type:pte,workerType:e})}a(oR,"restartWorkers");function Ate(e,t){$B[e]=t}a(Ate,"setChildListenerByType");function Ote(e){return oR(e,1/0,!1)}a(Ote,"shutdownWorkers");var YB=[];function Nte(e){YB.push(e)}a(Nte,"onMessageFromWorkers");var rR=new Map;function bte(e,t){let r=rR.get(e);r||rR.set(e,r=[]),r.push(t)}a(bte,"onMessageByType");function yte(e){for(let t of Gn)try{t.postMessage(e)}catch(r){Vo.error("Unable to send message to worker",r)}}a(yte,"broadcast");var iE=new Map,Ite=1;function wte(e){return new Promise(t=>{let r=0;for(let s of Gn)try{let n=Ite++,i=a(()=>{iE.delete(n),--r===0&&t(),s!==ys&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,iE.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of iE)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Vo.error("Unable to send message to worker",n)}r===0&&t()})}a(wte,"broadcastWithAcknowledgement");function Cte(e){e.postMessage({type:FB,workers:KB()})}a(Cte,"sendThreadInfo");function KB(){let e=Date.now();return xn.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(KB,"getChildWorkerInfo");function Ute(e,t){e.resources=t,e.resources.updated=Date.now()}a(Ute,"recordResourceReport");var sR;function Dte(e){sR=e}a(Dte,"setMonitorListener");var Lte=1e3,PB=!1;function Mte(){PB||(PB=!0,setInterval(()=>{for(let e of xn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}sR&&sR()},Lte).unref())}a(Mte,"startMonitoring");var Pte=1e3;if(ys){oE(ys);for(let e of du.addPorts)oE(e);setInterval(()=>{let e=process.memoryUsage();ys.postMessage({type:qB,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},Pte).unref(),eR=a(()=>new Promise((e,t)=>{ys.on("message",r),ys.postMessage({type:HB});function r(s){s.type===FB&&(ys.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else eR=KB;kn.exports.getThreadInfo=eR;function oE(e,t){Gn.push(e),e.on("message",r=>{if(r.type===GB)oE(r.port);else if(r.type===Tte){let s=iE.get(r.id);s&&s()}else{for(let n of YB)n(r,e);let s=rR.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Vo.error(i)}}}).on("close",()=>{Gn.splice(Gn.indexOf(e),1)}).on("exit",()=>{Gn.splice(Gn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(oE,"addPort");if(nR){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await fte(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(vB(s,i.name));try{for await(let{filename:i}of Ete(s,{persistent:!1}))(nE(i)===".ts"||nE(i)===".js"||nE(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await oR(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");kn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ys.on("message",async e=>{let{type:t}=e;t===iR.ITC_EVENT_TYPES.SHUTDOWN&&(kn.exports.restartNumber=e.restartNumber,ys.unref(),setTimeout(()=>{Vo.warn("Thread did not voluntarily terminate",ute),process.exit(0)},BB).unref())})});var XB=m(_E=>{"use strict";var{isMainThread:vte,parentPort:fu,threadId:Bte}=require("worker_threads"),{Socket:Hte}=require("net"),{createServer:qte,IncomingMessage:Fte}=require("http"),{createServer:Gte}=require("https"),{readFileSync:$o}=require("fs"),aE=x(),Is=Q(),Yo=A(),{server:lE}=(Br(),ee(Zo)),{WebSocketServer:xte}=require("ws"),{createServer:kte}=require("tls"),{getTicketKeys:Vte}=st(),{Headers:$te}=(Z_(),ee(gL)),{recordAction:aR,recordActionBinary:Yte}=(mi(),ee(Za));process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});var{HDB_SETTINGS_NAMES:tEe,CONFIG_PARAMS:rEe}=Yo;Is.initSync();var $n={};_E.registerServer=fR;_E.httpServer=hR;_E.deliverSocket=ER;lE.http=hR;lE.request=Jte;lE.socket=Xte;lE.ws=Zte;var cR=[],uR=[],Kte,Eu={},cE={},Wte=[],lR=[];vte||rE().loadRootComponents(!0).then(()=>{fu.on("message",e=>{let{port:t,fd:r,data:s}=e;if(r)ER(r,t,s);else if(e.requestId)Qte(e);else if(e.type===Yo.ITC_EVENT_TYPES.SHUTDOWN)for(let n in $n){let i=$n[n];i.close?.(()=>{setTimeout(()=>{i.cantCleanupProperly||aE.warn("Had to forcefully exit the thread",Bte),process.exit(0)},i.cantCleanupProperly?2500:5e3).unref()}),i.closeIdleConnections?.()}}).ref(),fu.postMessage({type:Yo.ITC_EVENT_TYPES.CHILD_STARTED})});function ER(e,t,r){let s=e?.read?e:new Hte({fd:e,readable:!0,writable:!0,allowHalfOpen:!0}),n=$n[t];if(n)typeof n=="function"?n(s):n.emit("connection",s),r&&s.emit("data",r);else{let i=a(o=>{setTimeout(()=>{let c=$n[t];c?(typeof c=="function"?c(s):c.emit("connection",s),r&&s.emit("data",r)):o<5?i(o+1):(aE.error(`Server on port ${t} was not registered`),s.destroy())},1e3)},"retry");i(1)}return s}a(ER,"deliverSocket");var WB=new Map;function Qte(e){let{port:t,event:r,data:s,requestId:n}=e,i;switch(i=WB.get(n),r){case"connection":i=ER(void 0,t),WB.set(n,i),i.write=(c,u,l)=>(fu.postMessage({requestId:n,event:"data",data:c.toString("latin1")}),l&&l(),!0),i.end=(c,u,l)=>(fu.postMessage({requestId:n,event:"end",data:c?.toString("latin1")}),l&&l(),!0);let o=i.destroy;i.destroy=()=>{o.call(i),fu.postMessage({requestId:n,event:"destroy"})};break;case"data":i._readableState.destroyed||i.emit("data",Buffer.from(s,"latin1"));break;case"drain":i._readableState.destroyed||i.emit("drain",{});break;case"end":i._readableState.destroyed||i.emit("end",{});break;case"error":i._readableState.destroyed||i.emit("error",{});break}}a(Qte,"proxyRequest");function fR(e,t){+t||(t=parseInt(Is.get(Yo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10));let r=$n[t];if(r){let s=r.lastServer||r;s.off("unhandled",QB),s.on("unhandled",(n,i)=>{e.cantCleanupProperly&&(r.cantCleanupProperly=!0),e.emit("request",n,i)}),r.lastServer=e}else $n[t]=e;e.on("unhandled",QB)}a(fR,"registerServer");function zB(e){let t=[],r=parseInt(e?.securePort);return r&&t.push({port:r,secure:!0}),r=parseInt(e?.port),r&&t.push({port:r,secure:!1}),t.length===0&&(t=[{port:parseInt(Is.get(Yo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_PORT),10),secure:Is.get(Yo.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS)}]),t}a(zB,"getPorts");function hR(e,t){for(let{port:r,secure:s}of zB(t))JB(r,s,t?.isOperationsServer),typeof e=="function"?lR[t?.runFirst?"unshift":"push"]({listener:e,port:t?.port||r}):fR(e,r),cE[r]=_R(lR,r),Kte=_R(Wte,r)}a(hR,"httpServer");function JB(e,t,r){if(!Eu[e]){let s={};if(t){let n=r?"operationsapi":"customfunctions",i=Is.get(n+"_tls_privatekey"),o=Is.get(n+"_tls_certificate"),c=Is.get(n+"_tls_certificateauthority");s={key:$o(i),cert:$o(o)+(c?`
27
27
 
28
- `+ko(c):""),ticketKeys:kte()}}du[e]=(t?Fte:Hte)(s,async(n,i)=>{try{let o=performance.now(),c=new uE(n);r&&(c.isOperationsServer=!0);let u=await cE[e](c);if(u.headers?.set?.("Server","HarperDB"),u.status===-1){for(let S of u.headers||[])i.setHeader(S[0],S[1]);return n.baseRequest=c,i.baseResponse=u,du[e].emit("unhandled",n,i)}let l=u.status||200,_=performance.now(),d=_-o;if(!u.handlesHeaders){let S=u.headers;if(S?.append){let T=`hdb;dur=${d.toFixed(2)}`;u.wasCacheMiss&&(T+=", miss"),S.append("Server-Timing",T,!0)}i.writeHead(l,S&&(S[Symbol.iterator]?Array.from(S):S))}let E=c.handlerPath,f=c.method;aR(d,"TTFB",E,f),$te(l<400,"success",E,f);let h=u.body;if(h?.pipe){h.pipe(i),h.destroy&&i.on("close",()=>{h.destroy()});let S=0;h.on("data",T=>{S+=T.length}),h.on("end",()=>{aR(performance.now()-_,"transfer",E,f),aR(S,"bytes-sent",E,f)})}else h?.then?h.then(S=>{i.end(S)},S=>{i.writeHead(S.statusCode||500),i.end(S.toString()),aE.error(S)}):i.end(h)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),aE.error(o)}}),fR(du[e],e)}return du[e]}a(QB,"getHTTPServer");function _R(e,t){let r=Qte;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(_R,"makeCallbackChain");function Qte(e){return e.user&&(e[qn].user=e.user),{status:-1,body:"Not found",headers:new Vte}}a(Qte,"unhandled");function zte(e,t){hR(e,{requestOnly:!0,...t})}a(zte,"onRequest");function Jte(e,t){if(t.securePort){let r=Ns.get("customfunctions_tls_privatekey"),s=Ns.get("customfunctions_tls_certificate"),n=Ns.get("customfunctions_tls_certificateauthority"),i=xte({key:ko(r),cert:ko(s)+(n?`
28
+ `+$o(c):""),ticketKeys:Vte()}}Eu[e]=(t?Gte:qte)(s,async(n,i)=>{try{let o=performance.now(),c=new uE(n);r&&(c.isOperationsServer=!0);let u=await cE[e](c);if(u.headers?.set?.("Server","HarperDB"),u.status===-1){for(let S of u.headers||[])i.setHeader(S[0],S[1]);return n.baseRequest=c,i.baseResponse=u,Eu[e].emit("unhandled",n,i)}let l=u.status||200,_=performance.now(),d=_-o;if(!u.handlesHeaders){let S=u.headers;if(S?.append){let T=`hdb;dur=${d.toFixed(2)}`;u.wasCacheMiss&&(T+=", miss"),S.append("Server-Timing",T,!0)}i.writeHead(l,S&&(S[Symbol.iterator]?Array.from(S):S))}let E=c.handlerPath,f=c.method;aR(d,"TTFB",E,f),Yte(l<400,"success",E,f);let h=u.body;if(h?.pipe){h.pipe(i),h.destroy&&i.on("close",()=>{h.destroy()});let S=0;h.on("data",T=>{S+=T.length}),h.on("end",()=>{aR(performance.now()-_,"transfer",E,f),aR(S,"bytes-sent",E,f)})}else h?.then?h.then(S=>{i.end(S)},S=>{i.writeHead(S.statusCode||500),i.end(S.toString()),aE.error(S)}):i.end(h)}catch(o){i.writeHead(o.statusCode||500),i.end(o.toString()),aE.error(o)}}),fR(Eu[e],e)}return Eu[e]}a(JB,"getHTTPServer");function _R(e,t){let r=zte;for(let s=e.length;s>0;){let{listener:n,port:i}=e[--s];if(i===t||i==="all"){let o=r;r=a(c=>n(c,o),"next_callback")}}return r}a(_R,"makeCallbackChain");function zte(e){return e.user&&(e[Vn].user=e.user),{status:-1,body:"Not found",headers:new $te}}a(zte,"unhandled");function Jte(e,t){hR(e,{requestOnly:!0,...t})}a(Jte,"onRequest");function Xte(e,t){if(t.securePort){let r=Is.get("customfunctions_tls_privatekey"),s=Is.get("customfunctions_tls_certificate"),n=Is.get("customfunctions_tls_certificateauthority"),i=kte({key:$o(r),cert:$o(s)+(n?`
29
29
 
30
- `+ko(n):"")},e);Fn[t.securePort]=o=>{i.emit("connection",o)}}t.port&&(Fn[t.port]=e)}a(Jte,"onSocket");Object.defineProperty(qte.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Xte(e,t){for(let{port:r,secure:s}of WB(t)){uR[r]||(uR[r]=new Gte({server:QB(r,s)}),uR[r].on("connection",async(i,o)=>{let c=new uE(o);c.isWebSocket=!0;let u=cE[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<cR.length;_++){let d=cR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";cR.push({listener:e,protocol:n}),cE[r]=_R(lR,r)}}a(Xte,"onWebSocket");function KB(e,t){t.writeHead(404),t.end(`Not found
31
- `)}a(KB,"defaultNotFound");var qn=Symbol("node request"),uE=class{static{a(this,"Request")}[qn];#e;constructor(t){this.method=t.method;let r=t.url;this[qn]=t,this.url=r,this.headers=t.headers,this.headers.get=Zte}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this[qn].socket.encrypted?"https":"http"}get ip(){return this[qn].socket.remoteAddress}get body(){return this.#e||(this.#e=new dR(this[qn]))}get host(){return this[qn].authority||this[qn].headers.host}get isAborted(){return!1}},dR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function Zte(e){return this[e.toLowerCase()]}a(Zte,"get")});var rH={};xe(rH,{debugMode:()=>eH,startHTTPThreads:()=>ere,startSocketServer:()=>JT,updateWorkerIdleness:()=>tH});async function ere(e=2,t){if(t)pR(0,1,!0);else{let{loadRootComponents:r}=rE();if(e===0||eH)return(0,Gn.setMainIsWorker)(!0),mR=zB(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)pR(r,e);return Promise.all(jB)}function pR(e,t=1,r){if(SR++,(0,Gn.startWorker)("server/threads/threadServer.js",{name:fE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===fE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});jB.push(n),await n,$o.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=EE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=$o.indexOf(s);o>-1&&$o.splice(o,1)}if(a(i,"removeWorker"),Yo){let o=Yo;Yo=[];for(let c of o)ZB[c.localPort](c)}}}),r){let s=setInterval(()=>{TR?TR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Gn.shutdownWorkers)(),SR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function JT(e=0,t){if(typeof e=="string")try{(0,mE.existsSync)(e)&&(0,mE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=tre:r=rre(t):r=RR;let s=(0,XB.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},ZB[e]=i=>{TR=!0,r(i,(o,c)=>{if(!o){mR?(mR.deliverSocket(i,e,c),i.resume()):SR>0?(Yo.length===0&&setTimeout(()=>{Yo.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(),Yo.push(i)):(console.log("start up a dynamic thread to handle request"),pR(0));return}o.requests++;let u=i._handle.fd;hE.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):ire(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=ac();return hE.info(`HarperDB ${n.version} Server running on port ${e}`),s}function RR(e,t){let r,s=0;for(let n of $o){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=dE)return dE=i,t(r);s=i}dE=0,t(r)}function tre(e,t){let r=e.remoteAddress,s=Ko.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);RR(e,i=>{Ko.set(r,{worker:i,lastUsed:n}),t(i)})}function rre(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=Ko.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);RR(s,_=>{Ko.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function tH(){dE=0;for(let e of $o)e.expectedIdle=e.recentELU.idle+sre,e.requests=1;$o.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ire(e,t,r){let s=nre++;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(),EE.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")),EE.delete(s)),n.event=="destroy"&&(e.destroy(),EE.delete(s))})}var Gn,XB,fE,hE,mE,jte,$o,Yo,ZB,mR,SR,jB,eH,TR,dE,JB,Ko,sre,EE,nre,XT=Se(()=>{Gn=C(st()),XB=require("net"),fE=C(A()),hE=C(x()),mE=require("fs"),{isMainThread:jte}=require("worker_threads"),$o=[],Yo=[],ZB=[],SR=0,jB=[];jte&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(ere,"startHTTPThreads");a(pR,"startHTTPWorker");a(JT,"startSocketServer");dE=0;a(RR,"findMostIdleWorker");JB=36e5,Ko=new Map;a(tre,"findByRemoteAddressAffinity");a(rre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ko)r.lastUsed+JB<e&&Ko.delete(t)},JB).unref();sre=1e3;a(tH,"updateWorkerIdleness");(0,Gn.setMonitorListener)(tH);EE=new Map,nre=1;a(ire,"proxySocket")});OE();var{startHTTPThreads:ore,startSocketServer:sH}=(XT(),ee(rH));ore(0,!0);sH(9925);sH(9926);
30
+ `+$o(n):"")},e);$n[t.securePort]=o=>{i.emit("connection",o)}}t.port&&($n[t.port]=e)}a(Xte,"onSocket");Object.defineProperty(Fte.prototype,"upgrade",{get(){return"connection"in this.headers&&"upgrade"in this.headers&&this.headers.connection.startsWith("Upgrade")&&this.headers.upgrade.toLowerCase()=="websocket"},set(e){}});function Zte(e,t){for(let{port:r,secure:s}of zB(t)){uR[r]||(uR[r]=new xte({server:JB(r,s)}),uR[r].on("connection",async(i,o)=>{let c=new uE(o);c.isWebSocket=!0;let u=cE[r](c),l=c.headers["sec-websocket-protocol"]||"";for(let _=0;_<cR.length;_++){let d=cR[_];if(d.protocol){if(d.protocol===l){d.listener(i,c,u);break}}else d.listener(i,c,u)}}));let n=t?.subProtocol||"";cR.push({listener:e,protocol:n}),cE[r]=_R(lR,r)}}a(Zte,"onWebSocket");function QB(e,t){t.writeHead(404),t.end(`Not found
31
+ `)}a(QB,"defaultNotFound");var Vn=Symbol("node request"),uE=class{static{a(this,"Request")}[Vn];#e;constructor(t){this.method=t.method;let r=t.url;this[Vn]=t,this.url=r,this.headers=t.headers,this.headers.get=jte}get absoluteURL(){return this.protocol+"://"+this.host+this.url}get pathname(){let t=this.url.indexOf("?");return t>-1?this.url.slice(0,t):this.url}set pathname(t){let r=this.url.indexOf("?");r>-1?this.url=t+this.url.slice(r):this.url=t}get protocol(){return this[Vn].socket.encrypted?"https":"http"}get ip(){return this[Vn].socket.remoteAddress}get body(){return this.#e||(this.#e=new dR(this[Vn]))}get host(){return this[Vn].authority||this[Vn].headers.host}get isAborted(){return!1}},dR=class{static{a(this,"RequestBody")}#e;constructor(t){this.#e=t}on(t,r){return this.#e.on(t,r),this}};function jte(e){return this[e.toLowerCase()]}a(jte,"get")});var nH={};ke(nH,{debugMode:()=>rH,startHTTPThreads:()=>tre,startSocketServer:()=>JT,updateWorkerIdleness:()=>sH});async function tre(e=2,t){if(t)pR(0,1,!0);else{let{loadRootComponents:r}=rE();if(e===0||rH)return(0,Yn.setMainIsWorker)(!0),mR=XB(),await r(!0),Promise.resolve([]);await r()}for(let r=0;r<e;r++)pR(r,e);return Promise.all(tH)}function pR(e,t=1,r){if(SR++,(0,Yn.startWorker)("server/threads/threadServer.js",{name:fE.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===fE.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});tH.push(n),await n,Ko.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=EE.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Ko.indexOf(s);o>-1&&Ko.splice(o,1)}if(a(i,"removeWorker"),Wo){let o=Wo;Wo=[];for(let c of o)eH[c.localPort](c)}}}),r){let s=setInterval(()=>{TR?TR=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Yn.shutdownWorkers)(),SR=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function JT(e=0,t){if(typeof e=="string")try{(0,mE.existsSync)(e)&&(0,mE.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=rre:r=sre(t):r=RR;let s=(0,jB.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},eH[e]=i=>{TR=!0,r(i,(o,c)=>{if(!o){mR?(mR.deliverSocket(i,e,c),i.resume()):SR>0?(Wo.length===0&&setTimeout(()=>{Wo.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(),Wo.push(i)):(console.log("start up a dynamic thread to handle request"),pR(0));return}o.requests++;let u=i._handle.fd;hE.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):ore(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=cc();return hE.info(`HarperDB ${n.version} Server running on port ${e}`),s}function RR(e,t){let r,s=0;for(let n of Ko){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=dE)return dE=i,t(r);s=i}dE=0,t(r)}function rre(e,t){let r=e.remoteAddress,s=Qo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);RR(e,i=>{Qo.set(r,{worker:i,lastUsed:n}),t(i)})}function sre(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=Qo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);RR(s,_=>{Qo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function sH(){dE=0;for(let e of Ko)e.expectedIdle=e.recentELU.idle+nre,e.requests=1;Ko.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function ore(e,t,r){let s=ire++;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(),EE.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")),EE.delete(s)),n.event=="destroy"&&(e.destroy(),EE.delete(s))})}var Yn,jB,fE,hE,mE,ere,Ko,Wo,eH,mR,SR,tH,rH,TR,dE,ZB,Qo,nre,EE,ire,XT=pe(()=>{Yn=U(st()),jB=require("net"),fE=U(A()),hE=U(x()),mE=require("fs"),{isMainThread:ere}=require("worker_threads"),Ko=[],Wo=[],eH=[],SR=0,tH=[];ere&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(tre,"startHTTPThreads");a(pR,"startHTTPWorker");a(JT,"startSocketServer");dE=0;a(RR,"findMostIdleWorker");ZB=36e5,Qo=new Map;a(rre,"findByRemoteAddressAffinity");a(sre,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Qo)r.lastUsed+ZB<e&&Qo.delete(t)},ZB).unref();nre=1e3;a(sH,"updateWorkerIdleness");(0,Yn.setMonitorListener)(sH);EE=new Map,ire=1;a(ore,"proxySocket")});OE();var{startHTTPThreads:are,startSocketServer:iH}=(XT(),ee(nH));are(0,!0);iH(9925);iH(9926);