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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,26 @@
1
- "use strict";var yB=Object.create;var xa=Object.defineProperty;var IB=Object.getOwnPropertyDescriptor;var wB=Object.getOwnPropertyNames;var CB=Object.getPrototypeOf,UB=Object.prototype.hasOwnProperty;var o=(e,t)=>xa(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var r in t)xa(e,r,{get:t[r],enumerable:!0})},zT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of wB(t))!UB.call(e,n)&&n!==r&&xa(e,n,{get:()=>t[n],enumerable:!(s=IB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?yB(CB(e)):{},zT(t||!e||!e.__esModule?xa(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>zT(xa({},"__esModule",{value:!0}),e);var ZT=m((ute,XT)=>{var DB=require("fast-glob"),{statSync:nE,existsSync:iE,readFileSync:LB,writeFileSync:MB}=require("fs"),{spawnSync:PB,spawn:vB}=require("child_process"),{isMainThread:BB}=require("worker_threads"),{join:Os,relative:JT}=require("path"),{PACKAGE_ROOT:mr}=g(),{tmpdir:HB}=require("os");require("source-map-support").install();var FB=["resources","server","dataLayer"],ka="ts-build",aE,qB=__filename.endsWith("tsBuild.js");if(qB){if(BB){let r;try{nE(Os(mr,ka)),r=!0}catch{}if(r)for(let s of DB.sync(FB.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=nE(Os(mr,s)).mtimeMs-5e3,i=nE(Os(mr,ka,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."),aE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),aE=!0;if(aE){let s=PB(process.argv[0],[Os(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Os(HB(),"harperdb-tsc.pid"),i;if(iE(n))try{process.kill(+LB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let a=vB(process.argv[0],[Os(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});MB(n,a.pid.toString()),a.unref()}}}}let e=XT.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=JT(mr,s[0]),a;i.startsWith(ka)?a=Os(mr,JT(ka,i)):a=Os(mr,ka,i);let c=Os(a,r),u=c+".js";if(iE(u))return u;if(c.includes(".")&&iE(c))return c}return t(r,s,n)}}});var g=m((dte,dR)=>{"use strict";var Sr=require("path"),GB=require("fs"),{relative:lte,join:_te}=Sr,{existsSync:xB}=GB;function kB(){let e=__dirname;for(;!xB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}o(kB,"getHDBPackageRoot");var nn=kB(),jT="js",nu=jT,VB="harperdb-config.yaml",$B="defaultConfig.yaml",YB="hdb",eR=`harperdb.${nu}`,tR=`customFunctionsServer.${nu}`,KB=`restartHdb.${nu}`,cE="HarperDB",su="Custom Functions",iu="Clustering Hub",au="Clustering Leaf",WB="Clustering Ingest Service",QB="Clustering Reply Service",zB="foreground.pid",JB="hdb.pid",XB="data",ZB={HDB:cE,CLUSTERING_HUB:iu,CLUSTERING_LEAF:au,CLUSTERING_INGEST_SERVICE:WB,CLUSTERING_REPLY_SERVICE:QB,CUSTOM_FUNCTIONS:su,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"},jB={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},eH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},tH={harperdb:cE,"clustering hub":iu,"clustering leaf":au,"custom functions":su,custom_functions:su,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},rH={CLUSTERING_HUB_PROC_DESCRIPTOR:iu,CLUSTERING_LEAF_PROC_DESCRIPTOR:au},oE={HDB:Sr.join(nn,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(nn,"server/customFunctions"),CLUSTERING_HUB:Sr.join(nn,"server/nats"),CLUSTERING_LEAF:Sr.join(nn,"server/nats")},sH={HDB:Sr.join(oE.HDB,eR),CUSTOM_FUNCTIONS:Sr.join(oE.CUSTOM_FUNCTIONS,tR)},nH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(nn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(nn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(nn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},iH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},rR="support@harperdb.io",aH="customer-success@harperdb.io",sR=1,oH=4141,nR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",cH="https://www.harperdb.io/product",uH=`For support, please submit a request at ${nR} or contact ${rR}`,iR=`For license support, please contact ${aH}`,lH="None of the specified records were found.",_H="hash attribute not found",dH=`Your current license only supports ${sR} role. ${iR}`,EH="Your current license only supports 3 connections to a node.",fH="127.0.0.1",hH=1,mH=/^\.$/,SH=/^\.\.$/,pH="U+002E",TH=/\//g,RH="U+002F",gH=/U\+002F/g,AH=/^U\+002E$/,OH=/^U\+002EU\+002E$/,NH="d",bH=999999,yH="*",IH="--max-old-space-size=",wH="system",CH="__hdb_hash",UH=".harperdb",DH=".hdb",LH="keys",MH="hdb_boot_properties.file",PH=".updateConfig.json",vH="SIGTSTP",BH=24,HH=6e4,FH=448,qH="blob",GH="trash",xH="database",kH="schema",VH="transactions",$H=".count",YH="id",KH="PROCESS_NAME",aR={SETTINGS_PATH_KEY:"settings_path"},oR=require("lodash"),WH={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"},QH={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},zH={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},JH={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"},XH={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:",ZH={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"},jH={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"},e0="060493.ks",t0=".license",r0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},$={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},s0={CSV:".csv",JSON:".json"},n0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},i0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Va={};Va[$.INSERT]=$.INSERT;Va[$.UPDATE]=$.UPDATE;Va[$.UPSERT]=$.UPSERT;Va[$.DELETE]=$.DELETE;var Ae=Object.create(null);Ae[$.DESCRIBE_ALL]=$.DESCRIBE_ALL;Ae[$.DESCRIBE_TABLE]=$.DESCRIBE_TABLE;Ae[$.DESCRIBE_SCHEMA]=$.DESCRIBE_SCHEMA;Ae[$.READ_LOG]=$.READ_LOG;Ae[$.ADD_NODE]=$.ADD_NODE;Ae[$.LIST_USERS]=$.LIST_USERS;Ae[$.LIST_ROLES]=$.LIST_ROLES;Ae[$.USER_INFO]=$.USER_INFO;Ae[$.SQL]=$.SQL;Ae[$.GET_JOB]=$.GET_JOB;Ae[$.SEARCH_JOBS_BY_START_DATE]=$.SEARCH_JOBS_BY_START_DATE;Ae[$.DELETE_FILES_BEFORE]=$.DELETE_FILES_BEFORE;Ae[$.EXPORT_LOCAL]=$.EXPORT_LOCAL;Ae[$.EXPORT_TO_S3]=$.EXPORT_TO_S3;Ae[$.CLUSTER_STATUS]=$.CLUSTER_STATUS;Ae[$.REMOVE_NODE]=$.REMOVE_NODE;Ae[$.RESTART]=$.RESTART;Ae[$.CUSTOM_FUNCTIONS_STATUS]=$.CUSTOM_FUNCTIONS_STATUS;Ae[$.GET_CUSTOM_FUNCTIONS]=$.GET_CUSTOM_FUNCTIONS;Ae[$.GET_CUSTOM_FUNCTION]=$.GET_CUSTOM_FUNCTION;Ae[$.SET_CUSTOM_FUNCTION]=$.SET_CUSTOM_FUNCTION;Ae[$.DROP_CUSTOM_FUNCTION]=$.DROP_CUSTOM_FUNCTION;Ae[$.ADD_CUSTOM_FUNCTION_PROJECT]=$.ADD_CUSTOM_FUNCTION_PROJECT;Ae[$.DROP_CUSTOM_FUNCTION_PROJECT]=$.DROP_CUSTOM_FUNCTION_PROJECT;Ae[$.PACKAGE_CUSTOM_FUNCTION_PROJECT]=$.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[$.DEPLOY_CUSTOM_FUNCTION_PROJECT]=$.DEPLOY_CUSTOM_FUNCTION_PROJECT;var a0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},o0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},cR={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"},c0=oR.invert(cR),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"},uR={settings_path:aR.SETTINGS_PATH_KEY,hdb_root_key:R.ROOTPATH,hdb_root:R.ROOTPATH,server_port_key:R.OPERATIONSAPI_NETWORK_PORT,server_port:R.OPERATIONSAPI_NETWORK_PORT,cert_key:R.OPERATIONSAPI_TLS_CERTIFICATE,certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:R.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:R.OPERATIONSAPI_NETWORK_HTTPS,https_on:R.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:R.OPERATIONSAPI_NETWORK_CORS,cors_on:R.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:R.LOGGING_LEVEL,log_level:R.LOGGING_LEVEL,log_path_key:R.LOGGING_ROOT,log_path:R.LOGGING_ROOT,props_env_key:R.OPERATIONSAPI_NODEENV,node_env:R.OPERATIONSAPI_NODEENV,clustering_node_name_key:R.CLUSTERING_NODENAME,node_name:R.CLUSTERING_NODENAME,clustering_enabled_key:R.CLUSTERING_ENABLED,clustering:R.CLUSTERING_ENABLED,max_http_threads:R.HTTP_THREADS,max_hdb_processes:R.HTTP_THREADS,server_timeout_key:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:R.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:R.LOGGING_AUDITLOG,disable_transaction_log:R.LOGGING_AUDITLOG,operation_token_timeout_key:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:R.CUSTOMFUNCTIONS_ENABLED,custom_functions:R.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:R.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:R.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:R.HTTP_THREADS,log_to_file:R.LOGGING_FILE,log_to_stdstreams:R.LOGGING_STDSTREAMS,run_in_foreground:R.OPERATIONSAPI_FOREGROUND,local_studio_on:R.LOCALSTUDIO_ENABLED,clustering_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:R.CLUSTERING_USER,clustering_enabled:R.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:R.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:R.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:R.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:R.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:R.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:R.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:R.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:R.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:R.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:R.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:R.CLUSTERING_NODENAME,clustering_tls_certificate:R.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:R.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:R.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:R.CLUSTERING_TLS_INSECURE,clustering_tls_verify:R.CLUSTERING_TLS_VERIFY,clustering_loglevel:R.CLUSTERING_LOGLEVEL,clustering_republishmessages:R.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:R.CLUSTERING_DATABASELEVEL,customfunctions_enabled:R.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:R.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:R.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:R.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:R.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:R.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:R.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:R.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:R.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:R.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:R.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:R.CUSTOMFUNCTIONS_NODEENV,http_threads:R.HTTP_THREADS,http_session_affinity:R.HTTP_SESSION_AFFINITY,customfunctions_processes:R.HTTP_THREADS,customfunctions_root:R.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:R.LOCALSTUDIO_ENABLED,logging_file:R.LOGGING_FILE,logging_level:R.LOGGING_LEVEL,logging_root:R.LOGGING_ROOT,logging_rotation_enabled:R.LOGGING_ROTATION_ENABLED,logging_rotation_compress:R.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:R.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:R.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:R.LOGGING_ROTATION_PATH,logging_stdstreams:R.LOGGING_STDSTREAMS,logging_auditlog:R.LOGGING_AUDITLOG,logging_auditretention:R.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:R.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:R.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:R.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:R.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:R.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:R.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:R.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:R.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:R.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:R.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:R.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:R.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:R.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:R.OPERATIONSAPI_NODEENV,operationsapi_root:R.ROOTPATH,schemas:R.SCHEMAS,storage_path:R.STORAGE_PATH,ignorescripts:R.IGNORE_SCRIPTS,mqtt_network_port:R.MQTT_NETWORK_PORT,mqtt_websocket:R.MQTT_WEBSOCKET,mqtt_network_secureport:R.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:R.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:R.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:R.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:R.AUTHENTICATION_CACHETTL,authentication_enablesessions:R.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:R.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:R.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in R){let t=R[e];uR[t.toLowerCase()]=t}var u0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},l0={csv_file_load:"csv_file_load",csv_data_load:$.CSV_DATA_LOAD,csv_url_load:$.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},_0={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"},d0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},E0={VERSION_DEFAULT:"2.2.0"},f0={DEVELOPMENT:8192,DEFAULT:512},h0={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"},m0={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"},S0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},lR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},p0=Symbol("metadata"),T0="__clustering__",R0=Object.values(lR),g0=15984864e5,_R={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},A0=oR.invert(_R),O0={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"},N0=111,b0=`\r
2
- `,y0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},I0=["*","%"],w0="unauthorized_access",C0="func_val",U0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},D0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},L0={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"},M0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},P0={HTTP:"http"},v0={STOPPED:"stopped",ONLINE:"online"},B0="3.x.x",H0={SUCCESS:"success",FAILURE:"failure"},F0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};dR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:rR,HDB_SUPPORT_URL:nR,HDB_PRICING_URL:cH,SUPPORT_HELP_MSG:uH,LICENSE_HELP_MSG:iR,HDB_PROC_NAME:eR,HDB_PROC_DESCRIPTOR:cE,CLUSTERING_LEAF_PROC_DESCRIPTOR:au,CLUSTERING_HUB_PROC_DESCRIPTOR:iu,SYSTEM_SCHEMA_NAME:wH,HASH_FOLDER_NAME:CH,HDB_HOME_DIR_NAME:UH,UPDATE_FILE_NAME:PH,LICENSE_KEY_DIR_NAME:LH,BOOT_PROPS_FILE_NAME:MH,JOB_TYPE_ENUM:l0,JOB_STATUS_ENUM:r0,SYSTEM_TABLE_NAMES:JH,SYSTEM_TABLE_HASH_ATTRIBUTES:XH,OPERATIONS_ENUM:$,VALID_S3_FILE_TYPES:s0,S3_BUCKET_AUTH_KEYS:n0,VALID_SQL_OPS_ENUM:i0,GEO_CONVERSION_ENUM:o0,HDB_SETTINGS_NAMES:cR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:c0,SERVICE_ACTIONS_ENUM:a0,CLUSTER_MESSAGE_TYPE_ENUM:_0,CLUSTER_CONNECTION_DIRECTION_ENUM:d0,CLUSTER_EVENTS_DEFS_ENUM:h0,PERIOD_REGEX:mH,DOUBLE_PERIOD_REGEX:SH,UNICODE_PERIOD:pH,FORWARD_SLASH_REGEX:TH,UNICODE_FORWARD_SLASH:RH,ESCAPED_FORWARD_SLASH_REGEX:gH,ESCAPED_PERIOD_REGEX:AH,ESCAPED_DOUBLE_PERIOD_REGEX:OH,REG_KEY_FILE_NAME:e0,RESTART_TIMEOUT_MS:HH,HDB_FILE_PERMISSIONS:FH,DATABASES_DIR_NAME:xH,LEGACY_DATABASES_DIR_NAME:kH,TRANSACTIONS_DIR_NAME:VH,LIMIT_COUNT_NAME:$H,ID_ATTRIBUTE_STRING:YH,INSERT_MODULE_ENUM:QH,UPGRADE_JSON_FIELD_NAMES_ENUM:zH,RESTART_CODE:vH,RESTART_CODE_NUM:BH,CLUSTER_OPERATIONS:Va,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:jH,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:ZH,CLUSTERING_MESSAGE_TYPES:O0,HDB_FILE_SUFFIX:DH,BLOB_FOLDER_NAME:qH,HDB_TRASH_DIR:GH,ORIGINATOR_SET_VALUE:N0,LICENSE_VALUES:E0,RAM_ALLOCATION_ENUM:f0,TIME_STAMP_NAMES_ENUM:lR,TIME_STAMP_NAMES:R0,PERMS_UPDATE_RELEASE_TIMESTAMP:g0,SEARCH_NOT_FOUND_MESSAGE:lH,SEARCH_ATTRIBUTE_NOT_FOUND:_H,LICENSE_ROLE_DENIED_RESPONSE:dH,LICENSE_MAX_CONNS_REACHED:EH,BASIC_LICENSE_MAX_NON_CU_ROLES:sR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:oH,VALUE_SEARCH_COMPARATORS:_R,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:A0,LICENSE_FILE_NAME:t0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:m0,NEW_LINE:b0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:hH,MOMENT_DAYS_TAG:NH,API_TURNOVER_SEC:bH,LOOPBACK:fH,CODE_EXTENSION:nu,WILDCARD_SEARCH_VALUE:yH,NODE_ERROR_CODES:S0,JAVASCRIPT_EXTENSION:jT,PERMS_CRUD_ENUM:y0,UNAUTHORIZED_PERMISSION_NAME:w0,SEARCH_WILDCARDS:I0,FUNC_VAL:C0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:U0,JWT_ENUM:D0,CLUSTERING_FLAG:T0,ITC_EVENT_TYPES:L0,CUSTOM_FUNCTION_PROC_NAME:tR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:su,SERVICES:M0,THREAD_TYPES:P0,MEM_SETTING_KEY:IH,HDB_RESTART_SCRIPT:KB,PROCESS_DESCRIPTORS:ZB,SERVICE_SERVERS:sH,SERVICE_SERVERS_CWD:oE,PROCESS_DESCRIPTORS_VALIDATE:tH,LAUNCH_SERVICE_SCRIPTS:nH,LOG_LEVELS:eH,PROCESS_NAME_ENV_PROP:KH,LOG_NAMES:jB,PM2_PROCESS_STATUSES:v0,CONFIG_PARAM_MAP:uR,CONFIG_PARAMS:R,HDB_CONFIG_FILE:VB,HDB_DEFAULT_CONFIG_FILE:$B,ROLE_TYPES_ENUM:iH,BOOT_PROP_PARAMS:aR,INSTALL_PROMPTS:WH,HDB_ROOT_DIR_NAME:YB,CLUSTERING_PROCESSES:rH,FOREGROUND_PID_FILE:zB,PACKAGE_ROOT:nn,PRE_4_0_0_VERSION:B0,SCHEMAS_PARAM_CONFIG:u0,METADATA_PROPERTY:p0,AUTH_AUDIT_STATUS:H0,AUTH_AUDIT_TYPES:F0,HDB_PID_FILE:JB,DEFAULT_DATABASE_NAME:XB};ZT()});var uE=m((fte,hR)=>{"use strict";var ER=require("minimist");hR.exports=q0;function q0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=fR(process.env),s=fR(ER(process.argv))):(r=process.env,s=ER(process.argv));let n={};for(let i=0,a=e.length;i<a;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}o(q0,"assignCMDENVVariables");function fR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}o(fR,"objKeysToLowerCase")});var q=m((mte,mE)=>{"use strict";var Fn=require("fs-extra"),{workerData:G0,threadId:x0}=require("worker_threads"),ys=require("path"),pR=require("yaml"),TR=require("properties-reader"),je=g(),mR=uE(),k0=require("os"),{PACKAGE_ROOT:_E}=g(),{_assignPackageExport:V0}=require("../../index"),Ya={};for(let e in console)Ya[e]||(Ya[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},RR={STDOUT:"stdOut",STDERR:"stdErr"},$0=ys.join(_E,"logs"),Y0=ys.join(_E,"config/yaml/",je.HDB_DEFAULT_CONFIG_FILE),K0=1e4,Ns,bs,Lt,ou,cu,Ka,Mi,$a;$a===void 0&&gR();mE.exports={notify:NR,fatal:bR,error:Wa,warn:hE,info:uu,debug:fE,trace:EE,setLogLevel:j0,log_level:Lt,loggerWithTag:W0,suppressLogging:Q0,initLogSettings:gR,setupConsoleLogging:AR,logCustomLevel:X0,closeLogFile:dE,getLogFilePath:()=>Ka,OUTPUTS:RR,AuthAuditLog:rF};V0("logger",mE.exports);function gR(e=!1){try{if($a===void 0||e){dE();let t=Z0(),r=mR(["ROOTPATH"]);try{$a=TR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(ys.join(r.ROOTPATH,je.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:cu,to_file:Ns,to_stream:bs}=eF(r.ROOTPATH?ys.join(r.ROOTPATH,je.HDB_CONFIG_FILE):$a.get("settings_path"))),ou=je.LOG_NAMES.HDB,Ka=ys.join(cu,ou)}}catch(t){if($a=void 0,t.code===je.NODE_ERROR_CODES.ENOENT){let r=mR(Object.keys(je.CONFIG_PARAM_MAP),!0);for(let a in r){let c=je.CONFIG_PARAM_MAP[a];c&&c.toLowerCase();let u=r[a];if(c===je.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===je.CONFIG_PARAMS.LOGGING_STDSTREAMS){bs=u;continue}c===je.CONFIG_PARAMS.LOGGING_FILE&&(Ns=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=tF();Ns=Ns===void 0?n:Ns,Ns=SR(Ns),bs=bs===void 0?i:bs,bs=SR(bs),Lt=Lt===void 0?s:Lt,cu=$0,ou=je.LOG_NAMES.INSTALL,Ka=ys.join(cu,ou);return}throw Wa("Error initializing log settings"),Wa(t),t}AR()}o(gR,"initLogSettings");var lE=!0;function AR(){Li("error",Wa),Li("warn",hE),Li("log",uu),Li("info",uu),Li("debug",fE),Li("trace",EE)}o(AR,"setupConsoleLogging");function Li(e,t){console[e]=function(...r){if(lE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Ya[e](...r)}}o(Li,"logConsole");function W0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(NR),fatal:r(bR),error:r(Wa),warn:r(hE),info:r(uu),debug:r(fE),trace:r(EE)};function r(s){return function(...n){return s(t,...n)}}}o(W0,"loggerWithTag");function Q0(e){try{lE=!1,e()}finally{lE=!0}}o(Q0,"suppressLogging");var z0=G0?.name?.replace(/ /g,"-")||"main";function Is(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,a=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(a.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),a.unshift(u||z0+"/"+x0);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} [${a.join("] [")}]: ${s}
3
- `}o(Is,"createLogRecord");function Qa(e){Ns&&OR(e),bs&&process.stdout.write(e)}o(Qa,"logStdOut");function lu(e){Ns&&OR(e),bs&&process.stderr.write(e)}o(lu,"logStdErr");function OR(e){J0(),Mi?Fn.appendFileSync(Mi,e):Ya.log(e)}o(OR,"logToFile");function dE(){try{Fn.closeSync(Mi)}catch{}Mi=null}o(dE,"closeLogFile");function J0(){if(!Mi){try{if(!Ka)debugger;Mi=Fn.openSync(Ka,"a")}catch(e){Ya.error(e)}setTimeout(()=>{dE()},K0).unref()}}o(J0,"openLogFile");function uu(...e){Mt[Lt]<=Mt.info&&Qa(Is("info",e))}o(uu,"info");function EE(...e){Mt[Lt]<=Mt.trace&&Qa(Is("trace",e))}o(EE,"trace");function Wa(...e){Mt[Lt]<=Mt.error&&lu(Is("error",e))}o(Wa,"error");function fE(...e){Mt[Lt]<=Mt.debug&&Qa(Is("debug",e))}o(fE,"debug");function NR(...e){Mt[Lt]<=Mt.notify&&Qa(Is("notify",e))}o(NR,"notify");function bR(...e){Mt[Lt]<=Mt.fatal&&lu(Is("fatal",e))}o(bR,"fatal");function hE(...e){Mt[Lt]<=Mt.warn&&lu(Is("warn",e))}o(hE,"warn");function X0(e,t,...r){t===RR.STDERR?lu(Is(e,r)):Qa(Is(e,r))}o(X0,"logCustomLevel");function Z0(){let e;try{e=k0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ys.join(e,je.HDB_HOME_DIR_NAME,je.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=ys.join(_E,"utility/hdb_boot_properties.file")),t}o(Z0,"getPropsFilePath");function j0(e){Lt=e}o(j0,"setLogLevel");function SR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(SR,"autoCastBoolean");function eF(e){try{if(e.includes("config/settings.js")){let a=TR(e);return{level:a.get(je.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ys.dirname(a.get(je.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:a.get(je.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:a.get(je.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=pR.parseDocument(Fn.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===je.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}o(eF,"getLogConfig");function tF(){try{let e=pR.parseDocument(Fn.readFileSync(Y0,"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)}}o(tF,"getDefaultConfig");function rF(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}o(rF,"AuthAuditLog")});var IR=m((pte,yR)=>{"use strict";var sF=require("util"),nF=require("path"),iF=require("child_process"),aF=sF.promisify(iF.execFile),oF=1e3*1e3*10;yR.exports={findPs:cF};async function cF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await aF("ps",["wwxo",`pid,${r}`],{maxBuffer:oF});for(let n of s.trim().split(`
4
- `).slice(1)){n=n.trim();let[i]=n.split(" ",1),a=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=a}}))}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:nF.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"])}))}o(cF,"findPs")});var xe=m((Rte,CR)=>{"use strict";var uF="__dbis__",lF="__txns__",_F="__environment_name__",dF="__dbi_defintion__",EF={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"},fF=["__createdtime__","__updatedtime__"],hF="\uFFFF",wR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},mF=Object.values(wR);CR.exports={AUDIT_STORE_NAME:lF,INTERNAL_DBIS_NAME:uF,DBI_DEFINITION_NAME:dF,SEARCH_TYPES:EF,TIMESTAMP_NAMES:fF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:_F,TRANSACTIONS_DBI_NAMES_ENUM:wR,TRANSACTIONS_DBIS:mF,OVERFLOW_MARKER:hF}});var rr=m((gte,FR)=>{"use strict";var UR=g(),DR=xe(),LR={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},MR=o(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),PR={500:MR("There was an error processing your request."),400:"Invalid request"},SF=PR[LR.INTERNAL_SERVER_ERROR],pF={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"},gF={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 ${DR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${DR.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"},AF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${UR.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 ${UR.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"},vR={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"},OF={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`},bF={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"},yF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},IF={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`},BR={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.`},HR={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}`},wF={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."},CF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},UF={...vR,...RF,...pF,...OF,...NF,...bF,...yF,...IF,...AF,...BR,...HR,...wF,...CF,...TF};FR.exports={CHECK_LOGS_WRAPPER:MR,HDB_ERROR_MSGS:UF,DEFAULT_ERROR_MSGS:PR,DEFAULT_ERROR_RESP:SF,HTTP_STATUS_CODES:LR,LMDB_ERRORS_ENUM:gF,AUTHENTICATION_ERROR_MSGS:vR,VALIDATION_ERROR_MSGS:BR,ITC_ERRORS:HR}});var W=m((Ote,xR)=>{"use strict";var Pi=rr(),DF=q(),LF=g(),_u=class extends Error{static{o(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,qR),this.http_resp_code=s||Pi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Pi.DEFAULT_ERROR_MSGS[s]?Pi.DEFAULT_ERROR_MSGS[s]:Pi.DEFAULT_ERROR_MSGS[Pi.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&&DF[n](i)}},SE=class extends Error{static{o(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.http_resp_code=r||400,t;super(t),this.http_resp_code=r||400}},pE=class extends Error{static{o(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function qR(e,t,r,s=LF.LOG_LEVELS.ERROR,n=null,i=!1){if(GR(e))return e;let a=new _u(e,t,r,s,n);return i&&delete a.stack,a}o(qR,"handleHDBError");function GR(e){return e.__proto__.constructor.name===_u.name}o(GR,"isHDBError");xR.exports={isHDBError:GR,handleHDBError:qR,ClientError:SE,ServerError:pE,hdb_errors:Pi}});var VR=m((bte,kR)=>{"use strict";var MF={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))},PF="certificate.pem",vF="privateKey.pem",BF="ca.pem";kR.exports={CERTIFICATE_VALUES:MF,CERTIFICATE_PEM_NAME:PF,PRIVATEKEY_PEM_NAME:vF,CA_PEM_NAME:BF}});var Pe=m((yte,$R)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};$R.exports={validateObject:HF,validateObjectAsync:FF,validateBySchema:qF};function HF(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}o(HF,"validateObject");async function FF(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}o(FF,"validateObjectAsync");function qF(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}o(qF,"validateBySchema")});var RE=m((Cte,JR)=>{"use strict";var QR=require("fs-extra"),j=require("joi"),GF=require("os"),{boolean:Se,string:Cs,number:sr,array:TE}=j.types(),{totalmem:YR}=require("os"),vi=require("path"),xF=q(),Eu=x(),wte=VR(),KR=g(),kF=Pe(),WR="log",VF="components",$F="Invalid logging.rotation.maxSize unit. Available units are G, M or K",YF="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",KF="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",WF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",QF="rootPath config parameter is undefined",zF="clustering.enabled config parameter is undefined",ws=sr.min(0).required(),fu=TE.items({host:Cs.required(),port:ws}).empty(null),Us;JR.exports={configValidator:JF,routesValidator:rq,route_constraints:fu};function JF(e){if(Us=e.rootPath,Eu.isEmpty(Us))throw QF;let t=Se.required(),r=j.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(tq),n=Cs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(du),i=j.custom(XF).messages({"any.custom":"{:#label} {:#error}"}),a=Cs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=j.string().empty(null).default(du),u=j.custom(ZF).empty(null).default(du),l=e.clustering?.enabled;if(Eu.isEmpty(l))throw zF;let _;return l===!0?_=j.object({enabled:t,hubServer:j.object({cluster:j.object({name:j.required().empty(null),network:j.object({port:ws,routes:fu}).required()}).required(),leafNodes:j.object({network:j.object({port:ws}).required()}).required(),network:j.object({port:ws}).required()}).required(),leafServer:j.object({network:j.object({port:ws,routes:fu}).required(),streams:j.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:j.valid("error","warn","info","debug","trace"),nodeName:a,republishMessages:Se.optional(),databaseLevel:Se.optional(),tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required(),verify:Se.optional()}),user:Cs.optional().empty(null)}).required():_=j.object({enabled:t,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required()})}).required(),j.object({authentication:j.object({authorizeLocal:Se,cacheTTL:sr.required(),enableSessions:Se,operationTokenTimeout:j.required(),refreshTokenTimeout:j.required()}),analytics:j.object({aggregatePeriod:sr}),clustering:_,customFunctions:j.object({enabled:t,network:j.object({cors:Se.required(),corsAccessList:TE.required(),headersTimeout:sr.min(1).required(),https:Se.required(),keepAliveTimeout:sr.min(1).required(),port:ws,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:j.object({enabled:t}).required(),logging:j.object({auditAuthEvents:j.object({logFailed:Se,logSuccessful:Se}),file:Se.required(),level:j.valid("notify","fatal","error","warn","info","debug","trace"),rotation:j.object({enabled:Se.optional(),compress:Se.optional(),interval:Cs.custom(eq).optional().empty(null),maxSize:Cs.custom(jF).optional().empty(null),path:Cs.optional().empty(null).default(du)}).required(),root:n,stdStreams:Se.required(),auditLog:Se.required()}).required(),operationsApi:j.object({foreground:Se.required(),network:j.object({cors:Se.required(),corsAccessList:TE.required(),headersTimeout:sr.min(1).required(),https:Se.required(),keepAliveTimeout:sr.min(1).required(),port:ws,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:j.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Cs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:j.object({network:j.object({port:ws,securePort:ws}).required(),webSocket:Se.optional(),requireAuthentication:Se.optional()}),http:j.object({threads:s}).required(),storage:j.object({writeAsync:Se.required(),overlappingSync:Se.optional(),caching:Se.optional(),compression:Se.optional(),noReadAhead:Se.optional(),path:u,prefetchWrites:Se.optional()}).required(),ignoreScripts:Se.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}o(JF,"configValidator");function zR(e){return QR.existsSync(e)?null:`Specified path ${e} does not exist.`}o(zR,"doesPathExist");function XF(e,t){if(e===null)return;let r=zR(e);return r?t.message(r):e}o(XF,"validatePemFile");function ZF(e,t){j.assert(e,Cs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=zR(e);if(r)return t.message(r)}o(ZF,"validatePath");function jF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message($F);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(KF):e}o(jF,"validateRotationMaxSize");function eq(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(YF);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(WF):e}o(eq,"validateRotationInterval");function tq(e,t){let r=t.state.path.join("."),s=GF.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||YR();return i=Math.round(Math.min(i,YR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),xF.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}o(tq,"setDefaultThreads");function du(e,t){if(!Eu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(Eu.isEmpty(Us))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return vi.join(Us,VF);case"logging.root":return vi.join(Us,WR);case"clustering.leafServer.streams.path":return vi.join(Us,"clustering","leaf");case"storage.path":let s=vi.join(Us,KR.LEGACY_DATABASES_DIR_NAME);return QR.existsSync(s)?s:vi.join(Us,KR.DATABASES_DIR_NAME);case"logging.rotation.path":return vi.join(Us,WR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}o(du,"setDefaultRoot");function rq(e){let t=j.object({routes:fu});return kF.validateBySchema({routes:e},t)}o(rq,"routesValidator")});var Tr=m((Lte,ag)=>{"use strict";var pr=g(),ut=x(),et=q(),{configValidator:sq,routesValidator:XR}=RE(),vt=require("fs-extra"),nq=require("yaml"),Lr=require("path"),iq=require("is-number"),jR=require("properties-reader"),aq=require("lodash"),{handleHDBError:oq}=W(),{HTTP_STATUS_CODES:cq,HDB_ERROR_MSGS:hu}=rr(),Dte=require("minimist"),{SCHEMAS_PARAM_CONFIG:za,CONFIG_PARAMS:an,CONFIG_PARAM_MAP:Ds}=pr,uq="Unable to get config value because config is uninitialized",lq="Config successfully initialized",_q="Error backing up config file",dq="Empty parameter sent to getConfigValue",eg=Lr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),Eq="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ZR={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"},mu,Et;ag.exports={createConfigFile:fq,getDefaultConfig:hq,getConfigValue:rg,initConfig:sg,flattenConfig:Gn,updateConfigValue:ng,updateConfigObject:Sq,getConfiguration:Rq,setConfiguration:gq,readConfigFile:OE,getClusteringRoutes:Aq,initOldConfig:ig,getConfigFromFile:Oq,getConfigFilePath:qn,addConfig:Nq,deleteConfigFromFile:bq};function fq(e){let t=on(eg);mu=Gn(t.toJSON());let r;for(let a in e){let c=Ds[a.toLowerCase()];if(c===an.SCHEMAS){r=e[a];continue}if(c!==void 0){let u=c.split("_"),l=gE(c,e[a]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){et.error(_)}}}r&&tg(t,r),AE(t);let s=t.toJSON();Et=Gn(s);let n=t.getIn(["rootPath"]),i=Lr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),et.trace(`Config file written to ${i}`)}o(fq,"createConfigFile");function tg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ut.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(za.TABLES))for(let i in s[n][za.TABLES])for(let a in s[n][za.TABLES][i]){let c=s[n][za.TABLES][i][a],u=[an.SCHEMAS,n,za.TABLES,i,a];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let a=s[n][i],c=[an.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,a):e.addIn(c,a)}}}catch(s){et.error("Error parsing schemas CLI/env config arguments",s)}}o(tg,"setSchemasConfig");function hq(e){if(mu===void 0){let r=on(eg);mu=Gn(r.toJSON())}let t=Ds[e.toLowerCase()];if(t!==void 0)return mu[t.toLowerCase()]}o(hq,"getDefaultConfig");function rg(e){if(e==null){et.error(dq);return}if(Et===void 0){et.trace(uq);return}let t=Ds[e.toLowerCase()];if(t!==void 0)return Et[t.toLowerCase()]}o(rg,"getConfigValue");function qn(e=ut.getPropsFilePath()){let t=ut.getEnvCliRootPath();return t?Lr.join(t,pr.HDB_CONFIG_FILE):jR(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}o(qn,"getConfigFilePath");function sg(e=!1){if(Et===void 0||e){let t;if(!ut.noBootFile()){t=ut.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw et.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=qn(t),s;if(r.includes("config/settings.js"))try{ig(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=on(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){et.trace(`HarperDB config file not found at ${r}.
5
- This can occur during early stages of install where the config file has not yet been created`);return}else throw et.error(i),new Error(`Error reading HarperDB config file at ${r}`)}mq(s,r),AE(s);let n=s.toJSON();if(Et=Gn(n),Et.logging_rotation_rotate)for(let i in ZR)Et[i]&&et.error(`Config ${ZR[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);et.trace(lq)}}o(sg,"initConfig");function mq(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Lr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Lr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Lr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(et.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}o(mq,"checkForUpdatedConfig");function AE(e){let t=e.toJSON(),r=sq(t);if(r.error)throw hu.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)}o(AE,"validateConfig");function Sq(e,t){Et===void 0&&(Et={});let r=Ds[e.toLowerCase()];if(r===void 0){et.trace(`Unable to update config object because config param '${e}' does not exist`);return}Et[r.toLowerCase()]=t}o(Sq,"updateConfigObject");function ng(e,t,r=void 0,s=!1,n=!1,i=!1){Et===void 0&&sg();let a=rg(Ds.hdb_root),c=Lr.join(a,pr.HDB_CONFIG_FILE),u=on(c),l;if(r===void 0&&e.toLowerCase()===an.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ds[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=gE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ds[E.toLowerCase()];if(f===an.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=gE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(S){et.error(S)}}}l&&tg(u,l),AE(u);let _=u.getIn(["rootPath"]),d=Lr.join(_,pr.HDB_CONFIG_FILE);s===!0&&pq(c,_),vt.writeFileSync(d,String(u)),n&&(Et=Gn(u.toJSON())),et.trace(`Config parameter: ${e} updated with value: ${t}`)}o(ng,"updateConfigValue");function pq(e,t){try{let r=Lr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),et.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){et.error(_q),et.error(r)}}o(pq,"backupConfigFile");var Tq=["schemas"];function Gn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Tq.includes(r)){let s=Gn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}o(Gn,"flattenConfig");function gE(e,t){if(e===an.CLUSTERING_NODENAME||e===an.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(iq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ut.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return ut.autoCast(t)}o(gE,"castConfigValue");function Rq(){let e=ut.getPropsFilePath(),t=qn(e);return on(t).toJSON()}o(Rq,"getConfiguration");async function gq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ng(void 0,void 0,n,!0),Eq}catch(i){throw typeof i=="string"||i instanceof String?oq(i,i,cq.BAD_REQUEST,void 0,void 0,!0):i}}o(gq,"setConfiguration");function OE(){let e=ut.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!ut.noBootFile())throw et.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=qn(e);return on(t).toJSON()}o(OE,"readConfigFile");function on(e){return nq.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}o(on,"parseYamlDoc");function Aq(){let e=OE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ut.isEmptyOrZeroLength(t)?[]:t;let r=XR(t);if(r)throw hu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ut.isEmptyOrZeroLength(s)?[]:s;let n=XR(s);if(n)throw hu.CONFIG_VALIDATION(n.message);if(!ut.isEmptyOrZeroLength(s)&&!ut.isEmptyOrZeroLength(t)){let i=t.filter(a=>s.some(c=>c.host===a.host&&c.port===a.port));if(!ut.isEmptyOrZeroLength(i)){let a=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw hu.CONFIG_VALIDATION(a)}}return{hub_routes:t,leaf_routes:s}}o(Aq,"getClusteringRoutes");function ig(e){let t=jR(e);Et={};for(let r in Ds){let s=t.get(r.toUpperCase());if(ut.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ds[r].toLowerCase();n===an.LOGGING_ROOT?Et[n]=Lr.dirname(s):Et[n]=s}return Et}o(ig,"initOldConfig");function Oq(e){let t=OE();return aq.get(t,e.replaceAll("_","."))}o(Oq,"getConfigFromFile");async function Nq(e,t){let r=on(qn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(qn(),String(r))}o(Nq,"addConfig");function bq(e){let t=qn(ut.getPropsFilePath()),r=on(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Lr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}o(bq,"deleteConfigFromFile")});var Q=m((Pte,ug)=>{"use strict";var NE=require("fs-extra"),Mr=require("path"),og=require("os"),yq=require("properties-reader"),Ja=q(),xn=x(),ee=g(),Su=Tr(),Iq="Error initializing environment manager",pu="BOOT_PROPS_FILE_PATH",cg=!1,wq={[ee.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ls={};ug.exports={BOOT_PROPS_FILE_PATH:pu,getHdbBasePath:Cq,setHdbBasePath:Uq,get:Dq,initSync:Mq,setProperty:Ee,initTestEnvironment:Pq};function Cq(){return Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}o(Cq,"getHdbBasePath");function Uq(e){Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}o(Uq,"setHdbBasePath");function Dq(e){let t=Su.getConfigValue(e);return t===void 0?Ls[e]:t}o(Dq,"get");function Ee(e,t){wq[e]&&(Ls[e]=t),Su.updateConfigObject(e,t)}o(Ee,"setProperty");function Lq(){let e;try{e=xn.getPropsFilePath(),NE.accessSync(e,NE.constants.F_OK|NE.constants.R_OK),cg=!0;let t=yq(e);return Ls[ee.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(ee.HDB_SETTINGS_NAMES.INSTALL_USER),Ls[ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ls[pu]=e,!0}catch{return Ja.trace(`Environment manager found no properties file at ${e}`),!1}}o(Lq,"doesPropFileExist");function Mq(e=!1){try{(cg||Lq()||xn.noBootFile())&&(Su.initConfig(e),Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Su.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Ja.error(Iq),Ja.error(t),console.error(t),process.exit(1)}}o(Mq,"initSync");function Pq(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:a,local_studio_on:c}=e,u=Mr.join(__dirname,"../../","unitTests");Ls[pu]=Mr.join(u,"hdb_boot_properties.file"),Ee(ee.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Mr.join(u,"settings.test")),Ee(ee.HDB_SETTINGS_NAMES.INSTALL_USER,og.userInfo()?og.userInfo().username:void 0),Ee(ee.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.HDB_SETTINGS_NAMES.CERT_KEY,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Mr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Mr.join(u,"envDir","utility","keys","certificate.pem")),Ee(ee.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(ee.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Mr.join(u,"envDir","log")),Ee(ee.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Mr.join(u,"envDir")),Ee(ee.CONFIG_PARAMS.STORAGE_PATH,Mr.join(u,"envDir")),Ee(ee.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,xn.isEmpty(n)?!0:n),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,xn.isEmpty(n)?!0:n),Ee(ee.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(ee.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,xn.isEmpty(i)?!1:i),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,xn.isEmpty(i)?!1:i),Ee(ee.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(ee.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(ee.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Mr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(ee.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,xn.isEmpty(c)?!1:c),a&&(Ee("CORS_ACCESSLIST",a),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,a)),s&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${pu}. Please check your boot props and settings files`;Ja.fatal(r),Ja.error(t)}}o(Pq,"initTestEnvironment")});var we=m((Bte,mg)=>{"use strict";var to=g(),vq=x(),Bt=Q(),ro=require("path"),Bq=require("minimist"),lg=require("fs-extra"),_g=require("lodash");Bt.initSync();var{CONFIG_PARAMS:cn,SCHEMAS_PARAM_CONFIG:Xa,SYSTEM_SCHEMA_NAME:Tu}=to,Za,ja,eo;function dg(){if(Za!==void 0)return Za;if(Bt.getHdbBasePath()!==void 0)return Za=Bt.get(cn.STORAGE_PATH)||ro.join(Bt.getHdbBasePath(),to.DATABASES_DIR_NAME),Za}o(dg,"getBaseSchemaPath");function Eg(){if(ja!==void 0)return ja;if(Bt.getHdbBasePath()!==void 0)return ja=hg(Tu),ja}o(Eg,"getSystemSchemaPath");function fg(){if(eo!==void 0)return eo;if(Bt.getHdbBasePath()!==void 0)return eo=Bt.get(to.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ro.join(Bt.getHdbBasePath(),to.TRANSACTIONS_DIR_NAME),eo}o(fg,"getTransactionAuditStoreBasePath");function Hq(e,t){let r=Bt.get(cn.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ro.join(fg(),e.toString())}o(Hq,"getTransactionAuditStorePath");function hg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(to.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ro.join(dg(),e)}o(hg,"getSchemaPath");function Fq(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,Bq(process.argv));let s=r[cn.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(a){if(!vq.isObject(s))throw a;i=s}for(let a of i){let c=a[Tu];if(!c)continue;let u=Bt.get(cn.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Xa.PATH];if(l)return _g.set(u,[Tu,Xa.TABLES,t,Xa.PATH],l),Bt.setProperty(cn.SCHEMAS,u),l;let _=c?.[Xa.PATH];if(_)return _g.set(u,[Tu,Xa.PATH],_),Bt.setProperty(cn.SCHEMAS,u),_}}let n=r[cn.STORAGE_PATH.toUpperCase()];if(n){if(!lg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ro.join(n,e);return lg.mkdirsSync(i),Bt.setProperty(cn.STORAGE_PATH,n),i}return Eg()}o(Fq,"initSystemSchemaPaths");function qq(){Za=void 0,ja=void 0,eo=void 0}o(qq,"resetPaths");mg.exports={getBaseSchemaPath:dg,getSystemSchemaPath:Eg,getTransactionAuditStorePath:Hq,getTransactionAuditStoreBasePath:fg,getSchemaPath:hg,initSystemSchemaPaths:Fq,resetPaths:qq}});var Ht=m((Gte,gg)=>{"use strict";var Gq=rr().LMDB_ERRORS_ENUM,Fte=require("lmdb"),xq=xe(),qte=require("buffer").Buffer,{OVERFLOW_MARKER:Sg,MAX_SEARCH_KEY_LENGTH:Ru}=xq,pg=["number","string","symbol","boolean","bigint"];function kq(e){if(e=e?.primaryStore||e,!e)throw new Error(Gq.ENV_REQUIRED)}o(kq,"validateEnv");function Vq(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}o(Vq,"stringifyData");function $q(e){return e instanceof Date?e.valueOf():e}o($q,"convertKeyValueToWrite");function Yq(e){if(e==null)return;if(pg.includes(typeof e))return e.length>Ru?[e.slice(0,Ru)+Sg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(pg.includes(typeof n))n.length>Ru?t.push(n.slice(0,Ru)+Sg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}o(Yq,"getIndexedValues");var gu=0,Tg=0;function Rg(){Tg=Date.now()-performance.now()}o(Rg,"adjustStartTime");Rg();var Kq=6e4;setInterval(Rg,Kq).unref();function Wq(){let e=performance.now()+Tg;return e>gu?(gu=e,e):(gu+=488e-6,gu)}o(Wq,"getNextMonotonicTime");gg.exports={validateEnv:kq,stringifyData:Vq,convertKeyValueToWrite:$q,getNextMonotonicTime:Wq,getIndexedValues:Yq}});var Ag,Jr,bE,so=pe(()=>{Ag=require("events"),Jr=class extends Ag.EventEmitter{static{o(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new bE;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)}},bE=class{static{o(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 no(e){return e[ft]||(e[ft]=Object.create(null))}function yu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let a of n){let c=a.name,u={get(){let l=this[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=Og(_,a);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){no(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,a.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Au.ClientError)(`${c} must be a string, attempt to assign ${l}`);no(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Au.ClientError)(`${c} must be a string, attempt to assign ${l}`);no(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(a){let c=s[a];if(c)return c.get.call(this);let u=this[ft];return u?.[a]!==void 0?u[a]:this[ce]?.[a]}),i("set",function(a,c){let u=s[a];if(u)return u.set.call(this,c);if(t.sealed)throw new Au.ClientError("Can not add a property to a sealed table schema");no(this)[a]=c}),i("deleteProperty",function(a){no(this)[a]=void 0}),i("toJSON",function(){let a=this[ft],c;for(let l in a)c||(c=Object.assign({},this[ce])),c[l]=a[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(a,c){Object.defineProperty(r,a,{value:c,configurable:!0})}o(i,"setMethod")}function Og(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{o(this,"TrackedObject")}constructor(n){this[ce]=n}},yu(r,t)),new r(e)):new Ou(e);case Array:let s=new bu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let a=e[n];a&&typeof a=="object"&&(a=Og(a,t?.elements)),s[n]=a}return s}}function Iu(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ce]));let i=t[n];i&&typeof i=="object"&&(i=Iu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function io(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 a=io(i);a!==i&&t===e&&(t=e.slice(0)),i=a}t[s]=i}return Object.freeze(t)}let r=e[ft];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=io(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Nu(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(Nu(i))return!0}else return!0}}else{let r=e[ft];for(let s in r){let n=r[s];if(n&&typeof n=="object"){let i=t[s];if(i&&n[ce]===i){if(Nu(n))return!0}else return!0}else return!0}}return!1}var Au,ft,Ou,kn,bu,wu=pe(()=>{Xr();Au=D(W()),ft=Symbol("own-data");o(no,"getChanges");o(yu,"assignTrackedAccessors");o(Og,"trackObject");Ou=class{static{o(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};yu(Ou,{});o(Iu,"collapseData");o(io,"deepFreeze");o(Nu,"hasChanges");kn=Symbol.for("has-array-changes"),bu=class extends Array{static{o(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()}};bu.prototype.constructor=Array});function Ye(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new yE;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(a){i(a)}return n(s);function n(a){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,a)):(e.transaction=null,a)}function i(a){throw r.abort(),e.transaction=null,a}}var Ng,bg,yE,Vn=pe(()=>{Ng=D(Ht()),bg=require("../../index");Xr();o(Ye,"transaction");(0,bg._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};yE=class extends Array{static{o(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,Ng.getNextMonotonicTime)());for(let n=0;n<s;n++){let a=this[n].commit(this.timestamp,t);a?.then&&r.push(a)}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 CE(e,t,r,s,n){let i=e[0]??e.attribute,a,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(zq[d]||d){case"lt":a=!0,c=_;break;case"le":a=!0,c=_,u=!0;break;case"gt":a=_,l=!0;break;case"ge":a=_;break;case"prefix":a=_,c=_.slice(0),c[c.length-1]=jr.MAXIMUM_KEY;break;case"starts_with":a=_.toString(),c=_+String.fromCharCode(65535);break;case"between":a=_[0],a instanceof Date&&(a=a.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case lt.SEARCH_TYPES.EQUALS:case void 0:a=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let S=a;a=c,c=S,S=!l,l=!u,u=S}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new IE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=UE(e);if(!S)throw new IE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:y,value:O})=>new Promise(H=>setImmediate(()=>H(S(O)?y:Ig.SKIP))))}let T={start:a,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:S})=>S)}function UE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case lt.SEARCH_TYPES.EQUALS:case void 0:return Zr(r,n=>n===s);case lt.SEARCH_TYPES.CONTAINS:return Zr(r,n=>n?.toString().includes(s));case lt.SEARCH_TYPES.ENDS_WITH:case lt.SEARCH_TYPES._ENDS_WITH:return Zr(r,n=>n?.toString().endsWith(s));case lt.SEARCH_TYPES.STARTS_WITH:case lt.SEARCH_TYPES._STARTS_WITH:return Zr(r,n=>typeof n=="string"&&n.startsWith(s));case lt.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),Zr(r,n=>(0,jr.compareKeys)(n,s[0])>=0&&(0,jr.compareKeys)(n,s[1])<=0);case"gt":case lt.SEARCH_TYPES.GREATER_THAN:case lt.SEARCH_TYPES._GREATER_THAN:return Zr(r,n=>(0,jr.compareKeys)(n,s)>0);case"ge":case lt.SEARCH_TYPES.GREATER_THAN_EQUAL:case lt.SEARCH_TYPES._GREATER_THAN_EQUAL:return Zr(r,n=>(0,jr.compareKeys)(n,s)>=0);case lt.SEARCH_TYPES.LESS_THAN:case"lt":case lt.SEARCH_TYPES._LESS_THAN:return Zr(r,n=>(0,jr.compareKeys)(n,s)<0);case"le":case lt.SEARCH_TYPES.LESS_THAN_EQUAL:case lt.SEARCH_TYPES._LESS_THAN_EQUAL:return Zr(r,n=>(0,jr.compareKeys)(n,s)<=0);case"ne":return Zr(r,n=>(0,jr.compareKeys)(n,s)!==0);default:return}}function Zr(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 Cu(e){if(!e)return;let t=new wE,r,s,n,i,a;for(;r=yg.exec(e);){i=yg.lastIndex;let[,c,u]=r;switch(u){case")":switch(a){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 ${a}`)}break;case"(":a=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=Qq[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 IE,lt,jr,Ig,yg,Qq,zq,wE,Uu=pe(()=>{IE=D(W()),lt=D(xe()),jr=require("ordered-binary"),Ig=require("lmdb"),yg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,Qq={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};o(CE,"idsForCondition");zq={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};o(UE,"filterByType");o(Zr,"attributeComparator");o(Cu,"parseQuery");wE=class{static{o(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 ME={};Ze(ME,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ie,IS_COLLECTION:()=>Ms,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Mg,snake_case:()=>Xq});function Xq(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function wg(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 LE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,a){let c,u,l;if(r?a?(l=i,a=a[Oe]||a):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,a=i[Oe]||i):l=i:(l=n,c=l[ie]??l[this.primaryKey]??null):i?a=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(a=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let d of n){if(typeof d=="object"&&d)break;c.push(d)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let d=c.indexOf("?");if(d>-1){let f=this.parseQuery(c.slice(d+1));u?u=Object.assign(f,u):u=f,c=c.slice(0,d)}let E=this.parsePath(c,a,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;if(a||(a={}),t.allowInvalidated&&(a.allowInvalidated=!0),a.transaction){let d=this.getResource(c,a,t);return d.then?d.then(_):_(d)}else return Ye(a,()=>{let d=this.getResource(c,a,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[Mg]=!1),a.authorize){a.authorize=!1;let E=t.type==="read"?d.allowRead(a.user,a):t.type==="update"?d.doesExist?.()===!1?d.allowCreate(a.user,a):d.allowUpdate(a.user,a):t.type==="create"?d.allowCreate(a.user,a):d.allowDelete(a.user,a);if(E?.then)return E.then(f=>{if(!f)throw new Du(a.user);return typeof l?.then=="function"?l.then(h=>e(d,u,a,h)):e(d,u,a,l)});if(!E)throw new Du(a.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,a,E)):e(d,u,a,l)}o(_,"authorizeActionOnResource")}}function vr(e,t){let r=new Lg.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 DE(e){let t=e[ce];if(t){let r=e[ft];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function Cg(e){if(typeof e=="string")return t=>DE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=DE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=DE(r);for(let i of e){let a=n(i);a===void 0&&t&&(a=null),s[i]=a}return s}}else throw new Error("Invalid select argument type "+typeof e)}var Ug,Dg,Lg,Oe,ie,Ms,Mg,ce,Jq,ht,Du,LE,Xr=pe(()=>{Ug=require("crypto");so();Dg=require("../../index"),Lg=D(W());wu();Vn();Uu();Oe=Symbol.for("context"),ie=Symbol.for("primary-key"),Ms=Symbol("is-collection"),Mg=Symbol("save-updates"),ce=Symbol("stored-record"),Jq={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{o(this,"Resource")}[Oe];[ie];static transactions;constructor(t,r){this[ie]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(a);return a(i);function a(c){let u;if((u=r?.select)&&c!=null){let l=Cg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Pr(function(t,r,s,n){if(Array.isArray(n)&&t[Ms]){let i=[],a=s.authorize;for(let c of n)a&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Ug.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ye(s,()=>{let i=new this(n,s),a=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,a?.then?a.then(()=>n):n})}static post=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(r):vr(t,"connect")},{type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(s):vr(t,"search"),a=s.select;if(a&&s.hasOwnProperty("select")&&i!=null){let c=Cg(a);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):vr(t,"move")},{type:"delete"});post(t){if(this[Ms])return this.constructor.create(this[ie],t,this[Oe]);vr(this,"post")}static isCollection(t){return t?.[Ms]}static coerceId(t){return t}static parseQuery(t){return Cu(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 a=r?.headers&&Jq[i];if(a)r.headers.accept=a;else if(s)s.property=i;else return{query:{property:i},id:wg(t,this)}}return wg(t,this)}static getResource(t,r,s){let n,i=r[Oe],a;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?a=r.isCollection:a=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=a&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ie]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ie],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return a&&(n[Ms]=!0),n}connect(t){let r=new Jr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ie]}getContext(){return this[Oe]}};ht.prototype[Oe]=null;(0,Dg._assignPackageExport)("Resource",ht);o(Xq,"snake_case");Du=class extends Error{static{o(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.http_resp_code=403):(super("Must login"),this.http_resp_code=401)}};o(wg,"pathToId");LE=class extends Array{static{o(this,"MulitPartId")}toString(){return this.join("/")}};o(Pr,"transactional");o(vr,"missingMethod");o(DE,"selectFromObject");o(Cg,"transformForSelect")});var PE={};Ze(PE,{server:()=>mt});var Pg,mt,un=pe(()=>{Pg=require("../../index"),mt={};(0,Pg._assignPackageExport)("server",mt)});var HE={};Ze(HE,{loadGQLSchema:()=>jq,start:()=>BE,startOnMainThread:()=>Zq});function BE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:a,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=a(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let Y=function(A){if(A.kind==="NonNullType"){let G=Y(A.type);return G.nullable=!0,G}return A.kind==="ListType"?{type:"array",elements:Y(A.type)}:{type:A.name?.value}};o(Y,"getProperty");let S=T.name.value,y=[],O={table:null,database:null,properties:y};E.set(S,O);for(let A of T.directives){if(A.name.value==="table"){for(let w of A.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=S),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(A.name.value==="sealed"&&(O.sealed=!0),A.name.value==="export"){O.export=!0;for(let w of A.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let H=!1;for(let A of T.fields){let w=Y(A.type);w.name=A.name.value,y.push(w);for(let G of A.directives)if(G.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,H=!0);else if(G.name.value==="indexed")w.indexed=!0;else if(G.name.value==="createdTime")w.assignCreatedTime=!0;else if(G.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(G.name.value==="expiresAt")w.expiresAt=!0;else if(G.name.value==="allow"){let k=w.authorizedRoles=[];for(let X of G.arguments)X.name.value==="role"&&k.push(X.value.value)}}O.typeName=S,S==="Query"&&(h=O)}for(let[T,S]of E)for(let y of S.properties){let O=E.get(y.type);O&&(y.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,vE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let S=E.get(T.type);if(!S)throw new Error(`${T.type} was not found as a Query export`);i.set((0,vE.dirname)(s)+"/"+T.name,S.tableClass)}}}var vE,Zq,jq,vg=pe(()=>{vE=require("path");de();o(BE,"start");Zq=BE,jq=BE({ensureTable:tt}).handleFile});async function Lu(e){return eG?(ao||(ao=tG(sG)),(await(await ao).import(e)).namespace):import(e)}async function tG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ao=new Compartment({console,Math,Date,fetch:rG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Hg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:ht,tables:nr,databases:ve})}};let s=await(0,Bg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ao}function rG(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 sG(){return{Resource:ht,tables:nr}}var Bg,Hg,eG,ao,FE=pe(()=>{Xr();de();Bg=require("fs/promises"),Hg=require("path"),eG=!1;o(Lu,"secureImport");o(tG,"getCompartment");o(rG,"secureOnlyFetch");o(sG,"getGlobalVars")});var GE={};Ze(GE,{handleFile:()=>nG});async function nG(e,t,r,s){let n=new Map,i=(0,Fg.pathToFileURL)(r).toString(),a=await Lu(i);u(a.default)&&s.set((0,qE.dirname)(t),a.default),c(a,(0,qE.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)}}o(c,"recurseForResources");function u(l){return typeof l=="function"&&(l.get||l.put||l.post||l.delete)}return o(u,"isResource"),n}var Fg,qE,qg=pe(()=>{Fg=require("url");FE();qE=require("path");o(nG,"handleFile")});var kE={};Ze(kE,{start:()=>iG});function iG({resources:e}){e.set("login",xE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var xE,Gg=pe(()=>{Xr();o(iG,"start");xE=class extends ht{static{o(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:a}=r;return{data:await s.login(n,i)}}}});var $E=m((fre,Vg)=>{"use strict";var{Readable:aG}=require("stream"),oG=1e4;Vg.exports={streamAsJSON(e){return new VE({value:e})}};var VE=class extends aG{static{o(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](),a;for(;;)if(a=i.next(),a.then&&(yield a.then(c=>(a=c,""))),a.done){yield"]";return}else n?n=!1:yield",",yield*this.serialize(a.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),xg)}catch(n){yield xg(n)}else yield JSON.stringify(t)}else yield JSON.stringify(t)}_read(){if(!this._amReading){if(this._amReading=!0,this.done)return this.push(null);kg(this.readIterator(this.iterator),t=>{t?(this.done=!0,this.push(null)):this._amReading=!1},t=>{console.error(t),this.done=!0,this.push(t.toString()),this.push(null)})}}push(t){return t===null||t instanceof Buffer?(this.bufferSize>0&&this.flush(),super.push(t)):(this.bufferSize+=t.length||t.toString().length,this.buffer.push(t),this.bufferSize>oG?this.flush():!0)}flush(){let t=super.push(this.buffer.join(""));return this.buffer=[],this.bufferSize=0,t}readIterator(t){try{let r;if(t.childIterator)return kg(this.readIterator(t.childIterator),s=>{if(s)return t.childIterator=null,this.readIterator(t)});do{let s=t.next();if(s.done)return!0;if(r=s.value,r==null)r="null";else{if(r.then)return this.flush(),Promise.resolve(r).then(n=>{if(n&&typeof n.return=="function")return t.childIterator=n,this.readIterator(t);if(this.push(n+""))return this.readIterator(t)});if(typeof r.return=="function")return t.childIterator=r,this.readIterator(t)}}while(this.push(r))}catch(r){return console.error(r),this.push(r.toString()),this.push(null),!0}}};function xg(e){return console.error(e),JSON.stringify(e.toString())}o(xg,"handleError");function kg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}o(kg,"when")});var rA=m((Sre,tA)=>{"use strict";var YE=require("recursive-iterator"),cG=require("alasql"),KE=require("clone"),$g=x(),{handleHDBError:Yg,hdb_errors:uG}=W(),{HDB_ERROR_MSGS:Kg,HTTP_STATUS_CODES:Wg}=uG,{getDatabases:lG}=(de(),re(Ne)),_G=["DISTINCT_ARRAY"],Qg=Symbol("validateTables"),WE=Symbol("validateTable"),mre=Symbol("getAllColumns"),zg=Symbol("validateAllColumns"),Mu=Symbol("findColumn"),Jg=Symbol("validateOrderBy"),oo=Symbol("validateSegment"),QE=Symbol("validateColumn"),Xg=Symbol("setColumnsForTable"),Zg=Symbol("checkColumnsForAsterisk"),jg=Symbol("validateGroupBy"),eA=Symbol("hasColumns"),zE=class{static{o(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Qg](),this[Zg](),this[zg]()}[Qg](){if(this[eA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[WE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[WE](t.table)})}}[eA](){let t=!1,r=new YE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[WE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=lG();if(!r[t.databaseid])throw Yg(new Error,Kg.SCHEMA_NOT_FOUND(t.databaseid),Wg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Yg(new Error,Kg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Wg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=KE(n);i.table=KE(t),this.attributes.push(i)})}[Mu](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)}[Zg](){let t=new YE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Xg](r.tableid)}[Xg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new cG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[zg](){this[oo](this.statement.columns,!1),this[oo](this.statement.joins,!1),this[oo](this.statement.where,!1),this[jg](this.statement.group,!1),this[oo](this.statement.order,!0)}[oo](t,r){if(!t)return;let s=new YE(t),n=[];for(let{node:i,path:a}of s)!$g.isEmpty(i)&&!$g.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Jg](i):n.push(this[QE](i)));return n}[jg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&_G.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=KE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Mu](s)[0];n&&r.push(n)}}}),this.statement.group.forEach(s=>{let n=null;if(!s.columnid)r.forEach((i,a)=>{if(i.toString()===s.toString()){n=i,r.splice(a,1);return}});else{let i=this[Mu](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((a,c)=>{if(a.attribute===i[0].attribute&&a.table.tableid===i[0].table.tableid){n=a,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`}[Jg](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[QE](t)}[QE](t){let r=this[Mu](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]}};tA.exports=zE});var nA=m((Tre,sA)=>{"use strict";var JE=class{static{o(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")}};sA.exports=JE});var aA=m((gre,iA)=>{"use strict";var XE=class{static{o(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};iA.exports=XE});var Pu=m((Ore,oA)=>{"use strict";var jE=Q(),ef=g();jE.initSync();var dG=jE.get(ef.CONFIG_PARAMS.STORAGE_COMPRESSION),EG=jE.get(ef.CONFIG_PARAMS.STORAGE_CACHING)!==!1,fG=ef.UPDATES_PROPERTY,ZE=class{static{o(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=dG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=EG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===fG)}};oA.exports=ZE});var Bu=m((bre,uA)=>{"use strict";var Bi=Q(),co=g();Bi.initSync();var hG=Bi.get(co.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Bi.get(co.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Bi.get(co.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",cA=Bi.get(co.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),mG=Bi.get(co.CONFIG_PARAMS.STORAGE_NOREADAHEAD),vu=class{static{o(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=hG,this.noFSAccess=!0,cA!==void 0&&(this.overlappingSync=cA),this.noReadAhead=mG}};uA.exports=vu;vu.MAX_DBS=1e4});var ye=m((Ire,TA)=>{"use strict";var rf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Hu=Ht(),dA=q(),Ft=rr().LMDB_ERRORS_ENUM,Fu=aA(),sf=Pu(),EA=Bu(),ln=xe(),lA=g(),{table:SG,resetDatabases:pG}=(de(),re(Ne)),_A=Q(),Hr=ln.INTERNAL_DBIS_NAME,fA=ln.DBI_DEFINITION_NAME,TG="data.mdb",RG="lock.mdb",uo=".mdb",gG="-lock",tf=class{static{o(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Rr(t,r),this.key_type=this.dbi[ln.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[ln.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new rf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function qu(e,t){if(e===void 0)throw new Error(Ft.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ft.ENV_NAME_REQUIRED)}o(qu,"pathEnvNameValidation");async function nf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+uo);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,TG),Br.constants.R_OK|Br.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}}o(nf,"validateEnvironmentPath");function Gu(e,t){if(Hu.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}o(Gu,"validateEnvDBIName");async function AG(e,t,r=!1,s=!1){qu(e,t);let n=ir.basename(e);t=t.toString();let i=_A.get(lA.CONFIG_PARAMS.SCHEMAS);i||_A.setProperty(lA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await nf(e,t,s),hA(e,t,r)}catch(a){if(a.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new EA(s?c:c+uo,!1),l=rf.open(u);l.dbis=Object.create(null);let _=new sf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=af(e,t,r);return l[ln.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw a}}o(AG,"createEnvironment");async function OG(e,t,r,s=!0){qu(e,t),t=t.toString();let n=ir.join(e,t);return SG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}o(OG,"copyEnvironment");async function hA(e,t,r=!1){qu(e,t),t=t.toString();let s=af(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 nf(e,t),i=ir.join(e,t+uo),a=n!=i,c=new EA(n,a),u=rf.open(c);u.dbis=Object.create(null);let l=SA(u);for(let _=0;_<l.length;_++)Rr(u,l[_]);return u[ln.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}o(hA,"openEnvironment");async function NG(e,t,r=!1){qu(e,t),t=t.toString();let s=ir.join(e,t+uo),n=await nf(e,t);if(global.lmdb_map!==void 0){let i=af(e,t,r);if(global.lmdb_map[i]){let a=global.lmdb_map[i];await mA(a),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+gG:ir.join(ir.dirname(n),RG))}o(NG,"deleteEnvironment");async function mA(e){Hu.validateEnv(e);let t=e[ln.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}o(mA,"closeEnvironment");function af(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}o(af,"getCachedEnvironmentName");function bG(e){Hu.validateEnv(e);let t=Object.create(null),r=Rr(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new Fu,n)}catch{dA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}o(bG,"listDBIDefinitions");function SA(e){Hu.validateEnv(e);let t=[],r=Rr(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}o(SA,"listDBIs");function yG(e,t){let s=Rr(e,Hr).getEntry(t),n=new Fu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{dA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}o(yG,"getDBIDefinition");function pA(e,t,r,s=!r){if(Gu(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Rr(e,t)}catch(n){if(n.message===Ft.DBI_DOES_NOT_EXIST){let i=new sf(r,s===!0),a=e.openDB(t,i),c=new Fu(r===!0,s);return a[fA]=c,Rr(e,Hr).putSync(t,c),e.dbis[t]=a,a}throw n}}o(pA,"createDBI");function Rr(e,t){if(Gu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=yG(e,t):r=new Fu,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[fA]=r,e.dbis[t]=s,s}o(Rr,"openDBI");function IG(e,t){Gu(e,t),t=t.toString();let r=Rr(e,t),s=r.getStats();return r[ln.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}o(IG,"statDBI");async function wG(e,t){try{let r=ir.join(e,t+uo);return(await Br.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}o(wG,"environmentDataSize");function CG(e,t){if(Gu(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Rr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Rr(e,Hr).removeSync(t)}o(CG,"dropDBI");function UG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Rr(e,i)}catch(a){if(a.message===Ft.DBI_DOES_NOT_EXIST)pA(e,i,i!==t,i===t),s=!0;else throw a}}s&&pG()}o(UG,"initializeDBIs");TA.exports={openDBI:Rr,openEnvironment:hA,createEnvironment:AG,listDBIs:SA,listDBIDefinitions:bG,createDBI:pA,dropDBI:CG,statDBI:IG,deleteEnvironment:NG,initializeDBIs:UG,TransactionCursor:tf,environmentDataSize:wG,copyEnvironment:OG,closeEnvironment:mA}});var gA=m((Cre,RA)=>{"use strict";var of=class{static{o(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};RA.exports=of});var OA=m((Dre,AA)=>{"use strict";var cf=class{static{o(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}};AA.exports=cf});var bA=m((Mre,NA)=>{"use strict";var uf=class{static{o(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};NA.exports=uf});var Hi=m((Fre,wA)=>{"use strict";var DG=ye(),LG=gA(),MG=OA(),PG=bA(),es=Ht(),lo=rr().LMDB_ERRORS_ENUM,vG=xe(),Ps=g(),BG=x(),HG=require("uuid"),vre=require("lmdb"),{handleHDBError:FG,hdb_errors:qG}=W(),{OVERFLOW_MARKER:Bre,MAX_SEARCH_KEY_LENGTH:Hre}=vG,yA=Q();yA.initSync();var xu=yA.get(Ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),lf=Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$n=Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function GG(e,t,r,s,n=es.getNextMonotonicTime()){ff(e,t,r,s),_f(e,t,r);let i=new LG,a=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];IA(l,!0,n);let _=xG(e,t,r,l),d=l[t];a.push(_),c.push(d)}return df(a,c,s,i,n)}o(GG,"insertRecords");function xG(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let a=r[i];if(a===t||s.hasOwnProperty(a)===!1)continue;let c=s[a];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][Ps.FUNC_VAL],s[a]=c)}let u=es.getIndexedValues(c),l=e.dbis[a];if(u){xu&&l.prefetch(u.map(_=>({key:_,value:n})),ku);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}xu&&e.dbis[t].prefetch([n],ku),e.dbis[t].put(n,s,s[$n])})}o(xG,"insertRecord");function kG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}o(kG,"removeSkippedRecords");function IA(e,t,r){let s=r>0;(s||!Number.isInteger(e[$n]))&&(e[$n]=r||(r=es.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[lf]))&&(e[lf]=r||es.getNextMonotonicTime()):delete e[lf]}o(IA,"setTimestamps");function _f(e,t,r){r.indexOf(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),DG.initializeDBIs(e,t,r)}o(_f,"initializeTransaction");async function VG(e,t,r,s,n=es.getNextMonotonicTime()){ff(e,t,r,s),_f(e,t,r);let i=new MG,a=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Ef(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),a.push(l);continue}c.push(E),u.push(d)}return df(c,u,s,i,n,a)}o(VG,"updateRecords");async function $G(e,t,r,s,n=es.getNextMonotonicTime()){try{ff(e,t,r,s)}catch(u){throw FG(u,u.message,qG.HTTP_STATUS_CODES.BAD_REQUEST)}_f(e,t,r);let i=new PG,a=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;BG.isEmpty(l[t])?(_=HG.v4(),l[t]=_):_=l[t];let d=Ef(e,t,l,_,i,!1,n);a.push(d),c.push(_)}return df(a,c,s,i,n)}o($G,"upsertRecords");async function df(e,t,r,s,n,i=[]){let a=await Promise.all(e);for(let c=0,u=a.length;c<u;c++)a[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||es.getNextMonotonicTime(),kG(r,i),s}o(df,"finalizeWrite");function Ef(e,t,r,s,n,i=!1,a){let c=e.dbis[t],u=c.getEntry(s),l=u?.value,_=l;if(!l){if(i)return!1;l={}}if(IA(r,!_,a),Number.isInteger(r[$n])&&l[$n]>r[$n])return!1;_&&n.original_records.push(l);let d,E=o(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],S=e.dbis[h];if(S===void 0)continue;let y=l[h];if(typeof T=="function"){let H=T([[l]]);Array.isArray(H)&&(T=H[0][Ps.FUNC_VAL],r[h]=T)}if(T===y)continue;let O=es.getIndexedValues(y);if(O){xu&&S.prefetch(O.map(H=>({key:H,value:s})),ku);for(let H=0,Y=O.length;H<Y;H++)S.remove(O[H],s)}if(O=es.getIndexedValues(T),O){xu&&S.prefetch(O.map(H=>({key:H,value:s})),ku);for(let H=0,Y=O.length;H<Y;H++)S.put(O[H],s)}}let f=Object.assign({},l,r);c.put(s,f,f[$n])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:Ef(e,t,r,s,n,i,a))}o(Ef,"updateUpsertRecord");function YG(e,t,r){if(es.validateEnv(e),t===void 0)throw new Error(lo.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(lo.WRITE_ATTRIBUTES_REQUIRED):new Error(lo.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}o(YG,"validateBasic");function ff(e,t,r,s){if(YG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(lo.RECORDS_REQUIRED):new Error(lo.RECORDS_MUST_BE_ARRAY)}o(ff,"validateWrite");function ku(){}o(ku,"noop");wA.exports={insertRecords:GG,updateRecords:VG,upsertRecords:$G}});var Yn=m((Gre,KG)=>{KG.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 ts=m((xre,DA)=>{"use strict";var UA=x(),CA=g(),Fi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,vs=require("joi"),_n={schema_format:{pattern:Fi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},WG=vs.alternatives(vs.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),vs.number()).required(),QG=vs.alternatives(vs.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),vs.number()),zG=vs.alternatives(vs.string().min(1).max(_n.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+_n.schema_format.message}),vs.number()).required();function JG(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>_n.schema_length.maximum?`'${e}' maximum of 250 characters`:Fi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}o(JG,"checkValidTable");function XG(e,t){return UA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}o(XG,"validateSchemaExists");function ZG(e,t){let r=t.state.ancestors[0].schema;return UA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}o(ZG,"validateTableExists");function jG(e,t){return e.toLowerCase()===CA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${CA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}o(jG,"validateSchemaName");DA.exports={common_validators:_n,schema_regex:Fi,hdb_schema_table:WG,validateSchemaExists:XG,validateTableExists:ZG,validateSchemaName:jG,checkValidTable:JG,hdb_database:QG,hdb_table:zG}});var Vu=m((Vre,LA)=>{var{common_validators:rs}=ts(),Eo=Pe(),_o="is required",Ke={database:{presence:!1,format:rs.schema_format,length:rs.schema_length},schema:{presence:!1,format:rs.schema_format,length:rs.schema_length},table:{presence:!0,format:rs.schema_format,length:rs.schema_length},attribute:{presence:!0,format:rs.schema_format,length:rs.schema_length},hash_attribute:{presence:!0,format:rs.schema_format,length:rs.schema_length}};function fo(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}o(fo,"makeAttributesStrings");function ex(e){return e=fo(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Eo.validateObject(e,Ke)}o(ex,"schema_object");function tx(e){return e=fo(e),Ke.table.presence={message:_o},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Eo.validateObject(e,Ke)}o(tx,"table_object");function rx(e){return e=fo(e),Ke.table.presence={message:_o},Ke.attribute.presence=!1,Eo.validateObject(e,Ke)}o(rx,"create_table_object");function sx(e){return e=fo(e),Ke.table.presence={message:_o},Ke.attribute.presence={message:_o},Ke.hash_attribute.presence=!1,Eo.validateObject(e,Ke)}o(sx,"attribute_object");function nx(e){return e=fo(e),Ke.table.presence={message:_o},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,Eo.validateObject(e,Ke)}o(nx,"describe_table");function ix(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`)}}o(ix,"validateTableResidence");LA.exports={schema_object:ex,create_table_object:rx,table_object:tx,attribute_object:sx,describe_table:nx,validateTableResidence:ix}});var PA=m((Yre,MA)=>{"use strict";var ax=require("uuid"),hf=class{static{o(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||ax.v4(),this.schema_table=`${this.schema}.${this.table}`}};MA.exports=hf});var $u=m((Wre,vA)=>{"use strict";var ox=PA(),mf=class extends ox{static{o(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,a=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=a}};vA.exports=mf});var HA=m((zre,BA)=>{"use strict";BA.exports=ux;var cx="inserted";function ux(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===cx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}o(ux,"returnObject")});var Yu=m((Xre,kA)=>{"use strict";var lx=g(),Sf=ye(),_x=Hi(),{getSystemSchemaPath:dx,getSchemaPath:Ex}=we(),fx=Yn(),hx=Vu(),mx=$u(),Sx=HA(),{handleHDBError:FA,hdb_errors:GA}=W(),qA=x(),{HTTP_STATUS_CODES:px}=GA,pf=fx.hdb_attribute,xA=[];for(let e=0;e<pf.attributes.length;e++)xA.push(pf.attributes[e].attribute);var Tx="inserted";kA.exports=Rx;async function Rx(e){let t=hx.attribute_object(e);if(t)throw FA(new Error,t.message,GA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&qA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw FA(new Error,r,px.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=qA.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 mx(e.schema,e.table,e.attribute,e.id);try{let i=await Sf.openEnvironment(Ex(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}`);Sf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let a=await Sf.openEnvironment(dx(),lx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await _x.insertRecords(a,pf.hash_attribute,xA,[n]);return Sx(Tx,c,{records:[n]},u)}catch(i){throw i}}o(Rx,"lmdbCreateAttribute")});var Rf=m((jre,$A)=>{var{hdb_table:gx,hdb_database:VA}=ts(),Ax=Pe(),Tf=require("joi"),Ox={undefined:"undefined",null:"null"},Nx=o((e,t)=>{let r=Object.keys(e),s=r.length,n;for(let i=0;i<s;i++){let a=r[i];(!a||a.length===0||Ox[a]!==void 0)&&(n===void 0?n=`Invalid attribute name: '${a}'`:n+=`. Invalid attribute name: '${a}'`)}return n?t.message(n):e},"custom_records_val"),bx=Tf.object({database:VA,schema:VA,table:gx,records:Tf.array().items(Tf.object().custom(Nx)).required()});$A.exports=function(e){return Ax.validateBySchema(e,bx)}});var ho=m((rse,KA)=>{"use strict";var Bs=x(),YA=q(),tse=Rf(),{getDatabases:yx}=(de(),re(Ne)),{ClientError:Kn}=W();KA.exports=Ix;function Ix(e){if(Bs.isEmpty(e))throw new Kn("invalid update parameters defined.");if(Bs.isEmptyOrZeroLength(e.schema))throw new Kn("invalid schema specified.");if(Bs.isEmptyOrZeroLength(e.table))throw new Kn("invalid table specified.");if(!Array.isArray(e.records))throw new Kn("records must be an array");let t=yx()[e.schema]?.[e.table];if(Bs.isEmpty(t))throw new Kn(`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(a=>{if(i&&Bs.isEmptyOrZeroLength(a[r]))throw YA.error("a valid hash attribute must be provided with update record:",a),new Kn("a valid hash attribute must be provided with update record, check log for more info");if(!Bs.isEmptyOrZeroLength(a[r])&&(a[r]==="null"||a[r]==="undefined"))throw YA.error(`a valid hash value must be provided with ${e.operation} record:`,a),new Kn(`Invalid hash value: '${a[r]}' is not a valid hash attribute value, check log for more info`);!Bs.isEmpty(a[r])&&a[r]!==""&&s.has(Bs.autoCast(a[r]))&&(a.skip=!0),s.add(Bs.autoCast(a[r]));for(let c in a)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}o(Ix,"insertUpdateValidate")});var mo=m((nse,WA)=>{"use strict";var wx=g().OPERATIONS_ENUM,gf=class{static{o(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=wx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};WA.exports=gf});var Ro=m((ose,QA)=>{"use strict";var ase=mo(),Ku=g(),Of=x(),Af=q(),Cx=require("uuid"),{handleHDBError:So,hdb_errors:Ux}=W(),{HDB_ERROR_MSGS:po,HTTP_STATUS_CODES:To}=Ux;QA.exports=Dx;function Dx(e,t,r){for(let n=0;n<t.length;n++)Lx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Mx(i,r,e.operation)}}o(Dx,"processRows");function Lx(e){if(Buffer.byteLength(String(e))>Ku.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw So(new Error,po.ATTR_NAME_LENGTH_ERR(e),To.BAD_REQUEST,void 0,void 0,!0);if(Of.isEmptyOrZeroLength(e)||Of.isEmpty(e.trim()))throw So(new Error,po.ATTR_NAME_NULLISH_ERR,To.BAD_REQUEST,void 0,void 0,!0)}o(Lx,"validateAttribute");function Mx(e,t,r){if(!e.hasOwnProperty(t)||Of.isEmptyOrZeroLength(e[t])){if(r===Ku.OPERATIONS_ENUM.INSERT||r===Ku.OPERATIONS_ENUM.UPSERT){e[t]=Cx.v4();return}throw Af.error("Update transaction aborted due to record with no hash value:",e),So(new Error,po.RECORD_MISSING_HASH_ERR,To.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ku.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Af.error(e),So(new Error,po.HASH_VAL_LENGTH_ERR,To.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Af.error(e),So(new Error,po.INVALID_FORWARD_SLASH_IN_HASH_ERR,To.BAD_REQUEST,void 0,void 0,!0)}o(Mx,"validateHash")});var JA=m((use,zA)=>{"use strict";var Nf=class{static{o(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};zA.exports=Nf});var jA=m((_se,ZA)=>{"use strict";var bf=ye(),Px=q(),XA=rr().LMDB_ERRORS_ENUM;ZA.exports=vx;async function vx(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 a=t[i];if(a.startsWith(`${e.schema}.`)||a.startsWith(`txn.${e.schema}.`))try{await bf.closeEnvironment(global.lmdb_map[a])}catch(c){if(c.message!==XA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await bf.closeEnvironment(global.lmdb_map[s]),await bf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==XA.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){Px.error(t)}}o(vx,"cleanLMDBMap")});var Hs=m((Ese,sO)=>{"use strict";var go=require("crypto"),Bx=Q(),{CONFIG_PARAMS:Hx}=g(),tO="aes-256-cbc",Fx=32,qx=16,yf=64,rO=32,Gx=yf+rO,eO=new Map;sO.exports={encrypt:xx,decrypt:kx,createNatsTableStreamName:Vx};function xx(e){let t=go.randomBytes(Fx),r=go.randomBytes(qx),s=go.createCipheriv(tO,Buffer.from(t),r),n=s.update(e);n=Buffer.concat([n,s.final()]);let i=t.toString("hex"),a=r.toString("hex"),c=n.toString("hex");return i+a+c}o(xx,"encrypt");function kx(e){let t=e.substr(0,yf),r=e.substr(yf,rO),s=e.substr(Gx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),a=go.createDecipheriv(tO,Buffer.from(t,"hex"),n),c=a.update(i);return c=Buffer.concat([c,a.final()]),c.toString()}o(kx,"decrypt");function Vx(e,t){let r=Bx.get(Hx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=eO.get(r);return s||(s=go.createHash("md5").update(r).digest("hex"),eO.set(r,s)),s}o(Vx,"createNatsTableStreamName")});var Wn=m((mse,iO)=>{"use strict";var hse=gr(),Wu=q(),nO=Vu(),$x=Hs(),Qu=x(),{handleHDBError:zu,hdb_errors:Yx}=W(),{HDB_ERROR_MSGS:Ju,HTTP_STATUS_CODES:If}=Yx,Kx=Q();Kx.initSync();var{getDatabases:wf}=(de(),re(Ne));iO.exports={describeAll:Wx,describeTable:Xu,describeSchema:Qx};async function Wx(e){try{let t=Qu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=wf(),i={},a={},c=[];for(let l in n){i[l]=!0,!t&&!s&&(a[l]=e.hdb_user.role.permission[l].describe);let _=n[l];for(let d in _)try{let E;if(t||s)E=await Xu({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 Xu({schema:l,table:d},f)}E&&c.push(E)}catch(E){Wu.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]):a[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]={}:a[l]&&(u[l]={});return u}catch(t){return Wu.error("Got an error in describeAll"),Wu.error(t),zu(new Error,Ju.DESCRIBE_ALL_ERR)}}o(Wx,"describeAll");async function Xu(e,t){Qu.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=nO.describe_table(e);if(i)throw i;let c=wf()[r];if(!c)throw zu(new Error,Ju.SCHEMA_NOT_FOUND(e.schema),If.NOT_FOUND);let u=c[s];if(!u)throw zu(new Error,Ju.TABLE_NOT_FOUND(e.schema,e.table),If.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=$x.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){Wu.warn(`unable to stat table dbi due to ${d}`)}return _}o(Xu,"descTable");async function Qx(e){Qu.transformReq(e);let t=nO.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=wf()[s];if(!i)throw zu(new Error,Ju.SCHEMA_NOT_FOUND(e.schema),If.NOT_FOUND);let a={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Qu.isEmpty(u)||u.describe){let l=await Xu({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(a[l.name]=l)}}return a}o(Qx,"describeSchema")});var dn=m((Rse,lO)=>{var zx=Yn(),{callbackify:oO,promisify:Jx}=require("util"),{getDatabases:cO}=(de(),re(Ne));lO.exports={setSchemaDataToGlobal:aO,getTableSchema:Xx,getSystemSchema:Zx,setSchemaDataToGlobalAsync:Jx(aO)};var uO=Wn(),pse=oO(uO.describeAll),Tse=oO(uO.describeTable);function aO(e){global.hdb_schema=cO(),e&&e()}o(aO,"setSchemaDataToGlobal");function Xx(e,t,r){let s=cO()[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`)}o(Xx,"getTableSchema");function Zx(){return zx}o(Zx,"getSystemSchema")});var Ar=m((Ase,fO)=>{"use strict";var ju=Rf(),St=x(),jx=require("util"),el=Fr(),ek=dn(),_O=q(),{handleHDBError:Qn,hdb_errors:tk}=W(),{HTTP_STATUS_CODES:zn}=tk,rk=jx.promisify(ek.getTableSchema),sk="updated",dO="inserted",EO="upserted";fO.exports={insert:ik,update:ak,upsert:ok,validation:nk,flush:ck};async function nk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await rk(e.schema,e.table),r=ju(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={},a=!1;return e.operation==="update"&&(a=!0),e.records.forEach(c=>{if(a&&St.isEmptyOrZeroLength(c[s]))throw _O.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw _O.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}o(nk,"validation");async function ik(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await el.createRecords(e);return Zu(dO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}o(ik,"insertData");async function ak(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await el.updateRecords(e);return St.isEmpty(s.existing_rows)?Zu(sk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):Zu(s.update_action,[],e,s.hashes,void 0,s.txn_time)}o(ak,"updateData");async function ok(e){if(e.operation!=="upsert")throw Qn(new Error,"invalid operation, must be upsert",zn.INTERNAL_SERVER_ERROR);let t=ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await el.upsertRecords(e);return Zu(EO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}o(ok,"upsertData");function Zu(e,t,r,s,n,i){let a={message:`${e} ${t.length} of ${t.length+s.length} records`,new_attributes:n,txn_time:i};return e===dO?(a.inserted_hashes=t,a.skipped_hashes=s,a):e===EO?(a.upserted_hashes=t,a):(a.update_hashes=t,a.skipped_hashes=s,a)}o(Zu,"returnObject");function ck(e){return St.transformReq(e),el.flush(e.schema,e.table)}o(ck,"flush")});var Uf=m((Nse,SO)=>{var uk=Pe(),Cf=require("joi"),{hdb_table:lk,hdb_database:hO}=ts(),mO={schema:hO,database:hO,table:lk},_k={date:Cf.date().iso().required()},dk={timestamp:Cf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};SO.exports=function(e,t){let r=t==="timestamp"?{...mO,...dk}:{...mO,..._k},s=Cf.object(r);return uk.validateBySchema(e,s)}});var RO=m((bse,TO)=>{var Ek=Pe(),Df=require("joi"),{hdb_table:fk,hdb_database:pO}=ts(),hk=Df.object({schema:pO,database:pO,table:fk,hash_values:Df.array().required(),ids:Df.array()});TO.exports=function(e){return Ek.validateBySchema(e,hk)}});var AO=m((yse,gO)=>{"use strict";var Lf=class{static{o(this,"InsertObject")}constructor(t,r,s,n,i){this.operation=t,this.schema=r,this.table=s,this.hash_attribute=n,this.records=i}},Mf=class{static{o(this,"NoSQLSeachObject")}constructor(t,r,s,n,i,a){this.schema=t,this.table=r,this.search_attribute=s,this.hash_attribute=n,this.get_attributes=i,this.search_value=a}},Pf=class{static{o(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};gO.exports={InsertObject:Lf,NoSQLSeachObject:Mf,DeleteResponseObject:Pf}});var Zn=m((wse,IO)=>{"use strict";var NO=Uf(),mk=RO(),Jn=x(),OO=require("moment"),bO=q(),{promisify:Sk,callbackify:pk}=require("util"),Xn=g(),Tk=dn(),vf=Sk(Tk.getTableSchema),Bf=Fr(),{DeleteResponseObject:Rk}=AO(),{handleHDBError:En,hdb_errors:gk}=W(),{HDB_ERROR_MSGS:tl,HTTP_STATUS_CODES:fn}=gk,Ak="records successfully deleted",Ok=pk(yO);IO.exports={delete:Ok,deleteRecord:yO,deleteFilesBefore:Nk,deleteAuditLogsBefore:bk};async function Nk(e){let t=NO(e,"date");if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),!OO(e.date,OO.ISO_8601).isValid())throw En(new Error,tl.INVALID_DATE,fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,tl.INVALID_DATE,!0);let s=Jn.checkSchemaTableExist(e.schema,e.table);if(s)throw En(new Error,s,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,s,!0);let n=await Bf.deleteRecordsBefore(e);if(await vf(e.schema,e.table),bO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}o(Nk,"deleteFilesBefore");async function bk(e){let t=NO(e,"timestamp");if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),isNaN(e.timestamp))throw En(new Error,tl.INVALID_VALUE("Timestamp"),fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,tl.INVALID_VALUE("Timestamp"),!0);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw En(new Error,r,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);let s=await Bf.deleteAuditLogsBefore(e);return await vf(e.schema,e.table),bO.info(`Finished deleting audit logs before ${e.timestamp}`),s}o(bk,"deleteAuditLogsBefore");async function yO(e){e.ids&&(e.hash_values=e.ids);let t=mk(e);if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);Jn.transformReq(e);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw En(new Error,r,fn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);try{await vf(e.schema,e.table);let s=await Bf.deleteRecords(e);return Jn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ak}`),s}catch(s){if(s.message===Xn.SEARCH_NOT_FOUND_MESSAGE){let n=new Rk;return n.message=Xn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}o(yO,"deleteRecord")});var rl=m((Use,UO)=>{var yk=require("crypto"),wO=9;function Ik(e){let t=Ck(wO),r=CO(e+t);return t+r}o(Ik,"createHash");function wk(e,t){let r=e.substr(0,wO),s=r+CO(t+r);return e===s}o(wk,"validateHash");function Ck(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}o(Ck,"generateSalt");function CO(e){return yk.createHash("md5").update(e).digest("hex")}o(CO,"md5");UO.exports={hash:Ik,validate:wk}});var LO=m((Lse,DO)=>{var Hf=Pe(),It={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function Uk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Hf.validateObject(e,It)}o(Uk,"addUserValidation");function Dk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Hf.validateObject(e,It)}o(Dk,"alterUserValidation");function Lk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Hf.validateObject(e,It)}o(Lk,"dropUserValidation");DO.exports={addUserValidation:Uk,alterUserValidation:Dk,dropUserValidation:Lk}});var Be=m((vse,PO)=>{"use strict";var{platform:Pse}=require("os"),Mk="nats-server.zip",Ff="nats-server",Pk=process.platform==="win32"?`${Ff}.exe`:Ff,qf="HDB",vk=/^[^\s.,*>]+$/,MO="__request__",Bk=o(e=>`${e}.${MO}`,"REQUEST_SUBJECT"),Hk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Fk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},qk={HUB:"hub.pid",LEAF:"leaf.pid"},Gk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},xk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:qf,deliver_subject:"__HDB__.WORKQUEUE"},kk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:qf,deliver_subject:"HDB.SCHEMAQUEUE"},Vk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:qf,deliver_subject:"HDB.USERQUEUE"},$k={SUCCESS:"success",ERROR:"error"},Yk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Kk={TXN:"txn",MSGID:"msgid"},qi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Wk={[qi.ERR]:1,[qi.WRN]:2,[qi.INF]:3,[qi.DBG]:4,[qi.TRC]:5},Qk={debug:"-D",trace:"-DVV"};PO.exports={NATS_SERVER_ZIP:Mk,NATS_SERVER_NAME:Ff,NATS_BINARY_NAME:Pk,PID_FILES:qk,NATS_CONFIG_FILES:Fk,SERVER_SUFFIX:Gk,WORK_QUEUE_CONSUMER_NAMES:xk,SCHEMA_QUEUE_CONSUMER_NAMES:kk,USER_QUEUE_CONSUMER_NAMES:Vk,NATS_TERM_CONSTRAINTS_RX:vk,REQUEST_SUFFIX:MO,UPDATE_REMOTE_RESPONSE_STATUSES:$k,CLUSTER_STATUS_STATUSES:Yk,REQUEST_SUBJECT:Bk,SUBJECT_PREFIXES:Kk,MSG_HEADERS:Hk,LOG_LEVELS:qi,LOG_LEVEL_FLAGS:Qk,LOG_LEVEL_HIERARCHY:Wk}});var BO=m((Hse,vO)=>{"use strict";var sl=g(),nl=class{static{o(this,"BaseLicense")}constructor(t=0,r=sl.RAM_ALLOCATION_ENUM.DEFAULT,s=sl.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Gf=class extends nl{static{o(this,"ExtendedLicense")}constructor(t=0,r=sl.RAM_ALLOCATION_ENUM.DEFAULT,s=sl.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};vO.exports={BaseLicense:nl,ExtendedLicense:Gf}});var Ao=m((qse,kO)=>{"use strict";var xi=require("fs-extra"),HO=rl(),FO=require("crypto"),zk=require("moment"),Jk=require("uuid").v4,wt=q(),kf=require("path"),Xk=x(),hn=g(),Zk=BO().ExtendedLicense,Gi="invalid license key format",jk="061183",eV="mofi25",tV="aes-256-cbc",rV=16,sV=32,qO=Q();qO.initSync();var xf;kO.exports={validateLicense:GO,generateFingerPrint:iV,licenseSearch:xO,getLicense:cV};function Vf(){return kf.join(qO.getHdbBasePath(),hn.LICENSE_KEY_DIR_NAME,hn.LICENSE_FILE_NAME)}o(Vf,"getLicenseDirPath");function nV(){let e=Vf();return kf.join(e,hn.LICENSE_FILE_NAME)}o(nV,"getLicenseFilePath");function $f(){let e=Vf();return kf.join(e,hn.REG_KEY_FILE_NAME)}o($f,"getFingerPrintFilePath");async function iV(){let e=$f();try{return await xi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await aV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}o(iV,"generateFingerPrint");async function aV(){let e=Jk(),t=HO.hash(e),r=$f();try{await xi.mkdirp(Vf()),await xi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}o(aV,"writeFingerprint");function GO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:hn.RAM_ALLOCATION_ENUM.DEFAULT,version:hn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=$f(),n=!1;try{n=xi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=xi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let a=e.split(eV),c=a[1];c=Buffer.concat([Buffer.from(c)],rV);let u=Buffer.concat([Buffer.from(i)],sV),l=FO.createDecipheriv(tV,u,c);r.valid_date=!0,r.valid_license=!0,r.valid_machine=!0;let _=null;try{_=l.update(a[0],"hex","utf8"),_.trim(),_+=l.final("utf8")}catch{let f=oV(a[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(Gi),wt.error(Gi),new Error(Gi)}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(Gi),wt.error(Gi),new Error(Gi)}else r.exp_date=_;r.exp_date<zk().valueOf()&&(r.valid_date=!1),HO.validate(a[1],`${jk}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||wt.error("Invalid licence"),r}o(GO,"validateLicense");function oV(e,t){try{let r=FO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}o(oV,"checkOldLicense");function xO(){let e=new Zk,t=[];try{t=xi.readFileSync(nV(),"utf-8").split(hn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(Xk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=GO(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return xf=e,e}o(xO,"licenseSearch");async function cV(){return xf||await xO(),xf}o(cV,"getLicense")});var Or=m(($se,nN)=>{"use strict";var WO="username is required",QO="nothing to update, must supply active, role or password to update",zO="password cannot be an empty string",JO="If role is specified, it cannot be empty.",XO="active must be true or false";nN.exports={addUser:SV,alterUser:pV,dropUser:RV,getSuperUser:NV,userInfo:gV,listUsers:al,listUsersExternal:AV,setUsersToGlobal:Vi,findAndValidateUser:sN,getClusterUser:bV,USERNAME_REQUIRED:WO,ALTERUSER_NOTHING_TO_UPDATE:QO,EMPTY_PASSWORD:zO,EMPTY_ROLE:JO,ACTIVE_BOOLEAN:XO};var ZO=Ar(),uV=Zn(),Kf=rl(),jO=LO(),eN=gr(),Wf=Fs(),ar=x(),tN=require("validate.js"),ue=q(),{promisify:lV}=require("util"),Qf=Hs(),VO=g(),$O=Be(),_V=Tr(),xse=Q(),kse=Ao(),dV=Yn(),{table:Vse}=(de(),re(Ne)),{handleHDBError:ss,hdb_errors:EV}=W(),{HTTP_STATUS_CODES:ns,AUTHENTICATION_ERROR_MSGS:Yf,HDB_ERROR_MSGS:ki}=EV,{UserEventMsg:zf}=qr(),YO=require("lodash"),{_assignPackageExport:fV}=require("../../index");fV("getUser",sN);var rN={username:!0,active:!0,role:!0,password:!0},KO=new Map,il=eN.searchByValue,hV=eN.searchByHash,mV=lV(uV.delete);async function SV(e){let t=tN.cleanAttributes(e,rN),r=jO.addUserValidation(t);if(r)throw ss(new Error,r.message,ns.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 il(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ss(new Error,ki.ROLE_NAME_NOT_FOUND(t.role),ns.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ss(new Error,ki.DUP_ROLES_FOUND(t.role),ns.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Qf.encrypt(t.password)),t.password=Kf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},a;try{a=await ZO.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(a);try{await Vi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(a.skipped_hashes.length===1)throw ss(new Error,ki.USER_ALREADY_EXISTS(t.username),ns.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Wf.signalUserChange(new zf(process.pid)),`${c.username} successfully added`}o(SV,"addUser");async function pV(e){let t=tN.cleanAttributes(e,rN);if(ar.isEmptyOrZeroLength(t.username))throw new Error(WO);if(ar.isEmptyOrZeroLength(t.password)&&ar.isEmptyOrZeroLength(t.role)&&ar.isEmptyOrZeroLength(t.active))throw new Error(QO);if(!ar.isEmpty(t.password)&&ar.isEmptyOrZeroLength(t.password.trim()))throw new Error(zO);if(!ar.isEmpty(t.active)&&!ar.isBoolean(t.active))throw new Error(XO);let r=TV(t.username);if(!ar.isEmpty(t.password)&&!ar.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Qf.encrypt(t.password)),t.password=Kf.hash(t.password)),t.role==="")throw new Error(JO);if(t.role){let i={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["*"]},a;try{a=Array.from(await il(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!a||a.length===0){let c=ki.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ss(new Error,c,ns.NOT_FOUND,void 0,void 0,!0)}if(a.length>1){let c=ki.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ss(new Error,c,ns.CONFLICT,void 0,void 0,!0)}t.role=a[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await ZO.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Vi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Wf.signalUserChange(new zf(process.pid)),n}o(pV,"alterUser");function TV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}o(TV,"isClusterUser");async function RV(e){try{let t=jO.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(ar.isEmpty(global.hdb_users.get(e.username)))throw ss(new Error,ki.USER_NOT_EXIST(e.username),ns.NOT_FOUND,void 0,void 0,!0);let s;try{s=await mV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Vi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Wf.signalUserChange(new zf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}o(RV,"dropUser");async function gV(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 hV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}o(gV,"userInfo");async function AV(){let e;try{e=await al()}catch(t){throw ue.error("Got an error listing users."),ue.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}o(AV,"listUsersExternal");async function al(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await il(e)}catch(a){throw ue.error("Got an error searching for roles."),ue.error(a),a}let r={};for(let a of t)r[a.id]=YO.cloneDeep(a);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 il(s)}catch(a){throw ue.error("Got an error searching for users."),ue.error(a),a}let i=new Map;for(let a of n)a=YO.cloneDeep(a),a.role=r[a.role],OV(a.role),i.set(a.username,a);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),ar.errorizeMessage(e)}return null}o(al,"listUsers");function OV(e){try{if(!e){ue.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(dV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}o(OV,"appendSystemTablesToRole");async function Vi(){try{let e=await al();global.hdb_users=e}catch(e){throw ue.error(e),e}}o(Vi,"setUsersToGlobal");async function sN(e,t,r=!0){global.hdb_users||await Vi();let s=global.hdb_users.get(e);if(!s)throw ss(new Error,Yf.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ss(new Error,Yf.USER_INACTIVE,ns.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(KO.get(t)===s.password)return n;if(Kf.validate(s.password,t))KO.set(t,s.password);else throw ss(new Error,Yf.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0)}return n}o(sN,"findAndValidateUser");async function NV(){global.hdb_users||await Vi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}o(NV,"getSuperUser");async function bV(){let e=await al(),t=_V.getConfigFromFile(VO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!ar.isEmpty(r)&&r?.role?.role===VO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Qf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+$O.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+$O.SERVER_SUFFIX.ADMIN,r}o(bV,"getClusterUser")});var No=m((Qse,cN)=>{"use strict";var jn=q(),or=g(),yV=jA(),Kse=dn(),Wse=Wn(),IV=Or(),{validateEvent:iN}=qr(),Oo=Fr(),wV=require("process"),{resetDatabases:CV}=(de(),re(Ne)),UV={[or.ITC_EVENT_TYPES.SCHEMA]:DV,[or.ITC_EVENT_TYPES.USER]:oN};async function DV(e){let t=iN(e);if(t){jn.error(t);return}jn.trace("ITC schemaHandler received schema event:",e),await yV(e.message),await LV(e.message)}o(DV,"schemaHandler");async function LV(e){try{Oo.resetReadTxn(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Oo.resetReadTxn(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Oo.resetReadTxn(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=CV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){jn.error(t)}}o(LV,"syncSchemaMetadata");var aN=[];async function oN(e){try{try{Oo.resetReadTxn(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Oo.resetReadTxn(or.SYSTEM_SCHEMA_NAME,or.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){jn.warn(r)}let t=iN(e);if(t){jn.error(t);return}jn.trace(`ITC userHandler ${or.HDB_ITC_CLIENT_PREFIX}${wV.pid} received user event:`,e),await IV.setUsersToGlobal();for(let r of aN)r()}catch(t){jn.error(t)}}o(oN,"userHandler");oN.addListener=function(e){aN.push(e)};cN.exports=UV});var qr=m((ene,lN)=>{"use strict";var Jse=q(),Jf=x(),MV=g(),{ITC_ERRORS:bo}=rr(),{parentPort:Xse,threadId:PV,isMainThread:vV,workerData:Zse}=require("worker_threads"),{onMessageFromWorkers:BV,broadcast:jse,broadcastWithAcknowledgement:HV}=_t();lN.exports={sendItcEvent:FV,validateEvent:uN,SchemaEventMsg:qV,UserEventMsg:GV};var ol;BV(async(e,t)=>{ol=ol||No(),uN(e),ol[e.type]&&await ol[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function FV(e){return!vV&&e.message&&(e.message.originator=PV),HV(e)}o(FV,"sendItcEvent");function uN(e){if(typeof e!="object")return bo.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Jf.isEmpty(e.type))return bo.MISSING_TYPE;if(!e.hasOwnProperty("message")||Jf.isEmpty(e.message))return bo.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Jf.isEmpty(e.message.originator))return bo.MISSING_ORIGIN;if(MV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return bo.INVALID_EVENT(e.type)}o(uN,"validateEvent");function qV(e,t,r,s=void 0,n=void 0){this.originator=e,this.operation=t,this.schema=r,this.table=s,this.attribute=n}o(qV,"SchemaEventMsg");function GV(e){this.originator=e}o(GV,"UserEventMsg")});var Fs=m((sne,fN)=>{"use strict";var _N=g(),rne=x(),cl=q(),dN=JA(),$i,{sendItcEvent:EN}=qr();function xV(e){try{cl.trace("signalSchemaChange called with message:",e),$i=$i||No();let t=new dN(_N.ITC_EVENT_TYPES.SCHEMA,e);return $i.schema(t),EN(t)}catch(t){cl.error(t)}}o(xV,"signalSchemaChange");function kV(e){try{cl.trace("signalUserChange called with message:",e),$i=$i||No();let t=new dN(_N.ITC_EVENT_TYPES.USER,e);return $i.user(t),EN(t)}catch(t){cl.error(t)}}o(kV,"signalUserChange");fN.exports={signalSchemaChange:xV,signalUserChange:kV}});var ul=m((ine,mN)=>{"use strict";var hN=x(),VV=g(),$V=q(),YV=Yu(),KV=$u(),WV=Fs(),{SchemaEventMsg:QV}=qr(),zV="already exists in";mN.exports=JV;async function JV(e,t,r){if(hN.isEmptyOrZeroLength(r))return r;let s=[];hN.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 XV(e,t.schema,t.name,i)})),n}o(JV,"lmdbCheckForNewAttributes");async function XV(e,t,r,s){let n=new KV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await ZV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(zV))$V.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}o(XV,"createNewAttribute");async function ZV(e){let t;return t=await YV(e),WV.signalSchemaChange(new QV(process.pid,VV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}o(ZV,"createAttribute")});var Yi=m((one,SN)=>{"use strict";var Xf=class{static{o(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}};SN.exports=Xf});var TN=m((une,pN)=>{"use strict";var jV=Yi(),e$=g().OPERATIONS_ENUM,Zf=class extends jV{static{o(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(e$.INSERT,r,s,n,i),this.records=t}};pN.exports=Zf});var gN=m((_ne,RN)=>{"use strict";var t$=Yi(),r$=g().OPERATIONS_ENUM,jf=class extends t${static{o(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,a=void 0){super(r$.UPDATE,s,n,i,a),this.records=t,this.original_records=r}};RN.exports=jf});var ON=m((Ene,AN)=>{"use strict";var s$=Yi(),n$=g().OPERATIONS_ENUM,eh=class extends s${static{o(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,a=void 0){super(n$.UPSERT,s,n,i,a),this.records=t,this.original_records=r}};AN.exports=eh});var bN=m((hne,NN)=>{"use strict";var i$=Yi(),a$=g().OPERATIONS_ENUM,th=class extends i${static{o(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(a$.DELETE,s,n,t,i),this.original_records=r}};NN.exports=th});var yo=m((pne,CN)=>{"use strict";var Sne=require("path"),yN=ye(),o$=TN(),c$=gN(),u$=ON(),l$=bN(),Ki=xe(),IN=x(),{CONFIG_PARAMS:_$}=g(),wN=Q();wN.initSync();var ll=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:d$}=we();CN.exports=E$;async function E$(e,t){if(wN.get(_$.LOGGING_AUDITLOG)===!1)return;let r=d$(e.schema,e.table),s=await yN.openEnvironment(r,e.table,!0),n=f$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){yN.initializeDBIs(s,Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Ki.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),IN.isEmpty(n.user_name)||s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let a=0;a<n.hash_values.length;a++)s.dbis[Ki.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[a],i)})}}o(E$,"writeTransaction");function f$(e,t){let r=IN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ll.INSERT)return new o$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.UPDATE)return new c$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.UPSERT)return new u$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ll.DELETE)return new l$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}o(f$,"createTransactionObject")});var rh=m((gne,UN)=>{"use strict";var h$=ho(),Rne=mo(),Io=g(),m$=Ro(),S$=Hi().insertRecords,p$=ye(),T$=q(),R$=ul(),{getSchemaPath:g$}=we(),A$=yo();UN.exports=O$;async function O$(e){try{let{schema_table:t,attributes:r}=h$(e);m$(e,r,t.hash_attribute),e.schema!==Io.SYSTEM_SCHEMA_NAME&&(r.includes(Io.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Io.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Io.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await R$(e.hdb_auth_header,t,r),n=g$(e.schema,e.table),i=await p$.openEnvironment(n,e.table),a=await S$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await A$(e,a)}catch(c){T$.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(O$,"lmdbCreateRecords")});var MN=m((One,LN)=>{"use strict";var DN=g(),N$=rh(),b$=mo(),y$=require("fs-extra"),{getSchemaPath:I$}=we();LN.exports=w$;async function w$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new b$(DN.SYSTEM_SCHEMA_NAME,DN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await N$(r),await y$.mkdirp(I$(e.schema))}o(w$,"lmdbCreateSchema")});var vN=m((bne,PN)=>{"use strict";var sh=class{static{o(this,"DeleteRecordsResponseObject")}constructor(t=[],r=[],s=void 0,n=[]){this.deleted=t,this.skipped=r,this.txn_time=s,this.original_records=n}};PN.exports=sh});var qN=m((Une,FN)=>{"use strict";var BN=ye(),nh=Ht(),ih=rr().LMDB_ERRORS_ENUM,C$=xe(),HN=q(),Ine=x(),U$=require("lmdb"),D$=vN(),L$=g(),{OVERFLOW_MARKER:wne,MAX_SEARCH_KEY_LENGTH:Cne}=C$,M$=L$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function P$(e,t,r,s){if(nh.validateEnv(e),t===void 0)throw new Error(ih.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ih.IDS_REQUIRED):new Error(ih.IDS_MUST_BE_ITERABLE);try{let n=BN.listDBIs(e);BN.initializeDBIs(e,t,n);let i=new D$,a,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{a=r[E];let h=e.dbis[t].get(a);if(!h||s&&h[M$]>s){i.skipped.push(a);continue}let T=e.dbis[t].ifVersion(a,U$.IF_EXISTS,()=>{e.dbis[t].remove(a);for(let S=0;S<n.length;S++){let y=n[S];if(!h.hasOwnProperty(y)||y===t)continue;let O=e.dbis[y],H=h[y];if(H!=null)try{let Y=nh.getIndexedValues(H);if(Y)for(let A=0,w=Y.length;A<w;A++)O.remove(Y[A],a)}catch{HN.warn(`cannot delete from attribute: ${y}, ${H}:${a}`)}}});c.push(T),u.push(a),i.original_records.push(h)}catch(h){HN.warn(h),i.skipped.push(a)}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=nh.getNextMonotonicTime(),i}catch(n){throw n}}o(P$,"deleteRecords");FN.exports={deleteRecords:P$}});var wo=m((Lne,xN)=>{"use strict";var Wi=x(),v$=qN(),B$=ye(),{getSchemaPath:H$}=we(),F$=yo(),q$=q();xN.exports=G$;async function G$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Wi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Wi.isEmptyOrZeroLength(e.hash_values)&&!Wi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Wi.isEmpty(u)||e.hash_values.push(u)}}if(Wi.isEmptyOrZeroLength(e.hash_values))return GN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Wi.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=H$(e.schema,e.table),i=await B$.openEnvironment(n,e.table),a=await v$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await F$(e,a)}catch(c){q$.error(`unable to write transaction due to ${c.message}`)}return GN(a.deleted,a.skipped,a.txn_time)}catch(n){throw n}}o(G$,"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}}o(GN,"createDeleteResponse")});var oh=m((vne,kN)=>{"use strict";var x$=g(),Pne=Ht();function ah(e,t){let r=Object.create(null);if(t.length===1&&x$.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}o(ah,"parseRow");function k$(e,t,r,s){let n=ah(r,e);s.push(n)}o(k$,"searchAll");function V$(e,t,r,s){let n=ah(r,e);s[t]=n}o(V$,"searchAllToMap");function $$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}o($$,"iterateDBI");function ei(e,t,r,s,n){let i=Object.create(null);i[n]=e;let a;s===n?a=e:(a=t,s!==void 0&&(i[s]=a)),r[0].push(a),r[1].push(i)}o(ei,"pushResults");function Y$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}o(Y$,"endsWith");function K$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}o(K$,"contains");function W$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}o(W$,"greaterThanCompare");function Q$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}o(Q$,"greaterThanEqualCompare");function z$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}o(z$,"lessThanCompare");function J$(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}o(J$,"lessThanEqualCompare");kN.exports={parseRow:ah,searchAll:k$,searchAllToMap:V$,iterateDBI:$$,endsWith:Y$,contains:K$,greaterThanCompare:W$,greaterThanEqualCompare:Q$,lessThanCompare:z$,lessThanEqualCompare:J$,pushResults:ei}});var Qi=m((Gne,zN)=>{"use strict";var mn=ye(),Hne=q(),cr=Ht(),_l=xe(),ke=rr().LMDB_ERRORS_ENUM,Fne=x(),X$=g(),dl=oh(),{parseRow:Z$}=dl,qne=require("lmdb"),{OVERFLOW_MARKER:VN,MAX_SEARCH_KEY_LENGTH:j$}=_l;function $N(e,t,r,s=!1,n=void 0,i=void 0){return ti(e,t,r,(a,c)=>c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}o($N,"iterateFullIndex");function Co(e,t,r,s,n,i=!1,a=void 0,c=void 0,u=!1,l=!1){return ti(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:a,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(H=>({value:H}))):d.getRange(O)})}o(Co,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=mn.openDBI(n,r);i[_l.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&mn.openDBI(n,t);let a;e.database?a=e:(a=e.useReadTransaction(),a.database=e);let c=s(a,i,n,t);return c.transaction=a,e.database||(c.onDone=()=>{a.done()}),c}o(ti,"setupTransaction");function YN(e,t,r,s){let n;return function(i,a){if(typeof i=="string"&&i.endsWith(VN)){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[_l.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(a,{transaction:t,lazy:!0})[s]}return i}}o(YN,"getOverflowCheck");function eY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(a,c,u)=>(El(r),r=Uo(u,r),c.getRange({transaction:a,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>Z$(l.value,r))))}o(eY,"searchAll");function tY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);El(r),r=Uo(e.database||e,r);let a=new Map;for(let{key:c,value:u}of $N(e,t,t,s,n,i))a.set(c,dl.parseRow(u,r));return a}o(tY,"searchAllToMap");function rY(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),a=$N(e,void 0,t,r,s,n),c=a.transaction,u=YN(c.database,c,void 0,t);for(let{key:l,value:_}of a){let d=u(l,_);i[d]===void 0&&(i[d]=[]),i[d].push(_)}return i}o(rY,"iterateDBI");function sY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return mn.statDBI(e,t).entryCount}o(sY,"countAll");function nY(e,t,r,s,n=!1,i=void 0,a=void 0){return Sn(e,r,s),ti(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:a}).map(d=>({key:s,value:d}))))}o(nY,"equals");function iY(e,t,r){return Sn(e,t,r),mn.openDBI(e,t).getValuesCount(r)}o(iY,"count");function aY(e,t,r,s,n=!1,i=void 0,a=void 0){return Sn(e,r,s),ti(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(a)?a++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:a}).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:a}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}o(aY,"startsWith");function oY(e,t,r,s,n=!1,i=void 0,a=void 0){return KN(e,t,r,s,n,i,a,!0)}o(oY,"endsWith");function KN(e,t,r,s,n=!1,i=void 0,a=void 0,c=!1){return Sn(e,r,s),ti(e,null,r,(u,l,_,d)=>{let E=YN(_,u,d,r);return a=Number.isInteger(a)?a:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(VN)?l.getValues(f,{transaction:u}).map(T=>{let S=E(f,T);if(c?S.endsWith(s):S.includes(s))return{key:S,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[_l.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(a,i===void 0?void 0:i+(a||0))})}o(KN,"contains");function cY(e,t,r,s,n=!1,i=void 0,a=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),Co(e,t,r,s,u,n,i,a,!0,!1)}o(cY,"greaterThan");function uY(e,t,r,s,n=!1,i=void 0,a=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),Co(e,t,r,s,u,n,i,a,!1,!1)}o(uY,"greaterThanEqual");function lY(e,t,r,s,n=!1,i=void 0,a=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),Co(e,t,r,u,s,n,i,a,!1,!0)}o(lY,"lessThan");function _Y(e,t,r,s,n=!1,i=void 0,a=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),Co(e,t,r,u,s,n,i,a,!1,!1)}o(_Y,"lessThanEqual");function dY(e,t,r,s,n,i=!1,a=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Co(e,t,r,s,n,i,a,c)}o(dY,"between");function EY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(El(r),r=Uo(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let a=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(a=dl.parseRow(c,r)),a}o(EY,"searchByHash");function fY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}o(fY,"checkHashExists");function hY(e,t,r,s,n=[]){return QN(e,t,r,s,n),WN(e,t,r,s,n).map(i=>i[1])}o(hY,"batchSearchByHash");function mY(e,t,r,s,n=[]){QN(e,t,r,s,n);let i=new Map;for(let[a,c]of WN(e,t,r,s,n))i.set(a,c);return i}o(mY,"batchSearchByHashToMap");function WN(e,t,r,s,n=[]){return ti(e,t,t,(i,a,c)=>{r=Uo(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,dl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}o(WN,"batchHashSearch");function QN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(El(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}o(QN,"initializeBatchSearchByHash");function El(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}o(El,"validateFetchAttributes");function Sn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>j$)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}o(Sn,"validateComparisonFunctions");function Uo(e,t){return t.length===1&&X$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=mn.listDBIs(e)),t}o(Uo,"setGetWholeRowAttributes");zN.exports={searchAll:eY,searchAllToMap:tY,count:iY,countAll:sY,equals:nY,startsWith:aY,endsWith:oY,contains:KN,searchByHash:EY,setGetWholeRowAttributes:Uo,batchSearchByHash:hY,batchSearchByHashToMap:mY,checkHashExists:fY,iterateDBI:rY,greaterThan:cY,greaterThanEqual:uY,lessThan:lY,lessThanEqual:_Y,between:dY}});var zi=m((kne,eb)=>{var JN=require("lodash"),XN=Pe(),Ce=require("joi"),SY=x(),{hdb_schema_table:fl,checkValidTable:ZN,hdb_table:jN,hdb_database:hl}=ts(),{handleHDBError:pY,hdb_errors:TY}=W(),{getDatabases:RY}=(de(),re(Ne)),{HTTP_STATUS_CODES:gY}=TY,AY=Ce.object({database:hl,schema:hl,table:jN,search_attribute:fl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(fl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),OY=Ce.object({database:hl,schema:hl,table:jN,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(fl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:fl,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()});eb.exports=function(e,t){let r=null;switch(t){case"value":r=XN.validateBySchema(e,AY);break;case"hashes":let i=function(a){n?n+=". "+a:n=a};var s=i;o(i,"addError");let n;i(ZN("database",e.schema)),i(ZN("table",e.table)),e.hash_values?Array.isArray(e.hash_values)?e.hash_values.every(a=>typeof a=="string"||typeof a=="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(a=>typeof a=="string"||typeof a=="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=XN.validateBySchema(e,OY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=SY.checkGlobalSchemaTable(e.schema,e.table);if(n)return pY(new Error,n,gY.NOT_FOUND);let a=RY()[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=JN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!JN.some(a,_=>_===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 ch=m(($ne,tb)=>{"use strict";var NY=ye(),bY=zi(),{getSchemaPath:yY}=we();tb.exports=IY;function IY(e){let t=bY(e,"hashes");if(t)throw t;let r=yY(e.schema,e.table);return NY.openEnvironment(r,e.table)}o(IY,"initialize")});var uh=m((Kne,rb)=>{"use strict";var wY=Qi(),CY=ch();rb.exports=UY;async function UY(e){let t=await CY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return wY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}o(UY,"lmdbGetDataByHash")});var Ji=m((Qne,sb)=>{"use strict";var lh=class{static{o(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};sb.exports=lh});var ib=m((Xne,nb)=>{"use strict";var Jne=Ji(),DY=Qi(),LY=ch();nb.exports=MY;async function MY(e){let t=await LY(e),r=global.hdb_schema[e.schema][e.table];return DY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}o(MY,"lmdbSearchByHash")});var is=m((jne,ab)=>{"use strict";var _h=class{static{o(this,"SearchObject")}constructor(t,r,s,n,i,a,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=a,this.end_value=c,this.reverse=u,this.limit=l,this.offset=_}};ab.exports=_h});var ml=m((tie,db)=>{"use strict";var Ct=Qi(),PY=ye(),vY=x(),ae=xe(),ri=g(),BY=Yn(),ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:HY}=we(),qs=ri.SEARCH_WILDCARDS;async function FY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=BY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=_b(e,s.hash_attribute,r,t);return ub(e,n,s.hash_attribute,r)}o(FY,"prepSearch");async function ub(e,t,r,s){let n=HY(e.schema,e.table),i=await PY.openEnvironment(n,e.table),a=lb(i,e,t,r),c=a.transaction||i;if([ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,ae.SEARCH_TYPES.SEARCH_ALL,ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return a;if(qY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?cb(a,()=>!0):a.map(E=>({[r]:E.key}));let d=o(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?cb(a,d):a.map(d)}let l=e.search_attribute===r?a.map(_=>_.key):a.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}o(ub,"executeSearch");function lb(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:a,limit:c,offset:u}=t;switch(a=typeof a=="boolean"?a:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ae.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.ENDS_WITH:case ae.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.STARTS_WITH:case ae.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ae.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,a,c,u);case ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,a,c,u);case ae.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,a,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN:case ae.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.GREATER_THAN_EQUAL:case ae.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.LESS_THAN:case ae.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,a,c,u);break;case ae.SEARCH_TYPES.LESS_THAN_EQUAL:case ae.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,a,c,u);break;default:return Object.create(null)}return n}o(lb,"searchByType");function cb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}o(cb,"createMapFromIterable");function qY(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}o(qY,"checkToFetchMore");function _b(e,t,r,s){if(vY.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),a=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),qs.indexOf(n)>-1)return r===!0?ae.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ae.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(qs[0])<0&&n.indexOf(qs[1])<0)return c===!0?r===!0?ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:ae.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:ae.SEARCH_TYPES.EQUALS;if(qs.indexOf(i)>=0&&qs.indexOf(a)>=0)return e.search_value=e.search_value.slice(1,-1),ae.SEARCH_TYPES.CONTAINS;if(qs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ae.SEARCH_TYPES.ENDS_WITH;if(qs.indexOf(a)>=0)return e.search_value=e.search_value.slice(0,-1),ae.SEARCH_TYPES.STARTS_WITH;if(n.includes(qs[0])||n.includes(qs[1]))return ae.SEARCH_TYPES.EQUALS;throw new Error(ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return ae.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return ae.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ae.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return ae.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ae.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ob.UNKNOWN_SEARCH_TYPE)}}o(_b,"createSearchTypeFromSearchObject");db.exports={executeSearch:ub,createSearchTypeFromSearchObject:_b,prepSearch:FY,searchByType:lb}});var fb=m((nie,Eb)=>{"use strict";var sie=is(),GY=zi(),xY=x(),kY=g(),VY=ml();Eb.exports=$Y;function $Y(e,t){if(!xY.isEmpty(t)&&kY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=GY(e,"value");if(s)throw s;let n=!0;return VY.prepSearch(e,t,n)}o($Y,"lmdbGetDataByValue")});var Do=m((oie,hb)=>{"use strict";var aie=is(),YY=zi(),KY=x(),WY=g(),QY=ml();hb.exports=zY;async function zY(e,t){if(!KY.isEmpty(t)&&WY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YY(e,"value");if(s)throw s;return QY.prepSearch(e,t,!1)}o(zY,"lmdbSearchByValue")});var Sb=m((lie,mb)=>{"use strict";var uie=xe(),dh=class{static{o(this,"SearchByConditionsObject")}constructor(t,r,s,n,i=void 0,a=void 0,c="and"){this.schema=t,this.table=r,this.get_attributes=s,this.limit=i,this.offset=a,this.conditions=n,this.operator=c}},Eh=class{static{o(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},fh=class{static{o(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};mb.exports={SearchByConditionsObject:dh,SearchCondition:Eh,SortAttribute:fh}});var Ab=m((fie,gb)=>{"use strict";var die=Sb().SearchByConditionsObject,JY=is(),XY=zi(),hh=Qi(),Sl=xe(),{Resource:Eie}=(Xr(),re(ME)),Rb=ml(),ZY=oh(),jY=require("lodash"),{getSchemaPath:eK}=we(),pb=ye(),{handleHDBError:tK,hdb_errors:rK}=W(),{HTTP_STATUS_CODES:sK}=rK,nK=1e8;gb.exports=iK;async function iK(e){let t=XY(e,"conditions");if(t)throw tK(t,t.message,sK.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=eK(e.schema,e.table),s=await pb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)pb.openDBI(s,l.search_attribute);let i=jY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Sl.SEARCH_TYPES.EQUALS?l.estimated_count=hh.count(s,l.search_attribute,l.search_value):_===Sl.SEARCH_TYPES.CONTAINS||_===Sl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=nK}return l.estimated_count}),a=s.useReadTransaction();a.database=s;let c=await Tb(a,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(Rb.filterByType),d=_.length,E=hh.setGetWholeRowAttributes(s,e.get_attributes);u=c.map(f=>l.get(f,{transaction:a,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=>ZY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Tb(a,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=hh.batchSearchByHash(a,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{a.done()},u}o(iK,"lmdbSearchByConditions");async function Tb(e,t,r,s){let n=new JY(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Sl.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,Rb.searchByType(e,n,i,s).map(a=>a.value)}o(Tb,"executeConditionSearch")});var Lo=m((mie,Ob)=>{"use strict";var aK=g().OPERATIONS_ENUM,mh=class{static{o(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=aK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ob.exports=mh});var Sh=m((pie,Db)=>{"use strict";var Ib=is(),wb=Lo(),Cb=Do(),Ub=wo(),qt=g(),Nb=x(),bb=ye(),{getTransactionAuditStorePath:oK,getSchemaPath:cK}=we(),yb=q();Db.exports=uK;async function uK(e){try{if(Nb.isEmpty(global.hdb_schema[e.schema])||Nb.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await lK(e),await _K(e);let t=cK(e.schema,e.table);try{await bb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")yb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=oK(e.schema,e.table);await bb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")yb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}o(uK,"lmdbDropTable");async function lK(e){let t=new Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await Cb(t)),s=[];for(let i=0;i<r.length;i++){let a=r[i];s.push(a.id)}if(s.length===0)return;let n=new wb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Ub(n)}o(lK,"deleteAttributesFromSystem");async function _K(e){let t=new Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await Cb(t))}catch(i){throw i}for(let i=0;i<r.length;i++){let a=r[i];a.name===e.table&&a.schema===e.schema&&(s=a)}if(!s)throw new Error(`${e.schema}.${e.table} was not found`);let n=new wb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Ub(n)}catch(i){throw i}}o(_K,"dropTableFromSystem")});var Mb=m((Rie,Lb)=>{"use strict";var dK=require("fs-extra"),EK=is(),fK=Ji(),hK=Lo(),mK=Sh(),SK=wo(),pK=uh(),TK=Do(),Gs=g(),{getSchemaPath:RK}=we(),{handleHDBError:gK,hdb_errors:AK}=W(),{HDB_ERROR_MSGS:OK,HTTP_STATUS_CODES:NK}=AK;Lb.exports=bK;async function bK(e){let t;try{t=await yK(e.schema);let r=new EK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await TK(r));for(let a=0;a<s.length;a++){let c={schema:t,table:s[a].name};try{await mK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new hK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await SK(n);let i=RK(t);await dK.remove(i)}catch(r){throw r}}o(bK,"lmdbDropSchema");async function yK(e){let t=new fK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await pK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw gK(new Error,OK.SCHEMA_NOT_FOUND(e),NK.NOT_FOUND,void 0,void 0,!0);return s}o(yK,"validateDropSchema")});var Th=m((Aie,Pb)=>{"use strict";var ph=class{static{o(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Pb.exports=ph});var Bb=m((bie,vb)=>{"use strict";var IK=require("fs-extra"),pl=ye(),{getTransactionAuditStorePath:wK}=we(),Rh=xe(),Nie=Th();vb.exports=CK;async function CK(e){let t;try{let r=wK(e.schema,e.table);await IK.mkdirp(r),t=await pl.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{pl.createDBI(t,Rh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),pl.createDBI(t,Rh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),pl.createDBI(t,Rh.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}o(CK,"createTransactionsAuditEnvironment")});var Gb=m((Iie,qb)=>{"use strict";var gh=g(),Hb=ye(),UK=Hi(),{getSystemSchemaPath:DK,getSchemaPath:LK}=we(),MK=Yn(),PK=Yu(),Ah=$u(),vK=q(),BK=Bb(),Nh=MK.hdb_table,Fb=[];for(let e=0;e<Nh.attributes.length;e++)Fb.push(Nh.attributes[e].attribute);qb.exports=HK;async function HK(e,t){let r=LK(t.schema,t.table),s=new Ah(t.schema,t.table,gh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ah(t.schema,t.table,gh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ah(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Hb.createEnvironment(r,t.table),e!==void 0){let a=await Hb.openEnvironment(DK(),gh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await UK.insertRecords(a,Nh.hash_attribute,Fb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Oh(s),await Oh(n),await Oh(i)}await BK(t)}catch(a){throw a}}o(HK,"lmdbCreateTable");async function Oh(e){try{await PK(e)}catch(t){vK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}o(Oh,"createAttribute")});var kb=m((Cie,xb)=>{"use strict";var FK=ho(),qK=Ro(),GK=ul(),Mo=g(),xK=Hi().updateRecords,kK=ye(),{getSchemaPath:VK}=we(),$K=yo(),YK=q();xb.exports=KK;async function KK(e){try{let{schema_table:t,attributes:r}=FK(e);qK(e,r,t.hash_attribute),e.schema!==Mo.SYSTEM_SCHEMA_NAME&&(r.includes(Mo.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Mo.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Mo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Mo.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await GK(e.hdb_auth_header,t,r),n=VK(e.schema,e.table),i=await kK.openEnvironment(n,e.table),a=await xK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await $K(e,a)}catch(c){YK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:a.written_hashes,skipped_hashes:a.skipped_hashes,schema_table:t,new_attributes:s,txn_time:a.txn_time}}catch(t){throw t}}o(KK,"lmdbUpdateRecords")});var $b=m((Die,Vb)=>{"use strict";var WK=g().OPERATIONS_ENUM,bh=class{static{o(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=WK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Vb.exports=bh});var Kb=m((Pie,Yb)=>{"use strict";var Mie=$b(),QK=ho(),zK=Ro(),JK=ul(),Po=g(),XK=Hi().upsertRecords,ZK=ye(),{getSchemaPath:jK}=we(),e1=yo(),t1=q(),{handleHDBError:r1,hdb_errors:s1}=W();Yb.exports=n1;async function n1(e){let t;try{t=QK(e)}catch(u){throw r1(u,u.message,s1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;zK(e,s,r.hash_attribute),e.schema!==Po.SYSTEM_SCHEMA_NAME&&(s.includes(Po.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Po.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Po.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Po.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await JK(e.hdb_auth_header,r,s),i=jK(e.schema,e.table),a=await ZK.openEnvironment(i,e.table),c=await XK(a,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await e1(e,c)}catch(u){t1.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}}o(n1,"lmdbUpsertRecords")});var Qb=m((Bie,Wb)=>{"use strict";var yh=class{static{o(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Wb.exports=yh});var Jb=m((Fie,zb)=>{"use strict";var Ih=class{static{o(this,"DeleteAuditLogsBeforeResults")}constructor(t=void 0,r=void 0,s=0){this.start_timestamp=t,this.end_timestamp=r,this.transactions_deleted=s}};zb.exports=Ih});var jb=m((xie,Zb)=>{"use strict";var wh=ye(),{getTransactionAuditStorePath:i1}=we(),Gie=Qb(),vo=xe(),a1=x(),Xb=Jb(),o1=require("util").promisify,c1=o1(setTimeout),u1=1e4,l1=100;Zb.exports=_1;async function _1(e){let t=i1(e.schema,e.table),r=await wh.openEnvironment(t,e.table,!0),s=wh.listDBIs(r);wh.initializeDBIs(r,vo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Xb;do n=await d1(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 c1(l1);while(n.transactions_deleted>0);return i}o(_1,"deleteAuditLogsBefore");async function d1(e,t){let r=new Xb;try{let s=e.dbis[vo.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:a}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=a[vo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];a1.isEmpty(c)||(n=e.dbis[vo.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<a.hash_values.length;u++)n=e.dbis[vo.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(a.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>u1)break}return await n,r}catch(s){throw s}}o(d1,"deleteTransactions")});var ty=m((Vie,ey)=>{"use strict";var Ch=class{static{o(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};ey.exports=Ch});var sy=m((Kie,ry)=>{"use strict";var E1=is(),f1=Lo(),Yie=ty(),as=g(),h1=x(),Uh=ye(),m1=Yn(),S1=Do(),p1=wo(),{getSchemaPath:T1}=we();ry.exports=R1;async function R1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=m1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await A1(e),n=T1(e.schema,e.table),i=await Uh.openEnvironment(n,e.table);return t===!0&&await g1(e,i,r.hash_attribute),Uh.dropDBI(i,e.attribute),s}o(R1,"lmdbDropAttribute");async function g1(e,t,r){let s=Uh.openDBI(t,r),n,i=e.attribute;for(let{key:a,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(a,l,u)}await n}o(g1,"removeAttributeFromAllObjects");async function A1(e){let t=new E1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await S1(t)).filter(a=>a[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(h1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(a=>a[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new f1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return p1(i)}o(A1,"dropAttributeFromSystem")});var uy=m((zie,cy)=>{"use strict";var Dh=ye(),Xi=xe(),Qie=Ht(),Lh=g(),ny=x(),{getTransactionAuditStorePath:O1}=we(),N1=Qi(),Tl=Yi(),b1=q();cy.exports=y1;async function y1(e){let t=O1(e.schema,e.table),r=await Dh.openEnvironment(t,e.table,!0),s=Dh.listDBIs(r);Dh.initializeDBIs(r,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Lh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return iy(r,e.search_values);case Lh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,w1(r,e.search_values,n);case Lh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return I1(r,e.search_values);default:return iy(r)}}o(y1,"readAuditLog");function iy(e,t=[0,Date.now()]){ny.isEmpty(t[0])&&(t[0]=0),ny.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[Xi.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 Tl,n))}o(iy,"searchTransactionsByTimestamp");function I1(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let a of e.dbis[Xi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(a);r.set(n,oy(e,i))}return Object.fromEntries(r)}o(I1,"searchTransactionsByUsername");function w1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=N1.equals(e,Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Xi.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=oy(e,n),a=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);ay(u,"records",r,_,a),ay(u,"original_records",r,_,a)}return Object.fromEntries(a)}o(w1,"searchTransactionsByHashValues");function ay(e,t,r,s,n){let i=e.timestamp;if(e[t])for(let a=0;a<e[t].length;a++){let c=e[t][a],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 Tl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new Tl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}o(ay,"loopRecords");function oy(e,t){let r=[];try{let s=e.dbis[Xi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let a=Object.assign(new Tl,i);r.push(a)}}catch(i){b1.warn(i)}return r}catch(s){throw s}}o(oy,"batchSearchTransactions")});var _y=m((jie,ly)=>{"use strict";var{getSchemaPath:Xie}=we(),Zie=ye(),{database:C1}=(de(),re(Ne));ly.exports={writeTransaction:U1};async function U1(e,t,r){return C1({database:e,table:t}).transaction(r)}o(U1,"writeTransaction")});var hy=m((tae,fy)=>{"use strict";var{getSchemaPath:dy}=we(),Ey=ye();fy.exports={flush:D1,resetReadTxn:L1};async function D1(e,t){return(await Ey.openEnvironment(dy(e,t),t.toString())).flushed}o(D1,"flush");async function L1(e,t){try{(await Ey.openEnvironment(dy(e,t),t.toString())).resetReadTxn()}catch{}}o(L1,"resetReadTxn")});var Ty=m((sae,py)=>{"use strict";var{Readable:M1}=require("stream"),{getDatabases:P1}=(de(),re(Ne)),{readSync:v1,openSync:B1,createReadStream:my}=require("fs"),{open:H1}=require("lmdb"),Sy=Pu(),F1=Bu(),{INTERNAL_DBIS_NAME:q1}=xe();py.exports=x1;var Mh=32768,G1=100;async function x1(e){let t=e.database||e.schema||"data",r=P1()[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=H1({noSync:!0,maxDbs:F1.MAX_DBS}),E,f=d.openDB(q1,new Sy(!1)),h=_.useReadTransaction(),T=0;for(let{key:y,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(H=>y.startsWith?.(H+"/"))){f.put(y,O);let[,H]=y.split("/"),Y=!H,A=new Sy(!Y,Y);A.encoding="binary";let w=d.openDB(y,A),G=_.openDB(y,A);for(let{key:k,version:X,value:ge}of G.getRange({transaction:h,versions:Y}))E=w.put(k,ge,X),T++%G1===0&&await new Promise(ct=>setTimeout(ct,20))}await E;let S=my(d.path);return S.headers=u(),S.on("close",()=>{h.done(),d.close()}),S}let a=r[Object.keys(r)[0]].primaryStore,c=B1(a.path);return a.transaction(()=>{let l=Buffer.alloc(Mh);v1(c,l,0,Mh);let _=a.useReadTransaction(),d=my(null,{fd:c,start:Mh}),E=new M1.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}}o(x1,"getBackup")});var Ay=m((iae,gy)=>{"use strict";var k1=q(),{handleHDBError:V1}=W(),$1=nA(),Y1=Yu(),K1=rh(),W1=MN(),Q1=wo(),z1=uh(),J1=ib(),X1=fb(),Z1=Do(),j1=Ab(),eW=Mb(),tW=Gb(),rW=kb(),sW=Kb(),nW=jb(),iW=Sh(),aW=sy(),oW=uy(),cW=_y(),Ry=hy(),uW=Ty(),Ph=class extends $1{static{o(this,"LMDBBridge")}async searchByConditions(t){return j1(t)}async getDataByHash(t){return await z1(t)}async searchByHash(t){return await J1(t)}async getDataByValue(t,r){return await X1(t,r)}async searchByValue(t){return await Z1(t)}async createSchema(t){return await W1(t)}async dropSchema(t){return await eW(t)}async createTable(t,r){return await tW(t,r)}async dropTable(t){return await iW(t)}async createAttribute(t){return await Y1(t)}async createRecords(t){return await K1(t)}async updateRecords(t){return await rW(t)}async upsertRecords(t){try{return await sW(t)}catch(r){throw V1(r,null,null,k1.ERR,r)}}async deleteRecords(t){return await Q1(t)}async dropAttribute(t){return await aW(t)}async deleteAuditLogsBefore(t){return await nW(t)}async readAuditLog(t){return await oW(t)}writeTransaction(t,r,s){return cW.writeTransaction(t,r,s)}flush(t,r){return Ry.flush(t,r)}resetReadTxn(t,r){return Ry.resetReadTxn(t,r)}getBackup(t){return uW(t)}};gy.exports=Ph});var Dy={};Ze(Dy,{ResourceBridge:()=>Hh});function Fh({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 Ny(e,t){let r=os(e),s=Fh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ye(i,async function*(a){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Iu(u),t?yield{key:c,value:u}:yield u}})}function os(e){let t=e.database||e.schema||_W,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,lW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function by(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*yy(e,t,r){let s;for await(let n of e.getHistory(t,r)){let i=n.type;i==="put"&&(i="upsert");let{id:a,timestamp:c,value:u}=n;s?.timestamp===c?(s.hash_values.push(a),s.records.push(u)):(s&&(yield s),s={operation:i,user_name:n.user,timestamp:c,hash_values:[a],records:[u]})}s&&(yield s)}var Iy,Rl,Gr,wy,Cy,kr,vh,Bh,Uy,lW,_W,dW,EW,Oy,Hh,Ly=pe(()=>{"use strict";Iy=D(Ay()),Rl=D(zi()),Gr=D(W());de();wy=D(ho()),Cy=D(Ro()),kr=D(g()),vh=D(Fs()),Bh=D(qr()),Uy=D(x());Vn();wu();({HDB_ERROR_MSGS:lW}=Gr.hdb_errors),_W="data",dW=1e4,EW=10,Hh=class extends Iy.default{static{o(this,"ResourceBridge")}constructor(t){super(t),Oy=this}async searchByConditions(t){let r=(0,Rl.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=os(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:Fh(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 a of s)a.is_primary_key?(a.isPrimaryKey=!0,delete a.is_primary_key):a.name===i&&i&&(a.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}tt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await os(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=os(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=o((a,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(a,u,()=>r.primaryStore.put(a,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(a);return i(a,_,d)}})),"deleteRecord");for(let{key:a,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(a,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){os(t).dropTable()}createSchema(t){return Bo({database:t.schema,table:null}),vh.signalSchemaChange(new Bh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await qh(t.schema),vh.signalSchemaChange(new Bh.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,Oy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,wy.default)(t);(0,Cy.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],a={user:t.hdb_user};return Ye(a,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],a);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Iu(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(_,a),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return Ye(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),a=[],c=[];for(let u of i)await r.delete(u,s)?a.push(u):c.push(u);return by(a,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=[],a=[],c=0,u=[],l=o(async()=>{let _=await this.deleteRecords({schema:t.schema,table:t.table,hash_values:u});i.push(..._.deleted_hashes),a.push(..._.skipped_hashes),await(0,Uy.async_set_timeout)(EW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%dW===0&&await l();return u.length>0&&await l(),n?by(i,a,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Rl.default)(t,"hashes");if(r)throw r;return Ny(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Ny(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,Rl.default)(t,"value");if(s)throw s;let n=os(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 a=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:a,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:Fh(t,n)})}async getDataByValue(t,r){let s=new Map,n=os(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){os({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return os(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=os(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(a=>{let c=a.type;return c==="put"&&(c="upsert"),{operation:c,user_name:a.user,hash_values:[i],records:[a.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of yy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return yy(r,t.search_values?.[0],t.search_values?.[1])}}};o(Fh,"getSelect");o(Ny,"getRecords");o(os,"getTable");o(by,"createDeleteResponse");o(yy,"groupRecordsInHistory")});var Fr=m((_ae,My)=>{"use strict";var{ResourceBridge:fW}=(Ly(),re(Dy)),hW=Q();hW.initSync();var gl;function mW(){return gl||(gl=new fW,gl)}o(mW,"getBridge");My.exports=mW()});var Hy=m((Eae,By)=>{"use strict";var Py=require("lodash"),Ho=require("mathjs"),SW=require("jsonata"),vy=x();By.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Py.uniqWith(e,Py.isEqual):e,searchJSON:pW,mad:Fo.bind(null,Ho.mad),mean:Fo.bind(null,Ho.mean),mode:Fo.bind(null,Ho.mode),prod:Fo.bind(null,Ho.prod),median:Fo.bind(null,Ho.median)};function Fo(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}o(Fo,"aggregateFunction");function pW(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(vy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),vy.isEmpty(this.__ala__.res[r])){let s=SW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}o(pW,"searchJSON")});var qy=m((hae,Fy)=>{"use strict";var We=require("moment"),Gh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;Fy.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(Gh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(Gh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Gh)}});var Vy=m((mae,ky)=>{"use strict";var TW=require("@turf/area"),RW=require("@turf/length"),gW=require("@turf/circle"),AW=require("@turf/difference"),OW=require("@turf/distance"),NW=require("@turf/boolean-contains"),bW=require("@turf/boolean-equal"),yW=require("@turf/boolean-disjoint"),IW=require("@turf/helpers"),Gy=g(),le=x();ky.exports={geoArea:wW,geoLength:CW,geoCircle:UW,geoDifference:DW,geoDistance:xy,geoNear:LW,geoContains:MW,geoEqual:PW,geoCrosses:vW,geoConvert:BW};var xh="geo1 is required",kh="geo2 is required";function wW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),TW.default(e)}o(wW,"geoArea");function CW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),RW.default(e,{units:t||"kilometers"})}o(CW,"geoLength");function UW(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)),gW.default(e,t,{units:r||"kilometers"})}o(UW,"geoCircle");function DW(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)),AW(e,t)}o(DW,"geoDifference");function xy(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)),OW.default(e,t,{units:r||"kilometers"})}o(xy,"geoDistance");function LW(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 xy(e,t,s)<=r}o(LW,"geoNear");function MW(e,t){if(le.isEmpty(e))throw new Error(xh);if(le.isEmpty(e))throw new Error(kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),NW.default(e,t)}o(MW,"geoContains");function PW(e,t){if(le.isEmpty(e))throw new Error(xh);if(le.isEmpty(e))throw new Error(kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),bW.default(e,t)}o(PW,"geoEqual");function vW(e,t){if(le.isEmpty(e))throw new Error(xh);if(le.isEmpty(e))throw new Error(kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!yW.default(e,t)}o(vW,"geoCrosses");function BW(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 IW[t](e,r)}o(BW,"geoConvert")});var Al=m((pae,$y)=>{var si=Hy(),ur=qy(),cs=Vy();$y.exports=e=>{e.aggr.mad=e.aggr.MAD=si.mad,e.aggr.mean=e.aggr.MEAN=si.mean,e.aggr.mode=e.aggr.MODE=si.mode,e.aggr.prod=e.aggr.PROD=si.prod,e.aggr.median=e.aggr.MEDIAN=si.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=si.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=si.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=cs.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=cs.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=cs.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=cs.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=cs.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=cs.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=cs.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=cs.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=cs.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=cs.geoNear}});var Qy=m((Tae,Wy)=>{"use strict";var qo=require("lodash"),pt=require("alasql");pt.options.cache=!1;var HW=Al(),Yy=require("clone"),Ol=require("recursive-iterator"),se=q(),ne=x(),Zi=Fr(),FW=g(),{hdb_errors:qW}=W(),{getDatabases:Ky}=(de(),re(Ne)),GW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";HW(pt);var Vh=class{static{o(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new Ol(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=qo.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=Ky()[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 Ol(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ne.isEmpty(r)&&r.right)if(ne.isNotEmptyAndHasValue(r.right.value)){let s=ne.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new Ol(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 a=[i.table.databaseid,i.table.tableid,i.attribute].join("/");if(!ne.isEmpty(FW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[a])&&(this.comparator_search_values[a]={ignore:!1,comparators:[]}),!this.comparator_search_values[a].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[a].ignore=!0,this.comparator_search_values[a].comparators=[];continue}this.comparator_search_values[a].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[a])&&(this.exact_search_values[a]={ignore:!1,values:new Set}),!this.exact_search_values[a].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[a].ignore=c,c?this.exact_search_values[a].values=new Set:this.exact_search_values[a].values=new Set([...this.exact_search_values[a].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&&qo.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(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(GW)>-1&&this.tables.forEach(n=>{let i={columnid:Ky()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=qo.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 a=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[a].__hash_name;return n[a]||(n[a]=[],n[a].push(null),this._addColumnToMergedAttributes(a,c)),i.attribute!==c&&(n[a].push(null),this._addColumnToMergedAttributes(a,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,a=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===a&&(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 Zi.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await Zi.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await Zi.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,S]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await Zi.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,a=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===a});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let a=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;a.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];a.forEach(S=>{T[S.key]!==null&&T[S.key]!==void 0&&S.keys.add(T[S.key])})}a.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=qo.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,y=T.length;S<y;S++){let O=T[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Ol(this.columns);for(let{node:i}of n)if(i&&i.columnid){let a=this._findColumn(i);if(a){let c=a.table.as?a.table.as:a.table.tableid;(!t[c]||t[c].indexOf(a.attribute)<0)&&s.push(a)}}s=qo.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,a=[];for(let _ in i)a.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:a,get_attributes:n.columns},u=await Zi.getDataByHash(c),l=n.columns.length;for(let _=0,d=a.length;_<d;_++){let E=a[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],S=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(S)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(a=>{let c=a.aggregatorid?a.expression:a,u=a.aggregatorid?a.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error(qW.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((a,c)=>{let u=n[i],l=new RegExp(`${u}.\`${a}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((a,c)=>{let u=new RegExp(`\`${a}\``,"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 a=await Zi.getDataByValue(i);for(let[c,u]of a)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(a){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(a),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Wy.exports=Vh});var gr=m((gae,zy)=>{"use strict";var xW=rA();zy.exports={searchByConditions:VW,searchByHash:$W,searchByValue:YW,search:KW};var $h=Fr(),{transformReq:Yh}=x(),kW=Qy();async function VW(e){return Yh(e),$h.searchByConditions(e)}o(VW,"searchByConditions");async function $W(e){Yh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of $h.searchByHash(e))r&&t.push(r);return t}o($W,"searchByHash");async function YW(e){Yh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of $h.searchByValue(e))t.push(r);return t}o(YW,"searchByValue");function KW(e,t){try{let r=new xW(e);r.validate(),new kW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}o(KW,"search")});var Nl=m((Oae,Jy)=>{"use strict";var WW=Fr();Jy.exports={writeTransaction:QW};function QW(e,t,r){return WW.writeTransaction(e,t,r)}o(QW,"writeTransaction")});var eI=m((yae,jy)=>{"use strict";var zW=gr(),JW=dn(),Xy=q(),XW=Ar(),bae=Nl(),ZW=require("clone"),Wh=require("alasql"),jW=Al(),Zy=require("util"),eQ=Zy.promisify(JW.getTableSchema),tQ=Zy.promisify(zW.search),rQ=g(),Kh=x();jW(Wh);jy.exports={update:nQ};var sQ="There was a problem performing this update. Please check the logs and try again.";async function nQ({statement:e,hdb_user:t}){let r=await eQ(e.table.databaseid,e.table.tableid),s=iQ(e.columns);Kh.backtickASTSchemaItems(e);let{table:n,where:i}=e,a=ZW(n),c=Kh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Wh.parse(u).statements[0],_=await tQ(l),d=aQ(s,_);return oQ(a,d,t)}o(nQ,"update");function iQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Wh.compile(`SELECT ${r.expression.toString()} AS [${rQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Xy.error(t),new Error(sQ)}}o(iQ,"createUpdateRecord");function aQ(e,t){return Kh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}o(aQ,"buildUpdateRecords");async function oQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await XW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Xy.error(`Error delete new_attributes from update response: ${i}`)}return n}o(oQ,"updateRecords")});var rI=m((Uae,tI)=>{var cQ=require("alasql"),uQ=gr(),lQ=q(),_Q=Fr(),zh=require("util"),Qh=x(),dQ=g(),EQ=dn(),wae=Nl(),Cae=Ar(),fQ="record",hQ="successfully deleted",mQ=zh.callbackify(RQ),SQ=zh.promisify(uQ.search),pQ=zh.promisify(EQ.getTableSchema);tI.exports={convertDelete:mQ};function TQ(e){return`${e.deleted_hashes.length} ${fQ}${e.deleted_hashes.length===1?"":"s"} ${hQ}`}o(TQ,"generateReturnMessage");async function RQ({statement:e,hdb_user:t}){let r=await pQ(e.table.databaseid,e.table.tableid);Qh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Qh.isEmpty(n)?"":` WHERE ${n.toString()}`,a=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=cQ.parse(a).statements[0],u={operation:dQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await SQ(c);let l=await _Q.deleteRecords(u);return Qh.isEmptyOrZeroLength(l.message)&&(l.message=TQ(l)),delete l.txn_time,l}catch(l){throw lQ.error(l),l.hdb_code?l.message:l}}o(RQ,"convertDelete")});var oI=m((Lae,aI)=>{"use strict";var gQ=Wn(),{hdb_errors:sI}=W(),{getDatabases:nI}=(de(),re(Ne));aI.exports={checkSchemaExists:iI,checkSchemaTableExists:AQ,schema_describe:gQ};async function iI(e){if(!nI()[e])return sI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(iI,"checkSchemaExists");async function AQ(e,t){let r=await iI(e);if(r)return r;if(!nI()[e][t])return sI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(AQ,"checkSchemaTableExists")});var Go=m((Pae,OQ)=>{OQ.exports={name:"harperdb",version:"4.2.0-alpha.11",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.382.0","@aws-sdk/lib-storage":"3.382.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.5","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.14.2",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.9","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ul={};Ze(Ul,{addAnalyticsListener:()=>jh,recordAction:()=>ii,recordActionBinary:()=>Cl,setAnalyticsEnabled:()=>NQ});function NQ(e){SI=e}function ii(e,t,r,s,n){if(!SI)return;let i=t+"-"+r;s&&(i+="-"+s);let a=Il.get(i);a?(a.push(e),a.total+=e):(a=[e],a.total=e,a.description={metric:t,path:r,method:s,type:n},Il.set(i,a)),yl||bQ()}function Cl(e,t,r,s,n){ii(e?1:0,t,r,s,n)}function jh(e){TI.push(e)}function bQ(){yl=performance.now(),setTimeout(()=>{let e=performance.now()-yl;yl=0;let t=[],r={time:Date.now(),period:e,threadId:ni.threadId,metrics:t};for(let[n,i]of Il)if(i.sort){i.sort();let a=i.length;t.push(Object.assign(i.description,{median:i[a>>1],mean:i.total/a,p95:i[Math.floor(a*.95)],p90:i[Math.floor(a*.9)],count:a}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ni.threadId,...s});for(let n of TI)n(t);Il=new Map,ni.parentPort?ni.parentPort.postMessage({type:pI,report:r}):gI({report:r})},Zh).unref()}async function yQ(e,t=6e4){let r=em(),s;for(let _ of r.primaryStore.getRange({start:bl+"z",end:bl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,a;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=_;a=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:S,metric:y,count:O,threadId:H,...Y}=f;O||(O=1);let A=y+(h?"-"+h:"");T&&(A+="-"+T);let w=i.get(A);if(w)for(let G in Y){let k=Y[G];if(typeof k=="number"){let X=w.count||1;w[G]=(w[G]*X+k*O)/(w.count=X+O)}}else w=Object.assign({period:t},f),i.set(A,w)}await IQ()}for(let[_,d]of i)d.id=bl+Math.round(a)+"-"+_,d.time=a,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:bl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-cI,active:l-uI,time:c}),cI=u,uI=l}async function wQ(e,t){let r=em(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function em(){return lI||(lI=tt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function UQ(){RI=!0,setInterval(async()=>{await yQ(Zh,Xh),await wQ(CQ,Zh)},Xh/2).unref()}function gI(e,t){let r=e.report;r.threadId=t?.threadId||ni.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(_I+=s.mean*s.count);r.totalBytesProcessed=_I,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(dI.get(t))}),dI.set(t,t.performance.eventLoopUtilization())),r.id=(0,hI.getNextMonotonicTime)(),em().put(r),RI||UQ(),DQ&&(AI=MQ(r))}async function MQ(e){if(await AI,!pn){let r=(0,xo.dirname)((0,fI.getLogFilePath)());try{pn=await(0,Jh.open)((0,xo.join)(r,"analytics.log"),"r+")}catch{pn=await(0,Jh.open)((0,xo.join)(r,"analytics.log"),"w+")}}let t=(await pn.stat()).size;if(t>LQ){let r=Buffer.alloc(t);await pn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await pn.write(r,{position:0}),await pn.truncate(r.length),t=r.length}await pn.write(JSON.stringify(e)+`
6
- `,t)}var ni,EI,fI,xo,Jh,hI,wl,mI,Il,Xh,SI,yl,Zh,pI,TI,bl,cI,uI,IQ,CQ,lI,RI,_I,dI,DQ,AI,pn,LQ,ji=pe(()=>{ni=require("worker_threads"),EI=D(_t());de();fI=D(q()),xo=require("path"),Jh=require("fs/promises"),hI=D(Ht()),wl=D(Q()),mI=D(g());(0,wl.initSync)();Il=new Map,Xh=(0,wl.get)(mI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,SI=Xh>0;o(NQ,"setAnalyticsEnabled");o(ii,"recordAction");o(Cl,"recordActionBinary");yl=0,Zh=1e3,pI="analytics-report",TI=[];o(jh,"addAnalyticsListener");o(bQ,"sendAnalytics");bl="sum-";o(yQ,"aggregation");cI=0,uI=0,IQ=o(()=>new Promise(setImmediate),"rest");o(wQ,"cleanup");CQ=36e5;o(em,"getAnalyticsTable");(0,EI.setChildListenerByType)(pI,gI);o(UQ,"startScheduledTasks");_I=0,dI=new Map,DQ=!1;o(gI,"recordAnalytics");LQ=1e6;o(MQ,"logAnalytics")});var rt=m((Wae,xI)=>{"use strict";var Tt=Q();Tt.initSync();var PQ=require("fs-extra"),vQ=require("semver"),Yo=require("path"),{monotonicFactory:BQ}=require("ulidx"),nm=BQ(),HQ=require("util"),NI=require("child_process"),FQ=HQ.promisify(NI.exec),qQ=NI.spawn,_e=Be(),Te=g(),Dl=x(),Nr=q(),Ll=Hs(),GQ=Nl(),ko=Tr(),{Encoder:xQ,decode:im}=require("msgpackr"),bI=new xQ,{isEmpty:ai}=Dl,yI=Or(),II=12e10,kQ=48*36e11,VQ=5e9,{connect:$Q,StorageType:wI,RetentionPolicy:CI,AckPolicy:Ml,DeliverPolicy:Pl,DiscardPolicy:YQ,NatsConnection:Vae,JetStreamManager:$ae,JetStreamClient:Yae,StringCodec:Kae,JSONCodec:KQ,createInbox:am,headers:WQ,ErrorCode:OI}=require("nats"),{PACKAGE_ROOT:QQ}=g(),zQ=Go(),{recordAction:JQ}=(ji(),re(Ul)),UI=KQ(),XQ="clustering",ZQ=zQ.engines[_e.NATS_SERVER_NAME],jQ=Yo.join(QQ,"dependencies"),sm=Yo.join(jQ,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),tm,rm,Vo,ea,ta;xI.exports={runCommand:DI,checkNATSServerInstalled:ez,createConnection:om,getConnection:vl,getJetStreamManager:Ko,getJetStream:LI,getNATSReferences:Gt,getServerList:rz,createLocalStream:cm,listStreams:MI,deleteLocalStream:sz,getServerConfig:Wo,listRemoteStreams:nz,viewStream:iz,viewStreamIterator:az,publishToStream:oz,createWorkQueueStream:cz,addSourceToWorkStream:vI,request:lz,removeSourceFromWorkStream:HI,reloadNATS:um,reloadNATSHub:_z,reloadNATSLeaf:dz,extractServerName:BI,requestErrorHandler:Ez,updateWorkStream:fz,createLocalTableStream:qI,createTableStreams:hz,purgeTableStream:GI,purgeSchemaTableStreams:mz,getStreamInfo:Sz,updateLocalStreams:Tz,closeConnection:tz,getJsmServerName:Qo,addNatsMsgHeader:PI,updateIngestStreamConsumer:uz};async function DI(e,t=void 0){let{stdout:r,stderr:s}=await FQ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var UB=Object.create;var $o=Object.defineProperty;var DB=Object.getOwnPropertyDescriptor;var LB=Object.getOwnPropertyNames;var MB=Object.getPrototypeOf,PB=Object.prototype.hasOwnProperty;var a=(e,t)=>$o(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)$o(e,r,{get:t[r],enumerable:!0})},ZT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of LB(t))!PB.call(e,n)&&n!==r&&$o(e,n,{get:()=>t[n],enumerable:!(s=DB(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?UB(MB(e)):{},ZT(t||!e||!e.__esModule?$o(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>ZT($o({},"__esModule",{value:!0}),e);var tR=m((fte,eR)=>{var vB=require("fast-glob"),{statSync:cE,existsSync:uE,readFileSync:BB,writeFileSync:HB}=require("fs"),{spawnSync:FB,spawn:qB}=require("child_process"),{isMainThread:GB}=require("worker_threads"),{join:bs,relative:jT}=require("path"),{PACKAGE_ROOT:mr}=A(),{tmpdir:xB}=require("os");require("source-map-support").install();var kB=["resources","server","dataLayer"],Yo="ts-build",lE,VB=__filename.endsWith("tsBuild.js");if(VB){if(GB){let r;try{cE(bs(mr,Yo)),r=!0}catch{}if(r)for(let s of vB.sync(kB.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=cE(bs(mr,s)).mtimeMs-5e3,i=cE(bs(mr,Yo,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."),lE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),lE=!0;if(lE){let s=FB(process.argv[0],[bs(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=bs(xB(),"harperdb-tsc.pid"),i;if(uE(n))try{process.kill(+BB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=qB(process.argv[0],[bs(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});HB(n,o.pid.toString()),o.unref()}}}}let e=eR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=jT(mr,s[0]),o;i.startsWith(Yo)?o=bs(mr,jT(Yo,i)):o=bs(mr,Yo,i);let c=bs(o,r),u=c+".js";if(uE(u))return u;if(c.includes(".")&&uE(c))return c}return t(r,s,n)}}});var A=m((Ste,hR)=>{"use strict";var Sr=require("path"),$B=require("fs"),{relative:hte,join:mte}=Sr,{existsSync:YB}=$B;function KB(){let e=__dirname;for(;!YB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(KB,"getHDBPackageRoot");var an=KB(),rR="js",au=rR,WB="harperdb-config.yaml",QB="defaultConfig.yaml",zB="hdb",sR=`harperdb.${au}`,nR=`customFunctionsServer.${au}`,JB=`restartHdb.${au}`,dE="HarperDB",ou="Custom Functions",cu="Clustering Hub",uu="Clustering Leaf",XB="Clustering Ingest Service",ZB="Clustering Reply Service",jB="foreground.pid",eH="hdb.pid",tH="data",rH={HDB:dE,CLUSTERING_HUB:cu,CLUSTERING_LEAF:uu,CLUSTERING_INGEST_SERVICE:XB,CLUSTERING_REPLY_SERVICE:ZB,CUSTOM_FUNCTIONS:ou,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},sH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},iH={harperdb:dE,"clustering hub":cu,"clustering leaf":uu,"custom functions":ou,custom_functions:ou,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},oH={CLUSTERING_HUB_PROC_DESCRIPTOR:cu,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu},_E={HDB:Sr.join(an,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(an,"server/customFunctions"),CLUSTERING_HUB:Sr.join(an,"server/nats"),CLUSTERING_LEAF:Sr.join(an,"server/nats")},aH={HDB:Sr.join(_E.HDB,sR),CUSTOM_FUNCTIONS:Sr.join(_E.CUSTOM_FUNCTIONS,nR)},cH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(an,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(an,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(an,"launchServiceScripts/launchUpdateNodes4-0-0.js")},uH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},iR="support@harperdb.io",lH="customer-success@harperdb.io",oR=1,_H=4141,aR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",dH="https://www.harperdb.io/product",EH=`For support, please submit a request at ${aR} or contact ${iR}`,cR=`For license support, please contact ${lH}`,fH="None of the specified records were found.",hH="hash attribute not found",mH=`Your current license only supports ${oR} role. ${cR}`,SH="Your current license only supports 3 connections to a node.",pH="127.0.0.1",TH=1,RH=/^\.$/,gH=/^\.\.$/,AH="U+002E",OH=/\//g,NH="U+002F",bH=/U\+002F/g,yH=/^U\+002E$/,IH=/^U\+002EU\+002E$/,wH="d",CH=999999,UH="*",DH="--max-old-space-size=",LH="system",MH="__hdb_hash",PH=".harperdb",vH=".hdb",BH="keys",HH="hdb_boot_properties.file",FH=".updateConfig.json",qH="SIGTSTP",GH=24,xH=6e4,kH=448,VH="blob",$H="trash",YH="database",KH="schema",WH="transactions",QH=".count",zH="id",JH="PROCESS_NAME",uR={SETTINGS_PATH_KEY:"settings_path"},lR=require("lodash"),XH={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"},ZH={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},jH={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},e0={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"},t0={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:",r0={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"},s0={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"},n0="060493.ks",i0=".license",o0={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"},a0={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"},Ko={};Ko[K.INSERT]=K.INSERT;Ko[K.UPDATE]=K.UPDATE;Ko[K.UPSERT]=K.UPSERT;Ko[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 l0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},_0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},_R={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"},d0=lR.invert(_R),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"},dR={settings_path:uR.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];dR[t.toLowerCase()]=t}var E0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},f0={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"},h0={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"},m0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},S0={VERSION_DEFAULT:"2.2.0"},p0={DEVELOPMENT:8192,DEFAULT:512},T0={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"},R0={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"},g0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},ER={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},A0=Symbol("metadata"),O0="__clustering__",N0=Object.values(ER),b0=15984864e5,fR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},y0=lR.invert(fR),I0={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"},w0=111,C0=`\r
2
+ `,U0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},D0=["*","%"],L0="unauthorized_access",M0="func_val",P0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},v0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},B0={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"},H0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},F0={HTTP:"http"},q0={STOPPED:"stopped",ONLINE:"online"},G0="3.x.x",x0={SUCCESS:"success",FAILURE:"failure"},k0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};hR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:iR,HDB_SUPPORT_URL:aR,HDB_PRICING_URL:dH,SUPPORT_HELP_MSG:EH,LICENSE_HELP_MSG:cR,HDB_PROC_NAME:sR,HDB_PROC_DESCRIPTOR:dE,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:LH,HASH_FOLDER_NAME:MH,HDB_HOME_DIR_NAME:PH,UPDATE_FILE_NAME:FH,LICENSE_KEY_DIR_NAME:BH,BOOT_PROPS_FILE_NAME:HH,JOB_TYPE_ENUM:f0,JOB_STATUS_ENUM:o0,SYSTEM_TABLE_NAMES:e0,SYSTEM_TABLE_HASH_ATTRIBUTES:t0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:a0,S3_BUCKET_AUTH_KEYS:c0,VALID_SQL_OPS_ENUM:u0,GEO_CONVERSION_ENUM:_0,HDB_SETTINGS_NAMES:_R,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:d0,SERVICE_ACTIONS_ENUM:l0,CLUSTER_MESSAGE_TYPE_ENUM:h0,CLUSTER_CONNECTION_DIRECTION_ENUM:m0,CLUSTER_EVENTS_DEFS_ENUM:T0,PERIOD_REGEX:RH,DOUBLE_PERIOD_REGEX:gH,UNICODE_PERIOD:AH,FORWARD_SLASH_REGEX:OH,UNICODE_FORWARD_SLASH:NH,ESCAPED_FORWARD_SLASH_REGEX:bH,ESCAPED_PERIOD_REGEX:yH,ESCAPED_DOUBLE_PERIOD_REGEX:IH,REG_KEY_FILE_NAME:n0,RESTART_TIMEOUT_MS:xH,HDB_FILE_PERMISSIONS:kH,DATABASES_DIR_NAME:YH,LEGACY_DATABASES_DIR_NAME:KH,TRANSACTIONS_DIR_NAME:WH,LIMIT_COUNT_NAME:QH,ID_ATTRIBUTE_STRING:zH,INSERT_MODULE_ENUM:ZH,UPGRADE_JSON_FIELD_NAMES_ENUM:jH,RESTART_CODE:qH,RESTART_CODE_NUM:GH,CLUSTER_OPERATIONS:Ko,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:s0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:r0,CLUSTERING_MESSAGE_TYPES:I0,HDB_FILE_SUFFIX:vH,BLOB_FOLDER_NAME:VH,HDB_TRASH_DIR:$H,ORIGINATOR_SET_VALUE:w0,LICENSE_VALUES:S0,RAM_ALLOCATION_ENUM:p0,TIME_STAMP_NAMES_ENUM:ER,TIME_STAMP_NAMES:N0,PERMS_UPDATE_RELEASE_TIMESTAMP:b0,SEARCH_NOT_FOUND_MESSAGE:fH,SEARCH_ATTRIBUTE_NOT_FOUND:hH,LICENSE_ROLE_DENIED_RESPONSE:mH,LICENSE_MAX_CONNS_REACHED:SH,BASIC_LICENSE_MAX_NON_CU_ROLES:oR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:_H,VALUE_SEARCH_COMPARATORS:fR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:y0,LICENSE_FILE_NAME:i0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:R0,NEW_LINE:C0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:TH,MOMENT_DAYS_TAG:wH,API_TURNOVER_SEC:CH,LOOPBACK:pH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:UH,NODE_ERROR_CODES:g0,JAVASCRIPT_EXTENSION:rR,PERMS_CRUD_ENUM:U0,UNAUTHORIZED_PERMISSION_NAME:L0,SEARCH_WILDCARDS:D0,FUNC_VAL:M0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:P0,JWT_ENUM:v0,CLUSTERING_FLAG:O0,ITC_EVENT_TYPES:B0,CUSTOM_FUNCTION_PROC_NAME:nR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:H0,THREAD_TYPES:F0,MEM_SETTING_KEY:DH,HDB_RESTART_SCRIPT:JB,PROCESS_DESCRIPTORS:rH,SERVICE_SERVERS:aH,SERVICE_SERVERS_CWD:_E,PROCESS_DESCRIPTORS_VALIDATE:iH,LAUNCH_SERVICE_SCRIPTS:cH,LOG_LEVELS:nH,PROCESS_NAME_ENV_PROP:JH,LOG_NAMES:sH,PM2_PROCESS_STATUSES:q0,CONFIG_PARAM_MAP:dR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:WB,HDB_DEFAULT_CONFIG_FILE:QB,ROLE_TYPES_ENUM:uH,BOOT_PROP_PARAMS:uR,INSTALL_PROMPTS:XH,HDB_ROOT_DIR_NAME:zB,CLUSTERING_PROCESSES:oH,FOREGROUND_PID_FILE:jB,PACKAGE_ROOT:an,PRE_4_0_0_VERSION:G0,SCHEMAS_PARAM_CONFIG:E0,METADATA_PROPERTY:A0,AUTH_AUDIT_STATUS:x0,AUTH_AUDIT_TYPES:k0,HDB_PID_FILE:eH,DEFAULT_DATABASE_NAME:tH};tR()});var EE=m((Tte,pR)=>{"use strict";var mR=require("minimist");pR.exports=V0;function V0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=SR(process.env),s=SR(mR(process.argv))):(r=process.env,s=mR(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(V0,"assignCMDENVVariables");function SR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(SR,"objKeysToLowerCase")});var x=m((gte,RE)=>{"use strict";var qn=require("fs-extra"),{workerData:$0,threadId:Y0}=require("worker_threads"),ws=require("path"),gR=require("yaml"),AR=require("properties-reader"),et=A(),TR=EE(),K0=require("os"),{PACKAGE_ROOT:hE}=A(),{_assignPackageExport:W0}=require("../../index"),Qo={};for(let e in console)Qo[e]||(Qo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},OR={STDOUT:"stdOut",STDERR:"stdErr"},Q0=ws.join(hE,"logs"),z0=ws.join(hE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),J0=1e4,ys,Is,Lt,lu,_u,zo,Pi,Wo;Wo===void 0&&NR();RE.exports={notify:IR,fatal:wR,error:Jo,warn:TE,info:du,debug:pE,trace:SE,setLogLevel:sF,log_level:Lt,loggerWithTag:X0,suppressLogging:Z0,initLogSettings:NR,setupConsoleLogging:bR,logCustomLevel:tF,closeLogFile:mE,getLogFilePath:()=>zo,OUTPUTS:OR,AuthAuditLog:oF};W0("logger",RE.exports);function NR(e=!1){try{if(Wo===void 0||e){mE();let t=rF(),r=TR(["ROOTPATH"]);try{Wo=AR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!qn.pathExistsSync(ws.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:_u,to_file:ys,to_stream:Is}=nF(r.ROOTPATH?ws.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Wo.get("settings_path"))),lu=et.LOG_NAMES.HDB,zo=ws.join(_u,lu)}}catch(t){if(Wo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=TR(Object.keys(et.CONFIG_PARAM_MAP),!0);for(let o in r){let c=et.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===et.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=iF();ys=ys===void 0?n:ys,ys=RR(ys),Is=Is===void 0?i:Is,Is=RR(Is),Lt=Lt===void 0?s:Lt,_u=Q0,lu=et.LOG_NAMES.INSTALL,zo=ws.join(_u,lu);return}throw Jo("Error initializing log settings"),Jo(t),t}bR()}a(NR,"initLogSettings");var fE=!0;function bR(){Mi("error",Jo),Mi("warn",TE),Mi("log",du),Mi("info",du),Mi("debug",pE),Mi("trace",SE)}a(bR,"setupConsoleLogging");function Mi(e,t){console[e]=function(...r){if(fE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qo[e](...r)}}a(Mi,"logConsole");function X0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(IR),fatal:r(wR),error:r(Jo),warn:r(TE),info:r(du),debug:r(pE),trace:r(SE)};function r(s){return function(...n){return s(t,...n)}}}a(X0,"loggerWithTag");function Z0(e){try{fE=!1,e()}finally{fE=!0}}a(Z0,"suppressLogging");var j0=$0?.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||j0+"/"+Y0);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 Xo(e){ys&&yR(e),Is&&process.stdout.write(e)}a(Xo,"logStdOut");function Eu(e){ys&&yR(e),Is&&process.stderr.write(e)}a(Eu,"logStdErr");function yR(e){eF(),Pi?qn.appendFileSync(Pi,e):Qo.log(e)}a(yR,"logToFile");function mE(){try{qn.closeSync(Pi)}catch{}Pi=null}a(mE,"closeLogFile");function eF(){if(!Pi){try{if(!zo)debugger;Pi=qn.openSync(zo,"a")}catch(e){Qo.error(e)}setTimeout(()=>{mE()},J0).unref()}}a(eF,"openLogFile");function du(...e){Mt[Lt]<=Mt.info&&Xo(Cs("info",e))}a(du,"info");function SE(...e){Mt[Lt]<=Mt.trace&&Xo(Cs("trace",e))}a(SE,"trace");function Jo(...e){Mt[Lt]<=Mt.error&&Eu(Cs("error",e))}a(Jo,"error");function pE(...e){Mt[Lt]<=Mt.debug&&Xo(Cs("debug",e))}a(pE,"debug");function IR(...e){Mt[Lt]<=Mt.notify&&Xo(Cs("notify",e))}a(IR,"notify");function wR(...e){Mt[Lt]<=Mt.fatal&&Eu(Cs("fatal",e))}a(wR,"fatal");function TE(...e){Mt[Lt]<=Mt.warn&&Eu(Cs("warn",e))}a(TE,"warn");function tF(e,t,...r){t===OR.STDERR?Eu(Cs(e,r)):Xo(Cs(e,r))}a(tF,"logCustomLevel");function rF(){let e;try{e=K0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return qn.existsSync(t)||(t=ws.join(hE,"utility/hdb_boot_properties.file")),t}a(rF,"getPropsFilePath");function sF(e){Lt=e}a(sF,"setLogLevel");function RR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(RR,"autoCastBoolean");function nF(e){try{if(e.includes("config/settings.js")){let o=AR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(et.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(et.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=gR.parseDocument(qn.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(nF,"getLogConfig");function iF(){try{let e=gR.parseDocument(qn.readFileSync(z0,"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(iF,"getDefaultConfig");function oF(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(oF,"AuthAuditLog")});var UR=m((Ote,CR)=>{"use strict";var aF=require("util"),cF=require("path"),uF=require("child_process"),lF=aF.promisify(uF.execFile),_F=1e3*1e3*10;CR.exports={findPs:dF};async function dF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await lF("ps",["wwxo",`pid,${r}`],{maxBuffer:_F});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:cF.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(dF,"findPs")});var xe=m((bte,LR)=>{"use strict";var EF="__dbis__",fF="__txns__",hF="__environment_name__",mF="__dbi_defintion__",SF={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"},pF=["__createdtime__","__updatedtime__"],TF="\uFFFF",DR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RF=Object.values(DR);LR.exports={AUDIT_STORE_NAME:fF,INTERNAL_DBIS_NAME:EF,DBI_DEFINITION_NAME:mF,SEARCH_TYPES:SF,TIMESTAMP_NAMES:pF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hF,TRANSACTIONS_DBI_NAMES_ENUM:DR,TRANSACTIONS_DBIS:RF,OVERFLOW_MARKER:TF}});var rr=m((yte,xR)=>{"use strict";var MR=A(),PR=xe(),vR={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},BR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),HR={500:BR("There was an error processing your request."),400:"Invalid request"},gF=HR[vR.INTERNAL_SERVER_ERROR],AF={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.`},OF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},NF={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"},bF={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 ${PR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${PR.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"},yF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${MR.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 ${MR.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE} bytes, check log for more info`,INVALID_FORWARD_SLASH_IN_HASH_ERR:"transaction aborted due to record(s) with a hash value that contains a forward slash, check log for more info",RECORD_MISSING_HASH_ERR:"transaction aborted due to record(s) with no hash value, check log for more info"},FR={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},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."},wF={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`},CF={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"},UF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},DF={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`},qR={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.`},GR={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."},MF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},PF={...FR,...NF,...AF,...IF,...wF,...CF,...UF,...DF,...yF,...qR,...GR,...LF,...MF,...OF};xR.exports={CHECK_LOGS_WRAPPER:BR,HDB_ERROR_MSGS:PF,DEFAULT_ERROR_MSGS:HR,DEFAULT_ERROR_RESP:gF,HTTP_STATUS_CODES:vR,LMDB_ERRORS_ENUM:bF,AUTHENTICATION_ERROR_MSGS:FR,VALIDATION_ERROR_MSGS:qR,ITC_ERRORS:GR}});var W=m((wte,$R)=>{"use strict";var vi=rr(),vF=x(),BF=A(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,kR),this.statusCode=s||vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vi.DEFAULT_ERROR_MSGS[s]?vi.DEFAULT_ERROR_MSGS[s]:vi.DEFAULT_ERROR_MSGS[vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&vF[n](i)}},gE=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}},AE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function kR(e,t,r,s=BF.LOG_LEVELS.ERROR,n=null,i=!1){if(VR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(kR,"handleHDBError");function VR(e){return e.__proto__.constructor.name===fu.name}a(VR,"isHDBError");$R.exports={isHDBError:VR,handleHDBError:kR,ClientError:gE,ServerError:AE,hdb_errors:vi}});var KR=m((Ute,YR)=>{"use strict";var HF={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))},FF="certificate.pem",qF="privateKey.pem",GF="ca.pem";YR.exports={CERTIFICATE_VALUES:HF,CERTIFICATE_PEM_NAME:FF,PRIVATEKEY_PEM_NAME:qF,CA_PEM_NAME:GF}});var Pe=m((Dte,WR)=>{"use strict";var Pt=require("validate.js");Pt.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Pt.validators.type.checks[t](e)?null:` must be a '${t}' value`};Pt.validators.type.checks={Object:function(e){return Pt.isObject(e)&&!Pt.isArray(e)},Array:Pt.isArray,Integer:Pt.isInteger,Number:Pt.isNumber,String:Pt.isString,Date:Pt.isDate,Boolean:function(e){return typeof e=="boolean"}};Pt.validators.hasValidFileExt=function(e,t){return Pt.isString(e)?e===""?"can't be blank":t.filter(r=>e.endsWith(r)).length>0?null:`must include one of the following valid file extensions - '${t.join("', '")}'`:null};WR.exports={validateObject:xF,validateObjectAsync:kF,validateBySchema:VF};function xF(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Pt(e,t,{format:"flat"});return r?new Error(r):null}a(xF,"validateObject");async function kF(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Pt.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(kF,"validateObjectAsync");function VF(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(VF,"validateBySchema")});var NE=m((Pte,jR)=>{"use strict";var XR=require("fs-extra"),ee=require("joi"),$F=require("os"),{boolean:pe,string:Ds,number:sr,array:OE}=ee.types(),{totalmem:QR}=require("os"),Bi=require("path"),YF=x(),mu=V(),Mte=KR(),zR=A(),KF=Pe(),JR="log",WF="components",QF="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zF="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",JF="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",XF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",ZF="rootPath config parameter is undefined",jF="clustering.enabled config parameter is undefined",Us=sr.min(0).required(),Su=OE.items({host:Ds.required(),port:Us}).empty(null),Ls;jR.exports={configValidator:eq,routesValidator:oq,route_constraints:Su};function eq(e){if(Ls=e.rootPath,mu.isEmpty(Ls))throw ZF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(iq),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(hu),i=ee.custom(tq).messages({"any.custom":"{:#label} {:#error}"}),o=Ds.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(hu),u=ee.custom(rq).empty(null).default(hu),l=e.clustering?.enabled;if(mu.isEmpty(l))throw jF;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Us,routes:Su}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Us}).required()}).required(),network:ee.object({port:Us}).required()}).required(),leafServer:ee.object({network:ee.object({port:Us,routes:Su}).required(),streams:ee.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:ee.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:pe.optional(),databaseLevel:pe.optional(),tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required(),verify:pe.optional()}),user:Ds.optional().empty(null)}).required():_=ee.object({enabled:t,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:pe.required()})}).required(),ee.object({authentication:ee.object({authorizeLocal:pe,cacheTTL:sr.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:sr}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:OE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}),nodeEnv:r,root:n,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:ee.object({enabled:t}).required(),logging:ee.object({auditAuthEvents:ee.object({logFailed:pe,logSuccessful:pe}),file:pe.required(),level:ee.valid("notify","fatal","error","warn","info","debug","trace"),rotation:ee.object({enabled:pe.optional(),compress:pe.optional(),interval:Ds.custom(nq).optional().empty(null),maxSize:Ds.custom(sq).optional().empty(null),path:Ds.optional().empty(null).default(hu)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:OE.required(),headersTimeout:sr.min(1).required(),https:pe.required(),keepAliveTimeout:sr.min(1).required(),port:Us,timeout:sr.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Us,securePort:Us}).required(),webSocket:pe.optional(),requireAuthentication:pe.optional()}),http:ee.object({threads:s}).required(),storage:ee.object({writeAsync:pe.required(),overlappingSync:pe.optional(),caching:pe.optional(),compression:pe.optional(),noReadAhead:pe.optional(),path:u,prefetchWrites:pe.optional()}).required(),ignoreScripts:pe.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(eq,"configValidator");function ZR(e){return XR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(ZR,"doesPathExist");function tq(e,t){if(e===null)return;let r=ZR(e);return r?t.message(r):e}a(tq,"validatePemFile");function rq(e,t){ee.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ZR(e);if(r)return t.message(r)}a(rq,"validatePath");function sq(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(QF);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(JF):e}a(sq,"validateRotationMaxSize");function nq(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(zF);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(XF):e}a(nq,"validateRotationInterval");function iq(e,t){let r=t.state.path.join("."),s=$F.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||QR();return i=Math.round(Math.min(i,QR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),YF.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(iq,"setDefaultThreads");function hu(e,t){if(!mu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(mu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Bi.join(Ls,WF);case"logging.root":return Bi.join(Ls,JR);case"clustering.leafServer.streams.path":return Bi.join(Ls,"clustering","leaf");case"storage.path":let s=Bi.join(Ls,zR.LEGACY_DATABASES_DIR_NAME);return XR.existsSync(s)?s:Bi.join(Ls,zR.DATABASES_DIR_NAME);case"logging.rotation.path":return Bi.join(Ls,JR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(hu,"setDefaultRoot");function oq(e){let t=ee.object({routes:Su});return KF.validateBySchema({routes:e},t)}a(oq,"routesValidator")});var pu={};je(pu,{server:()=>tt});var eg,tt,Jr=Se(()=>{eg=require("../../index"),tt={};(0,eg._assignPackageExport)("server",tt)});var Tr=m((Hte,lg)=>{"use strict";var pr=A(),lt=V(),rt=x(),{configValidator:aq,routesValidator:tg}=NE(),vt=require("fs-extra"),cq=require("yaml"),Pr=require("path"),uq=require("is-number"),sg=require("properties-reader"),lq=require("lodash"),{handleHDBError:_q}=W(),{HTTP_STATUS_CODES:dq,HDB_ERROR_MSGS:Tu}=rr(),Bte=require("minimist"),{server:Eq}=(Jr(),re(pu)),{SCHEMAS_PARAM_CONFIG:Zo,CONFIG_PARAMS:cn,CONFIG_PARAM_MAP:Ms}=pr,fq="Unable to get config value because config is uninitialized",hq="Config successfully initialized",mq="Error backing up config file",Sq="Empty parameter sent to getConfigValue",ng=Pr.join(pr.PACKAGE_ROOT,"config","yaml",pr.HDB_DEFAULT_CONFIG_FILE),pq="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",rg={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"},Ru,ft;lg.exports={createConfigFile:Tq,getDefaultConfig:Rq,getConfigValue:og,initConfig:ag,flattenConfig:xn,updateConfigValue:cg,updateConfigObject:Aq,getConfiguration:bq,setConfiguration:yq,readConfigFile:IE,getClusteringRoutes:Iq,initOldConfig:ug,getConfigFromFile:wq,getConfigFilePath:Gn,addConfig:Cq,deleteConfigFromFile:Uq};function Tq(e){let t=un(ng);Ru=xn(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===cn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=bE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){rt.error(_)}}}r&&ig(t,r),yE(t);let s=t.toJSON();ft=xn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,pr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),rt.trace(`Config file written to ${i}`)}a(Tq,"createConfigFile");function ig(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Zo.TABLES))for(let i in s[n][Zo.TABLES])for(let o in s[n][Zo.TABLES][i]){let c=s[n][Zo.TABLES][i][o],u=[cn.SCHEMAS,n,Zo.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[cn.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){rt.error("Error parsing schemas CLI/env config arguments",s)}}a(ig,"setSchemasConfig");function Rq(e){if(Ru===void 0){let r=un(ng);Ru=xn(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Ru[t.toLowerCase()]}a(Rq,"getDefaultConfig");function og(e){if(e==null){rt.error(Sq);return}if(ft===void 0){rt.trace(fq);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(og,"getConfigValue");function Gn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,pr.HDB_CONFIG_FILE):sg(e).get(pr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function ag(e=!1){if(ft===void 0||e){let t;if(!lt.noBootFile()){t=lt.getPropsFilePath();try{vt.accessSync(t,vt.constants.F_OK|vt.constants.R_OK)}catch(i){throw rt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Gn(t),s;if(r.includes("config/settings.js"))try{ug(r);return}catch(i){if(i.code!==pr.NODE_ERROR_CODES.ENOENT)throw i}try{s=un(r)}catch(i){if(i.code===pr.NODE_ERROR_CODES.ENOENT){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}`)}gq(s,r),yE(s);let n=s.toJSON();if(Eq.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in rg)ft[i]&&rt.error(`Config ${rg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);rt.trace(hq)}}a(ag,"initConfig");function gq(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Pr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Pr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Pr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(rt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(gq,"checkForUpdatedConfig");function yE(e){let t=e.toJSON(),r=aq(t);if(r.error)throw Tu.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(yE,"validateConfig");function Aq(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(Aq,"updateConfigObject");function cg(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&ag();let o=og(Ms.hdb_root),c=Pr.join(o,pr.HDB_CONFIG_FILE),u=un(c),l;if(r===void 0&&e.toLowerCase()===cn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=bE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===cn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=bE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){rt.error(p)}}}l&&ig(u,l),yE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,pr.HDB_CONFIG_FILE);s===!0&&Oq(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),rt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(cg,"updateConfigValue");function Oq(e,t){try{let r=Pr.join(t,"backup",`${pr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),rt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){rt.error(mq),rt.error(r)}}a(Oq,"backupConfigFile");var Nq=["schemas"];function xn(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Nq.includes(r)){let s=xn(e[r]);for(let n in s)s.hasOwnProperty(n)&&(t[r.toLowerCase()+"_"+n]=s[n])}else t[r.toLowerCase()]=e[r];return t}a(xn,"flattenConfig");function bE(e,t){if(e===cn.CLUSTERING_NODENAME||e===cn.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(uq(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||lt.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return lt.autoCast(t)}a(bE,"castConfigValue");function bq(){let e=lt.getPropsFilePath(),t=Gn(e);return un(t).toJSON()}a(bq,"getConfiguration");async function yq(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return cg(void 0,void 0,n,!0),pq}catch(i){throw typeof i=="string"||i instanceof String?_q(i,i,dq.BAD_REQUEST,void 0,void 0,!0):i}}a(yq,"setConfiguration");function IE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw rt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return un(t).toJSON()}a(IE,"readConfigFile");function un(e){return cq.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(un,"parseYamlDoc");function Iq(){let e=IE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=tg(t);if(r)throw Tu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=tg(s);if(n)throw Tu.CONFIG_VALIDATION(n.message);if(!lt.isEmptyOrZeroLength(s)&&!lt.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!lt.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Tu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(Iq,"getClusteringRoutes");function ug(e){let t=sg(e);ft={};for(let r in Ms){let s=t.get(r.toUpperCase());if(lt.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Ms[r].toLowerCase();n===cn.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(ug,"initOldConfig");function wq(e){let t=IE();return lq.get(t,e.replaceAll("_","."))}a(wq,"getConfigFromFile");async function Cq(e,t){let r=un(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(Cq,"addConfig");function Uq(e){let t=Gn(lt.getPropsFilePath()),r=un(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,pr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(Uq,"deleteConfigFromFile")});var Q=m((qte,Eg)=>{"use strict";var wE=require("fs-extra"),vr=require("path"),_g=require("os"),Dq=require("properties-reader"),jo=x(),kn=V(),te=A(),gu=Tr(),Lq="Error initializing environment manager",Au="BOOT_PROPS_FILE_PATH",dg=!1,Mq={[te.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},Ps={};Eg.exports={BOOT_PROPS_FILE_PATH:Au,getHdbBasePath:Pq,setHdbBasePath:vq,get:Bq,initSync:Fq,setProperty:Ee,initTestEnvironment:qq};function Pq(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(Pq,"getHdbBasePath");function vq(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(vq,"setHdbBasePath");function Bq(e){let t=gu.getConfigValue(e);return t===void 0?Ps[e]:t}a(Bq,"get");function Ee(e,t){Mq[e]&&(Ps[e]=t),gu.updateConfigObject(e,t)}a(Ee,"setProperty");function Hq(){let e;try{e=kn.getPropsFilePath(),wE.accessSync(e,wE.constants.F_OK|wE.constants.R_OK),dg=!0;let t=Dq(e);return Ps[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),Ps[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),Ps[Au]=e,!0}catch{return jo.trace(`Environment manager found no properties file at ${e}`),!1}}a(Hq,"doesPropFileExist");function Fq(e=!1){try{(dg||Hq()||kn.noBootFile())&&(gu.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=gu.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){jo.error(Lq),jo.error(t),console.error(t),process.exit(1)}}a(Fq,"initSync");function qq(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=vr.join(__dirname,"../../","unitTests");Ps[Au]=vr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,vr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,_g.userInfo()?_g.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,vr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,vr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,vr.join(u,"envDir","log")),Ee(te.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),Ee(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,vr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,vr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,kn.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,kn.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,kn.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,kn.isEmpty(i)?!1:i),Ee(te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),Ee(te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),Ee(te.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,vr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,kn.isEmpty(c)?!1:c),o&&(Ee("CORS_ACCESSLIST",o),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(te.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Au}. Please check your boot props and settings files`;jo.fatal(r),jo.error(t)}}a(qq,"initTestEnvironment")});var we=m((xte,Rg)=>{"use strict";var na=A(),Gq=V(),Bt=Q(),ia=require("path"),xq=require("minimist"),fg=require("fs-extra"),hg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:ln,SCHEMAS_PARAM_CONFIG:ea,SYSTEM_SCHEMA_NAME:Ou}=na,ta,ra,sa;function mg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=Bt.get(ln.STORAGE_PATH)||ia.join(Bt.getHdbBasePath(),na.DATABASES_DIR_NAME),ta}a(mg,"getBaseSchemaPath");function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Tg(Ou),ra}a(Sg,"getSystemSchemaPath");function pg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Bt.get(na.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ia.join(Bt.getHdbBasePath(),na.TRANSACTIONS_DIR_NAME),sa}a(pg,"getTransactionAuditStoreBasePath");function kq(e,t){let r=Bt.get(ln.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ia.join(pg(),e.toString())}a(kq,"getTransactionAuditStorePath");function Tg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(na.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ia.join(mg(),e)}a(Tg,"getSchemaPath");function Vq(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,xq(process.argv));let s=r[ln.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!Gq.isObject(s))throw o;i=s}for(let o of i){let c=o[Ou];if(!c)continue;let u=Bt.get(ln.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ea.PATH];if(l)return hg.set(u,[Ou,ea.TABLES,t,ea.PATH],l),Bt.setProperty(ln.SCHEMAS,u),l;let _=c?.[ea.PATH];if(_)return hg.set(u,[Ou,ea.PATH],_),Bt.setProperty(ln.SCHEMAS,u),_}}let n=r[ln.STORAGE_PATH.toUpperCase()];if(n){if(!fg.pathExistsSync(n))throw new Error(n+" does not exist");let i=ia.join(n,e);return fg.mkdirsSync(i),Bt.setProperty(ln.STORAGE_PATH,n),i}return Sg()}a(Vq,"initSystemSchemaPaths");function $q(){ta=void 0,ra=void 0,sa=void 0}a($q,"resetPaths");Rg.exports={getBaseSchemaPath:mg,getSystemSchemaPath:Sg,getTransactionAuditStorePath:kq,getTransactionAuditStoreBasePath:pg,getSchemaPath:Tg,initSystemSchemaPaths:Vq,resetPaths:$q}});var Ht=m((Yte,bg)=>{"use strict";var Yq=rr().LMDB_ERRORS_ENUM,Vte=require("lmdb"),Kq=xe(),$te=require("buffer").Buffer,{OVERFLOW_MARKER:gg,MAX_SEARCH_KEY_LENGTH:Nu}=Kq,Ag=["number","string","symbol","boolean","bigint"];function Wq(e){if(e=e?.primaryStore||e,!e)throw new Error(Yq.ENV_REQUIRED)}a(Wq,"validateEnv");function Qq(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(Qq,"stringifyData");function zq(e){return e instanceof Date?e.valueOf():e}a(zq,"convertKeyValueToWrite");function Jq(e){if(e==null)return;if(Ag.includes(typeof e))return e.length>Nu?[e.slice(0,Nu)+gg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(Ag.includes(typeof n))n.length>Nu?t.push(n.slice(0,Nu)+gg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(Jq,"getIndexedValues");var bu=0,Og=0;function Ng(){Og=Date.now()-performance.now()}a(Ng,"adjustStartTime");Ng();var Xq=6e4;setInterval(Ng,Xq).unref();function Zq(){let e=performance.now()+Og;return e>bu?(bu=e,e):(bu+=488e-6,bu)}a(Zq,"getNextMonotonicTime");bg.exports={validateEnv:Wq,stringifyData:Qq,convertKeyValueToWrite:zq,getNextMonotonicTime:Zq,getIndexedValues:Jq}});var yg,Xr,CE,oa=Se(()=>{yg=require("events"),Xr=class extends yg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new CE;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)}},CE=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 aa(e){return e[ht]||(e[ht]=Object.create(null))}function Uu(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=Ig(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){aa(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,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,yu.ClientError)(`${c} must be a string, attempt to assign ${l}`);aa(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 yu.ClientError("Can not add a property to a sealed table schema");aa(this)[o]=c}),i("deleteProperty",function(o){aa(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 Ig(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}},Uu(r,t)),new r(e)):new Iu(e);case Array:let s=new Cu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ig(o,t?.elements)),s[n]=o}return s}}function Du(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=Du(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ca(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=ca(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=ca(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function wu(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[Vn]||e.length!==t.length)return!0;for(let r=0,s=e.length;r<s;r++){let n=t[r],i=e[r];if(n&&i?.[ce]===n){if(wu(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(wu(n))return!0}else return!0}else return!0}}return!1}var yu,ht,Iu,Vn,Cu,Lu=Se(()=>{Zr();yu=C(W()),ht=Symbol("own-data");a(aa,"getChanges");a(Uu,"assignTrackedAccessors");a(Ig,"trackObject");Iu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Uu(Iu,{});a(Du,"collapseData");a(ca,"deepFreeze");a(wu,"hasChanges");Vn=Symbol.for("has-array-changes"),Cu=class extends Array{static{a(this,"TrackedArray")}[Vn];constructor(t){super(t)}splice(...t){return this[Vn]=!0,super.splice(...t)}push(...t){return this[Vn]=!0,super.push(...t)}pop(){return this[Vn]=!0,super.pop()}unshift(...t){return this[Vn]=!0,super.unshift(...t)}shift(){return this[Vn]=!0,super.shift()}};Cu.prototype.constructor=Array});function Ye(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new UE;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 wg,Cg,UE,$n=Se(()=>{wg=C(Ht()),Cg=require("../../index");Zr();a(Ye,"transaction");(0,Cg._assignPackageExport)("transaction",Ye);Ye.commit=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ye.abort=function(e){let t=(e[Ae]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};UE=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,wg.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 ME(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(eG[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=es.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case _t.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let p=o;o=c,c=p,p=!l,l=!u,u=p}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new DE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=PE(e);if(!p)throw new DE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(k=>setImmediate(()=>k(p(O)?R:Dg.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:p})=>p)}function PE(e){let t=e.comparator,r=e[0]??e.attribute,s=e[1]??e.value;switch(s instanceof Date&&(s=s.getTime()),t){case _t.SEARCH_TYPES.EQUALS:case void 0:return jr(r,n=>n===s);case _t.SEARCH_TYPES.CONTAINS:return jr(r,n=>n?.toString().includes(s));case _t.SEARCH_TYPES.ENDS_WITH:case _t.SEARCH_TYPES._ENDS_WITH:return jr(r,n=>n?.toString().endsWith(s));case _t.SEARCH_TYPES.STARTS_WITH:case _t.SEARCH_TYPES._STARTS_WITH:return jr(r,n=>typeof n=="string"&&n.startsWith(s));case _t.SEARCH_TYPES.BETWEEN:return s[0]instanceof Date&&(s[0]=s[0].getTime()),s[1]instanceof Date&&(s[1]=s[1].getTime()),jr(r,n=>(0,es.compareKeys)(n,s[0])>=0&&(0,es.compareKeys)(n,s[1])<=0);case"gt":case _t.SEARCH_TYPES.GREATER_THAN:case _t.SEARCH_TYPES._GREATER_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)>0);case"ge":case _t.SEARCH_TYPES.GREATER_THAN_EQUAL:case _t.SEARCH_TYPES._GREATER_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)>=0);case _t.SEARCH_TYPES.LESS_THAN:case"lt":case _t.SEARCH_TYPES._LESS_THAN:return jr(r,n=>(0,es.compareKeys)(n,s)<0);case"le":case _t.SEARCH_TYPES.LESS_THAN_EQUAL:case _t.SEARCH_TYPES._LESS_THAN_EQUAL:return jr(r,n=>(0,es.compareKeys)(n,s)<=0);case"ne":return jr(r,n=>(0,es.compareKeys)(n,s)!==0);default:return}}function jr(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function Mu(e){if(!e)return;let t=new LE,r,s,n,i,o;for(;r=Ug.exec(e);){i=Ug.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=jq[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 DE,_t,es,Dg,Ug,jq,eG,LE,Pu=Se(()=>{DE=C(W()),_t=C(xe()),es=require("ordered-binary"),Dg=require("lmdb"),Ug=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,jq={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ME,"idsForCondition");eG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(PE,"filterByType");a(jr,"attributeComparator");a(Mu,"parseQuery");LE=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 HE={};je(HE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Hg,snake_case:()=>rG});function rG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Lg(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 BE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Ae]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Ae]||i):l=i:(l=n,c=l[ae]??l[this.primaryKey]??null):i?o=i[Ae]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ye(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[Hg]=!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 vu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new vu(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 Bg.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 vE(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 Mg(e){if(typeof e=="string")return t=>vE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=vE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=vE(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 Pg,vg,Bg,Ae,ae,vs,Hg,ce,tG,mt,vu,BE,Zr=Se(()=>{Pg=require("crypto");oa();vg=require("../../index"),Bg=C(W());Lu();$n();Pu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Hg=Symbol("save-updates"),ce=Symbol("stored-record"),tG={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=Mg(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,Pg.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Mg(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 Mu(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&&tG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Lg(t,this)}}return Lg(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 Xr;if(t?.subscribe!==!1){let s={listener:i=>{r.send(i)}},n=this.subscribe?.(s);r.on("close",()=>n?.end())}return r}update(t){throw new Error("Not implemented")}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ae]}getContext(){return this[Ae]}};mt.prototype[Ae]=null;(0,vg._assignPackageExport)("Resource",mt);a(rG,"snake_case");vu=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(Lg,"pathToId");BE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(vE,"selectFromObject");a(Mg,"transformForSelect")});var GE={};je(GE,{loadGQLSchema:()=>nG,start:()=>qE,startOnMainThread:()=>sG});function qE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let F of P.arguments)F.name.value==="role"&&z.push(F.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,FE.dirname)(s)+"/"+(T.export.name||T.typeName),T.tableClass);if(h)for(let T of h.properties){let p=E.get(T.type);if(!p)throw new Error(`${T.type} was not found as a Query export`);i.set((0,FE.dirname)(s)+"/"+T.name,p.tableClass)}}}var FE,sG,nG,Fg=Se(()=>{FE=require("path");de();a(qE,"start");sG=qE,nG=qE({ensureTable:st}).handleFile});async function Bu(e){return iG?(ua||(ua=oG(cG)),(await(await ua).import(e)).namespace):import(e)}async function oG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ua=new Compartment({console,Math,Date,fetch:aG,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Gg.extname)(r)||(r+=".js"),r)},importHook:async r=>{if(r==="harperdb")return{imports:[],exports:["Resource","tables","databases"],execute(n){Object.assign(n,{Resource:mt,tables:nr,databases:ve})}};let s=await(0,qg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ua}function aG(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 cG(){return{Resource:mt,tables:nr}}var qg,Gg,iG,ua,xE=Se(()=>{Zr();de();qg=require("fs/promises"),Gg=require("path"),iG=!1;a(Bu,"secureImport");a(oG,"getCompartment");a(aG,"secureOnlyFetch");a(cG,"getGlobalVars")});var VE={};je(VE,{handleFile:()=>uG});async function uG(e,t,r,s){let n=new Map,i=(0,xg.pathToFileURL)(r).toString(),o=await Bu(i);u(o.default)&&s.set((0,kE.dirname)(t),o.default),c(o,(0,kE.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 xg,kE,kg=Se(()=>{xg=require("url");xE();kE=require("path");a(uG,"handleFile")});var YE={};je(YE,{start:()=>lG});function lG({resources:e}){e.set("login",$E),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var $E,Vg=Se(()=>{Zr();a(lG,"start");$E=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 WE=m((Tre,Kg)=>{"use strict";var{Readable:_G}=require("stream"),dG=1e4;Kg.exports={streamAsJSON(e){return new KE({value:e})}};var KE=class extends _G{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),$g)}catch(n){yield $g(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);Yg(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>dG?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 Yg(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 $g(e){return console.error(e),JSON.stringify(e.toString())}a($g,"handleError");function Yg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Yg,"when")});var iA=m((Are,nA)=>{"use strict";var QE=require("recursive-iterator"),EG=require("alasql"),zE=require("clone"),Wg=V(),{handleHDBError:Qg,hdb_errors:fG}=W(),{HDB_ERROR_MSGS:zg,HTTP_STATUS_CODES:Jg}=fG,{getDatabases:hG}=(de(),re(Ne)),mG=["DISTINCT_ARRAY"],Xg=Symbol("validateTables"),JE=Symbol("validateTable"),gre=Symbol("getAllColumns"),Zg=Symbol("validateAllColumns"),Hu=Symbol("findColumn"),jg=Symbol("validateOrderBy"),la=Symbol("validateSegment"),XE=Symbol("validateColumn"),eA=Symbol("setColumnsForTable"),tA=Symbol("checkColumnsForAsterisk"),rA=Symbol("validateGroupBy"),sA=Symbol("hasColumns"),ZE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[Xg](),this[tA](),this[Zg]()}[Xg](){if(this[sA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[JE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[JE](t.table)})}}[sA](){let t=!1,r=new QE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[JE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=hG();if(!r[t.databaseid])throw Qg(new Error,zg.SCHEMA_NOT_FOUND(t.databaseid),Jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Qg(new Error,zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=zE(n);i.table=zE(t),this.attributes.push(i)})}[Hu](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)}[tA](){let t=new QE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[eA](r.tableid)}[eA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new EG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zg](){this[la](this.statement.columns,!1),this[la](this.statement.joins,!1),this[la](this.statement.where,!1),this[rA](this.statement.group,!1),this[la](this.statement.order,!0)}[la](t,r){if(!t)return;let s=new QE(t),n=[];for(let{node:i,path:o}of s)!Wg.isEmpty(i)&&!Wg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[jg](i):n.push(this[XE](i)));return n}[rA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&mG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=zE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Hu](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[Hu](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`}[jg](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[XE](t)}[XE](t){let r=this[Hu](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]}};nA.exports=ZE});var aA=m((Nre,oA)=>{"use strict";var jE=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")}};oA.exports=jE});var uA=m((yre,cA)=>{"use strict";var ef=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cA.exports=ef});var Fu=m((wre,lA)=>{"use strict";var rf=Q(),sf=A();rf.initSync();var SG=rf.get(sf.CONFIG_PARAMS.STORAGE_COMPRESSION),pG=rf.get(sf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,TG=sf.UPDATES_PROPERTY,tf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=SG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=pG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===TG)}};lA.exports=tf});var Gu=m((Ure,dA)=>{"use strict";var Hi=Q(),_a=A();Hi.initSync();var RG=Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(_a.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",_A=Hi.get(_a.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),gG=Hi.get(_a.CONFIG_PARAMS.STORAGE_NOREADAHEAD),qu=class{static{a(this,"OpenEnvironmentObject")}constructor(t,r=!1){this.path=t,this.mapSize=1073741824,this.maxDbs=1e4,this.maxReaders=1e3,this.sharedStructuresKey=Symbol.for("structures"),this.readOnly=r,this.trackMetrics=!0,this.noSync=RG,this.noFSAccess=!0,_A!==void 0&&(this.overlappingSync=_A),this.noReadAhead=gG}};dA.exports=qu;qu.MAX_DBS=1e4});var ye=m((Lre,AA)=>{"use strict";var of=require("lmdb"),Br=require("fs-extra"),ir=require("path"),xu=Ht(),hA=x(),Ft=rr().LMDB_ERRORS_ENUM,ku=uA(),af=Fu(),mA=Gu(),_n=xe(),EA=A(),{table:AG,resetDatabases:OG}=(de(),re(Ne)),fA=Q(),Hr=_n.INTERNAL_DBIS_NAME,SA=_n.DBI_DEFINITION_NAME,NG="data.mdb",bG="lock.mdb",da=".mdb",yG="-lock",nf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(t,r),this.key_type=this.dbi[_n.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[_n.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new of.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Vu(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(Vu,"pathEnvNameValidation");async function cf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ft.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+da);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,NG),Br.constants.R_OK|Br.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(cf,"validateEnvironmentPath");function $u(e,t){if(xu.validateEnv(e),t===void 0)throw new Error(Ft.DBI_NAME_REQUIRED)}a($u,"validateEnvDBIName");async function IG(e,t,r=!1,s=!1){Vu(e,t);let n=ir.basename(e);t=t.toString();let i=fA.get(EA.CONFIG_PARAMS.SCHEMAS);i||fA.setProperty(EA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await cf(e,t,s),pA(e,t,r)}catch(o){if(o.message===Ft.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new mA(s?c:c+da,!1),l=of.open(u);l.dbis=Object.create(null);let _=new af(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=uf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(IG,"createEnvironment");async function wG(e,t,r,s=!0){Vu(e,t),t=t.toString();let n=ir.join(e,t);return AG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(wG,"copyEnvironment");async function pA(e,t,r=!1){Vu(e,t),t=t.toString();let s=uf(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 cf(e,t),i=ir.join(e,t+da),o=n!=i,c=new mA(n,o),u=of.open(c);u.dbis=Object.create(null);let l=RA(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(pA,"openEnvironment");async function CG(e,t,r=!1){Vu(e,t),t=t.toString();let s=ir.join(e,t+da),n=await cf(e,t);if(global.lmdb_map!==void 0){let i=uf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await TA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+yG:ir.join(ir.dirname(n),bG))}a(CG,"deleteEnvironment");async function TA(e){xu.validateEnv(e);let t=e[_n.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(TA,"closeEnvironment");function uf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(uf,"getCachedEnvironmentName");function UG(e){xu.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new ku,n)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(UG,"listDBIDefinitions");function RA(e){xu.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(RA,"listDBIs");function DG(e,t){let s=Ar(e,Hr).getEntry(t),n=new ku;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(DG,"getDBIDefinition");function gA(e,t,r,s=!r){if($u(e,t),t=t.toString(),t===Hr)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 af(r,s===!0),o=e.openDB(t,i),c=new ku(r===!0,s);return o[SA]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gA,"createDBI");function Ar(e,t){if($u(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=DG(e,t):r=new ku,r===void 0)throw new Error(Ft.DBI_DOES_NOT_EXIST);let s;try{let n=new af(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[SA]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function LG(e,t){$u(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(LG,"statDBI");async function MG(e,t){try{let r=ir.join(e,t+da);return(await Br.stat(r)).size}catch{throw new Error(Ft.INVALID_ENVIRONMENT)}}a(MG,"environmentDataSize");function PG(e,t){if($u(e,t),t=t.toString(),t===Hr)throw new Error(Ft.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(PG,"dropDBI");function vG(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)gA(e,i,i!==t,i===t),s=!0;else throw o}}s&&OG()}a(vG,"initializeDBIs");AA.exports={openDBI:Ar,openEnvironment:pA,createEnvironment:IG,listDBIs:RA,listDBIDefinitions:UG,createDBI:gA,dropDBI:PG,statDBI:LG,deleteEnvironment:CG,initializeDBIs:vG,TransactionCursor:nf,environmentDataSize:MG,copyEnvironment:wG,closeEnvironment:TA}});var NA=m((Pre,OA)=>{"use strict";var lf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};OA.exports=lf});var yA=m((Bre,bA)=>{"use strict";var _f=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}};bA.exports=_f});var wA=m((Fre,IA)=>{"use strict";var df=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};IA.exports=df});var Fi=m((Vre,DA)=>{"use strict";var BG=ye(),HG=NA(),FG=yA(),qG=wA(),ts=Ht(),Ea=rr().LMDB_ERRORS_ENUM,GG=xe(),Bs=A(),xG=V(),kG=require("uuid"),Gre=require("lmdb"),{handleHDBError:VG,hdb_errors:$G}=W(),{OVERFLOW_MARKER:xre,MAX_SEARCH_KEY_LENGTH:kre}=GG,CA=Q();CA.initSync();var Yu=CA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Ef=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function YG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new HG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];UA(l,!0,n);let _=KG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return hf(o,c,s,i,n)}a(YG,"insertRecords");function KG(e,t,r,s){let n=s[t];return e.dbis[t].ifNoExists(n,()=>{for(let i=0;i<r.length;i++){let o=r[i];if(o===t||s.hasOwnProperty(o)===!1)continue;let c=s[o];if(typeof c=="function"){let _=c([[{}]]);Array.isArray(_)&&(c=_[0][Bs.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Yu&&l.prefetch(u.map(_=>({key:_,value:n})),Ku);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Yu&&e.dbis[t].prefetch([n],Ku),e.dbis[t].put(n,s,s[Yn])})}a(KG,"insertRecord");function WG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(WG,"removeSkippedRecords");function UA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Ef]))&&(e[Ef]=r||ts.getNextMonotonicTime()):delete e[Ef]}a(UA,"setTimestamps");function ff(e,t,r){r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),BG.initializeDBIs(e,t,r)}a(ff,"initializeTransaction");async function QG(e,t,r,s,n=ts.getNextMonotonicTime()){Sf(e,t,r,s),ff(e,t,r);let i=new FG,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 hf(c,u,s,i,n,o)}a(QG,"updateRecords");async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){try{Sf(e,t,r,s)}catch(u){throw VG(u,u.message,$G.HTTP_STATUS_CODES.BAD_REQUEST)}ff(e,t,r);let i=new qG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;xG.isEmpty(l[t])?(_=kG.v4(),l[t]=_):_=l[t];let d=mf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return hf(o,c,s,i,n)}a(zG,"upsertRecords");async function hf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ts.getNextMonotonicTime(),WG(r,i),s}a(hf,"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(UA(r,!_,o),Number.isInteger(r[Yn])&&l[Yn]>r[Yn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let k=T([[l]]);Array.isArray(k)&&(T=k[0][Bs.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ts.getIndexedValues(R);if(O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Yu&&p.prefetch(O.map(k=>({key:k,value:s})),Ku);for(let k=0,$=O.length;k<$;k++)p.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[Yn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:mf(e,t,r,s,n,i,o))}a(mf,"updateUpsertRecord");function JG(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(Ea.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(Ea.WRITE_ATTRIBUTES_REQUIRED):new Error(Ea.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(JG,"validateBasic");function Sf(e,t,r,s){if(JG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(Ea.RECORDS_REQUIRED):new Error(Ea.RECORDS_MUST_BE_ARRAY)}a(Sf,"validateWrite");function Ku(){}a(Ku,"noop");DA.exports={insertRecords:YG,updateRecords:QG,upsertRecords:zG}});var Kn=m((Yre,XG)=>{XG.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var rs=m((Kre,PA)=>{"use strict";var MA=V(),LA=A(),qi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),dn={schema_format:{pattern:qi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},ZG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required(),jG=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()),ex=Hs.alternatives(Hs.string().min(1).max(dn.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),Hs.number()).required();function tx(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>dn.schema_length.maximum?`'${e}' maximum of 250 characters`:qi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(tx,"checkValidTable");function rx(e,t){return MA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(rx,"validateSchemaExists");function sx(e,t){let r=t.state.ancestors[0].schema;return MA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(sx,"validateTableExists");function nx(e,t){return e.toLowerCase()===LA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${LA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(nx,"validateSchemaName");PA.exports={common_validators:dn,schema_regex:qi,hdb_schema_table:ZG,validateSchemaExists:rx,validateTableExists:sx,validateSchemaName:nx,checkValidTable:tx,hdb_database:jG,hdb_table:ex}});var Wu=m((Qre,vA)=>{var{common_validators:ss}=rs(),ha=Pe(),fa="is required",Ke={database:{presence:!1,format:ss.schema_format,length:ss.schema_length},schema:{presence:!1,format:ss.schema_format,length:ss.schema_length},table:{presence:!0,format:ss.schema_format,length:ss.schema_length},attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length},hash_attribute:{presence:!0,format:ss.schema_format,length:ss.schema_length}};function ma(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(ma,"makeAttributesStrings");function ix(e){return e=ma(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ix,"schema_object");function ox(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ox,"table_object");function ax(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,ha.validateObject(e,Ke)}a(ax,"create_table_object");function cx(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence={message:fa},Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(cx,"attribute_object");function ux(e){return e=ma(e),Ke.table.presence={message:fa},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ha.validateObject(e,Ke)}a(ux,"describe_table");function lx(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(lx,"validateTableResidence");vA.exports={schema_object:ix,create_table_object:ax,table_object:ox,attribute_object:cx,describe_table:ux,validateTableResidence:lx}});var HA=m((Jre,BA)=>{"use strict";var _x=require("uuid"),pf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||_x.v4(),this.schema_table=`${this.schema}.${this.table}`}};BA.exports=pf});var Qu=m((Zre,FA)=>{"use strict";var dx=HA(),Tf=class extends dx{static{a(this,"LMDBCreateAttributeObject")}constructor(t,r,s,n,i=!0,o=!1){super(t,r,s,n),this.dup_sort=i,this.is_hash_attribute=o}};FA.exports=Tf});var GA=m((ese,qA)=>{"use strict";qA.exports=fx;var Ex="inserted";function fx(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Ex?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fx,"returnObject")});var zu=m((rse,YA)=>{"use strict";var hx=A(),Rf=ye(),mx=Fi(),{getSystemSchemaPath:Sx,getSchemaPath:px}=we(),Tx=Kn(),Rx=Wu(),gx=Qu(),Ax=GA(),{handleHDBError:xA,hdb_errors:VA}=W(),kA=V(),{HTTP_STATUS_CODES:Ox}=VA,gf=Tx.hdb_attribute,$A=[];for(let e=0;e<gf.attributes.length;e++)$A.push(gf.attributes[e].attribute);var Nx="inserted";YA.exports=bx;async function bx(e){let t=Rx.attribute_object(e);if(t)throw xA(new Error,t.message,VA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&kA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw xA(new Error,r,Ox.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=kA.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 gx(e.schema,e.table,e.attribute,e.id);try{let i=await Rf.openEnvironment(px(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}`);Rf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Rf.openEnvironment(Sx(),hx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await mx.insertRecords(o,gf.hash_attribute,$A,[n]);return Ax(Nx,c,{records:[n]},u)}catch(i){throw i}}a(bx,"lmdbCreateAttribute")});var Of=m((nse,WA)=>{var{hdb_table:yx,hdb_database:KA}=rs(),Ix=Pe(),Af=require("joi"),wx={undefined:"undefined",null:"null"},Cx=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||wx[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"),Ux=Af.object({database:KA,schema:KA,table:yx,records:Af.array().items(Af.object().custom(Cx)).required()});WA.exports=function(e){return Ix.validateBySchema(e,Ux)}});var Sa=m((ase,zA)=>{"use strict";var Fs=V(),QA=x(),ose=Of(),{getDatabases:Dx}=(de(),re(Ne)),{ClientError:Wn}=W();zA.exports=Lx;function Lx(e){if(Fs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(Fs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(Fs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=Dx()[e.schema]?.[e.table];if(Fs.isEmpty(t))throw new Wn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&Fs.isEmptyOrZeroLength(o[r]))throw QA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!Fs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw QA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!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(Lx,"insertUpdateValidate")});var pa=m((use,JA)=>{"use strict";var Mx=A().OPERATIONS_ENUM,Nf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Mx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};JA.exports=Nf});var Aa=m((dse,XA)=>{"use strict";var _se=pa(),Ju=A(),yf=V(),bf=x(),Px=require("uuid"),{handleHDBError:Ta,hdb_errors:vx}=W(),{HDB_ERROR_MSGS:Ra,HTTP_STATUS_CODES:ga}=vx;XA.exports=Bx;function Bx(e,t,r){for(let n=0;n<t.length;n++)Hx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Fx(i,r,e.operation)}}a(Bx,"processRows");function Hx(e){if(Buffer.byteLength(String(e))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ta(new Error,Ra.ATTR_NAME_LENGTH_ERR(e),ga.BAD_REQUEST,void 0,void 0,!0);if(yf.isEmptyOrZeroLength(e)||yf.isEmpty(e.trim()))throw Ta(new Error,Ra.ATTR_NAME_NULLISH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Hx,"validateAttribute");function Fx(e,t,r){if(!e.hasOwnProperty(t)||yf.isEmptyOrZeroLength(e[t])){if(r===Ju.OPERATIONS_ENUM.INSERT||r===Ju.OPERATIONS_ENUM.UPSERT){e[t]=Px.v4();return}throw bf.error("Update transaction aborted due to record with no hash value:",e),Ta(new Error,Ra.RECORD_MISSING_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Ju.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw bf.error(e),Ta(new Error,Ra.HASH_VAL_LENGTH_ERR,ga.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw bf.error(e),Ta(new Error,Ra.INVALID_FORWARD_SLASH_IN_HASH_ERR,ga.BAD_REQUEST,void 0,void 0,!0)}a(Fx,"validateHash")});var jA=m((fse,ZA)=>{"use strict";var If=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ZA.exports=If});var rO=m((mse,tO)=>{"use strict";var wf=ye(),qx=x(),eO=rr().LMDB_ERRORS_ENUM;tO.exports=Gx;async function Gx(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 wf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==eO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await wf.closeEnvironment(global.lmdb_map[s]),await wf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==eO.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){qx.error(t)}}a(Gx,"cleanLMDBMap")});var qs=m((pse,oO)=>{"use strict";var Oa=require("crypto"),xx=Q(),{CONFIG_PARAMS:kx}=A(),nO="aes-256-cbc",Vx=32,$x=16,Cf=64,iO=32,Yx=Cf+iO,sO=new Map;oO.exports={encrypt:Kx,decrypt:Wx,createNatsTableStreamName:Qx};function Kx(e){let t=Oa.randomBytes(Vx),r=Oa.randomBytes($x),s=Oa.createCipheriv(nO,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(Kx,"encrypt");function Wx(e){let t=e.substr(0,Cf),r=e.substr(Cf,iO),s=e.substr(Yx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Oa.createDecipheriv(nO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Wx,"decrypt");function Qx(e,t){let r=xx.get(kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=sO.get(r);return s||(s=Oa.createHash("md5").update(r).digest("hex"),sO.set(r,s)),s}a(Qx,"createNatsTableStreamName")});var Qn=m((gse,cO)=>{"use strict";var Rse=Or(),Xu=x(),aO=Wu(),zx=qs(),Zu=V(),{handleHDBError:ju,hdb_errors:Jx}=W(),{HDB_ERROR_MSGS:el,HTTP_STATUS_CODES:Uf}=Jx,Xx=Q();Xx.initSync();var{getDatabases:Df}=(de(),re(Ne));cO.exports={describeAll:Zx,describeTable:tl,describeSchema:jx};async function Zx(e){try{let t=Zu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Df(),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 tl({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 tl({schema:l,table:d},f)}E&&c.push(E)}catch(E){Xu.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 Xu.error("Got an error in describeAll"),Xu.error(t),ju(new Error,el.DESCRIBE_ALL_ERR)}}a(Zx,"describeAll");async function tl(e,t){Zu.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=aO.describe_table(e);if(i)throw i;let c=Df()[r];if(!c)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let u=c[s];if(!u)throw ju(new Error,el.TABLE_NOT_FOUND(e.schema,e.table),Uf.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=zx.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){Xu.warn(`unable to stat table dbi due to ${d}`)}return _}a(tl,"descTable");async function jx(e){Zu.transformReq(e);let t=aO.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=Df()[s];if(!i)throw ju(new Error,el.SCHEMA_NOT_FOUND(e.schema),Uf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Zu.isEmpty(u)||u.describe){let l=await tl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(jx,"describeSchema")});var En=m((bse,EO)=>{var ek=Kn(),{callbackify:lO,promisify:tk}=require("util"),{getDatabases:_O}=(de(),re(Ne));EO.exports={setSchemaDataToGlobal:uO,getTableSchema:rk,getSystemSchema:sk,setSchemaDataToGlobalAsync:tk(uO)};var dO=Qn(),Ose=lO(dO.describeAll),Nse=lO(dO.describeTable);function uO(e){global.hdb_schema=_O(),e&&e()}a(uO,"setSchemaDataToGlobal");function rk(e,t,r){let s=_O()[e];if(!s)return r(`schema ${e} does not exist`);let n=s[t];return n?r(null,{schema:e,name:t,hash_attribute:n.primaryKey}):r(`table ${e}.${t} does not exist`)}a(rk,"getTableSchema");function sk(){return ek}a(sk,"getSystemSchema")});var Nr=m((Ise,SO)=>{"use strict";var sl=Of(),St=V(),nk=require("util"),nl=Fr(),ik=En(),fO=x(),{handleHDBError:zn,hdb_errors:ok}=W(),{HTTP_STATUS_CODES:Jn}=ok,ak=nk.promisify(ik.getTableSchema),ck="updated",hO="inserted",mO="upserted";SO.exports={insert:lk,update:_k,upsert:dk,validation:uk,flush:Ek};async function uk(e){if(St.isEmpty(e))throw new Error("invalid update parameters defined.");if(St.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(St.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ak(e.schema,e.table),r=sl(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&St.isEmptyOrZeroLength(c[s]))throw fO.error("a valid hash attribute must be provided with update record:",c),new Error("a valid hash attribute must be provided with update record");if(!St.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw fO.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!St.isEmpty(c[s])&&c[s]!==""&&n.has(St.autoCast(c[s]))&&(c.skip=!0),n.add(St.autoCast(c[s]));for(let u in c)i[u]=1}),i[s]=1,{schema_table:t,hashes:Array.from(n),attributes:Object.keys(i)}}a(uk,"validation");async function lk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.createRecords(e);return rl(hO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(lk,"insertData");async function _k(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.updateRecords(e);return St.isEmpty(s.existing_rows)?rl(ck,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):rl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(_k,"updateData");async function dk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=sl(e);if(t)throw zn(new Error,t.message,Jn.BAD_REQUEST);St.transformReq(e);let r=St.checkSchemaTableExist(e.schema,e.table);if(r)throw zn(new Error,r,Jn.BAD_REQUEST);let s=await nl.upsertRecords(e);return rl(mO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(dk,"upsertData");function rl(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===hO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===mO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(rl,"returnObject");function Ek(e){return St.transformReq(e),nl.flush(e.schema,e.table)}a(Ek,"flush")});var Mf=m((Cse,RO)=>{var fk=Pe(),Lf=require("joi"),{hdb_table:hk,hdb_database:pO}=rs(),TO={schema:pO,database:pO,table:hk},mk={date:Lf.date().iso().required()},Sk={timestamp:Lf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RO.exports=function(e,t){let r=t==="timestamp"?{...TO,...Sk}:{...TO,...mk},s=Lf.object(r);return fk.validateBySchema(e,s)}});var OO=m((Use,AO)=>{var pk=Pe(),Pf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),Rk=Pf.object({schema:gO,database:gO,table:Tk,hash_values:Pf.array().required(),ids:Pf.array()});AO.exports=function(e){return pk.validateBySchema(e,Rk)}});var bO=m((Dse,NO)=>{"use strict";var vf=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}},Bf=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}},Hf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};NO.exports={InsertObject:vf,NoSQLSeachObject:Bf,DeleteResponseObject:Hf}});var jn=m((Mse,UO)=>{"use strict";var IO=Mf(),gk=OO(),Xn=V(),yO=require("moment"),wO=x(),{promisify:Ak,callbackify:Ok}=require("util"),Zn=A(),Nk=En(),Ff=Ak(Nk.getTableSchema),qf=Fr(),{DeleteResponseObject:bk}=bO(),{handleHDBError:fn,hdb_errors:yk}=W(),{HDB_ERROR_MSGS:il,HTTP_STATUS_CODES:hn}=yk,Ik="records successfully deleted",wk=Ok(CO);UO.exports={delete:wk,deleteRecord:CO,deleteFilesBefore:Ck,deleteAuditLogsBefore:Uk};async function Ck(e){let t=IO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!yO(e.date,yO.ISO_8601).isValid())throw fn(new Error,il.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_DATE,!0);let s=Xn.checkSchemaTableExist(e.schema,e.table);if(s)throw fn(new Error,s,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,s,!0);let n=await qf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),wO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ck,"deleteFilesBefore");async function Uk(e){let t=IO(e,"timestamp");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),isNaN(e.timestamp))throw fn(new Error,il.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,il.INVALID_VALUE("Timestamp"),!0);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);let s=await qf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),wO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Uk,"deleteAuditLogsBefore");async function CO(e){e.ids&&(e.hash_values=e.ids);let t=gk(e);if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);Xn.transformReq(e);let r=Xn.checkSchemaTableExist(e.schema,e.table);if(r)throw fn(new Error,r,hn.NOT_FOUND,Zn.LOG_LEVELS.ERROR,r,!0);try{await Ff(e.schema,e.table);let s=await qf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ik}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new bk;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(CO,"deleteRecord")});var ol=m((vse,MO)=>{var Dk=require("crypto"),DO=9;function Lk(e){let t=Pk(DO),r=LO(e+t);return t+r}a(Lk,"createHash");function Mk(e,t){let r=e.substr(0,DO),s=r+LO(t+r);return e===s}a(Mk,"validateHash");function Pk(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(Pk,"generateSalt");function LO(e){return Dk.createHash("md5").update(e).digest("hex")}a(LO,"md5");MO.exports={hash:Lk,validate:Mk}});var vO=m((Hse,PO)=>{var Gf=Pe(),It={username:{presence:!0,format:"[\\w\\-\\_]+",exclusion:{within:["system"],message:"You cannot create tables within the system schema"}},password:{presence:!0},role:{presence:!0,format:"[\\w\\-\\_]+"},active:{presence:!0,inclusion:{within:[!0,!1],message:"must be a boolean"}}};function vk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Gf.validateObject(e,It)}a(vk,"addUserValidation");function Bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Bk,"alterUserValidation");function Hk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Gf.validateObject(e,It)}a(Hk,"dropUserValidation");PO.exports={addUserValidation:vk,alterUserValidation:Bk,dropUserValidation:Hk}});var Be=m((Gse,HO)=>{"use strict";var{platform:qse}=require("os"),Fk="nats-server.zip",xf="nats-server",qk=process.platform==="win32"?`${xf}.exe`:xf,kf="HDB",Gk=/^[^\s.,*>]+$/,BO="__request__",xk=a(e=>`${e}.${BO}`,"REQUEST_SUBJECT"),kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Vk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$k={HUB:"hub.pid",LEAF:"leaf.pid"},Yk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Kk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:kf,deliver_subject:"__HDB__.WORKQUEUE"},Wk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:kf,deliver_subject:"HDB.SCHEMAQUEUE"},Qk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:kf,deliver_subject:"HDB.USERQUEUE"},zk={SUCCESS:"success",ERROR:"error"},Jk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Xk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Zk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},jk={debug:"-D",trace:"-DVV"};HO.exports={NATS_SERVER_ZIP:Fk,NATS_SERVER_NAME:xf,NATS_BINARY_NAME:qk,PID_FILES:$k,NATS_CONFIG_FILES:Vk,SERVER_SUFFIX:Yk,WORK_QUEUE_CONSUMER_NAMES:Kk,SCHEMA_QUEUE_CONSUMER_NAMES:Wk,USER_QUEUE_CONSUMER_NAMES:Qk,NATS_TERM_CONSTRAINTS_RX:Gk,REQUEST_SUFFIX:BO,UPDATE_REMOTE_RESPONSE_STATUSES:zk,CLUSTER_STATUS_STATUSES:Jk,REQUEST_SUBJECT:xk,SUBJECT_PREFIXES:Xk,MSG_HEADERS:kk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:jk,LOG_LEVEL_HIERARCHY:Zk}});var qO=m((kse,FO)=>{"use strict";var al=A(),cl=class{static{a(this,"BaseLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Vf=class extends cl{static{a(this,"ExtendedLicense")}constructor(t=0,r=al.RAM_ALLOCATION_ENUM.DEFAULT,s=al.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};FO.exports={BaseLicense:cl,ExtendedLicense:Vf}});var Na=m(($se,YO)=>{"use strict";var ki=require("fs-extra"),GO=ol(),xO=require("crypto"),eV=require("moment"),tV=require("uuid").v4,wt=x(),Yf=require("path"),rV=V(),mn=A(),sV=qO().ExtendedLicense,xi="invalid license key format",nV="061183",iV="mofi25",oV="aes-256-cbc",aV=16,cV=32,kO=Q();kO.initSync();var $f;YO.exports={validateLicense:VO,generateFingerPrint:lV,licenseSearch:$O,getLicense:EV};function Kf(){return Yf.join(kO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Kf,"getLicenseDirPath");function uV(){let e=Kf();return Yf.join(e,mn.LICENSE_FILE_NAME)}a(uV,"getLicenseFilePath");function Wf(){let e=Kf();return Yf.join(e,mn.REG_KEY_FILE_NAME)}a(Wf,"getFingerPrintFilePath");async function lV(){let e=Wf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await _V();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(lV,"generateFingerPrint");async function _V(){let e=tV(),t=GO.hash(e),r=Wf();try{await ki.mkdirp(Kf()),await ki.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(_V,"writeFingerprint");function VO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:mn.RAM_ALLOCATION_ENUM.DEFAULT,version:mn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Wf(),n=!1;try{n=ki.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=ki.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(iV),c=o[1];c=Buffer.concat([Buffer.from(c)],aV);let u=Buffer.concat([Buffer.from(i)],cV),l=xO.createDecipheriv(oV,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=dV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(xi),wt.error(xi),new Error(xi)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(xi),wt.error(xi),new Error(xi)}else r.exp_date=_;r.exp_date<eV().valueOf()&&(r.valid_date=!1),GO.validate(o[1],`${nV}${i}${t}`)||(r.valid_license=!1)}else r.valid_license=!1,r.valid_machine=!1;return r.valid_license&&r.valid_machine&&r.valid_date||wt.error("Invalid licence"),r}a(VO,"validateLicense");function dV(e,t){try{let r=xO.createDecipher("aes192",t),s=r.update(e,"hex","utf8");return s.trim(),s+=r.final("utf8"),s}catch{wt.warn("Check old license failed")}}a(dV,"checkOldLicense");function $O(){let e=new sV,t=[];try{t=ki.readFileSync(uV(),"utf-8").split(mn.NEW_LINE)}catch(r){r.code==="ENOENT"?wt.info("no license file found"):wt.error(`could not search for licenses due to: '${r.message}`)}for(let r=0;r<t.length;++r){let s=t[r];try{if(rV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=VO(n.license_key,n.company);i.valid_machine===!0&&i.valid_date===!0&&i.valid_machine===!0&&(e.exp_date=i.exp_date>e.exp_date?i.exp_date:e.exp_date,e.ram_allocation=i.ram_allocation,e.enterprise=!0)}catch(n){wt.error("There was an error parsing the license string."),wt.error(n),e.ram_allocation=mn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return $f=e,e}a($O,"licenseSearch");async function EV(){return $f||await $O(),$f}a(EV,"getLicense")});var br=m((zse,aN)=>{"use strict";var JO="username is required",XO="nothing to update, must supply active, role or password to update",ZO="password cannot be an empty string",jO="If role is specified, it cannot be empty.",eN="active must be true or false";aN.exports={addUser:AV,alterUser:OV,dropUser:bV,getSuperUser:CV,userInfo:yV,listUsers:ll,listUsersExternal:IV,setUsersToGlobal:$i,findAndValidateUser:oN,getClusterUser:UV,USERNAME_REQUIRED:JO,ALTERUSER_NOTHING_TO_UPDATE:XO,EMPTY_PASSWORD:ZO,EMPTY_ROLE:jO,ACTIVE_BOOLEAN:eN};var tN=Nr(),fV=jn(),zf=ol(),rN=vO(),sN=Or(),Jf=Gs(),or=V(),nN=require("validate.js"),ue=x(),{promisify:hV}=require("util"),Xf=qs(),KO=A(),WO=Be(),mV=Tr(),Kse=Q(),Wse=Na(),SV=Kn(),{table:Qse}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:pV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Qf,HDB_ERROR_MSGS:Vi}=pV,{UserEventMsg:Zf}=qr(),QO=require("lodash"),{_assignPackageExport:TV}=require("../../index");TV("getUser",oN);var iN={username:!0,active:!0,role:!0,password:!0},zO=new Map,ul=sN.searchByValue,RV=sN.searchByHash,gV=hV(fV.delete);async function AV(e){let t=nN.cleanAttributes(e,iN),r=rN.addUserValidation(t);if(r)throw ns(new Error,r.message,is.BAD_REQUEST,void 0,void 0,!0);let s={schema:"system",table:"hdb_role",search_attribute:"role",search_value:t.role,get_attributes:["id","permission","role"]},n;try{n=await ul(s),n=n&&Array.from(n)}catch(u){throw ue.error("There was an error searching for a role in add user"),ue.error(u),u}if(!n||n.length<1)throw ns(new Error,Vi.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,Vi.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Xf.encrypt(t.password)),t.password=zf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await tN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await $i()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,Vi.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Jf.signalUserChange(new Zf(process.pid)),`${c.username} successfully added`}a(AV,"addUser");async function OV(e){let t=nN.cleanAttributes(e,iN);if(or.isEmptyOrZeroLength(t.username))throw new Error(JO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(XO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(ZO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(eN);let r=NV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Xf.encrypt(t.password)),t.password=zf.hash(t.password)),t.role==="")throw new Error(jO);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 ul(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=Vi.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ns(new Error,c,is.CONFLICT,void 0,void 0,!0)}t.role=o[0].id}let s={operation:"update",schema:"system",table:"hdb_user",records:[t]},n;try{n=await tN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await $i()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Jf.signalUserChange(new Zf(process.pid)),n}a(OV,"alterUser");function NV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(NV,"isClusterUser");async function bV(e){try{let t=rN.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(or.isEmpty(global.hdb_users.get(e.username)))throw ns(new Error,Vi.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await gV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await $i()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Jf.signalUserChange(new Zf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(bV,"dropUser");async function yV(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 RV(r)}catch(n){throw ue.error("Got an error searching for a role."),ue.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw ue.error(r),r}return t}a(yV,"userInfo");async function IV(){let e;try{e=await ll()}catch(t){throw ue.error("Got an error listing users."),ue.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(IV,"listUsersExternal");async function ll(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await ul(e)}catch(o){throw ue.error("Got an error searching for roles."),ue.error(o),o}let r={};for(let o of t)r[o.id]=QO.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 ul(s)}catch(o){throw ue.error("Got an error searching for users."),ue.error(o),o}let i=new Map;for(let o of n)o=QO.cloneDeep(o),o.role=r[o.role],wV(o.role),i.set(o.username,o);return i}catch(e){throw ue.error("got an error listing users"),ue.error(e),or.errorizeMessage(e)}return null}a(ll,"listUsers");function wV(e){try{if(!e){ue.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(SV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){ue.error("Got an error trying to set system permissions."),ue.error(t)}}a(wV,"appendSystemTablesToRole");async function $i(){try{let e=await ll();global.hdb_users=e}catch(e){throw ue.error(e),e}}a($i,"setUsersToGlobal");async function oN(e,t,r=!0){global.hdb_users||await $i();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Qf.USER_INACTIVE,is.UNAUTHORIZED,void 0,void 0,!0);let n={active:s.active,username:s.username};if(s.refresh_token&&(n.refresh_token=s.refresh_token),s.role&&(n.role=s.role),r===!0){if(zO.get(t)===s.password)return n;if(zf.validate(s.password,t))zO.set(t,s.password);else throw ns(new Error,Qf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(oN,"findAndValidateUser");async function CV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(CV,"getSuperUser");async function UV(){let e=await ll(),t=mV.getConfigFromFile(KO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===KO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=Xf.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+WO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+WO.SERVER_SUFFIX.ADMIN,r}a(UV,"getClusterUser")});var ya=m((jse,_N)=>{"use strict";var ei=x(),ar=A(),DV=rO(),Xse=En(),Zse=Qn(),LV=br(),{validateEvent:cN}=qr(),ba=Fr(),MV=require("process"),{resetDatabases:PV}=(de(),re(Ne)),vV={[ar.ITC_EVENT_TYPES.SCHEMA]:BV,[ar.ITC_EVENT_TYPES.USER]:lN};async function BV(e){let t=cN(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await DV(e.message),await HV(e.message)}a(BV,"schemaHandler");async function HV(e){try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=PV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(HV,"syncSchemaMetadata");var uN=[];async function lN(e){try{try{ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ba.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=cN(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${MV.pid} received user event:`,e),await LV.setUsersToGlobal();for(let r of uN)r()}catch(t){ei.error(t)}}a(lN,"userHandler");lN.addListener=function(e){uN.push(e)};_N.exports=vV});var qr=m((ine,EN)=>{"use strict";var tne=x(),jf=V(),FV=A(),{ITC_ERRORS:Ia}=rr(),{parentPort:rne,threadId:qV,isMainThread:GV,workerData:sne}=require("worker_threads"),{onMessageFromWorkers:xV,broadcast:nne,broadcastWithAcknowledgement:kV}=dt();EN.exports={sendItcEvent:VV,validateEvent:dN,SchemaEventMsg:$V,UserEventMsg:YV};var _l;xV(async(e,t)=>{_l=_l||ya(),dN(e),_l[e.type]&&await _l[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function VV(e){return!GV&&e.message&&(e.message.originator=qV),kV(e)}a(VV,"sendItcEvent");function dN(e){if(typeof e!="object")return Ia.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||jf.isEmpty(e.type))return Ia.MISSING_TYPE;if(!e.hasOwnProperty("message")||jf.isEmpty(e.message))return Ia.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||jf.isEmpty(e.message.originator))return Ia.MISSING_ORIGIN;if(FV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return Ia.INVALID_EVENT(e.type)}a(dN,"validateEvent");function $V(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($V,"SchemaEventMsg");function YV(e){this.originator=e}a(YV,"UserEventMsg")});var Gs=m((cne,SN)=>{"use strict";var fN=A(),ane=V(),dl=x(),hN=jA(),Yi,{sendItcEvent:mN}=qr();function KV(e){try{dl.trace("signalSchemaChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),mN(t)}catch(t){dl.error(t)}}a(KV,"signalSchemaChange");function WV(e){try{dl.trace("signalUserChange called with message:",e),Yi=Yi||ya();let t=new hN(fN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),mN(t)}catch(t){dl.error(t)}}a(WV,"signalUserChange");SN.exports={signalSchemaChange:KV,signalUserChange:WV}});var El=m((lne,TN)=>{"use strict";var pN=V(),QV=A(),zV=x(),JV=zu(),XV=Qu(),ZV=Gs(),{SchemaEventMsg:jV}=qr(),e$="already exists in";TN.exports=t$;async function t$(e,t,r){if(pN.isEmptyOrZeroLength(r))return r;let s=[];pN.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 r$(e,t.schema,t.name,i)})),n}a(t$,"lmdbCheckForNewAttributes");async function r$(e,t,r,s){let n=new XV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await s$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(e$))zV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(r$,"createNewAttribute");async function s$(e){let t;return t=await JV(e),ZV.signalSchemaChange(new jV(process.pid,QV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(s$,"createAttribute")});var Ki=m((dne,RN)=>{"use strict";var eh=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}};RN.exports=eh});var AN=m((fne,gN)=>{"use strict";var n$=Ki(),i$=A().OPERATIONS_ENUM,th=class extends n${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(i$.INSERT,r,s,n,i),this.records=t}};gN.exports=th});var NN=m((mne,ON)=>{"use strict";var o$=Ki(),a$=A().OPERATIONS_ENUM,rh=class extends o${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(a$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ON.exports=rh});var yN=m((pne,bN)=>{"use strict";var c$=Ki(),u$=A().OPERATIONS_ENUM,sh=class extends c${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(u$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};bN.exports=sh});var wN=m((Rne,IN)=>{"use strict";var l$=Ki(),_$=A().OPERATIONS_ENUM,nh=class extends l${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(_$.DELETE,s,n,t,i),this.original_records=r}};IN.exports=nh});var wa=m((One,LN)=>{"use strict";var Ane=require("path"),CN=ye(),d$=AN(),E$=NN(),f$=yN(),h$=wN(),Wi=xe(),UN=V(),{CONFIG_PARAMS:m$}=A(),DN=Q();DN.initSync();var fl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:S$}=we();LN.exports=p$;async function p$(e,t){if(DN.get(m$.LOGGING_AUDITLOG)===!1)return;let r=S$(e.schema,e.table),s=await CN.openEnvironment(r,e.table,!0),n=T$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){CN.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),UN.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(p$,"writeTransaction");function T$(e,t){let r=UN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===fl.INSERT)return new d$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPDATE)return new E$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.UPSERT)return new f$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===fl.DELETE)return new h$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(T$,"createTransactionObject")});var ih=m((yne,MN)=>{"use strict";var R$=Sa(),bne=pa(),Ca=A(),g$=Aa(),A$=Fi().insertRecords,O$=ye(),N$=x(),b$=El(),{getSchemaPath:y$}=we(),I$=wa();MN.exports=w$;async function w$(e){try{let{schema_table:t,attributes:r}=R$(e);g$(e,r,t.hash_attribute),e.schema!==Ca.SYSTEM_SCHEMA_NAME&&(r.includes(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ca.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await b$(e.hdb_auth_header,t,r),n=y$(e.schema,e.table),i=await O$.openEnvironment(n,e.table),o=await A$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await I$(e,o)}catch(c){N$.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(w$,"lmdbCreateRecords")});var BN=m((wne,vN)=>{"use strict";var PN=A(),C$=ih(),U$=pa(),D$=require("fs-extra"),{getSchemaPath:L$}=we();vN.exports=M$;async function M$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new U$(PN.SYSTEM_SCHEMA_NAME,PN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await C$(r),await D$.mkdirp(L$(e.schema))}a(M$,"lmdbCreateSchema")});var FN=m((Une,HN)=>{"use strict";var oh=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=oh});var kN=m((vne,xN)=>{"use strict";var qN=ye(),ah=Ht(),ch=rr().LMDB_ERRORS_ENUM,P$=xe(),GN=x(),Lne=V(),v$=require("lmdb"),B$=FN(),H$=A(),{OVERFLOW_MARKER:Mne,MAX_SEARCH_KEY_LENGTH:Pne}=P$,F$=H$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q$(e,t,r,s){if(ah.validateEnv(e),t===void 0)throw new Error(ch.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(ch.IDS_REQUIRED):new Error(ch.IDS_MUST_BE_ITERABLE);try{let n=qN.listDBIs(e);qN.initializeDBIs(e,t,n);let i=new B$,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[F$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,v$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let p=0;p<n.length;p++){let R=n[p];if(!h.hasOwnProperty(R)||R===t)continue;let O=e.dbis[R],k=h[R];if(k!=null)try{let $=ah.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{GN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){GN.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=ah.getNextMonotonicTime(),i}catch(n){throw n}}a(q$,"deleteRecords");xN.exports={deleteRecords:q$}});var Ua=m((Hne,$N)=>{"use strict";var Qi=V(),G$=kN(),x$=ye(),{getSchemaPath:k$}=we(),V$=wa(),$$=x();$N.exports=Y$;async function Y$(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 VN([],[]);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=k$(e.schema,e.table),i=await x$.openEnvironment(n,e.table),o=await G$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await V$(e,o)}catch(c){$$.error(`unable to write transaction due to ${c.message}`)}return VN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(Y$,"lmdbDeleteRecords");function VN(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(VN,"createDeleteResponse")});var lh=m((Gne,YN)=>{"use strict";var K$=A(),qne=Ht();function uh(e,t){let r=Object.create(null);if(t.length===1&&K$.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(uh,"parseRow");function W$(e,t,r,s){let n=uh(r,e);s.push(n)}a(W$,"searchAll");function Q$(e,t,r,s){let n=uh(r,e);s[t]=n}a(Q$,"searchAllToMap");function z$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(z$,"iterateDBI");function ti(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ti,"pushResults");function J$(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(J$,"endsWith");function X$(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(X$,"contains");function Z$(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(Z$,"greaterThanCompare");function j$(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(j$,"greaterThanEqualCompare");function eY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(eY,"lessThanCompare");function tY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(tY,"lessThanEqualCompare");YN.exports={parseRow:uh,searchAll:W$,searchAllToMap:Q$,iterateDBI:z$,endsWith:J$,contains:X$,greaterThanCompare:Z$,greaterThanEqualCompare:j$,lessThanCompare:eY,lessThanEqualCompare:tY,pushResults:ti}});var zi=m((Yne,ZN)=>{"use strict";var Sn=ye(),kne=x(),cr=Ht(),hl=xe(),ke=rr().LMDB_ERRORS_ENUM,Vne=V(),rY=A(),ml=lh(),{parseRow:sY}=ml,$ne=require("lmdb"),{OVERFLOW_MARKER:KN,MAX_SEARCH_KEY_LENGTH:nY}=hl;function WN(e,t,r,s=!1,n=void 0,i=void 0){return ri(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(WN,"iterateFullIndex");function Da(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ri(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Da,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[hl.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Sn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ri,"setupTransaction");function QN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(KN)){if(!n)if(r)n=Sn.openDBI(e,r);else{let u=Sn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Sn.openDBI(e,u[l]),!n[hl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(QN,"getOverflowCheck");function iY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Sl(r),r=La(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>sY(l.value,r))))}a(iY,"searchAll");function oY(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Sl(r),r=La(e.database||e,r);let o=new Map;for(let{key:c,value:u}of WN(e,t,t,s,n,i))o.set(c,ml.parseRow(u,r));return o}a(oY,"searchAllToMap");function aY(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=WN(e,void 0,t,r,s,n),c=o.transaction,u=QN(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(aY,"iterateDBI");function cY(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(cY,"countAll");function uY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,t,r,(c,u,l,_)=>(s=cr.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(uY,"equals");function lY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(lY,"count");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=cr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(_Y,"startsWith");function dY(e,t,r,s,n=!1,i=void 0,o=void 0){return zN(e,t,r,s,n,i,o,!0)}a(dY,"endsWith");function zN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return pn(e,r,s),ri(e,null,r,(u,l,_,d)=>{let E=QN(_,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(KN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[hl.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(T=>({key:f,value:T})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(zN,"contains");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!0,!1)}a(EY,"greaterThan");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Da(e,t,r,s,u,n,i,o,!1,!1)}a(fY,"greaterThanEqual");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!0)}a(hY,"lessThan");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){pn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Da(e,t,r,u,s,n,i,o,!1,!1)}a(mY,"lessThanEqual");function SY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Da(e,t,r,s,n,i,o,c)}a(SY,"between");function pY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),r=La(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=ml.parseRow(c,r)),o}a(pY,"searchByHash");function TY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(TY,"checkHashExists");function RY(e,t,r,s,n=[]){return XN(e,t,r,s,n),JN(e,t,r,s,n).map(i=>i[1])}a(RY,"batchSearchByHash");function gY(e,t,r,s,n=[]){XN(e,t,r,s,n);let i=new Map;for(let[o,c]of JN(e,t,r,s,n))i.set(o,c);return i}a(gY,"batchSearchByHashToMap");function JN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=La(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(JN,"batchHashSearch");function XN(e,t,r,s,n){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Sl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(XN,"initializeBatchSearchByHash");function Sl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Sl,"validateFetchAttributes");function pn(e,t,r){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>nY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function La(e,t){return t.length===1&&rY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(La,"setGetWholeRowAttributes");ZN.exports={searchAll:iY,searchAllToMap:oY,count:lY,countAll:cY,equals:uY,startsWith:_Y,endsWith:dY,contains:zN,searchByHash:pY,setGetWholeRowAttributes:La,batchSearchByHash:RY,batchSearchByHashToMap:gY,checkHashExists:TY,iterateDBI:aY,greaterThan:EY,greaterThanEqual:fY,lessThan:hY,lessThanEqual:mY,between:SY}});var Ji=m((Wne,sb)=>{var jN=require("lodash"),eb=Pe(),Ce=require("joi"),AY=V(),{hdb_schema_table:pl,checkValidTable:tb,hdb_table:rb,hdb_database:Tl}=rs(),{handleHDBError:OY,hdb_errors:NY}=W(),{getDatabases:bY}=(de(),re(Ne)),{HTTP_STATUS_CODES:yY}=NY,IY=Ce.object({database:Tl,schema:Tl,table:rb,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)}),wY=Ce.object({database:Tl,schema:Tl,table:rb,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()});sb.exports=function(e,t){let r=null;switch(t){case"value":r=eb.validateBySchema(e,IY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(tb("database",e.schema)),i(tb("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=eb.validateBySchema(e,wY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=AY.checkGlobalSchemaTable(e.schema,e.table);if(n)return OY(new Error,n,yY.NOT_FOUND);let o=bY()[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=jN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!jN.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 _h=m((zne,nb)=>{"use strict";var CY=ye(),UY=Ji(),{getSchemaPath:DY}=we();nb.exports=LY;function LY(e){let t=UY(e,"hashes");if(t)throw t;let r=DY(e.schema,e.table);return CY.openEnvironment(r,e.table)}a(LY,"initialize")});var dh=m((Xne,ib)=>{"use strict";var MY=zi(),PY=_h();ib.exports=vY;async function vY(e){let t=await PY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return MY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(vY,"lmdbGetDataByHash")});var Xi=m((jne,ob)=>{"use strict";var Eh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ob.exports=Eh});var cb=m((rie,ab)=>{"use strict";var tie=Xi(),BY=zi(),HY=_h();ab.exports=FY;async function FY(e){let t=await HY(e),r=global.hdb_schema[e.schema][e.table];return BY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(FY,"lmdbSearchByHash")});var os=m((nie,ub)=>{"use strict";var fh=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=_}};ub.exports=fh});var Rl=m((oie,hb)=>{"use strict";var Ct=zi(),qY=ye(),GY=V(),ie=xe(),si=A(),xY=Kn(),lb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:kY}=we(),xs=si.SEARCH_WILDCARDS;async function VY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=xY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=fb(e,s.hash_attribute,r,t);return db(e,n,s.hash_attribute,r)}a(VY,"prepSearch");async function db(e,t,r,s){let n=kY(e.schema,e.table),i=await qY.openEnvironment(n,e.table),o=Eb(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($Y(e,r)===!1){let _=e.search_attribute;if(_===r)return s?_b(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?_b(o,d):o.map(d)}let l=e.search_attribute===r?o.map(_=>_.key):o.map(_=>_.value);return s===!0?Ct.batchSearchByHashToMap(c,r,e.get_attributes,l):Ct.batchSearchByHash(c,r,e.get_attributes,l)}a(db,"executeSearch");function Eb(e,t,r,s){let n,i=s;t.get_attributes.indexOf(s)<0&&(i=void 0);let{reverse:o,limit:c,offset:u}=t;switch(o=typeof o=="boolean"?o:!1,c=Number.isInteger(c)?c:void 0,u=Number.isInteger(u)?u:void 0,r){case ie.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.ENDS_WITH:case ie.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.STARTS_WITH:case ie.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case ie.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case ie.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN:case ie.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.GREATER_THAN_EQUAL:case ie.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN:case ie.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case ie.SEARCH_TYPES.LESS_THAN_EQUAL:case ie.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(Eb,"searchByType");function _b(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(_b,"createMapFromIterable");function $Y(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($Y,"checkToFetchMore");function fb(e,t,r,s){if(GY.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(lb.UNKNOWN_SEARCH_TYPE)}else switch(s){case si.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case si.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case si.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case si.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case si.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lb.UNKNOWN_SEARCH_TYPE)}}a(fb,"createSearchTypeFromSearchObject");hb.exports={executeSearch:db,createSearchTypeFromSearchObject:fb,prepSearch:VY,searchByType:Eb}});var Sb=m((uie,mb)=>{"use strict";var cie=os(),YY=Ji(),KY=V(),WY=A(),QY=Rl();mb.exports=zY;function zY(e,t){if(!KY.isEmpty(t)&&WY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=YY(e,"value");if(s)throw s;let n=!0;return QY.prepSearch(e,t,n)}a(zY,"lmdbGetDataByValue")});var Ma=m((die,pb)=>{"use strict";var _ie=os(),JY=Ji(),XY=V(),ZY=A(),jY=Rl();pb.exports=eK;async function eK(e,t){if(!XY.isEmpty(t)&&ZY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=JY(e,"value");if(s)throw s;return jY.prepSearch(e,t,!1)}a(eK,"lmdbSearchByValue")});var Rb=m((hie,Tb)=>{"use strict";var fie=xe(),hh=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}},mh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},Sh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Tb.exports={SearchByConditionsObject:hh,SearchCondition:mh,SortAttribute:Sh}});var bb=m((Tie,Nb)=>{"use strict";var Sie=Rb().SearchByConditionsObject,tK=os(),rK=Ji(),ph=zi(),gl=xe(),{Resource:pie}=(Zr(),re(HE)),Ob=Rl(),sK=lh(),nK=require("lodash"),{getSchemaPath:iK}=we(),gb=ye(),{handleHDBError:oK,hdb_errors:aK}=W(),{HTTP_STATUS_CODES:cK}=aK,uK=1e8;Nb.exports=lK;async function lK(e){let t=rK(e,"conditions");if(t)throw oK(t,t.message,cK.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=iK(e.schema,e.table),s=await gb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)gb.openDBI(s,l.search_attribute);let i=nK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===gl.SEARCH_TYPES.EQUALS?l.estimated_count=ph.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=uK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await Ab(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(Ob.filterByType),d=_.length,E=ph.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=>sK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await Ab(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=ph.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(lK,"lmdbSearchByConditions");async function Ab(e,t,r,s){let n=new tK(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,Ob.searchByType(e,n,i,s).map(o=>o.value)}a(Ab,"executeConditionSearch")});var Pa=m((gie,yb)=>{"use strict";var _K=A().OPERATIONS_ENUM,Th=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=_K.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};yb.exports=Th});var Rh=m((Oie,Pb)=>{"use strict";var Ub=os(),Db=Pa(),Lb=Ma(),Mb=Ua(),qt=A(),Ib=V(),wb=ye(),{getTransactionAuditStorePath:dK,getSchemaPath:EK}=we(),Cb=x();Pb.exports=fK;async function fK(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 hK(e),await mK(e);let t=EK(e.schema,e.table);try{await wb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=dK(e.schema,e.table);await wb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Cb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(fK,"lmdbDropTable");async function hK(e){let t=new Ub(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qt.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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Mb(n)}a(hK,"deleteAttributesFromSystem");async function mK(e){let t=new Ub(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qt.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 Db(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Mb(n)}catch(i){throw i}}a(mK,"dropTableFromSystem")});var Bb=m((bie,vb)=>{"use strict";var SK=require("fs-extra"),pK=os(),TK=Xi(),RK=Pa(),gK=Rh(),AK=Ua(),OK=dh(),NK=Ma(),ks=A(),{getSchemaPath:bK}=we(),{handleHDBError:yK,hdb_errors:IK}=W(),{HDB_ERROR_MSGS:wK,HTTP_STATUS_CODES:CK}=IK;vb.exports=UK;async function UK(e){let t;try{t=await DK(e.schema);let r=new pK(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 NK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await gK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new RK(ks.SYSTEM_SCHEMA_NAME,ks.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await AK(n);let i=bK(t);await SK.remove(i)}catch(r){throw r}}a(UK,"lmdbDropSchema");async function DK(e){let t=new TK(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 OK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw yK(new Error,wK.SCHEMA_NOT_FOUND(e),CK.NOT_FOUND,void 0,void 0,!0);return s}a(DK,"validateDropSchema")});var Ah=m((Iie,Hb)=>{"use strict";var gh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Hb.exports=gh});var qb=m((Uie,Fb)=>{"use strict";var LK=require("fs-extra"),Al=ye(),{getTransactionAuditStorePath:MK}=we(),Oh=xe(),Cie=Ah();Fb.exports=PK;async function PK(e){let t;try{let r=MK(e.schema,e.table);await LK.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,Oh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Al.createDBI(t,Oh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Al.createDBI(t,Oh.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(PK,"createTransactionsAuditEnvironment")});var Vb=m((Lie,kb)=>{"use strict";var Nh=A(),Gb=ye(),vK=Fi(),{getSystemSchemaPath:BK,getSchemaPath:HK}=we(),FK=Kn(),qK=zu(),bh=Qu(),GK=x(),xK=qb(),Ih=FK.hdb_table,xb=[];for(let e=0;e<Ih.attributes.length;e++)xb.push(Ih.attributes[e].attribute);kb.exports=kK;async function kK(e,t){let r=HK(t.schema,t.table),s=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new bh(t.schema,t.table,Nh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new bh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Gb.createEnvironment(r,t.table),e!==void 0){let o=await Gb.openEnvironment(BK(),Nh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await vK.insertRecords(o,Ih.hash_attribute,xb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await yh(s),await yh(n),await yh(i)}await xK(t)}catch(o){throw o}}a(kK,"lmdbCreateTable");async function yh(e){try{await qK(e)}catch(t){GK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(yh,"createAttribute")});var Yb=m((Pie,$b)=>{"use strict";var VK=Sa(),$K=Aa(),YK=El(),va=A(),KK=Fi().updateRecords,WK=ye(),{getSchemaPath:QK}=we(),zK=wa(),JK=x();$b.exports=XK;async function XK(e){try{let{schema_table:t,attributes:r}=VK(e);$K(e,r,t.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(r.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await YK(e.hdb_auth_header,t,r),n=QK(e.schema,e.table),i=await WK.openEnvironment(n,e.table),o=await KK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await zK(e,o)}catch(c){JK.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(XK,"lmdbUpdateRecords")});var Wb=m((Bie,Kb)=>{"use strict";var ZK=A().OPERATIONS_ENUM,wh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=ZK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Kb.exports=wh});var zb=m((qie,Qb)=>{"use strict";var Fie=Wb(),jK=Sa(),e1=Aa(),t1=El(),Ba=A(),r1=Fi().upsertRecords,s1=ye(),{getSchemaPath:n1}=we(),i1=wa(),o1=x(),{handleHDBError:a1,hdb_errors:c1}=W();Qb.exports=u1;async function u1(e){let t;try{t=jK(e)}catch(u){throw a1(u,u.message,c1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;e1(e,s,r.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(s.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await t1(e.hdb_auth_header,r,s),i=n1(e.schema,e.table),o=await s1.openEnvironment(i,e.table),c=await r1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await i1(e,c)}catch(u){o1.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(u1,"lmdbUpsertRecords")});var Xb=m((xie,Jb)=>{"use strict";var Ch=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Jb.exports=Ch});var jb=m((Vie,Zb)=>{"use strict";var Uh=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}};Zb.exports=Uh});var ry=m((Kie,ty)=>{"use strict";var Dh=ye(),{getTransactionAuditStorePath:l1}=we(),Yie=Xb(),Ha=xe(),_1=V(),ey=jb(),d1=require("util").promisify,E1=d1(setTimeout),f1=1e4,h1=100;ty.exports=m1;async function m1(e){let t=l1(e.schema,e.table),r=await Dh.openEnvironment(t,e.table,!0),s=Dh.listDBIs(r);Dh.initializeDBIs(r,Ha.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ey;do n=await S1(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 E1(h1);while(n.transactions_deleted>0);return i}a(m1,"deleteAuditLogsBefore");async function S1(e,t){let r=new ey;try{let s=e.dbis[Ha.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[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];_1.isEmpty(c)||(n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ha.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>f1)break}return await n,r}catch(s){throw s}}a(S1,"deleteTransactions")});var ny=m((Qie,sy)=>{"use strict";var Lh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};sy.exports=Lh});var oy=m((Xie,iy)=>{"use strict";var p1=os(),T1=Pa(),Jie=ny(),as=A(),R1=V(),Mh=ye(),g1=Kn(),A1=Ma(),O1=Ua(),{getSchemaPath:N1}=we();iy.exports=b1;async function b1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=g1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await I1(e),n=N1(e.schema,e.table),i=await Mh.openEnvironment(n,e.table);return t===!0&&await y1(e,i,r.hash_attribute),Mh.dropDBI(i,e.attribute),s}a(b1,"lmdbDropAttribute");async function y1(e,t,r){let s=Mh.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(y1,"removeAttributeFromAllObjects");async function I1(e){let t=new p1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await A1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(R1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new T1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return O1(i)}a(I1,"dropAttributeFromSystem")});var dy=m((eoe,_y)=>{"use strict";var Ph=ye(),Zi=xe(),jie=Ht(),vh=A(),ay=V(),{getTransactionAuditStorePath:w1}=we(),C1=zi(),Ol=Ki(),U1=x();_y.exports=D1;async function D1(e){let t=w1(e.schema,e.table),r=await Ph.openEnvironment(t,e.table,!0),s=Ph.listDBIs(r);Ph.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cy(r,e.search_values);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,M1(r,e.search_values,n);case vh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return L1(r,e.search_values);default:return cy(r)}}a(D1,"readAuditLog");function cy(e,t=[0,Date.now()]){ay.isEmpty(t[0])&&(t[0]=0),ay.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(cy,"searchTransactionsByTimestamp");function L1(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,ly(e,i))}return Object.fromEntries(r)}a(L1,"searchTransactionsByUsername");function M1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=C1.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=ly(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);uy(u,"records",r,_,o),uy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(M1,"searchTransactionsByHashValues");function uy(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(uy,"loopRecords");function ly(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){U1.warn(i)}return r}catch(s){throw s}}a(ly,"batchSearchTransactions")});var fy=m((noe,Ey)=>{"use strict";var{getSchemaPath:roe}=we(),soe=ye(),{database:P1}=(de(),re(Ne));Ey.exports={writeTransaction:v1};async function v1(e,t,r){return P1({database:e,table:t}).transaction(r)}a(v1,"writeTransaction")});var py=m((ooe,Sy)=>{"use strict";var{getSchemaPath:hy}=we(),my=ye();Sy.exports={flush:B1,resetReadTxn:H1};async function B1(e,t){return(await my.openEnvironment(hy(e,t),t.toString())).flushed}a(B1,"flush");async function H1(e,t){try{(await my.openEnvironment(hy(e,t),t.toString())).resetReadTxn()}catch{}}a(H1,"resetReadTxn")});var Ay=m((coe,gy)=>{"use strict";var{Readable:F1}=require("stream"),{getDatabases:q1}=(de(),re(Ne)),{readSync:G1,openSync:x1,createReadStream:Ty}=require("fs"),{open:k1}=require("lmdb"),Ry=Fu(),V1=Gu(),{INTERNAL_DBIS_NAME:$1}=xe();gy.exports=K1;var Bh=32768,Y1=100;async function K1(e){let t=e.database||e.schema||"data",r=q1()[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=k1({noSync:!0,maxDbs:V1.MAX_DBS}),E,f=d.openDB($1,new Ry(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>R.startsWith?.(k+"/"))){f.put(R,O);let[,k]=R.split("/"),$=!k,U=new Ry(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:F,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,F),T++%Y1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let p=Ty(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=x1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Bh);G1(c,l,0,Bh);let _=o.useReadTransaction(),d=Ty(null,{fd:c,start:Bh}),E=new F1.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(K1,"getBackup")});var by=m((loe,Ny)=>{"use strict";var W1=x(),{handleHDBError:Q1}=W(),z1=aA(),J1=zu(),X1=ih(),Z1=BN(),j1=Ua(),eW=dh(),tW=cb(),rW=Sb(),sW=Ma(),nW=bb(),iW=Bb(),oW=Vb(),aW=Yb(),cW=zb(),uW=ry(),lW=Rh(),_W=oy(),dW=dy(),EW=fy(),Oy=py(),fW=Ay(),Hh=class extends z1{static{a(this,"LMDBBridge")}async searchByConditions(t){return nW(t)}async getDataByHash(t){return await eW(t)}async searchByHash(t){return await tW(t)}async getDataByValue(t,r){return await rW(t,r)}async searchByValue(t){return await sW(t)}async createSchema(t){return await Z1(t)}async dropSchema(t){return await iW(t)}async createTable(t,r){return await oW(t,r)}async dropTable(t){return await lW(t)}async createAttribute(t){return await J1(t)}async createRecords(t){return await X1(t)}async updateRecords(t){return await aW(t)}async upsertRecords(t){try{return await cW(t)}catch(r){throw Q1(r,null,null,W1.ERR,r)}}async deleteRecords(t){return await j1(t)}async dropAttribute(t){return await _W(t)}async deleteAuditLogsBefore(t){return await uW(t)}async readAuditLog(t){return await dW(t)}writeTransaction(t,r,s){return EW.writeTransaction(t,r,s)}flush(t,r){return Oy.flush(t,r)}resetReadTxn(t,r){return Oy.resetReadTxn(t,r)}getBackup(t){return fW(t)}};Ny.exports=Hh});var Py={};je(Py,{ResourceBridge:()=>Gh});function xh({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=cs(e),s=xh(e,r);if(!r)throw new Gr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ye(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Du(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||mW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,hW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function wy(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*Cy(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 Uy,Nl,Gr,Dy,Ly,kr,Fh,qh,My,hW,mW,SW,pW,yy,Gh,vy=Se(()=>{"use strict";Uy=C(by()),Nl=C(Ji()),Gr=C(W());de();Dy=C(Sa()),Ly=C(Aa()),kr=C(A()),Fh=C(Gs()),qh=C(qr()),My=C(V());$n();Lu();({HDB_ERROR_MSGS:hW}=Gr.hdb_errors),mW="data",SW=1e4,pW=10,Gh=class extends Uy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),yy=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=cs(t);if(!s)throw new Gr.ClientError(`Table ${t.table} not found`);let n=t.conditions.map(i=>({attribute:i.search_attribute,comparator:i.search_type,value:i.search_value}));return s.search({conditions:n,operator:t.operator?t.operator.toLowerCase():void 0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}st({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await cs(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=cs(t);if(await r.removeAttributes([t.attribute]),!r.schemaDefined){let s=t.attribute,n,i=a((o,c,u)=>(c=Object.assign({},c),delete c[s],r.primaryStore.ifVersion(o,u,()=>r.primaryStore.put(o,c,u)).then(l=>{if(!l){let{value:_,version:d}=r.primaryStore.getEntry(o);return i(o,_,d)}})),"deleteRecord");for(let{key:o,value:c,version:u}of r.primaryStore.getRange({start:!0,versions:!0}))n=i(o,c,u),await new Promise(l=>setImmediate(l));await n}return`successfully deleted ${t.schema}.${t.table}.${t.attribute}`}dropTable(t){cs(t).dropTable()}createSchema(t){return Fa({database:t.schema,table:null}),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await kh(t.schema),Fh.signalSchemaChange(new qh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.DROP_SCHEMA,t.schema))}async updateRecords(t){return t.requires_existing=!0,this.upsertRecords(t)}async createRecords(t){return t.requires_no_existing=!0,yy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Dy.default)(t);(0,Ly.default)(t,s,r.primaryKey);let n,i=xr()[t.schema][t.table],o={user:t.hdb_user};return Ye(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Du(d));for(let E in _)if(Object.prototype.hasOwnProperty.call(_,E)){let f=_[E];if(typeof f=="function")try{let h=f([[d]]);Array.isArray(h)&&(f=h[0].func_val,_[E]=f)}catch(h){throw h.message+="Trying to set key "+E+" on object"+JSON.stringify(_),h}}if(d)for(let E in d)Object.prototype.hasOwnProperty.call(_,E)||(_[E]=d[E]);await i.put(_,o),u.push(_[i.primaryKey])}return{txn_time:c.timestamp,written_hashes:u,new_attributes:n,skipped_hashes:l}})}async deleteRecords(t){let r=xr()[t.schema][t.table],s={user:t.hdb_user};return Ye(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return wy(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,My.async_set_timeout)(pW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%SW===0&&await l();return u.length>0&&await l(),n?wy(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=cs(t);if(!n)throw new Gr.ClientError(`Table ${t.table} not found`);let i=t.search_value;i.includes?.("*")&&(i.startsWith("*")?i.endsWith("*")?i!=="*"&&(r="contains",i=i.slice(1,-1)):(r="ends_with",i=i.slice(1)):i.endsWith("*")&&(r="starts_with",i=i.slice(0,-1))),r===kr.VALUE_SEARCH_COMPARATORS.BETWEEN&&(i=[i,t.end_value]);let o=i==="*"?[]:[{attribute:t.search_attribute,value:i,comparator:r}];return n.search({conditions:o,allowFullScan:!0,limit:t.limit,offset:t.offset,reverse:t.reverse,select:xh(t,n)})}async getDataByValue(t,r){let s=new Map,n=cs(t);t.get_attributes&&!t.get_attributes.includes(n.primaryKey)&&t.get_attributes[0]!=="*"&&t.get_attributes.push(n.primaryKey);for await(let i of this.searchByValue(t,r))s.set(i[n.primaryKey],i);return s}resetReadTxn(t,r){cs({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return cs(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=cs(t),s={};switch(t.search_type){case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:for(let i of t.search_values)s[i]=(await r.getHistoryOfRecord(i)).map(o=>{let c=o.type;return c==="put"&&(c="upsert"),{operation:c,user_name:o.user,hash_values:[i],records:[o.value]}});return s;case kr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of Cy(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Cy(r,t.search_values?.[0],t.search_values?.[1])}}};a(xh,"getSelect");a(Iy,"getRecords");a(cs,"getTable");a(wy,"createDeleteResponse");a(Cy,"groupRecordsInHistory")});var Fr=m((moe,By)=>{"use strict";var{ResourceBridge:TW}=(vy(),re(Py)),RW=Q();RW.initSync();var bl;function gW(){return bl||(bl=new TW,bl)}a(gW,"getBridge");By.exports=gW()});var Gy=m((poe,qy)=>{"use strict";var Hy=require("lodash"),qa=require("mathjs"),AW=require("jsonata"),Fy=V();qy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hy.uniqWith(e,Hy.isEqual):e,searchJSON:OW,mad:Ga.bind(null,qa.mad),mean:Ga.bind(null,qa.mean),mode:Ga.bind(null,qa.mode),prod:Ga.bind(null,qa.prod),median:Ga.bind(null,qa.median)};function Ga(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(Ga,"aggregateFunction");function OW(e,t){if(typeof e!="string"||e.length===0)throw new Error("search json expression must be a non-empty string");let r="__"+e+"__";if(Fy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Fy.isEmpty(this.__ala__.res[r])){let s=AW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(OW,"searchJSON")});var ky=m((Roe,xy)=>{"use strict";var We=require("moment"),Vh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;xy.exports={current_date:()=>We().utc().format("YYYY-MM-DD"),current_time:()=>We().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return We(e).utc().format("YYYY");case"month":return We(e).utc().format("MM");case"day":return We(e).utc().format("DD");case"hour":return We(e).utc().format("HH");case"minute":return We(e).utc().format("mm");case"second":return We(e).utc().format("ss");case"millisecond":return We(e).utc().format("SSS");default:break}},date:e=>We(e).utc().format(Vh),date_format:(e,t)=>We(e).utc().format(t),date_add:(e,t,r)=>We(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>We(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=We(e).utc(),n=We(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>We().utc().valueOf(),get_server_time:()=>We().format(Vh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Vh)}});var Ky=m((goe,Yy)=>{"use strict";var NW=require("@turf/area"),bW=require("@turf/length"),yW=require("@turf/circle"),IW=require("@turf/difference"),wW=require("@turf/distance"),CW=require("@turf/boolean-contains"),UW=require("@turf/boolean-equal"),DW=require("@turf/boolean-disjoint"),LW=require("@turf/helpers"),Vy=A(),le=V();Yy.exports={geoArea:MW,geoLength:PW,geoCircle:vW,geoDifference:BW,geoDistance:$y,geoNear:HW,geoContains:FW,geoEqual:qW,geoCrosses:GW,geoConvert:xW};var $h="geo1 is required",Yh="geo2 is required";function MW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),NW.default(e)}a(MW,"geoArea");function PW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),bW.default(e,{units:t||"kilometers"})}a(PW,"geoLength");function vW(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)),yW.default(e,t,{units:r||"kilometers"})}a(vW,"geoCircle");function BW(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)),IW(e,t)}a(BW,"geoDifference");function $y(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)),wW.default(e,t,{units:r||"kilometers"})}a($y,"geoDistance");function HW(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 $y(e,t,s)<=r}a(HW,"geoNear");function FW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW.default(e,t)}a(FW,"geoContains");function qW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),UW.default(e,t)}a(qW,"geoEqual");function GW(e,t){if(le.isEmpty(e))throw new Error($h);if(le.isEmpty(e))throw new Error(Yh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!DW.default(e,t)}a(GW,"geoCrosses");function xW(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(Vy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Vy.GEO_CONVERSION_ENUM).join(",")}`);return LW[t](e,r)}a(xW,"geoConvert")});var yl=m((Ooe,Wy)=>{var ni=Gy(),ur=ky(),us=Ky();Wy.exports=e=>{e.aggr.mad=e.aggr.MAD=ni.mad,e.aggr.mean=e.aggr.MEAN=ni.mean,e.aggr.mode=e.aggr.MODE=ni.mode,e.aggr.prod=e.aggr.PROD=ni.prod,e.aggr.median=e.aggr.MEDIAN=ni.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ni.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ni.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var Xy=m((Noe,Jy)=>{"use strict";var xa=require("lodash"),pt=require("alasql");pt.options.cache=!1;var kW=yl(),Qy=require("clone"),Il=require("recursive-iterator"),se=x(),ne=V(),ji=Fr(),VW=A(),{hdb_errors:$W}=W(),{getDatabases:zy}=(de(),re(Ne)),YW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";kW(pt);var Kh=class{static{a(this,"SQLSearch")}constructor(t,r){if(ne.isEmpty(t))throw se.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ne.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ne.isEmptyOrZeroLength(s))return se.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw se.error("Error thrown from checkEmptySQL in SQLSearch class method search."),se.error(s),new Error(Vr)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw se.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),se.error(s),new Error(Vr)}if(Object.keys(this.data).length===0)return se.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw se.error("Error thrown from processJoins in SQLSearch class method search."),se.error(s),new Error(Vr)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw se.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),se.error(s),new Error(Vr)}try{return t=await this._finalSQL(),t}catch(s){throw se.error("Error thrown from finalSQL in SQLSearch class method search."),se.error(s),new Error(Vr)}}_getColumns(){let t=new 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(Qy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=xa.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=zy()[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 pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ne.isEmpty(s)&&ne.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ne.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ne.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){se.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new 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(VW.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&&xa.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Qy(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(YW)>-1&&this.tables.forEach(n=>{let i={columnid:zy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=xa.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ji.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await ji.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await ji.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ji.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=xa.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new 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=xa.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ji.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error($W.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),se.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await ji.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Jy.exports=Kh});var Or=m((yoe,Zy)=>{"use strict";var KW=iA();Zy.exports={searchByConditions:QW,searchByHash:zW,searchByValue:JW,search:XW};var Wh=Fr(),{transformReq:Qh}=V(),WW=Xy();async function QW(e){return Qh(e),Wh.searchByConditions(e)}a(QW,"searchByConditions");async function zW(e){Qh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Wh.searchByHash(e))r&&t.push(r);return t}a(zW,"searchByHash");async function JW(e){Qh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Wh.searchByValue(e))t.push(r);return t}a(JW,"searchByValue");function XW(e,t){try{let r=new KW(e);r.validate(),new WW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(XW,"search")});var wl=m((woe,jy)=>{"use strict";var ZW=Fr();jy.exports={writeTransaction:jW};function jW(e,t,r){return ZW.writeTransaction(e,t,r)}a(jW,"writeTransaction")});var sI=m((Doe,rI)=>{"use strict";var eQ=Or(),tQ=En(),eI=x(),rQ=Nr(),Uoe=wl(),sQ=require("clone"),Jh=require("alasql"),nQ=yl(),tI=require("util"),iQ=tI.promisify(tQ.getTableSchema),oQ=tI.promisify(eQ.search),aQ=A(),zh=V();nQ(Jh);rI.exports={update:uQ};var cQ="There was a problem performing this update. Please check the logs and try again.";async function uQ({statement:e,hdb_user:t}){let r=await iQ(e.table.databaseid,e.table.tableid),s=lQ(e.columns);zh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=sQ(n),c=zh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Jh.parse(u).statements[0],_=await oQ(l),d=_Q(s,_);return dQ(o,d,t)}a(uQ,"update");function lQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Jh.compile(`SELECT ${r.expression.toString()} AS [${aQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw eI.error(t),new Error(cQ)}}a(lQ,"createUpdateRecord");function _Q(e,t){return zh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(_Q,"buildUpdateRecords");async function dQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await rQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){eI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(dQ,"updateRecords")});var iI=m((voe,nI)=>{var EQ=require("alasql"),fQ=Or(),hQ=x(),mQ=Fr(),Zh=require("util"),Xh=V(),SQ=A(),pQ=En(),Moe=wl(),Poe=Nr(),TQ="record",RQ="successfully deleted",gQ=Zh.callbackify(bQ),AQ=Zh.promisify(fQ.search),OQ=Zh.promisify(pQ.getTableSchema);nI.exports={convertDelete:gQ};function NQ(e){return`${e.deleted_hashes.length} ${TQ}${e.deleted_hashes.length===1?"":"s"} ${RQ}`}a(NQ,"generateReturnMessage");async function bQ({statement:e,hdb_user:t}){let r=await OQ(e.table.databaseid,e.table.tableid);Xh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Xh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=EQ.parse(o).statements[0],u={operation:SQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await AQ(c);let l=await mQ.deleteRecords(u);return Xh.isEmptyOrZeroLength(l.message)&&(l.message=NQ(l)),delete l.txn_time,l}catch(l){throw hQ.error(l),l.hdb_code?l.message:l}}a(bQ,"convertDelete")});var lI=m((Hoe,uI)=>{"use strict";var yQ=Qn(),{hdb_errors:oI}=W(),{getDatabases:aI}=(de(),re(Ne));uI.exports={checkSchemaExists:cI,checkSchemaTableExists:IQ,schema_describe:yQ};async function cI(e){if(!aI()[e])return oI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(cI,"checkSchemaExists");async function IQ(e,t){let r=await cI(e);if(r)return r;if(!aI()[e][t])return oI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IQ,"checkSchemaTableExists")});var ka=m((qoe,wQ)=>{wQ.exports={name:"harperdb",version:"4.2.0-alpha.13",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Ml={};je(Ml,{addAnalyticsListener:()=>rm,recordAction:()=>ls,recordActionBinary:()=>eo,setAnalyticsEnabled:()=>CQ});function CQ(e){RI=e}function ls(e,t,r,s,n){if(!RI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Dl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Dl.set(i,o)),Ul||UQ()}function eo(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function rm(e){AI.push(e)}function UQ(){Ul=performance.now(),setTimeout(()=>{let e=performance.now()-Ul;Ul=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Dl)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p95:i[Math.floor(o*.95)],p90:i[Math.floor(o*.9)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:ii.threadId,...s});for(let n of AI)n(t);Dl=new Map,ii.parentPort?ii.parentPort.postMessage({type:gI,report:r}):NI({report:r})},tm).unref()}async function DQ(e,t=6e4){let r=sm(),s;for(let _ of r.primaryStore.getRange({start:Cl+"z",end:Cl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let F=b.count||1;b[P]=(b[P]*F+z*O)/(b.count=F+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await LQ()}for(let[_,d]of i)d.id=Cl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Cl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-_I,active:l-dI,time:c}),_I=u,dI=l}async function MQ(e,t){let r=sm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function sm(){return EI||(EI=st({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function vQ(){OI=!0,setInterval(async()=>{await DQ(tm,em),await MQ(PQ,tm)},em/2).unref()}function NI(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(fI+=s.mean*s.count);r.totalBytesProcessed=fI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(hI.get(t))}),hI.set(t,t.performance.eventLoopUtilization())),r.id=(0,pI.getNextMonotonicTime)(),sm().put(r),OI||vQ(),BQ&&(bI=FQ(r))}async function FQ(e){if(await bI,!Tn){let r=(0,Va.dirname)((0,SI.getLogFilePath)());try{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,jh.open)((0,Va.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>HQ){let r=Buffer.alloc(t);await Tn.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Tn.write(r,{position:0}),await Tn.truncate(r.length),t=r.length}await Tn.write(JSON.stringify(e)+`
6
+ `,t)}var ii,mI,SI,Va,jh,pI,Ll,TI,Dl,em,RI,Ul,tm,gI,AI,Cl,_I,dI,LQ,PQ,EI,OI,fI,hI,BQ,bI,Tn,HQ,oi=Se(()=>{ii=require("worker_threads"),mI=C(dt());de();SI=C(x()),Va=require("path"),jh=require("fs/promises"),pI=C(Ht()),Ll=C(Q()),TI=C(A());Jr();(0,Ll.initSync)();Dl=new Map,em=(0,Ll.get)(TI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,RI=em>0;a(CQ,"setAnalyticsEnabled");a(ls,"recordAction");tt.recordAnalytics=ls;a(eo,"recordActionBinary");Ul=0,tm=1e3,gI="analytics-report",AI=[];a(rm,"addAnalyticsListener");a(UQ,"sendAnalytics");Cl="sum-";a(DQ,"aggregation");_I=0,dI=0,LQ=a(()=>new Promise(setImmediate),"rest");a(MQ,"cleanup");PQ=36e5;a(sm,"getAnalyticsTable");(0,mI.setChildListenerByType)(gI,NI);a(vQ,"startScheduledTasks");fI=0,hI=new Map,BQ=!1;a(NI,"recordAnalytics");HQ=1e6;a(FQ,"logAnalytics")});var nt=m((joe,$I)=>{"use strict";var Tt=Q();Tt.initSync();var qQ=require("fs-extra"),GQ=require("semver"),Wa=require("path"),{monotonicFactory:xQ}=require("ulidx"),am=xQ(),kQ=require("util"),II=require("child_process"),VQ=kQ.promisify(II.exec),$Q=II.spawn,_e=Be(),Te=A(),Pl=V(),yr=x(),vl=qs(),YQ=wl(),$a=Tr(),{Encoder:KQ,decode:cm}=require("msgpackr"),wI=new KQ,{isEmpty:ai}=Pl,CI=br(),UI=12e10,WQ=48*36e11,QQ=5e9,{connect:zQ,StorageType:DI,RetentionPolicy:LI,AckPolicy:Bl,DeliverPolicy:Hl,DiscardPolicy:JQ,NatsConnection:zoe,JetStreamManager:Joe,JetStreamClient:Xoe,StringCodec:Zoe,JSONCodec:XQ,createInbox:um,headers:ZQ,ErrorCode:yI}=require("nats"),{PACKAGE_ROOT:jQ}=A(),ez=ka(),{recordAction:tz}=(oi(),re(Ml)),MI=XQ(),rz="clustering",sz=ez.engines[_e.NATS_SERVER_NAME],nz=Wa.join(jQ,"dependencies"),om=Wa.join(nz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),nm,im,Ya,to,ro;$I.exports={runCommand:PI,checkNATSServerInstalled:iz,createConnection:lm,getConnection:Fl,getJetStreamManager:Qa,getJetStream:vI,getNATSReferences:Gt,getServerList:az,createLocalStream:_m,listStreams:BI,deleteLocalStream:cz,getServerConfig:za,listRemoteStreams:uz,viewStream:lz,viewStreamIterator:_z,publishToStream:dz,createWorkQueueStream:Ez,addSourceToWorkStream:FI,request:hz,removeSourceFromWorkStream:GI,reloadNATS:dm,reloadNATSHub:mz,reloadNATSLeaf:Sz,extractServerName:qI,requestErrorHandler:pz,updateWorkStream:Tz,createLocalTableStream:kI,createTableStreams:Rz,purgeTableStream:VI,purgeSchemaTableStreams:gz,getStreamInfo:Az,updateLocalStreams:Nz,closeConnection:oz,getJsmServerName:Ja,addNatsMsgHeader:HI,updateIngestStreamConsumer:fz};async function PI(e,t=void 0){let{stdout:r,stderr:s}=await VQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}o(DI,"runCommand");async function ez(){try{await PQ.access(sm)}catch{return!1}let e=await DI(`${sm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return vQ.eq(t,ZQ)}o(ez,"checkNATSServerInstalled");async function om(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let a=await yI.getClusterUser();if(ai(a))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=a.username,r=a.decrypt_hash}Nr.trace("create nats connection called");let i=await $Q({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Nr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}o(om,"createConnection");async function tz(){us&&(await us.drain(),us=void 0,ea=void 0,ta=void 0,$o=void 0)}o(tz,"closeConnection");var us,$o;async function vl(){return $o||($o=om(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),us=await $o),us||$o}o(vl,"getConnection");async function Ko(){if(ea)return ea;ai(us)&&await vl();let{domain:e}=Wo(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ea=await us.jetstreamManager({domain:e}),ea}o(Ko,"getJetStreamManager");async function LI(){if(ta)return ta;ai(us)&&await vl();let{domain:e}=Wo(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ta=us.jetstream({domain:e}),ta}o(LI,"getJetStream");async function Gt(){let e=us||await vl(),t=ea||await Ko(),r=ta||await LI();return{connection:e,jsm:t,js:r}}o(Gt,"getNATSReferences");async function rz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await yI.getClusterUser(),n=await om(t,r,s),i=am(),a=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of a){let d=UI.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 Dl.async_set_timeout(e),await a.drain(),await n.close(),await l,c}o(rz,"getServerList");async function cm(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:wI.File,retention:CI.Limits,subjects:t,discard:YQ.Old,duplicate_window:II,max_msgs:n,max_bytes:i,max_age:s})}o(cm,"createLocalStream");async function MI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}o(MI,"listStreams");async function sz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}o(sz,"deleteLocalStream");async function nz(e){let{connection:t}=await Gt(),r=[],s=am(),n=t.subscribe(s),i=(async()=>{for await(let a of n)r.push(UI.decode(a.data))})();return await t.publish(`$JS.${e}.API.STREAM.LIST`,void 0,{reply:s}),await t.flush(),await n.drain(),await i,r}o(nz,"listRemoteStreams");async function iz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=nm(),a={durable_name:i,ack_policy:Ml.Explicit};t&&(a.deliver_policy=Pl.StartTime,a.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,a);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=im(_.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}o(iz,"viewStream");async function*az(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=nm(),a={durable_name:i,ack_policy:Ml.Explicit};t&&(a.deliver_policy=Pl.StartTime,a.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,a);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 _=im(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()}o(az,"viewStreamIterator");async function oz(e,t,r,s){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=PI(s,r);let{js:n}=await Gt(),i=await Qo(),a=`${e}.${i}`,c=s instanceof Uint8Array?s:bI.encode(s);try{Nr.trace(`publishToStream publishing to subject: ${a}`),JQ(c.length,"bytes-sent",e,s.operation,"replication"),await n.publish(a,c,{headers:r})}catch(u){if(u.code&&u.code.toString()==="503")return FI(async()=>{try{await n.publish(a,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Nr.trace(`publishToStream creating stream: ${t}`);let _=a.split(".");_[2]="*",await cm(t,[a]),await n.publish(a,c,{headers:r})}else throw u}});throw u}}o(oz,"publishToStream");function PI(e,t){t===void 0&&(t=WQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Dl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${nm()}`;t.append(_e.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(_e.MSG_HEADERS.ORIGIN)||t.append(_e.MSG_HEADERS.ORIGIN,r),t}o(PI,"addNatsMsgHeader");function Wo(e){e=e.toLowerCase();let t=Yo.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),XQ);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(rm)&&(rm={port:ko.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:ko.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Yo.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),rm;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(tm)&&(tm={port:ko.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:ko.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:ko.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Yo.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),tm;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}o(Wo,"getServerConfig");async function cz(e){let{jsm:t}=await Gt(),r=await Qo();try{await t.streams.add({name:e.stream_name,storage:wI.File,retention:CI.Limits,duplicate_window:II,max_age:kQ,max_bytes:VQ,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:Ml.Explicit,durable_name:e.durable_name,deliver_policy:Pl.All,max_ack_pending:1e4});else throw s}}o(cz,"createWorkQueueStream");async function uz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Nr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),Nr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Ml.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Pl.All,max_ack_pending:1e4}))}o(uz,"updateIngestStreamConsumer");async function vI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=BI(s.prefix),a=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Ll.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,S=n.config.sources.length;T<S;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===a)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:a,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)}o(vI,"addSourceToWorkStream");function BI(e){return e.split(".")[1]}o(BI,"extractServerName");async function HI(e,t,r){let{schema:s,table:n}=r,i=Ll.createNatsTableStreamName(s,n),{jsm:a}=await Gt(),c=await a.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 a.streams.update(t,c.config)}o(HI,"removeSourceFromWorkStream");async function lz(e,t,r=2e4,s=am()){if(!Dl.isObject(t))throw new Error("data param must be an object");let n=bI.encode(t),{connection:i}=await Gt(),a={timeout:r};s&&(a.reply=s,a.noMux=!0);let c=await i.request(e,n,a);return im(c.data)}o(lz,"request");function um(e){return new Promise(async(t,r)=>{let s=qQ(sm,["--signal",`reload=${e}`],{cwd:__dirname}),n,i;s.on("error",a=>{r(a)}),s.stdout.on("data",a=>{i+=a.toString()}),s.stderr.on("data",a=>{n+=a.toString()}),s.stderr.on("close",a=>{n&&r(n),t(i)})})}o(um,"reloadNATS");async function _z(){let{pid_file_path:e}=Wo(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await um(e)}o(_z,"reloadNATSHub");async function dz(){let{pid_file_path:e}=Wo(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await um(e)}o(dz,"reloadNATSLeaf");function Ez(e,t,r){let s;switch(e.code){case OI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case OI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}o(Ez,"requestErrorHandler");async function fz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await FI(async()=>{e.subscribe===!0?await vI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await HI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}o(fz,"updateWorkStream");function FI(e){return GQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}o(FI,"exclusiveLock");async function qI(e,t){let r=Ll.createNatsTableStreamName(e,t),s=await Qo(),n=pz(e,t,s);await cm(r,[n])}o(qI,"createLocalTableStream");async function hz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await qI(s,n)}}o(hz,"createTableStreams");async function GI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Ll.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}o(GI,"purgeTableStream");async function mz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await GI(e,t[r])}o(mz,"purgeSchemaTableStreams");async function Sz(e){return(await Ko()).streams.info(e)}o(Sz,"getStreamInfo");function pz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}o(pz,"createSubjectName");async function Qo(){if(Vo)return Vo;if(Vo=(await Ko())?.nc?.info?.server_name,Vo===void 0)throw new Error("Unable to get jetstream manager server name");return Vo}o(Qo,"getJsmServerName");async function Tz(){let e=await Ko(),t=await Qo(),r=await MI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let a=Rz(s),c=i.split(".");if(!(c[c.length-1]===t&&!a)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}o(Tz,"updateLocalStreams");function Rz(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}o(Rz,"updateStreamLimits")});var ql=m((Jae,YI)=>{"use strict";var ra=Vu(),sa=oI(),gz=q(),Az=require("uuid").v4,zae=require("clone"),Hl=Fs(),na=g(),Oz=require("util"),Tn=Fr(),{handleHDBError:xt,hdb_errors:Nz}=W(),{HDB_ERROR_MSGS:Bl,HTTP_STATUS_CODES:kt}=Nz,{SchemaEventMsg:Fl}=qr(),kI=rt(),{getDatabases:bz}=(de(),re(Ne)),{transformReq:ia}=x();YI.exports={createSchema:yz,createSchemaStructure:VI,createTable:Iz,createTableStructure:$I,createAttribute:Lz,dropSchema:wz,dropTable:Cz,dropAttribute:Uz,getBackup:Mz};async function yz(e){let t=await VI(e);return Hl.signalSchemaChange(new Fl(process.pid,e.operation,e.schema)),t}o(yz,"createSchema");async function VI(e){let t=ra.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ia(e),!await sa.checkSchemaExists(e.schema))throw xt(new Error,Bl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,na.LOG_LEVELS.ERROR,Bl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Tn.createSchema(e),`database '${e.schema}' successfully created`}o(VI,"createSchemaStructure");async function Iz(e){return ia(e),await $I(e)}o(Iz,"createTable");async function $I(e){let t=ra.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ra.validateTableResidence(e.residence),!await sa.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,Bl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,na.LOG_LEVELS.ERROR,Bl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Az(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Tn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Tn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}o($I,"createTableStructure");async function wz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=ra.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);ia(e);let n=await sa.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,na.LOG_LEVELS.ERROR,n,!0);let i=await sa.schema_describe.describeSchema({schema:e.schema}),a=Object.keys(global.hdb_schema[e.schema]);return await Tn.dropSchema(e),Hl.signalSchemaChange(new Fl(process.pid,e.operation,e.schema)),await kI.purgeSchemaTableStreams(e.schema,a),`successfully deleted '${e.schema}'`}o(wz,"dropSchema");async function Cz(e){let t=ra.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await sa.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);return await Tn.dropTable(e),await kI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}o(Cz,"dropTable");async function Uz(e){let t=ra.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ia(e);let r=await sa.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,na.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(na.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Tn.dropAttribute(e),Dz(e),Hl.signalSchemaChange(new Fl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw gz.error(`Got an error deleting attribute ${Oz.inspect(e)}.`),s}}o(Uz,"dropAttribute");function Dz(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)}o(Dz,"dropAttributeFromGlobal");async function Lz(e){ia(e);let t=bz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Tn.createAttribute(e),Hl.signalSchemaChange(new Fl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}o(Lz,"createAttribute");function Mz(e){return Tn.getBackup(e)}o(Mz,"getBackup")});var WI=m((Zae,KI)=>{"use strict";var{OPERATIONS_ENUM:Pz}=g(),lm=class{static{o(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Pz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};KI.exports=lm});var _m=m((toe,ZI)=>{"use strict";var vz=Fr(),eoe=WI(),Gl=x(),xl=g(),Bz=Q(),{handleHDBError:QI,hdb_errors:Hz}=W(),{HDB_ERROR_MSGS:zI,HTTP_STATUS_CODES:JI}=Hz,Fz=Object.values(xl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),XI="To use this operation audit log must be enabled in harperdb-config.yaml";ZI.exports=qz;async function qz(e){if(Gl.isEmpty(e.schema))throw new Error(zI.SCHEMA_REQUIRED_ERR);if(Gl.isEmpty(e.table))throw new Error(zI.TABLE_REQUIRED_ERR);if(!Bz.get(xl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw QI(new Error,XI,JI.BAD_REQUEST,xl.LOG_LEVELS.ERROR,XI,!0);let t=Gl.checkSchemaTableExist(e.schema,e.table);if(t)throw QI(new Error,t,JI.NOT_FOUND,xl.LOG_LEVELS.ERROR,t,!0);if(!Gl.isEmpty(e.search_type)&&Fz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await vz.readAuditLog(e)}o(qz,"readAuditLog")});var ew=m((soe,jI)=>{"use strict";var{OPERATIONS_ENUM:Gz}=g(),dm=class{static{o(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Gz.GET_BACKUP,this.schema=t,this.table=r}};jI.exports=dm});var sw=m((ooe,rw)=>{"use strict";var xz=Fr(),ioe=ew(),Em=x(),kz=g(),aoe=Q(),{handleHDBError:Vz,hdb_errors:$z}=W(),{HDB_ERROR_MSGS:tw,HTTP_STATUS_CODES:Yz}=$z;rw.exports=Kz;async function Kz(e){if(Em.isEmpty(e.schema))throw new Error(tw.SCHEMA_REQUIRED_ERR);if(Em.isEmpty(e.table))throw new Error(tw.TABLE_REQUIRED_ERR);let t=Em.checkSchemaTableExist(e.schema,e.table);if(t)throw Vz(new Error,t,Yz.NOT_FOUND,kz.LOG_LEVELS.ERROR,t,!0);return await xz.getBackup(read_audit_log_object)}o(Kz,"getBackup")});var uw=m((uoe,cw)=>{var Rn=require("validate.js"),iw=Pe(),aa=g(),{handleHDBError:Wz,hdb_errors:Qz}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:zz}=Qz,fm=o(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),Jz={STRUCTURE_USER:"structure_user"},nw=Object.values(aa.ROLE_TYPES_ENUM),Xz="attribute_permissions",Zz="attribute_name",{PERMS_CRUD_ENUM:oa}=aa,jz=[Xz,...Object.values(oa)],aw=[oa.READ,oa.INSERT,oa.UPDATE],eJ=[Zz,...aw];function tJ(e){let t=fm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,ow(e,t)}o(tJ,"addRoleValidation");function rJ(e){let t=fm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,ow(e,t)}o(rJ,"alterRoleValidation");function sJ(e){let t=fm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,iw.validateObject(e,t)}o(sJ,"dropRoleValidation");var nJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function ow(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let a=0,c=s.length;a<c;a++)nJ.includes(s[a])||n.push(s[a]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=iw.validateObject(e,t);if(i&&i.message.split(",").forEach(a=>{Qe(a,r)}),e.permission){let a=iJ(e);a&&Qe(a,r),nw.forEach(c=>{e.permission[c]&&!Rn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let a in e.permission)if(nw.indexOf(a)<0){if(a===Jz.STRUCTURE_USER){let u=e.permission[a];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(a),r);continue}let c=e.permission[a];if(!a||!global.hdb_schema[a]){Qe(Ve.SCHEMA_NOT_FOUND(a),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[a][u]){Qe(Ve.TABLE_NOT_FOUND(a,u),r);continue}if(Object.keys(l).forEach(_=>{jz.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,a,u)}),Object.values(oa).forEach(_=>{Rn.isDefined(l[_])?Rn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,a,u):Qe(Ve.TABLE_PERM_MISSING(_),r,a,u)}),Rn.isDefined(l.attribute_permissions)){if(!Rn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,a,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,a,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[a][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!eJ.includes(T)&&T!==oa.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,a,u)}),!Rn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,a,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,a,u);continue}aw.forEach(T=>{Rn.isDefined(f[T])?Rn.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,a,u):Qe(Ve.ATTR_PERM_MISSING(T,h),r,a,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=`${a}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,a,u)}}}}return aJ(r)}o(ow,"customValidate");cw.exports={addRoleValidation:tJ,alterRoleValidation:rJ,dropRoleValidation:sJ};function iJ(e){let{operation:t,permission:r}=e;if(t===aa.OPERATIONS_ENUM.ADD_ROLE||t===aa.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ve.SU_CU_ROLE_COMBINED_ERROR;{let a=r.super_user?aa.ROLE_TYPES_ENUM.SUPER_USER:aa.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(a)}}}return null}o(iJ,"validateNoSUPerms");function aJ(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return Wz(new Error,s,zz.BAD_REQUEST)}else return null}o(aJ,"generateRolePermResponse");function Qe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}o(Qe,"addPermError")});var Rm=m((_oe,Ew)=>{"use strict";var lw=Ar(),_w=gr(),oJ=Zn(),mm=uw(),Sm=Fs(),cJ=require("uuid").v4,uJ=require("util"),kl=g(),lJ=x(),pm=_w.searchByValue,_J=_w.searchByHash,dJ=uJ.promisify(oJ.delete),EJ=is(),fJ=Ji(),{hdb_errors:hJ,handleHDBError:ca}=W(),{HDB_ERROR_MSGS:dw,HTTP_STATUS_CODES:Vl}=hJ,{UserEventMsg:Tm}=qr();Ew.exports={addRole:mJ,alterRole:SJ,dropRole:pJ,listRoles:TJ};function hm(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}o(hm,"scrubRoleDetails");async function mJ(e){let t=mm.addRoleValidation(e);if(t)throw t;e=hm(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 pm(r)||[])}catch(i){throw ca(i)}if(s&&s.length>0)throw ca(new Error,dw.ROLE_ALREADY_EXISTS(e.role),Vl.CONFLICT,void 0,void 0,!0);e.id||(e.id=cJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await lw.insert(n),Sm.signalUserChange(new Tm(process.pid)),e=hm(e),e}o(mJ,"addRole");async function SJ(e){let t=mm.alterRoleValidation(e);if(t)throw t;e=hm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await lw.update(r)}catch(n){throw ca(n)}if(s&&s?.message==="updated 0 of 1 records")throw ca(new Error,"Invalid role id",Vl.BAD_REQUEST,void 0,void 0,!0);return await Sm.signalUserChange(new Tm(process.pid)),e}o(SJ,"alterRole");async function pJ(e){let t=mm.dropRoleValidation(e);if(t)throw ca(new Error,t,Vl.BAD_REQUEST,void 0,void 0,!0);let r=new fJ(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await _J(r));if(s.length===0)throw ca(new Error,dw.ROLE_NOT_FOUND,Vl.NOT_FOUND,void 0,void 0,!0);let n=new EJ(kl.SYSTEM_SCHEMA_NAME,kl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await pm(n)),a=!1;if(lJ.isEmptyOrZeroLength(i)===!1){for(let u=0;u<i.length;u++)if(i[u].active===!0){a=!0;break}}if(a===!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 dJ(c),Sm.signalUserChange(new Tm(process.pid)),`${s[0].role} successfully deleted`}o(pJ,"dropRole");async function TJ(){return pm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}o(TJ,"listRoles")});var Sw=m((Eoe,mw)=>{"use strict";var RJ=Q(),gn=require("joi"),gJ=Pe(),fw=require("moment"),AJ=require("fs-extra"),gm=require("path"),OJ=require("lodash"),zo=g(),{LOG_LEVELS:oi}=g(),NJ="YYYY-MM-DD hh:mm:ss",bJ=gm.resolve(__dirname,"../logs");mw.exports=function(e){return gJ.validateBySchema(e,yJ)};var yJ=gn.object({from:gn.custom(hw),until:gn.custom(hw),level:gn.valid(oi.NOTIFY,oi.FATAL,oi.ERROR,oi.WARN,oi.INFO,oi.DEBUG,oi.TRACE),order:gn.valid("asc","desc"),limit:gn.number().min(1),start:gn.number().min(0),log_name:gn.custom(IJ)});function hw(e,t){if(fw(e,fw.ISO_8601).format(NJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}o(hw,"validateDatetime");function IJ(e,t){if(OJ.invert(zo.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=RJ.get(zo.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?zo.LOG_NAMES.HDB:e,i=n===zo.LOG_NAMES.INSTALL?gm.join(bJ,zo.LOG_NAMES.INSTALL):gm.join(s,n);return AJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}o(IJ,"validateReadLogPath")});var Om=m((hoe,pw)=>{"use strict";var $l=g(),wJ=q(),CJ=Q(),UJ=Sw(),Am=require("path"),DJ=require("fs-extra"),{once:LJ}=require("events"),{handleHDBError:MJ,hdb_errors:PJ}=W(),{PACKAGE_ROOT:vJ}=g(),BJ=Am.join(vJ,"logs"),HJ=1e3;pw.exports=FJ;async function FJ(e){let t=UJ(e);if(t)throw MJ(t,t.message,PJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=CJ.get($l.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?$l.LOG_NAMES.HDB:e.log_name,n=s===$l.LOG_NAMES.INSTALL?Am.join(BJ,$l.LOG_NAMES.INSTALL):Am.join(r,s),i=DJ.createReadStream(n);i.on("error",A=>{wJ.error(A)});let a=e.level!==void 0,c=a?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,_=e.until!==void 0,d=_?new Date(e.until):void 0,E=e.limit===void 0?HJ:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,T=h+E,S=0,y=[],O="",H;i.on("data",A=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;A=O+A;let G=0,k;for(;(k=w.exec(A))&&!i.destroyed;){H&&(H.message=A.slice(G,k.index),Y(H));let[X,ge,ct]=k,Di=ct.split("] ["),Ga=Di[0],Hn=Di[1];Di.splice(0,2),H={timestamp:ge,thread:Ga,level:Hn,tags:Di,message:""},G=k.index+X.length}O=A.slice(G)}),i.on("end",A=>{i.destroyed||H&&(H.message=O.trim(),Y(H))}),i.resume();function Y(A){let w,G,k;switch(!0){case(a&&u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),A.level===c&&w>=G&&w<=k&&S<h?S++:A.level===c&&w>=G&&w<=k&&(An(A,f,y),S++,S===T&&i.destroy());break;case(a&&u):w=new Date(A.timestamp),G=new Date(l),A.level===c&&w>=G&&S<h?S++:A.level===c&&w>=G&&(An(A,f,y),S++,S===T&&i.destroy());break;case(a&&_):w=new Date(A.timestamp),k=new Date(d),A.level===c&&w<=k&&S<h?S++:A.level===c&&w<=k&&(An(A,f,y),S++,S===T&&i.destroy());break;case(u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),w>=G&&w<=k&&S<h?S++:w>=G&&w<=k&&(An(A,f,y),S++,S===T&&i.destroy());break;case a:A.level===c&&S<h?S++:A.level===c&&(An(A,f,y),S++,S===T&&i.destroy());break;case u:w=new Date(A.timestamp),G=new Date(l),w>=G&&S<h?S++:w>=G&&S>=h&&(An(A,f,y),S++,S===T&&i.destroy());break;case _:w=new Date(A.timestamp),k=new Date(d),w<=k&&S<h?S++:w<=k&&S>=h&&(An(A,f,y),S++,S===T&&i.destroy());break;default:S<h?S++:(An(A,f,y),S++,S===T&&i.destroy())}}return o(Y,"onLogMessage"),await LJ(i,"close"),y}o(FJ,"readLog");function An(e,t,r){t==="desc"?qJ(e,r):t==="asc"?GJ(e,r):r.push(e)}o(An,"pushLineToResult");function qJ(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)}o(qJ,"insertDescending");function GJ(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)}o(GJ,"insertAscending")});var Kl=m((Roe,Aw)=>{"use strict";var Nm=require("joi"),{string:Yl,boolean:Tw,date:xJ}=Nm.types(),kJ=Pe(),{validateSchemaExists:Soe,validateTableExists:poe,validateSchemaName:Toe}=ts(),VJ=g(),$J=Be(),Rw=Q();Rw.initSync();var YJ=Yl.invalid(Rw.get(VJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern($J.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(),gw={operation:Yl.valid("add_node","update_node"),node_name:YJ,subscriptions:Nm.array().items({table:Yl.optional(),schema:Yl.required(),subscribe:Tw.required(),publish:Tw.required().custom(WJ),start_time:xJ.iso()}).min(1).required()};function KJ(e){return kJ.validateBySchema(e,Nm.object(gw))}o(KJ,"addUpdateNodeValidator");function WJ(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`)}o(WJ,"checkForFalsy");Aw.exports={addUpdateNodeValidator:KJ,validation_schema:gw}});var Nw=m((Aoe,Ow)=>{var QJ=Pe(),zJ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Ow.exports=function(e){return QJ.validateObject(e,zJ)}});var ym=m((Ooe,bw)=>{"use strict";var JJ=g().OPERATIONS_ENUM,bm=class{static{o(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=JJ.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};bw.exports=bm});var Iw=m((boe,yw)=>{"use strict";var XJ={OPERATION:"operation",REFRESH:"refresh"},Im=class{static{o(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},wm=class{static{o(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};yw.exports={JWTTokens:Im,TOKEN_TYPE_ENUM:XJ,JWTRSAKeys:wm}});var Zo=m((Ioe,Dw)=>{"use strict";var Xo=require("jsonwebtoken"),Cm=require("fs-extra"),Um=x(),br=g(),{handleHDBError:Vt,hdb_errors:ZJ}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=ZJ,Jo=q(),ww=rl(),Mm=Or(),jJ=Ar().update,e2=ym(),t2=Fs(),{UserEventMsg:r2}=qr(),On=Q();On.initSync();var Dm=require("path"),{JWTTokens:s2,JWTRSAKeys:n2,TOKEN_TYPE_ENUM:Wl}=Iw(),i2=On.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?On.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",a2=On.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?On.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Ql="RS256",Lm;Dw.exports={createTokens:o2,validateOperationToken:u2,refreshOperationToken:c2,validateRefreshToken:Uw};async function o2(e){if(Um.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Um.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Um.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Mm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Jo.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await zl(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},a=await Cw(i,r.private_key,r.passphrase),c=await Xo.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:a2,algorithm:Ql,subject:Wl.REFRESH}),u=ww.hash(c),l=new e2(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await jJ(l)}catch(E){Jo.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return t2.signalUserChange(new r2(process.pid)),new s2(a,c)}o(o2,"createTokens");async function Cw(e,t,r){return await Xo.sign(e,{key:t,passphrase:r},{expiresIn:i2,algorithm:Ql,subject:Wl.OPERATION})}o(Cw,"signOperationToken");async function zl(){if(Lm===void 0)try{let e=Dm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Dm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Dm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Cm.readFile(e)).toString(),n=(await Cm.readFile(t)).toString(),i=(await Cm.readFile(r)).toString();Lm=new n2(i,n,s)}catch(e){throw Jo.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Lm}o(zl,"getJWTRSAKeys");async function c2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Uw(e.refresh_token);let t=await zl(),r=await Xo.decode(e.refresh_token);return{operation_token:await Cw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}o(c2,"refreshOperationToken");async function u2(e){try{let t=await zl(),r=await Xo.verify(e,t.public_key,{algorithms:Ql,subject:Wl.OPERATION});return await Mm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Jo.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}o(u2,"validateOperationToken");async function Uw(e){let t;try{let r=await zl(),s=await Xo.verify(e,r.public_key,{algorithms:Ql,subject:Wl.REFRESH});t=await Mm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Jo.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!ww.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}o(Uw,"validateRefreshToken")});var Pm=m((Uoe,Pw)=>{"use strict";var l2=Nw(),ua=require("passport"),_2=require("passport-local").Strategy,d2=require("passport-http").BasicStrategy,E2=require("util"),f2=Or(),Mw=E2.callbackify(f2.findAndValidateUser),Coe=rr(),h2=g(),Lw=Zo();ua.use(new _2(function(e,t,r){Mw(e,t,r)}));ua.use(new d2(function(e,t,r){Mw(e,t,r)}));ua.serializeUser(function(e,t){t(null,e)});ua.deserializeUser(function(e,t){t(null,e)});function m2(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let a=e.headers.authorization.split(" ");s=a[0],n=a[1]}function i(a,c){return a?r(a):c?r(null,c):r("Must login")}switch(o(i,"handleResponse"),s){case"Basic":ua.authenticate("basic",{session:!1},(a,c)=>{i(a,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===h2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Lw.validateRefreshToken(n).then(a=>{e.body.refresh_token=n,r(null,a)}).catch(a=>{r(a)}):Lw.validateOperationToken(n).then(a=>{r(null,a)}).catch(a=>{r(a)});break;default:ua.authenticate("local",{session:!1},function(a,c){i(a,c)})(e,t,r);break}}o(m2,"authorize");function S2(e,t){let r=l2(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 a=i[e.schema].tables[e.table].attribute_permissions;for(let c in a)e.attributes.indexOf(a[c].attribute_name)>-1&&!a[c][e.operation]&&(s.authorized=!1,s.messages.push(`Not authorized to ${e.operation} ${a[c].attribute_name} `))}return t(null,s)}o(S2,"checkPermissions");Pw.exports={authorize:m2,checkPermissions:S2}});var la=m((Loe,vw)=>{"use strict";var vm=class{static{o(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Bm=class{static{o(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};vw.exports={Node:vm,NodeSubscription:Bm}});var Hw=m((Poe,Bw)=>{"use strict";var p2=g().OPERATIONS_ENUM,Hm=class{static{o(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=p2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Bw.exports=Hm});var jo=m((Boe,Fw)=>{"use strict";var Fm=class{static{o(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},qm=class{static{o(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,a,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=a,this.attributes=c}};Fw.exports={RemotePayloadObject:Fm,RemotePayloadSubscription:qm}});var Gw=m((Foe,qw)=>{"use strict";var Gm=class{static{o(this,"TableSizeObject")}constructor(t,r,s=0,n=0,i=0,a=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=a}};qw.exports=Gm});var Vw=m((Voe,kw)=>{"use strict";var T2=Gw(),Goe=xe(),xw=ye(),R2=q(),{getSchemaPath:xoe,getTransactionAuditStorePath:koe}=we(),{getDatabases:g2}=(de(),re(Ne));kw.exports=A2;async function A2(e){let t=new T2;try{let r=g2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await xw.environmentDataSize(schema_path,e.name),a=await xw.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=a,t.transaction_log_record_count=n.entryCount}catch(r){R2.warn(`unable to stat table dbi due to ${r}`)}return t}o(A2,"lmdbGetTableSize")});var Yw=m((Yoe,$w)=>{"use strict";var xm=class{static{o(this,"SystemInformationObject")}constructor(t,r,s,n,i,a,c){this.system=t,this.time=r,this.cpu=s,this.memory=n,this.disk=i,this.network=a,this.harperdb_processes=c}};$w.exports=xm});var _a=m((zoe,zw)=>{"use strict";var O2=require("fs-extra"),N2=require("path"),Ut=require("systeminformation"),Nn=q(),b2=rt(),km=Be(),Xl=g(),y2=Vw(),Qw=Wn(),{getThreadInfo:Kw}=_t(),Zm=Q();Zm.initSync();var I2=Yw(),{openEnvironment:Woe}=ye(),{getSchemaPath:Qoe}=we(),{database:w2}=(de(),re(Ne)),Jl;zw.exports={getHDBProcessInfo:Km,getNetworkInfo:Qm,getDiskInfo:Wm,getMemoryInfo:Ym,getCPUInfo:$m,getTimeInfo:Vm,getSystemInformation:zm,systemInformation:C2,getTableSize:Jm,getMetrics:Xm};function Vm(){return Ut.time()}o(Vm,"getTimeInfo");async function $m(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:a,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:S,cpus:y,...O}=await Ut.currentLoad();return O.cpus=[],y.forEach(H=>{let{raw_load:Y,raw_load_idle:A,raw_load_irq:w,raw_load_nice:G,raw_load_system:k,raw_load_user:X,...ge}=H;O.cpus.push(ge)}),_.current_load=O,_}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}o($m,"getCPUInfo");async function Ym(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return Nn.error(`error in getMemoryInfo: ${e}`),{}}}o(Ym,"getMemoryInfo");async function Km(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await O2.readFile(N2.join(Zm.get(Xl.CONFIG_PARAMS.ROOTPATH),Xl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===Xl.NODE_ERROR_CODES.ENOENT)Nn.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 Nn.error(`error in getHDBProcessInfo: ${t}`),e}}o(Km,"getHDBProcessInfo");async function Wm(){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:a,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return Nn.error(`error in getDiskInfo: ${t}`),e}}o(Wm,"getDiskInfo");async function Qm(){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:a,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:a,...c}=s;e.stats.push(c)}),e}catch(t){return Nn.error(`error in getNetworkInfo: ${t}`),e}}o(Qm,"getNetworkInfo");async function zm(){if(Jl!==void 0)return Jl;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:a,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,Jl=e,Jl}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}o(zm,"getSystemInformation");async function Jm(){let e=[],t=await Qw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await y2(s));return e}o(Jm,"getTableSize");async function Xm(){let e=await Qw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let a=w2({database:r,table:n}).getStats();s[n]={puts:a.puts,deletes:a.deletes,txns:a.txns,pageFlushes:a.pageFlushes,writes:a.writes,pagesWritten:a.pagesWritten,timeDuringTxns:a.timeDuringTxns,timeStartTxns:a.timeStartTxns,timePageFlushes:a.timePageFlushes,timeSync:a.timeSync}}catch(i){Nn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}o(Xm,"getMetrics");async function Ww(){if(Zm.get(Xl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await b2.getNATSReferences(),r=await t.streams.info(km.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(km.WORK_QUEUE_CONSUMER_NAMES.stream_name,km.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}}o(Ww,"getNatsStreamInfo");async function C2(e){let t=new I2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await zm(),t.time=Vm(),t.cpu=await $m(),t.memory=await Ym(),t.disk=await Wm(),t.network=await Qm(),t.harperdb_processes=await Km(),t.table_size=await Jm(),t.metrics=await Xm(),t.threads=await Kw(),t.replication=await Ww(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await zm();break;case"time":t.time=Vm();break;case"cpu":t.cpu=await $m();break;case"memory":t.memory=await Ym();break;case"disk":t.disk=await Wm();break;case"network":t.network=await Qm();break;case"harperdb_processes":t.harperdb_processes=await Km();break;case"table_size":t.table_size=await Jm();break;case"database_metrics":case"metrics":t.metrics=await Xm();break;case"threads":t.threads=await Kw();break;case"replication":t.replication=await Ww();break;default:break}return t}o(C2,"systemInformation")});var jm=m((joe,Jw)=>{"use strict";var Xoe=require("fs-extra"),Zoe=q();Jw.exports={version:U2,printVersion:L2,nodeVersion:D2};var bn=Go();function U2(){if(bn)return bn.version}o(U2,"version");function D2(){if(bn&&bn.engines&&bn.engines["preferred-node"])return bn.engines["preferred-node"]}o(D2,"nodeVersion");function L2(){bn&&console.log(`HarperDB Version ${bn.version}`)}o(L2,"printVersion")});var xs=m((sce,eC)=>{"use strict";var M2=Ar(),eS=x(),P2=require("util"),ci=g(),Xw=Q();Xw.initSync();var v2=Pm(),Zw=gr(),{Node:tce,NodeSubscription:rce}=la(),B2=Ji(),H2=Hw(),{RemotePayloadObject:F2,RemotePayloadSubscription:q2}=jo(),{handleHDBError:G2,hdb_errors:x2}=W(),{HTTP_STATUS_CODES:k2,HDB_ERROR_MSGS:V2}=x2,$2=is(),Y2=_a(),K2=jm(),{getDatabases:W2}=(de(),re(Ne)),Q2=P2.promisify(v2.authorize),z2=Zw.searchByHash,J2=Zw.searchByValue;eC.exports={authHeaderToUser:X2,isEmpty:Z2,getNodeRecord:j2,upsertNodeRecord:e3,buildNodePayloads:t3,checkClusteringEnabled:r3,getAllNodeRecords:s3,getSystemInfo:n3,reverseSubscription:jw};async function X2(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Q2(t,null),e}o(X2,"authHeaderToUser");function Z2(e){return e==null}o(Z2,"isEmpty");async function j2(e){let t=new B2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return z2(t)}o(j2,"getNodeRecord");async function e3(e){let t=new H2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return M2.upsert(t)}o(e3,"upsertNodeRecord");function jw(e){if(eS.isEmpty(e.subscribe)||eS.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}o(jw,"reverseSubscription");function t3(e,t,r,s){let n=[];for(let i=0,a=e.length;i<a;i++){let c=e[i],{schema:u,table:l}=c,_=eS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=jw(c),f=W2()[u]?.[l],h=new q2(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new F2(r,t,n,s)}o(t3,"buildNodePayloads");function r3(){if(!Xw.get(ci.CONFIG_PARAMS.CLUSTERING_ENABLED))throw G2(new Error,V2.CLUSTERING_NOT_ENABLED,k2.BAD_REQUEST,void 0,void 0,!0)}o(r3,"checkClusteringEnabled");async function s3(){let e=new $2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await J2(e))}o(s3,"getAllNodeRecords");async function n3(){let e=await Y2.getSystemInformation();return{hdb_version:K2.version(),node_version:e.node_version,platform:e.platform}}o(n3,"getSystemInfo")});var tS=m((ice,cC)=>{"use strict";var Zl=rt(),tC=x(),rC=Be(),sC=g(),jl=q(),nC=ql(),i3=Th(),{RemotePayloadObject:a3}=jo(),{handleHDBError:iC,hdb_errors:o3}=W(),{HTTP_STATUS_CODES:aC}=o3,{NodeSubscription:oC}=la();cC.exports=c3;async function c3(e,t){let r;try{r=await Zl.request(`${t}.${rC.REQUEST_SUFFIX}`,new a3(sC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),jl.trace("Response from remote describe all request:",r)}catch(a){jl.error(`addNode received error from describe all request to remote node: ${a}`);let c=Zl.requestErrorHandler(a,"add_node",t);throw iC(new Error,c,aC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===rC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let a=`Error returned from remote node ${t}: ${r.message}`;throw iC(new Error,a,aC.INTERNAL_SERVER_ERROR,"error",a)}let s=r.message,n=[],i=[];for(let a of e){let{schema:c,table:u}=a;if(c===sC.SYSTEM_SCHEMA_NAME){await Zl.createLocalTableStream(c,u);let h=new oC(c,u,a.publish,a.subscribe);h.start_time=a.start_time,i.push(h);continue}let l=tC.doesSchemaExist(c),_=s[c]!==void 0,d=u?tC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(a);continue}if(!l&&_&&(jl.trace(`addNode creating schema: ${c}`),await nC.createSchema({operation:"create_schema",schema:c})),!d&&E){jl.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new i3(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await nC.createTable(h)}await Zl.createLocalTableStream(c,u);let f=new oC(c,u,a.publish,a.subscribe);f.start_time=a.start_time,i.push(f)}return{added:i,skipped:n}}o(c3,"reviewSubscriptions")});var r_=m((oce,_C)=>{"use strict";var{handleHDBError:e_,hdb_errors:u3}=W(),{HTTP_STATUS_CODES:t_}=u3,{addUpdateNodeValidator:l3}=Kl(),ec=q(),lC=g(),uC=Be(),_3=x(),rS=rt(),tc=xs(),d3=Q(),E3=tS(),{Node:f3,NodeSubscription:h3}=la(),{broadcast:m3}=_t(),S3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",p3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",T3=d3.get(lC.CONFIG_PARAMS.CLUSTERING_NODENAME);_C.exports=R3;async function R3(e,t=!1){ec.trace("addNode called with:",e),tc.checkClusteringEnabled();let r=l3(e);if(r)throw e_(r,r.message,t_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await tc.getNodeRecord(s);if(!_3.isEmptyOrZeroLength(d))throw e_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,t_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await E3(e.subscriptions,s),a={message:void 0,added:n,skipped:i};if(n.length===0)return a.message=S3,a;let c=tc.buildNodePayloads(n,T3,lC.OPERATIONS_ENUM.ADD_NODE,await tc.getSystemInfo());ec.trace("addNode sending remote payload:",c);let u;try{u=await rS.request(`${s}.${uC.REQUEST_SUFFIX}`,c)}catch(d){ec.error(`addNode received error from request: ${d}`);let E=rS.requestErrorHandler(d,"add_node",s);throw e_(new Error,E,t_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===uC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw e_(new Error,d,t_.INTERNAL_SERVER_ERROR,"error",d)}ec.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];ec.trace("Add node updating work stream for node:",s,"subscriptions:",f),await rS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new h3(f.schema,f.table,f.publish,f.subscribe))}let _=new f3(s,l,u.system_info);return await tc.upsertNodeRecord(_),m3({type:"nats_update"}),i.length>0?a.message=p3:a.message=`Successfully added '${s}' to manifest`,a}o(R3,"addNode")});var nS=m((uce,fC)=>{"use strict";var{handleHDBError:s_,hdb_errors:g3}=W(),{HTTP_STATUS_CODES:n_}=g3,{addUpdateNodeValidator:A3}=Kl(),rc=q(),EC=g(),dC=Be(),O3=x(),sS=rt(),sc=xs(),N3=Q(),{cloneDeep:b3}=require("lodash"),y3=tS(),{NodeSubscription:I3}=la(),{broadcast:w3}=_t(),C3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",U3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",D3=N3.get(EC.CONFIG_PARAMS.CLUSTERING_NODENAME);fC.exports=L3;async function L3(e){rc.trace("updateNode called with:",e),sc.checkClusteringEnabled();let t=A3(e);if(t)throw s_(t,t.message,n_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=b3(await sc.getNodeRecord(r));if(O3.isEmptyOrZeroLength(s))throw s_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,n_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await y3(e.subscriptions,r),a={message:void 0,updated:n,skipped:i};if(n.length===0)return a.message=C3,a;let c=sc.buildNodePayloads(n,D3,EC.OPERATIONS_ENUM.UPDATE_NODE,await sc.getSystemInfo());rc.trace("updateNode sending remote payload:",c);let u;try{u=await sS.request(`${r}.${dC.REQUEST_SUFFIX}`,c)}catch(l){rc.error(`updateNode received error from request: ${l}`);let _=sS.requestErrorHandler(l,"update_node",r);throw s_(new Error,_,n_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===dC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw s_(new Error,l,n_.INTERNAL_SERVER_ERROR,"error",l)}rc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];rc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await sS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await M3(s[0],n,u.system_info),i.length>0?a.message=U3:a.message=`Successfully updated '${r}'`,a}o(L3,"updateNode");async function M3(e,t,r){let s=e;for(let n=0,i=t.length;n<i;n++){let a=t[n],c=!1;for(let u=0,l=e.subscriptions.length;u<l;u++){let _=s.subscriptions[u];if(_.schema===a.schema&&_.table===a.table){_.publish=a.publish,_.subscribe=a.subscribe,c=!0;break}}c||s.subscriptions.push(new I3(a.schema,a.table,a.publish,a.subscribe))}s.system_info=r,await sc.upsertNodeRecord(s),w3({type:"nats_update"})}o(M3,"updateNodeTable")});var TC=m((_ce,pC)=>{"use strict";var SC=require("joi"),{string:hC}=SC.types(),P3=Pe(),mC=g(),v3=Q(),B3=Be();pC.exports=H3;function H3(e){let t=hC.invalid(v3.get(mC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(B3.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=SC.object({operation:hC.valid(mC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return P3.validateBySchema(e,r)}o(H3,"removeNodeValidator")});var a_=m((Ece,bC)=>{"use strict";var{handleHDBError:RC,hdb_errors:F3}=W(),{HTTP_STATUS_CODES:gC}=F3,q3=TC(),nc=q(),AC=xs(),G3=x(),i_=g(),OC=Be(),NC=rt(),x3=Q(),{RemotePayloadObject:k3}=jo(),{NodeSubscription:V3}=la(),$3=Lo(),Y3=Zn(),{broadcast:K3}=_t(),W3=x3.get(i_.CONFIG_PARAMS.CLUSTERING_NODENAME);bC.exports=Q3;async function Q3(e){nc.trace("removeNode called with:",e),AC.checkClusteringEnabled();let t=q3(e);if(t)throw RC(t,t.message,gC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await AC.getNodeRecord(r);if(G3.isEmptyOrZeroLength(s))throw RC(new Error,`Node '${r}' was not found.`,gC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new k3(i_.OPERATIONS_ENUM.REMOVE_NODE,W3,[]),i,a=!1;try{i=await NC.request(`${r}.${OC.REQUEST_SUFFIX}`,n),nc.trace("Remove node reply from remote node:",r,i)}catch(u){nc.error("removeNode received error from request:",u),a=!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 V3(_.schema,_.table,!1,!1);await NC.updateWorkStream(d,r)}let c=new $3(i_.SYSTEM_SCHEMA_NAME,i_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await Y3.deleteRecord(c),K3({type:"nats_update"}),i?.status===OC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||a?(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`}o(Q3,"removeNode")});var wC=m((hce,IC)=>{"use strict";var yC=require("joi"),{string:z3,array:J3}=yC.types(),X3=Pe(),Z3=Kl();IC.exports=j3;function j3(e){let t=yC.object({operation:z3.valid("configure_cluster").required(),connections:J3.items(Z3.validation_schema).required()});return X3.validateBySchema(e,t)}o(j3,"configureClusterValidator")});var iS=m((Sce,MC)=>{"use strict";var eX=g(),o_=q(),tX=x(),rX=a_(),sX=r_(),CC=xs(),nX=wC(),{handleHDBError:UC,hdb_errors:iX}=W(),{HTTP_STATUS_CODES:DC}=iX,aX="Configure cluster complete.",oX="Failed to configure the cluster. Check the logs for more details.",cX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";MC.exports=uX;async function uX(e){o_.trace("configure cluster called with:",e),CC.checkClusteringEnabled();let t=nX(e);if(t)throw UC(t,t.message,DC.BAD_REQUEST,void 0,void 0,!0);let r=await CC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(LC(rX,{operation:eX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);o_.trace("All results from configure_cluster remove node:",n);let i=[],a=e.connections.length;for(let E=0;E<a;E++){let f=e.connections[E];i.push(LC(sX,f,f.node_name))}let c=await Promise.allSettled(i);o_.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"&&(o_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(tX.isEmptyOrZeroLength(u))return{message:aX,connections:l};if(_)return{message:cX,failed_nodes:u,connections:l};throw UC(new Error,oX,DC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}o(uX,"configureCluster");async function LC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}o(LC,"functionWrapper")});var vC=m((Tce,PC)=>{"use strict";var c_=require("joi"),lX=Pe(),{validateSchemaExists:_X,validateTableExists:dX,validateSchemaName:EX}=ts(),fX=c_.object({operation:c_.string().valid("purge_stream"),schema:c_.string().custom(_X).custom(EX).required(),table:c_.string().custom(dX).required()});function hX(e){return lX.validateBySchema(e,fX)}o(hX,"purgeStreamValidator");PC.exports=hX});var aS=m((gce,BC)=>{"use strict";var{handleHDBError:mX,hdb_errors:SX}=W(),{HTTP_STATUS_CODES:pX}=SX,TX=vC(),RX=rt(),gX=xs();BC.exports=AX;async function AX(e){let t=TX(e);if(t)throw mX(t,t.message,pX.BAD_REQUEST,void 0,void 0,!0);gX.checkClusteringEnabled();let{schema:r,table:s}=e;return await RX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}o(AX,"purgeStream")});var uS=m((Oce,kC)=>{"use strict";var cS=xs(),OX=rt(),qC=Q(),u_=g(),ui=Be(),NX=x(),oS=q(),{RemotePayloadObject:bX}=jo(),{ErrorCode:HC}=require("nats"),FC=qC.get(u_.CONFIG_PARAMS.CLUSTERING_ENABLED),GC=qC.get(u_.CONFIG_PARAMS.CLUSTERING_NODENAME);kC.exports={clusterStatus:yX,buildNodeStatus:xC};async function yX(){let e={node_name:GC,is_enabled:FC,connections:[]};if(!FC)return e;let t=await cS.getAllNodeRecords();if(NX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(xC(t[s],e.connections));return await Promise.allSettled(r),e}o(yX,"clusterStatus");async function xC(e,t){let r=e.name,s=new bX(u_.OPERATIONS_ENUM.CLUSTER_STATUS,GC,void 0,await cS.getSystemInfo()),n,i,a=ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await OX.request(ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(a=ui.CLUSTER_STATUS_STATUSES.CLOSED,oS.error(`Error getting node status from ${r} `,n))}catch(u){oS.warn(`Error getting node status from ${r}`,u),u.code===HC.NoResponders?a=ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===HC.Timeout?a=ui.CLUSTER_STATUS_STATUSES.TIMEOUT:a=ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new IX(r,a,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!==u_.PRE_4_0_0_VERSION&&await cS.upsertNodeRecord(u)}catch(u){oS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}o(xC,"buildNodeStatus");function IX(e,t,r,s,n,i,a,c){this.node_name=e,this.status=t,this.ports={clustering:r,operations_api:s},this.latency_ms=n,this.uptime=i,this.subscriptions=a,this.system_info=c}o(IX,"NodeStatusObject")});var _S=m((bce,VC)=>{"use strict";var{handleHDBError:wX,hdb_errors:CX}=W(),{HTTP_STATUS_CODES:UX}=CX,DX=rt(),LX=xs(),lS=x(),l_=require("joi"),MX=Pe(),PX=2e3,vX=l_.object({timeout:l_.number().min(1),connected_nodes:l_.boolean(),routes:l_.boolean()});VC.exports=BX;async function BX(e){LX.checkClusteringEnabled();let t=MX.validateBySchema(e,vX);if(t)throw wX(t,t.message,UX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||lS.autoCastBoolean(s),a=n===void 0||lS.autoCastBoolean(n),c={nodes:[]},u=await DX.getServerList(r??PX),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),a&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:lS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}o(BX,"clusterNetwork")});var WC=m((Ice,KC)=>{"use strict";var dS=require("joi"),$C=Pe(),{route_constraints:YC}=RE();KC.exports={setRoutesValidator:HX,deleteRoutesValidator:FX};function HX(e){let t=dS.object({server:dS.valid("hub","leaf").required(),routes:YC.required()});return $C.validateBySchema(e,t)}o(HX,"setRoutesValidator");function FX(e){let t=dS.object({routes:YC.required()});return $C.validateBySchema(e,t)}o(FX,"deleteRoutesValidator")});var fS=m((Cce,XC)=>{"use strict";var li=Tr(),ES=x(),__=g(),QC=WC(),{handleHDBError:zC,hdb_errors:qX}=W(),{HTTP_STATUS_CODES:JC}=qX,GX="cluster routes successfully set",xX="cluster routes successfully deleted";XC.exports={setRoutes:kX,getRoutes:VX,deleteRoutes:$X};function kX(e){let t=QC.setRoutesValidator(e);if(t)throw zC(t,t.message,JC.BAD_REQUEST,void 0,void 0,!0);let r=li.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],a=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=ES.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),a.push(l))}return e.server==="hub"?li.updateConfigValue(__.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):li.updateConfigValue(__.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:GX,set:a,skipped:i}}o(kX,"setRoutes");function VX(){let e=li.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}o(VX,"getRoutes");function $X(e){let t=QC.deleteRoutesValidator(e);if(t)throw zC(t,t.message,JC.BAD_REQUEST,void 0,void 0,!0);let r=li.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],a=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&a.push(d)}}return c&&(s=ES.isEmptyOrZeroLength(s)?null:s,li.updateConfigValue(__.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=ES.isEmptyOrZeroLength(n)?null:n,li.updateConfigValue(__.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:xX,deleted:i,skipped:a}}o($X,"deleteRoutes")});var jC=m((Dce,ZC)=>{"use strict";var ic=require("alasql"),_i=require("recursive-iterator"),$r=q(),YX=x(),ac=g(),hS=class{static{o(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,WX(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=>ac.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=>!ac.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,a=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[a]&&t[i].tables[a][ac.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[a].attribute_permissions.length>0?c=KX(t[i].tables[a].attribute_permissions):c=global.hdb_schema[i][a].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(a).filter(l=>!ac.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new ic.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(a,u)}}),this.ast}};function KX(e){return e.filter(t=>t[ac.PERMS_CRUD_ENUM.READ])}o(KX,"filterReadRestrictedAttrs");function WX(e,t,r,s,n){QX(e,t,r,s,n)}o(WX,"interpretAST");function oc(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,a=e.tableid;e.as&&(a=e.as),n.set(a,i)}}o(oc,"addSchemaTableToMap");function QX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ic.yy.Insert?ZX(e,t,r):e instanceof ic.yy.Select?zX(e,t,r,s,n):e instanceof ic.yy.Update?JX(e,t,r):e instanceof ic.yy.Delete?XX(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}o(QX,"getRecordAttributesAST");function zX(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(YX.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{oc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),oc(c.table,t,r,s,n)});let a=new _i(e.columns);for(let{node:c}of a)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new _i(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new _i(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new _i(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}o(zX,"getSelectAttributes");function JX(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new _i(e.columns),n=e.table.databaseid;oc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&mS(e.table.tableid,n,i.columnid,t,r)}o(JX,"getUpdateAttributes");function XX(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new _i(e.where),n=e.table.databaseid;oc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&mS(e.table.tableid,n,i.columnid,t,r)}o(XX,"getDeleteAttributes");function ZX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new _i(e.columns),n=e.into.databaseid;oc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&mS(e.into.tableid,n,i.columnid,t,r)}o(ZX,"getInsertAttributes");function mS(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)}o(mS,"pushAttribute");ZC.exports=hS});var TS=m((Mce,sU)=>{var d_=Ao(),eU=require("chalk"),lr=q(),tU=require("prompt"),{promisify:jX}=require("util"),SS=g(),e4=require("fs-extra"),t4=require("path"),r4=x(),s4=jm(),rU=Q();rU.initSync();var n4=require("moment"),i4=jX(tU.get),a4=t4.join(rU.getHdbBasePath(),SS.LICENSE_KEY_DIR_NAME,SS.LICENSE_FILE_NAME,SS.LICENSE_FILE_NAME);sU.exports={getFingerprint:c4,setLicense:o4,parseLicense:pS,register:u4,getRegistrationInfo:_4};async function o4(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await pS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}o(o4,"setLicense");async function c4(){let e={};try{e=await d_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}o(c4,"getFingerprint");async function pS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=d_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await e4.writeFile(a4,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}o(pS,"parseLicense");async function u4(){let e=await l4();return pS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}o(u4,"register");async function l4(){let e=await d_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:eU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:eU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{tU.start()}catch(s){lr.error(s)}let r;try{r=await i4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}o(l4,"promptForRegistration");async function _4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await d_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(r4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=s4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=n4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}o(_4,"getRegistrationInfo")});var iU=m((vce,nU)=>{"use strict";var d4=Be(),RS=class{static{o(this,"HubConfigObject")}constructor(t,r,s,n,i,a,c,u,l,_,d,E,f,h){this.port=t,a===null&&(a=void 0),this.server_name=r+d4.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:a,insecure:c,verify:u},this.leafnodes={port:l,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c}},this.cluster={name:_,port:d,routes:E,tls:{cert_file:n,key_file:i,ca_file:a,insecure:c,verify:u}},this.accounts={SYS:{users:f},HDB:{users:h}},this.system_account="SYS"}};nU.exports=RS});var cU=m((Hce,oU)=>{"use strict";var aU=Be(),gS=class{static{o(this,"LeafConfigObject")}constructor(t,r,s,n,i,a,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+aU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+aU.SERVER_SUFFIX.LEAF},this.tls={cert_file:l,key_file:_,ca_file:d,insecure:!0},this.leafnodes={remotes:[{tls:{ca_file:d,insecure:!0},urls:i,account:"SYS"},{tls:{ca_file:d,insecure:!0},urls:a,account:"HDB"}]},this.accounts={SYS:{users:c},HDB:{users:u,jetstream:"enabled"}},this.system_account="SYS"}};oU.exports=gS});var lU=m((qce,uU)=>{"use strict";var AS=class{static{o(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};uU.exports=AS});var dU=m((xce,_U)=>{"use strict";var E4=Be(),OS=class{static{o(this,"SysUserObject")}constructor(t,r){this.user=t+E4.SERVER_SUFFIX.ADMIN,this.password=r}};_U.exports=OS});var yS=m((Vce,hU)=>{"use strict";var cc=require("path"),m_=require("fs-extra"),f4=iU(),h4=cU(),m4=lU(),S4=dU(),NS=Or(),da=x(),Kt=Tr(),h_=g(),E_=Be(),{CONFIG_PARAMS:ze}=h_,lc=q(),S_=Q(),EU=Hs(),bS=rt(),uc="clustering",p4=1e4,fU=5;hU.exports={generateNatsConfig:T4,removeNatsConfig:R4};async function T4(e=!1,t=void 0){S_.initSync();let r=S_.get(ze.ROOTPATH),s=cc.join(r,uc,E_.PID_FILES.HUB),n=cc.join(r,uc,E_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),a=cc.join(r,uc,E_.NATS_CONFIG_FILES.HUB_SERVER),c=cc.join(r,uc,E_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await bS.checkNATSServerInstalled()||p_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await NS.listUsers(),S=Kt.getConfigFromFile(ze.CLUSTERING_USER),y=await NS.getClusterUser();(da.isEmpty(y)||y.active!==!0)&&p_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await f_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await f_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await f_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await f_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],H=[];for(let[ge,ct]of T.entries())ct.role.role===h_.ROLE_TYPES_ENUM.CLUSTER_USER&&ct.active&&(O.push(new S4(ct.username,EU.decrypt(ct.hash))),H.push(new m4(ct.username,EU.decrypt(ct.hash))));let Y=[],{hub_routes:A}=Kt.getClusteringRoutes();if(!da.isEmptyOrZeroLength(A))for(let ge of A)Y.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${ge.host}:${ge.port}`);let w=new f4(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,O,H);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=da.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===h_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await m_.writeJson(a,w),lc.trace(`Hub server config written to ${a}`));let G=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new h4(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[G],[k],O,H,u,l,_,d);_==null&&delete X.tls.ca_file,(t===void 0||t===h_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await m_.writeJson(c,X),lc.trace(`Leaf server config written to ${c}`))}o(T4,"generateNatsConfig");async function f_(e){let t=S_.get(e);return da.isEmpty(t)&&p_(`port undefined for '${e}'`),await da.isPortTaken(t)&&p_(`'${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}o(f_,"isPortAvailable");function p_(e){let t=`Error generating clustering config: ${e}`;lc.error(t),console.error(t),process.exit(1)}o(p_,"generateNatsConfigError");async function R4(e){let{port:t,config_file:r}=bS.getServerConfig(e),{username:s,decrypt_hash:n}=await NS.getClusterUser(),i=0,a=500;for(;i<fU;){try{let l=await bS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){lc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=fU)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 da.async_set_timeout(a*i)}let c="0".repeat(p4),u=cc.join(S_.get(ze.ROOTPATH),uc,r);await m_.writeFile(u,c),await m_.remove(u),lc.notify(e,"started.")}o(R4,"removeNatsConfig")});var MS=m((Yce,gU)=>{"use strict";var g4=require("minimist"),{isMainThread:CS,parentPort:pU}=require("worker_threads"),He=g(),{PROCESS_DESCRIPTORS_VALIDATE:_c}=He,ls=q(),US=x(),T_=yS(),Ea=rt(),IS=Be(),TU=Tr(),_s=PS(),mU=_a(),A4=uE(),{restartWorkers:R_,onMessageByType:O4}=_t(),{handleHDBError:N4,hdb_errors:b4}=W(),{HTTP_STATUS_CODES:y4}=b4,g_=Q();g_.initSync();var dc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,I4="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",SU="Clustering is not enabled so cannot be restarted",w4="Invalid service",di,Yr;gU.exports={restart:RU,restartService:DS};CS&&O4(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?DS({service:e.workerType}):RU({operation:"restart"})});async function RU(e){Yr=Object.keys(e).length===0,di=await _s.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=g4(process.argv);if(t.service){await DS(t);return}if(Yr&&!di){console.error(I4);return}if(Yr&&console.log(dc),di){_s.enterPM2Mode(),ls.notify(dc);let r=A4(Object.keys(He.CONFIG_PARAM_MAP),!0);return US.isEmptyOrZeroLength(Object.keys(r))||TU.updateConfigValue(void 0,void 0,r,!0,!0),U4(),dc}return CS?(ls.notify(dc),await LS(),setTimeout(()=>{R_()},50)):pU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),dc}o(RU,"restart");async function DS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw N4(new Error,w4,y4.BAD_REQUEST,void 0,void 0,!0);if(di=await _s.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!CS)return pU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case _c.clustering:if(!g_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=SU;break}Yr&&console.log("Restarting clustering"),ls.notify("Restarting clustering"),await LS();break;case _c.clustering_config:case _c["clustering config"]:if(!g_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=SU;break}Yr&&console.log("Restarting clustering_config"),ls.notify("Restarting clustering_config"),await _s.reloadClustering();break;case"custom_functions":case"custom functions":case _c.harperdb:case _c.http_workers:if(Yr&&!di){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),ls.notify("Restarting http_workers"),di?await _s.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{R_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ls.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}o(DS,"restartService");async function C4(){await Ea.publishToStream(`${IS.SUBJECT_PREFIXES.TXN}.${IS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,IS.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ea.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}o(C4,"postDummyNatsMsg");async function U4(){await LS(),await _s.restart(He.HDB_PROC_DESCRIPTOR),await US.async_set_timeout(2e3),g_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await wS(),Yr&&(await Ea.closeConnection(),process.exit(0))}o(U4,"restartPM2Mode");async function LS(){if(!TU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await mU.getHDBProcessInfo()).clustering.length===0)ls.trace("Clustering not running, restart will start clustering services"),await T_.generateNatsConfig(!0),await _s.startClusteringProcesses(),await _s.startClusteringThreads(),await wS(),Yr&&await Ea.closeConnection();else{await C4(),await T_.generateNatsConfig(!0),di?(ls.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await _s.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await _s.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await mU.getHDBProcessInfo()).clustering.forEach(n=>{ls.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await US.async_set_timeout(3e3),await wS(),await Ea.updateLocalStreams(),Yr&&await Ea.closeConnection(),ls.trace("Restart clustering restarting ingest and reply service threads");let t=R_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=R_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}o(LS,"restartClustering");async function wS(){await T_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await T_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}o(wS,"removeNatsConfig")});var LU=m((Qce,DU)=>{"use strict";var Wce=require("lodash"),Wt=g(),{handleHDBError:AU,hdb_errors:D4}=W(),{HDB_ERROR_MSGS:L4,HTTP_STATUS_CODES:M4}=D4,vS=q();DU.exports={getRolePermissions:v4};var Ei=Object.create(null),P4=o(e=>({key:e,perms:{}}),"perms_template_obj"),yU=o((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),IU=o((e=!1,t=!1,r=!1,s=!1)=>({[Wt.PERMS_CRUD_ENUM.READ]:e,[Wt.PERMS_CRUD_ENUM.INSERT]:t,[Wt.PERMS_CRUD_ENUM.UPDATE]:r,[Wt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),BS=o((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...IU(t,r,s,n)}),"table_perms_template"),OU=o((e,t=IU())=>({attribute_name:e,describe:UU(t),[Ec]:t[Ec],[HS]:t[HS],[FS]:t[FS]}),"attr_perms_template"),NU=o((e,t=!1)=>({attribute_name:e,describe:t,[Ec]:t}),"timestamp_attr_perms_template"),{READ:Ec,INSERT:HS,UPDATE:FS}=Wt.PERMS_CRUD_ENUM,wU=Object.values(Wt.PERMS_CRUD_ENUM),CU=[Ec,HS,FS];function v4(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[Wt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(Ei[t]&&Ei[t].key===s)return Ei[t].perms;let n=B4(e,r);return Ei[t]?Ei[t].key=s:Ei[t]=P4(s),Ei[t].perms=n,n}catch(r){if(!e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Wt.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 vS.error(s),vS.debug(r),AU(new Error,L4.OUTDATED_PERMS_TRANSLATION_ERROR,M4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw vS.error(s),AU(new Error)}}}o(v4,"getRolePermissions");function B4(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Wt.SYSTEM_SCHEMA_NAME]=s[Wt.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]=H4(t[i]);return}r[i]=yU(),s[i]?(s[i].describe&&(r[i].describe=!0),Object.keys(t[i]).forEach(a=>{if(s[i].tables[a]){let c=s[i].tables[a],u=t[i][a],l=F4(c,u);r[i].describe||wU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[a]=l}else r[i].tables[a]=BS()})):Object.keys(t[i]).forEach(a=>{r[i].tables[a]=BS()})}),r}o(B4,"translateRolePermissions");function H4(e){let t=yU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=BS(!0,!0,!0,!0,!0)}),t}o(H4,"createStructureUserPermissions");function F4(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 Wt.TIME_STAMP_NAMES.includes(d)&&(E=NU(d,_[Ec])),l[d]=E,l},{}),a=t.primaryKey||t.hash_attribute,c=!!i[a],u=OU(a);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=UU(_),n.attribute_permissions.push(_),c||q4(_,u)}else if(l!==a){let _;Wt.TIME_STAMP_NAMES.includes(l)?_=NU(l):_=OU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=bU(n),n}else return e.describe=bU(e),e}o(F4,"getTableAttrPerms");function bU(e){return wU.filter(t=>e[t]).length>0}o(bU,"getSchemaTableDescribePerm");function UU(e){return CU.filter(t=>e[t]).length>0}o(UU,"getAttributeDescribePerm");function q4(e,t){CU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}o(q4,"checkForHashPerms")});var MU={};Ze(MU,{Resources:()=>A_,keyArrayToString:()=>fa,resetResources:()=>G4,resources:()=>yn});function G4(){return yn=new A_}function fa(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var A_,yn,fc=pe(()=>{Vn();A_=class extends Map{static{o(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:""},a=super.get(t);if(a&&(a.Resource.databaseName!==r.databaseName||a.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("?"),a=i>-1?t.slice(0,i):t;return n=this.get(a),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};o(G4,"resetResources");o(fa,"keyArrayToString")});var hc={};Ze(hc,{authentication:()=>qU,login:()=>z4,logout:()=>J4,start:()=>Q4});async function qU(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,a=[];if(i){let f=e.isOperationsServer?$4?V4:[]:k4?x4:[];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 O_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}a.push("Access-Control-Allow-Origin",i),O_&&a.push("Access-Control-Allow-Credentials","true")}}let c,u;if(O_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),S=n.indexOf("=",h);c=n.slice(S+1,T===-1?n.length:T),u=await vU.get(c)}e.session=u||(u={})}e.user=null;let l=o((f,h,T)=>{let S=new y_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=T,c&&(S.session_id=c),e.headers.referer&&(S.referer=e.headers.referer),e.headers.origin&&(S.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?PU.notify(S):PU.error(S)},"authAuditLog"),_;if(s){if(_=ha.get(s),!_){let[f,h]=s.split(" "),T,S;try{switch(f){case"Basic":[T,S]=atob(h).split(":"),_=T||S?await mt.auth(T,S):null;break;case"Bearer":try{_=await(0,b_.validateOperationToken)(h)}catch(y){if(y.message==="invalid token")try{return await(0,b_.validateRefreshToken)(h),{status:-1}}catch{throw y}}break}}catch(y){return W4&&(ha.get(h)||(ha.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:ks({error:y.message},e)}}ha.set(s,_),K4&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await mt.auth(u.user,null,!1):Y4&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,N_.getSuperUser)());O_&&(e.session.update=function(f){if(!c){c=(0,HU.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;a?a.push("set-cookie",T):d?.headers?.set&&d.headers.set("set-cookie",T)}return f.id=c,vU.put(f)},e.login=async function(f,h){e.user=await mt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yn.loginPath?(d.status=302,d.headers.Location=yn.loginPath(e)):d.headers["WWW-Authenticate"]="Basic");let E=a.length;if(E>0){let f=d.headers;f||(d.headers=f={});for(let h=0;h<E;){let T=a[h++];f[T]=a[h++]}}return a=null,d}function Q4({server:e,port:t}){e.request(qU,{port:t||"all"}),BU||(BU=!0,setInterval(()=>{ha=new Map},yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),FU.user.addListener(()=>{ha=new Map}))}async function z4(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 J4(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var N_,b_,HU,yr,Rt,y_,FU,PU,x4,k4,V4,$4,vU,O_,Y4,K4,W4,ha,BU,I_=pe(()=>{N_=D(Or());un();fc();b_=D(Zo());de();HU=require("uuid"),yr=D(Q()),Rt=D(g()),y_=D(q());ma();FU=D(No()),PU=(0,y_.loggerWithTag)("auth-event");yr.initSync();x4=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),k4=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),V4=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),$4=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);mt.auth=N_.findAndValidateUser;vU=tt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),O_=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,Y4=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,K4=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,W4=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,ha=new Map;o(qU,"authentication");o(Q4,"start");o(z4,"login");o(J4,"logout")});var KU=m((sue,YU)=>{"use strict";var fe=require("joi"),GU=require("fs-extra"),xU=require("path"),$s=Pe(),kU=Q(),VU=g(),$U=q(),{hdb_errors:X4}=W(),{HDB_ERROR_MSGS:Dt}=X4,Vs=/^[a-zA-Z0-9-_]+$/;YU.exports={getDropCustomFunctionValidator:j4,setCustomFunctionValidator:eZ,addComponentValidator:nZ,dropCustomFunctionProjectValidator:iZ,packageComponentValidator:aZ,deployComponentValidator:oZ,setComponentFileValidator:tZ,getComponentFileValidator:sZ,dropComponentFileValidator:rZ};function w_(e,t,r){try{let s=kU.get(VU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=xU.join(s,t);return GU.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return $U.error(s),r.message(Dt.VALIDATION_ERR)}}o(w_,"checkProjectExists");function mc(e,t){return e.includes("..")?t.message("Invalid file path"):e}o(mc,"checkFilePath");function Z4(e,t,r,s){try{let n=kU.get(VU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=xU.join(n,e,t,r+".js");return GU.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return $U.error(n),s.message(Dt.VALIDATION_ERR)}}o(Z4,"checkFileExists");function j4(e){let t=fe.object({project:fe.string().pattern(Vs).custom(w_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(Vs).custom(Z4.bind(null,e.project,e.type)).custom(mc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return $s.validateBySchema(e,t)}o(j4,"getDropCustomFunctionValidator");function eZ(e){let t=fe.object({project:fe.string().pattern(Vs).custom(w_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().custom(mc).required(),function_content:fe.string().required()});return $s.validateBySchema(e,t)}o(eZ,"setCustomFunctionValidator");function tZ(e){let t=fe.object({project:fe.string().pattern(Vs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:fe.string().custom(mc).required(),payload:fe.string().optional(),encoding:fe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return $s.validateBySchema(e,t)}o(tZ,"setComponentFileValidator");function rZ(e){let t=fe.object({project:fe.string().pattern(Vs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:fe.string().custom(mc).optional()});return $s.validateBySchema(e,t)}o(rZ,"dropComponentFileValidator");function sZ(e){let t=fe.object({project:fe.string().required(),file:fe.string().custom(mc).required(),encoding:fe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return $s.validateBySchema(e,t)}o(sZ,"getComponentFileValidator");function nZ(e){let t=fe.object({project:fe.string().pattern(Vs).custom(w_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return $s.validateBySchema(e,t)}o(nZ,"addComponentValidator");function iZ(e){let t=fe.object({project:fe.string().pattern(Vs).custom(w_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return $s.validateBySchema(e,t)}o(iZ,"dropCustomFunctionProjectValidator");function aZ(e){let t=fe.object({project:fe.string().pattern(Vs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:fe.boolean()});return $s.validateBySchema(e,t)}o(aZ,"packageComponentValidator");function oZ(e){let t=fe.object({project:fe.string().pattern(Vs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:fe.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:fe.string().optional()});return $s.validateBySchema(e,t)}o(oZ,"deployComponentValidator")});var kS=m((iue,zU)=>{"use strict";var be=require("fs-extra"),qS=require("fast-glob"),me=require("path"),WU=require("tar-fs"),cZ=require("uuid").v4,GS=require("normalize-path"),ds=KU(),gt=q(),Ie=g(),$e=Q(),C_=Tr(),uZ=x(),{PACKAGE_ROOT:lZ}=g(),{handleHDBError:st,hdb_errors:_Z}=W(),{HDB_ERROR_MSGS:In,HTTP_STATUS_CODES:nt}=_Z,dZ=me.join(lZ,"application-template"),xS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function QU(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw st(new Error,In.NOT_ENABLED,nt.BAD_REQUEST,void 0,void 0,!0)}o(QU,"isCFEnabled");function EZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw st(new Error,In.FUNCTION_STATUS,nt.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}o(EZ,"customFunctionsStatus");function fZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{qS.sync(GS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:qS.sync(GS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:qS.sync(GS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw st(new Error,In.GET_FUNCTIONS,nt.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}o(fZ,"getCustomFunctions");function hZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ds.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,a=me.join(r,s,n,i+".js");try{return be.readFileSync(a,{encoding:"utf8"})}catch(c){throw st(new Error,In.GET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}o(hZ,"getCustomFunction");function mZ(e){QU(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ds.setCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:a}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),a),`Successfully updated custom function: ${i}.js`}catch(c){throw st(new Error,In.SET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}o(mZ,"setCustomFunction");function SZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ds.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(a){throw st(new Error,In.DROP_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,a)}}o(SZ,"dropCustomFunction");function pZ(e){QU(),e.project&&(e.project=me.parse(e.project).name);let t=ds.addComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(dZ,n),`Successfully added project: ${s}`}catch(n){throw st(new Error,In.ADD_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,n)}}o(pZ,"addComponent");function TZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ds.dropCustomFunctionProjectValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!uZ.isEmptyOrZeroLength(n)){let i=!1;for(let[a,c]of n.entries())if(c.name===s){n.splice(a,1),i=!0;break}if(i)return C_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw st(new Error,In.DROP_FUNCTION_PROJECT,nt.INTERNAL_SERVER_ERROR,gt.ERR,i)}}o(TZ,"dropCustomFunctionProject");async function RZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ds.packageComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(xS);let i=me.join(xS,`${s}.tar`),a={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(a={ignore:u=>u.includes(me.join(n,"node_modules"))}),WU.pack(n,a).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}}o(RZ,"packageComponent");async function gZ(e){e.project&&(e.project=me.parse(e.project).name);let t=ds.deployComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let a=me.join(r,s);i="file:"+a,await be.ensureDir(a);let c,u;do c=me.join(xS,cZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(WU.extract(a)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return C_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}o(gZ,"deployComponent");async function AZ(){let e=C_.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=o(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let a of i){let c=a.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await a.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}o(AZ,"getComponents");async function OZ(e){let t=ds.getComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}o(OZ,"getComponentFile");async function NZ(e){let t=ds.setComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}o(NZ,"setComponentFile");async function bZ(e){let t=ds.dropComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),C_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}o(bZ,"dropComponent");zU.exports={customFunctionsStatus:EZ,getCustomFunctions:fZ,getCustomFunction:hZ,setCustomFunction:mZ,dropCustomFunction:SZ,addComponent:pZ,dropCustomFunctionProject:TZ,packageComponent:RZ,deployComponent:gZ,getComponents:AZ,getComponentFile:OZ,setComponentFile:NZ,dropComponent:bZ}});var VS=m((oue,XU)=>{"use strict";var Es=require("joi"),JU=Pe();XU.exports={readTransactionLogValidator:yZ,deleteTransactionLogsBeforeValidator:IZ};function yZ(e){let t=Es.object({schema:Es.string().required(),table:Es.string().required(),from:Es.date().timestamp(),to:Es.date().timestamp(),limit:Es.number().min(1)});return JU.validateBySchema(e,t)}o(yZ,"readTransactionLogValidator");function IZ(e){let t=Es.object({schema:Es.string().required(),table:Es.string().required(),timestamp:Es.date().timestamp().required()});return JU.validateBySchema(e,t)}o(IZ,"deleteTransactionLogsBeforeValidator")});var D_=m((uue,rD)=>{"use strict";var $S=g(),U_=rt(),ZU=x(),jU=Q(),eD=Hs(),{handleHDBError:Sa,hdb_errors:wZ}=W(),{HTTP_STATUS_CODES:pa}=wZ,{readTransactionLogValidator:CZ,deleteTransactionLogsBeforeValidator:UZ}=VS(),tD="This operation relies on clustering and cannot run with it disable.",DZ="Logs successfully deleted from transaction log.",LZ="All logs successfully deleted from transaction log.";rD.exports={readTransactionLog:MZ,deleteTransactionLogsBefore:PZ};async function*MZ(e){let t=CZ(e);if(t)throw Sa(t,t.message,pa.BAD_REQUEST,void 0,void 0,!0);if(!jU.get($S.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,tD,pa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=ZU.checkSchemaTableExist(r,s);if(n)throw Sa(new Error,n,pa.NOT_FOUND,void 0,void 0,!0);let i=eD.createNatsTableStreamName(r,s),a=await U_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of a){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===$S.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}o(MZ,"readTransactionLog");async function PZ(e){let t=UZ(e);if(t)throw Sa(t,t.message,pa.BAD_REQUEST,void 0,void 0,!0);if(!jU.get($S.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Sa(new Error,tD,pa.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=ZU.checkSchemaTableExist(r,s);if(i)throw Sa(new Error,i,pa.NOT_FOUND,void 0,void 0,!0);let a=eD.createNatsTableStreamName(r,s),{jsm:c}=await U_.getNATSReferences(),u=await U_.getStreamInfo(a),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=DZ,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=LZ):d=(await U_.viewStream(a,parseInt(n),1))[0].nats_sequence,await c.streams.purge(a,{seq:d}),_}o(PZ,"deleteTransactionLogsBefore")});var v_=m((_ue,uD)=>{"use strict";var L_=require("joi"),M_=require("path"),sD=require("fs-extra"),{exec:vZ}=require("child_process"),BZ=require("util"),nD=BZ.promisify(vZ),Sc=g(),{handleHDBError:Ta,hdb_errors:HZ}=W(),{HTTP_STATUS_CODES:Ra}=HZ,Tc=Q(),FZ=Pe(),pc=q();Tc.initSync();var YS=Tc.get(Sc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),iD="npm install --omit=dev --json",qZ=`${iD} --dry-run`;uD.exports={installModules:VZ,auditModules:$Z,installAllRootModules:GZ,uninstallRootModule:xZ,linkHarperdb:kZ};async function GZ(e=!1){await P_(),await Rc(e?"npm install --ignore-scripts":"npm install",Tc.get(Sc.CONFIG_PARAMS.ROOTPATH))}o(GZ,"installAllRootModules");async function xZ(e){await Rc(`npm uninstall ${e}`,Tc.get(Sc.CONFIG_PARAMS.ROOTPATH))}o(xZ,"uninstallRootModule");async function kZ(){await P_(),await Rc(`npm link ${Sc.PACKAGE_ROOT}`,Tc.get(Sc.CONFIG_PARAMS.ROOTPATH))}o(kZ,"linkHarperdb");async function Rc(e,t=void 0){let{stdout:r,stderr:s}=await nD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return pc.trace(r,s),r.replace(`
11
- `,"")}o(Rc,"runCommand");async function VZ(e){pc.info(`starting installModules for request: ${e}`);let t=cD(e);if(t)throw Ta(t,t.message,Ra.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?qZ:iD;await P_(),await oD(r);let i={};for(let a=0,c=r.length;a<c;a++){let u=r[a];i[u]={npm_output:null,npm_error:null};let l=M_.join(YS,u),_,d=null;try{let{stdout:E,stderr:f}=await nD(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(PI,"runCommand");async function iz(){try{await qQ.access(om)}catch{return!1}let e=await PI(`${om} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return GQ.eq(t,sz)}a(iz,"checkNATSServerInstalled");async function lm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await CI.getClusterUser();if(ai(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 zQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return yr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(lm,"createConnection");async function oz(){_s&&(await _s.drain(),_s=void 0,to=void 0,ro=void 0,Ka=void 0)}a(oz,"closeConnection");var _s,Ka;async function Fl(){return Ka||(Ka=lm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_s=await Ka),_s||Ka}a(Fl,"getConnection");async function Qa(){if(to)return to;ai(_s)&&await Fl();let{domain:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await _s.jetstreamManager({domain:e}),to}a(Qa,"getJetStreamManager");async function vI(){if(ro)return ro;ai(_s)&&await Fl();let{domain:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=_s.jetstream({domain:e}),ro}a(vI,"getJetStream");async function Gt(){let e=_s||await Fl(),t=to||await Qa(),r=ro||await vI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function az(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await CI.getClusterUser(),n=await lm(t,r,s),i=um(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=MI.decode(_.data);d.response_time=Date.now()-u,c.push(d)}})();return u=Date.now(),await n.publish("$SYS.REQ.SERVER.PING.VARZ",void 0,{reply:i}),await n.publish("$SYS.REQ.SERVER.PING",void 0,{reply:i}),await n.flush(),await Pl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(az,"getServerList");async function _m(e,t){let{jsm:r}=await Gt(),s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:DI.File,retention:LI.Limits,subjects:t,discard:JQ.Old,duplicate_window:UI,max_msgs:n,max_bytes:i,max_age:s})}a(_m,"createLocalStream");async function BI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(BI,"listStreams");async function cz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(cz,"deleteLocalStream");async function uz(e){let{connection:t}=await Gt(),r=[],s=um(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(MI.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(uz,"listRemoteStreams");async function lz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=am(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];let l=[];for await(let _ of u){let d=cm(_.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(lz,"viewStream");async function*_z(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=am(),o={durable_name:i,ack_policy:Bl.Explicit};t&&(o.deliver_policy=Hl.StartTime,o.opt_start_time=new Date(t).toISOString()),await s.consumers.add(e,o);let c=await n.consumers.get(e,i),u=r?await c.fetch({max_messages:r,expires:2e3}):await c.consume();if(c._info.num_pending===0)return[];for await(let l of u){let _=cm(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(_z,"viewStreamIterator");async function dz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=HI(s,r);let{js:n}=await Gt(),i=await Ja(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:wI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),tz(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 xI(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 _m(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(dz,"publishToStream");function HI(e,t){t===void 0&&(t=ZQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Pl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${am()}`;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(HI,"addNatsMsgHeader");function za(e){e=e.toLowerCase();let t=Wa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),rz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(im)&&(im={port:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Wa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),im;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(nm)&&(nm={port:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:$a.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Wa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),nm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(za,"getServerConfig");async function Ez(e){let{jsm:t}=await Gt(),r=await Ja();try{await t.streams.add({name:e.stream_name,storage:DI.File,retention:LI.Limits,duplicate_window:UI,max_age:WQ,max_bytes:QQ,subjects:[`${_e.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Bl.Explicit,durable_name:e.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4});else throw s}}a(Ez,"createWorkQueueStream");async function fz(){let{jsm:e}=await Gt();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(yr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name),yr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Bl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Hl.All,max_ack_pending:1e4}))}a(fz,"updateIngestStreamConsumer");async function FI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=qI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=vl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,p=n.config.sources.length;T<p;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(FI,"addSourceToWorkStream");function qI(e){return e.split(".")[1]}a(qI,"extractServerName");async function GI(e,t,r){let{schema:s,table:n}=r,i=vl.createNatsTableStreamName(s,n),{jsm:o}=await Gt(),c=await o.streams.info(t);if(!Array.isArray(c.config.sources)||c.config.sources.length===0)return;let u=c.config.sources.length,l;for(;u--;)if(l=c.config.sources[u],l.name===i&&l.external.api===`$JS.${e}.API`){c.config.sources.splice(u,1);break}await o.streams.update(t,c.config)}a(GI,"removeSourceFromWorkStream");async function hz(e,t,r=2e4,s=um()){if(!Pl.isObject(t))throw new Error("data param must be an object");let n=wI.encode(t),{connection:i}=await Gt(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return cm(c.data)}a(hz,"request");function dm(e){return new Promise(async(t,r)=>{let s=$Q(om,["--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(dm,"reloadNATS");async function mz(){let{pid_file_path:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await dm(e)}a(mz,"reloadNATSHub");async function Sz(){let{pid_file_path:e}=za(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await dm(e)}a(Sz,"reloadNATSLeaf");function pz(e,t,r){let s;switch(e.code){case yI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case yI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(pz,"requestErrorHandler");async function Tz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await xI(async()=>{e.subscribe===!0?await FI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await GI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Tz,"updateWorkStream");function xI(e){return YQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(xI,"exclusiveLock");async function kI(e,t){let r=vl.createNatsTableStreamName(e,t),s=await Ja(),n=Oz(e,t,s);await _m(r,[n])}a(kI,"createLocalTableStream");async function Rz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await kI(s,n)}}a(Rz,"createTableStreams");async function VI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=vl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")yr.warn(r);else throw r}}a(VI,"purgeTableStream");async function gz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await VI(e,t[r])}a(gz,"purgeSchemaTableStreams");async function Az(e){return(await Qa()).streams.info(e)}a(Az,"getStreamInfo");function Oz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Oz,"createSubjectName");async function Ja(){if(Ya)return Ya;if(Ya=(await Qa())?.nc?.info?.server_name,Ya===void 0)throw new Error("Unable to get jetstream manager server name");return Ya}a(Ja,"getJsmServerName");async function Nz(){let e=await Qa(),t=await Ja(),r=await BI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=bz(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(Nz,"updateLocalStreams");function bz(e){let{config:t}=e,r=!1;if(t.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(bz,"updateStreamLimits")});var kl=m((rae,QI)=>{"use strict";var so=Wu(),no=lI(),yz=x(),Iz=require("uuid").v4,tae=require("clone"),Gl=Gs(),io=A(),wz=require("util"),Rn=Fr(),{handleHDBError:xt,hdb_errors:Cz}=W(),{HDB_ERROR_MSGS:ql,HTTP_STATUS_CODES:kt}=Cz,{SchemaEventMsg:xl}=qr(),YI=nt(),{getDatabases:Uz}=(de(),re(Ne)),{transformReq:oo}=V();QI.exports={createSchema:Dz,createSchemaStructure:KI,createTable:Lz,createTableStructure:WI,createAttribute:Hz,dropSchema:Mz,dropTable:Pz,dropAttribute:vz,getBackup:Fz};async function Dz(e){let t=await KI(e);return Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),t}a(Dz,"createSchema");async function KI(e){let t=so.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(oo(e),!await no.checkSchemaExists(e.schema))throw xt(new Error,ql.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,ql.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a(KI,"createSchemaStructure");async function Lz(e){return oo(e),await WI(e)}a(Lz,"createTable");async function WI(e){let t=so.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(so.validateTableResidence(e.residence),!await no.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,ql.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,io.LOG_LEVELS.ERROR,ql.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Iz(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await Rn.createTable(s,e);else throw xt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",kt.BAD_REQUEST);else await Rn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(WI,"createTableStructure");async function Mz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=so.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let n=await no.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,n,!0);let i=await no.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Rn.dropSchema(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema)),await YI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Mz,"dropSchema");async function Pz(e){let t=so.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);return await Rn.dropTable(e),await YI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Pz,"dropTable");async function vz(e){let t=so.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);oo(e);let r=await no.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,io.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(io.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Rn.dropAttribute(e),Bz(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw yz.error(`Got an error deleting attribute ${wz.inspect(e)}.`),s}}a(vz,"dropAttribute");function Bz(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(Bz,"dropAttributeFromGlobal");async function Hz(e){oo(e);let t=Uz()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw xt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,kt.BAD_REQUEST,void 0,void 0,!0);return await Rn.createAttribute(e),Gl.signalSchemaChange(new xl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Hz,"createAttribute");function Fz(e){return Rn.getBackup(e)}a(Fz,"getBackup")});var JI=m((nae,zI)=>{"use strict";var{OPERATIONS_ENUM:qz}=A(),Em=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=qz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};zI.exports=Em});var fm=m((aae,tw)=>{"use strict";var Gz=Fr(),oae=JI(),Vl=V(),$l=A(),xz=Q(),{handleHDBError:XI,hdb_errors:kz}=W(),{HDB_ERROR_MSGS:ZI,HTTP_STATUS_CODES:jI}=kz,Vz=Object.values($l.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ew="To use this operation audit log must be enabled in harperdb-config.yaml";tw.exports=$z;async function $z(e){if(Vl.isEmpty(e.schema))throw new Error(ZI.SCHEMA_REQUIRED_ERR);if(Vl.isEmpty(e.table))throw new Error(ZI.TABLE_REQUIRED_ERR);if(!xz.get($l.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XI(new Error,ew,jI.BAD_REQUEST,$l.LOG_LEVELS.ERROR,ew,!0);let t=Vl.checkSchemaTableExist(e.schema,e.table);if(t)throw XI(new Error,t,jI.NOT_FOUND,$l.LOG_LEVELS.ERROR,t,!0);if(!Vl.isEmpty(e.search_type)&&Vz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Gz.readAuditLog(e)}a($z,"readAuditLog")});var sw=m((uae,rw)=>{"use strict";var{OPERATIONS_ENUM:Yz}=A(),hm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Yz.GET_BACKUP,this.schema=t,this.table=r}};rw.exports=hm});var ow=m((Eae,iw)=>{"use strict";var Kz=Fr(),_ae=sw(),mm=V(),Wz=A(),dae=Q(),{handleHDBError:Qz,hdb_errors:zz}=W(),{HDB_ERROR_MSGS:nw,HTTP_STATUS_CODES:Jz}=zz;iw.exports=Xz;async function Xz(e){if(mm.isEmpty(e.schema))throw new Error(nw.SCHEMA_REQUIRED_ERR);if(mm.isEmpty(e.table))throw new Error(nw.TABLE_REQUIRED_ERR);let t=mm.checkSchemaTableExist(e.schema,e.table);if(t)throw Qz(new Error,t,Jz.NOT_FOUND,Wz.LOG_LEVELS.ERROR,t,!0);return await Kz.getBackup(read_audit_log_object)}a(Xz,"getBackup")});var dw=m((hae,_w)=>{var gn=require("validate.js"),cw=Pe(),ao=A(),{handleHDBError:Zz,hdb_errors:jz}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:eJ}=jz,Sm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),tJ={STRUCTURE_USER:"structure_user"},aw=Object.values(ao.ROLE_TYPES_ENUM),rJ="attribute_permissions",sJ="attribute_name",{PERMS_CRUD_ENUM:co}=ao,nJ=[rJ,...Object.values(co)],uw=[co.READ,co.INSERT,co.UPDATE],iJ=[sJ,...uw];function oJ(e){let t=Sm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lw(e,t)}a(oJ,"addRoleValidation");function aJ(e){let t=Sm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lw(e,t)}a(aJ,"alterRoleValidation");function cJ(e){let t=Sm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cw.validateObject(e,t)}a(cJ,"dropRoleValidation");var uJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function lw(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)uJ.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=cw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=lJ(e);o&&Qe(o,r),aw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(aw.indexOf(o)<0){if(o===tJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{nJ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(co).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!iJ.includes(T)&&T!==co.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!gn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}uw.forEach(T=>{gn.isDefined(f[T])?gn.isBoolean(f[T])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(T,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return _J(r)}a(lw,"customValidate");_w.exports={addRoleValidation:oJ,alterRoleValidation:aJ,dropRoleValidation:cJ};function lJ(e){let{operation:t,permission:r}=e;if(t===ao.OPERATIONS_ENUM.ADD_ROLE||t===ao.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ao.ROLE_TYPES_ENUM.SUPER_USER:ao.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(lJ,"validateNoSUPerms");function _J(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:Ve.ROLE_PERMS_ERROR,...e};return Zz(new Error,s,eJ.BAD_REQUEST)}else return null}a(_J,"generateRolePermResponse");function Qe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Qe,"addPermError")});var Om=m((Sae,mw)=>{"use strict";var Ew=Nr(),fw=Or(),dJ=jn(),Tm=dw(),Rm=Gs(),EJ=require("uuid").v4,fJ=require("util"),Yl=A(),hJ=V(),gm=fw.searchByValue,mJ=fw.searchByHash,SJ=fJ.promisify(dJ.delete),pJ=os(),TJ=Xi(),{hdb_errors:RJ,handleHDBError:uo}=W(),{HDB_ERROR_MSGS:hw,HTTP_STATUS_CODES:Kl}=RJ,{UserEventMsg:Am}=qr();mw.exports={addRole:gJ,alterRole:AJ,dropRole:OJ,listRoles:NJ};function pm(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(pm,"scrubRoleDetails");async function gJ(e){let t=Tm.addRoleValidation(e);if(t)throw t;e=pm(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 gm(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,hw.ROLE_ALREADY_EXISTS(e.role),Kl.CONFLICT,void 0,void 0,!0);e.id||(e.id=EJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ew.insert(n),Rm.signalUserChange(new Am(process.pid)),e=pm(e),e}a(gJ,"addRole");async function AJ(e){let t=Tm.alterRoleValidation(e);if(t)throw t;e=pm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await Ew.update(r)}catch(n){throw uo(n)}if(s&&s?.message==="updated 0 of 1 records")throw uo(new Error,"Invalid role id",Kl.BAD_REQUEST,void 0,void 0,!0);return await Rm.signalUserChange(new Am(process.pid)),e}a(AJ,"alterRole");async function OJ(e){let t=Tm.dropRoleValidation(e);if(t)throw uo(new Error,t,Kl.BAD_REQUEST,void 0,void 0,!0);let r=new TJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await mJ(r));if(s.length===0)throw uo(new Error,hw.ROLE_NOT_FOUND,Kl.NOT_FOUND,void 0,void 0,!0);let n=new pJ(Yl.SYSTEM_SCHEMA_NAME,Yl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await gm(n)),o=!1;if(hJ.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 SJ(c),Rm.signalUserChange(new Am(process.pid)),`${s[0].role} successfully deleted`}a(OJ,"dropRole");async function NJ(){return gm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(NJ,"listRoles")});var Rw=m((Tae,Tw)=>{"use strict";var bJ=Q(),An=require("joi"),yJ=Pe(),Sw=require("moment"),IJ=require("fs-extra"),Nm=require("path"),wJ=require("lodash"),Xa=A(),{LOG_LEVELS:ci}=A(),CJ="YYYY-MM-DD hh:mm:ss",UJ=Nm.resolve(__dirname,"../logs");Tw.exports=function(e){return yJ.validateBySchema(e,DJ)};var DJ=An.object({from:An.custom(pw),until:An.custom(pw),level:An.valid(ci.NOTIFY,ci.FATAL,ci.ERROR,ci.WARN,ci.INFO,ci.DEBUG,ci.TRACE),order:An.valid("asc","desc"),limit:An.number().min(1),start:An.number().min(0),log_name:An.custom(LJ)});function pw(e,t){if(Sw(e,Sw.ISO_8601).format(CJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pw,"validateDatetime");function LJ(e,t){if(wJ.invert(Xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=bJ.get(Xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Xa.LOG_NAMES.HDB:e,i=n===Xa.LOG_NAMES.INSTALL?Nm.join(UJ,Xa.LOG_NAMES.INSTALL):Nm.join(s,n);return IJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(LJ,"validateReadLogPath")});var ym=m((gae,Aw)=>{"use strict";var Wl=A(),MJ=x(),PJ=Q(),vJ=Rw(),bm=require("path"),gw=require("fs-extra"),{once:BJ}=require("events"),{handleHDBError:HJ,hdb_errors:FJ}=W(),{PACKAGE_ROOT:qJ}=A(),GJ=bm.join(qJ,"logs"),xJ=1e3,kJ=200;Aw.exports=VJ;async function VJ(e){let t=vJ(e);if(t)throw HJ(t,t.message,FJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=PJ.get(Wl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Wl.LOG_NAMES.HDB:e.log_name,n=s===Wl.LOG_NAMES.INSTALL?bm.join(GJ,Wl.LOG_NAMES.INSTALL):bm.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?xJ:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,T=0;E==="desc"&&!u&&!_&&(T=Math.max(gw.statSync(n).size-(h+5)*kJ,0));let p=gw.createReadStream(n,{start:T});p.on("error",b=>{MJ.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,F;for(;(F=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,F.index),U($));let[Oe,Ze,iu]=F,Li=iu.split("] ["),Vo=Li[0],Fn=Li[1];Li.splice(0,2),$={timestamp:Ze,thread:Vo,level:Fn,tags:Li,message:""},z=F.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,F;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),b.level===o&&P>=z&&P<=F&&R<f?R++:b.level===o&&P>=z&&P<=F&&(On(b,E,O),R++,R===h&&p.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&R<f?R++:b.level===o&&P>=z&&(On(b,E,O),R++,R===h&&p.destroy());break;case(i&&l):P=new Date(b.timestamp),F=new Date(_),b.level===o&&P<=F&&R<f?R++:b.level===o&&P<=F&&(On(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),P>=z&&P<=F&&R<f?R++:P>=z&&P<=F&&(On(b,E,O),R++,R===h&&p.destroy());break;case i:b.level===o&&R<f?R++:b.level===o&&(On(b,E,O),R++,R===h&&p.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&R<f?R++:P>=z&&R>=f&&(On(b,E,O),R++,R===h&&p.destroy());break;case l:P=new Date(b.timestamp),F=new Date(_),P<=F&&R<f?R++:P<=F&&R>=f&&(On(b,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(On(b,E,O),R++,R===h&&p.destroy())}}return a(U,"onLogMessage"),await BJ(p,"close"),O}a(VJ,"readLog");function On(e,t,r){t==="desc"?$J(e,r):t==="asc"?YJ(e,r):r.push(e)}a(On,"pushLineToResult");function $J(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($J,"insertDescending");function YJ(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(YJ,"insertAscending")});var zl=m((yae,yw)=>{"use strict";var Im=require("joi"),{string:Ql,boolean:Ow,date:KJ}=Im.types(),WJ=Pe(),{validateSchemaExists:Oae,validateTableExists:Nae,validateSchemaName:bae}=rs(),QJ=A(),zJ=Be(),Nw=Q();Nw.initSync();var JJ=Ql.invalid(Nw.get(QJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(zJ.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(),bw={operation:Ql.valid("add_node","update_node"),node_name:JJ,subscriptions:Im.array().items({table:Ql.optional(),schema:Ql.required(),subscribe:Ow.required(),publish:Ow.required().custom(ZJ),start_time:KJ.iso()}).min(1).required()};function XJ(e){return WJ.validateBySchema(e,Im.object(bw))}a(XJ,"addUpdateNodeValidator");function ZJ(e,t){if(t.state.ancestors[2].operation==="add_node"&&e===!1&&t.state.ancestors[0].subscribe===!1)return t.message(`'subscriptions[${t.state.path[1]}]' subscribe and/or publish must be set to true when adding a node`)}a(ZJ,"checkForFalsy");yw.exports={addUpdateNodeValidator:XJ,validation_schema:bw}});var ww=m((wae,Iw)=>{var jJ=Pe(),e2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Iw.exports=function(e){return jJ.validateObject(e,e2)}});var Cm=m((Cae,Cw)=>{"use strict";var t2=A().OPERATIONS_ENUM,wm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=t2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Cw.exports=wm});var Dw=m((Dae,Uw)=>{"use strict";var r2={OPERATION:"operation",REFRESH:"refresh"},Um=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Dm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Uw.exports={JWTTokens:Um,TOKEN_TYPE_ENUM:r2,JWTRSAKeys:Dm}});var ec=m((Mae,vw)=>{"use strict";var ja=require("jsonwebtoken"),Lm=require("fs-extra"),Mm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:s2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=s2,Za=x(),Lw=ol(),Bm=br(),n2=Nr().update,i2=Cm(),o2=Gs(),{UserEventMsg:a2}=qr(),Nn=Q();Nn.initSync();var Pm=require("path"),{JWTTokens:c2,JWTRSAKeys:u2,TOKEN_TYPE_ENUM:Jl}=Dw(),l2=Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",_2=Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Xl="RS256",vm;vw.exports={createTokens:d2,validateOperationToken:f2,refreshOperationToken:E2,validateRefreshToken:Pw};async function d2(e){if(Mm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Mm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Mm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Bm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Za.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await Zl(),s=!1,n=!1;t.role&&t.role.permission&&(s=t.role.permission.super_user===!0,n=t.role.permission.cluster_user===!0);let i={username:e.username,super_user:s,cluster_user:n},o=await Mw(i,r.private_key,r.passphrase),c=await ja.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:_2,algorithm:Xl,subject:Jl.REFRESH}),u=Lw.hash(c),l=new i2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await n2(l)}catch(E){Za.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return o2.signalUserChange(new a2(process.pid)),new c2(o,c)}a(d2,"createTokens");async function Mw(e,t,r){return await ja.sign(e,{key:t,passphrase:r},{expiresIn:l2,algorithm:Xl,subject:Jl.OPERATION})}a(Mw,"signOperationToken");async function Zl(){if(vm===void 0)try{let e=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=Pm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Lm.readFile(e)).toString(),n=(await Lm.readFile(t)).toString(),i=(await Lm.readFile(r)).toString();vm=new u2(i,n,s)}catch(e){throw Za.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return vm}a(Zl,"getJWTRSAKeys");async function E2(e){if(!e)throw Vt(new Error,Yt.INVALID_BODY,$t.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw Vt(new Error,Yt.REFRESH_TOKEN_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);await Pw(e.refresh_token);let t=await Zl(),r=await ja.decode(e.refresh_token);return{operation_token:await Mw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(E2,"refreshOperationToken");async function f2(e){try{let t=await Zl(),r=await ja.verify(e,t.public_key,{algorithms:Xl,subject:Jl.OPERATION});return await Bm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Za.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(f2,"validateOperationToken");async function Pw(e){let t;try{let r=await Zl(),s=await ja.verify(e,r.public_key,{algorithms:Xl,subject:Jl.REFRESH});t=await Bm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Za.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Lw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Pw,"validateRefreshToken")});var Hm=m((Bae,Fw)=>{"use strict";var h2=ww(),lo=require("passport"),m2=require("passport-local").Strategy,S2=require("passport-http").BasicStrategy,p2=require("util"),T2=br(),Hw=p2.callbackify(T2.findAndValidateUser),vae=rr(),R2=A(),Bw=ec();lo.use(new m2(function(e,t,r){Hw(e,t,r)}));lo.use(new S2(function(e,t,r){Hw(e,t,r)}));lo.serializeUser(function(e,t){t(null,e)});lo.deserializeUser(function(e,t){t(null,e)});function g2(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":lo.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===R2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Bw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Bw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:lo.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(g2,"authorize");function A2(e,t){let r=h2(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(A2,"checkPermissions");Fw.exports={authorize:g2,checkPermissions:A2}});var _o=m((Fae,qw)=>{"use strict";var Fm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},qm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};qw.exports={Node:Fm,NodeSubscription:qm}});var xw=m((Gae,Gw)=>{"use strict";var O2=A().OPERATIONS_ENUM,Gm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=O2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Gw.exports=Gm});var tc=m((kae,kw)=>{"use strict";var xm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},km=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)}};kw.exports={RemotePayloadObject:xm,RemotePayloadSubscription:km}});var $w=m(($ae,Vw)=>{"use strict";var Vm=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}};Vw.exports=Vm});var Ww=m((zae,Kw)=>{"use strict";var N2=$w(),Kae=xe(),Yw=ye(),b2=x(),{getSchemaPath:Wae,getTransactionAuditStorePath:Qae}=we(),{getDatabases:y2}=(de(),re(Ne));Kw.exports=I2;async function I2(e){let t=new N2;try{let r=y2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Yw.environmentDataSize(schema_path,e.name),o=await Yw.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){b2.warn(`unable to stat table dbi due to ${r}`)}return t}a(I2,"lmdbGetTableSize")});var zw=m((Xae,Qw)=>{"use strict";var $m=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}};Qw.exports=$m});var Eo=m((tce,jw)=>{"use strict";var w2=require("fs-extra"),C2=require("path"),Ut=require("systeminformation"),bn=x(),U2=nt(),Ym=Be(),e_=A(),D2=Ww(),Zw=Qn(),{getThreadInfo:Jw}=dt(),tS=Q();tS.initSync();var L2=zw(),{openEnvironment:jae}=ye(),{getSchemaPath:ece}=we(),{database:M2}=(de(),re(Ne)),jl;jw.exports={getHDBProcessInfo:zm,getNetworkInfo:Xm,getDiskInfo:Jm,getMemoryInfo:Qm,getCPUInfo:Wm,getTimeInfo:Km,getSystemInformation:Zm,systemInformation:P2,getTableSize:jm,getMetrics:eS};function Km(){return Ut.time()}a(Km,"getTimeInfo");async function Wm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:F,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return bn.error(`error in getCPUInfo: ${e}`),{}}}a(Wm,"getCPUInfo");async function Qm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return bn.error(`error in getMemoryInfo: ${e}`),{}}}a(Qm,"getMemoryInfo");async function zm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await w2.readFile(C2.join(tS.get(e_.CONFIG_PARAMS.ROOTPATH),e_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===e_.NODE_ERROR_CODES.ENOENT)bn.error("Unable to locate 'hdb.pid' file, try stopping and starting HarperDB");else throw s}t.list.forEach(s=>{s.pid===r?e.core.push(s):s.name==="nats-server"&&e.clustering.push(s)});for(let s of e.core)for(let n of t.list)n.pid===s.parentPid&&(n.name==="PM2"||n.command==="PM2")&&(s.parent="PM2");return e}catch(t){return bn.error(`error in getHDBProcessInfo: ${t}`),e}}a(zm,"getHDBProcessInfo");async function Jm(){let e={};try{let{rIO_sec:t,wIO_sec:r,tIO_sec:s,ms:n,...i}=await Ut.disksIO();e.io=i;let{rx_sec:o,tx_sec:c,wx_sec:u,...l}=await Ut.fsStats();return e.read_write=l,e.size=await Ut.fsSize(),e}catch(t){return bn.error(`error in getDiskInfo: ${t}`),e}}a(Jm,"getDiskInfo");async function Xm(){let e={default_interface:null,latency:{},interfaces:[],stats:[],connections:[]};try{return e.default_interface=await Ut.networkInterfaceDefault(),e.latency=await Ut.inetChecksite("google.com"),(await Ut.networkInterfaces()).forEach(s=>{let{internal:n,virtual:i,mtu:o,dhcp:c,dnsSuffix:u,ieee8021xAuth:l,ieee8021xState:_,carrier_changes:d,...E}=s;e.interfaces.push(E)}),(await Ut.networkStats()).forEach(s=>{let{rx_sec:n,tx_sec:i,ms:o,...c}=s;e.stats.push(c)}),e}catch(t){return bn.error(`error in getNetworkInfo: ${t}`),e}}a(Xm,"getNetworkInfo");async function Zm(){if(jl!==void 0)return jl;let e={};try{let{codepage:t,logofile:r,serial:s,build:n,servicepack:i,uefi:o,...c}=await Ut.osInfo();e=c;let u=await Ut.versions("node, npm");return e.node_version=u.node,e.npm_version=u.npm,jl=e,jl}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(Zm,"getSystemInformation");async function jm(){let e=[],t=await Zw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await D2(s));return e}a(jm,"getTableSize");async function eS(){let e=await Zw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=M2({database:r,table:n}).getStats();s[n]={puts:o.puts,deletes:o.deletes,txns:o.txns,pageFlushes:o.pageFlushes,writes:o.writes,pagesWritten:o.pagesWritten,timeDuringTxns:o.timeDuringTxns,timeStartTxns:o.timeStartTxns,timePageFlushes:o.timePageFlushes,timeSync:o.timeSync}}catch(i){bn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(eS,"getMetrics");async function Xw(){if(tS.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await U2.getNATSReferences(),r=await t.streams.info(Ym.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Ym.WORK_QUEUE_CONSUMER_NAMES.stream_name,Ym.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(Xw,"getNatsStreamInfo");async function P2(e){let t=new L2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Zm(),t.time=Km(),t.cpu=await Wm(),t.memory=await Qm(),t.disk=await Jm(),t.network=await Xm(),t.harperdb_processes=await zm(),t.table_size=await jm(),t.metrics=await eS(),t.threads=await Jw(),t.replication=await Xw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Zm();break;case"time":t.time=Km();break;case"cpu":t.cpu=await Wm();break;case"memory":t.memory=await Qm();break;case"disk":t.disk=await Jm();break;case"network":t.network=await Xm();break;case"harperdb_processes":t.harperdb_processes=await zm();break;case"table_size":t.table_size=await jm();break;case"database_metrics":case"metrics":t.metrics=await eS();break;case"threads":t.threads=await Jw();break;case"replication":t.replication=await Xw();break;default:break}return t}a(P2,"systemInformation")});var rS=m((ice,eC)=>{"use strict";var sce=require("fs-extra"),nce=x();eC.exports={version:v2,printVersion:H2,nodeVersion:B2};var yn=ka();function v2(){if(yn)return yn.version}a(v2,"version");function B2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(B2,"nodeVersion");function H2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(H2,"printVersion")});var Vs=m((uce,nC)=>{"use strict";var F2=Nr(),sS=V(),q2=require("util"),ui=A(),tC=Q();tC.initSync();var G2=Hm(),rC=Or(),{Node:ace,NodeSubscription:cce}=_o(),x2=Xi(),k2=xw(),{RemotePayloadObject:V2,RemotePayloadSubscription:$2}=tc(),{handleHDBError:Y2,hdb_errors:K2}=W(),{HTTP_STATUS_CODES:W2,HDB_ERROR_MSGS:Q2}=K2,z2=os(),J2=Eo(),X2=rS(),{getDatabases:Z2}=(de(),re(Ne)),j2=q2.promisify(G2.authorize),e3=rC.searchByHash,t3=rC.searchByValue;nC.exports={authHeaderToUser:r3,isEmpty:s3,getNodeRecord:n3,upsertNodeRecord:i3,buildNodePayloads:o3,checkClusteringEnabled:a3,getAllNodeRecords:c3,getSystemInfo:u3,reverseSubscription:sC};async function r3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await j2(t,null),e}a(r3,"authHeaderToUser");function s3(e){return e==null}a(s3,"isEmpty");async function n3(e){let t=new x2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return e3(t)}a(n3,"getNodeRecord");async function i3(e){let t=new k2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return F2.upsert(t)}a(i3,"upsertNodeRecord");function sC(e){if(sS.isEmpty(e.subscribe)||sS.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(sC,"reverseSubscription");function o3(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,_=sS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=sC(c),f=Z2()[u]?.[l],h=new $2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new V2(r,t,n,s)}a(o3,"buildNodePayloads");function a3(){if(!tC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Y2(new Error,Q2.CLUSTERING_NOT_ENABLED,W2.BAD_REQUEST,void 0,void 0,!0)}a(a3,"checkClusteringEnabled");async function c3(){let e=new z2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await t3(e))}a(c3,"getAllNodeRecords");async function u3(){let e=await J2.getSystemInformation();return{hdb_version:X2.version(),node_version:e.node_version,platform:e.platform}}a(u3,"getSystemInfo")});var nS=m((_ce,dC)=>{"use strict";var t_=nt(),iC=V(),oC=Be(),aC=A(),r_=x(),cC=kl(),l3=Ah(),{RemotePayloadObject:_3}=tc(),{handleHDBError:uC,hdb_errors:d3}=W(),{HTTP_STATUS_CODES:lC}=d3,{NodeSubscription:_C}=_o();dC.exports=E3;async function E3(e,t){let r;try{r=await t_.request(`${t}.${oC.REQUEST_SUFFIX}`,new _3(aC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),r_.trace("Response from remote describe all request:",r)}catch(o){r_.error(`addNode received error from describe all request to remote node: ${o}`);let c=t_.requestErrorHandler(o,"add_node",t);throw uC(new Error,c,lC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===oC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw uC(new Error,o,lC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===aC.SYSTEM_SCHEMA_NAME){await t_.createLocalTableStream(c,u);let h=new _C(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=iC.doesSchemaExist(c),_=s[c]!==void 0,d=u?iC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(r_.trace(`addNode creating schema: ${c}`),await cC.createSchema({operation:"create_schema",schema:c})),!d&&E){r_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new l3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await cC.createTable(h)}await t_.createLocalTableStream(c,u);let f=new _C(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(E3,"reviewSubscriptions")});var i_=m((Ece,hC)=>{"use strict";var{handleHDBError:s_,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:n_}=f3,{addUpdateNodeValidator:h3}=zl(),rc=x(),fC=A(),EC=Be(),m3=V(),iS=nt(),sc=Vs(),S3=Q(),p3=nS(),{Node:T3,NodeSubscription:R3}=_o(),{broadcast:g3}=dt(),A3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",O3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",N3=S3.get(fC.CONFIG_PARAMS.CLUSTERING_NODENAME);hC.exports=b3;async function b3(e,t=!1){rc.trace("addNode called with:",e),sc.checkClusteringEnabled();let r=h3(e);if(r)throw s_(r,r.message,n_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await sc.getNodeRecord(s);if(!m3.isEmptyOrZeroLength(d))throw s_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,n_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await p3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=A3,o;let c=sc.buildNodePayloads(n,N3,fC.OPERATIONS_ENUM.ADD_NODE,await sc.getSystemInfo());rc.trace("addNode sending remote payload:",c);let u;try{u=await iS.request(`${s}.${EC.REQUEST_SUFFIX}`,c)}catch(d){rc.error(`addNode received error from request: ${d}`);let E=iS.requestErrorHandler(d,"add_node",s);throw s_(new Error,E,n_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===EC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw s_(new Error,d,n_.INTERNAL_SERVER_ERROR,"error",d)}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 iS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new R3(f.schema,f.table,f.publish,f.subscribe))}let _=new T3(s,l,u.system_info);return await sc.upsertNodeRecord(_),g3({type:"nats_update"}),i.length>0?o.message=O3:o.message=`Successfully added '${s}' to manifest`,o}a(b3,"addNode")});var aS=m((hce,pC)=>{"use strict";var{handleHDBError:o_,hdb_errors:y3}=W(),{HTTP_STATUS_CODES:a_}=y3,{addUpdateNodeValidator:I3}=zl(),nc=x(),SC=A(),mC=Be(),w3=V(),oS=nt(),ic=Vs(),C3=Q(),{cloneDeep:U3}=require("lodash"),D3=nS(),{NodeSubscription:L3}=_o(),{broadcast:M3}=dt(),P3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",v3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",B3=C3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME);pC.exports=H3;async function H3(e){nc.trace("updateNode called with:",e),ic.checkClusteringEnabled();let t=I3(e);if(t)throw o_(t,t.message,a_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=U3(await ic.getNodeRecord(r));if(w3.isEmptyOrZeroLength(s))throw o_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,a_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await D3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=P3,o;let c=ic.buildNodePayloads(n,B3,SC.OPERATIONS_ENUM.UPDATE_NODE,await ic.getSystemInfo());nc.trace("updateNode sending remote payload:",c);let u;try{u=await oS.request(`${r}.${mC.REQUEST_SUFFIX}`,c)}catch(l){nc.error(`updateNode received error from request: ${l}`);let _=oS.requestErrorHandler(l,"update_node",r);throw o_(new Error,_,a_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===mC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw o_(new Error,l,a_.INTERNAL_SERVER_ERROR,"error",l)}nc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];nc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await oS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await F3(s[0],n,u.system_info),i.length>0?o.message=v3:o.message=`Successfully updated '${r}'`,o}a(H3,"updateNode");async function F3(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 L3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await ic.upsertNodeRecord(s),M3({type:"nats_update"})}a(F3,"updateNodeTable")});var OC=m((Sce,AC)=>{"use strict";var gC=require("joi"),{string:TC}=gC.types(),q3=Pe(),RC=A(),G3=Q(),x3=Be();AC.exports=k3;function k3(e){let t=TC.invalid(G3.get(RC.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),r=gC.object({operation:TC.valid(RC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return q3.validateBySchema(e,r)}a(k3,"removeNodeValidator")});var u_=m((Tce,CC)=>{"use strict";var{handleHDBError:NC,hdb_errors:V3}=W(),{HTTP_STATUS_CODES:bC}=V3,$3=OC(),oc=x(),yC=Vs(),Y3=V(),c_=A(),IC=Be(),wC=nt(),K3=Q(),{RemotePayloadObject:W3}=tc(),{NodeSubscription:Q3}=_o(),z3=Pa(),J3=jn(),{broadcast:X3}=dt(),Z3=K3.get(c_.CONFIG_PARAMS.CLUSTERING_NODENAME);CC.exports=j3;async function j3(e){oc.trace("removeNode called with:",e),yC.checkClusteringEnabled();let t=$3(e);if(t)throw NC(t,t.message,bC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await yC.getNodeRecord(r);if(Y3.isEmptyOrZeroLength(s))throw NC(new Error,`Node '${r}' was not found.`,bC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new W3(c_.OPERATIONS_ENUM.REMOVE_NODE,Z3,[]),i,o=!1;try{i=await wC.request(`${r}.${IC.REQUEST_SUFFIX}`,n),oc.trace("Remove node reply from remote node:",r,i)}catch(u){oc.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];oc.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Q3(_.schema,_.table,!1,!1);await wC.updateWorkStream(d,r)}let c=new z3(c_.SYSTEM_SCHEMA_NAME,c_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await J3.deleteRecord(c),X3({type:"nats_update"}),i?.status===IC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(oc.error("Error returned from remote node:",r,i?.message),`Successfully removed '${r}' from local manifest, however there was an error reaching remote node. Check the logs for more details.`):`Successfully removed '${r}' from manifest`}a(j3,"removeNode")});var LC=m((gce,DC)=>{"use strict";var UC=require("joi"),{string:eX,array:tX}=UC.types(),rX=Pe(),sX=zl();DC.exports=nX;function nX(e){let t=UC.object({operation:eX.valid("configure_cluster").required(),connections:tX.items(sX.validation_schema).required()});return rX.validateBySchema(e,t)}a(nX,"configureClusterValidator")});var cS=m((Oce,HC)=>{"use strict";var iX=A(),l_=x(),oX=V(),aX=u_(),cX=i_(),MC=Vs(),uX=LC(),{handleHDBError:PC,hdb_errors:lX}=W(),{HTTP_STATUS_CODES:vC}=lX,_X="Configure cluster complete.",dX="Failed to configure the cluster. Check the logs for more details.",EX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";HC.exports=fX;async function fX(e){l_.trace("configure cluster called with:",e),MC.checkClusteringEnabled();let t=uX(e);if(t)throw PC(t,t.message,vC.BAD_REQUEST,void 0,void 0,!0);let r=await MC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(BC(aX,{operation:iX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);l_.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(BC(cX,f,f.node_name))}let c=await Promise.allSettled(i);l_.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"&&(l_.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let T=h?.value?.result;typeof T=="string"&&T.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(oX.isEmptyOrZeroLength(u))return{message:_X,connections:l};if(_)return{message:EX,failed_nodes:u,connections:l};throw PC(new Error,dX,vC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(fX,"configureCluster");async function BC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(BC,"functionWrapper")});var qC=m((bce,FC)=>{"use strict";var __=require("joi"),hX=Pe(),{validateSchemaExists:mX,validateTableExists:SX,validateSchemaName:pX}=rs(),TX=__.object({operation:__.string().valid("purge_stream"),schema:__.string().custom(mX).custom(pX).required(),table:__.string().custom(SX).required()});function RX(e){return hX.validateBySchema(e,TX)}a(RX,"purgeStreamValidator");FC.exports=RX});var uS=m((Ice,GC)=>{"use strict";var{handleHDBError:gX,hdb_errors:AX}=W(),{HTTP_STATUS_CODES:OX}=AX,NX=qC(),bX=nt(),yX=Vs();GC.exports=IX;async function IX(e){let t=NX(e);if(t)throw gX(t,t.message,OX.BAD_REQUEST,void 0,void 0,!0);yX.checkClusteringEnabled();let{schema:r,table:s}=e;return await bX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(IX,"purgeStream")});var dS=m((Cce,KC)=>{"use strict";var _S=Vs(),wX=nt(),VC=Q(),d_=A(),li=Be(),CX=V(),lS=x(),{RemotePayloadObject:UX}=tc(),{ErrorCode:xC}=require("nats"),kC=VC.get(d_.CONFIG_PARAMS.CLUSTERING_ENABLED),$C=VC.get(d_.CONFIG_PARAMS.CLUSTERING_NODENAME);KC.exports={clusterStatus:DX,buildNodeStatus:YC};async function DX(){let e={node_name:$C,is_enabled:kC,connections:[]};if(!kC)return e;let t=await _S.getAllNodeRecords();if(CX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(YC(t[s],e.connections));return await Promise.allSettled(r),e}a(DX,"clusterStatus");async function YC(e,t){let r=e.name,s=new UX(d_.OPERATIONS_ENUM.CLUSTER_STATUS,$C,void 0,await _S.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await wX.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,lS.error(`Error getting node status from ${r} `,n))}catch(u){lS.warn(`Error getting node status from ${r}`,u),u.code===xC.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===xC.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new LX(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!==d_.PRE_4_0_0_VERSION&&await _S.upsertNodeRecord(u)}catch(u){lS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(YC,"buildNodeStatus");function LX(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(LX,"NodeStatusObject")});var fS=m((Dce,WC)=>{"use strict";var{handleHDBError:MX,hdb_errors:PX}=W(),{HTTP_STATUS_CODES:vX}=PX,BX=nt(),HX=Vs(),ES=V(),E_=require("joi"),FX=Pe(),qX=2e3,GX=E_.object({timeout:E_.number().min(1),connected_nodes:E_.boolean(),routes:E_.boolean()});WC.exports=xX;async function xX(e){HX.checkClusteringEnabled();let t=FX.validateBySchema(e,GX);if(t)throw MX(t,t.message,vX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||ES.autoCastBoolean(s),o=n===void 0||ES.autoCastBoolean(n),c={nodes:[]},u=await BX.getServerList(r??qX),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:ES.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(xX,"clusterNetwork")});var XC=m((Mce,JC)=>{"use strict";var hS=require("joi"),QC=Pe(),{route_constraints:zC}=NE();JC.exports={setRoutesValidator:kX,deleteRoutesValidator:VX};function kX(e){let t=hS.object({server:hS.valid("hub","leaf").required(),routes:zC.required()});return QC.validateBySchema(e,t)}a(kX,"setRoutesValidator");function VX(e){let t=hS.object({routes:zC.required()});return QC.validateBySchema(e,t)}a(VX,"deleteRoutesValidator")});var SS=m((vce,tU)=>{"use strict";var _i=Tr(),mS=V(),f_=A(),ZC=XC(),{handleHDBError:jC,hdb_errors:$X}=W(),{HTTP_STATUS_CODES:eU}=$X,YX="cluster routes successfully set",KX="cluster routes successfully deleted";tU.exports={setRoutes:WX,getRoutes:QX,deleteRoutes:zX};function WX(e){let t=ZC.setRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=e.server==="hub"?r.hub_routes:r.leaf_routes,n=e.server==="hub"?r.leaf_routes:r.hub_routes,i=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=mS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:YX,set:o,skipped:i}}a(WX,"setRoutes");function QX(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(QX,"getRoutes");function zX(e){let t=ZC.deleteRoutesValidator(e);if(t)throw jC(t,t.message,eU.BAD_REQUEST,void 0,void 0,!0);let r=_i.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let p=n[h];if(d.host===p.host&&d.port===p.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=mS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=mS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(f_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:KX,deleted:i,skipped:o}}a(zX,"deleteRoutes")});var sU=m((Hce,rU)=>{"use strict";var ac=require("alasql"),di=require("recursive-iterator"),$r=x(),JX=V(),cc=A(),pS=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,ZX(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=>cc.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=>!cc.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][cc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=XX(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=>!cc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new ac.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 XX(e){return e.filter(t=>t[cc.PERMS_CRUD_ENUM.READ])}a(XX,"filterReadRestrictedAttrs");function ZX(e,t,r,s,n){jX(e,t,r,s,n)}a(ZX,"interpretAST");function uc(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(uc,"addSchemaTableToMap");function jX(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof ac.yy.Insert?s4(e,t,r):e instanceof ac.yy.Select?e4(e,t,r,s,n):e instanceof ac.yy.Update?t4(e,t,r):e instanceof ac.yy.Delete?r4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(jX,"getRecordAttributesAST");function e4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(JX.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{uc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),uc(c.table,t,r,s,n)});let o=new di(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new di(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new di(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new di(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(e4,"getSelectAttributes");function t4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.table.tableid,n,i.columnid,t,r)}a(t4,"getUpdateAttributes");function r4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;uc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.table.tableid,n,i.columnid,t,r)}a(r4,"getDeleteAttributes");function s4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;uc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&TS(e.into.tableid,n,i.columnid,t,r)}a(s4,"getInsertAttributes");function TS(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(TS,"pushAttribute");rU.exports=pS});var AS=m((qce,aU)=>{var h_=Na(),nU=require("chalk"),lr=x(),iU=require("prompt"),{promisify:n4}=require("util"),RS=A(),i4=require("fs-extra"),o4=require("path"),a4=V(),c4=rS(),oU=Q();oU.initSync();var u4=require("moment"),l4=n4(iU.get),_4=o4.join(oU.getHdbBasePath(),RS.LICENSE_KEY_DIR_NAME,RS.LICENSE_FILE_NAME,RS.LICENSE_FILE_NAME);aU.exports={getFingerprint:E4,setLicense:d4,parseLicense:gS,register:f4,getRegistrationInfo:m4};async function d4(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await gS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(d4,"setLicense");async function E4(){let e={};try{e=await h_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(E4,"getFingerprint");async function gS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=h_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await i4.writeFile(_4,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(gS,"parseLicense");async function f4(){let e=await h4();return gS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(f4,"register");async function h4(){let e=await h_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:nU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:nU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{iU.start()}catch(s){lr.error(s)}let r;try{r=await l4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(h4,"promptForRegistration");async function m4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await h_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(a4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=c4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=u4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(m4,"getRegistrationInfo")});var uU=m((xce,cU)=>{"use strict";var S4=Be(),OS=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+S4.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"}};cU.exports=OS});var dU=m((Vce,_U)=>{"use strict";var lU=Be(),NS=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+lU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+lU.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"}};_U.exports=NS});var fU=m((Yce,EU)=>{"use strict";var bS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};EU.exports=bS});var mU=m((Wce,hU)=>{"use strict";var p4=Be(),yS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+p4.SERVER_SUFFIX.ADMIN,this.password=r}};hU.exports=yS});var CS=m((zce,TU)=>{"use strict";var lc=require("path"),T_=require("fs-extra"),T4=uU(),R4=dU(),g4=fU(),A4=mU(),IS=br(),fo=V(),Kt=Tr(),p_=A(),m_=Be(),{CONFIG_PARAMS:ze}=p_,dc=x(),R_=Q(),SU=qs(),wS=nt(),_c="clustering",O4=1e4,pU=5;TU.exports={generateNatsConfig:N4,removeNatsConfig:b4};async function N4(e=!1,t=void 0){R_.initSync();let r=R_.get(ze.ROOTPATH),s=lc.join(r,_c,m_.PID_FILES.HUB),n=lc.join(r,_c,m_.PID_FILES.LEAF),i=Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=lc.join(r,_c,m_.NATS_CONFIG_FILES.HUB_SERVER),c=lc.join(r,_c,m_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await wS.checkNATSServerInstalled()||g_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await IS.listUsers(),p=Kt.getConfigFromFile(ze.CLUSTERING_USER),R=await IS.getClusterUser();(fo.isEmpty(R)||R.active!==!0)&&g_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await S_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await S_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await S_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await S_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of T.entries())Ze.role.role===p_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new A4(Ze.username,SU.decrypt(Ze.hash))),k.push(new g4(Ze.username,SU.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!fo.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new T4(Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=fo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===p_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await T_.writeJson(o,b),dc.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new R4(Kt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete F.tls.ca_file,(t===void 0||t===p_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await T_.writeJson(c,F),dc.trace(`Leaf server config written to ${c}`))}a(N4,"generateNatsConfig");async function S_(e){let t=R_.get(e);return fo.isEmpty(t)&&g_(`port undefined for '${e}'`),await fo.isPortTaken(t)&&g_(`'${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(S_,"isPortAvailable");function g_(e){let t=`Error generating clustering config: ${e}`;dc.error(t),console.error(t),process.exit(1)}a(g_,"generateNatsConfigError");async function b4(e){let{port:t,config_file:r}=wS.getServerConfig(e),{username:s,decrypt_hash:n}=await IS.getClusterUser(),i=0,o=500;for(;i<pU;){try{let l=await wS.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>=pU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await fo.async_set_timeout(o*i)}let c="0".repeat(O4),u=lc.join(R_.get(ze.ROOTPATH),_c,r);await T_.writeFile(u,c),await T_.remove(u),dc.notify(e,"started.")}a(b4,"removeNatsConfig")});var BS=m((Xce,bU)=>{"use strict";var y4=require("minimist"),{isMainThread:LS,parentPort:AU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:Ec}=He,ds=x(),MS=V(),A_=CS(),ho=nt(),US=Be(),OU=Tr(),Es=HS(),RU=Eo(),I4=EE(),{restartWorkers:O_,onMessageByType:w4}=dt(),{handleHDBError:C4,hdb_errors:U4}=W(),{HTTP_STATUS_CODES:D4}=U4,N_=Q();N_.initSync();var fc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,L4="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",gU="Clustering is not enabled so cannot be restarted",M4="Invalid service",Ei,Yr;bU.exports={restart:NU,restartService:PS};LS&&w4(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?PS({service:e.workerType}):NU({operation:"restart"})});async function NU(e){Yr=Object.keys(e).length===0,Ei=await Es.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=y4(process.argv);if(t.service){await PS(t);return}if(Yr&&!Ei){console.error(L4);return}if(Yr&&console.log(fc),Ei){Es.enterPM2Mode(),ds.notify(fc);let r=I4(Object.keys(He.CONFIG_PARAM_MAP),!0);return MS.isEmptyOrZeroLength(Object.keys(r))||OU.updateConfigValue(void 0,void 0,r,!0,!0),v4(),fc}return LS?(ds.notify(fc),await vS(),setTimeout(()=>{O_()},50)):AU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),fc}a(NU,"restart");async function PS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw C4(new Error,M4,D4.BAD_REQUEST,void 0,void 0,!0);if(Ei=await Es.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!LS)return AU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case Ec.clustering:if(!N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gU;break}Yr&&console.log("Restarting clustering"),ds.notify("Restarting clustering"),await vS();break;case Ec.clustering_config:case Ec["clustering config"]:if(!N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=gU;break}Yr&&console.log("Restarting clustering_config"),ds.notify("Restarting clustering_config"),await Es.reloadClustering();break;case"custom_functions":case"custom functions":case Ec.harperdb:case Ec.http_workers:if(Yr&&!Ei){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),ds.notify("Restarting http_workers"),Ei?await Es.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{O_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(ds.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(PS,"restartService");async function P4(){await ho.publishToStream(`${US.SUBJECT_PREFIXES.TXN}.${US.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,US.WORK_QUEUE_CONSUMER_NAMES.stream_name,ho.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(P4,"postDummyNatsMsg");async function v4(){await vS(),await Es.restart(He.HDB_PROC_DESCRIPTOR),await MS.async_set_timeout(2e3),N_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await DS(),Yr&&(await ho.closeConnection(),process.exit(0))}a(v4,"restartPM2Mode");async function vS(){if(!OU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await RU.getHDBProcessInfo()).clustering.length===0)ds.trace("Clustering not running, restart will start clustering services"),await A_.generateNatsConfig(!0),await Es.startClusteringProcesses(),await Es.startClusteringThreads(),await DS(),Yr&&await ho.closeConnection();else{await P4(),await A_.generateNatsConfig(!0),Ei?(ds.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await Es.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await Es.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await RU.getHDBProcessInfo()).clustering.forEach(n=>{ds.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await MS.async_set_timeout(3e3),await DS(),await ho.updateLocalStreams(),Yr&&await ho.closeConnection(),ds.trace("Restart clustering restarting ingest and reply service threads");let t=O_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=O_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(vS,"restartClustering");async function DS(){await A_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await A_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(DS,"removeNatsConfig")});var BU=m((eue,vU)=>{"use strict";var jce=require("lodash"),Wt=A(),{handleHDBError:yU,hdb_errors:B4}=W(),{HDB_ERROR_MSGS:H4,HTTP_STATUS_CODES:F4}=B4,FS=x();vU.exports={getRolePermissions:G4};var fi=Object.create(null),q4=a(e=>({key:e,perms:{}}),"perms_template_obj"),UU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),DU=a((e=!1,t=!1,r=!1,s=!1)=>({[Wt.PERMS_CRUD_ENUM.READ]:e,[Wt.PERMS_CRUD_ENUM.INSERT]:t,[Wt.PERMS_CRUD_ENUM.UPDATE]:r,[Wt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),qS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...DU(t,r,s,n)}),"table_perms_template"),IU=a((e,t=DU())=>({attribute_name:e,describe:PU(t),[hc]:t[hc],[GS]:t[GS],[xS]:t[xS]}),"attr_perms_template"),wU=a((e,t=!1)=>({attribute_name:e,describe:t,[hc]:t}),"timestamp_attr_perms_template"),{READ:hc,INSERT:GS,UPDATE:xS}=Wt.PERMS_CRUD_ENUM,LU=Object.values(Wt.PERMS_CRUD_ENUM),MU=[hc,GS,xS];function G4(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[Wt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(fi[t]&&fi[t].key===s)return fi[t].perms;let n=x4(e,r);return fi[t]?fi[t].key=s:fi[t]=q4(s),fi[t].perms=n,n}catch(r){if(!e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Wt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw FS.error(s),FS.debug(r),yU(new Error,H4.OUTDATED_PERMS_TRANSLATION_ERROR,F4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw FS.error(s),yU(new Error)}}}a(G4,"getRolePermissions");function x4(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Wt.SYSTEM_SCHEMA_NAME]=s[Wt.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]=k4(t[i]);return}r[i]=UU(),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=V4(c,u);r[i].describe||LU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=qS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=qS()})}),r}a(x4,"translateRolePermissions");function k4(e){let t=UU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=qS(!0,!0,!0,!0,!0)}),t}a(k4,"createStructureUserPermissions");function V4(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 Wt.TIME_STAMP_NAMES.includes(d)&&(E=wU(d,_[hc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=IU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=PU(_),n.attribute_permissions.push(_),c||$4(_,u)}else if(l!==o){let _;Wt.TIME_STAMP_NAMES.includes(l)?_=wU(l):_=IU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=CU(n),n}else return e.describe=CU(e),e}a(V4,"getTableAttrPerms");function CU(e){return LU.filter(t=>e[t]).length>0}a(CU,"getSchemaTableDescribePerm");function PU(e){return MU.filter(t=>e[t]).length>0}a(PU,"getAttributeDescribePerm");function $4(e,t){MU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a($4,"checkForHashPerms")});var HU={};je(HU,{Resources:()=>b_,keyArrayToString:()=>mo,resetResources:()=>Y4,resources:()=>In});function Y4(){return In=new b_}function mo(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var b_,In,mc=Se(()=>{$n();b_=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(Y4,"resetResources");a(mo,"keyArrayToString")});var So,kS=Se(()=>{So=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 Sc={};je(Sc,{authentication:()=>VU,login:()=>eZ,logout:()=>tZ,start:()=>j4});async function VU(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?z4?Q4:[]:W4?K4:[];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 y_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),y_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(y_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await qU.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new C_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?FU.notify(p):FU.error(p)},"authAuditLog"),_;if(s){if(_=po.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await tt.auth(T,p):null;break;case"Bearer":try{_=await(0,w_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,w_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return Z4&&(po.get(h)||(po.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:$s({error:R.message},e)}}po.set(s,_),X4&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):J4&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,I_.getSuperUser)());y_&&(e.session.update=function(f){if(!c){c=(0,xU.v4)();let T=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",T):d?.headers?.set&&d.headers.set("Set-Cookie",T)}return f.id=c,qU.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&In.loginPath?(d.status=302,d.headers.set("Location",In.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new So);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function j4({server:e,port:t}){e.request(VU,{port:t||"all"}),GU||(GU=!0,setInterval(()=>{po=new Map},wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),kU.user.addListener(()=>{po=new Map}))}async function eZ(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 tZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var I_,w_,xU,wr,Rt,C_,kU,FU,K4,W4,Q4,z4,qU,y_,J4,X4,Z4,po,GU,U_=Se(()=>{I_=C(br());Jr();mc();w_=C(ec());de();xU=require("uuid"),wr=C(Q()),Rt=C(A()),C_=C(x());To();kU=C(ya());kS();FU=(0,C_.loggerWithTag)("auth-event");wr.initSync();K4=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),W4=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),Q4=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),z4=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=I_.findAndValidateUser;qU=st({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),y_=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,J4=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,X4=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,Z4=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;a(VU,"authentication");a(j4,"start");a(eZ,"login");a(tZ,"logout")});var JU=m((due,zU)=>{"use strict";var fe=require("joi"),$U=require("fs-extra"),YU=require("path"),Ks=Pe(),KU=Q(),WU=A(),QU=x(),{hdb_errors:rZ}=W(),{HDB_ERROR_MSGS:Dt}=rZ,Ys=/^[a-zA-Z0-9-_]+$/;zU.exports={getDropCustomFunctionValidator:nZ,setCustomFunctionValidator:iZ,addComponentValidator:uZ,dropCustomFunctionProjectValidator:lZ,packageComponentValidator:_Z,deployComponentValidator:dZ,setComponentFileValidator:oZ,getComponentFileValidator:cZ,dropComponentFileValidator:aZ};function D_(e,t,r){try{let s=KU.get(WU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=YU.join(s,t);return $U.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return QU.error(s),r.message(Dt.VALIDATION_ERR)}}a(D_,"checkProjectExists");function pc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(pc,"checkFilePath");function sZ(e,t,r,s){try{let n=KU.get(WU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=YU.join(n,e,t,r+".js");return $U.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return QU.error(n),s.message(Dt.VALIDATION_ERR)}}a(sZ,"checkFileExists");function nZ(e){let t=fe.object({project:fe.string().pattern(Ys).custom(D_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().pattern(Ys).custom(sZ.bind(null,e.project,e.type)).custom(pc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Ks.validateBySchema(e,t)}a(nZ,"getDropCustomFunctionValidator");function iZ(e){let t=fe.object({project:fe.string().pattern(Ys).custom(D_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:fe.string().valid("helpers","routes").required(),file:fe.string().custom(pc).required(),function_content:fe.string().required()});return Ks.validateBySchema(e,t)}a(iZ,"setCustomFunctionValidator");function oZ(e){let t=fe.object({project:fe.string().pattern(Ys).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:fe.string().custom(pc).required(),payload:fe.string().optional(),encoding:fe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ks.validateBySchema(e,t)}a(oZ,"setComponentFileValidator");function aZ(e){let t=fe.object({project:fe.string().pattern(Ys).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:fe.string().custom(pc).optional()});return Ks.validateBySchema(e,t)}a(aZ,"dropComponentFileValidator");function cZ(e){let t=fe.object({project:fe.string().required(),file:fe.string().custom(pc).required(),encoding:fe.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ks.validateBySchema(e,t)}a(cZ,"getComponentFileValidator");function uZ(e){let t=fe.object({project:fe.string().pattern(Ys).custom(D_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ks.validateBySchema(e,t)}a(uZ,"addComponentValidator");function lZ(e){let t=fe.object({project:fe.string().pattern(Ys).custom(D_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ks.validateBySchema(e,t)}a(lZ,"dropCustomFunctionProjectValidator");function _Z(e){let t=fe.object({project:fe.string().pattern(Ys).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:fe.boolean()});return Ks.validateBySchema(e,t)}a(_Z,"packageComponentValidator");function dZ(e){let t=fe.object({project:fe.string().pattern(Ys).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:fe.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:fe.string().optional()});return Ks.validateBySchema(e,t)}a(dZ,"deployComponentValidator")});var KS=m((fue,jU)=>{"use strict";var be=require("fs-extra"),VS=require("fast-glob"),me=require("path"),XU=require("tar-fs"),EZ=require("uuid").v4,$S=require("normalize-path"),hs=JU(),gt=x(),Ie=A(),$e=Q(),L_=Tr(),fZ=V(),{PACKAGE_ROOT:hZ}=A(),{handleHDBError:it,hdb_errors:mZ}=W(),{HDB_ERROR_MSGS:wn,HTTP_STATUS_CODES:ot}=mZ,SZ=me.join(hZ,"application-template"),YS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function ZU(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,wn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(ZU,"isCFEnabled");function pZ(){gt.trace("getting custom api status");let e={};try{e={is_enabled:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,wn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(pZ,"customFunctionsStatus");function TZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{VS.sync($S(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:VS.sync($S(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:VS.sync($S(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,wn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(TZ,"getCustomFunctions");function RZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,wn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(RZ,"getCustomFunction");function gZ(e){ZU(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,wn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(gZ,"setCustomFunction");function AZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=hs.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,wn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(AZ,"dropCustomFunction");function OZ(e){ZU(),e.project&&(e.project=me.parse(e.project).name);let t=hs.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("adding component");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=me.join(r,s);return be.mkdirSync(n,{recursive:!0}),be.copySync(SZ,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,wn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(OZ,"addComponent");function NZ(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);gt.trace("dropping custom function project");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=$e.get(Ie.CONFIG_PARAMS.APPS);if(!fZ.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 L_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,wn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(NZ,"dropCustomFunctionProject");async function bZ(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;gt.trace("packaging component",s);let n;try{n=await be.realpath(me.join(r,s))}catch(u){if(u.code!==Ie.NODE_ERROR_CODES.ENOENT)throw u;try{n=await be.realpath(me.join($e.get(Ie.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===Ie.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await be.ensureDir(YS);let i=me.join(YS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),XU.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(bZ,"packageComponent");async function yZ(e){e.project&&(e.project=me.parse(e.project).name);let t=hs.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(YS,EZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(XU.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return L_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(yZ,"deployComponent");async function IZ(){let e=L_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(IZ,"getComponents");async function wZ(e){let t=hs.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(wZ,"getComponentFile");async function CZ(e){let t=hs.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(CZ,"setComponentFile");async function UZ(e){let t=hs.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),L_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(UZ,"dropComponent");jU.exports={customFunctionsStatus:pZ,getCustomFunctions:TZ,getCustomFunction:RZ,setCustomFunction:gZ,dropCustomFunction:AZ,addComponent:OZ,dropCustomFunctionProject:NZ,packageComponent:bZ,deployComponent:yZ,getComponents:IZ,getComponentFile:wZ,setComponentFile:CZ,dropComponent:UZ}});var WS=m((mue,tD)=>{"use strict";var ms=require("joi"),eD=Pe();tD.exports={readTransactionLogValidator:DZ,deleteTransactionLogsBeforeValidator:LZ};function DZ(e){let t=ms.object({schema:ms.string().required(),table:ms.string().required(),from:ms.date().timestamp(),to:ms.date().timestamp(),limit:ms.number().min(1)});return eD.validateBySchema(e,t)}a(DZ,"readTransactionLogValidator");function LZ(e){let t=ms.object({schema:ms.string().required(),table:ms.string().required(),timestamp:ms.date().timestamp().required()});return eD.validateBySchema(e,t)}a(LZ,"deleteTransactionLogsBeforeValidator")});var P_=m((pue,oD)=>{"use strict";var QS=A(),M_=nt(),rD=V(),sD=Q(),nD=qs(),{handleHDBError:Ro,hdb_errors:MZ}=W(),{HTTP_STATUS_CODES:go}=MZ,{readTransactionLogValidator:PZ,deleteTransactionLogsBeforeValidator:vZ}=WS(),iD="This operation relies on clustering and cannot run with it disable.",BZ="Logs successfully deleted from transaction log.",HZ="All logs successfully deleted from transaction log.";oD.exports={readTransactionLog:FZ,deleteTransactionLogsBefore:qZ};async function*FZ(e){let t=PZ(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!sD.get(QS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,iD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=rD.checkSchemaTableExist(r,s);if(n)throw Ro(new Error,n,go.NOT_FOUND,void 0,void 0,!0);let i=nD.createNatsTableStreamName(r,s),o=await M_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===QS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(FZ,"readTransactionLog");async function qZ(e){let t=vZ(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!sD.get(QS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,iD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=rD.checkSchemaTableExist(r,s);if(i)throw Ro(new Error,i,go.NOT_FOUND,void 0,void 0,!0);let o=nD.createNatsTableStreamName(r,s),{jsm:c}=await M_.getNATSReferences(),u=await M_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=BZ,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=HZ):d=(await M_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(qZ,"deleteTransactionLogsBefore")});var F_=m((Rue,ED)=>{"use strict";var v_=require("joi"),B_=require("path"),aD=require("fs-extra"),{exec:GZ}=require("child_process"),xZ=require("util"),cD=xZ.promisify(GZ),Tc=A(),{handleHDBError:Ao,hdb_errors:kZ}=W(),{HTTP_STATUS_CODES:Oo}=kZ,gc=Q(),VZ=Pe(),Rc=x();gc.initSync();var zS=gc.get(Tc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),uD="npm install --omit=dev --json",$Z=`${uD} --dry-run`;ED.exports={installModules:QZ,auditModules:zZ,installAllRootModules:YZ,uninstallRootModule:KZ,linkHarperdb:WZ};async function YZ(e=!1){await H_(),await Ac(e?"npm install --ignore-scripts":"npm install",gc.get(Tc.CONFIG_PARAMS.ROOTPATH))}a(YZ,"installAllRootModules");async function KZ(e){await Ac(`npm uninstall ${e}`,gc.get(Tc.CONFIG_PARAMS.ROOTPATH))}a(KZ,"uninstallRootModule");async function WZ(){await H_(),await Ac(`npm link ${Tc.PACKAGE_ROOT}`,gc.get(Tc.CONFIG_PARAMS.ROOTPATH))}a(WZ,"linkHarperdb");async function Ac(e,t=void 0){let{stdout:r,stderr:s}=await cD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return Rc.trace(r,s),r.replace(`
11
+ `,"")}a(Ac,"runCommand");async function QZ(e){Rc.info(`starting installModules for request: ${e}`);let t=dD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?$Z:uD;await H_(),await _D(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=B_.join(zS,u),_,d=null;try{let{stdout:E,stderr:f}=await cD(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=aD(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 pc.info(`finished installModules with response ${i}`),i}o(VZ,"installModules");function aD(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}o(aD,"parseNPMStdErr");async function $Z(e){pc.info(`starting auditModules for request: ${e}`);let t=cD(e);if(t)throw Ta(t,t.message,Ra.BAD_REQUEST);let{projects:r}=e;await P_(),await oD(r);let s={};for(let n=0,i=r.length;n<i;n++){let a=r[n],c=M_.join(YS,a);s[a]={npm_output:null,npm_error:null};try{let u=await Rc("npm audit --json",c);s[a].npm_output=JSON.parse(u)}catch(u){s[a].npm_error=aD(u.stderr)}}return pc.info(`finished auditModules with response ${s}`),s}o($Z,"auditModules");async function P_(){try{return await Rc("npm -v"),!0}catch{throw Ta(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Ra.BAD_REQUEST,void 0,void 0,!0)}}o(P_,"checkNPMInstalled");async function oD(e){if(!Array.isArray(e)||e.length===0)throw Ta(new Error,"projects argument must be an array with at least 1 element",Ra.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],a=M_.join(YS,i.toString());if(!await sD.pathExists(a)){t.push(i);continue}let u=M_.join(a,"package.json");await sD.pathExists(u)||r.push(i)}if(t.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Ra.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ta(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Ra.BAD_REQUEST,void 0,void 0,!0)}o(oD,"checkProjectPaths");function cD(e){let t=L_.object({projects:L_.array().min(1).items(L_.string()).required(),dry_run:L_.boolean().default(!1)});return FZ.validateBySchema(e,t)}o(cD,"modulesValidator")});var _D=m((Eue,lD)=>{"use strict";var KS=class{static{o(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};lD.exports=KS});var ED=m((hue,dD)=>{"use strict";var WS=class{static{o(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};dD.exports=WS});var zS=m((Sue,hD)=>{"use strict";var fD=_D(),YZ=ED(),{HDB_ERROR_MSGS:KZ}=rr(),QS=class{static{o(this,"PermissionResponseObject")}constructor(){this.error=KZ.OP_AUTH_PERMS_ERROR,this.unauthorized_access={},this.invalid_schema_items=[]}handleUnauthorizedItem(t){return this.invalid_schema_items=[],this.unauthorized_access=[t],this}handleInvalidItem(t){return this.invalid_schema_items=[t],this.unauthorized_access=[],this}addInvalidItem(t,r,s){if(r&&s){let n=`${r}_${s}`;if(this.unauthorized_access[n])return}this.invalid_schema_items.push(t)}addUnauthorizedTable(t,r,s){let n=new fD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new YZ(c,n[c]);i.push(u)});let a=`${r}_${s}`;if(this.unauthorized_access[a])this.unauthorized_access[a].required_attribute_permissions=i;else{let c=new fD(r,s,[],i);this.unauthorized_access[a]=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}};hD.exports=QS});var q_=m((Tue,DD)=>{"use strict";var JS=Ar(),B_=gr(),wr=ql(),Oc=Wn(),XS=Zn(),WZ=_m(),QZ=sw(),Nc=Or(),H_=Rm(),it=q(),zZ=Om(),JZ=r_(),XZ=nS(),ZZ=a_(),jZ=iS(),ej=aS(),tj=uS(),rj=_S(),ZS=fS(),Ys=x(),sj=jC(),jS=TS(),pD=MS(),Ir=g(),TD=LU(),nj=_a(),RD=Zo(),gD=(I_(),re(hc)),AD=Tr(),_r=kS(),ij=require("alasql"),OD=D_(),ND=v_(),bD=zS(),{handleHDBError:Qt,hdb_errors:yD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:gc}=yD,P=new Map,ID="delete",wn="insert",Ks="read",fi="update",Ac="describe",mD=Oc.describeSchema.name,SD=Oc.describeTable.name,wD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},aj="catchup",oj="handleGetJob",cj="handleGetJobsByStartDate",F_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},uj=[wr.createTable.name,wr.createAttribute.name,wr.dropTable.name,wr.dropAttribute.name],CD={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},F=class{static{o(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};P.set(JS.insert.name,new F(!1,[wn]));P.set(JS.update.name,new F(!1,[fi]));P.set(JS.upsert.name,new F(!1,[wn,fi]));P.set(B_.searchByConditions.name,new F(!1,[Ks]));P.set(B_.searchByHash.name,new F(!1,[Ks]));P.set(B_.searchByValue.name,new F(!1,[Ks]));P.set(B_.search.name,new F(!1,[Ks]));P.set(wr.createSchema.name,new F(!0,[]));P.set(wr.createTable.name,new F(!0,[]));P.set(wr.createAttribute.name,new F(!1,[wn]));P.set(wr.dropSchema.name,new F(!0,[]));P.set(wr.dropTable.name,new F(!0,[]));P.set(wr.dropAttribute.name,new F(!0,[]));P.set(Oc.describeSchema.name,new F(!1,[Ks]));P.set(Oc.describeTable.name,new F(!1,[Ks]));P.set(XS.deleteRecord.name,new F(!1,[ID]));P.set(Nc.addUser.name,new F(!0,[]));P.set(Nc.alterUser.name,new F(!0,[]));P.set(Nc.dropUser.name,new F(!0,[]));P.set(Nc.listUsersExternal.name,new F(!0,[]));P.set(H_.listRoles.name,new F(!0,[]));P.set(H_.addRole.name,new F(!0,[]));P.set(H_.alterRole.name,new F(!0,[]));P.set(H_.dropRole.name,new F(!0,[]));P.set(zZ.name,new F(!0,[]));P.set(JZ.name,new F(!0,[]));P.set(XZ.name,new F(!0,[]));P.set(ZZ.name,new F(!0,[]));P.set(jZ.name,new F(!0,[]));P.set(ej.name,new F(!0,[]));P.set(ZS.setRoutes.name,new F(!0,[]));P.set(ZS.getRoutes.name,new F(!0,[]));P.set(ZS.deleteRoutes.name,new F(!0,[]));P.set(AD.setConfiguration.name,new F(!0,[]));P.set(tj.clusterStatus.name,new F(!0,[]));P.set(rj.name,new F(!0,[]));P.set(jS.getFingerprint.name,new F(!0,[]));P.set(jS.setLicense.name,new F(!0,[]));P.set(XS.deleteFilesBefore.name,new F(!0,[]));P.set(XS.deleteAuditLogsBefore.name,new F(!0,[]));P.set(pD.restart.name,new F(!0,[]));P.set(pD.restartService.name,new F(!0,[]));P.set(WZ.name,new F(!0,[]));P.set(QZ.name,new F(!0,[Ks]));P.set(nj.systemInformation.name,new F(!0,[]));P.set(AD.getConfiguration.name,new F(!0,[]));P.set(OD.readTransactionLog.name,new F(!0,[]));P.set(OD.deleteTransactionLogsBefore.name,new F(!0,[]));P.set(ND.installModules.name,new F(!0,[]));P.set(ND.auditModules.name,new F(!0,[]));P.set(RD.createTokens.name,new F(!1,[]));P.set(RD.refreshOperationToken.name,new F(!1,[]));P.set(gD.login.name,new F(!1,[]));P.set(gD.logout.name,new F(!1,[]));P.set(_r.customFunctionsStatus.name,new F(!0,[]));P.set(_r.getCustomFunctions.name,new F(!0,[]));P.set(_r.getComponents.name,new F(!0,[]));P.set(_r.getComponentFile.name,new F(!0,[]));P.set(_r.setComponentFile.name,new F(!0,[]));P.set(_r.dropComponent.name,new F(!0,[]));P.set(_r.getCustomFunction.name,new F(!0,[]));P.set(_r.setCustomFunction.name,new F(!0,[]));P.set(_r.dropCustomFunction.name,new F(!0,[]));P.set(_r.addComponent.name,new F(!0,[]));P.set(_r.dropCustomFunctionProject.name,new F(!0,[]));P.set(_r.packageComponent.name,new F(!0,[]));P.set(_r.deployComponent.name,new F(!0,[]));P.set(jS.getRegistrationInfo.name,new F(!1,[]));P.set(Nc.userInfo.name,new F(!1,[]));P.set(Oc.describeAll.name,new F(!1,[]));P.set(oj,new F(!1,[]));P.set(cj,new F(!0,[]));P.set(aj,new F(!0,[]));P.set(F_.CSV_DATA_LOAD,new F(!1,[wn,fi]));P.set(F_.CSV_URL_LOAD,new F(!1,[wn,fi]));P.set(F_.CSV_FILE_LOAD,new F(!1,[wn,fi]));P.set(F_.IMPORT_FROM_S3,new F(!1,[wn,fi]));P.set(CD.EXPORT_TO_S3,new F(!0,[]));P.set(CD.EXPORT_LOCAL,new F(!0,[]));P.set(Ir.VALID_SQL_OPS_ENUM.DELETE,new F(!1,[ID]));P.set(Ir.VALID_SQL_OPS_ENUM.SELECT,new F(!1,[Ks]));P.set(Ir.VALID_SQL_OPS_ENUM.INSERT,new F(!1,[wn]));P.set(Ir.VALID_SQL_OPS_ENUM.UPDATE,new F(!1,[fi]));DD.exports={verifyPerms:_j,verifyPermsAst:lj,verifyBulkLoadAttributePerms:Ej};function lj(e,t,r){if(Ys.isEmptyOrZeroLength(e))throw it.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Ys.isEmptyOrZeroLength(t))throw it.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Ys.isEmptyOrZeroLength(r))throw it.info("verify_perms_ast has a null operation parameter"),Qt(new Error);try{let s=new bD,n=new sj(e),i=n.getSchemas(),a=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw it.info("No schemas defined in verifyPermsAst(), will not continue."),Qt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&wD[r])throw Qt(new Error,At.DROP_SYSTEM,gc.FORBIDDEN);if(c&&!u)return null;let l=TD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof ij.yy.Select&&(e=n.updateAttributeWildcardsForRolePerms(l));for(let d=0;d<i.length;d++){let E=n.getTablesBySchemaName(i[d]);E&&a.set(i[d],E)}let _=UD(t,r,a,s);return _||(a.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=tp(t.role.permission,E,d[f]);ep(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Qt(s)}}o(lj,"verifyPermsAst");function _j(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw it.info("null required parameter in verifyPerms"),Qt(new Error,At.DEFAULT_INVALID_REQUEST,gc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,a=new Map;n&&i&&a.set(n,[i]);let c=new bD;if(Ys.isEmptyOrZeroLength(e.hdb_user.role)||Ys.isEmptyOrZeroLength(e.hdb_user.role.permission))return it.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=a.has(Ir.SYSTEM_SCHEMA_NAME)||n===Ir.SYSTEM_SCHEMA_NAME;if(_&&wD[r])throw Qt(new Error,At.DROP_SYSTEM,gc.FORBIDDEN);if(u&&!_||l===!0&&(r===wr.createSchema.name||r===wr.dropSchema.name))return null;if(uj.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=TD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===mD||r===SD){if(n===Ir.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===mD&&(!d[n]||!d[n][Ac]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===SD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Ac]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=UD(e.hdb_user,r,a,c,s);if(E)return E;if(P.get(r)&&P.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ir.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],S=d[n].tables[i];S[Ir.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[Ir.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(y=>y.attribute),e.get_attributes=T)}let f=dj(e),h=tp(e.hdb_user.role.permission,n,i);return ep(f,h,r,i,n,c,s),c.getPermsResponse()}o(_j,"verifyPerms");function UD(e,t,r,s,n){if(Ys.arrayHasEmptyValues([e,t,r]))throw it.info("hasPermissions has an invalid parameter"),Qt(new Error);let i=r.has("system"),a=e.role.permission;if(a.super_user&&(!i||P.get(t).requires_su))return null;if(!P.get(t))throw it.info(`operation ${t} not found.`),Qt(new Error,At.OP_NOT_FOUND(t),gc.BAD_REQUEST);if(P.get(t)&&P.get(t).requires_su)return it.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!a[u]||a[u][Ac]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=a[u].tables[_];if(!d||d[Ac]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=P.get(t).perms;!Ys.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],S=d[T];(S==null||S===!1)&&(it.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw it.error(f),it.error(E),Qt(yD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}o(UD,"hasPermissions");function ep(e,t,r,s,n,i,a){if(!e||!t)throw it.info("no attributes specified in checkAttributePerms."),Qt(new Error);let c=P.get(r).perms;if(!c||c==="")throw it.info(`no permissions found for ${r} in checkAttributePerms().`),Qt(new Error);if(Ys.isEmptyOrZeroLength(t))return it.info("No role permissions set (this is OK)."),null;a&&c.includes(a)&&(c=[a]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Ac]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Ir.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Ks)throw Qt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,gc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}o(ep,"checkAttributePerms");function dj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ir.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){it.info(r)}return t}o(dj,"getRecordAttributes");function tp(e,t,r){let s=new Map;if(Ys.isEmpty(e))return it.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{it.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}o(tp,"getAttributePermissions");function Ej(e,t,r,s,n,i,a){let c=new Set(i),u=tp(e,s,n);ep(c,u,t,n,s,a,r)}o(Ej,"verifyBulkLoadAttributePerms")});var x_=m((gue,BD)=>{"use strict";BD.exports={evaluateSQL:yj,processAST:vD,convertSQLToAST:PD,checkASTPermissions:MD};var fj=Ar(),LD=require("util"),hj=LD.callbackify(fj.insert),mj=gr().search,Sj=eI().update,pj=LD.callbackify(Sj),Tj=rI().convertDelete,Cn=require("alasql"),Rj=q_(),G_=q(),gj=Al(),Aj=x(),bc=g(),{hdb_errors:Oj,handleHDBError:rp}=W(),{HTTP_STATUS_CODES:sp}=Oj;gj(Cn);var Nj=403,bj="There was a problem performing this insert. Please check the logs and try again.",np=class{static{o(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function yj(e,t){let r=e.parsed_sql_object;if(!r){r=PD(e.sql);let s,n=r.ast.statements[0];if(n instanceof Cn.yy.Insert?s=n.into.databaseid:n instanceof Cn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Cn.yy.Update||n instanceof Cn.yy.Delete?s=n.table.databaseid:G_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Cn.yy.Select)&&Aj.isEmptyOrZeroLength(s))return t("No schema specified",null)}vD(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}o(yj,"evaluateSQL");function MD(e,t){let r;try{r=Rj.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}o(MD,"checkASTPermissions");function PD(e){let t=new np;if(!e)throw rp(new Error,"The 'sql' parameter is missing from the request body",sp.BAD_REQUEST);try{let r=e.trim(),s=Cn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
- `);throw s[1]?rp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,sp.BAD_REQUEST):rp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",sp.BAD_REQUEST)}return t}o(PD,"convertSQLToAST");function vD(e,t,r){try{let s=Ij;if(!e.bypass_auth&&!t.permissions_checked){let i=MD(e,t);if(i&&i.length>0)return r(Nj,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case bc.VALID_SQL_OPS_ENUM.SELECT:s=mj,n=t.ast.statements[0];break;case bc.VALID_SQL_OPS_ENUM.INSERT:s=wj;break;case bc.VALID_SQL_OPS_ENUM.UPDATE:s=pj;break;case bc.VALID_SQL_OPS_ENUM.DELETE:s=Tj;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,a)=>{if(i){r(i);return}r(null,a)})}catch(s){return r(s)}}o(vD,"processAST");function Ij(e,t){G_.info(e),t("unknown sql statement")}o(Ij,"nullFunction");function wj({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(a=>a.columnid);try{n.records=Cj(i,e.values)}catch(a){return r(a)}hj(n,(a,c)=>{if(a)return r(a);try{delete c.new_attributes,delete c.txn_time}catch(u){G_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}o(wj,"convertInsert");function Cj(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]]=Cn.compile(`SELECT ${n.toString()} AS [${bc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw G_.error(r),new Error(bj)}}o(Cj,"createDataObjects")});var ip=m((Oue,FD)=>{"use strict";var{S3:Uj,GetObjectCommand:Dj}=require("@aws-sdk/client-s3");FD.exports={getFileStreamFromS3:Lj,getS3AuthObj:HD};async function Lj(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await HD(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Dj(r))).Body}o(Lj,"getFileStreamFromS3");function HD(e,t,r){return new Uj({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}o(HD,"getS3AuthObj")});var k_=m((bue,QD)=>{"use strict";var xD=gr(),Mj=x_(),Pj=ip(),{AsyncParser:vj,Transform:Bj}=require("json2csv"),Ic=require("stream"),dr=x(),ap=require("fs-extra"),Hj=require("path"),Cr=q(),{promisify:kD}=require("util"),yc=x(),{handleHDBError:Je,hdb_errors:Fj}=W(),{HDB_ERROR_MSGS:zt,HTTP_STATUS_CODES:Xe}=Fj,{streamAsJSON:qj}=$E(),{Upload:Gj}=require("@aws-sdk/lib-storage"),qD=["search_by_value","search_by_hash","sql"],GD=["json","csv"],VD="json",$D="csv",xj="Successfully exported JSON locally.",kj="Successfully exported CSV locally.",Vj=1e3,$j=xD.searchByHash,Yj=xD.searchByValue,Kj=kD(Mj.evaluateSQL),Wj=kD(Ic.finished);QD.exports={export_to_s3:Xj,export_local:Qj,toCsvStream:YD};async function Qj(e){Cr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=KD(e);if(!dr.isEmpty(t))throw Cr.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(dr.isEmpty(e.path))throw Cr.error(zt.MISSING_VALUE("path")),Je(new Error,zt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(dr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(Hj.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=dr.buildFolderPath(e.path,r);await zj(e.path);let n=await WD(e);return await Jj(s,e.format,n)}o(Qj,"export_local");async function zj(e){if(Cr.trace("in confirmPath"),dr.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await ap.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Cr.error(s),Je(new Error,s,Xe.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Cr.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}o(zj,"confirmPath");async function Jj(e,t,r){if(Cr.trace("in saveToLocal"),yc.isEmptyOrZeroLength(e))throw Je(new Error,zt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(yc.isEmptyOrZeroLength(t))throw Je(new Error,zt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(yc.isEmpty(r))throw Je(new Error,zt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===VD){let s=ap.createWriteStream(e);return qj(r).pipe(s),await Wj(s),{message:xj,path:e}}else if(t===$D){let s=ap.createWriteStream(e),n=Ic.Readable.from(r),i={},a={objectMode:!0};return await new vj(i,a).fromInput(n).toOutput(s).promise(!1),{message:kj,path:e}}throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}o(Jj,"saveToLocal");async function Xj(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,zt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,zt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,zt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,zt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,zt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,zt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=KD(e);if(!dr.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Cr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await WD(e)}catch(u){throw Cr.error(u),u}let s,n=await Pj.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,a=new Ic.PassThrough;if(e.format===$D){i=e.s3.key+".csv";let u=YD(r);u.on("error",l=>{throw l}),u.pipe(a)}else if(e.format===VD){i=e.s3.key+".json";let u=new Ic.Readable;u.pipe(a),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%Vj===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new Gj({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:a}}).done()}o(Xj,"export_to_s3");function YD(e){let t=Ic.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new Bj(r,s);return t.pipe(n)}o(YD,"toCsvStream");function KD(e){if(Cr.trace("in exportCoreValidation"),dr.isEmpty(e.format))return"format missing";if(GD.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${GD.join(", ")}`;let t=e.search_operation.operation;if(dr.isEmpty(t))return"search_operation.operation missing";if(qD.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${qD.join(", ")}`}o(KD,"exportCoreValidation");async function WD(e){Cr.trace("in getRecords");let t,r;if(yc.isEmpty(e.search_operation)||yc.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,zt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Yj;break;case"search_by_hash":t=$j;break;case"sql":t=Kj;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Cr.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}o(WD,"getRecords")});var eL={};Ze(eL,{contentTypes:()=>ZD,findBestSerializer:()=>K_,getDeserializer:()=>ga,registerContentHandlers:()=>cp,serialize:()=>up,serializeMessage:()=>ks});function Zj(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function cp(e){e.register(e5,{serializers:[{regex:/^application\/json$/,serializer:V_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new hi.EncoderStream(wc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Y_.Readable.from((0,hs.encodeIter)(t,wc)):(0,hs.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,op.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,hs.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,hi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function K_(e){let t=e.headers.accept,r,s=0,n,i,a=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of a){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=dt.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(dt.keys()).join(", "))}};r=dt.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function up(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers["Content-Type"]=e.contentType,r.headers.Vary="Accept-Encoding",n=e.data),e instanceof Uint8Array)r.headers["Content-Type"]="application/octet-stream",r.headers.Vary="Accept-Encoding",n=e;else{let i=K_(t);if(r.headers.Vary="Accept, Accept-Encoding",r.headers["Content-Type"]=i.type,e[Symbol.iterator]&&i.serializer.serializeStream){let a=i.serializer.serializeStream(e);return s&&(r.headers["Content-Encoding"]="br",a=a.pipe((0,$_.createBrotliCompress)({}))),a}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,a)=>(0,$_.brotliCompress)(n,(c,u)=>{c?a(c):i(u)}))):n}function ks(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=K_(t);return r=t.serialize=s.serializer.serialize,r(e)}function t5(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 ga(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=dt.get(e)?.deserialize||JD(e,s);return a=>t5(a).then(i)}return dt.get(e)?.deserialize||JD(e,s)}function JD(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 r5(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 V_,op,hs,hi,$_,Y_,XD,wc,dt,ZD,zD,jD,jj,e5,ma=pe(()=>{V_=D($E()),op=D(k_()),hs=require("msgpackr"),hi=require("cbor-x"),$_=require("zlib"),Y_=require("stream");un();XD=require("../../index"),wc={useRecords:!1,useToJSON:!0};mt.contentType=function(e,t){dt.set(e,t)};dt=new Map,ZD=dt;(0,XD._assignPackageExport)("contentTypes",ZD);dt.set("application/json",{serializeStream:V_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});zD=new hi.Encoder(wc);dt.set("application/cbor",{serializeStream(e){return new hi.EncoderStream(wc).end(e)},serialize:zD.encode,deserialize:zD.decode,q:1});dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Y_.Readable.from((0,hs.encodeIter)(e,wc)):(0,hs.pack)(e)},serialize:hs.pack,deserialize:hs.unpack,q:.9});dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,op.toCsvStream)(e)},q:.1});dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});dt.set("text/event-stream",{serializeStream:function(e){return Y_.Readable.from(r5(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=lD(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 Rc.info(`finished installModules with response ${i}`),i}a(QZ,"installModules");function lD(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(lD,"parseNPMStdErr");async function zZ(e){Rc.info(`starting auditModules for request: ${e}`);let t=dD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r}=e;await H_(),await _D(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=B_.join(zS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Ac("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=lD(u.stderr)}}return Rc.info(`finished auditModules with response ${s}`),s}a(zZ,"auditModules");async function H_(){try{return await Ac("npm -v"),!0}catch{throw Ao(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Oo.BAD_REQUEST,void 0,void 0,!0)}}a(H_,"checkNPMInstalled");async function _D(e){if(!Array.isArray(e)||e.length===0)throw Ao(new Error,"projects argument must be an array with at least 1 element",Oo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=B_.join(zS,i.toString());if(!await aD.pathExists(o)){t.push(i);continue}let u=B_.join(o,"package.json");await aD.pathExists(u)||r.push(i)}if(t.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,Oo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ao(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,Oo.BAD_REQUEST,void 0,void 0,!0)}a(_D,"checkProjectPaths");function dD(e){let t=v_.object({projects:v_.array().min(1).items(v_.string()).required(),dry_run:v_.boolean().default(!1)});return VZ.validateBySchema(e,t)}a(dD,"modulesValidator")});var hD=m((Aue,fD)=>{"use strict";var JS=class{static{a(this,"PermissionTableResponseObject")}constructor(t,r,s=[],n=[]){this.schema=t,this.table=r,this.required_table_permissions=s,this.required_attribute_permissions=n}};fD.exports=JS});var SD=m((Nue,mD)=>{"use strict";var XS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};mD.exports=XS});var jS=m((yue,TD)=>{"use strict";var pD=hD(),JZ=SD(),{HDB_ERROR_MSGS:XZ}=rr(),ZS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=XZ.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 pD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new JZ(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 pD(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}};TD.exports=ZS});var k_=m((wue,vD)=>{"use strict";var ep=Nr(),q_=Or(),Ur=kl(),bc=Qn(),tp=jn(),ZZ=fm(),jZ=ow(),yc=br(),G_=Om(),at=x(),ej=ym(),tj=i_(),rj=aS(),sj=u_(),nj=cS(),ij=uS(),oj=dS(),aj=fS(),rp=SS(),Ws=V(),cj=sU(),sp=AS(),AD=BS(),Cr=A(),OD=BU(),uj=Eo(),ND=ec(),bD=(U_(),re(Sc)),yD=Tr(),_r=KS(),lj=require("alasql"),ID=P_(),wD=F_(),CD=jS(),{handleHDBError:Qt,hdb_errors:UD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:Oc}=UD,M=new Map,DD="delete",Cn="insert",Qs="read",hi="update",Nc="describe",RD=bc.describeSchema.name,gD=bc.describeTable.name,LD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},_j="catchup",dj="handleGetJob",Ej="handleGetJobsByStartDate",x_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},fj=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],MD={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(ep.insert.name,new H(!1,[Cn]));M.set(ep.update.name,new H(!1,[hi]));M.set(ep.upsert.name,new H(!1,[Cn,hi]));M.set(q_.searchByConditions.name,new H(!1,[Qs]));M.set(q_.searchByHash.name,new H(!1,[Qs]));M.set(q_.searchByValue.name,new H(!1,[Qs]));M.set(q_.search.name,new H(!1,[Qs]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Cn]));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(bc.describeSchema.name,new H(!1,[Qs]));M.set(bc.describeTable.name,new H(!1,[Qs]));M.set(tp.deleteRecord.name,new H(!1,[DD]));M.set(yc.addUser.name,new H(!0,[]));M.set(yc.alterUser.name,new H(!0,[]));M.set(yc.dropUser.name,new H(!0,[]));M.set(yc.listUsersExternal.name,new H(!0,[]));M.set(G_.listRoles.name,new H(!0,[]));M.set(G_.addRole.name,new H(!0,[]));M.set(G_.alterRole.name,new H(!0,[]));M.set(G_.dropRole.name,new H(!0,[]));M.set(ej.name,new H(!0,[]));M.set(tj.name,new H(!0,[]));M.set(rj.name,new H(!0,[]));M.set(sj.name,new H(!0,[]));M.set(nj.name,new H(!0,[]));M.set(ij.name,new H(!0,[]));M.set(rp.setRoutes.name,new H(!0,[]));M.set(rp.getRoutes.name,new H(!0,[]));M.set(rp.deleteRoutes.name,new H(!0,[]));M.set(yD.setConfiguration.name,new H(!0,[]));M.set(oj.clusterStatus.name,new H(!0,[]));M.set(aj.name,new H(!0,[]));M.set(sp.getFingerprint.name,new H(!0,[]));M.set(sp.setLicense.name,new H(!0,[]));M.set(tp.deleteFilesBefore.name,new H(!0,[]));M.set(tp.deleteAuditLogsBefore.name,new H(!0,[]));M.set(AD.restart.name,new H(!0,[]));M.set(AD.restartService.name,new H(!0,[]));M.set(ZZ.name,new H(!0,[]));M.set(jZ.name,new H(!0,[Qs]));M.set(uj.systemInformation.name,new H(!0,[]));M.set(yD.getConfiguration.name,new H(!0,[]));M.set(ID.readTransactionLog.name,new H(!0,[]));M.set(ID.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(wD.installModules.name,new H(!0,[]));M.set(wD.auditModules.name,new H(!0,[]));M.set(ND.createTokens.name,new H(!1,[]));M.set(ND.refreshOperationToken.name,new H(!1,[]));M.set(bD.login.name,new H(!1,[]));M.set(bD.logout.name,new H(!1,[]));M.set(_r.customFunctionsStatus.name,new H(!0,[]));M.set(_r.getCustomFunctions.name,new H(!0,[]));M.set(_r.getComponents.name,new H(!0,[]));M.set(_r.getComponentFile.name,new H(!0,[]));M.set(_r.setComponentFile.name,new H(!0,[]));M.set(_r.dropComponent.name,new H(!0,[]));M.set(_r.getCustomFunction.name,new H(!0,[]));M.set(_r.setCustomFunction.name,new H(!0,[]));M.set(_r.dropCustomFunction.name,new H(!0,[]));M.set(_r.addComponent.name,new H(!0,[]));M.set(_r.dropCustomFunctionProject.name,new H(!0,[]));M.set(_r.packageComponent.name,new H(!0,[]));M.set(_r.deployComponent.name,new H(!0,[]));M.set(sp.getRegistrationInfo.name,new H(!1,[]));M.set(yc.userInfo.name,new H(!1,[]));M.set(bc.describeAll.name,new H(!1,[]));M.set(dj,new H(!1,[]));M.set(Ej,new H(!0,[]));M.set(_j,new H(!0,[]));M.set(x_.CSV_DATA_LOAD,new H(!1,[Cn,hi]));M.set(x_.CSV_URL_LOAD,new H(!1,[Cn,hi]));M.set(x_.CSV_FILE_LOAD,new H(!1,[Cn,hi]));M.set(x_.IMPORT_FROM_S3,new H(!1,[Cn,hi]));M.set(MD.EXPORT_TO_S3,new H(!0,[]));M.set(MD.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[DD]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[Qs]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Cn]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[hi]));vD.exports={verifyPerms:mj,verifyPermsAst:hj,verifyBulkLoadAttributePerms:pj};function hj(e,t,r){if(Ws.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Ws.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Ws.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),Qt(new Error);try{let s=new CD,n=new cj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),Qt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&LD[r])throw Qt(new Error,At.DROP_SYSTEM,Oc.FORBIDDEN);if(c&&!u)return null;let l=OD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof lj.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 _=PD(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),T=ip(t.role.permission,E,d[f]);np(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Qt(s)}}a(hj,"verifyPermsAst");function mj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),Qt(new Error,At.DEFAULT_INVALID_REQUEST,Oc.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 CD;if(Ws.isEmptyOrZeroLength(e.hdb_user.role)||Ws.isEmptyOrZeroLength(e.hdb_user.role.permission))return at.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Cr.SYSTEM_SCHEMA_NAME)||n===Cr.SYSTEM_SCHEMA_NAME;if(_&&LD[r])throw Qt(new Error,At.DROP_SYSTEM,Oc.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(fj.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=OD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===RD||r===gD){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===RD&&(!d[n]||!d[n][Nc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===gD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Nc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=PD(e.hdb_user,r,o,c,s);if(E)return E;if(M.get(r)&&M.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Cr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],p=d[n].tables[i];p[Cr.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(O=>O[Cr.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(R=>R.attribute),e.get_attributes=T)}let f=Sj(e),h=ip(e.hdb_user.role.permission,n,i);return np(f,h,r,i,n,c,s),c.getPermsResponse()}a(mj,"verifyPerms");function PD(e,t,r,s,n){if(Ws.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),Qt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw at.info(`operation ${t} not found.`),Qt(new Error,At.OP_NOT_FOUND(t),Oc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Nc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Nc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Ws.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(at.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),Qt(UD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(PD,"hasPermissions");function np(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),Qt(new Error);let c=M.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),Qt(new Error);if(Ws.isEmptyOrZeroLength(t))return at.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Nc]===!1){i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Cr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==Qs)throw Qt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,Oc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(np,"checkAttributePerms");function Sj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Cr.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){at.info(r)}return t}a(Sj,"getRecordAttributes");function ip(e,t,r){let s=new Map;if(Ws.isEmpty(e))return at.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{at.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ip,"getAttributePermissions");function pj(e,t,r,s,n,i,o){let c=new Set(i),u=ip(e,s,n);np(c,u,t,n,s,o,r)}a(pj,"verifyBulkLoadAttributePerms")});var $_=m((Uue,GD)=>{"use strict";GD.exports={evaluateSQL:Dj,processAST:qD,convertSQLToAST:FD,checkASTPermissions:HD};var Tj=Nr(),BD=require("util"),Rj=BD.callbackify(Tj.insert),gj=Or().search,Aj=sI().update,Oj=BD.callbackify(Aj),Nj=iI().convertDelete,Un=require("alasql"),bj=k_(),V_=x(),yj=yl(),Ij=V(),Ic=A(),{hdb_errors:wj,handleHDBError:op}=W(),{HTTP_STATUS_CODES:ap}=wj;yj(Un);var Cj=403,Uj="There was a problem performing this insert. Please check the logs and try again.",cp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function Dj(e,t){let r=e.parsed_sql_object;if(!r){r=FD(e.sql);let s,n=r.ast.statements[0];if(n instanceof Un.yy.Insert?s=n.into.databaseid:n instanceof Un.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Un.yy.Update||n instanceof Un.yy.Delete?s=n.table.databaseid:V_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Un.yy.Select)&&Ij.isEmptyOrZeroLength(s))return t("No schema specified",null)}qD(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(Dj,"evaluateSQL");function HD(e,t){let r;try{r=bj.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(HD,"checkASTPermissions");function FD(e){let t=new cp;if(!e)throw op(new Error,"The 'sql' parameter is missing from the request body",ap.BAD_REQUEST);try{let r=e.trim(),s=Un.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?op(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,ap.BAD_REQUEST):op(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",ap.BAD_REQUEST)}return t}a(FD,"convertSQLToAST");function qD(e,t,r){try{let s=Lj;if(!e.bypass_auth&&!t.permissions_checked){let i=HD(e,t);if(i&&i.length>0)return r(Cj,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ic.VALID_SQL_OPS_ENUM.SELECT:s=gj,n=t.ast.statements[0];break;case Ic.VALID_SQL_OPS_ENUM.INSERT:s=Mj;break;case Ic.VALID_SQL_OPS_ENUM.UPDATE:s=Oj;break;case Ic.VALID_SQL_OPS_ENUM.DELETE:s=Nj;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(qD,"processAST");function Lj(e,t){V_.info(e),t("unknown sql statement")}a(Lj,"nullFunction");function Mj({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=Pj(i,e.values)}catch(o){return r(o)}Rj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){V_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(Mj,"convertInsert");function Pj(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]]=Un.compile(`SELECT ${n.toString()} AS [${Ic.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw V_.error(r),new Error(Uj)}}a(Pj,"createDataObjects")});var up=m((Lue,kD)=>{"use strict";var{S3:vj,GetObjectCommand:Bj}=require("@aws-sdk/client-s3");kD.exports={getFileStreamFromS3:Hj,getS3AuthObj:xD};async function Hj(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await xD(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new Bj(r))).Body}a(Hj,"getFileStreamFromS3");function xD(e,t,r){return new vj({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(xD,"getS3AuthObj")});var Y_=m((Pue,ZD)=>{"use strict";var YD=Or(),Fj=$_(),qj=up(),{AsyncParser:Gj,Transform:xj}=require("json2csv"),Cc=require("stream"),dr=V(),lp=require("fs-extra"),kj=require("path"),Dr=x(),{promisify:KD}=require("util"),wc=V(),{handleHDBError:Je,hdb_errors:Vj}=W(),{HDB_ERROR_MSGS:zt,HTTP_STATUS_CODES:Xe}=Vj,{streamAsJSON:$j}=WE(),{Upload:Yj}=require("@aws-sdk/lib-storage"),VD=["search_by_value","search_by_hash","sql"],$D=["json","csv"],WD="json",QD="csv",Kj="Successfully exported JSON locally.",Wj="Successfully exported CSV locally.",Qj=1e3,zj=YD.searchByHash,Jj=YD.searchByValue,Xj=KD(Fj.evaluateSQL),Zj=KD(Cc.finished);ZD.exports={export_to_s3:r5,export_local:jj,toCsvStream:zD};async function jj(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=JD(e);if(!dr.isEmpty(t))throw Dr.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(dr.isEmpty(e.path))throw Dr.error(zt.MISSING_VALUE("path")),Je(new Error,zt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(dr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(kj.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=dr.buildFolderPath(e.path,r);await e5(e.path);let n=await XD(e);return await t5(s,e.format,n)}a(jj,"export_local");async function e5(e){if(Dr.trace("in confirmPath"),dr.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await lp.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Dr.error(s),Je(new Error,s,Xe.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}a(e5,"confirmPath");async function t5(e,t,r){if(Dr.trace("in saveToLocal"),wc.isEmptyOrZeroLength(e))throw Je(new Error,zt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(wc.isEmptyOrZeroLength(t))throw Je(new Error,zt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(wc.isEmpty(r))throw Je(new Error,zt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===WD){let s=lp.createWriteStream(e);return $j(r).pipe(s),await Zj(s),{message:Kj,path:e}}else if(t===QD){let s=lp.createWriteStream(e),n=Cc.Readable.from(r),i={},o={objectMode:!0};return await new Gj(i,o).fromInput(n).toOutput(s).promise(!1),{message:Wj,path:e}}throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}a(t5,"saveToLocal");async function r5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,zt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,zt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,zt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,zt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,zt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(dr.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,zt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=JD(e);if(!dr.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await XD(e)}catch(u){throw Dr.error(u),u}let s,n=await qj.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Cc.PassThrough;if(e.format===QD){i=e.s3.key+".csv";let u=zD(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===WD){i=e.s3.key+".json";let u=new Cc.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%Qj===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new Yj({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(r5,"export_to_s3");function zD(e){let t=Cc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new xj(r,s);return t.pipe(n)}a(zD,"toCsvStream");function JD(e){if(Dr.trace("in exportCoreValidation"),dr.isEmpty(e.format))return"format missing";if($D.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${$D.join(", ")}`;let t=e.search_operation.operation;if(dr.isEmpty(t))return"search_operation.operation missing";if(VD.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${VD.join(", ")}`}a(JD,"exportCoreValidation");async function XD(e){Dr.trace("in getRecords");let t,r;if(wc.isEmpty(e.search_operation)||wc.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,zt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=Jj;break;case"search_by_hash":t=zj;break;case"sql":t=Xj;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(XD,"getRecords")});var nL={};je(nL,{contentTypes:()=>rL,findBestSerializer:()=>z_,getDeserializer:()=>No,registerContentHandlers:()=>dp,serialize:()=>Ep,serializeMessage:()=>$s});function s5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function dp(e){e.register(i5,{serializers:[{regex:/^application\/json$/,serializer:K_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new mi.EncoderStream(Uc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?Q_.Readable.from((0,Ss.encodeIter)(t,Uc)):(0,Ss.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_p.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ss.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,mi.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function z_(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 Ep(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=z_(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,W_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,W_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function $s(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=z_(t);return r=t.serialize=s.serializer.serialize,r(e)}function o5(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function No(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||eL(e,s);return o=>o5(o).then(i)}return Et.get(e)?.deserialize||eL(e,s)}function eL(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 a5(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 K_,_p,Ss,mi,W_,Q_,tL,Uc,Et,rL,jD,sL,n5,i5,To=Se(()=>{K_=C(WE()),_p=C(Y_()),Ss=require("msgpackr"),mi=require("cbor-x"),W_=require("zlib"),Q_=require("stream");Jr();tL=require("../../index"),Uc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,rL=Et;(0,tL._assignPackageExport)("contentTypes",rL);Et.set("application/json",{serializeStream:K_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});jD=new mi.Encoder(Uc);Et.set("application/cbor",{serializeStream(e){return new mi.EncoderStream(Uc).end(e)},serialize:jD.encode,deserialize:jD.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?Q_.Readable.from((0,Ss.encodeIter)(e,Uc)):(0,Ss.pack)(e)},serialize:Ss.pack,deserialize:Ss.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,_p.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 Q_.Readable.from(a5(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
16
16
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
17
17
  `}return e.id&&(t+="id: "+e.id+`
18
18
  `),e.retry&&(t+="retry: "+e.retry+`
19
19
  `),t+`
20
20
  `}else return"data: "+e+`
21
21
 
22
- `},q:.8});dt.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});jD={type:"application/json",serializeStream:V_.streamAsJSON,serialize:JSON.stringify,deserialize:Zj,q:.8};dt.set("*/*",jD);dt.set("",jD);o(Zj,"tryJSONParse");o(cp,"registerContentHandlers");jj=require("fastify-plugin"),e5=jj(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:a,type:c}=K_(s.raw);n.type(c),n.serializer(a.serializeStream||a.serialize)}),r()},{name:"content-type-negotiation"});o(K_,"findBestSerializer");o(up,"serialize");o(ks,"serializeMessage");o(t5,"streamToBuffer");o(ga,"getDeserializer");o(JD,"deserializerUnknownType");o(r5,"transformIterable")});var Ep={};Ze(Ep,{start:()=>i5});async function n5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Cu(e);let s=performance.now(),n;try{let i=new dp;e.responseHeaders=i;let a=e.url.slice(1),c=_p.getMatch(a);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=ga(e.headers["content-type"],!0)(e.body)}catch(T){throw new Cc.ClientError(T,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.Allow="GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACe, QUERY, COPY, MOVE";return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new Cc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Cc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){s5[0]=f;let T=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),S=e.headers["if-none-match"];S&&T==S?(_?.onDone&&_.onDone(),E=304,_=void 0):i.ETag=T}e.createdResource&&(E=201),e.newLocation&&(i.Location=e.newLocation);let h={status:E,headers:i,body:void 0};return i["Server-Timing"]=`db;dur=${d.toFixed(2)}`,ii(d,"TTFB",n,r),Cl(E<400,"success",n,r),_!==void 0&&(h.body=up(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let a=performance.now()-s;ii(a,"TTFB",n,r),Cl(!1,"success",n,r),i.http_resp_code||console.error(i);let c={};return i.http_resp_code===405&&(i.method&&(i.message+=` to handle HTTP method ${i.method.toUpperCase()||""}`),i.allow&&(i.allow.push("trace","head","options"),c.Allow=i.allow.map(u=>u.toUpperCase()).join(", "))),{status:i.http_resp_code||500,headers:c,body:ks(i.toString(),e)}}}function i5(e){if(tL)return;tL=!0,_p=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return n5(r,s)}),e.server.ws(async(r,s,n)=>{rL++,lp||(setTimeout(()=>{console.log("connection count",rL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),lp=!1},1e3),lp=!0),t(s);let i=new Jr;r.on("error",console.error);let a;r.on("message",o(function(d){a||(a=ga(s.headers["content-type"]));let E=a(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await _p.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(ks(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(ks(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),a=EXTENSION_TYPES[i];a&&(r.headers.accept=a)}}o(t,"startRequest")}var Cc,Ot,s5,tL,_p,rL,lp,dp,sL=pe(()=>{ma();ji();Cc=D(W());Uu();so();Vn();Ot=new Uint8Array(8),s5=new Float64Array(Ot.buffer,0,1);o(n5,"http");rL=0;o(i5,"start");dp=class{static{o(this,"Headers")}set(t,r){this[t]=r}}});var fp=m((Bue,nL)=>{var{recordAction:W_,recordActionBinary:a5}=(ji(),re(Ul)),o5=require("fastify-plugin"),c5=200;nL.exports=o5(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let a=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),W_(a,"TTFB",l,d,_),a5(n.raw.statusCode<400,"success",l,d,_);let E=c5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{W_(performance.now()-c,"transfer",l,d,_),W_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,W_(E,"bytes-sent",l,d,_));let f=a.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var pp=m((Hue,uL)=>{var Z_=require("clone"),j_=Pe(),u5=x(),J_=g(),l5=q(),Q_=require("fs"),hp=require("joi"),{string:X_}=hp.types(),{hdb_errors:_5,handleHDBError:Uc}=W(),{HDB_ERROR_MSGS:d5,HTTP_STATUS_CODES:z_}=_5,{common_validators:Aa}=ts(),iL=1e9,aL=" is required",E5=["insert","update","upsert"],mp={database:{presence:!1,format:Aa.schema_format,length:Aa.schema_length},schema:{presence:!1,format:Aa.schema_format,length:Aa.schema_length},table:{presence:!0,format:Aa.schema_format,length:Aa.schema_length},action:{inclusion:{within:E5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},f5={schema:X_.required(),table:X_.required(),action:X_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:h5,AWS_SECRET:m5,AWS_BUCKET:S5,AWS_FILE_KEY:p5,REGION:T5}=J_.S3_BUCKET_AUTH_KEYS,R5={s3:{presence:!0},[`s3.${h5}`]:{presence:!0,type:"String"},[`s3.${m5}`]:{presence:!0,type:"String"},[`s3.${S5}`]:{presence:!0,type:"String"},[`s3.${p5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${T5}`]:{presence:!0,type:"String"}},oL=Z_(mp);oL.data.presence={message:aL};var cL=Z_(mp);cL.file_path.presence={message:aL};var g5=Object.assign(Z_(mp),R5),Sp=Z_(f5);Sp.csv_url=X_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Sp.passthrough_headers=hp.object();function A5(e){let t=j_.validateObject(e,oL);return ed(e,t)}o(A5,"dataObject");function O5(e){let t=j_.validateBySchema(e,hp.object(Sp));return ed(e,t)}o(O5,"urlObject");function N5(e){let t=j_.validateObject(e,cL);return ed(e,t)}o(N5,"fileObject");function b5(e){let t=j_.validateObject(e,g5);return ed(e,t)}o(b5,"s3FileObject");function ed(e,t){if(!t){let r=u5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Uc(new Error,r,z_.BAD_REQUEST);if(e.operation===J_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{Q_.accessSync(e.file_path,Q_.constants.R_OK|Q_.constants.F_OK)}catch(s){return s.code===J_.NODE_ERROR_CODES.ENOENT?Uc(s,`No such file or directory ${s.path}`,z_.BAD_REQUEST):s.code===J_.NODE_ERROR_CODES.EACCES?Uc(s,`Permission denied ${s.path}`,z_.BAD_REQUEST):Uc(s)}try{let s=Q_.statSync(e.file_path).size;if(s>iL)return Uc(new Error,d5.MAX_FILE_SIZE_ERR(s,iL),z_.BAD_REQUEST)}catch(s){l5.error(s),console.error(s)}}}return t}o(ed,"postValidateChecks");uL.exports={dataObject:A5,urlObject:O5,fileObject:N5,s3FileObject:b5}});var Tp=m((que,lL)=>{"use strict";var Dc=q(),td=g();async function y5(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===td.OPERATIONS_ENUM.INSERT||t.operation===td.OPERATIONS_ENUM.UPDATE||t.operation===td.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===td.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Dc.info(i.message),i):i.http_resp_msg?(Dc.error(`Error calling operation: ${e.name}`),Dc.error(i.http_resp_msg),i):(Dc.error(`Error calling operation: ${e.name}`),Dc.error(i),i)}}o(y5,"callOperationFunctionAsAwait");lL.exports={callOperationFunctionAsAwait:y5}});var dL=m((xue,_L)=>{"use strict";var Rp=class{static{o(this,"BulkLoadFileObject")}constructor(t,r,s,n,i,a,c=null){this.op=t,this.action=r,this.schema=s,this.table=n,this.file_path=i,this.file_type=a,this.role_perms=c}},gp=class{static{o(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};_L.exports={BulkLoadFileObject:Rp,BulkLoadDataObject:gp}});var fL=m((Vue,EL)=>{"use strict";var Ap=class{static{o(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};EL.exports=Ap});var wp=m((zue,DL)=>{"use strict";var rd=Ar(),nd=pp(),I5=require("needle"),Kr=g(),Yue=Be(),Oa=x(),{handleHDBError:Fe,hdb_errors:OL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:at,CHECK_LOGS_WRAPPER:Si}=OL,Na=q(),Op=require("papaparse");Oa.promisifyPapaParse();var Wr=require("fs-extra"),w5=require("path"),{chain:hL}=require("stream-chain"),mL=require("stream-json/streamers/StreamArray"),SL=require("stream-json/utils/Batch"),pL=require("stream-chain/utils/comp"),{finished:TL}=require("stream"),C5=Q(),NL=Tp(),U5=ip(),{BulkLoadFileObject:bp,BulkLoadDataObject:D5}=dL(),yp=zS(),{verifyBulkLoadAttributePerms:bL}=q_(),Kue=fL(),Wue=rt(),Que=Hs(),{databases:L5}=(de(),re(Ne)),{coerceType:M5}=(id(),re(Cp)),RL="No records parsed from csv file.",mi=`${C5.get("HDB_ROOT")}/tmp`,{schema_regex:P5}=ts(),gL=1024*1024*2,AL=5e3,v5={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};DL.exports={csvDataLoad:B5,csvURLLoad:H5,csvFileLoad:F5,importFromS3:q5};async function B5(e,t){let r=nd.dataObject(e);if(r)throw Fe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=wL(e.schema,e.table),i=Op.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Np.bind(null,n),dynamicTyping:!1}),a=new yp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&bL(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,a);let c=a.getPermsResponse();if(c)throw Fe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new D5(e.action,e.schema,e.table,i.data);return s=await NL.callOperationFunctionAsAwait(CL,u,null),s.message===RL?RL:UL(s.records,s.number_written)}catch(n){throw pi(n)}}o(B5,"csvDataLoad");async function H5(e){let t=nd.urlObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${mi}/${r}`;try{await G5(e,r)}catch(n){throw Na.error(at.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,Si(at.DOWNLOAD_FILE_ERR(r)))}try{let n=new bp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Ip(n);return await sd(s),i}catch(n){throw await sd(s),pi(n)}}o(H5,"csvURLLoad");async function F5(e){let t=nd.fileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new bp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Ip(r)}catch(s){throw pi(s)}}o(F5,"csvFileLoad");async function q5(e){let t=nd.s3FileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=w5.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${mi}/${n}`;let i=new bp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await x5(n,e);let a=await Ip(i);return await sd(r),a}catch(s){throw await sd(r),pi(s)}}o(q5,"importFromS3");async function G5(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await I5("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,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}V5(r,e.csv_url),await k5(t,r.raw)}o(G5,"downloadCSVFile");async function x5(e,t){try{let r=`${mi}/${e}`;await Wr.mkdirp(mi),await Wr.writeFile(`${mi}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await U5.getFileStreamFromS3(t);await new Promise((i,a)=>{n.on("error",function(c){a(c)}),n.pipe(s).on("error",function(c){a(c)}).on("close",function(){Na.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Na.error(at.S3_DOWNLOAD_ERR+" - "+r),Fe(r,Si(at.S3_DOWNLOAD_ERR))}}o(x5,"downloadFileFromS3");async function k5(e,t){try{await Wr.mkdirp(mi),await Wr.writeFile(`${mi}/${e}`,t)}catch(r){throw Na.error(at.WRITE_TEMP_FILE_ERR),Fe(r,Si(at.DEFAULT_BULK_LOAD_ERR))}}o(k5,"writeFileToTempFolder");async function sd(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Na.warn(`could not delete temp csv file at ${e}, file does not exist`)}}o(sd,"deleteTempFile");function V5(e,t){if(e.statusCode!==OL.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!v5[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}o(V5,"validateURLResponse");async function Ip(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await $5(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await Y5(e);break;default:throw Fe(new Error,at.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,at.INVALID_FILE_EXT_ERR(e))}return UL(t.records,t.number_written)}catch(t){throw pi(t)}}o(Ip,"fileLoad");async function yL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let a={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await rd.validation(a);e.role_perms&&e.role_perms.super_user!==!0&&bL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}o(yL,"validateChunk");async function IL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Oa.autoCastJSONDeep(i),n&&n.pause();let a=s.meta?s.meta.fields:null;if(a)i.forEach(c=>{!Oa.isEmpty(c)&&!Oa.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),a=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await NL.callOperationFunctionAsAwait(CL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,Si(at.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.INSERT_CSV_ERR+" - "+c);r(u)}}o(IL,"insertChunk");async function $5(e){let t={records:0,number_written:0},r=wL(e.schema,e.table);try{let s=new yp,n=Wr.createReadStream(e.file_path,{highWaterMark:gL});n.setEncoding("utf8"),await Op.parsePromise(n,yL.bind(null,e,s),Np.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:gL}),n.setEncoding("utf8"),await Op.parsePromise(n,IL.bind(null,e,t),Np.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,Si(at.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.PAPA_PARSE_ERR+s)}}o($5,"callPapaParse");function wL(e,t){let r=L5[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>M5(i,n));return s}o(wL,"createTransformMap");function Np(e,t,r){let s=e.get(r);return s?s(t):Oa.autoCast(t)}o(Np,"typeFunction");async function Y5(e){let t={records:0,number_written:0},r=o(s=>{throw s},"throwErr");try{let s=new yp,n=hL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),mL.withParser(),c=>c.value,new SL({batchSize:AL}),pL(async c=>{await yL(e,s,r,c)})]);await new Promise((c,u)=>{TL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);let a=hL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),mL.withParser(),c=>c.value,new SL({batchSize:AL}),pL(async c=>{await IL(e,t,r,c)})]);return await new Promise((c,u)=>{TL(a,l=>{l?u(l):c()}),a.resume()}),t}catch(s){throw Fe(s,Si(at.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.INSERT_JSON_ERR+s)}}o(Y5,"insertJson");async function CL(e){let t={};try{e.data&&e.data.length>0&&K5(e.data[0])?t=await W5(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Na.info(t.message))}catch(r){throw pi(r)}return t}o(CL,"callBulkFileLoad");function K5(e){let t=Object.keys(e);for(let r of t)if(!P5.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}o(K5,"validateColumnNames");async function W5(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=rd.insert;break;case"update":i=rd.update;break;case"upsert":i=rd.upsert;break;default:throw Fe(new Error,at.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,at.INVALID_ACTION_PARAM_ERR(s))}try{let a=await i(n),c;switch(s){case"insert":c=a.inserted_hashes;break;case"update":c=a.update_hashes;break;case"upsert":c=a.upserted_hashes;break;default:break}if(Array.isArray(a.skipped_hashes)&&a.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)a.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=Oa.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:a.new_attributes}}catch(a){throw pi(a)}}o(W5,"bulkFileLoad");function UL(e,t){return`successfully loaded ${t} of ${e} records`}o(UL,"buildResponseMsg");function pi(e){return Fe(e,Si(at.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,at.DEFAULT_BULK_LOAD_ERR+" - "+e)}o(pi,"buildTopLevelErrMsg")});var ML=m((Xue,LL)=>{"use strict";var Up=class{static{o(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};LL.exports=Up});var BL=m((jue,vL)=>{"use strict";var Q5=g(),PL=require("moment"),z5=require("uuid").v4,Dp=class{static{o(this,"JobObject")}constructor(){this.id=z5(),this.type=void 0,this.start_datetime=PL().valueOf(),this.created_datetime=PL().valueOf(),this.end_datetime=void 0,this.status=Q5.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};vL.exports=Dp});var Lp=m((tle,kL)=>{"use strict";var J5=require("uuid").v4,qL=Ar(),GL=gr(),X5=is(),Z5=Ji(),j5=ML(),qe=g(),e8=BL(),t8=ym(),Ur=q(),r8=mo(),ba=x(),{promisify:s8}=require("util"),Ti=require("moment"),n8=x_(),ad=pp(),HL=Uf(),{deleteTransactionLogsBeforeValidator:i8}=VS(),{handleHDBError:a8,hdb_errors:o8}=W(),{HTTP_STATUS_CODES:c8}=o8,FL=GL.searchByValue,u8=GL.searchByHash,l8=qL.insert,_8=s8(n8.evaluateSQL),d8=qL.update;kL.exports={addJob:h8,updateJob:S8,handleGetJob:E8,handleGetJobsByStartDate:f8,getJobById:xL};async function E8(e){try{let t=await xL(e.id);return ba.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ur.error("There was an error getting job",t),new Error(r)}}o(E8,"handleGetJob");async function f8(e){try{let t=await m8(e);if(Ur.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ti(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ti(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Ur.error(r),new Error(r)}}o(f8,"handleGetJobsByStartDate");async function h8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||ba.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Ur.info(_),t.error=_,t}if(!qe.JOB_TYPE_ENUM[e.operation])return Ur.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ad.fileObject(e);break;case qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=ad.urlObject(e);break;case qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ad.dataObject(e);break;case qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ad.s3FileObject(e);break;case qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=HL(e,"date");break;case qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=HL(e,"timestamp");break;case qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=i8(e);break;default:break}if(s)throw a8(s,s.message,c8.BAD_REQUEST,void 0,void 0,!0);let n=new e8;n.type=e.operation===qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new X5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),a;try{a=Array.from(await FL(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}let c=Array.isArray(a)?a:Object.keys(a);if(c&&c.length>0){n.id=J5();try{a=await FL(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}if(c=Array.isArray(a)?a:Object.keys(a),c&&c.length>0)return Ur.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new r8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await l8(u)}catch(_){return Ur.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Ur.trace(_)}return t}o(h8,"addJob");async function m8(e){let t=Ti(e.from_date,Ti.ISO_8601),r=Ti(e.to_date,Ti.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 j5(s,e.hdb_user);try{return await _8(n)}catch(i){throw Ur.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}o(m8,"getJobsInDateRange");async function xL(e){if(ba.isEmptyOrZeroLength(e))return ba.errorizeMessage("Invalid job ID specified.");let t=new Z5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await u8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ur.error(s),ba.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}o(xL,"getJobById");async function S8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(ba.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===qe.JOB_STATUS_ENUM.COMPLETE||e.status===qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ti().valueOf());let t=new t8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await d8(t),r}o(S8,"updateJob")});var QL=m((sle,WL)=>{"use strict";var VL=x(),Jt=g(),p8=require("moment"),od=wp(),cd=q(),$L=Lp(),YL=k_(),KL=Zn(),T8=_t(),R8=D_(),Mp=class{static{o(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function g8(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(VL.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(VL.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Jt.JOB_TYPE_ENUM.csv_file_load:await Ws(e,od.csvFileLoad);break;case Jt.JOB_TYPE_ENUM.csv_url_load:await Ws(e,od.csvURLLoad);break;case Jt.JOB_TYPE_ENUM.csv_data_load:await Ws(e,od.csvDataLoad);break;case Jt.JOB_TYPE_ENUM.import_from_s3:await Ws(e,od.importFromS3);break;case Jt.JOB_TYPE_ENUM.empty_trash:break;case Jt.JOB_TYPE_ENUM.export_local:await Ws(e,YL.export_local);break;case Jt.JOB_TYPE_ENUM.export_to_s3:await Ws(e,YL.export_to_s3);break;case Jt.JOB_TYPE_ENUM.delete_files_before:case Jt.JOB_TYPE_ENUM.delete_records_before:await Ws(e,KL.deleteFilesBefore);break;case Jt.JOB_TYPE_ENUM.delete_audit_logs_before:await Ws(e,KL.deleteAuditLogsBefore);break;case Jt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Ws(e,R8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}o(g8,"parseMessage");async function Ws(e,t){try{e.job.status=Jt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=p8().valueOf(),await $L.updateJob(e.job),await A8(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):cd.error(`There was an error running ${t.name} job with id ${e.job.id}`),cd.error(s),e.job.message=s,e.job.status=Jt.JOB_STATUS_ENUM.ERROR;try{await $L.updateJob(e.job)}catch(n){throw cd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}o(Ws,"runJob");async function A8(e){cd.trace("launching job thread:",e),T8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Jt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}o(A8,"launchJobThread");WL.exports={parseMessage:g8,RunnerMessage:Mp}});var JL=m((ile,zL)=>{"use strict";var Pp=class{static{o(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};zL.exports=Pp});var EM=m((ole,qp)=>{"use strict";var dd=gr(),Hp=x_(),ud=wp(),Qs=ql(),ld=Wn(),Mc=Zn(),O8=_m(),Lc=Or(),_d=Rm(),bt=kS(),ot=q(),N8=Om(),b8=r_(),y8=nS(),I8=a_(),w8=iS(),C8=aS(),U8=uS(),D8=_S(),vp=fS(),XL=k_(),L8=q_(),Fp=Lp(),I=g(),{hdb_errors:vc,handleHDBError:Pc}=W(),{HTTP_STATUS_CODES:ZL}=vc,Bp=TS(),jL=MS(),cM=require("util"),ya=Ar(),M8=dn(),P8=_a(),eM=QL(),tM=Zo(),rM=(I_(),re(hc)),sM=Tr(),nM=D_(),iM=v_(),{setServerUtilities:v8}=(id(),re(Cp)),{CONTEXT:B8}=(Xr(),re(ME)),{_assignPackageExport:H8}=require("../../index"),{transformReq:F8}=x(),q8=Tp(),aM=dd.searchByHash,G8=dd.searchByValue,x8=cM.promisify(dd.search),k8=cM.promisify(Hp.evaluateSQL),V8={[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=JL();async function uM(e,t){try{if(e.body.operation!=="read_log"&&(ot.log_level===I.LOG_LEVELS.INFO||ot.log_level===I.LOG_LEVELS.DEBUG||ot.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...a}=e.body;ot.info(a)}}catch(s){ot.error(s)}let r=await q8.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return V8[e.body.operation]&&M8.setSchemaDataToGlobal(s=>{s&&ot.error(s)}),r}o(uM,"processLocalTransaction");var oM=Y8();qp.exports={chooseOperation:lM,getOperationFunction:_M,operation:dM,processLocalTransaction:uM};v8(qp.exports);function lM(e){let t;try{t=_M(e)}catch(n){throw ot.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Hp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let a=Hp.checkASTPermissions(e,i);if(a)throw ot.error(`${ZL.FORBIDDEN} from operation ${e.operation}`),ot.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Pc(new Error,a,vc.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 a=L8.verifyPerms(i,n);if(a)throw ot.error(`${ZL.FORBIDDEN} from operation ${e.operation}`),ot.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Pc(new Error,a,vc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Pc(n,"There was an error when trying to choose an operation path")}return r}o(lM,"chooseOperation");function _M(e){if(ot.trace(`getOperationFunction with operation: ${e.operation}`),oM.has(e.operation))return oM.get(e.operation);throw Pc(new Error,vc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),vc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}o(_M,"getOperationFunction");H8("operation",dM);function dM(e,t){e.hdb_user=this[B8]?.user,e.bypass_auth=!t;let r=lM(e);return uM({body:e},r)}o(dM,"operation");async function $8(e){ot.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let a;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:a=await ya.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:a=await ya.update(i);break;case I.OPERATIONS_ENUM.UPSERT:a=await ya.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:a=await Mc.deleteRecord(i);break;default:ot.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,a,e)}catch(a){ot.info("Invalid operation in transaction"),ot.error(a)}}o($8,"catchup");async function ms(e){F8(e);let t,r;try{r=await Fp.addJob(e),t=r.createdJob,ot.info("addJob result",r);let s=new eM.RunnerMessage(t,e);return await eM.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ot.error(n),Pc(s,n)}}o(ms,"executeJob");function Y8(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(ya.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(ya.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(ya.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(dd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(aM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(aM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(G8)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(x8)),e.set(I.OPERATIONS_ENUM.SQL,new B(k8)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(ms,ud.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(ms,ud.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(ms,ud.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(ms,ud.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(Qs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(Qs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(Qs.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(Qs.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(Qs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(Qs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(Qs.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(Qs.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(ld.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(ld.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(ld.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(ld.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Mc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Lc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Lc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Lc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Lc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(_d.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(_d.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(_d.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(_d.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Lc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(N8)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(b8)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(y8)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(I8)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(w8)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(C8)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(sM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(U8.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(D8)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(vp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(vp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(vp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(ms,XL.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(ms,Mc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(ms,Mc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(ms,XL.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Fp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Fp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Bp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Bp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Bp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(jL.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(jL.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B($8)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(P8.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(ms,Mc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(O8)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(tM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(tM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(rM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(rM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(sM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(nM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(ms,nM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(iM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(iM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(Qs.getBackup)),e}o(Y8,"initializeOperationFunctionMap")});var fd=m((ule,mM)=>{"use strict";var Gp=g(),K8=x(),Bc=q(),{handleHDBError:xp,hdb_errors:Ed}=W(),{isMainThread:W8}=require("worker_threads"),{Readable:Q8}=require("stream"),fM=require("os"),z8=require("util"),J8=Pm(),X8=z8.promisify(J8.authorize),hM=EM(),{Gzip:Z8}=require("zlib");function j8(e){let t=`Found an uncaught exception with message: ${e.message}. ${fM.EOL}Stack: ${e.stack} ${fM.EOL}Terminating ${W8?"HDB":"thread"}.`;console.error(t),Bc.fatal(t),process.exit(1)}o(j8,"handleServerUncaughtException");function e6(e,t,r){if(Bc[e.logLevel||"error"](e),e.http_resp_code)return typeof e.http_resp_msg!="object"?r.code(e.http_resp_code).send({error:e.http_resp_msg||e.message}):r.code(e.http_resp_code).send(e.http_resp_msg);let s=e.statusCode?e.statusCode:Ed.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)}o(e6,"serverErrorHandler");function t6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=xp(new Error,"Invalid JSON.",Ed.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(K8.isEmpty(e.body.operation)){let s=xp(new Error,"Request body must include an 'operation' property.",Ed.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}o(t6,"reqBodyValidationHandler");function r6(e,t,r){let s;e.body.operation!==Gp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Gp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Gp.OPERATIONS_ENUM.LOGOUT?X8(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Bc.warn(n),Bc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(xp(n,i,Ed.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())}o(r6,"authHandler");async function s6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=hM.chooseOperation(e.body);let n=await hM.processLocalTransaction(e,s);if(n instanceof Q8&&n.headers){for(let[i,a]of n.headers)t.header(i,a);e.headers["accept-encoding"]?.includes("gzip")&&(t.header("content-encoding","gzip"),n=n.pipe(new Z8))}return n}catch(n){throw Bc.error(n),n}}o(s6,"handlePostRequest");mM.exports={authHandler:r6,handlePostRequest:s6,handleServerUncaughtException:j8,serverErrorHandler:e6,reqBodyValidationHandler:t6}});var RM=m((_le,TM)=>{"use strict";var n6=require("fastify-plugin"),{handlePostRequest:SM,authHandler:i6,reqBodyValidationHandler:a6}=fd();async function o6(e){e.decorate("hdbCore",{preValidation:[a6,i6],request:t=>pM(SM(t)),requestWithoutAuthentication:t=>pM(SM(t,!0))})}o(o6,"hdbCore");async function pM(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}o(pM,"convertAsyncIterators");TM.exports=n6(o6)});var AM=m((Ele,gM)=>{"use strict";var kp=require("fs"),Ia=Q();Ia.initSync();var{CONFIG_PARAMS:Hc}=g(),c6=1024*1024*1024;function u6(e){let t=Ia.get(Hc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Ia.get(Hc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:c6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Ia.get(Hc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Ia.get(Hc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),a=Ia.get(Hc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:kp.readFileSync(`${n}`),cert:kp.readFileSync(i)+(a?`
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()}});sL={type:"application/json",serializeStream:K_.streamAsJSON,serialize:JSON.stringify,deserialize:s5,q:.8};Et.set("*/*",sL);Et.set("",sL);a(s5,"tryJSONParse");a(dp,"registerContentHandlers");n5=require("fastify-plugin"),i5=n5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=z_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(z_,"findBestSerializer");a(Ep,"serialize");a($s,"serializeMessage");a(o5,"streamToBuffer");a(No,"getDeserializer");a(eL,"deserializerUnknownType");a(a5,"transformIterable")});var mp={};je(mp,{start:()=>l5});async function u5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Mu(e);let s=performance.now(),n,i=new So;try{e.responseHeaders=i;let o=e.url.slice(1),c=hp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=No(e.headers["content-type"],!0)(e.body)}catch(R){throw new Dc.ClientError(R,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new Dc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Dc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){c5[0]=f;let R=String.fromCharCode(34,(Ot[0]&63)+62,(Ot[0]>>6)+(Ot[1]<<2&63)+62,(Ot[1]>>4)+(Ot[2]<<4&63)+62,(Ot[2]>>2)+62,(Ot[3]&63)+62,(Ot[3]>>6)+(Ot[4]<<2&63)+62,(Ot[4]>>4)+(Ot[5]<<4&63)+62,(Ot[5]>>2)+62,(Ot[6]&63)+62,(Ot[6]>>6)+(Ot[7]<<2&63)+62,34),O=e.headers["if-none-match"];O&&R==O?(_?.onDone&&_.onDone(),E=304,_=void 0):i.set("ETag",R)}e.createdResource&&(E=201),e.newLocation&&i.set("Location",e.newLocation);let h={status:E,headers:i,body:void 0},T=`db;dur=${d.toFixed(2)}`,p=_?.wasLoadedFromSource?.();return p!==void 0&&(p?T+=", miss":f&&i.set("Age",Math.round((Date.now()-f)/1e3))),i.append("Server-Timing",T,!0),ls(d,"TTFB",n,r),eo(E<400,"success",n,r),_!==void 0&&(h.body=Ep(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return ls(c,"TTFB",n,r),eo(!1,"success",n,r),o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(u=>u.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:$s(o.toString(),e)}}}function l5(e){if(iL)return;iL=!0,hp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return u5(r,s)}),e.server.ws(async(r,s,n)=>{oL++,fp||(setTimeout(()=>{console.log("connection count",oL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),fp=!1},1e3),fp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=No(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await hp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send($s(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send($s(_.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 Dc,Ot,c5,iL,hp,oL,fp,aL=Se(()=>{To();oi();Dc=C(W());Pu();oa();$n();kS();Ot=new Uint8Array(8),c5=new Float64Array(Ot.buffer,0,1);a(u5,"http");oL=0;a(l5,"start")});var Sp=m((Kue,cL)=>{var{recordAction:J_,recordActionBinary:_5}=(oi(),re(Ml)),d5=require("fastify-plugin"),E5=200;cL.exports=d5(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),J_(o,"TTFB",l,d,_),_5(n.raw.statusCode<400,"success",l,d,_);let E=E5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{J_(performance.now()-c,"transfer",l,d,_),J_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,J_(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var gp=m((Wue,EL)=>{var td=require("clone"),rd=Pe(),f5=V(),j_=A(),h5=x(),X_=require("fs"),pp=require("joi"),{string:ed}=pp.types(),{hdb_errors:m5,handleHDBError:Lc}=W(),{HDB_ERROR_MSGS:S5,HTTP_STATUS_CODES:Z_}=m5,{common_validators:bo}=rs(),uL=1e9,lL=" is required",p5=["insert","update","upsert"],Tp={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:p5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},T5={schema:ed.required(),table:ed.required(),action:ed.valid("insert","update","upsert")},{AWS_ACCESS_KEY:R5,AWS_SECRET:g5,AWS_BUCKET:A5,AWS_FILE_KEY:O5,REGION:N5}=j_.S3_BUCKET_AUTH_KEYS,b5={s3:{presence:!0},[`s3.${R5}`]:{presence:!0,type:"String"},[`s3.${g5}`]:{presence:!0,type:"String"},[`s3.${A5}`]:{presence:!0,type:"String"},[`s3.${O5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${N5}`]:{presence:!0,type:"String"}},_L=td(Tp);_L.data.presence={message:lL};var dL=td(Tp);dL.file_path.presence={message:lL};var y5=Object.assign(td(Tp),b5),Rp=td(T5);Rp.csv_url=ed.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Rp.passthrough_headers=pp.object();function I5(e){let t=rd.validateObject(e,_L);return sd(e,t)}a(I5,"dataObject");function w5(e){let t=rd.validateBySchema(e,pp.object(Rp));return sd(e,t)}a(w5,"urlObject");function C5(e){let t=rd.validateObject(e,dL);return sd(e,t)}a(C5,"fileObject");function U5(e){let t=rd.validateObject(e,y5);return sd(e,t)}a(U5,"s3FileObject");function sd(e,t){if(!t){let r=f5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Lc(new Error,r,Z_.BAD_REQUEST);if(e.operation===j_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{X_.accessSync(e.file_path,X_.constants.R_OK|X_.constants.F_OK)}catch(s){return s.code===j_.NODE_ERROR_CODES.ENOENT?Lc(s,`No such file or directory ${s.path}`,Z_.BAD_REQUEST):s.code===j_.NODE_ERROR_CODES.EACCES?Lc(s,`Permission denied ${s.path}`,Z_.BAD_REQUEST):Lc(s)}try{let s=X_.statSync(e.file_path).size;if(s>uL)return Lc(new Error,S5.MAX_FILE_SIZE_ERR(s,uL),Z_.BAD_REQUEST)}catch(s){h5.error(s),console.error(s)}}}return t}a(sd,"postValidateChecks");EL.exports={dataObject:I5,urlObject:w5,fileObject:C5,s3FileObject:U5}});var Ap=m((zue,fL)=>{"use strict";var Mc=x(),nd=A();async function D5(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===nd.OPERATIONS_ENUM.INSERT||t.operation===nd.OPERATIONS_ENUM.UPDATE||t.operation===nd.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===nd.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Mc.info(i.message),i):i.http_resp_msg?(Mc.error(`Error calling operation: ${e.name}`),Mc.error(i.http_resp_msg),i):(Mc.error(`Error calling operation: ${e.name}`),Mc.error(i),i)}}a(D5,"callOperationFunctionAsAwait");fL.exports={callOperationFunctionAsAwait:D5}});var mL=m((Xue,hL)=>{"use strict";var Op=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}},Np=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};hL.exports={BulkLoadFileObject:Op,BulkLoadDataObject:Np}});var pL=m((jue,SL)=>{"use strict";var bp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};SL.exports=bp});var Dp=m((ile,vL)=>{"use strict";var id=Nr(),ad=gp(),L5=require("needle"),Kr=A(),tle=Be(),yo=V(),{handleHDBError:Fe,hdb_errors:IL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:pi}=IL,Io=x(),yp=require("papaparse");yo.promisifyPapaParse();var Wr=require("fs-extra"),M5=require("path"),{chain:TL}=require("stream-chain"),RL=require("stream-json/streamers/StreamArray"),gL=require("stream-json/utils/Batch"),AL=require("stream-chain/utils/comp"),{finished:OL}=require("stream"),P5=Q(),wL=Ap(),v5=up(),{BulkLoadFileObject:wp,BulkLoadDataObject:B5}=mL(),Cp=jS(),{verifyBulkLoadAttributePerms:CL}=k_(),rle=pL(),sle=nt(),nle=qs(),{databases:H5}=(de(),re(Ne)),{coerceType:F5}=(cd(),re(Lp)),NL="No records parsed from csv file.",Si=`${P5.get("HDB_ROOT")}/tmp`,{schema_regex:q5}=rs(),bL=1024*1024*2,yL=5e3,G5={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};vL.exports={csvDataLoad:x5,csvURLLoad:k5,csvFileLoad:V5,importFromS3:$5};async function x5(e,t){let r=ad.dataObject(e);if(r)throw Fe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=LL(e.schema,e.table),i=yp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Ip.bind(null,n),dynamicTyping:!1}),o=new Cp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&CL(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,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new B5(e.action,e.schema,e.table,i.data);return s=await wL.callOperationFunctionAsAwait(ML,u,null),s.message===NL?NL:PL(s.records,s.number_written)}catch(n){throw Ti(n)}}a(x5,"csvDataLoad");async function k5(e){let t=ad.urlObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Si}/${r}`;try{await Y5(e,r)}catch(n){throw Io.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,pi(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new wp(this.job_operation_function.name,e.action,e.schema,e.table,s,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Up(n);return await od(s),i}catch(n){throw await od(s),Ti(n)}}a(k5,"csvURLLoad");async function V5(e){let t=ad.fileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new wp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Kr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Up(r)}catch(s){throw Ti(s)}}a(V5,"csvFileLoad");async function $5(e){let t=ad.s3FileObject(e);if(t)throw Fe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=M5.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Si}/${n}`;let i=new wp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await K5(n,e);let o=await Up(i);return await od(r),o}catch(s){throw await od(r),Ti(s)}}a($5,"importFromS3");async function Y5(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await L5("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,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}Q5(r,e.csv_url),await W5(t,r.raw)}a(Y5,"downloadCSVFile");async function K5(e,t){try{let r=`${Si}/${e}`;await Wr.mkdirp(Si),await Wr.writeFile(`${Si}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await v5.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Io.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Io.error(ct.S3_DOWNLOAD_ERR+" - "+r),Fe(r,pi(ct.S3_DOWNLOAD_ERR))}}a(K5,"downloadFileFromS3");async function W5(e,t){try{await Wr.mkdirp(Si),await Wr.writeFile(`${Si}/${e}`,t)}catch(r){throw Io.error(ct.WRITE_TEMP_FILE_ERR),Fe(r,pi(ct.DEFAULT_BULK_LOAD_ERR))}}a(W5,"writeFileToTempFolder");async function od(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Io.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(od,"deleteTempFile");function Q5(e,t){if(e.statusCode!==IL.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!G5[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(Q5,"validateURLResponse");async function Up(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await z5(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await J5(e);break;default:throw Fe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return PL(t.records,t.number_written)}catch(t){throw Ti(t)}}a(Up,"fileLoad");async function UL(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 id.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&CL(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(UL,"validateChunk");async function DL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;yo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!yo.isEmpty(c)&&!yo.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await wL.callOperationFunctionAsAwait(ML,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,pi(ct.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(DL,"insertChunk");async function z5(e){let t={records:0,number_written:0},r=LL(e.schema,e.table);try{let s=new Cp,n=Wr.createReadStream(e.file_path,{highWaterMark:bL});n.setEncoding("utf8"),await yp.parsePromise(n,UL.bind(null,e,s),Ip.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:bL}),n.setEncoding("utf8"),await yp.parsePromise(n,DL.bind(null,e,t),Ip.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,pi(ct.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(z5,"callPapaParse");function LL(e,t){let r=H5[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>F5(i,n));return s}a(LL,"createTransformMap");function Ip(e,t,r){let s=e.get(r);return s?s(t):yo.autoCast(t)}a(Ip,"typeFunction");async function J5(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Cp,n=TL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),RL.withParser(),c=>c.value,new gL({batchSize:yL}),AL(async c=>{await UL(e,s,r,c)})]);await new Promise((c,u)=>{OL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Nt.BAD_REQUEST);let o=TL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),RL.withParser(),c=>c.value,new gL({batchSize:yL}),AL(async c=>{await DL(e,t,r,c)})]);return await new Promise((c,u)=>{OL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,pi(ct.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(J5,"insertJson");async function ML(e){let t={};try{e.data&&e.data.length>0&&X5(e.data[0])?t=await Z5(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Io.info(t.message))}catch(r){throw Ti(r)}return t}a(ML,"callBulkFileLoad");function X5(e){let t=Object.keys(e);for(let r of t)if(!q5.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(X5,"validateColumnNames");async function Z5(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=id.insert;break;case"update":i=id.update;break;case"upsert":i=id.upsert;break;default:throw Fe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=yo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ti(o)}}a(Z5,"bulkFileLoad");function PL(e,t){return`successfully loaded ${t} of ${e} records`}a(PL,"buildResponseMsg");function Ti(e){return Fe(e,pi(ct.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ti,"buildTopLevelErrMsg")});var HL=m((ale,BL)=>{"use strict";var Mp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};BL.exports=Mp});var GL=m((ule,qL)=>{"use strict";var j5=A(),FL=require("moment"),e8=require("uuid").v4,Pp=class{static{a(this,"JobObject")}constructor(){this.id=e8(),this.type=void 0,this.start_datetime=FL().valueOf(),this.created_datetime=FL().valueOf(),this.end_datetime=void 0,this.status=j5.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};qL.exports=Pp});var vp=m((_le,KL)=>{"use strict";var t8=require("uuid").v4,VL=Nr(),$L=Or(),r8=os(),s8=Xi(),n8=HL(),qe=A(),i8=GL(),o8=Cm(),Lr=x(),a8=pa(),wo=V(),{promisify:c8}=require("util"),Ri=require("moment"),u8=$_(),ud=gp(),xL=Mf(),{deleteTransactionLogsBeforeValidator:l8}=WS(),{handleHDBError:_8,hdb_errors:d8}=W(),{HTTP_STATUS_CODES:E8}=d8,kL=$L.searchByValue,f8=$L.searchByHash,h8=VL.insert,m8=c8(u8.evaluateSQL),S8=VL.update;KL.exports={addJob:R8,updateJob:A8,handleGetJob:p8,handleGetJobsByStartDate:T8,getJobById:YL};async function p8(e){try{let t=await YL(e.id);return wo.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Lr.error("There was an error getting job",t),new Error(r)}}a(p8,"handleGetJob");async function T8(e){try{let t=await g8(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=Ri(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ri(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(T8,"handleGetJobsByStartDate");async function R8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!qe.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=ud.fileObject(e);break;case qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=ud.urlObject(e);break;case qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=ud.dataObject(e);break;case qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=ud.s3FileObject(e);break;case qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=xL(e,"date");break;case qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=xL(e,"timestamp");break;case qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=l8(e);break;default:break}if(s)throw _8(s,s.message,E8.BAD_REQUEST,void 0,void 0,!0);let n=new i8;n.type=e.operation===qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new r8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await kL(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=t8();try{o=await kL(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 a8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await h8(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(R8,"addJob");async function g8(e){let t=Ri(e.from_date,Ri.ISO_8601),r=Ri(e.to_date,Ri.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 n8(s,e.hdb_user);try{return await m8(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(g8,"getJobsInDateRange");async function YL(e){if(wo.isEmptyOrZeroLength(e))return wo.errorizeMessage("Invalid job ID specified.");let t=new s8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await f8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),wo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(YL,"getJobById");async function A8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===qe.JOB_STATUS_ENUM.COMPLETE||e.status===qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ri().valueOf());let t=new o8(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await S8(t),r}a(A8,"updateJob")});var ZL=m((Ele,XL)=>{"use strict";var WL=V(),Jt=A(),O8=require("moment"),ld=Dp(),_d=x(),QL=vp(),zL=Y_(),JL=jn(),N8=dt(),b8=P_(),Bp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function y8(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(WL.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(WL.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Jt.JOB_TYPE_ENUM.csv_file_load:await zs(e,ld.csvFileLoad);break;case Jt.JOB_TYPE_ENUM.csv_url_load:await zs(e,ld.csvURLLoad);break;case Jt.JOB_TYPE_ENUM.csv_data_load:await zs(e,ld.csvDataLoad);break;case Jt.JOB_TYPE_ENUM.import_from_s3:await zs(e,ld.importFromS3);break;case Jt.JOB_TYPE_ENUM.empty_trash:break;case Jt.JOB_TYPE_ENUM.export_local:await zs(e,zL.export_local);break;case Jt.JOB_TYPE_ENUM.export_to_s3:await zs(e,zL.export_to_s3);break;case Jt.JOB_TYPE_ENUM.delete_files_before:case Jt.JOB_TYPE_ENUM.delete_records_before:await zs(e,JL.deleteFilesBefore);break;case Jt.JOB_TYPE_ENUM.delete_audit_logs_before:await zs(e,JL.deleteAuditLogsBefore);break;case Jt.JOB_TYPE_ENUM.delete_transaction_logs_before:await zs(e,b8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(y8,"parseMessage");async function zs(e,t){try{e.job.status=Jt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=O8().valueOf(),await QL.updateJob(e.job),await I8(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):_d.error(`There was an error running ${t.name} job with id ${e.job.id}`),_d.error(s),e.job.message=s,e.job.status=Jt.JOB_STATUS_ENUM.ERROR;try{await QL.updateJob(e.job)}catch(n){throw _d.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(zs,"runJob");async function I8(e){_d.trace("launching job thread:",e),N8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Jt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(I8,"launchJobThread");XL.exports={parseMessage:y8,RunnerMessage:Bp}});var eM=m((hle,jL)=>{"use strict";var Hp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};jL.exports=Hp});var SM=m((Sle,kp)=>{"use strict";var hd=Or(),Gp=$_(),dd=Dp(),Js=kl(),Ed=Qn(),vc=jn(),w8=fm(),Pc=br(),fd=Om(),bt=KS(),ut=x(),C8=ym(),U8=i_(),D8=aS(),L8=u_(),M8=cS(),P8=uS(),v8=dS(),B8=fS(),Fp=SS(),tM=Y_(),H8=k_(),xp=vp(),I=A(),{hdb_errors:Hc,handleHDBError:Bc}=W(),{HTTP_STATUS_CODES:rM}=Hc,qp=AS(),sM=BS(),dM=require("util"),Co=Nr(),F8=En(),q8=Eo(),nM=ZL(),iM=ec(),oM=(U_(),re(Sc)),aM=Tr(),cM=P_(),uM=F_(),{setServerUtilities:G8}=(cd(),re(Lp)),{CONTEXT:x8}=(Zr(),re(HE)),{_assignPackageExport:k8}=require("../../index"),{transformReq:V8}=V(),$8=Ap(),lM=hd.searchByHash,Y8=hd.searchByValue,K8=dM.promisify(hd.search),W8=dM.promisify(Gp.evaluateSQL),Q8={[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=eM();async function EM(e,t){try{if(e.body.operation!=="read_log"&&(ut.log_level===I.LOG_LEVELS.INFO||ut.log_level===I.LOG_LEVELS.DEBUG||ut.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;ut.info(o)}}catch(s){ut.error(s)}let r=await $8.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return Q8[e.body.operation]&&F8.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(EM,"processLocalTransaction");var _M=J8();kp.exports={chooseOperation:fM,getOperationFunction:hM,operation:mM,processLocalTransaction:EM};G8(kp.exports);function fM(e){let t;try{t=hM(e)}catch(n){throw ut.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=Gp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Gp.checkASTPermissions(e,i);if(o)throw ut.error(`${rM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Bc(new Error,o,Hc.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=H8.verifyPerms(i,n);if(o)throw ut.error(`${rM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Bc(new Error,o,Hc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Bc(n,"There was an error when trying to choose an operation path")}return r}a(fM,"chooseOperation");function hM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),_M.has(e.operation))return _M.get(e.operation);throw Bc(new Error,Hc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Hc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(hM,"getOperationFunction");k8("operation",mM);function mM(e,t){e.hdb_user=this[x8]?.user,e.bypass_auth=!t;let r=fM(e);return EM({body:e},r)}a(mM,"operation");async function z8(e){ut.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Co.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Co.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Co.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await vc.deleteRecord(i);break;default:ut.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){ut.info("Invalid operation in transaction"),ut.error(o)}}a(z8,"catchup");async function ps(e){V8(e);let t,r;try{r=await xp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new nM.RunnerMessage(t,e);return await nM.parseMessage(s),{message:`Starting job with id ${t.id}`,job_id:t.id}}catch(s){let n=`There was an error executing job: ${s.http_resp_msg?s.http_resp_msg:s}`;throw ut.error(n),Bc(s,n)}}a(ps,"executeJob");function J8(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Co.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Co.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Co.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(hd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(lM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(lM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(Y8)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(K8)),e.set(I.OPERATIONS_ENUM.SQL,new B(W8)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(ps,dd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(ps,dd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(ps,dd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(ps,dd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(Js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(Js.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(Js.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(Js.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(Js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(Js.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(Js.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(Js.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Ed.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Ed.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Ed.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Ed.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(vc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Pc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Pc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Pc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Pc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(fd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(fd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(fd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(fd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Pc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(C8)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(U8)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(D8)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(L8)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(M8)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(P8)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(aM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(v8.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(B8)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Fp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Fp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Fp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(ps,tM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(ps,vc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(ps,vc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(ps,tM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(xp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(xp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(qp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(qp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(qp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(sM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(sM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(z8)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(q8.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(ps,vc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(w8)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(iM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(iM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(oM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(oM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(aM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(bt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(bt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(bt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(bt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(bt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(bt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(bt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(bt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(bt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(bt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(bt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(bt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(bt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(cM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(ps,cM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(uM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(uM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(Js.getBackup)),e}a(J8,"initializeOperationFunctionMap")});var Sd=m((Tle,RM)=>{"use strict";var Vp=A(),X8=V(),Fc=x(),{handleHDBError:$p,hdb_errors:md}=W(),{isMainThread:Z8}=require("worker_threads"),{Readable:j8}=require("stream"),pM=require("os"),e6=require("util"),t6=Hm(),r6=e6.promisify(t6.authorize),TM=SM(),{Gzip:s6}=require("zlib");function n6(e){let t=`Found an uncaught exception with message: ${e.message}. ${pM.EOL}Stack: ${e.stack} ${pM.EOL}Terminating ${Z8?"HDB":"thread"}.`;console.error(t),Fc.fatal(t),process.exit(1)}a(n6,"handleServerUncaughtException");function i6(e,t,r){if(Fc[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:md.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(i6,"serverErrorHandler");function o6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=$p(new Error,"Invalid JSON.",md.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(X8.isEmpty(e.body.operation)){let s=$p(new Error,"Request body must include an 'operation' property.",md.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(o6,"reqBodyValidationHandler");function a6(e,t,r){let s;e.body.operation!==Vp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Vp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Vp.OPERATIONS_ENUM.LOGOUT?r6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Fc.warn(n),Fc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r($p(n,i,md.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(a6,"authHandler");async function c6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=TM.chooseOperation(e.body);let n=await TM.processLocalTransaction(e,s);if(n instanceof j8&&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 s6))}return n}catch(n){throw Fc.error(n),n}}a(c6,"handlePostRequest");RM.exports={authHandler:a6,handlePostRequest:c6,handleServerUncaughtException:n6,serverErrorHandler:i6,reqBodyValidationHandler:o6}});var NM=m((gle,OM)=>{"use strict";var u6=require("fastify-plugin"),{handlePostRequest:gM,authHandler:l6,reqBodyValidationHandler:_6}=Sd();async function d6(e){e.decorate("hdbCore",{preValidation:[_6,l6],request:t=>AM(gM(t,response)),requestWithoutAuthentication:(t,r)=>AM(gM(t,r,!0))})}a(d6,"hdbCore");async function AM(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(AM,"convertAsyncIterators");OM.exports=u6(d6)});var yM=m((Ole,bM)=>{"use strict";var Yp=require("fs"),Uo=Q();Uo.initSync();var{CONFIG_PARAMS:qc}=A(),E6=1024*1024*1024;function f6(e){let t=Uo.get(qc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Uo.get(qc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:E6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Uo.get(qc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Uo.get(qc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Uo.get(qc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Yp.readFileSync(`${n}`),cert:Yp.readFileSync(i)+(o?`
23
23
 
24
- `+kp.readFileSync(a):"")},s.http2=!0}return s}o(u6,"getServerOptions");gM.exports=u6});var bM=m((hle,NM)=>{"use strict";var Vp=Q();Vp.initSync();var{CONFIG_PARAMS:OM}=g();function l6(){let e=Vp.get(OM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Vp.get(OM.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}o(l6,"getCORSOptions");NM.exports=l6});var wM=m((Sle,IM)=>{"use strict";var yM=Q();yM.initSync();var _6=g();function d6(){return yM.get(_6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}o(d6,"getHeaderTimeoutConfig");IM.exports=d6});var Kp={};Ze(Kp,{customFunctionsServer:()=>h6,handleFile:()=>f6,ready:()=>p6});async function f6(e,t,r,s){if(!zs){let c=$p.get(Yp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);zs=xM(c),mt.http((await zs).server)}let n=await zs,i=(0,UM.dirname)(r),a=t.replace(/\/routes\/.*/g,"");a.startsWith("/")&&(a=a.slice(1)),CM.has(i)||(CM.add(i),n.register(S6(i,a)))}async function h6(){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 m6();let e=$p.get(Yp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=zs=await xM(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 m6(){try{Ue.info("Custom Functions starting configuration."),await BM.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function S6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,DM.existsSync)(e)&&r.register(vM.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:Ue.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,a)=>{n?.message?Ue.error(n.message):n&&Ue.error(n),a()})}catch(s){Ue.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function xM(e){Ue.info("Custom Functions starting buildServer.");let t=(0,HM.default)(e),r=(0,LM.default)(t);r.server.headersTimeout=(0,qM.default)(),r.setErrorHandler(GM.serverErrorHandler);let s=(0,FM.default)();return s&&r.register(MM.default,s),r.register(function(n,i,a){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),a()}),r.register(PM.default),await r.register(E6),await r.after(),cp(r),Ue.info("Custom Functions completed buildServer."),r}function p6(){if(zs)return zs.then?zs.then(e=>e.ready()):zs.ready()}var UM,DM,LM,MM,PM,vM,$p,Yp,Ue,E6,BM,HM,FM,qM,GM,zs,CM,kM=pe(()=>{UM=require("path"),DM=require("fs"),LM=D(require("fastify")),MM=D(require("@fastify/cors")),PM=D(fp()),vM=D(require("@fastify/autoload")),$p=D(Q()),Yp=D(g()),Ue=D(q()),E6=D(RM()),BM=D(Or()),HM=D(AM()),FM=D(bM()),qM=D(wM()),GM=D(fd());ma();un();CM=new Set;o(f6,"handleFile");o(h6,"customFunctionsServer");o(m6,"setUp");o(S6,"buildRouteFolder");o(xM,"buildServer");o(p6,"ready")});var Wp={};Ze(Wp,{start:()=>T6});function T6(e){let t=e.root;return{handleFile(r,s,n){$M||($M=!0,e.server.http(async(i,a)=>{if(!i.isWebSocket){let c=VM.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,YM.default)(i,c)}}return a(i)},{runFirst:!0})),t&&(s.startsWith("/"+t)?s=s.slice(t.length+1):s.startsWith(t)&&(s=s.slice(t.length))),VM.set(s,n)}}}var YM,VM,$M,KM=pe(()=>{YM=D(require("send")),VM=new Map;o(T6,"start")});function A6(e,t=1,r){if(Qp++,(0,Ri.startWorker)("server/threads/threadServer.js",{name:Sd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((a,c)=>{function u(l){l.type===Sd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),a(s))}o(u,"onMessage"),s.on("message",u),s.on("error",c)});g6.push(n),await n,wa.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",a=>{if(a.requestId){let c=md.get(a.requestId);c&&c(a)}}),s.on("exit",i),s.on("shutdown",i);function i(){let a=wa.indexOf(s);a>-1&&wa.splice(a,1)}if(o(i,"removeWorker"),Ca){let a=Ca;Ca=[];for(let c of a)XM[c.localPort](c)}}}),r){let s=setInterval(()=>{zp?zp=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ri.shutdownWorkers)(),Qp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function ZM(e=0,t){if(typeof e=="string")try{(0,pd.existsSync)(e)&&(0,pd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=O6:r=N6(t):r=Jp;let s=(0,zM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},XM[e]=i=>{zp=!0,r(i,(a,c)=>{if(!a){WM?(WM.deliverSocket(i,e,c),i.resume()):Qp>0?(Ca.length===0&&setTimeout(()=>{Ca.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(),Ca.push(i)):(console.log("start up a dynamic thread to handle request"),A6(0));return}a.requests++,i._handle.fd>=0?a.postMessage({port:e,fd:i._handle.fd,data:c}):w6(i,a,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Go();return JM.info(`HarperDB ${n.version} Server running on port ${e}`),s}function Jp(e,t){let r,s=0;for(let n of wa){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=hd)return hd=i,t(r);s=i}hd=0,t(r)}function O6(e,t){let r=e.remoteAddress,s=Ua.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Jp(e,i=>{Ua.set(r,{worker:i,lastUsed:n}),t(i)})}function N6(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=Ua.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);Jp(s,_=>{Ua.set(c,{worker:_,lastUsed:l}),n(_,i)})})}o(r,"findByHeaderAffinity")}function y6(){hd=0;for(let e of wa)e.expectedIdle=e.recentELU.idle+b6,e.requests=1;wa.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function w6(e,t,r){let s=I6++;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(),md.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")),md.delete(s)),n.event=="destroy"&&(e.destroy(),md.delete(s))})}var Ri,zM,Sd,JM,pd,R6,wa,Ca,XM,WM,Qp,g6,zp,hd,QM,Ua,b6,md,I6,jM=pe(()=>{Ri=D(_t()),zM=require("net"),Sd=D(g()),JM=D(q()),pd=require("fs"),{isMainThread:R6}=require("worker_threads"),wa=[],Ca=[],XM=[],Qp=0,g6=[];R6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});o(A6,"startHTTPWorker");o(ZM,"startSocketServer");hd=0;o(Jp,"findMostIdleWorker");QM=36e5,Ua=new Map;o(O6,"findByRemoteAddressAffinity");o(N6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Ua)r.lastUsed+QM<e&&Ua.delete(t)},QM).unref();b6=1e3;o(y6,"updateWorkerIdleness");(0,Ri.setMonitorListener)(y6);md=new Map,I6=1;o(w6,"proxySocket")});var nP=m((wle,sP)=>{"use strict";var C6=require("cluster"),Qr=Q();Qr.initSync();var tP=g(),ble=require("util"),Js=q(),Xp=require("fs"),U6=require("fastify"),yle=Go(),D6=require("@fastify/cors"),L6=require("@fastify/compress"),M6=require("@fastify/static"),P6=fp(),v6=require("path"),{PACKAGE_ROOT:B6}=g(),H6=dn(),F6=x(),q6=Or(),G6=Ao(),{server:x6}=(un(),re(PE)),{authHandler:k6,handlePostRequest:V6,serverErrorHandler:$6,reqBodyValidationHandler:Y6}=fd(),Ile=require("net"),{registerContentHandlers:K6}=(ma(),re(eL)),W6=1024*1024*1024,rP="TRUE",{HDB_SETTINGS_NAMES:Ai,CONFIG_PARAMS:Q6}=tP,z6=Ai.CORS_ENABLED_KEY,J6="CORS_ACCESSLIST",X6=Ai.SERVER_TIMEOUT_KEY,Z6=Ai.SERVER_KEEP_ALIVE_TIMEOUT_KEY,j6=Ai.SERVER_HEADERS_TIMEOUT_KEY,e9=Ai.PRIVATE_KEY_KEY,t9=Ai.CERT_KEY,r9=Ai.HTTP_SECURE_ENABLED_KEY,gi;sP.exports={hdbServer:eP,start:eP};async function eP(e){try{Js.info("In Fastify server"+process.cwd()),Js.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Js.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=C6.isMaster,await s9();let t=Qr.get(r9),r=t&&(t===!0||t.toUpperCase()===rP);gi=n9(r),await gi.ready(),e||(e={}),e.isOperationsServer=!0,gi.server.cantCleanupProperly=!0;try{x6.http(gi.server,e),gi.server.closeIdleConnections||await gi.listen({port:0,host:"::"})}catch(s){throw gi.close(),Js.error(s),Js.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Js.fatal(t),process.exit(1)}}o(eP,"operationsServer");async function s9(){Js.trace("Configuring HarperDB process."),H6.setSchemaDataToGlobal(),await q6.setUsersToGlobal(),await G6.getLicense()}o(s9,"setUp");function n9(e){Js.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=i9(e),r=U6(t);r.server.headersTimeout=o9(),r.setErrorHandler($6);let s=a9();s&&r.register(D6,s),r.register(function(i,a,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(P6),r.register(L6),r.register(M6,{root:v6.join(B6,"docs")}),K6(r);let n=Qr.get(tP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,a){return!F6.isEmpty(n)&&n.toString().toLowerCase()==="true"?a.sendFile("index.html"):a.callNotFound()}),r.post("/",{preValidation:[Y6,k6],config:{isOperation:!0}},async function(i,a){return i.body?.operation?.startsWith("restart")&&a.header("Connection","close"),V6(i,a)}),r.get("/health",()=>"HarperDB is running."),Js.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}o(n9,"buildServer");function i9(e){let t=Qr.get(X6),r=Qr.get(Z6),s={bodyLimit:W6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(e9),i=Qr.get(t9),a=Qr.get(Q6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:Xp.readFileSync(n),cert:Xp.readFileSync(i)+(a?`
24
+ `+Yp.readFileSync(o):"")},s.http2=!0}return s}a(f6,"getServerOptions");bM.exports=f6});var CM=m((ble,wM)=>{"use strict";var Kp=Q();Kp.initSync();var{CONFIG_PARAMS:IM}=A();function h6(){let e=Kp.get(IM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Kp.get(IM.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(h6,"getCORSOptions");wM.exports=h6});var LM=m((Ile,DM)=>{"use strict";var UM=Q();UM.initSync();var m6=A();function S6(){return UM.get(m6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(S6,"getHeaderTimeoutConfig");DM.exports=S6});var zp={};je(zp,{customFunctionsServer:()=>R6,handleFile:()=>T6,ready:()=>O6});async function T6(e,t,r,s){if(!Xs){let c=Wp.get(Qp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Xs=YM(c),tt.http((await Xs).server)}let n=await Xs,i=(0,PM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),MM.has(i)||(MM.add(i),n.register(A6(i,o)))}async function R6(){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 g6();let e=Wp.get(Qp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Xs=await YM(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 g6(){try{Ue.info("Custom Functions starting configuration."),await GM.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function A6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,vM.existsSync)(e)&&r.register(qM.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 YM(e){Ue.info("Custom Functions starting buildServer.");let t=(0,xM.default)(e),r=(0,BM.default)(t);r.server.headersTimeout=(0,VM.default)(),r.setErrorHandler($M.serverErrorHandler);let s=(0,kM.default)();return s&&r.register(HM.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(FM.default),await r.register(p6),await r.after(),dp(r),Ue.info("Custom Functions completed buildServer."),r}function O6(){if(Xs)return Xs.then?Xs.then(e=>e.ready()):Xs.ready()}var PM,vM,BM,HM,FM,qM,Wp,Qp,Ue,p6,GM,xM,kM,VM,$M,Xs,MM,KM=Se(()=>{PM=require("path"),vM=require("fs"),BM=C(require("fastify")),HM=C(require("@fastify/cors")),FM=C(Sp()),qM=C(require("@fastify/autoload")),Wp=C(Q()),Qp=C(A()),Ue=C(x()),p6=C(NM()),GM=C(br()),xM=C(yM()),kM=C(CM()),VM=C(LM()),$M=C(Sd());To();Jr();MM=new Set;a(T6,"handleFile");a(R6,"customFunctionsServer");a(g6,"setUp");a(A6,"buildRouteFolder");a(YM,"buildServer");a(O6,"ready")});var Jp={};je(Jp,{start:()=>N6});function N6(e){let t=e.root;return{handleFile(r,s,n){QM||(QM=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=WM.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,zM.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))),WM.set(s,n)}}}var zM,WM,QM,JM=Se(()=>{zM=C(require("send")),WM=new Map;a(N6,"start")});function I6(e,t=1,r){if(Xp++,(0,gi.startWorker)("server/threads/threadServer.js",{name:Rd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Rd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});y6.push(n),await n,Do.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=Td.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Do.indexOf(s);o>-1&&Do.splice(o,1)}if(a(i,"removeWorker"),Lo){let o=Lo;Lo=[];for(let c of o)eP[c.localPort](c)}}}),r){let s=setInterval(()=>{Zp?Zp=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,gi.shutdownWorkers)(),Xp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function tP(e=0,t){if(typeof e=="string")try{(0,Ad.existsSync)(e)&&(0,Ad.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=w6:r=C6(t):r=jp;let s=(0,jM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},eP[e]=i=>{Zp=!0,r(i,(o,c)=>{if(!o){XM?(XM.deliverSocket(i,e,c),i.resume()):Xp>0?(Lo.length===0&&setTimeout(()=>{Lo.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),Lo.push(i)):(console.log("start up a dynamic thread to handle request"),I6(0));return}o.requests++;let u=i._handle.fd;gd.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):M6(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=ka();return gd.info(`HarperDB ${n.version} Server running on port ${e}`),s}function jp(e,t){let r,s=0;for(let n of Do){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=pd)return pd=i,t(r);s=i}pd=0,t(r)}function w6(e,t){let r=e.remoteAddress,s=Mo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);jp(e,i=>{Mo.set(r,{worker:i,lastUsed:n}),t(i)})}function C6(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Mo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);jp(s,_=>{Mo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function D6(){pd=0;for(let e of Do)e.expectedIdle=e.recentELU.idle+U6,e.requests=1;Do.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function M6(e,t,r){let s=L6++;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(),Td.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")),Td.delete(s)),n.event=="destroy"&&(e.destroy(),Td.delete(s))})}var gi,jM,Rd,gd,Ad,b6,Do,Lo,eP,XM,Xp,y6,Zp,pd,ZM,Mo,U6,Td,L6,rP=Se(()=>{gi=C(dt()),jM=require("net"),Rd=C(A()),gd=C(x()),Ad=require("fs"),{isMainThread:b6}=require("worker_threads"),Do=[],Lo=[],eP=[],Xp=0,y6=[];b6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(I6,"startHTTPWorker");a(tP,"startSocketServer");pd=0;a(jp,"findMostIdleWorker");ZM=36e5,Mo=new Map;a(w6,"findByRemoteAddressAffinity");a(C6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mo)r.lastUsed+ZM<e&&Mo.delete(t)},ZM).unref();U6=1e3;a(D6,"updateWorkerIdleness");(0,gi.setMonitorListener)(D6);Td=new Map,L6=1;a(M6,"proxySocket")});var aP=m((Fle,oP)=>{"use strict";var P6=require("cluster"),Qr=Q();Qr.initSync();var nP=A(),vle=require("util"),Zs=x(),eT=require("fs"),v6=require("fastify"),Ble=ka(),B6=require("@fastify/cors"),H6=require("@fastify/compress"),F6=require("@fastify/static"),q6=Sp(),G6=require("path"),{PACKAGE_ROOT:x6}=A(),k6=En(),V6=V(),$6=br(),Y6=Na(),{server:K6}=(Jr(),re(pu)),{authHandler:W6,handlePostRequest:Q6,serverErrorHandler:z6,reqBodyValidationHandler:J6}=Sd(),Hle=require("net"),{registerContentHandlers:X6}=(To(),re(nL)),Z6=1024*1024*1024,iP="TRUE",{HDB_SETTINGS_NAMES:Oi,CONFIG_PARAMS:j6}=nP,e9=Oi.CORS_ENABLED_KEY,t9="CORS_ACCESSLIST",r9=Oi.SERVER_TIMEOUT_KEY,s9=Oi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,n9=Oi.SERVER_HEADERS_TIMEOUT_KEY,i9=Oi.PRIVATE_KEY_KEY,o9=Oi.CERT_KEY,a9=Oi.HTTP_SECURE_ENABLED_KEY,Ai;oP.exports={hdbServer:sP,start:sP};async function sP(e){try{Zs.info("In Fastify server"+process.cwd()),Zs.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),Zs.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=P6.isMaster,await c9();let t=Qr.get(a9),r=t&&(t===!0||t.toUpperCase()===iP);Ai=u9(r),await Ai.ready(),e||(e={}),e.isOperationsServer=!0,Ai.server.cantCleanupProperly=!0;try{K6.http(Ai.server,e),Ai.server.closeIdleConnections||await Ai.listen({port:0,host:"::"})}catch(s){throw Ai.close(),Zs.error(s),Zs.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),Zs.fatal(t),process.exit(1)}}a(sP,"operationsServer");async function c9(){Zs.trace("Configuring HarperDB process."),k6.setSchemaDataToGlobal(),await $6.setUsersToGlobal(),await Y6.getLicense()}a(c9,"setUp");function u9(e){Zs.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=l9(e),r=v6(t);r.server.headersTimeout=d9(),r.setErrorHandler(z6);let s=_9();s&&r.register(B6,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(q6),r.register(H6),r.register(F6,{root:G6.join(x6,"docs")}),X6(r);let n=Qr.get(nP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!V6.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[J6,W6],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),Q6(i,o)}),r.get("/health",()=>"HarperDB is running."),Zs.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(u9,"buildServer");function l9(e){let t=Qr.get(r9),r=Qr.get(s9),s={bodyLimit:Z6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(i9),i=Qr.get(o9),o=Qr.get(j6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:eT.readFileSync(n),cert:eT.readFileSync(i)+(o?`
25
25
 
26
- `+Xp.readFileSync(a):"")};s.http2=!0,s.https=c}return s}o(i9,"getServerOptions");function a9(){let e=Qr.get(z6),t=Qr.get(J6),r;return e&&(e===!0||e.toUpperCase()===rP)&&(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}o(a9,"getCORSOpts");function o9(){return Qr.get(j6)}o(o9,"getHeaderTimeoutConfig")});var mP=m((Lle,hP)=>{"use strict";var{decode:c9}=require("msgpackr"),{isMainThread:u9,parentPort:l9,threadId:Ule}=require("worker_threads"),Zp=rt(),Da=Be(),_9=g(),Fc=q(),iP=Q(),cP=g();_t();var d9=Hs(),{recordAction:E9,recordActionBinary:f9}=(ji(),re(Ul)),{publishToStream:h9}=Zp,Dle={durable:Da.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Da.WORK_QUEUE_CONSUMER_NAMES.deliver_group},m9,S9,p9,uP,lP;hP.exports={initialize:_P,workQueueListener:fP,setSubscription:T9,setIgnoreOrigin:g9,getDatabaseSubscriptions:R9};async function _P(){lP=!0,Fc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await Zp.getNATSReferences();m9=e,S9=e.info.server_name,p9=t,uP=r}o(_P,"initialize");var Rd=new Map;function T9(e,t,r){let s=Rd.get(e);s||Rd.set(e,s=new Map),s.set(t,r),lP||_P().then(fP)}o(T9,"setSubscription");function R9(){return Rd}o(R9,"getDatabaseSubscriptions");var dP;function g9(e){dP=e}o(g9,"setIgnoreOrigin");var EP=100,aP=new Array(EP),Td=0;async function fP(){let t=await(await uP.consumers.get(Da.WORK_QUEUE_CONSUMER_NAMES.stream_name,Da.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await aP[Td],aP[Td]=A9(r).catch(s=>{Fc.error(s)}),++Td>=EP&&(Td=0)}o(fP,"workQueueListener");u9||l9.on("message",async e=>{let{type:t}=e;t===cP.ITC_EVENT_TYPES.SHUTDOWN&&Zp.closeConnection()});async function A9(e){let t=c9(e.data);E9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Da.MSG_HEADERS.ORIGIN)===iP.get(_9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!dP;if(f9(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:a,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Fc.trace("processing message:",i,a,u,(l?"records: "+l.map(y=>y.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Fc.trace(`messageProcessor nats msg id: ${e.headers.get(Da.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},S=Rd.get(a)?.get(u);if(!S)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,S.send(t);else if(l.length===1&&!c)S.send({type:oP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let y=l.map((O,H)=>({type:oP(i),value:O,id:_?.[H],table:u}));for(;c;)y.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;S.send({type:"transaction",writes:y,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}iP.get(cP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&h9(e.subject.split(".").slice(0,-1).join("."),d9.createNatsTableStreamName(a,u),e.headers,e.data)}catch(i){Fc.error(i)}e.ack()}o(A9,"messageProcessor");function oP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}o(oP,"convertOperation")});var nT={};Ze(nT,{disableNATS:()=>N9,setNATSReplicator:()=>jp,start:()=>O9});function O9(){Ad.default.get(Od.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&y9()}function N9(e=!0){gP=e}function y9(){if(gP)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];jp(n,r,i)}}iT((r,s)=>{jp(r.tableName,r.databaseName,r),s&&OP(r)}),!SP&&(SP=!0)}function jp(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{o(this,"NATSReplicator")}put(a){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ie],a,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ie],record:a},c)}delete(){let a;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(a=s.delete(this[ie],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ie]},a)}publish(a){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ie],a,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ie],record:a},c)}invalidate(a){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ie]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ie],this.getContext())}static defineSchema(a){OP(a)}static mergeSource(a,c){return s=a,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 a=new Jr;return(0,pP.setSubscription)(t,e,a),a}static subscribeOnThisThread(a){return a<b9}static isNATSReplicator=!0});function n(i){let a=i?.transaction?.nats;return a||(i?.transaction?(i.transaction.push(a=i.transaction.nats=new gd(i.transaction,i)),a.user=i.user):a=AP),a}o(n,"getNATSTransaction")}function OP(e){let t=Ad.default.get(Od.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,tT.publishToStream)(`${rT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,sT.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 tT,rT,sT,pP,TP,Ad,Od,RP,gP,b9,AP,SP,gd,eT,NP=pe(()=>{de();Xr();tT=D(rt()),rT=D(Be()),sT=D(Hs());so();pP=D(mP()),TP=D(Ht()),Ad=D(Q()),Od=D(g()),RP=D(q());o(O9,"start");o(N9,"disableNATS");b9=2;o(y9,"assignReplicationSource");o(jp,"setNATSReplicator");o(OP,"publishSchema");gd=class{constructor(t,r){this.transaction=t;this.options=r}static{o(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=Ad.default.get(Od.default.CONFIG_PARAMS.CLUSTERING_NODENAME),s=[];for(let[n,i]of this.writes_by_db){let a=[],c=[],u,l;for(let _ of i){let d=_.table,E=_.operation=="put"?"upsert":_.operation;u||(RP.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=a)),u.table===d&&u.operation===E?(a.push(_.record),c.push(_.id)):l=l.next={operation:E,table:d,id:_.id,record:_.record}}s.push((0,tT.publishToStream)(`${rT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,sT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},eT=class extends gd{static{o(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,TP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};AP=new eT});async function yP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await aT.getResource(e,{});n=new cT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await aT.get(e);i&&i.delete()}n=new bd(e,t)}return n}function oT(){return Nd++,Nd>65500&&(Nd=1),Nd}var bP,qc,aT,Nd,bd,cT,IP=pe(()=>{de();fc();bP=D(Ht()),qc=D(q());Vn();aT=tt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});o(yP,"getSession");Nd=1;o(oT,"getNextMessageId");bd=class{static{o(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:a}=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:a,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=yn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,S=h.Resource,y=await Ye(f,async()=>{let O=await S.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let H of O)try{let Y;if(H.type&&H.type!=="put"&&H.type!=="delete"&&H.type!=="message"||s&&!s(H))continue;r?(H.topic=n,Y=this.needsAcknowledge(H)):Y=oT();let A=H.id;Array.isArray(A)&&(A=fa(A)),A==null&&(A=""),this.listener(T+"/"+A,H.value,Y,t)}catch(Y){(0,qc.warn)(Y)}})(),O});return y.topic=n,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){return oT()}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=yn.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 a=i.Resource;return Ye(t,()=>n?r===void 0?a.delete(t,t):a.put(t,t.data,t):a.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},cT=class extends bd{static{o(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=oT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,qc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let a=i.startTime;return a||(a=i.startTime=(0,bP.getNextMonotonicTime)()),(0,qc.trace)("Added durable subscription",i.topic,a),{qos:i.qos,topic:i.topic,startTime:a}}),aT.put(this.sessionRecord)),t.qos}}});var _T={};Ze(_T,{start:()=>w9});async function w9({server:e,port:t,webSocket:r,securePort:s,requireAuthentication:n}){let i=e.mqtt={requireAuthentication:n};r&&e.ws((a,c,u)=>{if(a.protocol==="mqtt"){let{onMessage:l,onClose:_}=UP(a,(d,E)=>{if(a.send(d),E&&a._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);a.on("message",l),a.on("close",_),a.on("error",d=>{(0,Xs.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async a=>{let c;I9&&a.remoteAddress.includes("127.0.0.1")&&(c=await(0,DP.getSuperUser)());let{onMessage:u,onClose:l}=UP(a,_=>a.write(_),null,c,i);a.on("data",u),a.on("close",l),a.on("error",_=>{(0,Xs.info)("Socket error",_)})},{port:t,securePort:s})}function UP(e,t,r,s,n){CP||(CP=!0,jh(_=>{_.push({metric:"mqtt-connections",connections:uT})})),uT++;let i,a={protocolVersion:4},c=(0,yd.parser)({protocolVersion:5});function u(_){c.parse(_)}o(u,"onMessage");function l(){uT--,i?.disconnect()}return o(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(a.protocolVersion=_.protocolVersion,_.username)try{s=await mt.auth(_.username,_.password.toString()),(0,lT.get)(Zs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&wP.notify({username:s.username,status:Zs.AUTH_AUDIT_STATUS.SUCCESS,type:Zs.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,lT.get)(Zs.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&wP.error({username:s.username,status:Zs.AUTH_AUDIT_STATUS.FAILURE,type:Zs.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=yP({user:s,..._}),i=await i}catch(O){return(0,Xs.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,H,Y,A)=>{try{let w=O.indexOf("/",1),G=w>0?O.slice(0,w):O;d({cmd:"publish",topic:O,payload:E(H),messageId:Y||Math.floor(Math.random()*1e8),qos:A.qos},G)}catch(w){(0,Xs.error)(w),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let H;try{H=(await i.addSubscription(O,O.qos>=1)).qos||0}catch(Y){(0,Xs.error)(Y),H=128}f.push(H)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=ga(r?.headers["content-type"])),S=_.payload?.length>0?T(_.payload):void 0,y;try{y=await i.publish(_,S)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:y===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,yd.generate)(f,a);t(T),ii(T.length,"bytes-sent",h,f.cmd,"mqtt")}o(d,"sendPacket");function E(f){return r?ks(f,r):JSON.stringify(f)}o(E,"serialize")}),{onMessage:u,onClose:l}}var yd,DP,lT,Zs,Xs,wP,I9,CP,uT,LP=pe(()=>{yd=require("mqtt-packet");IP();DP=D(Or());ma();ji();un();lT=D(Q()),Zs=D(g()),Xs=D(q()),wP=(0,Xs.loggerWithTag)("auth-event"),I9=!0;o(w9,"start");uT=0;o(UP,"onSocket")});var kP={};Ze(kP,{loadComponent:()=>Id,loadComponentDirectories:()=>xP});function xP(e,t){t&&(ET=t),e&&(fT=e);let r=[];if((0,Ss.existsSync)(dT)){let n=(0,Ss.readdirSync)(dT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let a=i.name,c=(0,Dr.join)(dT,a);r.push(Id(c,ET,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Id(s,ET,s)),Promise.all(r).then(()=>{GP=!0})}async function Id(e,t,r,s,n){if(!PP.has(e)){PP.set(e,!0),n&&(fT=n);try{let i,a=(0,Dr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ss.existsSync)(a)?i=(0,vP.parseDocument)((0,Ss.readFileSync)(a,"utf8"),{simpleKeys:!0}).toJSON():i=L9;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,Ss.existsSync)(f=(0,Dr.join)(E,"node_modules",u));)if(E=(0,Dr.dirname)(E),E.length<(0,qP.getHdbBasePath)().length){f=null;break}if(f)_=await Id(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=D9[u];if(_)try{c.push(_);let E=o(S=>(S.origin=r,tt(S)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Gc.isMainThread&&(_=await _.startOnMainThread?.({server:mt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let S of[T,h])try{if(+S&&!MP.includes(S)){MP.push(S);let y=hT.get(mT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);ZM(S,y)}}catch(y){console.error("Error listening on socket",S,y,u)}if(t.isWorker&&(_=await _.start?.({server:mt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),fT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,FP.handleHDBError)("Can not reference parent directories");let S=(0,Dr.join)(e,l.files);for(let y of await(0,BP.default)(S,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:H}=y,Y=(0,Dr.relative)(e,O),A=(0,Dr.basename)(e),w=l.path||"/";w=w.startsWith("/")?w:w.startsWith("./")?"/"+A+w.slice(2):w==="."?"/"+A:"/"+A+"/"+w,w+=(w.endsWith("/")?"":"/")+Y;try{if(H.isFile()){let G=await U9(O);Gc.isMainThread&&await _.setupFile?.(G,w,O,t),t.isWorker&&await _.handleFile?.(G,w,O,t)}else Gc.isMainThread&&await _.setupDirectory?.(w,O,t),t.isWorker&&await _.handleDirectory?.(w,O,t)}catch(G){console.error(`Could not load ${H.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,G),t.set(l.path||"/",new xc(G))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new xc(E),null,!0)}}if(Gc.isMainThread&&!GP&&(0,HP.watchDir)(e,async()=>xP()),i.extensionModule)return await Lu((0,Dr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new xc(i))}}}var Ss,Dr,Gc,vP,hT,mT,BP,HP,FP,qP,C9,U9,dT,fT,GP,ET,D9,L9,MP,PP,xc,VP=pe(()=>{Ss=require("fs"),Dr=require("path"),Gc=require("worker_threads"),vP=require("yaml"),hT=D(Q()),mT=D(g());vg();qg();Gg();sL();kM();KM();BP=D(require("fast-glob")),HP=D(_t());FE();un();FP=D(W());Xr();de();jM();qP=D(Q()),C9=D(nP());I_();NP();LP();({readFile:U9}=Ss.promises),dT=hT.get(mT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),fT=new Map;o(xP,"loadComponentDirectories");D9={REST:Ep,graphqlSchema:HE,jsResource:GE,fastifyRoutes:Kp,login:kE,static:Wp,operationsApi:C9,customFunctions:{},clustering:nT,authentication:hc,mqtt:_T},L9={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},MP=[],PP=new Map;o(Id,"loadComponent");xc=class extends ht{constructor(r){super();this.error=r}static{o(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 zP=m((a_e,QP)=>{"use strict";var Ud=require("fs-extra"),ST=require("path"),wd=q(),$P=x(),Cd=g(),WP=Q(),M9=Tr();QP.exports=P9;async function P9(){let e=v9(),t=WP.get(Cd.CONFIG_PARAMS.ROOTPATH),r=ST.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Cd.PACKAGE_ROOT}},n=ST.join(t,"node_modules");await Ud.ensureDir(n);let i,a=!0,c=!1;try{i=await Ud.readJson(r)}catch(u){if($P.isEmptyOrZeroLength(e))return;if(u.code!==Cd.NODE_ERROR_CODES.ENOENT)throw u;a=!1}if(!$P.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await YP(l);s.dependencies[u]=_+l}if(!a){wd.notify("Installing components"),await KP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await YP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(wd.notify("Removing component",u),c=!0);c&&(wd.notify("Updating components."),await KP(r,s))}o(P9,"installComponents");function v9(){let e=M9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}o(v9,"getComponentsConfig");async function YP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":ST.extname(e)||await Ud.pathExists(e)?"file:":"github:"}o(YP,"getPkgPrefix");async function KP(e,t){wd.trace("npm installing components package.json",t),await Ud.writeFile(e,JSON.stringify(t,null," ")),await v_().installAllRootModules(WP.get(Cd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}o(KP,"installPackages")});var ZP=m((c_e,XP)=>{var{isMainThread:JP}=require("worker_threads"),{getTables:B9}=(de(),re(Ne)),{loadComponentDirectories:H9,loadComponent:F9}=(VP(),re(kP)),{resetResources:q9}=(fc(),re(MU)),G9=zP(),x9=Tr(),{dirname:k9}=require("path"),{getConnection:V9}=rt(),$9=Q(),Y9=g(),pT=new Map;async function K9(e=!1){!JP&&$9.get(Y9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&V9(),JP&&await G9();let t=q9();B9(),t.isWorker=e,await F9(k9(x9.getConfigFilePath()),t,"hdb",!0,pT),await H9(pT,t);let r=[];for(let[s]of pT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}o(K9,"loadRootComponents");XP.exports.loadRootComponents=K9});var _t=m((__e,Ln)=>{"use strict";var{Worker:W9,MessageChannel:Q9,parentPort:ps,isMainThread:OT,threadId:z9,workerData:kc}=require("worker_threads"),{PACKAGE_ROOT:J9}=g(),{join:tv,isAbsolute:X9,extname:Ld}=require("path"),{server:Z9}=(un(),re(PE)),{watch:j9,readdir:e7}=require("fs/promises"),{totalmem:jP}=require("os"),NT=g(),Oi=q(),l_e=g(),{randomBytes:t7}=require("crypto"),r7=1024*1024,Dn=[],Un=[],s7=50,rv=1e4,n7="restart",sv="request_thread_info",nv="resource_report",iv="thread_info",av="added-port",i7="ack",TT;Ln.exports={startWorker:RT,restartWorkers:bT,shutdownWorkers:u7,workers:Dn,setMonitorListener:S7,onMessageFromWorkers:l7,onMessageByType:_7,broadcast:d7,broadcastWithAcknowledgement:f7,setChildListenerByType:c7,getWorkerIndex:cv,getTicketKeys:uv,setMainIsWorker:a7,restartNumber:kc?.restartNumber||1};var ov;function cv(){return kc?kc.workerIndex:ov?0:void 0}o(cv,"getWorkerIndex");function a7(e){ov=e}o(a7,"setMainIsWorker");var Dd;function uv(){return Dd||(Dd=OT?t7(48):kc.ticketKeys,Dd)}o(uv,"getTicketKeys");Object.defineProperty(Z9,"workerIndex",{get(){return cv()}});var lv={[sv](e,t){h7(t)},[nv](e,t){m7(t,e)}};function RT(e,t={}){let r=process.constrainedMemory?.()||jP();r=Math.min(r,jP());let s=Math.max(Math.floor(r/r7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Un){let{port1:u,port2:l}=new Q9;c.postMessage({type:av,port:u},[u]),i.push(l)}Ld(e)||(e+=".js");let a=new W9(X9(e)?e:tv(J9,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:Ln.exports.restartNumber,ticketKeys:uv()},transferList:i},t));return Pd(a,!0),a.unexpectedRestarts=t.unexpectedRestarts||0,a.startCopy=()=>{RT(e,t)},a.on("error",c=>{console.error("Worker error:",c),Oi.error("Worker error:",c)}),a.on("exit",c=>{Dn.splice(Dn.indexOf(a),1),!a.wasShutdown&&t.autoRestart!==!1&&(a.unexpectedRestarts<s7?(t.unexpectedRestarts=a.unexpectedRestarts+1,RT(e,t)):Oi.error(`Thread has been restarted ${a.restarts} times and will not be restarted`))}),a.on("message",c=>{lv[c.type]?.(c,a)}),Dn.push(a),T7(),t.onStarted&&t.onStarted(a),a.name=t.name,a}o(RT,"startWorker");var o7=[NT.THREAD_TYPES.HTTP];async function bT(e=null,t=2,r=!0){if(OT){if(r){let{loadRootComponents:n}=ZP();await n()}Ln.exports.restartNumber++,t<1&&(t=t*Dn.length);let s=[];for(let n of Dn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Ln.exports.restartNumber,type:NT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=o7.indexOf(n.name)>-1,a=new Promise(c=>{let u=setTimeout(()=>n.terminate(),rv*2).unref();n.on("exit",()=>{clearTimeout(u),s.splice(s.indexOf(a)),!i&&r&&n.startCopy(),c()})});s.push(a),i&&r&&(n.startCopy(),s.length>=t&&await Promise.race(s))}await Promise.all(s)}else ps.postMessage({type:n7,workerType:e})}o(bT,"restartWorkers");function c7(e,t){lv[e]=t}o(c7,"setChildListenerByType");function u7(e){return bT(e,1/0,!1)}o(u7,"shutdownWorkers");var _v=[];function l7(e){_v.push(e)}o(l7,"onMessageFromWorkers");var gT=new Map;function _7(e,t){let r=gT.get(e);r||gT.set(e,r=[]),r.push(t)}o(_7,"onMessageByType");function d7(e){for(let t of Un)try{t.postMessage(e)}catch(r){Oi.error("Unable to send message to worker",r)}}o(d7,"broadcast");var Md=new Map,E7=1;function f7(e){return new Promise(t=>{let r=0;for(let s of Un)try{let n=E7++,i=o(()=>{Md.delete(n),--r===0&&t(),s!==ps&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Md.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,a]of Md)a.port===s&&a()})),s.postMessage(e),r++}catch(n){Oi.error("Unable to send message to worker",n)}r===0&&t()})}o(f7,"broadcastWithAcknowledgement");function h7(e){e.postMessage({type:iv,workers:dv()})}o(h7,"sendThreadInfo");function dv(){let e=Date.now();return Dn.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}))}o(dv,"getChildWorkerInfo");function m7(e,t){e.resources=t,e.resources.updated=Date.now()}o(m7,"recordResourceReport");var AT;function S7(e){AT=e}o(S7,"setMonitorListener");var p7=1e3,ev=!1;function T7(){ev||(ev=!0,setInterval(()=>{for(let e of Dn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}AT&&AT()},p7).unref())}o(T7,"startMonitoring");var R7=1e3;if(ps){Pd(ps);for(let e of kc.addPorts)Pd(e);setInterval(()=>{let e=process.memoryUsage();ps.postMessage({type:nv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},R7).unref(),TT=o(()=>new Promise((e,t)=>{ps.on("message",r),ps.postMessage({type:sv});function r(s){s.type===iv&&(ps.off("message",r),e(s.workers))}o(r,"receiveThreadInfo")}),"getThreadInfo")}else TT=dv;Ln.exports.getThreadInfo=TT;function Pd(e,t){Un.push(e),e.on("message",r=>{if(r.type===av)Pd(r.port);else if(r.type===i7){let s=Md.get(r.id);s&&s()}else{for(let n of _v)n(r,e);let s=gT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Oi.error(i)}}}).on("close",()=>{Un.splice(Un.indexOf(e),1)}).on("exit",()=>{Un.splice(Un.indexOf(e),1)}),t?e.refCount=100:e.unref()}o(Pd,"addPort");if(OT){let e,t,r=o(async(s,n)=>{n&&(e=n);for(let i of await e7(s,{withFileTypes:!0}))i.isDirectory()&&r(tv(s,i.name));for await(let{filename:i}of j9(s,{persistent:!1}))(Ld(i)===".ts"||Ld(i)===".js"||Ld(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await bT(),Oi.info("Reloaded HarperDB components")},100))},"watch_dir");Ln.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else ps.on("message",async e=>{let{type:t}=e;t===NT.ITC_EVENT_TYPES.SHUTDOWN&&(Ln.exports.restartNumber=e.restartNumber,ps.unref(),setTimeout(()=>{Oi.warn("Thread did not voluntarily terminate",z9),process.exit(0)},rv).unref())})});function UT(e){let t=e.auditStore=e.openDB(Sv.AUDIT_STORE_NAME,A7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Tv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{IT||(IT=setTimeout(()=>{if(IT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-Ev,0]})){if((n[0]&15)===CT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},Ev/10).unref())}),t}function Hd(e,t,r){let s=Av[r.type],n=3;if(t?t.length>80?(s|=vd,n=(0,js.writeKey)(t,Ts,e?14:6),yT.setUint16(2,n)):(n=(0,js.writeKey)(t,Ts,e?11:3),Ts[1]=n):Ts[1]=0,e){s|=gv;let i=s&vd?6:3;yT.setFloat64(i,e),t||(n=i+8)}return Ts[0]=s,s&vd?yT.setUint16(4,0):Ts[2]=0,r.value?Buffer.concat([Ts.slice(0,n),r.value]):Ts.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&vd,i=n?6:3,a;r&gv&&(a=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&wT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Av[r&7],value:u,lastVersion:a,get user(){return c?(0,js.readKey)(e,i,c):void 0}}}var js,Bd,Sv,pv,Tv,Rv,Ts,yT,g7,A7,Ev,IT,wT,fv,CT,hv,mv,vd,gv,Av,Vc=pe(()=>{js=require("ordered-binary"),Bd=D(Q()),Sv=D(xe()),pv=D(g()),Tv=D(_t()),Rv=D(x());(0,Bd.initSync)();Ts=Buffer.alloc(1024),yT=new DataView(Ts.buffer,Ts.byteOffset,1024),g7={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,js.writeKey)(e[2],t,r+12)}else return(0,js.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,js.readKey)(e,t+12,r)]}else return(0,js.readKey)(e,t,r)}},A7={encoding:"binary",keyEncoder:g7},Ev=(0,Rv.convertToMS)((0,Bd.get)(pv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,IT=null;o(UT,"openAuditStore");wT=16,fv=1,CT=2,hv=3,mv=4,vd=128,gv=64,Av={put:fv|wT,[fv]:"put",delete:CT,[CT]:"delete",message:hv|wT,[hv]:"message",invalidate:mv,[mv]:"invalidate"};o(Hd,"createAuditEntry");o(Mn,"readAuditEntry")});var DT,Ni,O7,$c,Fd,Ov=pe(()=>{DT=D(Ht());Vc();Ni=Symbol("completion"),O7=100,$c=class{static{o(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,DT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],a=0,c;this.hasWrittenTime=!1;let u=o(_=>{let d=_.commit(t,s);if(d&&(d[Ni]&&(i||(i=[]),i.push(d[Ni])),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,Hd(_.lastVersion,this.username,d))}},"doWrite"),l=o(()=>{let _=this.writes[a++];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<O7>>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=[]}},Fd=class extends $c{static{o(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,DT.getNextMonotonicTime)())}getReadTxn(){}}});function Iv(e,t,r,s,n){let i=e.primaryStore.env.path,a=e.primaryStore.tableId;Ma||((0,bi.onMessageByType)(bv,d=>{let E=d.auditIds;MT(d.path,E,d.txnId)}),(0,bi.onMessageByType)(yv,d=>{(0,Rs.trace)("confirming to proceed with txn",d.txnId)}),Ma=Object.create(null));let c=Ma[i]||(Ma[i]=[]);c.auditStore=e.auditStore;let u=c[a];u||(u=c[a]=new Map,u.envs=c,u.tableId=a,u.store=e.primaryStore),t=fa(t);let l=new LT(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 MT(e,t,r,s){if(!Ma)return;let n=Ma[e];if(n){if(La&&La+1!==r){(0,Rs.trace)("Waiting to ensure latest txn id",La,"proceeds",r,s);let i=(async()=>{for(let[a,c]of qd)a<r&&((0,Rs.trace)("Txn",r,"waiting for txn",a),await c);if(La+1!==r){await(0,bi.broadcastWithAcknowledgement)({type:yv,txnId:r});for(let[a,c]of qd)a<r&&((0,Rs.trace)("Txn",r,"waiting for txn",a),await c)}qd.delete(r),(0,Rs.trace)("Proceeding with txn id",r),La=r-1,MT(e,t,r,s)})();return qd.set(r,i),i}(0,Rs.trace)("Notifying with txn id",r,s),La=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[a,c,u]=i,l=n[c];if(!l)continue;(0,Nv.writeKey)(i,b7,0);let _=i[3];_&&(i.length=3);let d,E=fa(u),f;do{let h=l.get(E);if(h){for(let S of h)if(!(f&&!S.includeDescendants)){if(S.startTime>=a){(0,Rs.info)("omitting",u,S.startTime,a);continue}try{if(S.crossThreads===!1&&!s)continue;if(d===void 0){let y=n.auditStore.get(i);if(!y||(d=Mn(y,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}S.listener(u,d,a)}catch(y){console.error(y),(0,Rs.info)(y)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function wv(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:a,txnId:c})=>{let u,l=[];if(t)do{if(i.flag&N7)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=a&&(i=i.next));l.length!==0&&((0,bi.broadcast)({type:bv,path:n,auditIds:l,txnId:c,start:u}),MT(n,l,c,!0))})}}var Rs,bi,Nv,bv,yv,N7,Ma,b7,LT,La,qd,Cv=pe(()=>{Rs=D(q()),bi=D(_t()),Nv=require("ordered-binary");so();fc();Vc();bv="transaction",yv="transaction-await",N7=67108864,b7=Buffer.alloc(4096);o(Iv,"addSubscription");LT=class extends Jr{static{o(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t}end(){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}}toJSON(){return{name:"subscription"}}},qd=new Map;o(MT,"notifyFromTransactionData");o(wv,"listenToCommits")});var Cp={};Ze(Cp,{coerceType:()=>Gd,makeTable:()=>kd,setServerUtilities:()=>U7});function kd(e){let{primaryKey:t,indices:r,tableId:s,tableName:n,primaryStore:i,databasePath:a,databaseName:c,auditStore:u,schemaDefined:l,dbisDB:_}=e,{expirationMS:d,audit:E,trackDeletes:f}=e,{attributes:h}=e;h||(h=[]),wv(i,u);let T=0,S,y,O={},H,Y,A,w;for(let z of h)(z.assignCreatedTime||z.name==="__createdtime__")&&(H=z),(z.assignUpdatedTime||z.name==="__updatedtime__")&&(Y=z),z.expiresAt&&(A=z),z.isPrimaryKey&&(O=z);let G;E&&QT();class k extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=a;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=H;static updatedTimeProperty=Y;static dbisDB=_;static schemaDefined=l;static sourcedFrom(p,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(p,this.sourceOptions);else if(p.mergeSource)this.Source=p.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=p;return(async()=>{let L=!1,b=o(async C=>{let v=C.value,U=C.table?ve[c][C.table]:k;if(c===zr.SYSTEM_SCHEMA_NAME&&(C.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=v[U.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let M=await U.getResource(C.id,C,Yc);switch(C.type){case"put":return M._writeUpdate(v,Yc);case"delete":return M._writeDelete(Yc);case"publish":return M._writePublish(v,Yc);case"invalidate":return M.invalidate(Yc);default:wi.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=p.subscribe&&(!p.subscribe.reliesOnPrototype||p.prototype.subscribe);C&&f==null&&(f=!0);let v=p.subscribeOnThisThread?p.subscribeOnThisThread((0,Ii.getWorkerIndex)()):(0,Ii.getWorkerIndex)()===0,U=C&&v&&await p.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(U)for await(let M of U)try{if(!(M.type==="transaction"?M.writes[0]:M)){console.error("Bad subscription event");continue}let J=Ye(M,()=>{if(M.type==="transaction"){let Z=[];for(let K of M.writes){K[Oe]=M;try{Z.push(b(K))}catch(te){throw te.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(M),te}}return Promise.all(Z)}else if(M.type==="define_schema"){let Z=this.attributes.slice(0),K;for(let te of M.attributes)Z.find(De=>De.name===te.name)||(Z.push(te),K=!0);K&&(tt({table:n,database:c,attributes:Z,origin:"cluster"}),Qc.signalSchemaChange(new zc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(M)});M.onCommit&&(J?.then&&L&&Qc.signalUserChange(new zc.UserEventMsg(process.pid)),J?.then?J.then(M.onCommit):M.onCommit())}catch(V){console.error("error in subscription handler",V)}}catch(C){console.error(C)}})(),this}static getResource(p,N,L){let b=super.getResource(p,N,L);if(p!=null)try{if(b.hasOwnProperty(ce))return b;let C=b._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let v,U,V={transaction:C?.getReadTxn()},J;return ct(p,N,V,(Z,K)=>{K?U(K):(b[ce]=Z?.value,b[Xt]=Z?.version,J=!0,v?.(b))}),J?b:new Promise((Z,K)=>{v=Z,U=K})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return b}static setTTLExpiration(p){(0,Ii.getWorkerIndex)()===0&&(d=p*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:L,version:b}of this.primaryStore.getRange({start:!1,versions:!0}))b<Date.now()-d&&b>0&&L?.__invalidated__==null&&k.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,QT(),k.audit=!0}static coerceId(p){return p===""?null:Gd(p,O)}static async dropTable(){if(delete ve[c][n],c===a){for(let p in r)_.remove(k.tableName+"/"+p),r[p].drop();_.remove(k.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Qc.signalSchemaChange(new zc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(p,N){return p&&typeof p=="object"&&!Array.isArray(p)&&p.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(p,N)}get(p){if(typeof p=="string")return this.getProperty(p);if(this[Ms])return this.search(p);if(p?.property)return this.getProperty(p.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.read){let b=L[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let v=PT(b,"read");N.select=C.filter(U=>v[U])}else N.select=b.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(p,N,L){if(!p)return!1;let b=p.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let v=PT(C,"update");for(let U in N)if(!v[U])return!1;if(L)for(let U of C){let M=U.attribute_name;!U.update&&!(M in N)&&(N[M]=this.getProperty(M))}}else return!0}}allowCreate(p,N){return this.allowUpdate(p,{})}static allowCreate(p,N){if(!p)return!1;let L=p.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let b=L[n].attribute_permissions;if(b){let C=PT(b,"insert");for(let v in N)if(!C[v])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let N=p.role.permission;if(N.super_user||N[n]?.delete)return!0}update(p,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;if(typeof p=="object"&&p){if(N)for(let C in this[ce])p[C]===void 0&&(p[C]=void 0);b=this[ft],b&&(p=Object.assign(b,p)),this[ft]=b=p}return!this[ce]&&t&&!(b||(b=this[ft]))?.[t]&&(b||(b=this[ft]=Object.create(null)),b[t]=this[ie]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ie],store:i,invalidated:!0,lastVersion:this[Xt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let V in r)C[V]=this.getProperty(V);let v=k.Source,U,M=this[ie];return p?.isNotification||v?.invalidate&&(!v.invalidate.reliesOnPrototype||v.prototype.invalidate)&&(U=v.invalidate(M,this)),i.put(this[ie],C,L),{type:E&&"invalidate",[Ni]:U}}})}static evict(p,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let v=i.getEntry(p);if(!v)return;N=v.value,L=v.version}if(N)for(let v in r)C||(C={__invalidated__:0}),C[v]=N[v];return C?i.put(p,C,L,L):i.remove(p,L)}else return i.remove(p,L)}lock(){throw new Error("Not yet implemented")}static operation(p,N){return p.table||=n,p.schema||=c,Hv.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let L=this._txnForRequest();if(this[ie]===void 0)throw new Error("Can not save record without an id");let b=this[ce],C,v,U=this[ie];b||(this[ce]={}),L.addWrite({key:U,store:i,lastVersion:this[Xt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(M,V)=>{let J;if(V){if(C)return;let K=i.getEntry(U);b=K?.value;let te=this[Oe];te&&K?.version>(te.lastModified||0)&&(te.lastModified=K.version)}if(!v){if(v=!0,N?.isNotification)p=io(p);else{if(p[Lv]&&(C=!Nu(p),C))return;t&&p[t]!==U&&(p[t]=U),Y&&(p[Y.name]=Y.type==="Date"?new Date(M):Y.type==="String"?new Date(M).toISOString():M),H&&(b?p[H.name]=b[H.name]:p[H.name]=H.type==="Date"?new Date(M):H.type==="String"?new Date(M).toISOString():M),p=io(p);let K=k.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(J=K.put(U,p,this))}if(p[ce])throw new Error("Can not assign a record with a record property");this[ce]=p}if(wi.trace("Checking timestamp for put",U,this[Xt]>M,this[Xt],M),this[Xt]>M)return E&&{type:"put",value:i.encoder.encode(p)};let Z=i.encoder.encode(p);return i.put(this[ie],(0,Pa.asBinary)(Z),M),ge(this[ie],b,p),b===null&&!V&&Hn(-1),{type:E&&"put",value:Z,[Ni]:J}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ce]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),L,b=this[ie],C;return N.addWrite({key:b,store:i,lastVersion:this[Xt],nodeName:this[Oe]?.nodeName,commit:(v,U)=>{let M=this[ce];if(U){let V=i.getEntry(b);M=V?.value;let J=this[Oe];J&&V?.version>(J.lastModified||0)&&(J.lastModified=V.version)}if(!L&&(L=!0,!p?.isNotification)){let V=k.Source;V?.delete&&(!V.delete.reliesOnPrototype||V.prototype.delete)&&(C=V.delete(b,this))}if(!(this[Xt]>v))return ge(this[ie],M),wi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ie],null,v),E||WT(),U||Hn(1)):i.remove(this[ie]),{type:E&&"delete",[Ni]:C}}}),!0}search(p){let N=this._txnForRequest();if(!p)throw new Error("No query provided");let L=p.reverse===!0,b=p.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(p)?p:p[Symbol.iterator]?Array.from(p):[],this[ie]&&(b=[{attribute:null,comparator:"prefix",value:this[ie]}].concat(b));for(let K of b){let te=K[0]??K.attribute,De=te==null?O:h.find(sn=>sn.name==te);if(De)De.type&&(K[1]===void 0?K.value=C(K.value,De):K[1]=C(K[1],De));else if(te!=null)throw(0,yi.handleHDBError)(new Error,`${te} is not a defined attribute`,404)}function C(K,te){return Array.isArray(K)?K.map(De=>Gd(De,te)):Gd(K,te)}o(C,"coerceTypedValues"),b.length>1&&(b=(0,vv.sortBy)(b,K=>{if(K.estimated_count===void 0){let te=K.comparator||K.search_type;if(te===Kc.SEARCH_TYPES.EQUALS){let De=K[0]??K.attribute;if(De==null||De===t)K.estimated_count=1;else{let sn=r[De];K.estimated_count=sn?sn.getValuesCount(K[1]??K.value):1/0}}else te===Kc.SEARCH_TYPES.CONTAINS||te===Kc.SEARCH_TYPES.ENDS_WITH||te==="ne"?K.estimated_count=1/0:te===Kc.SEARCH_TYPES.STARTS_WITH||te==="prefix"?K.estimated_count=I7:K.estimated_count=y7}return K.estimated_count}));let v=N.getReadTxn();v.use();let U=p.select,M=b[0],V;if(!M)V=i.getRange(L?{end:!1,reverse:!0,transaction:v,lazy:U?.length<4}:{start:!1,transaction:v,lazy:U?.length<4}).map(({value:K})=>K?new Promise(te=>setImmediate(()=>te(K))):Pa.SKIP);else{let K=CE(M,v,L,k,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let te=b.slice(1).map(UE);V=Z(K,te)}else{for(let De=1;De<b.length;De++){let sn=b[De],eE=CE(sn,v,L,k,p.allowFullScan);K=K.concat(eE)}let te=new Set;K=K.filter(De=>te.has(De)?!1:(te.add(De),!0)),V=Z(K)}}(p.offset||p.limit!==void 0)&&(V=V.slice(p.offset,p.limit!==void 0?(p.offset||0)+p.limit:void 0)),V.onDone=()=>{v.done()};let J=this[Oe];function Z(K,te){let De=te?.length,sn={transaction:v,lazy:De>0||U?.length<4,alwaysPrefetch:!0};return K.map(eE=>new Promise(tE=>ct(eE,J,sn,bB=>{let rE=bB?.value;if(!rE)return tE(Pa.SKIP);for(let sE=0;sE<De;sE++)if(!te[sE](rE))return tE(Pa.SKIP);tE(rE)})))}return o(Z,"idsToRecords"),V}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||tt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Iv(k,this[ie]??null,function(v,U,M){try{this.send({id:v,timestamp:M,...U})}catch(V){console.error(V)}},p.startTime,this[Ms]),L=this[ie],b=p.previousCount;b>1e3&&(b=1e3);let C=p.startTime;if(this[Ms]){if(C){if(b)throw new yi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:U}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[M,V,J]=v;if(v.length>3&&(J=v.slice(2)),V!==s)continue;let Z=Mn(U,i);(L==null||Pv(L,J))&&N.send({id:J,timestamp:M,...Z}),N.startTime=M}}else if(b){let v=[];for(let{key:U,value:M}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[V,J,Z]=U;if(U.length>3&&(Z=U.slice(2)),J!==s)continue;if(L==null||Pv(L,Z)){let K=Mn(M,i);if(v.push({id:Z,timestamp:V,...K}),--b<=0)break}}catch(V){wi.error("Error getting history entry",U,V)}for(let U=v.length;U>0;)N.send(v[--U]);v[0]&&(N.startTime=v[0].timestamp)}else if(!p.omitCurrent)for(let{key:v,value:U,version:M}of i.getRange({start:L??!1,end:L==null?void 0:[L,Bv.MAXIMUM_KEY],versions:!0}))U&&N.send({id:v,timestamp:M,value:U})}else{b&&!C&&(C=0);let v=this[Xt];if(C<v){let U=[],M=v;do{let V=[M,s,L],J=u.get(V);if(J){p.omitCurrent=!0;let Z=Mn(J,i);U.push({id:L,timestamp:M,...Z}),M=Z.lastVersion}else break;b&&b--}while(M>C&&b!==0);for(let V=U.length;V>0;)N.send(U[--V]);N.startTime=v}!p.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[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 L=this._txnForRequest(),b=this[ie]||null,C,v;L.addWrite({store:i,key:b,lastVersion:this[Xt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(U,M)=>{if(this.validate(p),!v&&(v=!0,!N?.isNotification)){let Z=k.Source;Z?.publish&&(!Z.publish.reliesOnPrototype||Z.prototype.publish)&&(C=Z.publish(b,p,this))}let V=M>0?i.get(b):this[ce];V===void 0&&!M&&(E||f)&&(E||WT(),Hn(1));let J={type:"message",value:i.encoder.encode(p),[Ni]:C};return!L.hasWrittenTime&&this[Xt]>U&&(U=J.newTxnTime=this[Xt]+.001),i.put(b,V??null,U),J}})}_txnForRequest(){let p=this[Oe],N=p?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new $c(i,p.user,u)),L}else return new Fd(i,p.user,u)}validate(p){let N;for(let L=0,b=h.length;L<b;L++){let C=h[L];if(C.type){let v=p[C.name];if(v!=null)switch(C.type){case"Int":case"Float":(typeof v!="number"||C.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(U=>typeof U=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${C.name} must be a string`)}}C.required&&p[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new yi.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}static async addAttributes(p){let N=h.slice(0);for(let L of p){if(!L.name)throw new yi.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new yi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return tt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static async removeAttributes(p){let N=h.filter(L=>!p.includes(L.name));return tt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static getRecordCount(){let p=0;for(let{key:N,value:L}of i.getRange({end:!1}))p++,N[0]?.description==="deletions"&&(p+=L||0);return i.getStats().entryCount-p}static updatedAttributes(){yu(this,this)}static async deleteHistory(p=0){let N;for(let{key:L,value:b}of u.getRange({start:[0,0],end:[p,0]})){await new Promise(M=>setImmediate(M));let[C,v,U]=L;L.length>3&&(U=L.slice(2)),v===s&&(N=i.remove(U))}await N}static async*getHistory(p=0,N=1/0){for(let{key:L,value:b}of u.getRange({start:[p,0],end:[N,0]})){await new Promise(V=>setImmediate(V));let[C,v,U]=L;if(L.length>3&&(U=L.slice(2)),v!==s)continue;let M=Mn(b,i);M.id=U,M.timestamp=C,yield M}}static async getHistoryOfRecord(p){let N=[],L=i.getEntry(p);if(!L)return N;let b=L.version,C=0;do{await new Promise(M=>setImmediate(M));let v=[b,s,p],U=u.get(v);if(U){let M=Mn(U,i);M.timestamp=b,N.push(M),b=M.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){G?.remove()}}k.updatedAttributes();let X=k.prototype;return X[Lv]=!0,d&&k.setTTLExpiration(d/1e3),A&&NB(),k;function ge(z,p,N){let L;for(let b in r){let C=r[b],v=C.isIndexing,U=N?.[b],M=p?.[b];if(U===M&&!v)continue;L=!0;let V=(0,Wc.getIndexedValues)(M);if(V){Uv&&C.prefetch(V.map(J=>({key:J,value:z})),Mv);for(let J=0,Z=V.length;J<Z;J++)C.remove(V[J],z)}if(V=(0,Wc.getIndexedValues)(U),V){Uv&&C.prefetch(V.map(J=>({key:J,value:z})),Mv);for(let J=0,Z=V.length;J<Z;J++)C.put(V[J],z)}}return L}o(ge,"updateIndices");function ct(z,p,N,L){let b=o(()=>{let C=N.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let v;C&&!C.hasRunLoadRecord&&(v=!0,C.hasRunLoadRecord=!0);let U;try{U=i.getEntry(z,N)}catch(Z){throw Z.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+v,console.error(Z),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),Z}let M,V,J;if(U?(p&&U?.version>(p.lastModified||0)&&(p.lastModified=U.version),V=U.version,M=U.value,(V<0||!M||typeof M.__invalidated__=="number"||d&&V<Date.now()-d)&&(J=!0)):J=!0,J&&!N?.allowInvalidated){let Z=k.Source;if(Z&&Z.get&&(!Z.get.reliesOnPrototype||Z.prototype.get))return Ga(z,M,V,p).then(te=>{if(te?.value?.[ce])throw new Error("Can not assign a record with a record property");L(te)},te=>{L(null,te)})}if(U?.value?.[ce])throw new Error("Can not assign a record with a record property");L(U)},"whenPrefetched");if(!N.alwaysPrefetch&&(z==null||i.cache?.get(z)))return b();i.prefetch([z],b)}o(ct,"loadRecord");function Di(){w=new Set,(0,Ii.onMessageByType)("transaction",z),i.on("aftercommit",z);function z(){for(let p of w)p()}o(z,"onCommit")}o(Di,"setupCommitListeners");async function Ga(z,p=null,N,L){if(N<0){let U;return w||Di(),await new Promise(M=>{let V,J=o(()=>{if(U=i.getEntry(z),!U||U.version>0){if(clearTimeout(V),w.delete(J),typeof U?.value?.__invalidated__=="number")return M(Ga(z,U.value,U.version,L));M(U)}},"listener");w.add(J),V=setTimeout(()=>{w.delete(J),M(Ga(z,U?.value,void 0,L))},1e4).unref()})}let b=p?.__invalidated__,C=-(N||1);i.put(z,p,C,N);let v={transaction:L?.transaction};try{let U=await k.Source.get(z,v),M=v.lastModified||N;(!M||d&&M<Date.now()-d)&&(M=(0,Wc.getNextMonotonicTime)());let J=ge(z,p,U)&&N||b>0;return U?(t&&(U[t]=z),typeof U.toJSON=="function"&&(U=U.toJSON()),i.put(z,U,M,C)):i.remove(z,C),J&&E&&u.put([M,s,z],Hd(b,null,U?{type:"put",value:i.encoder.encode(U)}:{type:"delete"})),{version:M,value:U}}catch(U){throw i.put(z,p,N,C),U}}o(Ga,"getFromSource");function Hn(z){T||(T=i.get([Dv,vT.threadId])||0),T+=z,y||(y=setTimeout(()=>{y=null,i.rootStore.status==="open"&&i.put([Dv,vT.threadId],T)},50))}o(Hn,"recordDeletion");function WT(){S||(S=setTimeout(()=>{if(S=null,i.rootStore.status==="open"){for(let{key:z,value:p}of i.getRange({start:!0}))if(p===null){let N=i.getEntry(z);N?.value===null&&i.remove(z,N.version),Hn(-1)}}},k.getRecordCount()*100+C7).unref())}o(WT,"enqueueDeletionCleanup");function QT(){G=u?.addDeleteRemovalCallback(s,z=>{let p=i.getEntry(z);p?.value===null&&i.remove(z,p.version),Hn(-1)})}o(QT,"addDeleteRemoval");function NB(){(0,Ii.getWorkerIndex)()===0&&setInterval(async()=>{try{let z=A.name,p=r[z];if(!p)throw new Error(`expiresAt attribute ${A} must be indexed`);for(let{value:N}of p.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(N);L.value?.[z]<Date.now()&&k.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(z){wi.error("Error in evicting old records",z)}},w7).unref()}o(NB,"runRecordExpirationEviction")}function PT(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 Mv(){}function U7(e){Hv=e}function Gd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!D7.test(e)&&(e+="Z"),new Date(e)):r?e:(0,xd.autoCast)(e)}function Pv(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var zr,Pa,Wc,vv,vT,Kc,Jc,yi,Qc,zc,wi,Bv,Ii,xd,Hv,y7,I7,w7,Uv,Dv,Xt,Lv,M_e,Yc,C7,D7,id=pe(()=>{zr=D(g()),Pa=require("lmdb"),Wc=D(Ht()),vv=require("lodash"),vT=require("worker_threads");Xr();Ov();Kc=D(xe()),Jc=D(Q());Cv();yi=D(W()),Qc=D(Fs()),zc=D(qr());de();Uu();wi=D(q());wu();Vn();Bv=require("ordered-binary"),Ii=D(_t());Vc();xd=D(x()),y7=1e8,I7=1e7,w7=6e4;Jc.initSync();Uv=Jc.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Dv=Symbol.for("deletions"),Xt=Symbol.for("version"),Lv=Symbol.for("incremental-update"),M_e=Symbol("source-resource"),Yc={isNotification:!0,allowInvalidated:!0},C7=(0,xd.convertToMS)(Jc.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;o(kd,"makeTable");o(PT,"attributesAsObject");o(Mv,"noop");o(U7,"setServerUtilities");D7=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;o(Gd,"coerceType");o(Pv,"isDescendantId")});var Ne={};Ze(Ne,{database:()=>Bo,databases:()=>ve,dropDatabase:()=>qh,dropTableMeta:()=>H7,getDatabases:()=>xr,getTables:()=>L7,onUpdatedTable:()=>iT,readMetaDb:()=>Xc,resetDatabases:()=>M7,table:()=>tt,tables:()=>nr});function L7(){return Kd||xr(),nr||{}}function xr(){if(Kd)return ve;Kd=!0,Fa=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Er.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Er.existsSync)(e))for(let r of(0,Er.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Xc((0,Me.join)(e,r.name),null,s)}if((0,Er.existsSync)((0,Ha.getBaseSchemaPath)())){for(let r of(0,Er.readdirSync)((0,Ha.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Ha.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Ha.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Er.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let a=(0,Me.join)(n,i.name);Xc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,a,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,Er.existsSync)(n))for(let a of(0,Er.readdirSync)(n,{withFileTypes:!0}))a.isFile()&&(0,Me.extname)(a.name).toLowerCase()===".mdb"&&Xc((0,Me.join)(n,a.name),(0,Me.basename)(a.name,".mdb"),r);let i=s.tables;if(i)for(let a in i){let c=i[a],u=(0,Me.join)(c.path,(0,Me.basename)(a+".mdb"));(0,Er.existsSync)(u)&&Xc(u,a,r,null,!0)}}for(let r in ve){let s=Fa.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[Wd]}}return Fa=null,ve}}function M7(){Kd=!1;for(let[,e]of Pn)e.needsDeletion=!0;xr();for(let[e,t]of Pn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Pn.delete(e));return ve}function Xc(e,t,r=FT,s,n){let i=new BT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let a=Pn.get(e);a?a.needsDeletion=!1:(a=(0,Vd.open)(i),Pn.set(e,a));let c=new Ci.default(!1),u=a.dbisDb||(a.dbisDb=a.openDB(va.INTERNAL_DBIS_NAME,c)),l=a.auditStore;l||(s?(0,Er.existsSync)(s)&&(i.path=s,l=(0,Vd.open)(i),l.isLegacy=!0):l=UT(a));let _=xv(r),d=_[Wd],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,S]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),S===""?S=h.name:S||(S=T,T=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(T);let y=E.get(T);y||E.set(T,y={attributes:[]}),(S==null||h.is_hash_attribute)&&(y.primary=h),S!=null&&y.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:S}=h;if(!S){for(let X of T)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let y=_[f],O={},H=[],Y,A,w=typeof S.audit=="boolean"?S.audit:(0,yt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),G=S.trackDeletes,k=S.expiration;if(y)O=y.indices,H=y.attributes,y.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Ba)||0)&&u.putSync(Ba,Y+1):(S.tableId=Y=u.get(Ba),Y||(Y=1),u.putSync(Ba,Y+1),u.putSync(S.key,S));let X=new Ci.default(!S.is_hash_attribute,S.is_hash_attribute);Le.trace(`openDB ${S.key} from ${r}`),A=a.openDB(S.key,X),A.rootStore=a,A.tableId=Y}for(let X of T){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!O[X.name]){let ct=new Ci.default(!X.is_hash_attribute,X.is_hash_attribute);Le.trace(`openDB ${X.key} from ${r}`),O[X.name]=a.openDB(X.key,ct)}let ge=H.find(ct=>ct.name===X.name);ge?H.splice(H.indexOf(ge),1,X):H.push(X)}}catch(ge){Le.error("Error trying to update attribute",X,H,O,ge)}}if(!y){Le.trace(`creating table class ${f}`,Object.keys(_)),y=kv(_,f,kd({primaryStore:A,auditStore:l,audit:w,expirationMS:k&&k*1e3,trackDeletes:G,tableName:f,tableId:Y,primaryKey:S.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:S.schemaDefined,dbisDB:u})),y.schemaVersion=1;for(let X of qT)X(y)}}return a}catch(a){throw a.message+=` opening database ${e}`,a}}function xv(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Fa&&!Fa.has(e)){let r=new Set;t[Wd]=r,Fa.set(e,r)}return t}function kv(e,t,r){return e[t]=r,r}function Bo({database:e,table:t}){e||(e=FT),xr();let r=xv(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,Er.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),a=Pn.get(i);if(!a){let c=new BT.default(i,!1);a=(0,Vd.open)(c),Pn.set(i,a)}return a}async function qh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;Pn.delete(n.path),n.status==="open"&&(await n.close(),await Fv.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[Wd]}delete ve[e]}function tt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:a,origin:c}){t||(t=FT);let u=Bo({database:t,table:e}),l=ve[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;a==null&&(a=!0);let T=new Ci.default(!1);for(let A of s)A.attribute?(A.name=A.attribute,A.indexed=!0):A.attribute=A.name,A.expiresAt&&(A.indexed=!0);let S,y;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let A=u.auditStore;A||(A=UT(u)),E=s.find(X=>X.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=a,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let w=new Ci.default(!1,!0),G=e+"/";Le.trace(`openDB ${G} from ${t}`);let k=u.openDB(G,w);k.rootStore=u,Le.trace(`openDB ${va.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(va.INTERNAL_DBIS_NAME,T),k.tableId=h.get(Ba),k.tableId||(k.tableId=1),h.putSync(Ba,k.tableId+1),E.tableId=k.tableId,_=kv(l,e,kd({primaryStore:k,auditStore:A,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:a,dbisDB:h})),_.schemaVersion=1,S=!0,Y(),h.put(G,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${va.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(va.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:A,value:w}of h.getRange({start:!0})){let[G,k]=A.toString().split("/");if(k===""&&(k=w.name),k){if(G!==e)continue}else k=G;if(!s.find(ge=>ge.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){Y(),S=!0,h.remove(A);let ge=_.indices[G];ge&&O.push(ge)}}Le.trace(`${e} table loading, comparing atributes`);let H=[];try{for(let A of s||[]){let w=e+"/"+(A.name||"");Object.defineProperty(A,"key",{value:w,configurable:!0});let G=h.get(w);if(A.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),G||(w=e+"/",G=h.get(w));let X=Object.assign({},G,{audit:!0});S=!0,Y(),h.put(w,X)}continue}G?.attribute&&!G.name&&(G.indexed=!0);let k=!G||G.type!==A.type||G.indexed!==A.indexed||JSON.stringify(G.attributes)!==JSON.stringify(A.attributes)||JSON.stringify(G.elements)!==JSON.stringify(A.elements);if(A.indexed){let X=new Ci.default(!0,!1);Le.trace(`openDB ${w} from ${t}`);let ge=u.openDB(w,X);(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<Zc.workerData?.restartNumber)&&(S=!0,Y(),G=h.get(w),(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<Zc.workerData?.restartNumber)&&(S=!0,A.lastIndexedKey=G?.lastIndexedKey||!1,A.indexingPID=process.pid,ge.isIndexing=!0,Object.defineProperty(A,"dbi",{value:ge}),H.push(A)),h.put(w,A)),f[A.name]=ge}else k&&(S=!0,Y(),h.put(w,A))}}finally{y&&y()}if(S&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),H.length>0||O.length>0?_.indexingOperation=B7(_,H,O):S&&$d.signalSchemaChange(new Yd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,S)for(let A of qT)A(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function Y(){y||u.transactionSync(()=>({then(A){y=A}}))}o(Y,"startTxn")}async function B7(e,t,r){try{let s=e.schemaVersion;await $d.signalSchemaChange(new Yd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,a=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,qv.getIndexedValues)(_[h]);if(T)for(let S=0,y=T.length;S<y;S++)f.dbi.put(T[S],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),Zc.workerData&&Zc.workerData.restartNumber!==Gv.restartNumber&&(i=!0),++a%100===0||i){for(let E of t)E.lastIndexedKey=l,e.dbisDB.put(E.key,E);if(i)return}u>P7?await n:u>v7&&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 $d.signalSchemaChange(new Yd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function H7({table:e,database:t}){let r=Bo({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 iT(e){qT.push(e)}var yt,va,Vd,Me,Er,Ha,Ci,BT,Zt,Fv,HT,qv,$d,Yd,Zc,Le,Gv,FT,Wd,nr,ve,Ba,qT,Kd,Pn,Fa,P7,v7,de=pe(()=>{yt=D(Q()),va=D(xe()),Vd=require("lmdb"),Me=require("path"),Er=require("fs"),Ha=D(we());id();Ci=D(Pu()),BT=D(Bu()),Zt=D(g()),Fv=D(require("fs-extra")),HT=require("../../index"),qv=D(Ht()),$d=D(Fs()),Yd=D(qr()),Zc=require("worker_threads"),Le=D(q()),Gv=D(_t());Vc();FT="data",Wd=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,HT._assignPackageExport)("databases",ve);(0,HT._assignPackageExport)("tables",nr);Ba=Symbol.for("next-table-id"),qT=[],Pn=new Map;o(L7,"getTables");o(xr,"getDatabases");o(M7,"resetDatabases");o(Xc,"readMetaDb");o(xv,"ensureDB");o(kv,"setTable");o(Bo,"database");o(qh,"dropDatabase");o(tt,"table");P7=1e3,v7=10;o(B7,"runIndexing");o(H7,"dropTableMeta");o(iT,"onUpdatedTable")});var x=m((k_e,rB)=>{"use strict";var vn=require("path"),Wv=require("fs-extra"),jt=q(),Vv=require("fs-extra"),Qd=require("os"),F7=require("net"),q7=require("recursive-iterator"),Ge=g(),G7=IR(),$v=require("papaparse"),zd=require("moment"),{inspect:x7}=require("util"),Yv=require("is-number"),x_e=require("lodash"),k7=require("minimist"),V7=require("https"),$7=require("http"),{hdb_errors:Jd}=W(),Y7=/^((\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)))$/,Qv=require("util").promisify(setTimeout),K7=100,W7=5,Q7="",z7=4,Kv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};rB.exports={isEmpty:fr,isEmptyOrZeroLength:gs,arrayHasEmptyValues:Z7,arrayHasEmptyOrZeroLengthValues:j7,buildFolderPath:eee,isBoolean:zv,errorizeMessage:J7,stripFileExtension:ree,autoCast:see,autoCastJSON:Jv,autoCastJSONDeep:xT,removeDir:nee,compareVersions:iee,isCompatibleDataVersion:aee,escapeRawValue:oee,unescapeValue:cee,stringifyProps:uee,timeoutPromise:_ee,isClusterOperation:Eee,getClusterUser:hee,checkGlobalSchemaTable:fee,getHomeDir:Zv,getPropsFilePath:lee,promisifyPapaParse:mee,removeBOM:jv,createEventPromise:See,checkProcessRunning:pee,checkSchemaTableExist:Tee,checkSchemaExists:eB,checkTableExists:tB,getStartOfTomorrowInSeconds:Ree,getLimitKey:gee,isObject:tee,isNotEmptyAndHasValue:X7,autoCasterIsNumberCheck:Xv,backtickASTSchemaItems:Aee,isPortTaken:dee,createForkArgs:Oee,autoCastBoolean:Nee,async_set_timeout:Qv,getTableHashAttribute:bee,doesSchemaExist:yee,doesTableExist:Iee,stringifyObj:wee,ms_to_time:Cee,changeExtension:Uee,getEnvCliRootPath:kT,noBootFile:Dee,httpRequest:Lee,transformReq:Mee,convertToMS:Pee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function J7(e){return e instanceof Error?e:new Error(e)}o(J7,"errorizeMessage");function fr(e){return e==null}o(fr,"isEmpty");function X7(e){return!fr(e)&&(e||e===0||e===""||zv(e))}o(X7,"isNotEmptyAndHasValue");function gs(e){return fr(e)||e.length===0||e.size===0}o(gs,"isEmptyOrZeroLength");function Z7(e){if(fr(e))return!0;for(let t=0;t<e.length;t++)if(fr(e[t]))return!0;return!1}o(Z7,"arrayHasEmptyValues");function j7(e){if(gs(e))return!0;for(let t=0;t<e.length;t++)if(gs(e[t]))return!0;return!1}o(j7,"arrayHasEmptyOrZeroLengthValues");function eee(...e){try{return e.join(vn.sep)}catch{console.error(e)}}o(eee,"buildFolderPath");function zv(e){return fr(e)?!1:e===!0||e===!1}o(zv,"isBoolean");function tee(e){return fr(e)?!1:typeof e=="object"}o(tee,"isObject");function ree(e){return gs(e)?Q7:e.slice(0,-z7)}o(ree,"stripFileExtension");function see(e){return fr(e)||e===""||typeof e!="string"?e:Kv[e]!==void 0?Kv[e]:Xv(e)===!0?Number(e):Y7.test(e)?new Date(e):e}o(see,"autoCast");function Jv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}o(Jv,"autoCastJSON");function xT(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=xT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=xT(r);s!==r&&(e[t]=s)}return e}else return Jv(e)}o(xT,"autoCastJSONDeep");function Xv(e){if(e.startsWith("0.")&&Yv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Yv(e))}o(Xv,"autoCasterIsNumberCheck");async function nee(e){if(gs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Vv.emptyDir(e),await Vv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}o(nee,"removeDir");function iee(e,t){if(gs(e)){jt.info("Invalid current version sent as parameter.");return}if(gs(t)){jt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,a=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(a.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(a[l],10)-parseInt(c[l],10),r)return r;return a.length-c.length}o(iee,"compareVersions");function aee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}o(aee,"isCompatibleDataVersion");function oee(e){if(fr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}o(oee,"escapeRawValue");function cee(e){if(fr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}o(cee,"unescapeValue");function uee(e,t){if(fr(e))return jt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let a of i)r+=";"+a+Qd.EOL}!gs(s)&&s[0]===";"?r+=" "+s+n+Qd.EOL:gs(s)||(r+=s+"="+n+Qd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}o(uee,"stringifyProps");function Zv(){let e;try{e=Qd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}o(Zv,"getHomeDir");function lee(){let e=vn.join(Zv(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Wv.existsSync(e)||(e=vn.join(__dirname,"../","hdb_boot_properties.file")),e}o(lee,"getPropsFilePath");function _ee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}o(_ee,"timeoutPromise");async function dee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=F7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}o(dee,"isPortTaken");function Eee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}o(Eee,"isClusterOperation");function fee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return Jd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Jd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(fee,"checkGlobalSchemaTable");function hee(e,t){if(fr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(fr(e)||gs(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}o(hee,"getClusterUser");function mee(){$v.parsePromise=function(e,t,r){return new Promise(function(s,n){$v.parse(e,{header:!0,transformHeader:jv,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}o(mee,"promisifyPapaParse");function jv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}o(jv,"removeBOM");function See(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${x7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}o(See,"createEventPromise");async function pee(e){let t=!0,r=0;do await Qv(K7*r++),(await G7.findPs(e)).length>0&&(t=!1);while(t&&r<W7);if(t)throw new Error(`process ${e} was not started`)}o(pee,"checkProcessRunning");function Tee(e,t){let r=eB(e);if(r)return r;let s=tB(e,t);if(s)return s}o(Tee,"checkSchemaTableExist");function eB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return Jd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}o(eB,"checkSchemaExists");function tB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return Jd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}o(tB,"checkTableExists");function Ree(){let e=zd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=zd().utc().unix();return e-t}o(Ree,"getStartOfTomorrowInSeconds");function gee(){return zd().utc().format("DD-MM-YYYY")}o(gee,"getLimitKey");function Aee(e){try{let t=new q7(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){jt.error("Got an error back ticking items."),jt.error(t)}}o(Aee,"backtickASTSchemaItems");function Oee(e){return[e]}o(Oee,"createForkArgs");function Nee(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}o(Nee,"autoCastBoolean");function bee(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}o(bee,"getTableHashAttribute");function yee(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}o(yee,"doesSchemaExist");function Iee(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}o(Iee,"doesTableExist");function wee(e){try{return JSON.stringify(e)}catch{return e}}o(wee,"stringifyObj");function Cee(e){let t=zd.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}o(Cee,"ms_to_time");function Uee(e,t){let r=vn.basename(e,vn.extname(e));return vn.join(vn.dirname(e),r+t)}o(Uee,"changeExtension");function kT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=k7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}o(kT,"getEnvCliRootPath");var GT;function Dee(){if(GT)return GT;let e=kT();kT()&&Wv.pathExistsSync(vn.join(e,Ge.HDB_CONFIG_FILE))&&(GT=!0)}o(Dee,"noBootFile");function Lee(e,t){let r;return e.protocol==="http:"?r=$7:r=V7,new Promise((s,n)=>{let i=r.request(e,a=>{a.setEncoding("utf8");let c={body:"",headers:a.headers};a.on("data",u=>{c.body+=u}),a.on("end",()=>{s(c)})});i.on("error",a=>{n(a)}),i.write(JSON.stringify(t)),i.end()})}o(Lee,"httpRequest");function Mee(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}o(Mee,"transformReq");function Pee(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}o(Pee,"convertToMS")});var cB=m(($_e,oB)=>{"use strict";var hr=Q(),vee=Ao(),oe=g(),jc=Be(),en=require("path"),{PACKAGE_ROOT:Zd}=g(),sB=Q(),Xd=x(),qa="/dev/null",Bee=en.join(Zd,"launchServiceScripts"),nB=en.join(Zd,"utility/scripts"),Hee=en.join(nB,oe.HDB_RESTART_SCRIPT),iB=en.resolve(Zd,"dependencies",`${process.platform}-${process.arch}`,jc.NATS_BINARY_NAME);function aB(){let t=vee.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 Xd.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:Zd}}o(aB,"generateMainServerConfig");var Fee=9930;function qee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=en.join(e,"clustering",jc.NATS_CONFIG_FILES.HUB_SERVER),r=en.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=sB.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=jc.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Fee?"-"+s:""),script:iB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=qa,i.error_file=qa),i}o(qee,"generateNatsHubServerConfig");var Gee=9940;function xee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=en.join(e,"clustering",jc.NATS_CONFIG_FILES.LEAF_SERVER),r=en.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=sB.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=jc.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Gee?"-"+s:""),script:iB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=qa,i.error_file=qa),i}o(xee,"generateNatsLeafServerConfig");function kee(){hr.initSync();let e=en.join(hr.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:Bee,autorestart:!1};return hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=qa,t.error_file=qa),t}o(kee,"generateClusteringUpgradeV4ServiceConfig");function Vee(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return Xd.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=Xd.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:nB},script:Hee}}o(Vee,"generateRestart");function $ee(){return{apps:[aB()]}}o($ee,"generateAllServiceConfigs");oB.exports={generateAllServiceConfigs:$ee,generateMainServerConfig:aB,generateRestart:Vee,generateNatsHubServerConfig:qee,generateNatsLeafServerConfig:xee,generateClusteringUpgradeV4ServiceConfig:kee}});var PS=m((X_e,AB)=>{"use strict";var Re=g(),Yee=x(),eu=yS(),tu=rt(),As=Be(),Bn=cB(),jd=Q(),tn=q(),Kee=xs(),{startWorker:uB,onMessageFromWorkers:Wee}=_t(),Qee=_a(),zee=require("util"),_B=require("child_process"),{execFile:Jee}=_B,K_e=zee.promisify(_B.exec),W_e=require("systeminformation"),he;AB.exports={enterPM2Mode:Xee,start:Ui,stop:VT,reload:dB,restart:EB,list:$T,describe:hB,connect:rn,kill:rte,startAllServices:ste,startService:YT,getUniqueServicesList:mB,restartAllServices:nte,isServiceRegistered:SB,reloadStopStart:pB,restartHdb:fB,deleteProcess:ete,startClusteringProcesses:RB,startClusteringThreads:gB,isHdbRestartRunning:tte,isClusteringRunning:ate,stopClustering:ite,reloadClustering:ote};var{PACKAGE_ROOT:Q_e}=g(),z_e=g(),{loggerWithTag:J_e}=tn,ru=!1;Wee(e=>{e.type==="restart"&&jd.initSync(!0)});function Xee(){ru=!0}o(Xee,"enterPM2Mode");function rn(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{tn.setupConsoleLogging(),r&&t(r),e(s)})})}o(rn,"connect");var er,Zee=10,lB;function Ui(e){if(ru)return jee(e);let t=Jee(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=er.indexOf(t);i>-1&&er.splice(i,1),!lB&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<Zee&&Ui(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=jd.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),a=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=a.exec(n);){if(c.index&&As.LOG_LEVEL_HIERARCHY[i]>=As.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===As.LOG_LEVELS.ERR||l===As.LOG_LEVELS.WRN?tn.OUTPUTS.STDERR:tn.OUTPUTS.STDOUT;tn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=As.LOG_LEVELS[d]}if(As.LOG_LEVEL_HIERARCHY[i]>=As.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===As.LOG_LEVELS.ERR||l===As.LOG_LEVELS.WRN?tn.OUTPUTS.STDERR:tn.OUTPUTS.STDOUT;tn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(o(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!er){er=[];let n=o(()=>{lB=!0,er&&(er.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)}er.push(t)}o(Ui,"start");function jee(e){return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}o(jee,"startWithPM2");function VT(e){if(!ru){for(let t of er||[])t.name===e&&(er.splice(er.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,a)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(a)})})})}o(VT,"stop");function dB(e){return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}o(dB,"reload");function EB(e){if(!ru)for(let t of er||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}o(EB,"restart");function ete(e){return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}o(ete,"deleteProcess");async function fB(){await Ui(Bn.generateRestart())}o(fB,"restartHdb");async function tte(){let e=await $T();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}o(tte,"isHdbRestartRunning");function $T(){return new Promise(async(e,t)=>{try{await rn()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}o($T,"list");function hB(e){return new Promise(async(t,r)=>{try{await rn()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}o(hB,"describe");function rte(){if(!ru){for(let e of er||[])e.kill();er=[];return}return new Promise(async(e,t)=>{try{await rn()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}o(rte,"kill");async function ste(){try{await RB(),await gB(),await Ui(Bn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}o(ste,"startAllServices");async function YT(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Bn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Bn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Bn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Bn.generateNatsHubServerConfig(),await Ui(t),await eu.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Bn.generateNatsLeafServerConfig(),await Ui(t),await eu.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Bn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ui(t)}catch(t){throw he.disconnect(),t}}o(YT,"startService");async function mB(){try{let e=await $T(),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}}o(mB,"getUniqueServicesList");async function nte(e=[]){try{let t=!1,r=await mB();for(let s=0,n=Object.values(r).length;s<n;s++){let a=Object.values(r)[s].name;e.includes(a)||(a===Re.PROCESS_DESCRIPTORS.HDB?t=!0:await EB(a))}t&&await pB(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}o(nte,"restartAllServices");async function SB(e){if(er?.find(r=>r.name===e))return!0;let t=await Qee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}o(SB,"isServiceRegistered");async function pB(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?jd.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):jd.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await hB(e),s=Yee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await VT(e),await YT(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await fB():await dB(e)}o(pB,"reloadStopStart");var TB;async function RB(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await YT(t)}}o(RB,"startClusteringProcesses");async function gB(){TB=uB(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await tu.createWorkQueueStream(As.WORK_QUEUE_CONSUMER_NAMES),await tu.updateIngestStreamConsumer(),await tu.updateLocalStreams();let e=await Kee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){tn.info("Starting clustering upgrade 4.0.0 process"),uB(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}o(gB,"startClusteringThreads");async function ite(){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 TB.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await VT(t)}}o(ite,"stopClustering");async function ate(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await SB(t)===!1)return!1}return!0}o(ate,"isClusteringRunning");async function ote(){await eu.generateNatsConfig(!0),await tu.reloadNATSHub(),await tu.reloadNATSLeaf(),await eu.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await eu.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}o(ote,"reloadClustering")});var KT=PS(),OB=g();o(async function(){try{let t=await KT.describe(OB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await KT.reload(r.pm_id);await KT.deleteProcess(OB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();
26
+ `+eT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(l9,"getServerOptions");function _9(){let e=Qr.get(e9),t=Qr.get(t9),r;return e&&(e===!0||e.toUpperCase()===iP)&&(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(_9,"getCORSOpts");function d9(){return Qr.get(n9)}a(d9,"getHeaderTimeoutConfig")});var TP=m((kle,pP)=>{"use strict";var{decode:E9}=require("msgpackr"),{isMainThread:f9,parentPort:h9,threadId:Gle}=require("worker_threads"),tT=nt(),Po=Be(),m9=A(),Gc=x(),cP=Q(),_P=A();dt();var S9=qs(),{recordAction:p9,recordActionBinary:T9}=(oi(),re(Ml)),{publishToStream:R9}=tT,xle={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},g9,A9,O9,dP,EP;pP.exports={initialize:fP,workQueueListener:SP,setSubscription:N9,setIgnoreOrigin:y9,getDatabaseSubscriptions:b9};async function fP(){EP=!0,Gc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await tT.getNATSReferences();g9=e,A9=e.info.server_name,O9=t,dP=r}a(fP,"initialize");var Nd=new Map;function N9(e,t,r){let s=Nd.get(e);s||Nd.set(e,s=new Map),s.set(t,r),EP||fP().then(SP)}a(N9,"setSubscription");function b9(){return Nd}a(b9,"getDatabaseSubscriptions");var hP;function y9(e){hP=e}a(y9,"setIgnoreOrigin");var mP=100,uP=new Array(mP),Od=0;async function SP(){let t=await(await dP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await uP[Od],uP[Od]=I9(r).catch(s=>{Gc.error(s)}),++Od>=mP&&(Od=0)}a(SP,"workQueueListener");f9||h9.on("message",async e=>{let{type:t}=e;t===_P.ITC_EVENT_TYPES.SHUTDOWN&&tT.closeConnection()});async function I9(e){let t=E9(e.data);p9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===cP.get(m9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!hP;if(T9(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;Gc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Gc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Nd.get(o)?.get(u);if(!p)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,p.send(t);else if(l.length===1&&!c)p.send({type:lP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:lP(i),value:O,id:_?.[k],table:u}));for(;c;)R.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;p.send({type:"transaction",writes:R,table:u,timestamp:f,onCommit:E,user:h,nodeName:T})}cP.get(_P.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&R9(e.subject.split(".").slice(0,-1).join("."),S9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Gc.error(i)}e.ack()}a(I9,"messageProcessor");function lP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(lP,"convertOperation")});var aT={};je(aT,{disableNATS:()=>C9,setNATSReplicator:()=>rT,start:()=>w9});function w9(){yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&D9()}function C9(e=!0){NP=e}function D9(){if(NP)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];rT(n,r,i)}}cT((r,s)=>{rT(r.tableName,r.databaseName,r),s&&yP(r)}),!RP&&(RP=!0)}function rT(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){yP(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Xr;return(0,gP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<U9}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 bd(i.transaction,i)),o.user=i.user):o=bP),o}a(n,"getNATSTransaction")}function yP(e){let t=yd.default.get(Id.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,oT.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 nT,iT,oT,gP,AP,yd,Id,OP,NP,U9,bP,RP,bd,sT,IP=Se(()=>{de();Zr();nT=C(nt()),iT=C(Be()),oT=C(qs());oa();gP=C(TP()),AP=C(Ht()),yd=C(Q()),Id=C(A()),OP=C(x());a(w9,"start");a(C9,"disableNATS");U9=2;a(D9,"assignReplicationSource");a(rT,"setNATSReplicator");a(yP,"publishSchema");bd=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=yd.default.get(Id.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||(OP.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,nT.publishToStream)(`${iT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,oT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},sT=class extends bd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,AP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};bP=new sT});async function CP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await uT.getResource(e,{});n=new _T(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await uT.get(e);i&&i.delete()}n=new Cd(e,t)}return n}function lT(){return wd++,wd>65500&&(wd=1),wd}var wP,xc,uT,wd,Cd,_T,UP=Se(()=>{de();mc();wP=C(Ht()),xc=C(x());$n();uT=st({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(CP,"getSession");wd=1;a(lT,"getNextMessageId");Cd=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=In.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,p=h.Resource,R=await Ye(f,async()=>{let O=await p.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=lT();let U=k.id;Array.isArray(U)&&(U=mo(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,xc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return lT()}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=In.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},_T=class extends Cd{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=lT();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,xc.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,wP.getNextMonotonicTime)()),(0,xc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),uT.put(this.sessionRecord)),t.qos}}});var fT={};je(fT,{start:()=>M9});async function M9({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:_}=MP(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,js.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;L9&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,PP.getSuperUser)());let{onMessage:u,onClose:l}=MP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,js.info)("Socket error",_)})},{port:t,securePort:s})}function MP(e,t,r,s,n){LP||(LP=!0,rm(_=>{_.push({metric:"mqtt-connections",connections:dT})})),dT++;let i,o={protocolVersion:4},c=(0,Ud.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){dT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&DP.notify({username:s.username,status:en.AUTH_AUDIT_STATUS.SUCCESS,type:en.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,ET.get)(en.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&DP.error({username:s.username,status:en.AUTH_AUDIT_STATUS.FAILURE,type:en.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=CP({user:s,..._}),i=await i}catch(O){return(0,js.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,js.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,js.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=No(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Ud.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?$s(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Ud,PP,ET,en,js,DP,L9,LP,dT,vP=Se(()=>{Ud=require("mqtt-packet");UP();PP=C(br());To();oi();Jr();ET=C(Q()),en=C(A()),js=C(x()),DP=(0,js.loggerWithTag)("auth-event"),L9=!0;a(M9,"start");dT=0;a(MP,"onSocket")});var YP={};je(YP,{loadComponent:()=>Dd,loadComponentDirectories:()=>$P});function $P(e,t){t&&(mT=t),e&&(ST=e);let r=[];if((0,Ts.existsSync)(hT)){let n=(0,Ts.readdirSync)(hT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(hT,o);r.push(Dd(c,mT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Dd(s,mT,s)),Promise.all(r).then(()=>{VP=!0})}async function Dd(e,t,r,s,n){if(!HP.has(e)){HP.set(e,!0),n&&(ST=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Ts.existsSync)(o)?i=(0,FP.parseDocument)((0,Ts.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=H9;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,Ts.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,kP.getHdbBasePath)().length){f=null;break}if(f)_=await Dd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=B9[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,st(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(kc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!BP.includes(p)){BP.push(p);let R=pT.get(TT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);tP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),ST.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,xP.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,qP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=R,$=(0,Mr.relative)(e,O),U=(0,Mr.basename)(e),b=l.path||"/";b=b.startsWith("/")?b:b.startsWith("./")?"/"+U+b.slice(2):b==="."?"/"+U:"/"+U+"/"+b,b+=(b.endsWith("/")?"":"/")+$;try{if(k.isFile()){let P=await v9(O);kc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else kc.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 Vc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Vc(E),null,!0)}}if(kc.isMainThread&&!VP&&(0,GP.watchDir)(e,async()=>$P()),i.extensionModule)return await Bu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Vc(i))}}}var Ts,Mr,kc,FP,pT,TT,qP,GP,xP,kP,P9,v9,hT,ST,VP,mT,B9,H9,BP,HP,Vc,KP=Se(()=>{Ts=require("fs"),Mr=require("path"),kc=require("worker_threads"),FP=require("yaml"),pT=C(Q()),TT=C(A());Fg();kg();Vg();aL();KM();JM();qP=C(require("fast-glob")),GP=C(dt());xE();Jr();xP=C(W());Zr();de();rP();kP=C(Q()),P9=C(aP());U_();IP();vP();({readFile:v9}=Ts.promises),hT=pT.get(TT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),ST=new Map;a($P,"loadComponentDirectories");B9={REST:mp,graphqlSchema:GE,jsResource:VE,fastifyRoutes:zp,login:YE,static:Jp,operationsApi:P9,customFunctions:{},clustering:aT,authentication:Sc,mqtt:fT},H9={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},BP=[],HP=new Map;a(Dd,"loadComponent");Vc=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 ZP=m((m_e,XP)=>{"use strict";var Pd=require("fs-extra"),RT=require("path"),Ld=x(),WP=V(),Md=A(),JP=Q(),F9=Tr();XP.exports=q9;async function q9(){let e=G9(),t=JP.get(Md.CONFIG_PARAMS.ROOTPATH),r=RT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Md.PACKAGE_ROOT}},n=RT.join(t,"node_modules");await Pd.ensureDir(n);let i,o=!0,c=!1;try{i=await Pd.readJson(r)}catch(u){if(WP.isEmptyOrZeroLength(e))return;if(u.code!==Md.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!WP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await QP(l);s.dependencies[u]=_+l}if(!o){Ld.notify("Installing components"),await zP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await QP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Ld.notify("Removing component",u),c=!0);c&&(Ld.notify("Updating components."),await zP(r,s))}a(q9,"installComponents");function G9(){let e=F9.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(G9,"getComponentsConfig");async function QP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":RT.extname(e)||await Pd.pathExists(e)?"file:":"github:"}a(QP,"getPkgPrefix");async function zP(e,t){Ld.trace("npm installing components package.json",t),await Pd.writeFile(e,JSON.stringify(t,null," ")),await F_().installAllRootModules(JP.get(Md.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(zP,"installPackages")});var tv=m((p_e,ev)=>{var{isMainThread:jP}=require("worker_threads"),{getTables:x9}=(de(),re(Ne)),{loadComponentDirectories:k9,loadComponent:V9}=(KP(),re(YP)),{resetResources:$9}=(mc(),re(HU)),Y9=ZP(),K9=Tr(),{dirname:W9}=require("path"),{getConnection:Q9}=nt(),z9=Q(),J9=A(),gT=new Map;async function X9(e=!1){!jP&&z9.get(J9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Q9(),jP&&await Y9();let t=$9();x9(),t.isWorker=e,await V9(W9(K9.getConfigFilePath()),t,"hdb",!0,gT),await k9(gT,t);let r=[];for(let[s]of gT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(X9,"loadRootComponents");ev.exports.loadRootComponents=X9});var dt=m((g_e,Mn)=>{"use strict";var{Worker:Z9,MessageChannel:j9,parentPort:Rs,isMainThread:yT,threadId:e7,workerData:$c}=require("worker_threads"),{PACKAGE_ROOT:t7}=A(),{join:nv,isAbsolute:r7,extname:Bd}=require("path"),{server:s7}=(Jr(),re(pu)),{watch:n7,readdir:i7}=require("fs/promises"),{totalmem:rv}=require("os"),IT=A(),Ni=x(),R_e=A(),{randomBytes:o7}=require("crypto"),a7=1024*1024,Ln=[],Dn=[],c7=50,iv=1e4,u7="restart",ov="request_thread_info",av="resource_report",cv="thread_info",uv="added-port",l7="ack",AT;Mn.exports={startWorker:OT,restartWorkers:wT,shutdownWorkers:f7,workers:Ln,setMonitorListener:A7,onMessageFromWorkers:h7,onMessageByType:m7,broadcast:S7,broadcastWithAcknowledgement:T7,setChildListenerByType:E7,getWorkerIndex:_v,getTicketKeys:dv,setMainIsWorker:_7,restartNumber:$c?.restartNumber||1};var lv;function _v(){return $c?$c.workerIndex:lv?0:void 0}a(_v,"getWorkerIndex");function _7(e){lv=e}a(_7,"setMainIsWorker");var vd;function dv(){return vd||(vd=yT?o7(48):$c.ticketKeys,vd)}a(dv,"getTicketKeys");Object.defineProperty(s7,"workerIndex",{get(){return _v()}});var Ev={[ov](e,t){R7(t)},[av](e,t){g7(t,e)}};function OT(e,t={}){let r=process.constrainedMemory?.()||rv();r=Math.min(r,rv());let s=Math.max(Math.floor(r/a7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Dn){let{port1:u,port2:l}=new j9;c.postMessage({type:uv,port:u},[u]),i.push(l)}Bd(e)||(e+=".js");let o=new Z9(r7(e)?e:nv(t7,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:Mn.exports.restartNumber,ticketKeys:dv()},transferList:i},t));return Fd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{OT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Ni.error("Worker error:",c)}),o.on("exit",c=>{Ln.splice(Ln.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<c7?(t.unexpectedRestarts=o.unexpectedRestarts+1,OT(e,t)):Ni.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Ev[c.type]?.(c,o)}),Ln.push(o),N7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(OT,"startWorker");var d7=[IT.THREAD_TYPES.HTTP];async function wT(e=null,t=2,r=!0){if(yT){if(r){let{loadRootComponents:n}=tv();await n()}Mn.exports.restartNumber++,t<1&&(t=t*Ln.length);let s=[];for(let n of Ln.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Mn.exports.restartNumber,type:IT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=d7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),iv*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 Rs.postMessage({type:u7,workerType:e})}a(wT,"restartWorkers");function E7(e,t){Ev[e]=t}a(E7,"setChildListenerByType");function f7(e){return wT(e,1/0,!1)}a(f7,"shutdownWorkers");var fv=[];function h7(e){fv.push(e)}a(h7,"onMessageFromWorkers");var NT=new Map;function m7(e,t){let r=NT.get(e);r||NT.set(e,r=[]),r.push(t)}a(m7,"onMessageByType");function S7(e){for(let t of Dn)try{t.postMessage(e)}catch(r){Ni.error("Unable to send message to worker",r)}}a(S7,"broadcast");var Hd=new Map,p7=1;function T7(e){return new Promise(t=>{let r=0;for(let s of Dn)try{let n=p7++,i=a(()=>{Hd.delete(n),--r===0&&t(),s!==Rs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Hd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Hd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ni.error("Unable to send message to worker",n)}r===0&&t()})}a(T7,"broadcastWithAcknowledgement");function R7(e){e.postMessage({type:cv,workers:hv()})}a(R7,"sendThreadInfo");function hv(){let e=Date.now();return Ln.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(hv,"getChildWorkerInfo");function g7(e,t){e.resources=t,e.resources.updated=Date.now()}a(g7,"recordResourceReport");var bT;function A7(e){bT=e}a(A7,"setMonitorListener");var O7=1e3,sv=!1;function N7(){sv||(sv=!0,setInterval(()=>{for(let e of Ln){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}bT&&bT()},O7).unref())}a(N7,"startMonitoring");var b7=1e3;if(Rs){Fd(Rs);for(let e of $c.addPorts)Fd(e);setInterval(()=>{let e=process.memoryUsage();Rs.postMessage({type:av,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},b7).unref(),AT=a(()=>new Promise((e,t)=>{Rs.on("message",r),Rs.postMessage({type:ov});function r(s){s.type===cv&&(Rs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else AT=hv;Mn.exports.getThreadInfo=AT;function Fd(e,t){Dn.push(e),e.on("message",r=>{if(r.type===uv)Fd(r.port);else if(r.type===l7){let s=Hd.get(r.id);s&&s()}else{for(let n of fv)n(r,e);let s=NT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Ni.error(i)}}}).on("close",()=>{Dn.splice(Dn.indexOf(e),1)}).on("exit",()=>{Dn.splice(Dn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Fd,"addPort");if(yT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await i7(s,{withFileTypes:!0}))i.isDirectory()&&r(nv(s,i.name));for await(let{filename:i}of n7(s,{persistent:!1}))(Bd(i)===".ts"||Bd(i)===".js"||Bd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await wT(),Ni.info("Reloaded HarperDB components")},100))},"watch_dir");Mn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Rs.on("message",async e=>{let{type:t}=e;t===IT.ITC_EVENT_TYPES.SHUTDOWN&&(Mn.exports.restartNumber=e.restartNumber,Rs.unref(),setTimeout(()=>{Ni.warn("Thread did not voluntarily terminate",e7),process.exit(0)},iv).unref())})});function MT(e){let t=e.auditStore=e.openDB(Rv.AUDIT_STORE_NAME,I7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,Av.getWorkerIndex)()===0&&e.on("aftercommit",()=>{UT||(UT=setTimeout(()=>{if(UT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-mv,0]})){if((n[0]&15)===LT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},mv/10).unref())}),t}function xd(e,t,r){let s=bv[r.type],n=3;if(t?t.length>80?(s|=qd,n=(0,tn.writeKey)(t,gs,e?14:6),CT.setUint16(2,n)):(n=(0,tn.writeKey)(t,gs,e?11:3),gs[1]=n):gs[1]=0,e){s|=Nv;let i=s&qd?6:3;CT.setFloat64(i,e),t||(n=i+8)}return gs[0]=s,s&qd?CT.setUint16(4,0):gs[2]=0,r.value?Buffer.concat([gs.slice(0,n),r.value]):gs.subarray(0,n)}function Pn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&qd,i=n?6:3,o;r&Nv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&DT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:bv[r&7],value:u,lastVersion:o,get user(){return c?(0,tn.readKey)(e,i,c):void 0}}}var tn,Gd,Rv,gv,Av,Ov,gs,CT,y7,I7,mv,UT,DT,Sv,LT,pv,Tv,qd,Nv,bv,Yc=Se(()=>{tn=require("ordered-binary"),Gd=C(Q()),Rv=C(xe()),gv=C(A()),Av=C(dt()),Ov=C(V());(0,Gd.initSync)();gs=Buffer.alloc(1024),CT=new DataView(gs.buffer,gs.byteOffset,1024),y7={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,tn.writeKey)(e[2],t,r+12)}else return(0,tn.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,tn.readKey)(e,t+12,r)]}else return(0,tn.readKey)(e,t,r)}},I7={encoding:"binary",keyEncoder:y7},mv=(0,Ov.convertToMS)((0,Gd.get)(gv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,UT=null;a(MT,"openAuditStore");DT=16,Sv=1,LT=2,pv=3,Tv=4,qd=128,Nv=64,bv={put:Sv|DT,[Sv]:"put",delete:LT,[LT]:"delete",message:pv|DT,[pv]:"message",invalidate:Tv,[Tv]:"invalidate"};a(xd,"createAuditEntry");a(Pn,"readAuditEntry")});var PT,bi,w7,Kc,kd,yv=Se(()=>{PT=C(Ht());Yc();bi=Symbol("completion"),w7=100,Kc=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,PT.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[bi]&&(i||(i=[]),i.push(d[bi])),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,xd(_.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<w7>>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=[]}},kd=class extends Kc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,PT.getNextMonotonicTime)())}getReadTxn(){}}});function Uv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Bo||((0,yi.onMessageByType)(wv,d=>{let E=d.auditIds;BT(d.path,E,d.txnId)}),(0,yi.onMessageByType)(Cv,d=>{(0,As.trace)("confirming to proceed with txn",d.txnId)}),Bo=Object.create(null));let c=Bo[i]||(Bo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=mo(t);let l=new vT(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 BT(e,t,r,s){if(!Bo)return;let n=Bo[e];if(n){if(vo&&vo+1!==r){(0,As.trace)("Waiting to ensure latest txn id",vo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c);if(vo+1!==r){await(0,yi.broadcastWithAcknowledgement)({type:Cv,txnId:r});for(let[o,c]of Vd)o<r&&((0,As.trace)("Txn",r,"waiting for txn",o),await c)}Vd.delete(r),(0,As.trace)("Proceeding with txn id",r),vo=r-1,BT(e,t,r,s)})();return Vd.set(r,i),i}(0,As.trace)("Notifying with txn id",r,s),vo=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,Iv.writeKey)(i,U7,0);let _=i[3];_&&(i.length=3);let d,E=mo(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,As.info)("omitting",u,p.startTime,o);continue}try{if(p.crossThreads===!1&&!s)continue;if(d===void 0){let R=n.auditStore.get(i);if(!R||(d=Pn(R,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}p.listener(u,d,o)}catch(R){console.error(R),(0,As.info)(R)}}}if(E==null)break;let T=E.lastIndexOf?.("/",E.length-2);T>-1?E=E.slice(0,T+1):E=null,f=!0}while(!0)}}}function Dv(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&C7)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,yi.broadcast)({type:wv,path:n,auditIds:l,txnId:c,start:u}),BT(n,l,c,!0))})}}var As,yi,Iv,wv,Cv,C7,Bo,U7,vT,vo,Vd,Lv=Se(()=>{As=C(x()),yi=C(dt()),Iv=require("ordered-binary");oa();mc();Yc();wv="transaction",Cv="transaction-await",C7=67108864,U7=Buffer.alloc(4096);a(Uv,"addSubscription");vT=class extends Xr{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"}}},Vd=new Map;a(BT,"notifyFromTransactionData");a(Dv,"listenToCommits")});var Lp={};je(Lp,{coerceType:()=>$d,makeTable:()=>Kd,setServerUtilities:()=>v7});function Kd(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=[]),Dv(i,u);let T=0,p,R,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&XT();class F extends mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,q=w.table?ve[c][w.table]:F;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await q.getResource(w.id,w,Wc);switch(w.type){case"put":return L._writeUpdate(v,Wc);case"delete":return L._writeDelete(Wc);case"publish":return L._writePublish(v,Wc);case"invalidate":return L.invalidate(Wc);default:Ci.error("Unknown operation",w.type,w.id)}},"writeUpdate");try{let w=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);w&&f==null&&(f=!0);let v=S.subscribeOnThisThread?S.subscribeOnThisThread((0,wi.getWorkerIndex)()):(0,wi.getWorkerIndex)()===0,q=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(q)for await(let L of q)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(st({table:n,database:c,attributes:J,origin:"cluster"}),Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Jc.signalUserChange(new Xc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,q,G={transaction:w?.getReadTxn()},X;return iu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?q(Y):(y[ce]=J?.value,y[Xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,q=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,wi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&F.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,XT(),F.audit=!0}static coerceId(S){return S===""?null:$d(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(F.tableName+"/"+S),r[S].drop();_.remove(F.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));Jc.signalSchemaChange(new Xc.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.DROP_TABLE,c,n))}static Source;static get(S,N){return S&&typeof S=="object"&&!Array.isArray(S)&&S.url===""?{recordCount:this.getRecordCount(),records:"./",name:n,database:c,attributes:h}:super.get(S,N)}get(S){if(typeof S=="string")return this.getProperty(S);if(this[vs])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Ae]?.hasOwnProperty("returnNonexistent")&&this[Ae].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.read){let y=D[n].attribute_permissions;if(y){N||(N={});let w=N.select;if(w){let v=HT(y,"read");N.select=w.filter(q=>v[q])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=HT(w,"update");for(let q in N)if(!v[q])return!1;if(D)for(let q of w){let L=q.attribute_name;!q.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=HT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[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=F.Source,q,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(q=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[bi]:q}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,xv.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,q=this[ae];y||(this[ce]={}),D.addWrite({key:q,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(q);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ca(S);else{if(S[vv]&&(w=!wu(S),w))return;t&&S[t]!==q&&(S[t]=q),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ca(S);let Y=F.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(q,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Ci.trace("Checking timestamp for put",q,this[Xt]>L,this[Xt],L),this[Xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Ho.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Fn(-1),{type:E&&"put",value:J,[bi]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(v,q)=>{let L=this[ce];if(q){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=F.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Xt]>v))return Ze(this[ae],L),Ci.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||JT(),q||Fn(1)):i.remove(this[ae]),{type:E&&"delete",[bi]:w}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let D=S.reverse===!0,y=S.conditions;y?y.length===void 0&&(y=Array.from(y)):y=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ae]&&(y=[{attribute:null,comparator:"prefix",value:this[ae]}].concat(y));for(let Y of y){let j=Y[0]??Y.attribute,De=j==null?k:h.find(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,Ii.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>$d(De,j)):$d(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,qv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Qc.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===Qc.SEARCH_TYPES.CONTAINS||j===Qc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Qc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=L7:Y.estimated_count=D7}return Y.estimated_count}));let v=N.getReadTxn();v.use();let q=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:q?.length<4}:{start:!1,transaction:v,lazy:q?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Ho.SKIP);else{let Y=ME(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(PE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let on=y[De],nE=ME(on,v,D,F,S.allowFullScan);Y=Y.concat(nE)}let j=new Set;Y=Y.filter(De=>j.has(De)?!1:(j.add(De),!0)),G=J(Y)}}(S.offset||S.limit!==void 0)&&(G=G.slice(S.offset,S.limit!==void 0?(S.offset||0)+S.limit:void 0)),G.onDone=()=>{v.done()};let X=this[Ae];function J(Y,j){let De=j?.length,on={transaction:v,lazy:De>0||q?.length<4,alwaysPrefetch:!0};return Y.map(nE=>new Promise(iE=>iu(nE,X,on,null,!1,CB=>{let oE=CB?.value;if(!oE)return iE(Ho.SKIP);for(let aE=0;aE<De;aE++)if(!j[aE](oE))return iE(Ho.SKIP);iE(oE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||st({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Uv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[vs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[vs]){if(w){if(y)throw new Ii.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:q}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=Pn(q,i);(D==null||Fv(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:q,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=q;if(q.length>3&&(J=q.slice(2)),X!==s)continue;if(D==null||Fv(D,J)){let Y=Pn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ci.error("Error getting history entry",q,G)}for(let q=v.length;q>0;)N.send(v[--q]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:q,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,Gv.MAXIMUM_KEY],versions:!0}))q&&N.send({id:v,timestamp:L,value:q})}else{y&&!w&&(w=0);let v=this[Xt];if(w<v){let q=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=Pn(X,i);q.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=q.length;G>0;)N.send(q[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(q,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=F.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||JT(),Fn(1));let X={type:"message",value:i.encoder.encode(S),[bi]:w};return!D.hasWrittenTime&&this[Xt]>q&&(q=X.newTxnTime=this[Xt]+.001),i.put(y,G??null,q),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new Kc(i,S.user,u)),D}else return new kd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(q=>typeof q=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ii.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return R?!!this[Bv]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ii.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ii.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return st({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return st({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Uu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,q]=D;D.length>3&&(q=D.slice(2)),v===s&&(N=i.remove(q))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,q]=D;if(D.length>3&&(q=D.slice(2)),v!==s)continue;let L=Pn(y,i);L.id=q,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],q=u.get(v);if(q){let L=Pn(q,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}F.updatedAttributes();let Oe=F.prototype;return Oe[vv]=!0,d&&F.setTTLExpiration(d/1e3),b&&wB(),F;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,q=N?.[y],L=S?.[y];if(q===L&&!v)continue;D=!0;let G=(0,zc.getIndexedValues)(L);if(G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,zc.getIndexedValues)(q),G){Mv&&w.prefetch(G.map(X=>({key:X,value:Z})),Hv);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function iu(Z,S,N,D,y,w){let v=a(()=>{let q=N.transaction;if(q?.isDone)throw new Error("Invalid read transaction");let L;q&&!q.hasRunLoadRecord&&(L=!0,q.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(q)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&eo(Y,"cache-hit",n),Y&&!y&&(D&&(D[Bv]=!0),R))return Vo(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(iu,"loadRecord");function Li(){P=new Set,(0,wi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Li,"setupCommitListeners");async function Vo(Z,S=null,N,D){if(N<0){let L;return P||Li(),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(Vo(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(Vo(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},q=D?.responseHeaders;q&&(v.responseHeaders=q);try{let L=performance.now(),G=await F.Source.get(Z,v),X=performance.now()-L;ls(X,"cache-resolution",n),q&&q.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,zc.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],xd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a(Vo,"getFromSource");function Fn(Z){T||(T=i.get([Pv,FT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Pv,FT.threadId],T)},50))}a(Fn,"recordDeletion");function JT(){p||(p=setTimeout(()=>{if(p=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Fn(-1)}}},F.getRecordCount()*100+P7).unref())}a(JT,"enqueueDeletionCleanup");function XT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Fn(-1)})}a(XT,"addDeleteRemoval");function wB(){(0,wi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&F.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Ci.error("Error in evicting old records",Z)}},M7).unref()}a(wB,"runRecordExpirationEviction")}function HT(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 Hv(){}function v7(e){xv=e}function $d(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!B7.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Yd.autoCast)(e)}function Fv(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var zr,Ho,zc,qv,FT,Qc,Zc,Ii,Jc,Xc,Ci,Gv,wi,Yd,xv,D7,L7,M7,Mv,Pv,Xt,vv,$_e,Bv,Wc,P7,B7,cd=Se(()=>{zr=C(A()),Ho=require("lmdb"),zc=C(Ht()),qv=require("lodash"),FT=require("worker_threads");Zr();yv();Qc=C(xe()),Zc=C(Q());Lv();Ii=C(W()),Jc=C(Gs()),Xc=C(qr());de();Pu();Ci=C(x());Lu();$n();Gv=require("ordered-binary"),wi=C(dt());Yc();Yd=C(V());oi();D7=1e8,L7=1e7,M7=6e4;Zc.initSync();Mv=Zc.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Pv=Symbol.for("deletions"),Xt=Symbol.for("version"),vv=Symbol.for("incremental-update"),$_e=Symbol("source-resource"),Bv=Symbol("load-from-source"),Wc={isNotification:!0,allowInvalidated:!0},P7=(0,Yd.convertToMS)(Zc.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(Kd,"makeTable");a(HT,"attributesAsObject");a(Hv,"noop");a(v7,"setServerUtilities");B7=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a($d,"coerceType");a(Fv,"isDescendantId")});var Ne={};je(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>kh,dropTableMeta:()=>k7,getDatabases:()=>xr,getTables:()=>H7,onUpdatedTable:()=>cT,readMetaDb:()=>jc,resetDatabases:()=>F7,table:()=>st,tables:()=>nr});function H7(){return Jd||xr(),nr||{}}function xr(){if(Jd)return ve;Jd=!0,xo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,Er.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,Er.existsSync)(e))for(let r of(0,Er.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&jc((0,Me.join)(e,r.name),null,s)}if((0,Er.existsSync)((0,Go.getBaseSchemaPath)())){for(let r of(0,Er.readdirSync)((0,Go.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Go.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Go.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,Er.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);jc((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,Er.existsSync)(n))for(let o of(0,Er.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&jc((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,Er.existsSync)(u)&&jc(u,o,r,null,!0)}}for(let r in ve){let s=xo.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[Xd]}}return xo=null,ve}}function F7(){Jd=!1;for(let[,e]of vn)e.needsDeletion=!0;xr();for(let[e,t]of vn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),vn.delete(e));return ve}function jc(e,t,r=xT,s,n){let i=new qT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=vn.get(e);o?o.needsDeletion=!1:(o=(0,Wd.open)(i),vn.set(e,o));let c=new Ui.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Fo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,Er.existsSync)(s)&&(i.path=s,l=(0,Wd.open)(i),l.isLegacy=!0):l=MT(o));let _=Yv(r),d=_[Xd],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let F of T)if(F.is_hash_attribute||F.isPrimaryKey){p=F;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,yt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(qo)||0)&&u.putSync(qo,$+1):(p.tableId=$=u.get(qo),$||($=1),u.putSync(qo,$+1),u.putSync(p.key,p));let F=new Ui.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,F),U.rootStore=o,U.tableId=$}for(let F of T){F.attribute=F.name;try{if(!F.is_hash_attribute&&(F.indexed||F.attribute&&!F.name)){if(!O[F.name]){let Ze=new Ui.default(!F.is_hash_attribute,F.is_hash_attribute);Le.trace(`openDB ${F.key} from ${r}`),O[F.name]=o.openDB(F.key,Ze)}let Oe=k.find(Ze=>Ze.name===F.name);Oe?k.splice(k.indexOf(Oe),1,F):k.push(F)}}catch(Oe){Le.error("Error trying to update attribute",F,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=Kv(_,f,Kd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let F of kT)F(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Yv(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),xo&&!xo.has(e)){let r=new Set;t[Xd]=r,xo.set(e,r)}return t}function Kv(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=xT),xr();let r=Yv(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,Er.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=vn.get(i);if(!o){let c=new qT.default(i,!1);o=(0,Wd.open)(c),vn.set(i,o)}return o}async function kh(e){if(!ve[e])throw new Error("Schema does not exist");let t=ve[e];for(let r in t){let n=t[r].primaryStore.rootStore;vn.delete(n.path),n.status==="open"&&(await n.close(),await kv.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[Xd]}delete ve[e]}function st({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=xT);let u=Fa({database:t,table:e}),l=ve[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Ui.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let p,R;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=MT(u)),E=s.find(F=>F.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(Zt.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 Ui.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,T),z.tableId=h.get(qo),z.tableId||(z.tableId=1),h.putSync(qo,z.tableId+1),E.tableId=z.tableId,_=Kv(l,e,Kd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Fo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Fo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let F=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,F)}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 F=new Ui.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<eu.workerData?.restartNumber)&&(p=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(p=!0,$(),h.put(b,U))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=x7(_,k,O):p&&Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of kT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function x7(e,t,r){try{let s=e.schemaVersion;await Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,T=(0,Vv.getIndexedValues)(_[h]);if(T)for(let p=0,R=T.length;p<R;p++)f.dbi.put(T[p],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),eu.workerData&&eu.workerData.restartNumber!==$v.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>q7?await n:u>G7&&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 Qd.signalSchemaChange(new zd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function k7({table:e,database:t}){let r=Fa({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function cT(e){kT.push(e)}var yt,Fo,Wd,Me,Er,Go,Ui,qT,Zt,kv,GT,Vv,Qd,zd,eu,Le,$v,xT,Xd,nr,ve,qo,kT,Jd,vn,xo,q7,G7,de=Se(()=>{yt=C(Q()),Fo=C(xe()),Wd=require("lmdb"),Me=require("path"),Er=require("fs"),Go=C(we());cd();Ui=C(Fu()),qT=C(Gu()),Zt=C(A()),kv=C(require("fs-extra")),GT=require("../../index"),Vv=C(Ht()),Qd=C(Gs()),zd=C(qr()),eu=require("worker_threads"),Le=C(x()),$v=C(dt());Yc();xT="data",Xd=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,GT._assignPackageExport)("databases",ve);(0,GT._assignPackageExport)("tables",nr);qo=Symbol.for("next-table-id"),kT=[],vn=new Map;a(H7,"getTables");a(xr,"getDatabases");a(F7,"resetDatabases");a(jc,"readMetaDb");a(Yv,"ensureDB");a(Kv,"setTable");a(Fa,"database");a(kh,"dropDatabase");a(st,"table");q7=1e3,G7=10;a(x7,"runIndexing");a(k7,"dropTableMeta");a(cT,"onUpdatedTable")});var V=m((j_e,oB)=>{"use strict";var Bn=require("path"),Xv=require("fs-extra"),jt=x(),Wv=require("fs-extra"),Zd=require("os"),V7=require("net"),$7=require("recursive-iterator"),Ge=A(),Y7=UR(),Qv=require("papaparse"),jd=require("moment"),{inspect:K7}=require("util"),zv=require("is-number"),Z_e=require("lodash"),W7=require("minimist"),Q7=require("https"),z7=require("http"),{hdb_errors:eE}=W(),J7=/^((\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)))$/,Zv=require("util").promisify(setTimeout),X7=100,Z7=5,j7="",eee=4,Jv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};oB.exports={isEmpty:fr,isEmptyOrZeroLength:Os,arrayHasEmptyValues:see,arrayHasEmptyOrZeroLengthValues:nee,buildFolderPath:iee,isBoolean:jv,errorizeMessage:tee,stripFileExtension:aee,autoCast:cee,autoCastJSON:eB,autoCastJSONDeep:$T,removeDir:uee,compareVersions:lee,isCompatibleDataVersion:_ee,escapeRawValue:dee,unescapeValue:Eee,stringifyProps:fee,timeoutPromise:mee,isClusterOperation:pee,getClusterUser:Ree,checkGlobalSchemaTable:Tee,getHomeDir:rB,getPropsFilePath:hee,promisifyPapaParse:gee,removeBOM:sB,createEventPromise:Aee,checkProcessRunning:Oee,checkSchemaTableExist:Nee,checkSchemaExists:nB,checkTableExists:iB,getStartOfTomorrowInSeconds:bee,getLimitKey:yee,isObject:oee,isNotEmptyAndHasValue:ree,autoCasterIsNumberCheck:tB,backtickASTSchemaItems:Iee,isPortTaken:See,createForkArgs:wee,autoCastBoolean:Cee,async_set_timeout:Zv,getTableHashAttribute:Uee,doesSchemaExist:Dee,doesTableExist:Lee,stringifyObj:Mee,ms_to_time:Pee,changeExtension:vee,getEnvCliRootPath:YT,noBootFile:Bee,httpRequest:Hee,transformReq:Fee,convertToMS:qee,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function tee(e){return e instanceof Error?e:new Error(e)}a(tee,"errorizeMessage");function fr(e){return e==null}a(fr,"isEmpty");function ree(e){return!fr(e)&&(e||e===0||e===""||jv(e))}a(ree,"isNotEmptyAndHasValue");function Os(e){return fr(e)||e.length===0||e.size===0}a(Os,"isEmptyOrZeroLength");function see(e){if(fr(e))return!0;for(let t=0;t<e.length;t++)if(fr(e[t]))return!0;return!1}a(see,"arrayHasEmptyValues");function nee(e){if(Os(e))return!0;for(let t=0;t<e.length;t++)if(Os(e[t]))return!0;return!1}a(nee,"arrayHasEmptyOrZeroLengthValues");function iee(...e){try{return e.join(Bn.sep)}catch{console.error(e)}}a(iee,"buildFolderPath");function jv(e){return fr(e)?!1:e===!0||e===!1}a(jv,"isBoolean");function oee(e){return fr(e)?!1:typeof e=="object"}a(oee,"isObject");function aee(e){return Os(e)?j7:e.slice(0,-eee)}a(aee,"stripFileExtension");function cee(e){return fr(e)||e===""||typeof e!="string"?e:Jv[e]!==void 0?Jv[e]:tB(e)===!0?Number(e):J7.test(e)?new Date(e):e}a(cee,"autoCast");function eB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(eB,"autoCastJSON");function $T(e){if(e&&typeof e=="object"){if(Array.isArray(e))for(let t=0,r=e.length;t<r;t++){let s=e[t],n=$T(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=$T(r);s!==r&&(e[t]=s)}return e}else return eB(e)}a($T,"autoCastJSONDeep");function tB(e){if(e.startsWith("0.")&&zv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&zv(e))}a(tB,"autoCasterIsNumberCheck");async function uee(e){if(Os(e))throw new Error(`Directory path: ${e} does not exist`);try{await Wv.emptyDir(e),await Wv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(uee,"removeDir");function lee(e,t){if(Os(e)){jt.info("Invalid current version sent as parameter.");return}if(Os(t)){jt.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(lee,"compareVersions");function _ee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(_ee,"isCompatibleDataVersion");function dee(e){if(fr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(dee,"escapeRawValue");function Eee(e){if(fr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(Eee,"unescapeValue");function fee(e,t){if(fr(e))return jt.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+Zd.EOL}!Os(s)&&s[0]===";"?r+=" "+s+n+Zd.EOL:Os(s)||(r+=s+"="+n+Zd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(fee,"stringifyProps");function rB(){let e;try{e=Zd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(rB,"getHomeDir");function hee(){let e=Bn.join(rB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Xv.existsSync(e)||(e=Bn.join(__dirname,"../","hdb_boot_properties.file")),e}a(hee,"getPropsFilePath");function mee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(mee,"timeoutPromise");async function See(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=V7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(See,"isPortTaken");function pee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(pee,"isClusterOperation");function Tee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Tee,"checkGlobalSchemaTable");function Ree(e,t){if(fr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(fr(e)||Os(e)){jt.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){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Ree,"getClusterUser");function gee(){Qv.parsePromise=function(e,t,r){return new Promise(function(s,n){Qv.parse(e,{header:!0,transformHeader:sB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(gee,"promisifyPapaParse");function sB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(sB,"removeBOM");function Aee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${K7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(Aee,"createEventPromise");async function Oee(e){let t=!0,r=0;do await Zv(X7*r++),(await Y7.findPs(e)).length>0&&(t=!1);while(t&&r<Z7);if(t)throw new Error(`process ${e} was not started`)}a(Oee,"checkProcessRunning");function Nee(e,t){let r=nB(e);if(r)return r;let s=iB(e,t);if(s)return s}a(Nee,"checkSchemaTableExist");function nB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return eE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nB,"checkSchemaExists");function iB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return eE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(iB,"checkTableExists");function bee(){let e=jd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=jd().utc().unix();return e-t}a(bee,"getStartOfTomorrowInSeconds");function yee(){return jd().utc().format("DD-MM-YYYY")}a(yee,"getLimitKey");function Iee(e){try{let t=new $7(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){jt.error("Got an error back ticking items."),jt.error(t)}}a(Iee,"backtickASTSchemaItems");function wee(e){return[e]}a(wee,"createForkArgs");function Cee(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(Cee,"autoCastBoolean");function Uee(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Uee,"getTableHashAttribute");function Dee(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Dee,"doesSchemaExist");function Lee(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(Lee,"doesTableExist");function Mee(e){try{return JSON.stringify(e)}catch{return e}}a(Mee,"stringifyObj");function Pee(e){let t=jd.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(Pee,"ms_to_time");function vee(e,t){let r=Bn.basename(e,Bn.extname(e));return Bn.join(Bn.dirname(e),r+t)}a(vee,"changeExtension");function YT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=W7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(YT,"getEnvCliRootPath");var VT;function Bee(){if(VT)return VT;let e=YT();YT()&&Xv.pathExistsSync(Bn.join(e,Ge.HDB_CONFIG_FILE))&&(VT=!0)}a(Bee,"noBootFile");function Hee(e,t){let r;return e.protocol==="http:"?r=z7:r=Q7,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(Hee,"httpRequest");function Fee(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Fee,"transformReq");function qee(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(qee,"convertToMS")});var dB=m((tde,_B)=>{"use strict";var hr=Q(),Gee=Na(),oe=A(),tu=Be(),rn=require("path"),{PACKAGE_ROOT:rE}=A(),aB=Q(),tE=V(),ko="/dev/null",xee=rn.join(rE,"launchServiceScripts"),cB=rn.join(rE,"utility/scripts"),kee=rn.join(cB,oe.HDB_RESTART_SCRIPT),uB=rn.resolve(rE,"dependencies",`${process.platform}-${process.arch}`,tu.NATS_BINARY_NAME);function lB(){let t=Gee.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 tE.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:rE}}a(lB,"generateMainServerConfig");var Vee=9930;function $ee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.HUB_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==Vee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a($ee,"generateNatsHubServerConfig");var Yee=9940;function Kee(){hr.initSync(!0);let e=hr.get(oe.CONFIG_PARAMS.ROOTPATH),t=rn.join(e,"clustering",tu.NATS_CONFIG_FILES.LEAF_SERVER),r=rn.join(hr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=aB.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=tu.LOG_LEVEL_FLAGS[hr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==Yee?"-"+s:""),script:uB,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 hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ko,i.error_file=ko),i}a(Kee,"generateNatsLeafServerConfig");function Wee(){hr.initSync();let e=rn.join(hr.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:xee,autorestart:!1};return hr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ko,t.error_file=ko),t}a(Wee,"generateClusteringUpgradeV4ServiceConfig");function Qee(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return tE.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=tE.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:cB},script:kee}}a(Qee,"generateRestart");function zee(){return{apps:[lB()]}}a(zee,"generateAllServiceConfigs");_B.exports={generateAllServiceConfigs:zee,generateMainServerConfig:lB,generateRestart:Qee,generateNatsHubServerConfig:$ee,generateNatsLeafServerConfig:Kee,generateClusteringUpgradeV4ServiceConfig:Wee}});var HS=m((cde,yB)=>{"use strict";var Re=A(),Jee=V(),ru=CS(),su=nt(),Ns=Be(),Hn=dB(),sE=Q(),sn=x(),Xee=Vs(),{startWorker:EB,onMessageFromWorkers:Zee}=dt(),jee=Eo(),ete=require("util"),hB=require("child_process"),{execFile:tte}=hB,sde=ete.promisify(hB.exec),nde=require("systeminformation"),he;yB.exports={enterPM2Mode:rte,start:Di,stop:KT,reload:mB,restart:SB,list:WT,describe:TB,connect:nn,kill:ate,startAllServices:cte,startService:QT,getUniqueServicesList:RB,restartAllServices:ute,isServiceRegistered:gB,reloadStopStart:AB,restartHdb:pB,deleteProcess:ite,startClusteringProcesses:NB,startClusteringThreads:bB,isHdbRestartRunning:ote,isClusteringRunning:_te,stopClustering:lte,reloadClustering:dte};var{PACKAGE_ROOT:ide}=A(),ode=A(),{loggerWithTag:ade}=sn,nu=!1;Zee(e=>{e.type==="restart"&&sE.initSync(!0)});function rte(){nu=!0}a(rte,"enterPM2Mode");function nn(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{sn.setupConsoleLogging(),r&&t(r),e(s)})})}a(nn,"connect");var er,ste=10,fB;function Di(e){if(nu)return nte(e);let t=tte(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=er.indexOf(t);i>-1&&er.splice(i,1),!fB&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<ste&&Di(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=sE.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Ns.LOG_LEVELS[d]}if(Ns.LOG_LEVEL_HIERARCHY[i]>=Ns.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Ns.LOG_LEVELS.ERR||l===Ns.LOG_LEVELS.WRN?sn.OUTPUTS.STDERR:sn.OUTPUTS.STDOUT;sn.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!er){er=[];let n=a(()=>{fB=!0,er&&(er.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)}er.push(t)}a(Di,"start");function nte(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(nte,"startWithPM2");function KT(e){if(!nu){for(let t of er||[])t.name===e&&(er.splice(er.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await nn()}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(KT,"stop");function mB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(mB,"reload");function SB(e){if(!nu)for(let t of er||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(SB,"restart");function ite(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(ite,"deleteProcess");async function pB(){await Di(Hn.generateRestart())}a(pB,"restartHdb");async function ote(){let e=await WT();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(ote,"isHdbRestartRunning");function WT(){return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(WT,"list");function TB(e){return new Promise(async(t,r)=>{try{await nn()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(TB,"describe");function ate(){if(!nu){for(let e of er||[])e.kill();er=[];return}return new Promise(async(e,t)=>{try{await nn()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(ate,"kill");async function cte(){try{await NB(),await bB(),await Di(Hn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(cte,"startAllServices");async function QT(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Hn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Hn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Hn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Hn.generateNatsHubServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Hn.generateNatsLeafServerConfig(),await Di(t),await ru.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Hn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Di(t)}catch(t){throw he.disconnect(),t}}a(QT,"startService");async function RB(){try{let e=await WT(),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(RB,"getUniqueServicesList");async function ute(e=[]){try{let t=!1,r=await RB();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 SB(o))}t&&await AB(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(ute,"restartAllServices");async function gB(e){if(er?.find(r=>r.name===e))return!0;let t=await jee.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(gB,"isServiceRegistered");async function AB(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?sE.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):sE.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await TB(e),s=Jee.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await KT(e),await QT(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await pB():await mB(e)}a(AB,"reloadStopStart");var OB;async function NB(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await QT(t)}}a(NB,"startClusteringProcesses");async function bB(){OB=EB(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await su.createWorkQueueStream(Ns.WORK_QUEUE_CONSUMER_NAMES),await su.updateIngestStreamConsumer(),await su.updateLocalStreams();let e=await Xee.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){sn.info("Starting clustering upgrade 4.0.0 process"),EB(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(bB,"startClusteringThreads");async function lte(){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 OB.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await KT(t)}}a(lte,"stopClustering");async function _te(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await gB(t)===!1)return!1}return!0}a(_te,"isClusteringRunning");async function dte(){await ru.generateNatsConfig(!0),await su.reloadNATSHub(),await su.reloadNATSLeaf(),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ru.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(dte,"reloadClustering")});var zT=HS(),IB=A();a(async function(){try{let t=await zT.describe(IB.PROCESS_DESCRIPTORS.HDB);for(let r of t)await zT.reload(r.pm_id);await zT.deleteProcess(IB.PROCESS_DESCRIPTORS.RESTART_HDB)}catch(t){throw console.error(t),t}},"restartHdb")();