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 UB=Object.create;var Vo=Object.defineProperty;var DB=Object.getOwnPropertyDescriptor;var LB=Object.getOwnPropertyNames;var MB=Object.getPrototypeOf,PB=Object.prototype.hasOwnProperty;var a=(e,t)=>Vo(e,"name",{value:t,configurable:!0});var pe=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Vo(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&&Vo(e,n,{get:()=>t[n],enumerable:!(s=DB(t,n))||s.enumerable});return e};var D=(e,t,r)=>(r=e!=null?UB(MB(e)):{},ZT(t||!e||!e.__esModule?Vo(r,"default",{value:e,enumerable:!0}):r,e)),te=e=>ZT(Vo({},"__esModule",{value:!0}),e);var tR=m((Rte,eR)=>{var vB=require("fast-glob"),{statSync:cE,existsSync:uE,readFileSync:BB,writeFileSync:HB}=require("fs"),{spawnSync:qB,spawn:FB}=require("child_process"),{isMainThread:GB}=require("worker_threads"),{join:Os,relative:jT}=require("path"),{PACKAGE_ROOT:Sr}=g(),{tmpdir:xB}=require("os");require("source-map-support").install();var kB=["resources","server","dataLayer"],$o="ts-build",lE,VB=__filename.endsWith("tsBuild.js");if(VB){if(GB){let r;try{cE(Os(Sr,$o)),r=!0}catch{}if(r)for(let s of vB.sync(kB.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=cE(Os(Sr,s)).mtimeMs-5e3,i=cE(Os(Sr,$o,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),lE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),lE=!0;if(lE){let s=qB(process.argv[0],[Os(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Os(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=FB(process.argv[0],[Os(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,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(Sr)&&!s[0].includes("node_modules")){let i=jT(Sr,s[0]),o;i.startsWith($o)?o=Os(Sr,jT($o,i)):o=Os(Sr,$o,i);let c=Os(o,r),u=c+".js";if(uE(u))return u;if(c.includes(".")&&uE(c))return c}return t(r,s,n)}}});var g=m((Ote,hR)=>{"use strict";var pr=require("path"),$B=require("fs"),{relative:gte,join:Ate}=pr,{existsSync:YB}=$B;function KB(){let e=__dirname;for(;!YB(pr.join(e,"package.json"));){let t=pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(KB,"getHDBPackageRoot");var on=KB(),rR="js",ou=rR,WB="harperdb-config.yaml",QB="defaultConfig.yaml",zB="hdb",sR=`harperdb.${ou}`,nR=`customFunctionsServer.${ou}`,JB=`restartHdb.${ou}`,dE="HarperDB",iu="Custom Functions",au="Clustering Hub",cu="Clustering Leaf",XB="Clustering Ingest Service",ZB="Clustering Reply Service",jB="foreground.pid",eH="hdb.pid",tH="data",rH={HDB:dE,CLUSTERING_HUB:au,CLUSTERING_LEAF:cu,CLUSTERING_INGEST_SERVICE:XB,CLUSTERING_REPLY_SERVICE:ZB,CUSTOM_FUNCTIONS:iu,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":au,"clustering leaf":cu,"custom functions":iu,custom_functions:iu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},oH={CLUSTERING_HUB_PROC_DESCRIPTOR:au,CLUSTERING_LEAF_PROC_DESCRIPTOR:cu},_E={HDB:pr.join(on,"server/harperdb"),CUSTOM_FUNCTIONS:pr.join(on,"server/customFunctions"),CLUSTERING_HUB:pr.join(on,"server/nats"),CLUSTERING_LEAF:pr.join(on,"server/nats")},aH={HDB:pr.join(_E.HDB,sR),CUSTOM_FUNCTIONS:pr.join(_E.CUSTOM_FUNCTIONS,nR)},cH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:pr.join(on,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:pr.join(on,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:pr.join(on,"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",qH=".updateConfig.json",FH="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"},$={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"},Yo={};Yo[$.INSERT]=$.INSERT;Yo[$.UPDATE]=$.UPDATE;Yo[$.UPSERT]=$.UPSERT;Yo[$.DELETE]=$.DELETE;var Ae=Object.create(null);Ae[$.DESCRIBE_ALL]=$.DESCRIBE_ALL;Ae[$.DESCRIBE_TABLE]=$.DESCRIBE_TABLE;Ae[$.DESCRIBE_SCHEMA]=$.DESCRIBE_SCHEMA;Ae[$.READ_LOG]=$.READ_LOG;Ae[$.ADD_NODE]=$.ADD_NODE;Ae[$.LIST_USERS]=$.LIST_USERS;Ae[$.LIST_ROLES]=$.LIST_ROLES;Ae[$.USER_INFO]=$.USER_INFO;Ae[$.SQL]=$.SQL;Ae[$.GET_JOB]=$.GET_JOB;Ae[$.SEARCH_JOBS_BY_START_DATE]=$.SEARCH_JOBS_BY_START_DATE;Ae[$.DELETE_FILES_BEFORE]=$.DELETE_FILES_BEFORE;Ae[$.EXPORT_LOCAL]=$.EXPORT_LOCAL;Ae[$.EXPORT_TO_S3]=$.EXPORT_TO_S3;Ae[$.CLUSTER_STATUS]=$.CLUSTER_STATUS;Ae[$.REMOVE_NODE]=$.REMOVE_NODE;Ae[$.RESTART]=$.RESTART;Ae[$.CUSTOM_FUNCTIONS_STATUS]=$.CUSTOM_FUNCTIONS_STATUS;Ae[$.GET_CUSTOM_FUNCTIONS]=$.GET_CUSTOM_FUNCTIONS;Ae[$.GET_CUSTOM_FUNCTION]=$.GET_CUSTOM_FUNCTION;Ae[$.SET_CUSTOM_FUNCTION]=$.SET_CUSTOM_FUNCTION;Ae[$.DROP_CUSTOM_FUNCTION]=$.DROP_CUSTOM_FUNCTION;Ae[$.ADD_CUSTOM_FUNCTION_PROJECT]=$.ADD_CUSTOM_FUNCTION_PROJECT;Ae[$.DROP_CUSTOM_FUNCTION_PROJECT]=$.DROP_CUSTOM_FUNCTION_PROJECT;Ae[$.PACKAGE_CUSTOM_FUNCTION_PROJECT]=$.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[$.DEPLOY_CUSTOM_FUNCTION_PROJECT]=$.DEPLOY_CUSTOM_FUNCTION_PROJECT;var 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),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"},dR={settings_path:uR.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];dR[t.toLowerCase()]=t}var E0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},f0={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"},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"},q0={HTTP:"http"},F0={STOPPED:"stopped",ONLINE:"online"},G0="3.x.x",x0={SUCCESS:"success",FAILURE:"failure"},k0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};hR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,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:cu,CLUSTERING_HUB_PROC_DESCRIPTOR:au,SYSTEM_SCHEMA_NAME:LH,HASH_FOLDER_NAME:MH,HDB_HOME_DIR_NAME:PH,UPDATE_FILE_NAME:qH,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:$,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:FH,RESTART_CODE_NUM:GH,CLUSTER_OPERATIONS:Yo,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:ou,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:iu,SERVICES:H0,THREAD_TYPES:q0,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:F0,CONFIG_PARAM_MAP:dR,CONFIG_PARAMS:R,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:on,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((bte,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 F=m((Ite,RE)=>{"use strict";var qn=require("fs-extra"),{workerData:$0,threadId:Y0}=require("worker_threads"),ys=require("path"),gR=require("yaml"),AR=require("properties-reader"),et=g(),TR=EE(),K0=require("os"),{PACKAGE_ROOT:hE}=g(),{_assignPackageExport:W0}=require("../../index"),Wo={};for(let e in console)Wo[e]||(Wo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},OR={STDOUT:"stdOut",STDERR:"stdErr"},Q0=ys.join(hE,"logs"),z0=ys.join(hE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),J0=1e4,Ns,bs,Lt,uu,lu,Qo,Pi,Ko;Ko===void 0&&NR();RE.exports={notify:IR,fatal:wR,error:zo,warn:TE,info:_u,debug:pE,trace:SE,setLogLevel:sq,log_level:Lt,loggerWithTag:X0,suppressLogging:Z0,initLogSettings:NR,setupConsoleLogging:bR,logCustomLevel:tq,closeLogFile:mE,getLogFilePath:()=>Qo,OUTPUTS:OR,AuthAuditLog:oq};W0("logger",RE.exports);function NR(e=!1){try{if(Ko===void 0||e){mE();let t=rq(),r=TR(["ROOTPATH"]);try{Ko=AR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!qn.pathExistsSync(ys.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:lu,to_file:Ns,to_stream:bs}=nq(r.ROOTPATH?ys.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Ko.get("settings_path"))),uu=et.LOG_NAMES.HDB,Qo=ys.join(lu,uu)}}catch(t){if(Ko=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){bs=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(Ns=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=iq();Ns=Ns===void 0?n:Ns,Ns=RR(Ns),bs=bs===void 0?i:bs,bs=RR(bs),Lt=Lt===void 0?s:Lt,lu=Q0,uu=et.LOG_NAMES.INSTALL,Qo=ys.join(lu,uu);return}throw zo("Error initializing log settings"),zo(t),t}bR()}a(NR,"initLogSettings");var fE=!0;function bR(){Mi("error",zo),Mi("warn",TE),Mi("log",_u),Mi("info",_u),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 Wo[e](...r)}}a(Mi,"logConsole");function X0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(IR),fatal:r(wR),error:r(zo),warn:r(TE),info:r(_u),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 Is(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(Is,"createLogRecord");function Jo(e){Ns&&yR(e),bs&&process.stdout.write(e)}a(Jo,"logStdOut");function du(e){Ns&&yR(e),bs&&process.stderr.write(e)}a(du,"logStdErr");function yR(e){eq(),Pi?qn.appendFileSync(Pi,e):Wo.log(e)}a(yR,"logToFile");function mE(){try{qn.closeSync(Pi)}catch{}Pi=null}a(mE,"closeLogFile");function eq(){if(!Pi){try{if(!Qo)debugger;Pi=qn.openSync(Qo,"a")}catch(e){Wo.error(e)}setTimeout(()=>{mE()},J0).unref()}}a(eq,"openLogFile");function _u(...e){Mt[Lt]<=Mt.info&&Jo(Is("info",e))}a(_u,"info");function SE(...e){Mt[Lt]<=Mt.trace&&Jo(Is("trace",e))}a(SE,"trace");function zo(...e){Mt[Lt]<=Mt.error&&du(Is("error",e))}a(zo,"error");function pE(...e){Mt[Lt]<=Mt.debug&&Jo(Is("debug",e))}a(pE,"debug");function IR(...e){Mt[Lt]<=Mt.notify&&Jo(Is("notify",e))}a(IR,"notify");function wR(...e){Mt[Lt]<=Mt.fatal&&du(Is("fatal",e))}a(wR,"fatal");function TE(...e){Mt[Lt]<=Mt.warn&&du(Is("warn",e))}a(TE,"warn");function tq(e,t,...r){t===OR.STDERR?du(Is(e,r)):Jo(Is(e,r))}a(tq,"logCustomLevel");function rq(){let e;try{e=K0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ys.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return qn.existsSync(t)||(t=ys.join(hE,"utility/hdb_boot_properties.file")),t}a(rq,"getPropsFilePath");function sq(e){Lt=e}a(sq,"setLogLevel");function RR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(RR,"autoCastBoolean");function nq(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:ys.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(nq,"getLogConfig");function iq(){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(iq,"getDefaultConfig");function oq(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(oq,"AuthAuditLog")});var UR=m((Cte,CR)=>{"use strict";var aq=require("util"),cq=require("path"),uq=require("child_process"),lq=aq.promisify(uq.execFile),_q=1e3*1e3*10;CR.exports={findPs:dq};async function dq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await lq("ps",["wwxo",`pid,${r}`],{maxBuffer:_q});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:cq.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(dq,"findPs")});var xe=m((Dte,LR)=>{"use strict";var Eq="__dbis__",fq="__txns__",hq="__environment_name__",mq="__dbi_defintion__",Sq={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"},pq=["__createdtime__","__updatedtime__"],Tq="\uFFFF",DR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Rq=Object.values(DR);LR.exports={AUDIT_STORE_NAME:fq,INTERNAL_DBIS_NAME:Eq,DBI_DEFINITION_NAME:mq,SEARCH_TYPES:Sq,TIMESTAMP_NAMES:pq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hq,TRANSACTIONS_DBI_NAMES_ENUM:DR,TRANSACTIONS_DBIS:Rq,OVERFLOW_MARKER:Tq}});var rr=m((Lte,xR)=>{"use strict";var MR=g(),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"},gq=HR[vR.INTERNAL_SERVER_ERROR],Aq={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.`},Oq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},Nq={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"},bq={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"},yq={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"},qR={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"},Iq={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."},wq={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`},Cq={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"},Uq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},Dq={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`},FR={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}`},Lq={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."},Mq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},Pq={...qR,...Nq,...Aq,...Iq,...wq,...Cq,...Uq,...Dq,...yq,...FR,...GR,...Lq,...Mq,...Oq};xR.exports={CHECK_LOGS_WRAPPER:BR,HDB_ERROR_MSGS:Pq,DEFAULT_ERROR_MSGS:HR,DEFAULT_ERROR_RESP:gq,HTTP_STATUS_CODES:vR,LMDB_ERRORS_ENUM:bq,AUTHENTICATION_ERROR_MSGS:qR,VALIDATION_ERROR_MSGS:FR,ITC_ERRORS:GR}});var W=m((Pte,$R)=>{"use strict";var vi=rr(),vq=F(),Bq=g(),Eu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,kR),this.http_resp_code=s||vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(vi.DEFAULT_ERROR_MSGS[s]?vi.DEFAULT_ERROR_MSGS[s]:vi.DEFAULT_ERROR_MSGS[vi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&vq[n](i)}},gE=class extends Error{static{a(this,"ClientError")}constructor(t,r){if(t instanceof Error)return t.http_resp_code=r||400,t;super(t),this.http_resp_code=r||400}},AE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.http_resp_code=r||500}};function kR(e,t,r,s=Bq.LOG_LEVELS.ERROR,n=null,i=!1){if(VR(e))return e;let o=new Eu(e,t,r,s,n);return i&&delete o.stack,o}a(kR,"handleHDBError");function VR(e){return e.__proto__.constructor.name===Eu.name}a(VR,"isHDBError");$R.exports={isHDBError:VR,handleHDBError:kR,ClientError:gE,ServerError:AE,hdb_errors:vi}});var KR=m((Bte,YR)=>{"use strict";var Hq={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))},qq="certificate.pem",Fq="privateKey.pem",Gq="ca.pem";YR.exports={CERTIFICATE_VALUES:Hq,CERTIFICATE_PEM_NAME:qq,PRIVATEKEY_PEM_NAME:Fq,CA_PEM_NAME:Gq}});var Pe=m((Hte,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:xq,validateObjectAsync:kq,validateBySchema:Vq};function xq(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(xq,"validateObject");async function kq(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(kq,"validateObjectAsync");function Vq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Vq,"validateBySchema")});var NE=m((Gte,jR)=>{"use strict";var XR=require("fs-extra"),j=require("joi"),$q=require("os"),{boolean:Se,string:Cs,number:sr,array:OE}=j.types(),{totalmem:QR}=require("os"),Bi=require("path"),Yq=F(),hu=x(),Fte=KR(),zR=g(),Kq=Pe(),JR="log",Wq="components",Qq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",zq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",Jq="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",Xq="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",Zq="rootPath config parameter is undefined",jq="clustering.enabled config parameter is undefined",ws=sr.min(0).required(),mu=OE.items({host:Cs.required(),port:ws}).empty(null),Us;jR.exports={configValidator:eF,routesValidator:oF,route_constraints:mu};function eF(e){if(Us=e.rootPath,hu.isEmpty(Us))throw Zq;let t=Se.required(),r=j.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(iF),n=Cs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(fu),i=j.custom(tF).messages({"any.custom":"{:#label} {:#error}"}),o=Cs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=j.string().empty(null).default(fu),u=j.custom(rF).empty(null).default(fu),l=e.clustering?.enabled;if(hu.isEmpty(l))throw jq;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:mu}).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:mu}).required(),streams:j.object({maxAge:sr.min(120).allow(null).optional(),maxBytes:sr.min(1).allow(null).optional(),maxMsgs:sr.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:j.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Se.optional(),databaseLevel:Se.optional(),tls:j.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Se.required(),verify:Se.optional()}),user: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:OE.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(nF).optional().empty(null),maxSize:Cs.custom(sF).optional().empty(null),path:Cs.optional().empty(null).default(fu)}).required(),root:n,stdStreams:Se.required(),auditLog:Se.required()}).required(),operationsApi:j.object({foreground:Se.required(),network:j.object({cors:Se.required(),corsAccessList:OE.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:"'"}}})}a(eF,"configValidator");function ZR(e){return XR.existsSync(e)?null:`Specified path ${e} does not exist.`}a(ZR,"doesPathExist");function tF(e,t){if(e===null)return;let r=ZR(e);return r?t.message(r):e}a(tF,"validatePemFile");function rF(e,t){j.assert(e,Cs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=ZR(e);if(r)return t.message(r)}a(rF,"validatePath");function sF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Qq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Jq):e}a(sF,"validateRotationMaxSize");function nF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(zq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(Xq):e}a(nF,"validateRotationInterval");function iF(e,t){let r=t.state.path.join("."),s=$q.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),Yq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(iF,"setDefaultThreads");function fu(e,t){if(!hu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(hu.isEmpty(Us))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Bi.join(Us,Wq);case"logging.root":return Bi.join(Us,JR);case"clustering.leafServer.streams.path":return Bi.join(Us,"clustering","leaf");case"storage.path":let s=Bi.join(Us,zR.LEGACY_DATABASES_DIR_NAME);return XR.existsSync(s)?s:Bi.join(Us,zR.DATABASES_DIR_NAME);case"logging.rotation.path":return Bi.join(Us,JR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(fu,"setDefaultRoot");function oF(e){let t=j.object({routes:mu});return Kq.validateBySchema({routes:e},t)}a(oF,"routesValidator")});var Rr=m((Vte,ug)=>{"use strict";var Tr=g(),ut=x(),tt=F(),{configValidator:aF,routesValidator:eg}=NE(),vt=require("fs-extra"),cF=require("yaml"),Lr=require("path"),uF=require("is-number"),rg=require("properties-reader"),lF=require("lodash"),{handleHDBError:_F}=W(),{HTTP_STATUS_CODES:dF,HDB_ERROR_MSGS:Su}=rr(),kte=require("minimist"),{SCHEMAS_PARAM_CONFIG:Xo,CONFIG_PARAMS:an,CONFIG_PARAM_MAP:Ds}=Tr,EF="Unable to get config value because config is uninitialized",fF="Config successfully initialized",hF="Error backing up config file",mF="Empty parameter sent to getConfigValue",sg=Lr.join(Tr.PACKAGE_ROOT,"config","yaml",Tr.HDB_DEFAULT_CONFIG_FILE),SF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",tg={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"},pu,Et;ug.exports={createConfigFile:pF,getDefaultConfig:TF,getConfigValue:ig,initConfig:og,flattenConfig:Gn,updateConfigValue:ag,updateConfigObject:gF,getConfiguration:NF,setConfiguration:bF,readConfigFile:IE,getClusteringRoutes:yF,initOldConfig:cg,getConfigFromFile:IF,getConfigFilePath:Fn,addConfig:wF,deleteConfigFromFile:CF};function pF(e){let t=cn(sg);pu=Gn(t.toJSON());let r;for(let o in e){let c=Ds[o.toLowerCase()];if(c===an.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(_){tt.error(_)}}}r&&ng(t,r),yE(t);let s=t.toJSON();Et=Gn(s);let n=t.getIn(["rootPath"]),i=Lr.join(n,Tr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),tt.trace(`Config file written to ${i}`)}a(pF,"createConfigFile");function ng(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!ut.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Xo.TABLES))for(let i in s[n][Xo.TABLES])for(let o in s[n][Xo.TABLES][i]){let c=s[n][Xo.TABLES][i][o],u=[an.SCHEMAS,n,Xo.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[an.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){tt.error("Error parsing schemas CLI/env config arguments",s)}}a(ng,"setSchemasConfig");function TF(e){if(pu===void 0){let r=cn(sg);pu=Gn(r.toJSON())}let t=Ds[e.toLowerCase()];if(t!==void 0)return pu[t.toLowerCase()]}a(TF,"getDefaultConfig");function ig(e){if(e==null){tt.error(mF);return}if(Et===void 0){tt.trace(EF);return}let t=Ds[e.toLowerCase()];if(t!==void 0)return Et[t.toLowerCase()]}a(ig,"getConfigValue");function Fn(e=ut.getPropsFilePath()){let t=ut.getEnvCliRootPath();return t?Lr.join(t,Tr.HDB_CONFIG_FILE):rg(e).get(Tr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Fn,"getConfigFilePath");function og(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 tt.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Fn(t),s;if(r.includes("config/settings.js"))try{cg(r);return}catch(i){if(i.code!==Tr.NODE_ERROR_CODES.ENOENT)throw i}try{s=cn(r)}catch(i){if(i.code===Tr.NODE_ERROR_CODES.ENOENT){tt.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 tt.error(i),new Error(`Error reading HarperDB config file at ${r}`)}RF(s,r),yE(s);let n=s.toJSON();if(Et=Gn(n),Et.logging_rotation_rotate)for(let i in tg)Et[i]&&tt.error(`Config ${tg[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);tt.trace(fF)}}a(og,"initConfig");function RF(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&&(tt.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(RF,"checkForUpdatedConfig");function yE(e){let t=e.toJSON(),r=aF(t);if(r.error)throw Su.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 gF(e,t){Et===void 0&&(Et={});let r=Ds[e.toLowerCase()];if(r===void 0){tt.trace(`Unable to update config object because config param '${e}' does not exist`);return}Et[r.toLowerCase()]=t}a(gF,"updateConfigObject");function ag(e,t,r=void 0,s=!1,n=!1,i=!1){Et===void 0&&og();let o=ig(Ds.hdb_root),c=Lr.join(o,Tr.HDB_CONFIG_FILE),u=cn(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=bE(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=bE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(S){tt.error(S)}}}l&&ng(u,l),yE(u);let _=u.getIn(["rootPath"]),d=Lr.join(_,Tr.HDB_CONFIG_FILE);s===!0&&AF(c,_),vt.writeFileSync(d,String(u)),n&&(Et=Gn(u.toJSON())),tt.trace(`Config parameter: ${e} updated with value: ${t}`)}a(ag,"updateConfigValue");function AF(e,t){try{let r=Lr.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),tt.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){tt.error(hF),tt.error(r)}}a(AF,"backupConfigFile");var OF=["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])&&!OF.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}a(Gn,"flattenConfig");function bE(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(uF(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||ut.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return ut.autoCast(t)}a(bE,"castConfigValue");function NF(){let e=ut.getPropsFilePath(),t=Fn(e);return cn(t).toJSON()}a(NF,"getConfiguration");async function bF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return ag(void 0,void 0,n,!0),SF}catch(i){throw typeof i=="string"||i instanceof String?_F(i,i,dF.BAD_REQUEST,void 0,void 0,!0):i}}a(bF,"setConfiguration");function IE(){let e=ut.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!ut.noBootFile())throw tt.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Fn(e);return cn(t).toJSON()}a(IE,"readConfigFile");function cn(e){return cF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(cn,"parseYamlDoc");function yF(){let e=IE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=ut.isEmptyOrZeroLength(t)?[]:t;let r=eg(t);if(r)throw Su.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=ut.isEmptyOrZeroLength(s)?[]:s;let n=eg(s);if(n)throw Su.CONFIG_VALIDATION(n.message);if(!ut.isEmptyOrZeroLength(s)&&!ut.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!ut.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw Su.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(yF,"getClusteringRoutes");function cg(e){let t=rg(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}a(cg,"initOldConfig");function IF(e){let t=IE();return lF.get(t,e.replaceAll("_","."))}a(IF,"getConfigFromFile");async function wF(e,t){let r=cn(Fn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Fn(),String(r))}a(wF,"addConfig");function CF(e){let t=Fn(ut.getPropsFilePath()),r=cn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Lr.join(s,Tr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(CF,"deleteConfigFromFile")});var Q=m((Yte,dg)=>{"use strict";var wE=require("fs-extra"),Mr=require("path"),lg=require("os"),UF=require("properties-reader"),Zo=F(),xn=x(),ee=g(),Tu=Rr(),DF="Error initializing environment manager",Ru="BOOT_PROPS_FILE_PATH",_g=!1,LF={[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={};dg.exports={BOOT_PROPS_FILE_PATH:Ru,getHdbBasePath:MF,setHdbBasePath:PF,get:vF,initSync:HF,setProperty:Ee,initTestEnvironment:qF};function MF(){return Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(MF,"getHdbBasePath");function PF(e){Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(PF,"setHdbBasePath");function vF(e){let t=Tu.getConfigValue(e);return t===void 0?Ls[e]:t}a(vF,"get");function Ee(e,t){LF[e]&&(Ls[e]=t),Tu.updateConfigObject(e,t)}a(Ee,"setProperty");function BF(){let e;try{e=xn.getPropsFilePath(),wE.accessSync(e,wE.constants.F_OK|wE.constants.R_OK),_g=!0;let t=UF(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[Ru]=e,!0}catch{return Zo.trace(`Environment manager found no properties file at ${e}`),!1}}a(BF,"doesPropFileExist");function HF(e=!1){try{(_g||BF()||xn.noBootFile())&&(Tu.initConfig(e),Ls[ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Tu.getConfigValue(ee.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Zo.error(DF),Zo.error(t),console.error(t),process.exit(1)}}a(HF,"initSync");function qF(e={}){try{let{keep_alive_timeout:t,headers_timeout:r,server_timeout:s,https_enabled:n,cors_enabled:i,cors_accesslist:o,local_studio_on:c}=e,u=Mr.join(__dirname,"../../","unitTests");Ls[Ru]=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,lg.userInfo()?lg.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),o&&(Ee("CORS_ACCESSLIST",o),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(Ee(ee.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),Ee(ee.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${Ru}. Please check your boot props and settings files`;Zo.fatal(r),Zo.error(t)}}a(qF,"initTestEnvironment")});var we=m((Wte,Tg)=>{"use strict";var sa=g(),FF=x(),Bt=Q(),na=require("path"),GF=require("minimist"),Eg=require("fs-extra"),fg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:un,SCHEMAS_PARAM_CONFIG:jo,SYSTEM_SCHEMA_NAME:gu}=sa,ea,ta,ra;function hg(){if(ea!==void 0)return ea;if(Bt.getHdbBasePath()!==void 0)return ea=Bt.get(un.STORAGE_PATH)||na.join(Bt.getHdbBasePath(),sa.DATABASES_DIR_NAME),ea}a(hg,"getBaseSchemaPath");function mg(){if(ta!==void 0)return ta;if(Bt.getHdbBasePath()!==void 0)return ta=pg(gu),ta}a(mg,"getSystemSchemaPath");function Sg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(sa.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||na.join(Bt.getHdbBasePath(),sa.TRANSACTIONS_DIR_NAME),ra}a(Sg,"getTransactionAuditStoreBasePath");function xF(e,t){let r=Bt.get(un.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||na.join(Sg(),e.toString())}a(xF,"getTransactionAuditStorePath");function pg(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(sa.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||na.join(hg(),e)}a(pg,"getSchemaPath");function kF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,GF(process.argv));let s=r[un.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!FF.isObject(s))throw o;i=s}for(let o of i){let c=o[gu];if(!c)continue;let u=Bt.get(un.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[jo.PATH];if(l)return fg.set(u,[gu,jo.TABLES,t,jo.PATH],l),Bt.setProperty(un.SCHEMAS,u),l;let _=c?.[jo.PATH];if(_)return fg.set(u,[gu,jo.PATH],_),Bt.setProperty(un.SCHEMAS,u),_}}let n=r[un.STORAGE_PATH.toUpperCase()];if(n){if(!Eg.pathExistsSync(n))throw new Error(n+" does not exist");let i=na.join(n,e);return Eg.mkdirsSync(i),Bt.setProperty(un.STORAGE_PATH,n),i}return mg()}a(kF,"initSystemSchemaPaths");function VF(){ea=void 0,ta=void 0,ra=void 0}a(VF,"resetPaths");Tg.exports={getBaseSchemaPath:hg,getSystemSchemaPath:mg,getTransactionAuditStorePath:xF,getTransactionAuditStoreBasePath:Sg,getSchemaPath:pg,initSystemSchemaPaths:kF,resetPaths:VF}});var Ht=m((Xte,Ng)=>{"use strict";var $F=rr().LMDB_ERRORS_ENUM,zte=require("lmdb"),YF=xe(),Jte=require("buffer").Buffer,{OVERFLOW_MARKER:Rg,MAX_SEARCH_KEY_LENGTH:Au}=YF,gg=["number","string","symbol","boolean","bigint"];function KF(e){if(e=e?.primaryStore||e,!e)throw new Error($F.ENV_REQUIRED)}a(KF,"validateEnv");function WF(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(WF,"stringifyData");function QF(e){return e instanceof Date?e.valueOf():e}a(QF,"convertKeyValueToWrite");function zF(e){if(e==null)return;if(gg.includes(typeof e))return e.length>Au?[e.slice(0,Au)+Rg]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(gg.includes(typeof n))n.length>Au?t.push(n.slice(0,Au)+Rg):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(zF,"getIndexedValues");var Ou=0,Ag=0;function Og(){Ag=Date.now()-performance.now()}a(Og,"adjustStartTime");Og();var JF=6e4;setInterval(Og,JF).unref();function XF(){let e=performance.now()+Ag;return e>Ou?(Ou=e,e):(Ou+=488e-6,Ou)}a(XF,"getNextMonotonicTime");Ng.exports={validateEnv:KF,stringifyData:WF,convertKeyValueToWrite:QF,getNextMonotonicTime:XF,getIndexedValues:zF}});var bg,Jr,CE,ia=pe(()=>{bg=require("events"),Jr=class extends bg.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 oa(e){return e[ft]||(e[ft]=Object.create(null))}function wu(e,t){let r=e.prototype,s={},n=t.attributes||t.properties||[];for(let o of n){let c=o.name,u={get(){let l=this[ft];if(l&&c in l)return l[c];let _=this[ce]?.[c];if(_&&typeof _=="object"){let d=yg(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){oa(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,Nu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,Nu.ClientError)(`${c} must be a string, attempt to assign ${l}`);oa(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ft];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new Nu.ClientError("Can not add a property to a sealed table schema");oa(this)[o]=c}),i("deleteProperty",function(o){oa(this)[o]=void 0}),i("toJSON",function(){let o=this[ft],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function yg(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}},wu(r,t)),new r(e)):new bu(e);case Array:let s=new Iu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=yg(o,t?.elements)),s[n]=o}return s}}function Cu(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=Cu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function aa(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=aa(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ft];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=aa(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function yu(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(yu(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(yu(n))return!0}else return!0}else return!0}}return!1}var Nu,ft,bu,kn,Iu,Uu=pe(()=>{Xr();Nu=D(W()),ft=Symbol("own-data");a(oa,"getChanges");a(wu,"assignTrackedAccessors");a(yg,"trackObject");bu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};wu(bu,{});a(Cu,"collapseData");a(aa,"deepFreeze");a(yu,"hasChanges");kn=Symbol.for("has-array-changes"),Iu=class extends Array{static{a(this,"TrackedArray")}[kn];constructor(t){super(t)}splice(...t){return this[kn]=!0,super.splice(...t)}push(...t){return this[kn]=!0,super.push(...t)}pop(){return this[kn]=!0,super.pop()}unshift(...t){return this[kn]=!0,super.unshift(...t)}shift(){return this[kn]=!0,super.shift()}};Iu.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[Oe]=e,e.resourceCache=[];let s;try{if(s=t(r),s?.then)return s.then(n,i)}catch(o){i(o)}return n(s);function n(o){let c=r.commit();return c.then?c.then(()=>(e.transaction=null,o)):(e.transaction=null,o)}function i(o){throw r.abort(),e.transaction=null,o}}var Ig,wg,UE,Vn=pe(()=>{Ig=D(Ht()),wg=require("../../index");Xr();a(Ye,"transaction");(0,wg._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()};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,Ig.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(jF[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]=jr.MAXIMUM_KEY;break;case"starts_with":o=_.toString(),c=_+String.fromCharCode(65535);break;case"between":o=_[0],o instanceof Date&&(o=o.getTime()),c=_[1],c instanceof Date&&(c=c.getTime()),u=!0;break;case lt.SEARCH_TYPES.EQUALS:case void 0:o=_,c=_,u=!0;break;case"ne":case"contains":case"ends_with":E=!0;break}if(r){let S=o;o=c,c=S,S=!l,l=!u,u=S}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new DE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let S=PE(e);if(!S)throw new DE.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:Ug.SKIP))))}let T={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(T):h.getRange(T).map(({value:S})=>S)}function 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 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 Du(e){if(!e)return;let t=new LE,r,s,n,i,o;for(;r=Cg.exec(e);){i=Cg.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=ZF[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,lt,jr,Ug,Cg,ZF,jF,LE,Lu=pe(()=>{DE=D(W()),lt=D(xe()),jr=require("ordered-binary"),Ug=require("lmdb"),Cg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,ZF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(ME,"idsForCondition");jF={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(Zr,"attributeComparator");a(Du,"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:()=>Oe,ID_PROPERTY:()=>ie,IS_COLLECTION:()=>Ms,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Bg,snake_case:()=>tG});function tG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function Dg(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 Pr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ie]??l[this.primaryKey]??null):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let d of n){if(typeof d=="object"&&d)break;c.push(d)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let d=c.indexOf("?");if(d>-1){let f=this.parseQuery(c.slice(d+1));u?u=Object.assign(f,u):u=f,c=c.slice(0,d)}let E=this.parsePath(c,o,u);E?.query?(u=E.query,c=E.id):c=E}c===void 0&&(c=n.id??null)}else c=n??null;if(o||(o={}),t.allowInvalidated&&(o.allowInvalidated=!0),o.transaction){let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)}else return Ye(o,()=>{let d=this.getResource(c,o,t);return d.then?d.then(_):_(d)});function _(d){if(t.type==="read"&&(d[Bg]=!1),o.authorize){o.authorize=!1;let E=t.type==="read"?d.allowRead(o.user,o):t.type==="update"?d.doesExist?.()===!1?d.allowCreate(o.user,o):d.allowUpdate(o.user,o):t.type==="create"?d.allowCreate(o.user,o):d.allowDelete(o.user,o);if(E?.then)return E.then(f=>{if(!f)throw new Mu(o.user);return typeof l?.then=="function"?l.then(h=>e(d,u,o,h)):e(d,u,o,l)});if(!E)throw new Mu(o.user)}return typeof l?.then=="function"?l.then(E=>e(d,u,o,E)):e(d,u,o,l)}a(_,"authorizeActionOnResource")}}function vr(e,t){let r=new vg.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[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 Lg(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 Mg,Pg,vg,Oe,ie,Ms,Bg,ce,eG,ht,Mu,BE,Xr=pe(()=>{Mg=require("crypto");ia();Pg=require("../../index"),vg=D(W());Uu();Vn();Lu();Oe=Symbol.for("context"),ie=Symbol.for("primary-key"),Ms=Symbol("is-collection"),Bg=Symbol("save-updates"),ce=Symbol("stored-record"),eG={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Oe];[ie];static transactions;constructor(t,r){this[ie]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=Lg(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=[],o=s.authorize;for(let c of n)o&&(s.authorize=!0),i.push(this.put(t,r,s,c));return i}return t.put?t.put(n,r):vr(t,"put")},{hasContent:!0,type:"update"});static delete=Pr(function(t,r,s,n){return t.delete?t.delete(r):vr(t,"delete")},{hasContent:!1,type:"delete"});static getNewId(){return(0,Mg.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ye(s,()=>{let i=new this(n,s),o=i.put?i.put(r):vr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static post=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Pr(function(t,r,s,n){return t.connect?t.connect(r):vr(t,"connect")},{type:"read"});static subscribe=Pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):vr(t,"subscribe")},{type:"read"});static publish=Pr(function(t,r,s,n){return t[ie]!=null&&t.update(),t.publish?t.publish(n,r):vr(t,"publish")},{hasContent:!0,type:"create"});static search=Pr(function(t,r,s,n){let i=t.search?t.search(s):vr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Lg(o);return i.map(c)}return i},{type:"read"});static query=Pr(function(t,r,s,n){return t.search?t.search(n,r):vr(t,"search")},{hasContent:!0,type:"read"});static copy=Pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):vr(t,"copy")},{type:"create"});static move=Pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):vr(t,"move")},{type:"delete"});post(t){if(this[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 Du(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&&eG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:Dg(t,this)}}return Dg(t,this)}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ie]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ie],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[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,Pg._assignPackageExport)("Resource",ht);a(tG,"snake_case");Mu=class extends Error{static{a(this,"AccessError")}constructor(t){t?(super("Unauthorized access to resource"),this.http_resp_code=403):(super("Must login"),this.http_resp_code=401)}};a(Dg,"pathToId");BE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Pr,"transactional");a(vr,"missingMethod");a(vE,"selectFromObject");a(Lg,"transformForSelect")});var qE={};je(qE,{server:()=>mt});var Hg,mt,ln=pe(()=>{Hg=require("../../index"),mt={};(0,Hg._assignPackageExport)("server",mt)});var xE={};je(xE,{loadGQLSchema:()=>sG,start:()=>GE,startOnMainThread:()=>rG});function GE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let Y=function(A){if(A.kind==="NonNullType"){let G=Y(A.type);return G.nullable=!0,G}return A.kind==="ListType"?{type:"array",elements:Y(A.type)}:{type:A.name?.value}};a(Y,"getProperty");let S=T.name.value,y=[],O={table:null,database:null,properties:y};E.set(S,O);for(let A of T.directives){if(A.name.value==="table"){for(let w of A.arguments)O[w.name.value]=w.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=S),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(A.name.value==="sealed"&&(O.sealed=!0),A.name.value==="export"){O.export=!0;for(let w of A.arguments)w.name.value==="name"&&(O.export={name:w.value.value})}}let H=!1;for(let A of T.fields){let w=Y(A.type);w.name=A.name.value,y.push(w);for(let G of A.directives)if(G.name.value==="primaryKey")H?console.warn("Can not define two attributes as a primary key"):(w.isPrimaryKey=!0,H=!0);else if(G.name.value==="indexed")w.indexed=!0;else if(G.name.value==="createdTime")w.assignCreatedTime=!0;else if(G.name.value==="updatedTime")w.assignUpdatedTime=!0;else if(G.name.value==="expiresAt")w.expiresAt=!0;else if(G.name.value==="allow"){let k=w.authorizedRoles=[];for(let X of G.arguments)X.name.value==="role"&&k.push(X.value.value)}}O.typeName=S,S==="Query"&&(h=O)}for(let[T,S]of E)for(let y of S.properties){let O=E.get(y.type);O&&(y.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,FE.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,FE.dirname)(s)+"/"+T.name,S.tableClass)}}}var FE,rG,sG,qg=pe(()=>{FE=require("path");de();a(GE,"start");rG=GE,sG=GE({ensureTable:rt}).handleFile});async function Pu(e){return nG?(ca||(ca=iG(aG)),(await(await ca).import(e)).namespace):import(e)}async function iG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),ca=new Compartment({console,Math,Date,fetch:oG,...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:ht,tables:nr,databases:ve})}};let s=await(0,Fg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),ca}function oG(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 aG(){return{Resource:ht,tables:nr}}var Fg,Gg,nG,ca,kE=pe(()=>{Xr();de();Fg=require("fs/promises"),Gg=require("path"),nG=!1;a(Pu,"secureImport");a(iG,"getCompartment");a(oG,"secureOnlyFetch");a(aG,"getGlobalVars")});var $E={};je($E,{handleFile:()=>cG});async function cG(e,t,r,s){let n=new Map,i=(0,xg.pathToFileURL)(r).toString(),o=await Pu(i);u(o.default)&&s.set((0,VE.dirname)(t),o.default),c(o,(0,VE.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,VE,kg=pe(()=>{xg=require("url");kE();VE=require("path");a(cG,"handleFile")});var KE={};je(KE,{start:()=>uG});function uG({resources:e}){e.set("login",YE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var YE,Vg=pe(()=>{Xr();a(uG,"start");YE=class extends ht{static{a(this,"Login")}static async get(t,r,s){}static async post(t,r,s){let{username:n,password:i,redirect:o}=r;return{data:await s.login(n,i)}}}});var QE=m((bre,Kg)=>{"use strict";var{Readable:lG}=require("stream"),_G=1e4;Kg.exports={streamAsJSON(e){return new WE({value:e})}};var WE=class extends lG{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>_G?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((wre,nA)=>{"use strict";var zE=require("recursive-iterator"),dG=require("alasql"),JE=require("clone"),Wg=x(),{handleHDBError:Qg,hdb_errors:EG}=W(),{HDB_ERROR_MSGS:zg,HTTP_STATUS_CODES:Jg}=EG,{getDatabases:fG}=(de(),te(Ne)),hG=["DISTINCT_ARRAY"],Xg=Symbol("validateTables"),XE=Symbol("validateTable"),Ire=Symbol("getAllColumns"),Zg=Symbol("validateAllColumns"),vu=Symbol("findColumn"),jg=Symbol("validateOrderBy"),ua=Symbol("validateSegment"),ZE=Symbol("validateColumn"),eA=Symbol("setColumnsForTable"),tA=Symbol("checkColumnsForAsterisk"),rA=Symbol("validateGroupBy"),sA=Symbol("hasColumns"),jE=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[XE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[XE](t.table)})}}[sA](){let t=!1,r=new zE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[XE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=fG();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=JE(n);i.table=JE(t),this.attributes.push(i)})}[vu](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 zE(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 dG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Zg](){this[ua](this.statement.columns,!1),this[ua](this.statement.joins,!1),this[ua](this.statement.where,!1),this[rA](this.statement.group,!1),this[ua](this.statement.order,!0)}[ua](t,r){if(!t)return;let s=new zE(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[ZE](i)));return n}[rA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&hG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=JE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[vu](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[vu](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[ZE](t)}[ZE](t){let r=this[vu](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=jE});var aA=m((Ure,oA)=>{"use strict";var ef=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=ef});var uA=m((Lre,cA)=>{"use strict";var tf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};cA.exports=tf});var Bu=m((Pre,lA)=>{"use strict";var sf=Q(),nf=g();sf.initSync();var mG=sf.get(nf.CONFIG_PARAMS.STORAGE_COMPRESSION),SG=sf.get(nf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,pG=nf.UPDATES_PROPERTY,rf=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=mG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=SG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===pG)}};lA.exports=rf});var qu=m((Bre,dA)=>{"use strict";var Hi=Q(),la=g();Hi.initSync();var TG=Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(la.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",_A=Hi.get(la.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),RG=Hi.get(la.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Hu=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=TG,this.noFSAccess=!0,_A!==void 0&&(this.overlappingSync=_A),this.noReadAhead=RG}};dA.exports=Hu;Hu.MAX_DBS=1e4});var ye=m((qre,AA)=>{"use strict";var af=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Fu=Ht(),hA=F(),qt=rr().LMDB_ERRORS_ENUM,Gu=uA(),cf=Bu(),mA=qu(),_n=xe(),EA=g(),{table:gG,resetDatabases:AG}=(de(),te(Ne)),fA=Q(),Hr=_n.INTERNAL_DBIS_NAME,SA=_n.DBI_DEFINITION_NAME,OG="data.mdb",NG="lock.mdb",_a=".mdb",bG="-lock",of=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=gr(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 af.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function xu(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(xu,"pathEnvNameValidation");async function uf(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+_a);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,OG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(uf,"validateEnvironmentPath");function ku(e,t){if(Fu.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(ku,"validateEnvDBIName");async function yG(e,t,r=!1,s=!1){xu(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 uf(e,t,s),pA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new mA(s?c:c+_a,!1),l=af.open(u);l.dbis=Object.create(null);let _=new cf(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=lf(e,t,r);return l[_n.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(yG,"createEnvironment");async function IG(e,t,r,s=!0){xu(e,t),t=t.toString();let n=ir.join(e,t);return gG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(IG,"copyEnvironment");async function pA(e,t,r=!1){xu(e,t),t=t.toString();let s=lf(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 uf(e,t),i=ir.join(e,t+_a),o=n!=i,c=new mA(n,o),u=af.open(c);u.dbis=Object.create(null);let l=RA(u);for(let _=0;_<l.length;_++)gr(u,l[_]);return u[_n.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(pA,"openEnvironment");async function wG(e,t,r=!1){xu(e,t),t=t.toString();let s=ir.join(e,t+_a),n=await uf(e,t);if(global.lmdb_map!==void 0){let i=lf(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+bG:ir.join(ir.dirname(n),NG))}a(wG,"deleteEnvironment");async function TA(e){Fu.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 lf(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(lf,"getCachedEnvironmentName");function CG(e){Fu.validateEnv(e);let t=Object.create(null),r=gr(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new Gu,n)}catch{hA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(CG,"listDBIDefinitions");function RA(e){Fu.validateEnv(e);let t=[],r=gr(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(RA,"listDBIs");function UG(e,t){let s=gr(e,Hr).getEntry(t),n=new Gu;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(UG,"getDBIDefinition");function gA(e,t,r,s=!r){if(ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return gr(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new cf(r,s===!0),o=e.openDB(t,i),c=new Gu(r===!0,s);return o[SA]=c,gr(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(gA,"createDBI");function gr(e,t){if(ku(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=UG(e,t):r=new Gu,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new cf(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(qt.DBI_DOES_NOT_EXIST):n}return s[SA]=r,e.dbis[t]=s,s}a(gr,"openDBI");function DG(e,t){ku(e,t),t=t.toString();let r=gr(e,t),s=r.getStats();return r[_n.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(DG,"statDBI");async function LG(e,t){try{let r=ir.join(e,t+_a);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(LG,"environmentDataSize");function MG(e,t){if(ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);gr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],gr(e,Hr).removeSync(t)}a(MG,"dropDBI");function PG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{gr(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)gA(e,i,i!==t,i===t),s=!0;else throw o}}s&&AG()}a(PG,"initializeDBIs");AA.exports={openDBI:gr,openEnvironment:pA,createEnvironment:yG,listDBIs:RA,listDBIDefinitions:CG,createDBI:gA,dropDBI:MG,statDBI:DG,deleteEnvironment:wG,initializeDBIs:PG,TransactionCursor:of,environmentDataSize:LG,copyEnvironment:IG,closeEnvironment:TA}});var NA=m((Gre,OA)=>{"use strict";var _f=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=_f});var yA=m((kre,bA)=>{"use strict";var df=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=df});var wA=m(($re,IA)=>{"use strict";var Ef=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=Ef});var qi=m((zre,DA)=>{"use strict";var vG=ye(),BG=NA(),HG=yA(),qG=wA(),es=Ht(),da=rr().LMDB_ERRORS_ENUM,FG=xe(),Ps=g(),GG=x(),xG=require("uuid"),Kre=require("lmdb"),{handleHDBError:kG,hdb_errors:VG}=W(),{OVERFLOW_MARKER:Wre,MAX_SEARCH_KEY_LENGTH:Qre}=FG,CA=Q();CA.initSync();var Vu=CA.get(Ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),ff=Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$n=Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function $G(e,t,r,s,n=es.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new BG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];UA(l,!0,n);let _=YG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return mf(o,c,s,i,n)}a($G,"insertRecords");function YG(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][Ps.FUNC_VAL],s[o]=c)}let u=es.getIndexedValues(c),l=e.dbis[o];if(u){Vu&&l.prefetch(u.map(_=>({key:_,value:n})),$u);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Vu&&e.dbis[t].prefetch([n],$u),e.dbis[t].put(n,s,s[$n])})}a(YG,"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++}}a(KG,"removeSkippedRecords");function UA(e,t,r){let s=r>0;(s||!Number.isInteger(e[$n]))&&(e[$n]=r||(r=es.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[ff]))&&(e[ff]=r||es.getNextMonotonicTime()):delete e[ff]}a(UA,"setTimestamps");function hf(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),vG.initializeDBIs(e,t,r)}a(hf,"initializeTransaction");async function WG(e,t,r,s,n=es.getNextMonotonicTime()){pf(e,t,r,s),hf(e,t,r);let i=new HG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Sf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return mf(c,u,s,i,n,o)}a(WG,"updateRecords");async function QG(e,t,r,s,n=es.getNextMonotonicTime()){try{pf(e,t,r,s)}catch(u){throw kG(u,u.message,VG.HTTP_STATUS_CODES.BAD_REQUEST)}hf(e,t,r);let i=new qG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;GG.isEmpty(l[t])?(_=xG.v4(),l[t]=_):_=l[t];let d=Sf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return mf(o,c,s,i,n)}a(QG,"upsertRecords");async function mf(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||es.getNextMonotonicTime(),KG(r,i),s}a(mf,"finalizeWrite");function Sf(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[$n])&&l[$n]>r[$n])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let T=r[h],S=e.dbis[h];if(S===void 0)continue;let y=l[h];if(typeof T=="function"){let H=T([[l]]);Array.isArray(H)&&(T=H[0][Ps.FUNC_VAL],r[h]=T)}if(T===y)continue;let O=es.getIndexedValues(y);if(O){Vu&&S.prefetch(O.map(H=>({key:H,value:s})),$u);for(let H=0,Y=O.length;H<Y;H++)S.remove(O[H],s)}if(O=es.getIndexedValues(T),O){Vu&&S.prefetch(O.map(H=>({key:H,value:s})),$u);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:Sf(e,t,r,s,n,i,o))}a(Sf,"updateUpsertRecord");function zG(e,t,r){if(es.validateEnv(e),t===void 0)throw new Error(da.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(da.WRITE_ATTRIBUTES_REQUIRED):new Error(da.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(zG,"validateBasic");function pf(e,t,r,s){if(zG(e,t,r),!Array.isArray(s))throw s===void 0?new Error(da.RECORDS_REQUIRED):new Error(da.RECORDS_MUST_BE_ARRAY)}a(pf,"validateWrite");function $u(){}a($u,"noop");DA.exports={insertRecords:$G,updateRecords:WG,upsertRecords:QG}});var Yn=m((Xre,JG)=>{JG.exports={hdb_table:{hash_attribute:"id",name:"hdb_table",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"name"},{attribute:"hash_attribute"},{attribute:"schema"},{attribute:"residence"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_attribute:{hash_attribute:"id",name:"hdb_attribute",schema:"system",residence:["*"],attributes:[{attribute:"id"},{attribute:"schema"},{attribute:"table"},{attribute:"attribute"},{attribute:"schema_table"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_schema:{hash_attribute:"name",name:"hdb_schema",schema:"system",residence:["*"],attributes:[{attribute:"name"},{attribute:"createddate"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_user:{hash_attribute:"username",name:"hdb_user",schema:"system",residence:["*"],attributes:[{attribute:"username"},{attribute:"password"},{attribute:"role"},{attribute:"active"},{attribute:"hash"},{attribute:"refresh_token"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_role:{hash_attribute:"id",name:"hdb_role",schema:"system",attributes:[{attribute:"id"},{attribute:"role"},{attribute:"permission"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}],residence:["*"]},hdb_job:{hash_attribute:"id",name:"hdb_job",schema:"system",attributes:[{attribute:"id"},{attribute:"user"},{attribute:"type"},{attribute:"status"},{attribute:"start_datetime"},{attribute:"end_datetime"},{attribute:"message"},{attribute:"created_datetime"},{attribute:"request"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_license:{hash_attribute:"license_key",name:"hdb_license",schema:"system",attributes:[{attribute:"license_key"},{attribute:"company"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_info:{hash_attribute:"info_id",name:"hdb_info",schema:"system",attributes:[{attribute:"info_id"},{attribute:"data_version_num"},{attribute:"hdb_version_num"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_nodes:{hash_attribute:"name",name:"hdb_nodes",schema:"system",attributes:[{attribute:"name"},{attribute:"subscriptions"},{attribute:"system_info"},{attribute:"__createdtime__"},{attribute:"__updatedtime__"}]},hdb_analytics:{hash_attribute:"id",name:"hdb_analytics",schema:"system",attributes:[{attribute:"id"},{attribute:"time"},{attribute:"metrics"}]},hdb_temp:{hash_attribute:"id",name:"hdb_temp",schema:"system",attributes:[{attribute:"id"}]}}});var ts=m((Zre,PA)=>{"use strict";var MA=x(),LA=g(),Fi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,vs=require("joi"),dn={schema_format:{pattern:Fi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},XG=vs.alternatives(vs.string().min(1).max(dn.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),vs.number()).required(),ZG=vs.alternatives(vs.string().min(1).max(dn.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),vs.number()),jG=vs.alternatives(vs.string().min(1).max(dn.schema_length.maximum).pattern(Fi).messages({"string.pattern.base":"{:#label} "+dn.schema_format.message}),vs.number()).required();function ex(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`:Fi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ex,"checkValidTable");function tx(e,t){return MA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(tx,"validateSchemaExists");function rx(e,t){let r=t.state.ancestors[0].schema;return MA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(rx,"validateTableExists");function sx(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(sx,"validateSchemaName");PA.exports={common_validators:dn,schema_regex:Fi,hdb_schema_table:XG,validateSchemaExists:tx,validateTableExists:rx,validateSchemaName:sx,checkValidTable:ex,hdb_database:ZG,hdb_table:jG}});var Yu=m((ese,vA)=>{var{common_validators:rs}=ts(),fa=Pe(),Ea="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 ha(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(ha,"makeAttributesStrings");function nx(e){return e=ha(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(nx,"schema_object");function ix(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(ix,"table_object");function ox(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,fa.validateObject(e,Ke)}a(ox,"create_table_object");function ax(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence={message:Ea},Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(ax,"attribute_object");function cx(e){return e=ha(e),Ke.table.presence={message:Ea},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,fa.validateObject(e,Ke)}a(cx,"describe_table");function ux(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(ux,"validateTableResidence");vA.exports={schema_object:nx,create_table_object:ox,table_object:ix,attribute_object:ax,describe_table:cx,validateTableResidence:ux}});var HA=m((rse,BA)=>{"use strict";var lx=require("uuid"),Tf=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||lx.v4(),this.schema_table=`${this.schema}.${this.table}`}};BA.exports=Tf});var Ku=m((nse,qA)=>{"use strict";var _x=HA(),Rf=class extends _x{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}};qA.exports=Rf});var GA=m((ose,FA)=>{"use strict";FA.exports=Ex;var dx="inserted";function Ex(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===dx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(Ex,"returnObject")});var Wu=m((cse,YA)=>{"use strict";var fx=g(),gf=ye(),hx=qi(),{getSystemSchemaPath:mx,getSchemaPath:Sx}=we(),px=Yn(),Tx=Yu(),Rx=Ku(),gx=GA(),{handleHDBError:xA,hdb_errors:VA}=W(),kA=x(),{HTTP_STATUS_CODES:Ax}=VA,Af=px.hdb_attribute,$A=[];for(let e=0;e<Af.attributes.length;e++)$A.push(Af.attributes[e].attribute);var Ox="inserted";YA.exports=Nx;async function Nx(e){let t=Tx.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,Ax.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 Rx(e.schema,e.table,e.attribute,e.id);try{let i=await gf.openEnvironment(Sx(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}`);gf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await gf.openEnvironment(mx(),fx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await hx.insertRecords(o,Af.hash_attribute,$A,[n]);return gx(Ox,c,{records:[n]},u)}catch(i){throw i}}a(Nx,"lmdbCreateAttribute")});var Nf=m((lse,WA)=>{var{hdb_table:bx,hdb_database:KA}=ts(),yx=Pe(),Of=require("joi"),Ix={undefined:"undefined",null:"null"},wx=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||Ix[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"),Cx=Of.object({database:KA,schema:KA,table:bx,records:Of.array().items(Of.object().custom(wx)).required()});WA.exports=function(e){return yx.validateBySchema(e,Cx)}});var ma=m((Ese,zA)=>{"use strict";var Bs=x(),QA=F(),dse=Nf(),{getDatabases:Ux}=(de(),te(Ne)),{ClientError:Kn}=W();zA.exports=Dx;function Dx(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=Ux()[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(o=>{if(i&&Bs.isEmptyOrZeroLength(o[r]))throw QA.error("a valid hash attribute must be provided with update record:",o),new Kn("a valid hash attribute must be provided with update record, check log for more info");if(!Bs.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 Kn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Bs.isEmpty(o[r])&&o[r]!==""&&s.has(Bs.autoCast(o[r]))&&(o.skip=!0),s.add(Bs.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(Dx,"insertUpdateValidate")});var Sa=m((hse,JA)=>{"use strict";var Lx=g().OPERATIONS_ENUM,bf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Lx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};JA.exports=bf});var ga=m((pse,XA)=>{"use strict";var Sse=Sa(),Qu=g(),If=x(),yf=F(),Mx=require("uuid"),{handleHDBError:pa,hdb_errors:Px}=W(),{HDB_ERROR_MSGS:Ta,HTTP_STATUS_CODES:Ra}=Px;XA.exports=vx;function vx(e,t,r){for(let n=0;n<t.length;n++)Bx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];Hx(i,r,e.operation)}}a(vx,"processRows");function Bx(e){if(Buffer.byteLength(String(e))>Qu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw pa(new Error,Ta.ATTR_NAME_LENGTH_ERR(e),Ra.BAD_REQUEST,void 0,void 0,!0);if(If.isEmptyOrZeroLength(e)||If.isEmpty(e.trim()))throw pa(new Error,Ta.ATTR_NAME_NULLISH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(Bx,"validateAttribute");function Hx(e,t,r){if(!e.hasOwnProperty(t)||If.isEmptyOrZeroLength(e[t])){if(r===Qu.OPERATIONS_ENUM.INSERT||r===Qu.OPERATIONS_ENUM.UPSERT){e[t]=Mx.v4();return}throw yf.error("Update transaction aborted due to record with no hash value:",e),pa(new Error,Ta.RECORD_MISSING_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Qu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw yf.error(e),pa(new Error,Ta.HASH_VAL_LENGTH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw yf.error(e),pa(new Error,Ta.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ra.BAD_REQUEST,void 0,void 0,!0)}a(Hx,"validateHash")});var jA=m((Rse,ZA)=>{"use strict";var wf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};ZA.exports=wf});var rO=m((Ase,tO)=>{"use strict";var Cf=ye(),qx=F(),eO=rr().LMDB_ERRORS_ENUM;tO.exports=Fx;async function Fx(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 Cf.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 Cf.closeEnvironment(global.lmdb_map[s]),await Cf.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(Fx,"cleanLMDBMap")});var Hs=m((Nse,oO)=>{"use strict";var Aa=require("crypto"),Gx=Q(),{CONFIG_PARAMS:xx}=g(),nO="aes-256-cbc",kx=32,Vx=16,Uf=64,iO=32,$x=Uf+iO,sO=new Map;oO.exports={encrypt:Yx,decrypt:Kx,createNatsTableStreamName:Wx};function Yx(e){let t=Aa.randomBytes(kx),r=Aa.randomBytes(Vx),s=Aa.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(Yx,"encrypt");function Kx(e){let t=e.substr(0,Uf),r=e.substr(Uf,iO),s=e.substr($x,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Aa.createDecipheriv(nO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Kx,"decrypt");function Wx(e,t){let r=Gx.get(xx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=sO.get(r);return s||(s=Aa.createHash("md5").update(r).digest("hex"),sO.set(r,s)),s}a(Wx,"createNatsTableStreamName")});var Wn=m((Ise,cO)=>{"use strict";var yse=Ar(),zu=F(),aO=Yu(),Qx=Hs(),Ju=x(),{handleHDBError:Xu,hdb_errors:zx}=W(),{HDB_ERROR_MSGS:Zu,HTTP_STATUS_CODES:Df}=zx,Jx=Q();Jx.initSync();var{getDatabases:Lf}=(de(),te(Ne));cO.exports={describeAll:Xx,describeTable:ju,describeSchema:Zx};async function Xx(e){try{let t=Ju.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Lf(),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 ju({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 ju({schema:l,table:d},f)}E&&c.push(E)}catch(E){zu.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 zu.error("Got an error in describeAll"),zu.error(t),Xu(new Error,Zu.DESCRIBE_ALL_ERR)}}a(Xx,"describeAll");async function ju(e,t){Ju.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=Lf()[r];if(!c)throw Xu(new Error,Zu.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let u=c[s];if(!u)throw Xu(new Error,Zu.TABLE_NOT_FOUND(e.schema,e.table),Df.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=Qx.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){zu.warn(`unable to stat table dbi due to ${d}`)}return _}a(ju,"descTable");async function Zx(e){Ju.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=Lf()[s];if(!i)throw Xu(new Error,Zu.SCHEMA_NOT_FOUND(e.schema),Df.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Ju.isEmpty(u)||u.describe){let l=await ju({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(Zx,"describeSchema")});var qs=m((Dse,EO)=>{var jx=Yn(),{callbackify:lO,promisify:ek}=require("util"),{getDatabases:_O}=(de(),te(Ne));EO.exports={setSchemaDataToGlobal:uO,getTableSchema:tk,getSystemSchema:rk,setSchemaDataToGlobalAsync:ek(uO)};var dO=Wn(),Cse=lO(dO.describeAll),Use=lO(dO.describeTable);function uO(e){global.hdb_schema=_O(),e&&e()}a(uO,"setSchemaDataToGlobal");function tk(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(tk,"getTableSchema");function rk(){return jx}a(rk,"getSystemSchema")});var Or=m((Mse,SO)=>{"use strict";var tl=Nf(),St=x(),sk=require("util"),rl=qr(),nk=qs(),fO=F(),{handleHDBError:Qn,hdb_errors:ik}=W(),{HTTP_STATUS_CODES:zn}=ik,ok=sk.promisify(nk.getTableSchema),ak="updated",hO="inserted",mO="upserted";SO.exports={insert:uk,update:lk,upsert:_k,validation:ck,flush:dk};async function ck(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 ok(e.schema,e.table),r=tl(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(ck,"validation");async function uk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=tl(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 rl.createRecords(e);return el(hO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(uk,"insertData");async function lk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=tl(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 rl.updateRecords(e);return St.isEmpty(s.existing_rows)?el(ak,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):el(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(lk,"updateData");async function _k(e){if(e.operation!=="upsert")throw Qn(new Error,"invalid operation, must be upsert",zn.INTERNAL_SERVER_ERROR);let t=tl(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 rl.upsertRecords(e);return el(mO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(_k,"upsertData");function el(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(el,"returnObject");function dk(e){return St.transformReq(e),rl.flush(e.schema,e.table)}a(dk,"flush")});var Pf=m((vse,RO)=>{var Ek=Pe(),Mf=require("joi"),{hdb_table:fk,hdb_database:pO}=ts(),TO={schema:pO,database:pO,table:fk},hk={date:Mf.date().iso().required()},mk={timestamp:Mf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};RO.exports=function(e,t){let r=t==="timestamp"?{...TO,...mk}:{...TO,...hk},s=Mf.object(r);return Ek.validateBySchema(e,s)}});var OO=m((Bse,AO)=>{var Sk=Pe(),vf=require("joi"),{hdb_table:pk,hdb_database:gO}=ts(),Tk=vf.object({schema:gO,database:gO,table:pk,hash_values:vf.array().required(),ids:vf.array()});AO.exports=function(e){return Sk.validateBySchema(e,Tk)}});var bO=m((Hse,NO)=>{"use strict";var Bf=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}},Hf=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}},qf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};NO.exports={InsertObject:Bf,NoSQLSeachObject:Hf,DeleteResponseObject:qf}});var Zn=m((Fse,UO)=>{"use strict";var IO=Pf(),Rk=OO(),Jn=x(),yO=require("moment"),wO=F(),{promisify:gk,callbackify:Ak}=require("util"),Xn=g(),Ok=qs(),Ff=gk(Ok.getTableSchema),Gf=qr(),{DeleteResponseObject:Nk}=bO(),{handleHDBError:En,hdb_errors:bk}=W(),{HDB_ERROR_MSGS:sl,HTTP_STATUS_CODES:fn}=bk,yk="records successfully deleted",Ik=Ak(CO);UO.exports={delete:Ik,deleteRecord:CO,deleteFilesBefore:wk,deleteAuditLogsBefore:Ck};async function wk(e){let t=IO(e,"date");if(t)throw En(t,t.message,fn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),!yO(e.date,yO.ISO_8601).isValid())throw En(new Error,sl.INVALID_DATE,fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,sl.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 Gf.deleteRecordsBefore(e);if(await Ff(e.schema,e.table),wO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(wk,"deleteFilesBefore");async function Ck(e){let t=IO(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,sl.INVALID_VALUE("Timestamp"),fn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,sl.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 Gf.deleteAuditLogsBefore(e);return await Ff(e.schema,e.table),wO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Ck,"deleteAuditLogsBefore");async function CO(e){e.ids&&(e.hash_values=e.ids);let t=Rk(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 Ff(e.schema,e.table);let s=await Gf.deleteRecords(e);return Jn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${yk}`),s}catch(s){if(s.message===Xn.SEARCH_NOT_FOUND_MESSAGE){let n=new Nk;return n.message=Xn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(CO,"deleteRecord")});var nl=m((xse,MO)=>{var Uk=require("crypto"),DO=9;function Dk(e){let t=Mk(DO),r=LO(e+t);return t+r}a(Dk,"createHash");function Lk(e,t){let r=e.substr(0,DO),s=r+LO(t+r);return e===s}a(Lk,"validateHash");function Mk(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(Mk,"generateSalt");function LO(e){return Uk.createHash("md5").update(e).digest("hex")}a(LO,"md5");MO.exports={hash:Dk,validate:Lk}});var vO=m((Vse,PO)=>{var xf=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 Pk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,xf.validateObject(e,It)}a(Pk,"addUserValidation");function vk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(vk,"alterUserValidation");function Bk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,xf.validateObject(e,It)}a(Bk,"dropUserValidation");PO.exports={addUserValidation:Pk,alterUserValidation:vk,dropUserValidation:Bk}});var Be=m((Kse,HO)=>{"use strict";var{platform:Yse}=require("os"),Hk="nats-server.zip",kf="nats-server",qk=process.platform==="win32"?`${kf}.exe`:kf,Vf="HDB",Fk=/^[^\s.,*>]+$/,BO="__request__",Gk=a(e=>`${e}.${BO}`,"REQUEST_SUBJECT"),xk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},kk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Vk={HUB:"hub.pid",LEAF:"leaf.pid"},$k={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Yk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Vf,deliver_subject:"__HDB__.WORKQUEUE"},Kk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Vf,deliver_subject:"HDB.SCHEMAQUEUE"},Wk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Vf,deliver_subject:"HDB.USERQUEUE"},Qk={SUCCESS:"success",ERROR:"error"},zk={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Jk={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Xk={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},Zk={debug:"-D",trace:"-DVV"};HO.exports={NATS_SERVER_ZIP:Hk,NATS_SERVER_NAME:kf,NATS_BINARY_NAME:qk,PID_FILES:Vk,NATS_CONFIG_FILES:kk,SERVER_SUFFIX:$k,WORK_QUEUE_CONSUMER_NAMES:Yk,SCHEMA_QUEUE_CONSUMER_NAMES:Kk,USER_QUEUE_CONSUMER_NAMES:Wk,NATS_TERM_CONSTRAINTS_RX:Fk,REQUEST_SUFFIX:BO,UPDATE_REMOTE_RESPONSE_STATUSES:Qk,CLUSTER_STATUS_STATUSES:zk,REQUEST_SUBJECT:Gk,SUBJECT_PREFIXES:Jk,MSG_HEADERS:xk,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:Zk,LOG_LEVEL_HIERARCHY:Xk}});var FO=m((Qse,qO)=>{"use strict";var il=g(),ol=class{static{a(this,"BaseLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},$f=class extends ol{static{a(this,"ExtendedLicense")}constructor(t=0,r=il.RAM_ALLOCATION_ENUM.DEFAULT,s=il.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};qO.exports={BaseLicense:ol,ExtendedLicense:$f}});var Oa=m((Jse,YO)=>{"use strict";var ki=require("fs-extra"),GO=nl(),xO=require("crypto"),jk=require("moment"),eV=require("uuid").v4,wt=F(),Kf=require("path"),tV=x(),hn=g(),rV=FO().ExtendedLicense,xi="invalid license key format",sV="061183",nV="mofi25",iV="aes-256-cbc",oV=16,aV=32,kO=Q();kO.initSync();var Yf;YO.exports={validateLicense:VO,generateFingerPrint:uV,licenseSearch:$O,getLicense:dV};function Wf(){return Kf.join(kO.getHdbBasePath(),hn.LICENSE_KEY_DIR_NAME,hn.LICENSE_FILE_NAME)}a(Wf,"getLicenseDirPath");function cV(){let e=Wf();return Kf.join(e,hn.LICENSE_FILE_NAME)}a(cV,"getLicenseFilePath");function Qf(){let e=Wf();return Kf.join(e,hn.REG_KEY_FILE_NAME)}a(Qf,"getFingerPrintFilePath");async function uV(){let e=Qf();try{return await ki.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await lV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(uV,"generateFingerPrint");async function lV(){let e=eV(),t=GO.hash(e),r=Qf();try{await ki.mkdirp(Wf()),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(lV,"writeFingerprint");function VO(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=Qf(),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(nV),c=o[1];c=Buffer.concat([Buffer.from(c)],oV);let u=Buffer.concat([Buffer.from(i)],aV),l=xO.createDecipheriv(iV,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=_V(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<jk().valueOf()&&(r.valid_date=!1),GO.validate(o[1],`${sV}${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 _V(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(_V,"checkOldLicense");function $O(){let e=new rV,t=[];try{t=ki.readFileSync(cV(),"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(tV.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=hn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return Yf=e,e}a($O,"licenseSearch");async function dV(){return Yf||await $O(),Yf}a(dV,"getLicense")});var ar=m((tne,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:gV,alterUser:AV,dropUser:NV,getSuperUser:wV,userInfo:bV,listUsers:cl,listUsersExternal:yV,setUsersToGlobal:$i,findAndValidateUser:oN,getClusterUser:CV,USERNAME_REQUIRED:JO,ALTERUSER_NOTHING_TO_UPDATE:XO,EMPTY_PASSWORD:ZO,EMPTY_ROLE:jO,ACTIVE_BOOLEAN:eN};var tN=Or(),EV=Zn(),Jf=nl(),rN=vO(),sN=Ar(),Xf=Fs(),or=x(),nN=require("validate.js"),ue=F(),{promisify:fV}=require("util"),Zf=Hs(),KO=g(),WO=Be(),hV=Rr(),Zse=Q(),jse=Oa(),mV=Yn(),{table:ene}=(de(),te(Ne)),{handleHDBError:ss,hdb_errors:SV}=W(),{HTTP_STATUS_CODES:ns,AUTHENTICATION_ERROR_MSGS:zf,HDB_ERROR_MSGS:Vi}=SV,{UserEventMsg:jf}=Fr(),QO=require("lodash"),{_assignPackageExport:pV}=require("../../index");pV("getUser",oN);var iN={username:!0,active:!0,role:!0,password:!0},zO=new Map,al=sN.searchByValue,TV=sN.searchByHash,RV=fV(EV.delete);async function gV(e){let t=nN.cleanAttributes(e,iN),r=rN.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 al(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,Vi.ROLE_NAME_NOT_FOUND(t.role),ns.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ss(new Error,Vi.DUP_ROLES_FOUND(t.role),ns.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.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 ss(new Error,Vi.USER_ALREADY_EXISTS(t.username),ns.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Xf.signalUserChange(new jf(process.pid)),`${c.username} successfully added`}a(gV,"addUser");async function AV(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=OV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=Zf.encrypt(t.password)),t.password=Jf.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 al(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),ss(new Error,c,ns.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=Vi.ALTER_USER_DUP_ROLES(t.role);throw ue.error(c),ss(new Error,c,ns.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 Xf.signalUserChange(new jf(process.pid)),n}a(AV,"alterUser");function OV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(OV,"isClusterUser");async function NV(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 ss(new Error,Vi.USER_NOT_EXIST(e.username),ns.NOT_FOUND,void 0,void 0,!0);let s;try{s=await RV(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 Xf.signalUserChange(new jf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(NV,"dropUser");async function bV(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 TV(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(bV,"userInfo");async function yV(){let e;try{e=await cl()}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(yV,"listUsersExternal");async function cl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await al(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 al(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],IV(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(cl,"listUsers");function IV(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(mV)){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(IV,"appendSystemTablesToRole");async function $i(){try{let e=await cl();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 ss(new Error,zf.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ss(new Error,zf.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(zO.get(t)===s.password)return n;if(Jf.validate(s.password,t))zO.set(t,s.password);else throw ss(new Error,zf.GENERIC_AUTH_FAIL,ns.UNAUTHORIZED,void 0,void 0,!0)}return n}a(oN,"findAndValidateUser");async function wV(){global.hdb_users||await $i();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(wV,"getSuperUser");async function CV(){let e=await cl(),t=hV.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=Zf.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(CV,"getClusterUser")});var ba=m((ine,_N)=>{"use strict";var jn=F(),cr=g(),UV=rO(),sne=qs(),nne=Wn(),DV=ar(),{validateEvent:cN}=Fr(),Na=qr(),LV=require("process"),{resetDatabases:MV}=(de(),te(Ne)),PV={[cr.ITC_EVENT_TYPES.SCHEMA]:vV,[cr.ITC_EVENT_TYPES.USER]:lN};async function vV(e){let t=cN(e);if(t){jn.error(t);return}jn.trace("ITC schemaHandler received schema event:",e),await UV(e.message),await BV(e.message)}a(vV,"schemaHandler");async function BV(e){try{Na.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Na.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Na.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=MV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){jn.error(t)}}a(BV,"syncSchemaMetadata");var uN=[];async function lN(e){try{try{Na.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Na.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){jn.warn(r)}let t=cN(e);if(t){jn.error(t);return}jn.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${LV.pid} received user event:`,e),await DV.setUsersToGlobal();for(let r of uN)r()}catch(t){jn.error(t)}}a(lN,"userHandler");lN.addListener=function(e){uN.push(e)};_N.exports=PV});var Fr=m((_ne,EN)=>{"use strict";var ane=F(),eh=x(),HV=g(),{ITC_ERRORS:ya}=rr(),{parentPort:cne,threadId:qV,isMainThread:FV,workerData:une}=require("worker_threads"),{onMessageFromWorkers:GV,broadcast:lne,broadcastWithAcknowledgement:xV}=_t();EN.exports={sendItcEvent:kV,validateEvent:dN,SchemaEventMsg:VV,UserEventMsg:$V};var ul;GV(async(e,t)=>{ul=ul||ba(),dN(e),ul[e.type]&&await ul[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function kV(e){return!FV&&e.message&&(e.message.originator=qV),xV(e)}a(kV,"sendItcEvent");function dN(e){if(typeof e!="object")return ya.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||eh.isEmpty(e.type))return ya.MISSING_TYPE;if(!e.hasOwnProperty("message")||eh.isEmpty(e.message))return ya.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||eh.isEmpty(e.message.originator))return ya.MISSING_ORIGIN;if(HV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ya.INVALID_EVENT(e.type)}a(dN,"validateEvent");function VV(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(VV,"SchemaEventMsg");function $V(e){this.originator=e}a($V,"UserEventMsg")});var Fs=m((fne,SN)=>{"use strict";var fN=g(),Ene=x(),ll=F(),hN=jA(),Yi,{sendItcEvent:mN}=Fr();function YV(e){try{ll.trace("signalSchemaChange called with message:",e),Yi=Yi||ba();let t=new hN(fN.ITC_EVENT_TYPES.SCHEMA,e);return Yi.schema(t),mN(t)}catch(t){ll.error(t)}}a(YV,"signalSchemaChange");function KV(e){try{ll.trace("signalUserChange called with message:",e),Yi=Yi||ba();let t=new hN(fN.ITC_EVENT_TYPES.USER,e);return Yi.user(t),mN(t)}catch(t){ll.error(t)}}a(KV,"signalUserChange");SN.exports={signalSchemaChange:YV,signalUserChange:KV}});var _l=m((mne,TN)=>{"use strict";var pN=x(),WV=g(),QV=F(),zV=Wu(),JV=Ku(),XV=Fs(),{SchemaEventMsg:ZV}=Fr(),jV="already exists in";TN.exports=e$;async function e$(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 t$(e,t.schema,t.name,i)})),n}a(e$,"lmdbCheckForNewAttributes");async function t$(e,t,r,s){let n=new JV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await r$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(jV))QV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(t$,"createNewAttribute");async function r$(e){let t;return t=await zV(e),XV.signalSchemaChange(new ZV(process.pid,WV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(r$,"createAttribute")});var Ki=m((pne,RN)=>{"use strict";var th=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=th});var AN=m((Rne,gN)=>{"use strict";var s$=Ki(),n$=g().OPERATIONS_ENUM,rh=class extends s${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(n$.INSERT,r,s,n,i),this.records=t}};gN.exports=rh});var NN=m((Ane,ON)=>{"use strict";var i$=Ki(),o$=g().OPERATIONS_ENUM,sh=class extends i${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(o$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};ON.exports=sh});var yN=m((Nne,bN)=>{"use strict";var a$=Ki(),c$=g().OPERATIONS_ENUM,nh=class extends a${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(c$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};bN.exports=nh});var wN=m((yne,IN)=>{"use strict";var u$=Ki(),l$=g().OPERATIONS_ENUM,ih=class extends u${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(l$.DELETE,s,n,t,i),this.original_records=r}};IN.exports=ih});var Ia=m((Cne,LN)=>{"use strict";var wne=require("path"),CN=ye(),_$=AN(),d$=NN(),E$=yN(),f$=wN(),Wi=xe(),UN=x(),{CONFIG_PARAMS:h$}=g(),DN=Q();DN.initSync();var dl=g().OPERATIONS_ENUM,{getTransactionAuditStorePath:m$}=we();LN.exports=S$;async function S$(e,t){if(DN.get(h$.LOGGING_AUDITLOG)===!1)return;let r=m$(e.schema,e.table),s=await CN.openEnvironment(r,e.table,!0),n=p$(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(S$,"writeTransaction");function p$(e,t){let r=UN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===dl.INSERT)return new _$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPDATE)return new d$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPSERT)return new E$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.DELETE)return new f$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(p$,"createTransactionObject")});var oh=m((Lne,MN)=>{"use strict";var T$=ma(),Dne=Sa(),wa=g(),R$=ga(),g$=qi().insertRecords,A$=ye(),O$=F(),N$=_l(),{getSchemaPath:b$}=we(),y$=Ia();MN.exports=I$;async function I$(e){try{let{schema_table:t,attributes:r}=T$(e);R$(e,r,t.hash_attribute),e.schema!==wa.SYSTEM_SCHEMA_NAME&&(r.includes(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(wa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await N$(e.hdb_auth_header,t,r),n=b$(e.schema,e.table),i=await A$.openEnvironment(n,e.table),o=await g$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await y$(e,o)}catch(c){O$.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(I$,"lmdbCreateRecords")});var BN=m((Pne,vN)=>{"use strict";var PN=g(),w$=oh(),C$=Sa(),U$=require("fs-extra"),{getSchemaPath:D$}=we();vN.exports=L$;async function L$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new C$(PN.SYSTEM_SCHEMA_NAME,PN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await w$(r),await U$.mkdirp(D$(e.schema))}a(L$,"lmdbCreateSchema")});var qN=m((Bne,HN)=>{"use strict";var ah=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=ah});var kN=m((xne,xN)=>{"use strict";var FN=ye(),ch=Ht(),uh=rr().LMDB_ERRORS_ENUM,M$=xe(),GN=F(),qne=x(),P$=require("lmdb"),v$=qN(),B$=g(),{OVERFLOW_MARKER:Fne,MAX_SEARCH_KEY_LENGTH:Gne}=M$,H$=B$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function q$(e,t,r,s){if(ch.validateEnv(e),t===void 0)throw new Error(uh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(uh.IDS_REQUIRED):new Error(uh.IDS_MUST_BE_ITERABLE);try{let n=FN.listDBIs(e);FN.initializeDBIs(e,t,n);let i=new v$,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[H$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,P$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let S=0;S<n.length;S++){let y=n[S];if(!h.hasOwnProperty(y)||y===t)continue;let O=e.dbis[y],H=h[y];if(H!=null)try{let Y=ch.getIndexedValues(H);if(Y)for(let A=0,w=Y.length;A<w;A++)O.remove(Y[A],o)}catch{GN.warn(`cannot delete from attribute: ${y}, ${H}:${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=ch.getNextMonotonicTime(),i}catch(n){throw n}}a(q$,"deleteRecords");xN.exports={deleteRecords:q$}});var Ca=m((Vne,$N)=>{"use strict";var Qi=x(),F$=kN(),G$=ye(),{getSchemaPath:x$}=we(),k$=Ia(),V$=F();$N.exports=$$;async function $$(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=x$(e.schema,e.table),i=await G$.openEnvironment(n,e.table),o=await F$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await k$(e,o)}catch(c){V$.error(`unable to write transaction due to ${c.message}`)}return VN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a($$,"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 _h=m((Kne,YN)=>{"use strict";var Y$=g(),Yne=Ht();function lh(e,t){let r=Object.create(null);if(t.length===1&&Y$.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(lh,"parseRow");function K$(e,t,r,s){let n=lh(r,e);s.push(n)}a(K$,"searchAll");function W$(e,t,r,s){let n=lh(r,e);s[t]=n}a(W$,"searchAllToMap");function Q$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(Q$,"iterateDBI");function ei(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(ei,"pushResults");function z$(e,t,r,s,n,i){t.toString().endsWith(e)&&ei(t,r,s,n,i)}a(z$,"endsWith");function J$(e,t,r,s,n,i){t.toString().includes(e)&&ei(t,r,s,n,i)}a(J$,"contains");function X$(e,t,r,s,n,i){t>e&&ei(t,r,s,n,i)}a(X$,"greaterThanCompare");function Z$(e,t,r,s,n,i){t>=e&&ei(t,r,s,n,i)}a(Z$,"greaterThanEqualCompare");function j$(e,t,r,s,n,i){t<e&&ei(t,r,s,n,i)}a(j$,"lessThanCompare");function eY(e,t,r,s,n,i){t<=e&&ei(t,r,s,n,i)}a(eY,"lessThanEqualCompare");YN.exports={parseRow:lh,searchAll:K$,searchAllToMap:W$,iterateDBI:Q$,endsWith:z$,contains:J$,greaterThanCompare:X$,greaterThanEqualCompare:Z$,lessThanCompare:j$,lessThanEqualCompare:eY,pushResults:ei}});var zi=m((Xne,ZN)=>{"use strict";var mn=ye(),Qne=F(),ur=Ht(),El=xe(),ke=rr().LMDB_ERRORS_ENUM,zne=x(),tY=g(),fl=_h(),{parseRow:rY}=fl,Jne=require("lmdb"),{OVERFLOW_MARKER:KN,MAX_SEARCH_KEY_LENGTH:sY}=El;function WN(e,t,r,s=!1,n=void 0,i=void 0){return ti(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 Ua(e,t,r,s,n,i=!1,o=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:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(H=>({value:H}))):d.getRange(O)})}a(Ua,"iterateRangeBetween");function ti(e,t,r,s){let n=e.database||e,i=mn.openDBI(n,r);i[El.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&mn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(ti,"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=mn.openDBI(e,r);else{let u=mn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=mn.openDBI(e,u[l]),!n[El.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(QN,"getOverflowCheck");function nY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ti(e,t,t,(o,c,u)=>(hl(r),r=Da(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>rY(l.value,r))))}a(nY,"searchAll");function iY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);hl(r),r=Da(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,fl.parseRow(u,r));return o}a(iY,"searchAllToMap");function oY(e,t,r=!1,s=void 0,n=void 0){if(ur.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(oY,"iterateDBI");function aY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return mn.statDBI(e,t).entryCount}a(aY,"countAll");function cY(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ti(e,t,r,(c,u,l,_)=>(s=ur.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(cY,"equals");function uY(e,t,r){return Sn(e,t,r),mn.openDBI(e,t).getValuesCount(r)}a(uY,"count");function lY(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ti(e,null,r,(c,u)=>{s=ur.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(lY,"startsWith");function _Y(e,t,r,s,n=!1,i=void 0,o=void 0){return zN(e,t,r,s,n,i,o,!0)}a(_Y,"endsWith");function zN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Sn(e,r,s),ti(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 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[El.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 dY(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!0,!1)}a(dY,"greaterThan");function EY(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!1,!1)}a(EY,"greaterThanEqual");function fY(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!0)}a(fY,"lessThan");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){Sn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!1)}a(hY,"lessThanEqual");function mY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.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=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ua(e,t,r,s,n,i,o,c)}a(mY,"between");function SY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),r=Da(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=fl.parseRow(c,r)),o}a(SY,"searchByHash");function pY(e,t,r){ur.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(pY,"checkHashExists");function TY(e,t,r,s,n=[]){return XN(e,t,r,s,n),JN(e,t,r,s,n).map(i=>i[1])}a(TY,"batchSearchByHash");function RY(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(RY,"batchSearchByHashToMap");function JN(e,t,r,s,n=[]){return ti(e,t,t,(i,o,c)=>{r=Da(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,fl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(JN,"batchHashSearch");function XN(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(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 hl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(hl,"validateFetchAttributes");function Sn(e,t,r){if(ur.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>sY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Sn,"validateComparisonFunctions");function Da(e,t){return t.length===1&&tY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=mn.listDBIs(e)),t}a(Da,"setGetWholeRowAttributes");ZN.exports={searchAll:nY,searchAllToMap:iY,count:uY,countAll:aY,equals:cY,startsWith:lY,endsWith:_Y,contains:zN,searchByHash:SY,setGetWholeRowAttributes:Da,batchSearchByHash:TY,batchSearchByHashToMap:RY,checkHashExists:pY,iterateDBI:oY,greaterThan:dY,greaterThanEqual:EY,lessThan:fY,lessThanEqual:hY,between:mY}});var Ji=m((jne,sb)=>{var jN=require("lodash"),eb=Pe(),Ce=require("joi"),gY=x(),{hdb_schema_table:ml,checkValidTable:tb,hdb_table:rb,hdb_database:Sl}=ts(),{handleHDBError:AY,hdb_errors:OY}=W(),{getDatabases:NY}=(de(),te(Ne)),{HTTP_STATUS_CODES:bY}=OY,yY=Ce.object({database:Sl,schema:Sl,table:rb,search_attribute:ml,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(ml).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),IY=Ce.object({database:Sl,schema:Sl,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(ml).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:ml,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,yY);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,IY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=gY.checkGlobalSchemaTable(e.schema,e.table);if(n)return AY(new Error,n,bY.NOT_FOUND);let o=NY()[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 dh=m((tie,nb)=>{"use strict";var wY=ye(),CY=Ji(),{getSchemaPath:UY}=we();nb.exports=DY;function DY(e){let t=CY(e,"hashes");if(t)throw t;let r=UY(e.schema,e.table);return wY.openEnvironment(r,e.table)}a(DY,"initialize")});var Eh=m((sie,ib)=>{"use strict";var LY=zi(),MY=dh();ib.exports=PY;async function PY(e){let t=await MY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return LY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(PY,"lmdbGetDataByHash")});var Xi=m((iie,ob)=>{"use strict";var fh=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=fh});var cb=m((cie,ab)=>{"use strict";var aie=Xi(),vY=zi(),BY=dh();ab.exports=HY;async function HY(e){let t=await BY(e),r=global.hdb_schema[e.schema][e.table];return vY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(HY,"lmdbSearchByHash")});var is=m((lie,ub)=>{"use strict";var hh=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=hh});var pl=m((die,hb)=>{"use strict";var Ct=zi(),qY=ye(),FY=x(),oe=xe(),ri=g(),GY=Yn(),lb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:xY}=we(),Gs=ri.SEARCH_WILDCARDS;async function kY(e,t,r){let s;e.schema===ri.SYSTEM_SCHEMA_NAME?s=GY[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(kY,"prepSearch");async function db(e,t,r,s){let n=xY(e.schema,e.table),i=await qY.openEnvironment(n,e.table),o=Eb(i,e,t,r),c=o.transaction||i;if([oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH,oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP,oe.SEARCH_TYPES.SEARCH_ALL,oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP].indexOf(t)>=0)return o;if(VY(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 oe.SEARCH_TYPES.EQUALS:n=Ct.equals(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.CONTAINS:n=Ct.contains(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.ENDS_WITH:case oe.SEARCH_TYPES._ENDS_WITH:n=Ct.endsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.STARTS_WITH:case oe.SEARCH_TYPES._STARTS_WITH:n=Ct.startsWith(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:return Ct.batchSearchByHash(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:return Ct.batchSearchByHashToMap(e,t.search_attribute,t.get_attributes,[t.search_value]);case oe.SEARCH_TYPES.SEARCH_ALL:return Ct.searchAll(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:return Ct.searchAllToMap(e,s,t.get_attributes,o,c,u);case oe.SEARCH_TYPES.BETWEEN:n=Ct.between(e,i,t.search_attribute,t.search_value,t.end_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN:case oe.SEARCH_TYPES._GREATER_THAN:n=Ct.greaterThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.GREATER_THAN_EQUAL:case oe.SEARCH_TYPES._GREATER_THAN_EQUAL:n=Ct.greaterThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN:case oe.SEARCH_TYPES._LESS_THAN:n=Ct.lessThan(e,i,t.search_attribute,t.search_value,o,c,u);break;case oe.SEARCH_TYPES.LESS_THAN_EQUAL:case oe.SEARCH_TYPES._LESS_THAN_EQUAL:n=Ct.lessThanEqual(e,i,t.search_attribute,t.search_value,o,c,u);break;default:return Object.create(null)}return n}a(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 VY(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(VY,"checkToFetchMore");function fb(e,t,r,s){if(FY.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),Gs.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Gs[0])<0&&n.indexOf(Gs[1])<0)return c===!0?r===!0?oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH_TO_MAP:oe.SEARCH_TYPES.BATCH_SEARCH_BY_HASH:oe.SEARCH_TYPES.EQUALS;if(Gs.indexOf(i)>=0&&Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(Gs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(Gs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(Gs[0])||n.includes(Gs[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(lb.UNKNOWN_SEARCH_TYPE)}else switch(s){case ri.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case ri.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case ri.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case ri.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case ri.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(lb.UNKNOWN_SEARCH_TYPE)}}a(fb,"createSearchTypeFromSearchObject");hb.exports={executeSearch:db,createSearchTypeFromSearchObject:fb,prepSearch:kY,searchByType:Eb}});var Sb=m((hie,mb)=>{"use strict";var fie=is(),$Y=Ji(),YY=x(),KY=g(),WY=pl();mb.exports=QY;function QY(e,t){if(!YY.isEmpty(t)&&KY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=$Y(e,"value");if(s)throw s;let n=!0;return WY.prepSearch(e,t,n)}a(QY,"lmdbGetDataByValue")});var La=m((pie,pb)=>{"use strict";var Sie=is(),zY=Ji(),JY=x(),XY=g(),ZY=pl();pb.exports=jY;async function jY(e,t){if(!JY.isEmpty(t)&&XY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=zY(e,"value");if(s)throw s;return ZY.prepSearch(e,t,!1)}a(jY,"lmdbSearchByValue")});var Rb=m((gie,Tb)=>{"use strict";var Rie=xe(),mh=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}},Sh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},ph=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Tb.exports={SearchByConditionsObject:mh,SearchCondition:Sh,SortAttribute:ph}});var bb=m((bie,Nb)=>{"use strict";var Oie=Rb().SearchByConditionsObject,eK=is(),tK=Ji(),Th=zi(),Tl=xe(),{Resource:Nie}=(Xr(),te(HE)),Ob=pl(),rK=_h(),sK=require("lodash"),{getSchemaPath:nK}=we(),gb=ye(),{handleHDBError:iK,hdb_errors:oK}=W(),{HTTP_STATUS_CODES:aK}=oK,cK=1e8;Nb.exports=uK;async function uK(e){let t=tK(e,"conditions");if(t)throw iK(t,t.message,aK.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=nK(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=sK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Tl.SEARCH_TYPES.EQUALS?l.estimated_count=Th.count(s,l.search_attribute,l.search_value):_===Tl.SEARCH_TYPES.CONTAINS||_===Tl.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=cK}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=Th.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=>rK.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=Th.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(uK,"lmdbSearchByConditions");async function Ab(e,t,r,s){let n=new eK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Tl.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 Ma=m((Iie,yb)=>{"use strict";var lK=g().OPERATIONS_ENUM,Rh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=lK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};yb.exports=Rh});var gh=m((Cie,Pb)=>{"use strict";var Ub=is(),Db=Ma(),Lb=La(),Mb=Ca(),Ft=g(),Ib=x(),wb=ye(),{getTransactionAuditStorePath:_K,getSchemaPath:dK}=we(),Cb=F();Pb.exports=EK;async function EK(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 fK(e),await hK(e);let t=dK(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=_K(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(EK,"lmdbDropTable");async function fK(e){let t=new Ub(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await 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(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Mb(n)}a(fK,"deleteAttributesFromSystem");async function hK(e){let t=new Ub(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await 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(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Mb(n)}catch(i){throw i}}a(hK,"dropTableFromSystem")});var Bb=m((Die,vb)=>{"use strict";var mK=require("fs-extra"),SK=is(),pK=Xi(),TK=Ma(),RK=gh(),gK=Ca(),AK=Eh(),OK=La(),xs=g(),{getSchemaPath:NK}=we(),{handleHDBError:bK,hdb_errors:yK}=W(),{HDB_ERROR_MSGS:IK,HTTP_STATUS_CODES:wK}=yK;vb.exports=CK;async function CK(e){let t;try{t=await UK(e.schema);let r=new SK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await OK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await RK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new TK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await gK(n);let i=NK(t);await mK.remove(i)}catch(r){throw r}}a(CK,"lmdbDropSchema");async function UK(e){let t=new pK(xs.SYSTEM_SCHEMA_NAME,xs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[xs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await AK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw bK(new Error,IK.SCHEMA_NOT_FOUND(e),wK.NOT_FOUND,void 0,void 0,!0);return s}a(UK,"validateDropSchema")});var Oh=m((Mie,Hb)=>{"use strict";var Ah=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Hb.exports=Ah});var Fb=m((Bie,qb)=>{"use strict";var DK=require("fs-extra"),Rl=ye(),{getTransactionAuditStorePath:LK}=we(),Nh=xe(),vie=Oh();qb.exports=MK;async function MK(e){let t;try{let r=LK(e.schema,e.table);await DK.mkdirp(r),t=await Rl.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{Rl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rl.createDBI(t,Nh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rl.createDBI(t,Nh.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(MK,"createTransactionsAuditEnvironment")});var Vb=m((qie,kb)=>{"use strict";var bh=g(),Gb=ye(),PK=qi(),{getSystemSchemaPath:vK,getSchemaPath:BK}=we(),HK=Yn(),qK=Wu(),yh=Ku(),FK=F(),GK=Fb(),wh=HK.hdb_table,xb=[];for(let e=0;e<wh.attributes.length;e++)xb.push(wh.attributes[e].attribute);kb.exports=xK;async function xK(e,t){let r=BK(t.schema,t.table),s=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new yh(t.schema,t.table,bh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new yh(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(vK(),bh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await PK.insertRecords(o,wh.hash_attribute,xb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Ih(s),await Ih(n),await Ih(i)}await GK(t)}catch(o){throw o}}a(xK,"lmdbCreateTable");async function Ih(e){try{await qK(e)}catch(t){FK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Ih,"createAttribute")});var Yb=m((Gie,$b)=>{"use strict";var kK=ma(),VK=ga(),$K=_l(),Pa=g(),YK=qi().updateRecords,KK=ye(),{getSchemaPath:WK}=we(),QK=Ia(),zK=F();$b.exports=JK;async function JK(e){try{let{schema_table:t,attributes:r}=kK(e);VK(e,r,t.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(r.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await $K(e.hdb_auth_header,t,r),n=WK(e.schema,e.table),i=await KK.openEnvironment(n,e.table),o=await YK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await QK(e,o)}catch(c){zK.error(`unable to write transaction due to ${c.message}`)}return{written_hashes:o.written_hashes,skipped_hashes:o.skipped_hashes,schema_table:t,new_attributes:s,txn_time:o.txn_time}}catch(t){throw t}}a(JK,"lmdbUpdateRecords")});var Wb=m((kie,Kb)=>{"use strict";var XK=g().OPERATIONS_ENUM,Ch=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=XK.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Kb.exports=Ch});var zb=m((Yie,Qb)=>{"use strict";var $ie=Wb(),ZK=ma(),jK=ga(),e1=_l(),va=g(),t1=qi().upsertRecords,r1=ye(),{getSchemaPath:s1}=we(),n1=Ia(),i1=F(),{handleHDBError:o1,hdb_errors:a1}=W();Qb.exports=c1;async function c1(e){let t;try{t=ZK(e)}catch(u){throw o1(u,u.message,a1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;jK(e,s,r.hash_attribute),e.schema!==va.SYSTEM_SCHEMA_NAME&&(s.includes(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(va.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await e1(e.hdb_auth_header,r,s),i=s1(e.schema,e.table),o=await r1.openEnvironment(i,e.table),c=await t1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await n1(e,c)}catch(u){i1.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(c1,"lmdbUpsertRecords")});var Xb=m((Wie,Jb)=>{"use strict";var Uh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Jb.exports=Uh});var jb=m((zie,Zb)=>{"use strict";var Dh=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=Dh});var ry=m((Zie,ty)=>{"use strict";var Lh=ye(),{getTransactionAuditStorePath:u1}=we(),Xie=Xb(),Ba=xe(),l1=x(),ey=jb(),_1=require("util").promisify,d1=_1(setTimeout),E1=1e4,f1=100;ty.exports=h1;async function h1(e){let t=u1(e.schema,e.table),r=await Lh.openEnvironment(t,e.table,!0),s=Lh.listDBIs(r);Lh.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new ey;do n=await m1(r,e.timestamp),i.start_timestamp===void 0&&(i.start_timestamp=n.start_timestamp),n.end_timestamp!==void 0&&(i.end_timestamp=n.end_timestamp),i.transactions_deleted+=n.transactions_deleted,await d1(f1);while(n.transactions_deleted>0);return i}a(h1,"deleteAuditLogsBefore");async function m1(e,t){let r=new ey;try{let s=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];l1.isEmpty(c)||(n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[Ba.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>E1)break}return await n,r}catch(s){throw s}}a(m1,"deleteTransactions")});var ny=m((eoe,sy)=>{"use strict";var Mh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};sy.exports=Mh});var oy=m((soe,iy)=>{"use strict";var S1=is(),p1=Ma(),roe=ny(),os=g(),T1=x(),Ph=ye(),R1=Yn(),g1=La(),A1=Ca(),{getSchemaPath:O1}=we();iy.exports=N1;async function N1(e,t=!0){let r;e.schema===os.SYSTEM_SCHEMA_NAME?r=R1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await y1(e),n=O1(e.schema,e.table),i=await Ph.openEnvironment(n,e.table);return t===!0&&await b1(e,i,r.hash_attribute),Ph.dropDBI(i,e.attribute),s}a(N1,"lmdbDropAttribute");async function b1(e,t,r){let s=Ph.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(b1,"removeAttributeFromAllObjects");async function y1(e){let t=new S1(os.SYSTEM_SCHEMA_NAME,os.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await g1(t)).filter(o=>o[os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(T1.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[os.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new p1(os.SYSTEM_SCHEMA_NAME,os.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return A1(i)}a(y1,"dropAttributeFromSystem")});var dy=m((ooe,_y)=>{"use strict";var vh=ye(),Zi=xe(),ioe=Ht(),Bh=g(),ay=x(),{getTransactionAuditStorePath:I1}=we(),w1=zi(),gl=Ki(),C1=F();_y.exports=U1;async function U1(e){let t=I1(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,Zi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return cy(r,e.search_values);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,L1(r,e.search_values,n);case Bh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return D1(r,e.search_values);default:return cy(r)}}a(U1,"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 gl,n))}a(cy,"searchTransactionsByTimestamp");function D1(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(D1,"searchTransactionsByUsername");function L1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=w1.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(L1,"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 gl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new gl(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 gl,i);r.push(o)}}catch(i){C1.warn(i)}return r}catch(s){throw s}}a(ly,"batchSearchTransactions")});var fy=m((loe,Ey)=>{"use strict";var{getSchemaPath:coe}=we(),uoe=ye(),{database:M1}=(de(),te(Ne));Ey.exports={writeTransaction:P1};async function P1(e,t,r){return M1({database:e,table:t}).transaction(r)}a(P1,"writeTransaction")});var py=m((doe,Sy)=>{"use strict";var{getSchemaPath:hy}=we(),my=ye();Sy.exports={flush:v1,resetReadTxn:B1};async function v1(e,t){return(await my.openEnvironment(hy(e,t),t.toString())).flushed}a(v1,"flush");async function B1(e,t){try{(await my.openEnvironment(hy(e,t),t.toString())).resetReadTxn()}catch{}}a(B1,"resetReadTxn")});var Ay=m((foe,gy)=>{"use strict";var{Readable:H1}=require("stream"),{getDatabases:q1}=(de(),te(Ne)),{readSync:F1,openSync:G1,createReadStream:Ty}=require("fs"),{open:x1}=require("lmdb"),Ry=Bu(),k1=qu(),{INTERNAL_DBIS_NAME:V1}=xe();gy.exports=Y1;var Hh=32768,$1=100;async function Y1(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=x1({noSync:!0,maxDbs:k1.MAX_DBS}),E,f=d.openDB(V1,new Ry(!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 Ry(!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++%$1===0&&await new Promise(ct=>setTimeout(ct,20))}await E;let S=Ty(d.path);return S.headers=u(),S.on("close",()=>{h.done(),d.close()}),S}let o=r[Object.keys(r)[0]].primaryStore,c=G1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Hh);F1(c,l,0,Hh);let _=o.useReadTransaction(),d=Ty(null,{fd:c,start:Hh}),E=new H1.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(Y1,"getBackup")});var by=m((moe,Ny)=>{"use strict";var K1=F(),{handleHDBError:W1}=W(),Q1=aA(),z1=Wu(),J1=oh(),X1=BN(),Z1=Ca(),j1=Eh(),eW=cb(),tW=Sb(),rW=La(),sW=bb(),nW=Bb(),iW=Vb(),oW=Yb(),aW=zb(),cW=ry(),uW=gh(),lW=oy(),_W=dy(),dW=fy(),Oy=py(),EW=Ay(),qh=class extends Q1{static{a(this,"LMDBBridge")}async searchByConditions(t){return sW(t)}async getDataByHash(t){return await j1(t)}async searchByHash(t){return await eW(t)}async getDataByValue(t,r){return await tW(t,r)}async searchByValue(t){return await rW(t)}async createSchema(t){return await X1(t)}async dropSchema(t){return await nW(t)}async createTable(t,r){return await iW(t,r)}async dropTable(t){return await uW(t)}async createAttribute(t){return await z1(t)}async createRecords(t){return await J1(t)}async updateRecords(t){return await oW(t)}async upsertRecords(t){try{return await aW(t)}catch(r){throw W1(r,null,null,K1.ERR,r)}}async deleteRecords(t){return await Z1(t)}async dropAttribute(t){return await lW(t)}async deleteAuditLogsBefore(t){return await cW(t)}async readAuditLog(t){return await _W(t)}writeTransaction(t,r,s){return dW.writeTransaction(t,r,s)}flush(t,r){return Oy.flush(t,r)}resetReadTxn(t,r){return Oy.resetReadTxn(t,r)}getBackup(t){return EW(t)}};Ny.exports=qh});var Py={};je(Py,{ResourceBridge:()=>xh});function kh({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=as(e),s=kh(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&&Cu(u),t?yield{key:c,value:u}:yield u}})}function as(e){let t=e.database||e.schema||hW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,fW.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,Al,Gr,Dy,Ly,kr,Fh,Gh,My,fW,hW,mW,SW,yy,xh,vy=pe(()=>{"use strict";Uy=D(by()),Al=D(Ji()),Gr=D(W());de();Dy=D(ma()),Ly=D(ga()),kr=D(g()),Fh=D(Fs()),Gh=D(Fr()),My=D(x());Vn();Uu();({HDB_ERROR_MSGS:fW}=Gr.hdb_errors),hW="data",mW=1e4,SW=10,xh=class extends Uy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),yy=this}async searchByConditions(t){let r=(0,Al.default)(t,"conditions");if(r)throw(0,Gr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=as(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:kh(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}]}rt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await as(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=as(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){as(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Fh.signalSchemaChange(new Gh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Vh(t.schema),Fh.signalSchemaChange(new Gh.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=Cu(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)(SW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%mW===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,Al.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,Al.default)(t,"value");if(s)throw s;let n=as(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:kh(t,n)})}async getDataByValue(t,r){let s=new Map,n=as(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){as({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return as(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=as(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(kh,"getSelect");a(Iy,"getRecords");a(as,"getTable");a(wy,"createDeleteResponse");a(Cy,"groupRecordsInHistory")});var qr=m((Aoe,By)=>{"use strict";var{ResourceBridge:pW}=(vy(),te(Py)),TW=Q();TW.initSync();var Ol;function RW(){return Ol||(Ol=new pW,Ol)}a(RW,"getBridge");By.exports=RW()});var Gy=m((Noe,Fy)=>{"use strict";var Hy=require("lodash"),qa=require("mathjs"),gW=require("jsonata"),qy=x();Fy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Hy.uniqWith(e,Hy.isEqual):e,searchJSON:AW,mad:Fa.bind(null,qa.mad),mean:Fa.bind(null,qa.mean),mode:Fa.bind(null,qa.mode),prod:Fa.bind(null,qa.prod),median:Fa.bind(null,qa.median)};function Fa(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(Fa,"aggregateFunction");function AW(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(qy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),qy.isEmpty(this.__ala__.res[r])){let s=gW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(AW,"searchJSON")});var ky=m((yoe,xy)=>{"use strict";var We=require("moment"),$h="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($h),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($h),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format($h)}});var Ky=m((Ioe,Yy)=>{"use strict";var OW=require("@turf/area"),NW=require("@turf/length"),bW=require("@turf/circle"),yW=require("@turf/difference"),IW=require("@turf/distance"),wW=require("@turf/boolean-contains"),CW=require("@turf/boolean-equal"),UW=require("@turf/boolean-disjoint"),DW=require("@turf/helpers"),Vy=g(),le=x();Yy.exports={geoArea:LW,geoLength:MW,geoCircle:PW,geoDifference:vW,geoDistance:$y,geoNear:BW,geoContains:HW,geoEqual:qW,geoCrosses:FW,geoConvert:GW};var Yh="geo1 is required",Kh="geo2 is required";function LW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),OW.default(e)}a(LW,"geoArea");function MW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),NW.default(e,{units:t||"kilometers"})}a(MW,"geoLength");function PW(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)),bW.default(e,t,{units:r||"kilometers"})}a(PW,"geoCircle");function vW(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)),yW(e,t)}a(vW,"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)),IW.default(e,t,{units:r||"kilometers"})}a($y,"geoDistance");function BW(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(BW,"geoNear");function HW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),wW.default(e,t)}a(HW,"geoContains");function qW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),CW.default(e,t)}a(qW,"geoEqual");function FW(e,t){if(le.isEmpty(e))throw new Error(Yh);if(le.isEmpty(e))throw new Error(Kh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!UW.default(e,t)}a(FW,"geoCrosses");function GW(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 DW[t](e,r)}a(GW,"geoConvert")});var Nl=m((Coe,Wy)=>{var si=Gy(),lr=ky(),cs=Ky();Wy.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=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.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 Xy=m((Uoe,Jy)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var xW=Nl(),Qy=require("clone"),bl=require("recursive-iterator"),se=F(),ne=x(),ji=qr(),kW=g(),{hdb_errors:VW}=W(),{getDatabases:zy}=(de(),te(Ne)),$W="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";xW(pt);var Wh=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 bl(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=Ga.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=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 bl(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 bl(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(kW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&Ga.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(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($W)>-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=Ga.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await ji.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await ji.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await ji.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,S]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,S[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await ji.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(S=>{T[S.key]!==null&&T[S.key]!==void 0&&S.keys.add(T[S.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=Ga.difference(h,[...f.keys].map(S=>S.toString()));for(let S=0,y=T.length;S<y;S++){let O=T[S];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new bl(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=Ga.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await ji.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],S=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(S)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error(VW.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=Wh});var Ar=m((Loe,Zy)=>{"use strict";var YW=iA();Zy.exports={searchByConditions:WW,searchByHash:QW,searchByValue:zW,search:JW};var Qh=qr(),{transformReq:zh}=x(),KW=Xy();async function WW(e){return zh(e),Qh.searchByConditions(e)}a(WW,"searchByConditions");async function QW(e){zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Qh.searchByHash(e))r&&t.push(r);return t}a(QW,"searchByHash");async function zW(e){zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Qh.searchByValue(e))t.push(r);return t}a(zW,"searchByValue");function JW(e,t){try{let r=new YW(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)}}a(JW,"search")});var yl=m((Poe,jy)=>{"use strict";var XW=qr();jy.exports={writeTransaction:ZW};function ZW(e,t,r){return XW.writeTransaction(e,t,r)}a(ZW,"writeTransaction")});var sI=m((Hoe,rI)=>{"use strict";var jW=Ar(),eQ=qs(),eI=F(),tQ=Or(),Boe=yl(),rQ=require("clone"),Xh=require("alasql"),sQ=Nl(),tI=require("util"),nQ=tI.promisify(eQ.getTableSchema),iQ=tI.promisify(jW.search),oQ=g(),Jh=x();sQ(Xh);rI.exports={update:cQ};var aQ="There was a problem performing this update. Please check the logs and try again.";async function cQ({statement:e,hdb_user:t}){let r=await nQ(e.table.databaseid,e.table.tableid),s=uQ(e.columns);Jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=rQ(n),c=Jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Xh.parse(u).statements[0],_=await iQ(l),d=lQ(s,_);return _Q(o,d,t)}a(cQ,"update");function uQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Xh.compile(`SELECT ${r.expression.toString()} AS [${oQ.FUNC_VAL}] FROM ?`)}),t}catch(t){throw eI.error(t),new Error(aQ)}}a(uQ,"createUpdateRecord");function lQ(e,t){return Jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(lQ,"buildUpdateRecords");async function _Q(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await tQ.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(_Q,"updateRecords")});var iI=m((xoe,nI)=>{var dQ=require("alasql"),EQ=Ar(),fQ=F(),hQ=qr(),jh=require("util"),Zh=x(),mQ=g(),SQ=qs(),Foe=yl(),Goe=Or(),pQ="record",TQ="successfully deleted",RQ=jh.callbackify(NQ),gQ=jh.promisify(EQ.search),AQ=jh.promisify(SQ.getTableSchema);nI.exports={convertDelete:RQ};function OQ(e){return`${e.deleted_hashes.length} ${pQ}${e.deleted_hashes.length===1?"":"s"} ${TQ}`}a(OQ,"generateReturnMessage");async function NQ({statement:e,hdb_user:t}){let r=await AQ(e.table.databaseid,e.table.tableid);Zh.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=Zh.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=dQ.parse(o).statements[0],u={operation:mQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await gQ(c);let l=await hQ.deleteRecords(u);return Zh.isEmptyOrZeroLength(l.message)&&(l.message=OQ(l)),delete l.txn_time,l}catch(l){throw fQ.error(l),l.hdb_code?l.message:l}}a(NQ,"convertDelete")});var lI=m((Voe,uI)=>{"use strict";var bQ=Wn(),{hdb_errors:oI}=W(),{getDatabases:aI}=(de(),te(Ne));uI.exports={checkSchemaExists:cI,checkSchemaTableExists:yQ,schema_describe:bQ};async function cI(e){if(!aI()[e])return oI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(cI,"checkSchemaExists");async function yQ(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(yQ,"checkSchemaTableExists")});var xa=m((Yoe,IQ)=>{IQ.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 Ll={};je(Ll,{addAnalyticsListener:()=>sm,recordAction:()=>ii,recordActionBinary:()=>Dl,setAnalyticsEnabled:()=>wQ});function wQ(e){RI=e}function ii(e,t,r,s,n){if(!RI)return;let i=t+"-"+r;s&&(i+="-"+s);let o=Cl.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Cl.set(i,o)),wl||CQ()}function Dl(e,t,r,s,n){ii(e?1:0,t,r,s,n)}function sm(e){AI.push(e)}function CQ(){wl=performance.now(),setTimeout(()=>{let e=performance.now()-wl;wl=0;let t=[],r={time:Date.now(),period:e,threadId:ni.threadId,metrics:t};for(let[n,i]of Cl)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:ni.threadId,...s});for(let n of AI)n(t);Cl=new Map,ni.parentPort?ni.parentPort.postMessage({type:gI,report:r}):NI({report:r})},rm).unref()}async function UQ(e,t=6e4){let r=nm(),s;for(let _ of r.primaryStore.getRange({start:Il+"z",end:Il,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:S,metric:y,count:O,threadId:H,...Y}=f;O||(O=1);let A=y+(h?"-"+h:"");T&&(A+="-"+T);let w=i.get(A);if(w)for(let G in Y){let k=Y[G];if(typeof k=="number"){let X=w.count||1;w[G]=(w[G]*X+k*O)/(w.count=X+O)}}else w=Object.assign({period:t},f),i.set(A,w)}await DQ()}for(let[_,d]of i)d.id=Il+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Il+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-_I,active:l-dI,time:c}),_I=u,dI=l}async function LQ(e,t){let r=nm(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function nm(){return EI||(EI=rt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function PQ(){OI=!0,setInterval(async()=>{await UQ(rm,tm),await LQ(MQ,rm)},tm/2).unref()}function NI(e,t){let r=e.report;r.threadId=t?.threadId||ni.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)(),nm().put(r),OI||PQ(),vQ&&(bI=HQ(r))}async function HQ(e){if(await bI,!pn){let r=(0,ka.dirname)((0,SI.getLogFilePath)());try{pn=await(0,em.open)((0,ka.join)(r,"analytics.log"),"r+")}catch{pn=await(0,em.open)((0,ka.join)(r,"analytics.log"),"w+")}}let t=(await pn.stat()).size;if(t>BQ){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,mI,SI,ka,em,pI,Ul,TI,Cl,tm,RI,wl,rm,gI,AI,Il,_I,dI,DQ,MQ,EI,OI,fI,hI,vQ,bI,pn,BQ,eo=pe(()=>{ni=require("worker_threads"),mI=D(_t());de();SI=D(F()),ka=require("path"),em=require("fs/promises"),pI=D(Ht()),Ul=D(Q()),TI=D(g());(0,Ul.initSync)();Cl=new Map,tm=(0,Ul.get)(TI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,RI=tm>0;a(wQ,"setAnalyticsEnabled");a(ii,"recordAction");a(Dl,"recordActionBinary");wl=0,rm=1e3,gI="analytics-report",AI=[];a(sm,"addAnalyticsListener");a(CQ,"sendAnalytics");Il="sum-";a(UQ,"aggregation");_I=0,dI=0,DQ=a(()=>new Promise(setImmediate),"rest");a(LQ,"cleanup");MQ=36e5;a(nm,"getAnalyticsTable");(0,mI.setChildListenerByType)(gI,NI);a(PQ,"startScheduledTasks");fI=0,hI=new Map,vQ=!1;a(NI,"recordAnalytics");BQ=1e6;a(HQ,"logAnalytics")});var Qe=m((nae,$I)=>{"use strict";var Tt=Q();Tt.initSync();var qQ=require("fs-extra"),FQ=require("semver"),Ka=require("path"),{monotonicFactory:GQ}=require("ulidx"),cm=GQ(),xQ=require("util"),II=require("child_process"),kQ=xQ.promisify(II.exec),VQ=II.spawn,_e=Be(),Te=g(),Ml=x(),Nr=F(),Pl=Hs(),$Q=yl(),Va=Rr(),{Encoder:YQ,decode:um}=require("msgpackr"),wI=new YQ,{isEmpty:oi}=Ml,CI=ar(),UI=12e10,KQ=48*36e11,WQ=5e9,{connect:QQ,StorageType:DI,RetentionPolicy:LI,AckPolicy:vl,DeliverPolicy:Bl,DiscardPolicy:zQ,NatsConnection:eae,JetStreamManager:tae,JetStreamClient:rae,StringCodec:sae,JSONCodec:JQ,createInbox:lm,headers:XQ,ErrorCode:yI}=require("nats"),{PACKAGE_ROOT:ZQ}=g(),jQ=xa(),{recordAction:ez}=(eo(),te(Ll)),MI=JQ(),tz="clustering",rz=jQ.engines[_e.NATS_SERVER_NAME],sz=Ka.join(ZQ,"dependencies"),am=Ka.join(sz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),im,om,$a,to,ro;$I.exports={runCommand:PI,checkNATSServerInstalled:nz,createConnection:_m,getConnection:Hl,getJetStreamManager:Wa,getJetStream:vI,getNATSReferences:Gt,getServerList:oz,createLocalStream:dm,listStreams:BI,deleteLocalStream:az,getServerConfig:Qa,listRemoteStreams:cz,viewStream:uz,viewStreamIterator:lz,publishToStream:_z,createWorkQueueStream:dz,addSourceToWorkStream:qI,request:fz,removeSourceFromWorkStream:GI,reloadNATS:Em,reloadNATSHub:hz,reloadNATSLeaf:mz,extractServerName:FI,requestErrorHandler:Sz,updateWorkStream:pz,createLocalTableStream:kI,createTableStreams:Tz,purgeTableStream:VI,purgeSchemaTableStreams:Rz,getStreamInfo:gz,updateLocalStreams:Oz,closeConnection:iz,getJsmServerName:za,addNatsMsgHeader:HI,updateIngestStreamConsumer:Ez};async function PI(e,t=void 0){let{stdout:r,stderr:s}=await kQ(e,{cwd:t});if(s)throw new Error(s.replace(`
1
+ "use strict";var PB=Object.create;var Yo=Object.defineProperty;var vB=Object.getOwnPropertyDescriptor;var BB=Object.getOwnPropertyNames;var HB=Object.getPrototypeOf,qB=Object.prototype.hasOwnProperty;var a=(e,t)=>Yo(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),et=(e,t)=>{for(var r in t)Yo(e,r,{get:t[r],enumerable:!0})},tR=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of BB(t))!qB.call(e,n)&&n!==r&&Yo(e,n,{get:()=>t[n],enumerable:!(s=vB(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?PB(HB(e)):{},tR(t||!e||!e.__esModule?Yo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>tR(Yo({},"__esModule",{value:!0}),e);var nR=m((bte,sR)=>{var FB=require("fast-glob"),{statSync:dE,existsSync:EE,readFileSync:GB,writeFileSync:xB}=require("fs"),{spawnSync:kB,spawn:VB}=require("child_process"),{isMainThread:$B}=require("worker_threads"),{join:bs,relative:rR}=require("path"),{PACKAGE_ROOT:Sr}=A(),{tmpdir:YB}=require("os");require("source-map-support").install();var KB=["resources","server","dataLayer"],Ko="ts-build",fE,WB=__filename.endsWith("tsBuild.js");if(WB){if($B){let r;try{dE(bs(Sr,Ko)),r=!0}catch{}if(r)for(let s of FB.sync(KB.map(n=>n+"/**/*.ts"),{cwd:Sr})){let n=0,i=0;try{n=dE(bs(Sr,s)).mtimeMs-5e3,i=dE(bs(Sr,Ko,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),fE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),fE=!0;if(fE){let s=kB(process.argv[0],[bs(Sr,"node_modules/.bin/tsc")],{cwd:Sr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=bs(YB(),"harperdb-tsc.pid"),i;if(EE(n))try{process.kill(+GB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=VB(process.argv[0],[bs(Sr,"node_modules/.bin/tsc"),"--watch"],{cwd:Sr,detached:!0,stdio:"ignore"});xB(n,o.pid.toString()),o.unref()}}}}let e=sR.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(Sr)&&!s[0].includes("node_modules")){let i=rR(Sr,s[0]),o;i.startsWith(Ko)?o=bs(Sr,rR(Ko,i)):o=bs(Sr,Ko,i);let c=bs(o,r),u=c+".js";if(EE(u))return u;if(c.includes(".")&&EE(c))return c}return t(r,s,n)}}});var A=m((wte,pR)=>{"use strict";var pr=require("path"),QB=require("fs"),{relative:yte,join:Ite}=pr,{existsSync:zB}=QB;function JB(){let e=__dirname;for(;!zB(pr.join(e,"package.json"));){let t=pr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(JB,"getHDBPackageRoot");var cn=JB(),iR="js",uu=iR,XB="harperdb-config.yaml",ZB="defaultConfig.yaml",jB="hdb",oR=`harperdb.${uu}`,aR=`customFunctionsServer.${uu}`,eH=`restartHdb.${uu}`,mE="HarperDB",cu="Custom Functions",lu="Clustering Hub",_u="Clustering Leaf",tH="Clustering Ingest Service",rH="Clustering Reply Service",sH="foreground.pid",nH="hdb.pid",iH="data",oH={HDB:mE,CLUSTERING_HUB:lu,CLUSTERING_LEAF:_u,CLUSTERING_INGEST_SERVICE:tH,CLUSTERING_REPLY_SERVICE:rH,CUSTOM_FUNCTIONS:cu,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"},aH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},cH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},uH={harperdb:mE,"clustering hub":lu,"clustering leaf":_u,"custom functions":cu,custom_functions:cu,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},lH={CLUSTERING_HUB_PROC_DESCRIPTOR:lu,CLUSTERING_LEAF_PROC_DESCRIPTOR:_u},hE={HDB:pr.join(cn,"server/harperdb"),CUSTOM_FUNCTIONS:pr.join(cn,"server/customFunctions"),CLUSTERING_HUB:pr.join(cn,"server/nats"),CLUSTERING_LEAF:pr.join(cn,"server/nats")},_H={HDB:pr.join(hE.HDB,oR),CUSTOM_FUNCTIONS:pr.join(hE.CUSTOM_FUNCTIONS,aR)},dH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:pr.join(cn,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:pr.join(cn,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:pr.join(cn,"launchServiceScripts/launchUpdateNodes4-0-0.js")},EH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},cR="support@harperdb.io",fH="customer-success@harperdb.io",uR=1,hH=4141,lR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",mH="https://www.harperdb.io/product",SH=`For support, please submit a request at ${lR} or contact ${cR}`,_R=`For license support, please contact ${fH}`,pH="None of the specified records were found.",TH="hash attribute not found",RH=`Your current license only supports ${uR} role. ${_R}`,gH="Your current license only supports 3 connections to a node.",AH="127.0.0.1",OH=1,NH=/^\.$/,bH=/^\.\.$/,yH="U+002E",IH=/\//g,wH="U+002F",CH=/U\+002F/g,UH=/^U\+002E$/,DH=/^U\+002EU\+002E$/,LH="d",MH=999999,PH="*",vH="--max-old-space-size=",BH="system",HH="__hdb_hash",qH=".harperdb",FH=".hdb",GH="keys",xH="hdb_boot_properties.file",kH=".updateConfig.json",VH="SIGTSTP",$H=24,YH=6e4,KH=448,WH="blob",QH="trash",zH="database",JH="schema",XH="transactions",ZH=".count",jH="id",e0="PROCESS_NAME",dR={SETTINGS_PATH_KEY:"settings_path"},ER=require("lodash"),t0={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"},r0={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},s0={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},n0={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"},i0={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},tr="hdb_internal:",o0={CREATE_SCHEMA:tr+"create_schema",CREATE_TABLE:tr+"create_table",CREATE_ATTRIBUTE:tr+"create_attribute",ADD_USER:tr+"add_user",ALTER_USER:tr+"alter_user",DROP_USER:tr+"drop_user",HDB_NODES:tr+"hdb_nodes",HDB_USERS:tr+"hdb_users",HDB_WORKERS:tr+"hdb_workers",CATCHUP:tr+"catchup",SCHEMA_CATCHUP:tr+"schema_catchup",WORKER_ROOM:tr+"cluster_workers"},a0={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"},c0="060493.ks",u0=".license",l0={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"},_0={CSV:".csv",JSON:".json"},d0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},E0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Wo={};Wo[K.INSERT]=K.INSERT;Wo[K.UPDATE]=K.UPDATE;Wo[K.UPSERT]=K.UPSERT;Wo[K.DELETE]=K.DELETE;var ge=Object.create(null);ge[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;ge[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;ge[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;ge[K.READ_LOG]=K.READ_LOG;ge[K.ADD_NODE]=K.ADD_NODE;ge[K.LIST_USERS]=K.LIST_USERS;ge[K.LIST_ROLES]=K.LIST_ROLES;ge[K.USER_INFO]=K.USER_INFO;ge[K.SQL]=K.SQL;ge[K.GET_JOB]=K.GET_JOB;ge[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;ge[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;ge[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;ge[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;ge[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;ge[K.REMOVE_NODE]=K.REMOVE_NODE;ge[K.RESTART]=K.RESTART;ge[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;ge[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;ge[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;ge[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;ge[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;ge[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;ge[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;ge[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;ge[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var f0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},h0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},fR={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},m0=ER.invert(fR),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"},hR={settings_path:dR.SETTINGS_PATH_KEY,hdb_root_key:g.ROOTPATH,hdb_root:g.ROOTPATH,server_port_key:g.OPERATIONSAPI_NETWORK_PORT,server_port:g.OPERATIONSAPI_NETWORK_PORT,cert_key:g.OPERATIONSAPI_TLS_CERTIFICATE,certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,private_key_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,private_key:g.OPERATIONSAPI_TLS_PRIVATEKEY,http_secure_enabled_key:g.OPERATIONSAPI_NETWORK_HTTPS,https_on:g.OPERATIONSAPI_NETWORK_HTTPS,cors_enabled_key:g.OPERATIONSAPI_NETWORK_CORS,cors_on:g.OPERATIONSAPI_NETWORK_CORS,cors_whitelist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_whitelist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist_key:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,cors_accesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,log_level_key:g.LOGGING_LEVEL,log_level:g.LOGGING_LEVEL,log_path_key:g.LOGGING_ROOT,log_path:g.LOGGING_ROOT,props_env_key:g.OPERATIONSAPI_NODEENV,node_env:g.OPERATIONSAPI_NODEENV,clustering_node_name_key:g.CLUSTERING_NODENAME,node_name:g.CLUSTERING_NODENAME,clustering_enabled_key:g.CLUSTERING_ENABLED,clustering:g.CLUSTERING_ENABLED,max_http_threads:g.HTTP_THREADS,max_hdb_processes:g.HTTP_THREADS,server_timeout_key:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_timeout_ms:g.OPERATIONSAPI_NETWORK_TIMEOUT,server_keep_alive_timeout_key:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_keep_alive_timeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,server_headers_timeout_key:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,server_headers_timeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,disable_transaction_log_key:g.LOGGING_AUDITLOG,disable_transaction_log:g.LOGGING_AUDITLOG,operation_token_timeout_key:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operation_token_timeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,refresh_token_timeout_key:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,refresh_token_timeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,custom_functions_enabled_key:g.CUSTOMFUNCTIONS_ENABLED,custom_functions:g.CUSTOMFUNCTIONS_ENABLED,custom_functions_port_key:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,custom_functions_directory_key:g.CUSTOMFUNCTIONS_ROOT,custom_functions_directory:g.CUSTOMFUNCTIONS_ROOT,max_custom_function_processes:g.HTTP_THREADS,log_to_file:g.LOGGING_FILE,log_to_stdstreams:g.LOGGING_STDSTREAMS,run_in_foreground:g.OPERATIONSAPI_FOREGROUND,local_studio_on:g.LOCALSTUDIO_ENABLED,clustering_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_user:g.CLUSTERING_USER,clustering_enabled:g.CLUSTERING_ENABLED,clustering_hubserver_cluster_name:g.CLUSTERING_HUBSERVER_CLUSTER_NAME,clustering_hubserver_cluster_network_port:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT,clustering_hubserver_cluster_network_routes:g.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,clustering_hubserver_leafnodes_network_port:g.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT,clustering_hubserver_network_port:g.CLUSTERING_HUBSERVER_NETWORK_PORT,clustering_leafserver_network_port:g.CLUSTERING_LEAFSERVER_NETWORK_PORT,clustering_leafserver_network_routes:g.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,clustering_leafserver_streams_maxage:g.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE,clustering_leafserver_streams_maxbytes:g.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES,clustering_leafserver_streams_maxmsgs:g.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS,clustering_leafserver_streams_path:g.CLUSTERING_LEAFSERVER_STREAMS_PATH,clustering_nodename:g.CLUSTERING_NODENAME,clustering_tls_certificate:g.CLUSTERING_TLS_CERTIFICATE,clustering_tls_privatekey:g.CLUSTERING_TLS_PRIVATEKEY,clustering_tls_certificateauthority:g.CLUSTERING_TLS_CERT_AUTH,clustering_tls_insecure:g.CLUSTERING_TLS_INSECURE,clustering_tls_verify:g.CLUSTERING_TLS_VERIFY,clustering_loglevel:g.CLUSTERING_LOGLEVEL,clustering_republishmessages:g.CLUSTERING_REPUBLISHMESSAGES,clustering_databaselevel:g.CLUSTERING_DATABASELEVEL,customfunctions_enabled:g.CUSTOMFUNCTIONS_ENABLED,customfunctions_network_port:g.CUSTOMFUNCTIONS_NETWORK_PORT,customfunctions_tls_certificate:g.CUSTOMFUNCTIONS_TLS_CERTIFICATE,customfunctions_network_cors:g.CUSTOMFUNCTIONS_NETWORK_CORS,customfunctions_network_corsaccesslist:g.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,customfunctions_network_headerstimeout:g.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,customfunctions_network_https:g.CUSTOMFUNCTIONS_NETWORK_HTTPS,customfunctions_network_keepalivetimeout:g.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,customfunctions_tls_privatekey:g.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,customfunctions_tls_certificateauthority:g.CUSTOMFUNCTIONS_TLS_CERT_AUTH,customfunctions_network_timeout:g.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,customfunctions_nodeenv:g.CUSTOMFUNCTIONS_NODEENV,http_threads:g.HTTP_THREADS,http_session_affinity:g.HTTP_SESSION_AFFINITY,customfunctions_processes:g.HTTP_THREADS,customfunctions_root:g.CUSTOMFUNCTIONS_ROOT,localstudio_enabled:g.LOCALSTUDIO_ENABLED,logging_file:g.LOGGING_FILE,logging_level:g.LOGGING_LEVEL,logging_root:g.LOGGING_ROOT,logging_rotation_enabled:g.LOGGING_ROTATION_ENABLED,logging_rotation_compress:g.LOGGING_ROTATION_COMPRESS,logging_rotation_interval:g.LOGGING_ROTATION_INTERVAL,logging_rotation_maxsize:g.LOGGING_ROTATION_MAXSIZE,logging_rotation_path:g.LOGGING_ROTATION_PATH,logging_stdstreams:g.LOGGING_STDSTREAMS,logging_auditlog:g.LOGGING_AUDITLOG,logging_auditretention:g.LOGGING_AUDITRETENTION,logging_auditauthevents_logfailed:g.LOGGING_AUDITAUTHEVENTS_LOGFAILED,logging_auditauthevents_logsuccessful:g.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL,operationsapi_authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,operationsapi_authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT,operationsapi_foreground:g.OPERATIONSAPI_FOREGROUND,operationsapi_tls_certificate:g.OPERATIONSAPI_TLS_CERTIFICATE,operationsapi_network_cors:g.OPERATIONSAPI_NETWORK_CORS,operationsapi_network_corsaccesslist:g.OPERATIONSAPI_NETWORK_CORSACCESSLIST,operationsapi_network_headerstimeout:g.OPERATIONSAPI_NETWORK_HEADERSTIMEOUT,operationsapi_network_https:g.OPERATIONSAPI_NETWORK_HTTPS,operationsapi_network_keepalivetimeout:g.OPERATIONSAPI_NETWORK_KEEPALIVETIMEOUT,operationsapi_network_port:g.OPERATIONSAPI_NETWORK_PORT,operationsapi_tls_privatekey:g.OPERATIONSAPI_TLS_PRIVATEKEY,operationsapi_tls_certificateauthority:g.OPERATIONSAPI_TLS_CERT_AUTH,operationsapi_network_timeout:g.OPERATIONSAPI_NETWORK_TIMEOUT,operationsapi_nodeenv:g.OPERATIONSAPI_NODEENV,operationsapi_root:g.ROOTPATH,schemas:g.SCHEMAS,storage_path:g.STORAGE_PATH,ignorescripts:g.IGNORE_SCRIPTS,mqtt_network_port:g.MQTT_NETWORK_PORT,mqtt_websocket:g.MQTT_WEBSOCKET,mqtt_network_secureport:g.MQTT_NETWORK_SECUREPORT,mqtt_requireauthentication:g.MQTT_REQUIREAUTHENTICATION,analytics_aggregatePeriod:g.ANALYTICS_AGGREGATEPERIOD,authentication_authorizelocal:g.AUTHENTICATION_AUTHORIZELOCAL,authentication_cachettl:g.AUTHENTICATION_CACHETTL,authentication_enablesessions:g.AUTHENTICATION_ENABLESESSIONS,authentication_operationtokentimeout:g.AUTHENTICATION_OPERATIONTOKENTIMEOUT,authentication_refreshtokentimeout:g.AUTHENTICATION_REFRESHTOKENTIMEOUT};for(let e in g){let t=g[e];hR[t.toLowerCase()]=t}var S0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},p0={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"},T0={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"},R0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},g0={VERSION_DEFAULT:"2.2.0"},A0={DEVELOPMENT:8192,DEFAULT:512},O0={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"},N0={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"},b0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},mR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},y0=Symbol("metadata"),I0="__clustering__",w0=Object.values(mR),C0=15984864e5,SR={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},U0=ER.invert(SR),D0={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"},L0=111,M0=`\r
2
+ `,P0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},v0=["*","%"],B0="unauthorized_access",H0="func_val",q0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},F0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},G0={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"},x0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},k0={HTTP:"http"},V0={STOPPED:"stopped",ONLINE:"online"},$0="3.x.x",Y0={SUCCESS:"success",FAILURE:"failure"},K0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};pR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:cR,HDB_SUPPORT_URL:lR,HDB_PRICING_URL:mH,SUPPORT_HELP_MSG:SH,LICENSE_HELP_MSG:_R,HDB_PROC_NAME:oR,HDB_PROC_DESCRIPTOR:mE,CLUSTERING_LEAF_PROC_DESCRIPTOR:_u,CLUSTERING_HUB_PROC_DESCRIPTOR:lu,SYSTEM_SCHEMA_NAME:BH,HASH_FOLDER_NAME:HH,HDB_HOME_DIR_NAME:qH,UPDATE_FILE_NAME:kH,LICENSE_KEY_DIR_NAME:GH,BOOT_PROPS_FILE_NAME:xH,JOB_TYPE_ENUM:p0,JOB_STATUS_ENUM:l0,SYSTEM_TABLE_NAMES:n0,SYSTEM_TABLE_HASH_ATTRIBUTES:i0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:_0,S3_BUCKET_AUTH_KEYS:d0,VALID_SQL_OPS_ENUM:E0,GEO_CONVERSION_ENUM:h0,HDB_SETTINGS_NAMES:fR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:m0,SERVICE_ACTIONS_ENUM:f0,CLUSTER_MESSAGE_TYPE_ENUM:T0,CLUSTER_CONNECTION_DIRECTION_ENUM:R0,CLUSTER_EVENTS_DEFS_ENUM:O0,PERIOD_REGEX:NH,DOUBLE_PERIOD_REGEX:bH,UNICODE_PERIOD:yH,FORWARD_SLASH_REGEX:IH,UNICODE_FORWARD_SLASH:wH,ESCAPED_FORWARD_SLASH_REGEX:CH,ESCAPED_PERIOD_REGEX:UH,ESCAPED_DOUBLE_PERIOD_REGEX:DH,REG_KEY_FILE_NAME:c0,RESTART_TIMEOUT_MS:YH,HDB_FILE_PERMISSIONS:KH,DATABASES_DIR_NAME:zH,LEGACY_DATABASES_DIR_NAME:JH,TRANSACTIONS_DIR_NAME:XH,LIMIT_COUNT_NAME:ZH,ID_ATTRIBUTE_STRING:jH,INSERT_MODULE_ENUM:r0,UPGRADE_JSON_FIELD_NAMES_ENUM:s0,RESTART_CODE:VH,RESTART_CODE_NUM:$H,CLUSTER_OPERATIONS:Wo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:a0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:o0,CLUSTERING_MESSAGE_TYPES:D0,HDB_FILE_SUFFIX:FH,BLOB_FOLDER_NAME:WH,HDB_TRASH_DIR:QH,ORIGINATOR_SET_VALUE:L0,LICENSE_VALUES:g0,RAM_ALLOCATION_ENUM:A0,TIME_STAMP_NAMES_ENUM:mR,TIME_STAMP_NAMES:w0,PERMS_UPDATE_RELEASE_TIMESTAMP:C0,SEARCH_NOT_FOUND_MESSAGE:pH,SEARCH_ATTRIBUTE_NOT_FOUND:TH,LICENSE_ROLE_DENIED_RESPONSE:RH,LICENSE_MAX_CONNS_REACHED:gH,BASIC_LICENSE_MAX_NON_CU_ROLES:uR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:hH,VALUE_SEARCH_COMPARATORS:SR,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:U0,LICENSE_FILE_NAME:u0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:N0,NEW_LINE:M0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:OH,MOMENT_DAYS_TAG:LH,API_TURNOVER_SEC:MH,LOOPBACK:AH,CODE_EXTENSION:uu,WILDCARD_SEARCH_VALUE:PH,NODE_ERROR_CODES:b0,JAVASCRIPT_EXTENSION:iR,PERMS_CRUD_ENUM:P0,UNAUTHORIZED_PERMISSION_NAME:B0,SEARCH_WILDCARDS:v0,FUNC_VAL:H0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:q0,JWT_ENUM:F0,CLUSTERING_FLAG:I0,ITC_EVENT_TYPES:G0,CUSTOM_FUNCTION_PROC_NAME:aR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:cu,SERVICES:x0,THREAD_TYPES:k0,MEM_SETTING_KEY:vH,HDB_RESTART_SCRIPT:eH,PROCESS_DESCRIPTORS:oH,SERVICE_SERVERS:_H,SERVICE_SERVERS_CWD:hE,PROCESS_DESCRIPTORS_VALIDATE:uH,LAUNCH_SERVICE_SCRIPTS:dH,LOG_LEVELS:cH,PROCESS_NAME_ENV_PROP:e0,LOG_NAMES:aH,PM2_PROCESS_STATUSES:V0,CONFIG_PARAM_MAP:hR,CONFIG_PARAMS:g,HDB_CONFIG_FILE:XB,HDB_DEFAULT_CONFIG_FILE:ZB,ROLE_TYPES_ENUM:EH,BOOT_PROP_PARAMS:dR,INSTALL_PROMPTS:t0,HDB_ROOT_DIR_NAME:jB,CLUSTERING_PROCESSES:lH,FOREGROUND_PID_FILE:sH,PACKAGE_ROOT:cn,PRE_4_0_0_VERSION:$0,SCHEMAS_PARAM_CONFIG:S0,METADATA_PROPERTY:y0,AUTH_AUDIT_STATUS:Y0,AUTH_AUDIT_TYPES:K0,HDB_PID_FILE:nH,DEFAULT_DATABASE_NAME:iH};nR()});var SE=m((Ute,gR)=>{"use strict";var TR=require("minimist");gR.exports=W0;function W0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=RR(process.env),s=RR(TR(process.argv))):(r=process.env,s=TR(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(W0,"assignCMDENVVariables");function RR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(RR,"objKeysToLowerCase")});var x=m((Lte,NE)=>{"use strict";var Fn=require("fs-extra"),{workerData:Q0,threadId:z0}=require("worker_threads"),ws=require("path"),NR=require("yaml"),bR=require("properties-reader"),tt=A(),AR=SE(),J0=require("os"),{PACKAGE_ROOT:TE}=A(),{_assignPackageExport:X0}=require("../../index"),zo={};for(let e in console)zo[e]||(zo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},yR={STDOUT:"stdOut",STDERR:"stdErr"},Z0=ws.join(TE,"logs"),j0=ws.join(TE,"config/yaml/",tt.HDB_DEFAULT_CONFIG_FILE),eq=1e4,ys,Is,Lt,du,Eu,Jo,vi,Qo;Qo===void 0&&IR();NE.exports={notify:UR,fatal:DR,error:Xo,warn:OE,info:fu,debug:AE,trace:gE,setLogLevel:aq,log_level:Lt,loggerWithTag:tq,suppressLogging:rq,initLogSettings:IR,setupConsoleLogging:wR,logCustomLevel:iq,closeLogFile:RE,getLogFilePath:()=>Jo,OUTPUTS:yR,AuthAuditLog:lq};X0("logger",NE.exports);function IR(e=!1){try{if(Qo===void 0||e){RE();let t=oq(),r=AR(["ROOTPATH"]);try{Qo=bR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:Eu,to_file:ys,to_stream:Is}=cq(r.ROOTPATH?ws.join(r.ROOTPATH,tt.HDB_CONFIG_FILE):Qo.get("settings_path"))),du=tt.LOG_NAMES.HDB,Jo=ws.join(Eu,du)}}catch(t){if(Qo=void 0,t.code===tt.NODE_ERROR_CODES.ENOENT){let r=AR(Object.keys(tt.CONFIG_PARAM_MAP),!0);for(let o in r){let c=tt.CONFIG_PARAM_MAP[o];c&&c.toLowerCase();let u=r[o];if(c===tt.CONFIG_PARAMS.LOGGING_LEVEL){Lt=u;continue}if(c===tt.CONFIG_PARAMS.LOGGING_STDSTREAMS){Is=u;continue}c===tt.CONFIG_PARAMS.LOGGING_FILE&&(ys=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=uq();ys=ys===void 0?n:ys,ys=OR(ys),Is=Is===void 0?i:Is,Is=OR(Is),Lt=Lt===void 0?s:Lt,Eu=Z0,du=tt.LOG_NAMES.INSTALL,Jo=ws.join(Eu,du);return}throw Xo("Error initializing log settings"),Xo(t),t}wR()}a(IR,"initLogSettings");var pE=!0;function wR(){Pi("error",Xo),Pi("warn",OE),Pi("log",fu),Pi("info",fu),Pi("debug",AE),Pi("trace",gE)}a(wR,"setupConsoleLogging");function Pi(e,t){console[e]=function(...r){if(pE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return zo[e](...r)}}a(Pi,"logConsole");function tq(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(UR),fatal:r(DR),error:r(Xo),warn:r(OE),info:r(fu),debug:r(AE),trace:r(gE)};function r(s){return function(...n){return s(t,...n)}}}a(tq,"loggerWithTag");function rq(e){try{pE=!1,e()}finally{pE=!0}}a(rq,"suppressLogging");var sq=Q0?.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||sq+"/"+z0);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 Zo(e){ys&&CR(e),Is&&process.stdout.write(e)}a(Zo,"logStdOut");function hu(e){ys&&CR(e),Is&&process.stderr.write(e)}a(hu,"logStdErr");function CR(e){nq(),vi?Fn.appendFileSync(vi,e):zo.log(e)}a(CR,"logToFile");function RE(){try{Fn.closeSync(vi)}catch{}vi=null}a(RE,"closeLogFile");function nq(){if(!vi){try{if(!Jo)debugger;vi=Fn.openSync(Jo,"a")}catch(e){zo.error(e)}setTimeout(()=>{RE()},eq).unref()}}a(nq,"openLogFile");function fu(...e){Mt[Lt]<=Mt.info&&Zo(Cs("info",e))}a(fu,"info");function gE(...e){Mt[Lt]<=Mt.trace&&Zo(Cs("trace",e))}a(gE,"trace");function Xo(...e){Mt[Lt]<=Mt.error&&hu(Cs("error",e))}a(Xo,"error");function AE(...e){Mt[Lt]<=Mt.debug&&Zo(Cs("debug",e))}a(AE,"debug");function UR(...e){Mt[Lt]<=Mt.notify&&Zo(Cs("notify",e))}a(UR,"notify");function DR(...e){Mt[Lt]<=Mt.fatal&&hu(Cs("fatal",e))}a(DR,"fatal");function OE(...e){Mt[Lt]<=Mt.warn&&hu(Cs("warn",e))}a(OE,"warn");function iq(e,t,...r){t===yR.STDERR?hu(Cs(e,r)):Zo(Cs(e,r))}a(iq,"logCustomLevel");function oq(){let e;try{e=J0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=ws.join(e,tt.HDB_HOME_DIR_NAME,tt.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=ws.join(TE,"utility/hdb_boot_properties.file")),t}a(oq,"getPropsFilePath");function aq(e){Lt=e}a(aq,"setLogLevel");function OR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(OR,"autoCastBoolean");function cq(e){try{if(e.includes("config/settings.js")){let o=bR(e);return{level:o.get(tt.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:ws.dirname(o.get(tt.HDB_SETTINGS_NAMES.LOG_PATH_KEY)),to_file:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_FILE),to_stream:o.get(tt.HDB_SETTINGS_NAMES.LOG_TO_STDSTREAMS)}}let t=NR.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===tt.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(cq,"getLogConfig");function uq(){try{let e=NR.parseDocument(Fn.readFileSync(j0,"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(uq,"getDefaultConfig");function lq(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(lq,"AuthAuditLog")});var MR=m((Pte,LR)=>{"use strict";var _q=require("util"),dq=require("path"),Eq=require("child_process"),fq=_q.promisify(Eq.execFile),hq=1e3*1e3*10;LR.exports={findPs:mq};async function mq(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await fq("ps",["wwxo",`pid,${r}`],{maxBuffer:hq});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:dq.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(mq,"findPs")});var xe=m((Bte,vR)=>{"use strict";var Sq="__dbis__",pq="__txns__",Tq="__environment_name__",Rq="__dbi_defintion__",gq={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"},Aq=["__createdtime__","__updatedtime__"],Oq="\uFFFF",PR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},Nq=Object.values(PR);vR.exports={AUDIT_STORE_NAME:pq,INTERNAL_DBIS_NAME:Sq,DBI_DEFINITION_NAME:Rq,SEARCH_TYPES:gq,TIMESTAMP_NAMES:Aq,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:Tq,TRANSACTIONS_DBI_NAMES_ENUM:PR,TRANSACTIONS_DBIS:Nq,OVERFLOW_MARKER:Oq}});var rr=m((Hte,$R)=>{"use strict";var BR=A(),HR=xe(),qR={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},FR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),GR={500:FR("There was an error processing your request."),400:"Invalid request"},bq=GR[qR.INTERNAL_SERVER_ERROR],yq={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.`},Iq={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},wq={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"},Cq={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 ${HR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${HR.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"},Uq={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${BR.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 ${BR.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"},xR={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"},Dq={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."},Lq={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`},Mq={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"},Pq={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},vq={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`},kR={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.`},VR={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}`},Bq={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."},Hq={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},qq={...xR,...wq,...yq,...Dq,...Lq,...Mq,...Pq,...vq,...Uq,...kR,...VR,...Bq,...Hq,...Iq};$R.exports={CHECK_LOGS_WRAPPER:FR,HDB_ERROR_MSGS:qq,DEFAULT_ERROR_MSGS:GR,DEFAULT_ERROR_RESP:bq,HTTP_STATUS_CODES:qR,LMDB_ERRORS_ENUM:Cq,AUTHENTICATION_ERROR_MSGS:xR,VALIDATION_ERROR_MSGS:kR,ITC_ERRORS:VR}});var W=m((Fte,WR)=>{"use strict";var Bi=rr(),Fq=x(),Gq=A(),mu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,YR),this.statusCode=s||Bi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Bi.DEFAULT_ERROR_MSGS[s]?Bi.DEFAULT_ERROR_MSGS[s]:Bi.DEFAULT_ERROR_MSGS[Bi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR]),this.message=t.message?t.message:this.http_resp_msg,this.type=t.name,n&&(this.logLevel=n),typeof this.message!="string"&&(this.stack=t.stack),i&&Fq[n](i)}},bE=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}},yE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function YR(e,t,r,s=Gq.LOG_LEVELS.ERROR,n=null,i=!1){if(KR(e))return e;let o=new mu(e,t,r,s,n);return i&&delete o.stack,o}a(YR,"handleHDBError");function KR(e){return e.__proto__.constructor.name===mu.name}a(KR,"isHDBError");WR.exports={isHDBError:KR,handleHDBError:YR,ClientError:bE,ServerError:yE,hdb_errors:Bi}});var zR=m((xte,QR)=>{"use strict";var xq={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))},kq="certificate.pem",Vq="privateKey.pem",$q="ca.pem";QR.exports={CERTIFICATE_VALUES:xq,CERTIFICATE_PEM_NAME:kq,PRIVATEKEY_PEM_NAME:Vq,CA_PEM_NAME:$q}});var Pe=m((kte,JR)=>{"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};JR.exports={validateObject:Yq,validateObjectAsync:Kq,validateBySchema:Wq};function Yq(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(Yq,"validateObject");async function Kq(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(Kq,"validateObjectAsync");function Wq(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(Wq,"validateBySchema")});var wE=m((Yte,rg)=>{"use strict";var eg=require("fs-extra"),ee=require("joi"),Qq=require("os"),{boolean:pe,string:Ds,number:sr,array:IE}=ee.types(),{totalmem:XR}=require("os"),Hi=require("path"),zq=x(),pu=V(),$te=zR(),ZR=A(),Jq=Pe(),jR="log",Xq="components",Zq="Invalid logging.rotation.maxSize unit. Available units are G, M or K",jq="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",eF="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",tF="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",rF="rootPath config parameter is undefined",sF="clustering.enabled config parameter is undefined",Us=sr.min(0).required(),Tu=IE.items({host:Ds.required(),port:Us}).empty(null),Ls;rg.exports={configValidator:nF,routesValidator:lF,route_constraints:Tu};function nF(e){if(Ls=e.rootPath,pu.isEmpty(Ls))throw rF;let t=pe.required(),r=ee.valid("production","development").required(),s=sr.min(0).max(1e3).empty(null).default(uF),n=Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(Su),i=ee.custom(iF).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(Su),u=ee.custom(oF).empty(null).default(Su),l=e.clustering?.enabled;if(pu.isEmpty(l))throw sF;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:Tu}).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:Tu}).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:IE.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(cF).optional().empty(null),maxSize:Ds.custom(aF).optional().empty(null),path:Ds.optional().empty(null).default(Su)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:IE.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(nF,"configValidator");function tg(e){return eg.existsSync(e)?null:`Specified path ${e} does not exist.`}a(tg,"doesPathExist");function iF(e,t){if(e===null)return;let r=tg(e);return r?t.message(r):e}a(iF,"validatePemFile");function oF(e,t){ee.assert(e,Ds.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=tg(e);if(r)return t.message(r)}a(oF,"validatePath");function aF(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(Zq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(eF):e}a(aF,"validateRotationMaxSize");function cF(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(jq);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(tF):e}a(cF,"validateRotationInterval");function uF(e,t){let r=t.state.path.join("."),s=Qq.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||XR();return i=Math.round(Math.min(i,XR())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),zq.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(uF,"setDefaultThreads");function Su(e,t){if(!pu.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(pu.isEmpty(Ls))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Hi.join(Ls,Xq);case"logging.root":return Hi.join(Ls,jR);case"clustering.leafServer.streams.path":return Hi.join(Ls,"clustering","leaf");case"storage.path":let s=Hi.join(Ls,ZR.LEGACY_DATABASES_DIR_NAME);return eg.existsSync(s)?s:Hi.join(Ls,ZR.DATABASES_DIR_NAME);case"logging.rotation.path":return Hi.join(Ls,jR);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(Su,"setDefaultRoot");function lF(e){let t=ee.object({routes:Tu});return Jq.validateBySchema({routes:e},t)}a(lF,"routesValidator")});var Ru={};et(Ru,{server:()=>rt});var sg,rt,Jr=Se(()=>{sg=require("../../index"),rt={};(0,sg._assignPackageExport)("server",rt)});var Rr=m((Qte,Eg)=>{"use strict";var Tr=A(),lt=V(),st=x(),{configValidator:_F,routesValidator:ng}=wE(),vt=require("fs-extra"),dF=require("yaml"),Pr=require("path"),EF=require("is-number"),og=require("properties-reader"),fF=require("lodash"),{handleHDBError:hF}=W(),{HTTP_STATUS_CODES:mF,HDB_ERROR_MSGS:gu}=rr(),Wte=require("minimist"),{server:SF}=(Jr(),re(Ru)),{SCHEMAS_PARAM_CONFIG:jo,CONFIG_PARAMS:un,CONFIG_PARAM_MAP:Ms}=Tr,pF="Unable to get config value because config is uninitialized",TF="Config successfully initialized",RF="Error backing up config file",gF="Empty parameter sent to getConfigValue",ag=Pr.join(Tr.PACKAGE_ROOT,"config","yaml",Tr.HDB_DEFAULT_CONFIG_FILE),AF="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",ig={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"},Au,ft;Eg.exports={createConfigFile:OF,getDefaultConfig:NF,getConfigValue:ug,initConfig:lg,flattenConfig:xn,updateConfigValue:_g,updateConfigObject:yF,getConfiguration:CF,setConfiguration:UF,readConfigFile:DE,getClusteringRoutes:DF,initOldConfig:dg,getConfigFromFile:LF,getConfigFilePath:Gn,addConfig:MF,deleteConfigFromFile:PF};function OF(e){let t=ln(ag);Au=xn(t.toJSON());let r;for(let o in e){let c=Ms[o.toLowerCase()];if(c===un.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=CE(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&cg(t,r),UE(t);let s=t.toJSON();ft=xn(s);let n=t.getIn(["rootPath"]),i=Pr.join(n,Tr.HDB_CONFIG_FILE);vt.createFileSync(i),vt.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(OF,"createConfigFile");function cg(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!lt.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(jo.TABLES))for(let i in s[n][jo.TABLES])for(let o in s[n][jo.TABLES][i]){let c=s[n][jo.TABLES][i][o],u=[un.SCHEMAS,n,jo.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[un.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){st.error("Error parsing schemas CLI/env config arguments",s)}}a(cg,"setSchemasConfig");function NF(e){if(Au===void 0){let r=ln(ag);Au=xn(r.toJSON())}let t=Ms[e.toLowerCase()];if(t!==void 0)return Au[t.toLowerCase()]}a(NF,"getDefaultConfig");function ug(e){if(e==null){st.error(gF);return}if(ft===void 0){st.trace(pF);return}let t=Ms[e.toLowerCase()];if(t!==void 0)return ft[t.toLowerCase()]}a(ug,"getConfigValue");function Gn(e=lt.getPropsFilePath()){let t=lt.getEnvCliRootPath();return t?Pr.join(t,Tr.HDB_CONFIG_FILE):og(e).get(Tr.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Gn,"getConfigFilePath");function lg(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 st.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{dg(r);return}catch(i){if(i.code!==Tr.NODE_ERROR_CODES.ENOENT)throw i}try{s=ln(r)}catch(i){if(i.code===Tr.NODE_ERROR_CODES.ENOENT){st.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 st.error(i),new Error(`Error reading HarperDB config file at ${r}`)}bF(s,r),UE(s);let n=s.toJSON();if(SF.config=n,ft=xn(n),ft.logging_rotation_rotate)for(let i in ig)ft[i]&&st.error(`Config ${ig[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(TF)}}a(lg,"initConfig");function bF(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&&(st.trace("Updating config file with missing config params"),vt.writeFileSync(t,String(e)))}a(bF,"checkForUpdatedConfig");function UE(e){let t=e.toJSON(),r=_F(t);if(r.error)throw gu.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(UE,"validateConfig");function yF(e,t){ft===void 0&&(ft={});let r=Ms[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}ft[r.toLowerCase()]=t}a(yF,"updateConfigObject");function _g(e,t,r=void 0,s=!1,n=!1,i=!1){ft===void 0&&lg();let o=ug(Ms.hdb_root),c=Pr.join(o,Tr.HDB_CONFIG_FILE),u=ln(c),l;if(r===void 0&&e.toLowerCase()===un.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Ms[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=CE(E,t);u.setIn([...f],h)}else for(let E in r){let f=Ms[E.toLowerCase()];if(f===un.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=CE(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&cg(u,l),UE(u);let _=u.getIn(["rootPath"]),d=Pr.join(_,Tr.HDB_CONFIG_FILE);s===!0&&IF(c,_),vt.writeFileSync(d,String(u)),n&&(ft=xn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(_g,"updateConfigValue");function IF(e,t){try{let r=Pr.join(t,"backup",`${Tr.HDB_CONFIG_FILE}.bak`);vt.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(RF),st.error(r)}}a(IF,"backupConfigFile");var wF=["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])&&!wF.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 CE(e,t){if(e===un.CLUSTERING_NODENAME||e===un.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(EF(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(CE,"castConfigValue");function CF(){let e=lt.getPropsFilePath(),t=Gn(e);return ln(t).toJSON()}a(CF,"getConfiguration");async function UF(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return _g(void 0,void 0,n,!0),AF}catch(i){throw typeof i=="string"||i instanceof String?hF(i,i,mF.BAD_REQUEST,void 0,void 0,!0):i}}a(UF,"setConfiguration");function DE(){let e=lt.getPropsFilePath();try{vt.accessSync(e,vt.constants.F_OK|vt.constants.R_OK)}catch(s){if(!lt.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Gn(e);return ln(t).toJSON()}a(DE,"readConfigFile");function ln(e){return dF.parseDocument(vt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(ln,"parseYamlDoc");function DF(){let e=DE(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=lt.isEmptyOrZeroLength(t)?[]:t;let r=ng(t);if(r)throw gu.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=lt.isEmptyOrZeroLength(s)?[]:s;let n=ng(s);if(n)throw gu.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 gu.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(DF,"getClusteringRoutes");function dg(e){let t=og(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===un.LOGGING_ROOT?ft[n]=Pr.dirname(s):ft[n]=s}return ft}a(dg,"initOldConfig");function LF(e){let t=DE();return fF.get(t,e.replaceAll("_","."))}a(LF,"getConfigFromFile");async function MF(e,t){let r=ln(Gn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await vt.writeFile(Gn(),String(r))}a(MF,"addConfig");function PF(e){let t=Gn(lt.getPropsFilePath()),r=ln(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Pr.join(s,Tr.HDB_CONFIG_FILE);vt.writeFileSync(n,String(r))}a(PF,"deleteConfigFromFile")});var Q=m((Jte,mg)=>{"use strict";var LE=require("fs-extra"),vr=require("path"),fg=require("os"),vF=require("properties-reader"),ea=x(),kn=V(),te=A(),Ou=Rr(),BF="Error initializing environment manager",Nu="BOOT_PROPS_FILE_PATH",hg=!1,HF={[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={};mg.exports={BOOT_PROPS_FILE_PATH:Nu,getHdbBasePath:qF,setHdbBasePath:FF,get:GF,initSync:kF,setProperty:Ee,initTestEnvironment:VF};function qF(){return Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(qF,"getHdbBasePath");function FF(e){Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(FF,"setHdbBasePath");function GF(e){let t=Ou.getConfigValue(e);return t===void 0?Ps[e]:t}a(GF,"get");function Ee(e,t){HF[e]&&(Ps[e]=t),Ou.updateConfigObject(e,t)}a(Ee,"setProperty");function xF(){let e;try{e=kn.getPropsFilePath(),LE.accessSync(e,LE.constants.F_OK|LE.constants.R_OK),hg=!0;let t=vF(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[Nu]=e,!0}catch{return ea.trace(`Environment manager found no properties file at ${e}`),!1}}a(xF,"doesPropFileExist");function kF(e=!1){try{(hg||xF()||kn.noBootFile())&&(Ou.initConfig(e),Ps[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Ou.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){ea.error(BF),ea.error(t),console.error(t),process.exit(1)}}a(kF,"initSync");function VF(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[Nu]=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,fg.userInfo()?fg.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 ${Nu}. Please check your boot props and settings files`;ea.fatal(r),ea.error(t)}}a(VF,"initTestEnvironment")});var we=m((Zte,Og)=>{"use strict";var ia=A(),$F=V(),Bt=Q(),oa=require("path"),YF=require("minimist"),Sg=require("fs-extra"),pg=require("lodash");Bt.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:ta,SYSTEM_SCHEMA_NAME:bu}=ia,ra,sa,na;function Tg(){if(ra!==void 0)return ra;if(Bt.getHdbBasePath()!==void 0)return ra=Bt.get(_n.STORAGE_PATH)||oa.join(Bt.getHdbBasePath(),ia.DATABASES_DIR_NAME),ra}a(Tg,"getBaseSchemaPath");function Rg(){if(sa!==void 0)return sa;if(Bt.getHdbBasePath()!==void 0)return sa=Ag(bu),sa}a(Rg,"getSystemSchemaPath");function gg(){if(na!==void 0)return na;if(Bt.getHdbBasePath()!==void 0)return na=Bt.get(ia.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||oa.join(Bt.getHdbBasePath(),ia.TRANSACTIONS_DIR_NAME),na}a(gg,"getTransactionAuditStoreBasePath");function KF(e,t){let r=Bt.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||oa.join(gg(),e.toString())}a(KF,"getTransactionAuditStorePath");function Ag(e,t){e=e.toString(),t=t&&t.toString();let r=Bt.get(ia.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||oa.join(Tg(),e)}a(Ag,"getSchemaPath");function WF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,YF(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!$F.isObject(s))throw o;i=s}for(let o of i){let c=o[bu];if(!c)continue;let u=Bt.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[ta.PATH];if(l)return pg.set(u,[bu,ta.TABLES,t,ta.PATH],l),Bt.setProperty(_n.SCHEMAS,u),l;let _=c?.[ta.PATH];if(_)return pg.set(u,[bu,ta.PATH],_),Bt.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!Sg.pathExistsSync(n))throw new Error(n+" does not exist");let i=oa.join(n,e);return Sg.mkdirsSync(i),Bt.setProperty(_n.STORAGE_PATH,n),i}return Rg()}a(WF,"initSystemSchemaPaths");function QF(){ra=void 0,sa=void 0,na=void 0}a(QF,"resetPaths");Og.exports={getBaseSchemaPath:Tg,getSystemSchemaPath:Rg,getTransactionAuditStorePath:KF,getTransactionAuditStoreBasePath:gg,getSchemaPath:Ag,initSystemSchemaPaths:WF,resetPaths:QF}});var Ht=m((rre,wg)=>{"use strict";var zF=rr().LMDB_ERRORS_ENUM,ere=require("lmdb"),JF=xe(),tre=require("buffer").Buffer,{OVERFLOW_MARKER:Ng,MAX_SEARCH_KEY_LENGTH:yu}=JF,bg=["number","string","symbol","boolean","bigint"];function XF(e){if(e=e?.primaryStore||e,!e)throw new Error(zF.ENV_REQUIRED)}a(XF,"validateEnv");function ZF(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(ZF,"stringifyData");function jF(e){return e instanceof Date?e.valueOf():e}a(jF,"convertKeyValueToWrite");function eG(e){if(e==null)return;if(bg.includes(typeof e))return e.length>yu?[e.slice(0,yu)+Ng]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(bg.includes(typeof n))n.length>yu?t.push(n.slice(0,yu)+Ng):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(eG,"getIndexedValues");var Iu=0,yg=0;function Ig(){yg=Date.now()-performance.now()}a(Ig,"adjustStartTime");Ig();var tG=6e4;setInterval(Ig,tG).unref();function rG(){let e=performance.now()+yg;return e>Iu?(Iu=e,e):(Iu+=488e-6,Iu)}a(rG,"getNextMonotonicTime");wg.exports={validateEnv:XF,stringifyData:ZF,convertKeyValueToWrite:jF,getNextMonotonicTime:rG,getIndexedValues:eG}});var Cg,Xr,ME,aa=Se(()=>{Cg=require("events"),Xr=class extends Cg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new ME;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)}},ME=class{static{a(this,"EventQueueIterator")}queue;push(t){this.queue.send(t)}next(){let t=this.queue.getNextMessage();return t?{value:t}:new Promise(r=>this.queue.resolveNext=r)}return(t){return this.queue.emit("close"),{value:t,done:!0}}throw(t){return this.queue.emit("close",t),{done:!0}}}});function ca(e){return e[ht]||(e[ht]=Object.create(null))}function Lu(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=Ug(_,o);if(d)return l||(l=this[ht]=Object.create(null)),l[c]=d}return _},set(l){ca(this)[c]=l},enumerable:!0,configurable:!0};switch(u.get.isAttribute=!0,o.type){case"String":u.set=function(l){if(typeof l!="string")throw(0,wu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,wu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ca(this)[c]=l};break}s[c]=u,(!(c in r)||Object.getOwnPropertyDescriptor(r,c)?.get?.isAttribute)&&Object.defineProperty(r,c,u)}i("getProperty",function(o){let c=s[o];if(c)return c.get.call(this);let u=this[ht];return u?.[o]!==void 0?u[o]:this[ce]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new wu.ClientError("Can not add a property to a sealed table schema");ca(this)[o]=c}),i("deleteProperty",function(o){ca(this)[o]=void 0}),i("toJSON",function(){let o=this[ht],c;for(let l in o)c||(c=Object.assign({},this[ce])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ce])),Object.assign(c,this)),c||this[ce]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function Ug(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}},Lu(r,t)),new r(e)):new Cu(e);case Array:let s=new Du(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=Ug(o,t?.elements)),s[n]=o}return s}}function Mu(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=Mu(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ua(e){let t;if(e[ce]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=ua(i);o!==i&&t===e&&(t=e.slice(0)),i=o}t[s]=i}return Object.freeze(t)}let r=e[ht];for(let s in r){t||(t=Object.assign({},e[ce]));let n=r[s];n&&typeof n=="object"&&(n=ua(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Uu(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(Uu(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(Uu(n))return!0}else return!0}else return!0}}return!1}var wu,ht,Cu,Vn,Du,Pu=Se(()=>{Zr();wu=C(W()),ht=Symbol("own-data");a(ca,"getChanges");a(Lu,"assignTrackedAccessors");a(Ug,"trackObject");Cu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Lu(Cu,{});a(Mu,"collapseData");a(ua,"deepFreeze");a(Uu,"hasChanges");Vn=Symbol.for("has-array-changes"),Du=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()}};Du.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 PE;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 Dg,Lg,PE,$n=Se(()=>{Dg=C(Ht()),Lg=require("../../index");Zr();a(Ye,"transaction");(0,Lg._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()};PE=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,Dg.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 HE(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(nG[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 vE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=qE(e);if(!p)throw new vE.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:Pg.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 qE(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 vu(e){if(!e)return;let t=new BE,r,s,n,i,o;for(;r=Mg.exec(e);){i=Mg.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=sG[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 vE,_t,es,Pg,Mg,sG,nG,BE,Bu=Se(()=>{vE=C(W()),_t=C(xe()),es=require("ordered-binary"),Pg=require("lmdb"),Mg=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,sG={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(HE,"idsForCondition");nG={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(qE,"filterByType");a(jr,"attributeComparator");a(vu,"parseQuery");BE=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 xE={};et(xE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>vs,RECORD_PROPERTY:()=>ce,Resource:()=>mt,SAVE_UPDATES_PROPERTY:()=>Gg,snake_case:()=>oG});function oG(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function vg(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 GE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function gr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[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[Gg]=!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 Hu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Hu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Ar(e,t){let r=new Fg.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 FE(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 Bg(e){if(typeof e=="string")return t=>FE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=FE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=FE(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 Hg,qg,Fg,Ae,ae,vs,Gg,ce,iG,mt,Hu,GE,Zr=Se(()=>{Hg=require("crypto");aa();qg=require("../../index"),Fg=C(W());Pu();$n();Bu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),vs=Symbol("is-collection"),Gg=Symbol("save-updates"),ce=Symbol("stored-record"),iG={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=gr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=Bg(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=gr(function(t,r,s,n){if(Array.isArray(n)&&t[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):Ar(t,"put")},{hasContent:!0,type:"update"});static delete=gr(function(t,r,s,n){return t.delete?t.delete(r):Ar(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,Hg.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):Ar(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=gr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Ar(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=gr(function(t,r,s,n){return t.connect?t.connect(r):Ar(t,"connect")},{type:"read"});static subscribe=gr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Ar(t,"subscribe")},{type:"read"});static publish=gr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Ar(t,"publish")},{hasContent:!0,type:"create"});static search=gr(function(t,r,s,n){let i=t.search?t.search(s):Ar(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=Bg(o);return i.map(c)}return i},{type:"read"});static query=gr(function(t,r,s,n){return t.search?t.search(n,r):Ar(t,"search")},{hasContent:!0,type:"read"});static copy=gr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Ar(t,"copy")},{type:"create"});static move=gr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Ar(t,"move")},{type:"delete"});post(t){if(this[vs])return this.constructor.create(this[ae],t,this[Ae]);Ar(this,"post")}static isCollection(t){return t?.[vs]}static coerceId(t){return t}static parseQuery(t){return vu(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&&iG[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:vg(t,this)}}return vg(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,qg._assignPackageExport)("Resource",mt);a(oG,"snake_case");Hu=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(vg,"pathToId");GE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(gr,"transactional");a(Ar,"missingMethod");a(FE,"selectFromObject");a(Bg,"transformForSelect")});var $E={};et($E,{loadGQLSchema:()=>cG,start:()=>VE,startOnMainThread:()=>aG});function VE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let T of d.definitions)switch(T.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let U of T.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of T.fields){let b=$(U.type);b.name=U.name.value,R.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let q of P.arguments)q.name.value==="role"&&z.push(q.value.value)}}O.typeName=p,p==="Query"&&(h=O)}for(let[T,p]of E)for(let R of p.properties){let O=E.get(R.type);O&&(R.properties=O.properties)}for(let T of f)T.tableClass=e(T),T.export&&i.set((0,kE.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,kE.dirname)(s)+"/"+T.name,p.tableClass)}}}var kE,aG,cG,xg=Se(()=>{kE=require("path");de();a(VE,"start");aG=VE,cG=VE({ensureTable:nt}).handleFile});async function qu(e){return uG?(la||(la=lG(dG)),(await(await la).import(e)).namespace):import(e)}async function lG(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),la=new Compartment({console,Math,Date,fetch:_G,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Vg.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,kg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),la}function _G(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 dG(){return{Resource:mt,tables:nr}}var kg,Vg,uG,la,YE=Se(()=>{Zr();de();kg=require("fs/promises"),Vg=require("path"),uG=!1;a(qu,"secureImport");a(lG,"getCompartment");a(_G,"secureOnlyFetch");a(dG,"getGlobalVars")});var WE={};et(WE,{handleFile:()=>EG});async function EG(e,t,r,s){let n=new Map,i=(0,$g.pathToFileURL)(r).toString(),o=await qu(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 $g,KE,Yg=Se(()=>{$g=require("url");YE();KE=require("path");a(EG,"handleFile")});var zE={};et(zE,{start:()=>fG});function fG({resources:e}){e.set("login",QE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var QE,Kg=Se(()=>{Zr();a(fG,"start");QE=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 XE=m((Ure,zg)=>{"use strict";var{Readable:hG}=require("stream"),mG=1e4;zg.exports={streamAsJSON(e){return new JE({value:e})}};var JE=class extends hG{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),Wg)}catch(n){yield Wg(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);Qg(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>mG?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 Qg(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 Wg(e){return console.error(e),JSON.stringify(e.toString())}a(Wg,"handleError");function Qg(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Qg,"when")});var cA=m((Mre,aA)=>{"use strict";var ZE=require("recursive-iterator"),SG=require("alasql"),jE=require("clone"),Jg=V(),{handleHDBError:Xg,hdb_errors:pG}=W(),{HDB_ERROR_MSGS:Zg,HTTP_STATUS_CODES:jg}=pG,{getDatabases:TG}=(de(),re(Ne)),RG=["DISTINCT_ARRAY"],eA=Symbol("validateTables"),ef=Symbol("validateTable"),Lre=Symbol("getAllColumns"),tA=Symbol("validateAllColumns"),Fu=Symbol("findColumn"),rA=Symbol("validateOrderBy"),_a=Symbol("validateSegment"),tf=Symbol("validateColumn"),sA=Symbol("setColumnsForTable"),nA=Symbol("checkColumnsForAsterisk"),iA=Symbol("validateGroupBy"),oA=Symbol("hasColumns"),rf=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[eA](),this[nA](),this[tA]()}[eA](){if(this[oA]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[ef](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[ef](t.table)})}}[oA](){let t=!1,r=new ZE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[ef](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=TG();if(!r[t.databaseid])throw Xg(new Error,Zg.SCHEMA_NOT_FOUND(t.databaseid),jg.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw Xg(new Error,Zg.TABLE_NOT_FOUND(t.databaseid,t.tableid),jg.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=jE(n);i.table=jE(t),this.attributes.push(i)})}[Fu](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)}[nA](){let t=new ZE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[sA](r.tableid)}[sA](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new SG.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[tA](){this[_a](this.statement.columns,!1),this[_a](this.statement.joins,!1),this[_a](this.statement.where,!1),this[iA](this.statement.group,!1),this[_a](this.statement.order,!0)}[_a](t,r){if(!t)return;let s=new ZE(t),n=[];for(let{node:i,path:o}of s)!Jg.isEmpty(i)&&!Jg.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[rA](i):n.push(this[tf](i)));return n}[iA](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&RG.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=jE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Fu](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[Fu](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`}[rA](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[tf](t)}[tf](t){let r=this[Fu](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]}};aA.exports=rf});var lA=m((vre,uA)=>{"use strict";var sf=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")}};uA.exports=sf});var dA=m((Hre,_A)=>{"use strict";var nf=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};_A.exports=nf});var Gu=m((Fre,EA)=>{"use strict";var af=Q(),cf=A();af.initSync();var gG=af.get(cf.CONFIG_PARAMS.STORAGE_COMPRESSION),AG=af.get(cf.CONFIG_PARAMS.STORAGE_CACHING)!==!1,OG=cf.UPDATES_PROPERTY,of=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=gG&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=AG&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===OG)}};EA.exports=of});var ku=m((xre,hA)=>{"use strict";var qi=Q(),da=A();qi.initSync();var NG=qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||qi.get(da.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",fA=qi.get(da.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),bG=qi.get(da.CONFIG_PARAMS.STORAGE_NOREADAHEAD),xu=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=NG,this.noFSAccess=!0,fA!==void 0&&(this.overlappingSync=fA),this.noReadAhead=bG}};hA.exports=xu;xu.MAX_DBS=1e4});var ye=m((Vre,bA)=>{"use strict";var lf=require("lmdb"),Br=require("fs-extra"),ir=require("path"),Vu=Ht(),pA=x(),qt=rr().LMDB_ERRORS_ENUM,$u=dA(),_f=Gu(),TA=ku(),dn=xe(),mA=A(),{table:yG,resetDatabases:IG}=(de(),re(Ne)),SA=Q(),Hr=dn.INTERNAL_DBIS_NAME,RA=dn.DBI_DEFINITION_NAME,wG="data.mdb",CG="lock.mdb",Ea=".mdb",UG="-lock",uf=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Or(t,r),this.key_type=this.dbi[dn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[dn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new lf.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Yu(e,t){if(e===void 0)throw new Error(qt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(qt.ENV_NAME_REQUIRED)}a(Yu,"pathEnvNameValidation");async function df(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(qt.INVALID_BASE_PATH):s}try{let s=ir.join(e,t+Ea);return await Br.access(s,Br.constants.R_OK|Br.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Br.access(ir.join(e,t,wG),Br.constants.R_OK|Br.constants.F_OK),ir.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(qt.INVALID_ENVIRONMENT)}else throw new Error(qt.INVALID_ENVIRONMENT);throw s}}a(df,"validateEnvironmentPath");function Ku(e,t){if(Vu.validateEnv(e),t===void 0)throw new Error(qt.DBI_NAME_REQUIRED)}a(Ku,"validateEnvDBIName");async function DG(e,t,r=!1,s=!1){Yu(e,t);let n=ir.basename(e);t=t.toString();let i=SA.get(mA.CONFIG_PARAMS.SCHEMAS);i||SA.setProperty(mA.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await df(e,t,s),gA(e,t,r)}catch(o){if(o.message===qt.INVALID_ENVIRONMENT){let c=ir.join(e,t);await Br.mkdirp(s?c:e);let u=new TA(s?c:c+Ea,!1),l=lf.open(u);l.dbis=Object.create(null);let _=new _f(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=Ef(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(DG,"createEnvironment");async function LG(e,t,r,s=!0){Yu(e,t),t=t.toString();let n=ir.join(e,t);return yG({table:t,database:ir.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(LG,"copyEnvironment");async function gA(e,t,r=!1){Yu(e,t),t=t.toString();let s=Ef(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 df(e,t),i=ir.join(e,t+Ea),o=n!=i,c=new TA(n,o),u=lf.open(c);u.dbis=Object.create(null);let l=OA(u);for(let _=0;_<l.length;_++)Or(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(gA,"openEnvironment");async function MG(e,t,r=!1){Yu(e,t),t=t.toString();let s=ir.join(e,t+Ea),n=await df(e,t);if(global.lmdb_map!==void 0){let i=Ef(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await AA(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+UG:ir.join(ir.dirname(n),CG))}a(MG,"deleteEnvironment");async function AA(e){Vu.validateEnv(e);let t=e[dn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(AA,"closeEnvironment");function Ef(e,t,r=!1){let n=`${ir.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(Ef,"getCachedEnvironmentName");function PG(e){Vu.validateEnv(e);let t=Object.create(null),r=Or(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new $u,n)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(PG,"listDBIDefinitions");function OA(e){Vu.validateEnv(e);let t=[],r=Or(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(OA,"listDBIs");function vG(e,t){let s=Or(e,Hr).getEntry(t),n=new $u;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{pA.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(vG,"getDBIDefinition");function NA(e,t,r,s=!r){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Or(e,t)}catch(n){if(n.message===qt.DBI_DOES_NOT_EXIST){let i=new _f(r,s===!0),o=e.openDB(t,i),c=new $u(r===!0,s);return o[RA]=c,Or(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(NA,"createDBI");function Or(e,t){if(Ku(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=vG(e,t):r=new $u,r===void 0)throw new Error(qt.DBI_DOES_NOT_EXIST);let s;try{let n=new _f(r.dup_sort,r.useVersions);if(s=e.openDB(t,n),s.db===void 0)throw new Error("MDB_NOTFOUND")}catch(n){throw n.message.includes("MDB_NOTFOUND")===!0?new Error(qt.DBI_DOES_NOT_EXIST):n}return s[RA]=r,e.dbis[t]=s,s}a(Or,"openDBI");function BG(e,t){Ku(e,t),t=t.toString();let r=Or(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(BG,"statDBI");async function HG(e,t){try{let r=ir.join(e,t+Ea);return(await Br.stat(r)).size}catch{throw new Error(qt.INVALID_ENVIRONMENT)}}a(HG,"environmentDataSize");function qG(e,t){if(Ku(e,t),t=t.toString(),t===Hr)throw new Error(qt.CANNOT_DROP_INTERNAL_DBIS_NAME);Or(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Or(e,Hr).removeSync(t)}a(qG,"dropDBI");function FG(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Or(e,i)}catch(o){if(o.message===qt.DBI_DOES_NOT_EXIST)NA(e,i,i!==t,i===t),s=!0;else throw o}}s&&IG()}a(FG,"initializeDBIs");bA.exports={openDBI:Or,openEnvironment:gA,createEnvironment:DG,listDBIs:OA,listDBIDefinitions:PG,createDBI:NA,dropDBI:qG,statDBI:BG,deleteEnvironment:MG,initializeDBIs:FG,TransactionCursor:uf,environmentDataSize:HG,copyEnvironment:LG,closeEnvironment:AA}});var IA=m((Yre,yA)=>{"use strict";var ff=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};yA.exports=ff});var CA=m((Wre,wA)=>{"use strict";var hf=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}};wA.exports=hf});var DA=m((zre,UA)=>{"use strict";var mf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};UA.exports=mf});var Fi=m((ese,PA)=>{"use strict";var GG=ye(),xG=IA(),kG=CA(),VG=DA(),ts=Ht(),fa=rr().LMDB_ERRORS_ENUM,$G=xe(),Bs=A(),YG=V(),KG=require("uuid"),Xre=require("lmdb"),{handleHDBError:WG,hdb_errors:QG}=W(),{OVERFLOW_MARKER:Zre,MAX_SEARCH_KEY_LENGTH:jre}=$G,LA=Q();LA.initSync();var Wu=LA.get(Bs.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Sf=Bs.TIME_STAMP_NAMES_ENUM.CREATED_TIME,Yn=Bs.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function zG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new xG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];MA(l,!0,n);let _=JG(e,t,r,l),d=l[t];o.push(_),c.push(d)}return Tf(o,c,s,i,n)}a(zG,"insertRecords");function JG(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){Wu&&l.prefetch(u.map(_=>({key:_,value:n})),Qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Wu&&e.dbis[t].prefetch([n],Qu),e.dbis[t].put(n,s,s[Yn])})}a(JG,"insertRecord");function XG(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(XG,"removeSkippedRecords");function MA(e,t,r){let s=r>0;(s||!Number.isInteger(e[Yn]))&&(e[Yn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[Sf]))&&(e[Sf]=r||ts.getNextMonotonicTime()):delete e[Sf]}a(MA,"setTimestamps");function pf(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),GG.initializeDBIs(e,t,r)}a(pf,"initializeTransaction");async function ZG(e,t,r,s,n=ts.getNextMonotonicTime()){gf(e,t,r,s),pf(e,t,r);let i=new kG,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=Rf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return Tf(c,u,s,i,n,o)}a(ZG,"updateRecords");async function jG(e,t,r,s,n=ts.getNextMonotonicTime()){try{gf(e,t,r,s)}catch(u){throw WG(u,u.message,QG.HTTP_STATUS_CODES.BAD_REQUEST)}pf(e,t,r);let i=new VG,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;YG.isEmpty(l[t])?(_=KG.v4(),l[t]=_):_=l[t];let d=Rf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return Tf(o,c,s,i,n)}a(jG,"upsertRecords");async function Tf(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(),XG(r,i),s}a(Tf,"finalizeWrite");function Rf(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(MA(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){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);for(let k=0,$=O.length;k<$;k++)p.remove(O[k],s)}if(O=ts.getIndexedValues(T),O){Wu&&p.prefetch(O.map(k=>({key:k,value:s})),Qu);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:Rf(e,t,r,s,n,i,o))}a(Rf,"updateUpsertRecord");function ex(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(fa.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(fa.WRITE_ATTRIBUTES_REQUIRED):new Error(fa.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(ex,"validateBasic");function gf(e,t,r,s){if(ex(e,t,r),!Array.isArray(s))throw s===void 0?new Error(fa.RECORDS_REQUIRED):new Error(fa.RECORDS_MUST_BE_ARRAY)}a(gf,"validateWrite");function Qu(){}a(Qu,"noop");PA.exports={insertRecords:zG,updateRecords:ZG,upsertRecords:jG}});var Kn=m((rse,tx)=>{tx.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((sse,HA)=>{"use strict";var BA=V(),vA=A(),Gi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Hs=require("joi"),En={schema_format:{pattern:Gi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},rx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required(),sx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()),nx=Hs.alternatives(Hs.string().min(1).max(En.schema_length.maximum).pattern(Gi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),Hs.number()).required();function ix(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>En.schema_length.maximum?`'${e}' maximum of 250 characters`:Gi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(ix,"checkValidTable");function ox(e,t){return BA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(ox,"validateSchemaExists");function ax(e,t){let r=t.state.ancestors[0].schema;return BA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(ax,"validateTableExists");function cx(e,t){return e.toLowerCase()===vA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${vA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(cx,"validateSchemaName");HA.exports={common_validators:En,schema_regex:Gi,hdb_schema_table:rx,validateSchemaExists:ox,validateTableExists:ax,validateSchemaName:cx,checkValidTable:ix,hdb_database:sx,hdb_table:nx}});var zu=m((ise,qA)=>{var{common_validators:ss}=rs(),ma=Pe(),ha="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 Sa(e){for(let t in e)e[t]=e[t]===null||e[t]===void 0||typeof e[t]=="object"?e[t]:e[t].toString();return e}a(Sa,"makeAttributesStrings");function ux(e){return e=Sa(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(ux,"schema_object");function lx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(lx,"table_object");function _x(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,ma.validateObject(e,Ke)}a(_x,"create_table_object");function dx(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence={message:ha},Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(dx,"attribute_object");function Ex(e){return e=Sa(e),Ke.table.presence={message:ha},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,ma.validateObject(e,Ke)}a(Ex,"describe_table");function fx(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(fx,"validateTableResidence");qA.exports={schema_object:ux,create_table_object:_x,table_object:lx,attribute_object:dx,describe_table:Ex,validateTableResidence:fx}});var GA=m((ase,FA)=>{"use strict";var hx=require("uuid"),Af=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||hx.v4(),this.schema_table=`${this.schema}.${this.table}`}};FA.exports=Af});var Ju=m((use,xA)=>{"use strict";var mx=GA(),Of=class extends mx{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}};xA.exports=Of});var VA=m((_se,kA)=>{"use strict";kA.exports=px;var Sx="inserted";function px(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===Sx?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(px,"returnObject")});var Xu=m((Ese,QA)=>{"use strict";var Tx=A(),Nf=ye(),Rx=Fi(),{getSystemSchemaPath:gx,getSchemaPath:Ax}=we(),Ox=Kn(),Nx=zu(),bx=Ju(),yx=VA(),{handleHDBError:$A,hdb_errors:KA}=W(),YA=V(),{HTTP_STATUS_CODES:Ix}=KA,bf=Ox.hdb_attribute,WA=[];for(let e=0;e<bf.attributes.length;e++)WA.push(bf.attributes[e].attribute);var wx="inserted";QA.exports=Cx;async function Cx(e){let t=Nx.attribute_object(e);if(t)throw $A(new Error,t.message,KA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&YA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw $A(new Error,r,Ix.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=YA.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 bx(e.schema,e.table,e.attribute,e.id);try{let i=await Nf.openEnvironment(Ax(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}`);Nf.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Nf.openEnvironment(gx(),Tx.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await Rx.insertRecords(o,bf.hash_attribute,WA,[n]);return yx(wx,c,{records:[n]},u)}catch(i){throw i}}a(Cx,"lmdbCreateAttribute")});var If=m((hse,JA)=>{var{hdb_table:Ux,hdb_database:zA}=rs(),Dx=Pe(),yf=require("joi"),Lx={undefined:"undefined",null:"null"},Mx=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||Lx[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"),Px=yf.object({database:zA,schema:zA,table:Ux,records:yf.array().items(yf.object().custom(Mx)).required()});JA.exports=function(e){return Dx.validateBySchema(e,Px)}});var pa=m((pse,ZA)=>{"use strict";var qs=V(),XA=x(),Sse=If(),{getDatabases:vx}=(de(),re(Ne)),{ClientError:Wn}=W();ZA.exports=Bx;function Bx(e){if(qs.isEmpty(e))throw new Wn("invalid update parameters defined.");if(qs.isEmptyOrZeroLength(e.schema))throw new Wn("invalid schema specified.");if(qs.isEmptyOrZeroLength(e.table))throw new Wn("invalid table specified.");if(!Array.isArray(e.records))throw new Wn("records must be an array");let t=vx()[e.schema]?.[e.table];if(qs.isEmpty(t))throw new Wn(`could not retrieve schema:${e.schema} and table ${e.table}`);let r=t.primaryKey,s=new Set,n={},i=!1;return e.operation==="update"&&(i=!0),e.records.forEach(o=>{if(i&&qs.isEmptyOrZeroLength(o[r]))throw XA.error("a valid hash attribute must be provided with update record:",o),new Wn("a valid hash attribute must be provided with update record, check log for more info");if(!qs.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw XA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Wn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!qs.isEmpty(o[r])&&o[r]!==""&&s.has(qs.autoCast(o[r]))&&(o.skip=!0),s.add(qs.autoCast(o[r]));for(let c in o)n[c]=1}),n[r]=1,{schema_table:t,hashes:Array.from(s),attributes:Object.keys(n)}}a(Bx,"insertUpdateValidate")});var Ta=m((Rse,jA)=>{"use strict";var Hx=A().OPERATIONS_ENUM,wf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=Hx.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};jA.exports=wf});var Oa=m((Ose,eO)=>{"use strict";var Ase=Ta(),Zu=A(),Uf=V(),Cf=x(),qx=require("uuid"),{handleHDBError:Ra,hdb_errors:Fx}=W(),{HDB_ERROR_MSGS:ga,HTTP_STATUS_CODES:Aa}=Fx;eO.exports=Gx;function Gx(e,t,r){for(let n=0;n<t.length;n++)xx(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];kx(i,r,e.operation)}}a(Gx,"processRows");function xx(e){if(Buffer.byteLength(String(e))>Zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Ra(new Error,ga.ATTR_NAME_LENGTH_ERR(e),Aa.BAD_REQUEST,void 0,void 0,!0);if(Uf.isEmptyOrZeroLength(e)||Uf.isEmpty(e.trim()))throw Ra(new Error,ga.ATTR_NAME_NULLISH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(xx,"validateAttribute");function kx(e,t,r){if(!e.hasOwnProperty(t)||Uf.isEmptyOrZeroLength(e[t])){if(r===Zu.OPERATIONS_ENUM.INSERT||r===Zu.OPERATIONS_ENUM.UPSERT){e[t]=qx.v4();return}throw Cf.error("Update transaction aborted due to record with no hash value:",e),Ra(new Error,ga.RECORD_MISSING_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Zu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Cf.error(e),Ra(new Error,ga.HASH_VAL_LENGTH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw Cf.error(e),Ra(new Error,ga.INVALID_FORWARD_SLASH_IN_HASH_ERR,Aa.BAD_REQUEST,void 0,void 0,!0)}a(kx,"validateHash")});var rO=m((bse,tO)=>{"use strict";var Df=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};tO.exports=Df});var iO=m((Ise,nO)=>{"use strict";var Lf=ye(),Vx=x(),sO=rr().LMDB_ERRORS_ENUM;nO.exports=$x;async function $x(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 Lf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==sO.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await Lf.closeEnvironment(global.lmdb_map[s]),await Lf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==sO.ENV_REQUIRED)throw i}break;case"drop_attribute":r=global.lmdb_map[`${e.schema}.${e.table}`],r!==void 0&&typeof r.dbis=="object"&&r.dbis[`${e.attribute}`]!==void 0&&delete r.dbis[`${e.attribute}`];break;default:break}}}catch(t){Vx.error(t)}}a($x,"cleanLMDBMap")});var Fs=m((Cse,uO)=>{"use strict";var Na=require("crypto"),Yx=Q(),{CONFIG_PARAMS:Kx}=A(),aO="aes-256-cbc",Wx=32,Qx=16,Mf=64,cO=32,zx=Mf+cO,oO=new Map;uO.exports={encrypt:Jx,decrypt:Xx,createNatsTableStreamName:Zx};function Jx(e){let t=Na.randomBytes(Wx),r=Na.randomBytes(Qx),s=Na.createCipheriv(aO,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(Jx,"encrypt");function Xx(e){let t=e.substr(0,Mf),r=e.substr(Mf,cO),s=e.substr(zx,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Na.createDecipheriv(aO,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(Xx,"decrypt");function Zx(e,t){let r=Yx.get(Kx.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=oO.get(r);return s||(s=Na.createHash("md5").update(r).digest("hex"),oO.set(r,s)),s}a(Zx,"createNatsTableStreamName")});var Qn=m((Lse,_O)=>{"use strict";var Dse=Nr(),ju=x(),lO=zu(),jx=Fs(),el=V(),{handleHDBError:tl,hdb_errors:ek}=W(),{HDB_ERROR_MSGS:rl,HTTP_STATUS_CODES:Pf}=ek,tk=Q();tk.initSync();var{getDatabases:vf}=(de(),re(Ne));_O.exports={describeAll:rk,describeTable:sl,describeSchema:sk};async function rk(e){try{let t=el.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=vf(),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 sl({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 sl({schema:l,table:d},f)}E&&c.push(E)}catch(E){ju.error(E)}}let u={};for(let l in c)t||s?(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]):o[c[l].schema]&&(u[c[l].schema]==null&&(u[c[l].schema]={}),u[c[l].schema][c[l].name]=c[l],i[c[l].schema]&&delete i[c[l].schema]);for(let l in i)t||s?u[l]={}:o[l]&&(u[l]={});return u}catch(t){return ju.error("Got an error in describeAll"),ju.error(t),tl(new Error,rl.DESCRIBE_ALL_ERR)}}a(rk,"describeAll");async function sl(e,t){el.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=lO.describe_table(e);if(i)throw i;let c=vf()[r];if(!c)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let u=c[s];if(!u)throw tl(new Error,rl.TABLE_NOT_FOUND(e.schema,e.table),Pf.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=jx.createNatsTableStreamName(_.schema,_.name);try{_.record_count=u.getRecordCount();let d=u.auditStore;if(d)for(let E of d.getKeys({reverse:!0,limit:1}))_.last_updated_record=E[0];if(!_.last_updated_record&&u.indices.__updatedtime__)for(let E of u.indices.__updatedtime__.getKeys({reverse:!0,limit:1}))_.last_updated_record=E}catch(d){ju.warn(`unable to stat table dbi due to ${d}`)}return _}a(sl,"descTable");async function sk(e){el.transformReq(e);let t=lO.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=vf()[s];if(!i)throw tl(new Error,rl.SCHEMA_NOT_FOUND(e.schema),Pf.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),el.isEmpty(u)||u.describe){let l=await sl({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(sk,"describeSchema")});var Gs=m((Bse,mO)=>{var nk=Kn(),{callbackify:EO,promisify:ik}=require("util"),{getDatabases:fO}=(de(),re(Ne));mO.exports={setSchemaDataToGlobal:dO,getTableSchema:ok,getSystemSchema:ak,setSchemaDataToGlobalAsync:ik(dO)};var hO=Qn(),Pse=EO(hO.describeAll),vse=EO(hO.describeTable);function dO(e){global.hdb_schema=fO(),e&&e()}a(dO,"setSchemaDataToGlobal");function ok(e,t,r){let s=fO()[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(ok,"getTableSchema");function ak(){return nk}a(ak,"getSystemSchema")});var br=m((qse,RO)=>{"use strict";var il=If(),St=V(),ck=require("util"),ol=qr(),uk=Gs(),SO=x(),{handleHDBError:zn,hdb_errors:lk}=W(),{HTTP_STATUS_CODES:Jn}=lk,_k=ck.promisify(uk.getTableSchema),dk="updated",pO="inserted",TO="upserted";RO.exports={insert:fk,update:hk,upsert:mk,validation:Ek,flush:Sk};async function Ek(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 _k(e.schema,e.table),r=il(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 SO.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 SO.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(Ek,"validation");async function fk(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=il(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 ol.createRecords(e);return nl(pO,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(fk,"insertData");async function hk(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=il(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 ol.updateRecords(e);return St.isEmpty(s.existing_rows)?nl(dk,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):nl(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(hk,"updateData");async function mk(e){if(e.operation!=="upsert")throw zn(new Error,"invalid operation, must be upsert",Jn.INTERNAL_SERVER_ERROR);let t=il(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 ol.upsertRecords(e);return nl(TO,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(mk,"upsertData");function nl(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===pO?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===TO?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(nl,"returnObject");function Sk(e){return St.transformReq(e),ol.flush(e.schema,e.table)}a(Sk,"flush")});var Hf=m((Gse,OO)=>{var pk=Pe(),Bf=require("joi"),{hdb_table:Tk,hdb_database:gO}=rs(),AO={schema:gO,database:gO,table:Tk},Rk={date:Bf.date().iso().required()},gk={timestamp:Bf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};OO.exports=function(e,t){let r=t==="timestamp"?{...AO,...gk}:{...AO,...Rk},s=Bf.object(r);return pk.validateBySchema(e,s)}});var yO=m((xse,bO)=>{var Ak=Pe(),qf=require("joi"),{hdb_table:Ok,hdb_database:NO}=rs(),Nk=qf.object({schema:NO,database:NO,table:Ok,hash_values:qf.array().required(),ids:qf.array()});bO.exports=function(e){return Ak.validateBySchema(e,Nk)}});var wO=m((kse,IO)=>{"use strict";var Ff=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}},Gf=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}},xf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};IO.exports={InsertObject:Ff,NoSQLSeachObject:Gf,DeleteResponseObject:xf}});var jn=m(($se,MO)=>{"use strict";var UO=Hf(),bk=yO(),Xn=V(),CO=require("moment"),DO=x(),{promisify:yk,callbackify:Ik}=require("util"),Zn=A(),wk=Gs(),kf=yk(wk.getTableSchema),Vf=qr(),{DeleteResponseObject:Ck}=wO(),{handleHDBError:fn,hdb_errors:Uk}=W(),{HDB_ERROR_MSGS:al,HTTP_STATUS_CODES:hn}=Uk,Dk="records successfully deleted",Lk=Ik(LO);MO.exports={delete:Lk,deleteRecord:LO,deleteFilesBefore:Mk,deleteAuditLogsBefore:Pk};async function Mk(e){let t=UO(e,"date");if(t)throw fn(t,t.message,hn.BAD_REQUEST,void 0,void 0,!0);if(Xn.transformReq(e),!CO(e.date,CO.ISO_8601).isValid())throw fn(new Error,al.INVALID_DATE,hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.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 Vf.deleteRecordsBefore(e);if(await kf(e.schema,e.table),DO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Mk,"deleteFilesBefore");async function Pk(e){let t=UO(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,al.INVALID_VALUE("Timestamp"),hn.BAD_REQUEST,Zn.LOG_LEVELS.ERROR,al.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 Vf.deleteAuditLogsBefore(e);return await kf(e.schema,e.table),DO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Pk,"deleteAuditLogsBefore");async function LO(e){e.ids&&(e.hash_values=e.ids);let t=bk(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 kf(e.schema,e.table);let s=await Vf.deleteRecords(e);return Xn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Dk}`),s}catch(s){if(s.message===Zn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ck;return n.message=Zn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(LO,"deleteRecord")});var cl=m((Kse,BO)=>{var vk=require("crypto"),PO=9;function Bk(e){let t=qk(PO),r=vO(e+t);return t+r}a(Bk,"createHash");function Hk(e,t){let r=e.substr(0,PO),s=r+vO(t+r);return e===s}a(Hk,"validateHash");function qk(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(qk,"generateSalt");function vO(e){return vk.createHash("md5").update(e).digest("hex")}a(vO,"md5");BO.exports={hash:Bk,validate:Hk}});var qO=m((Qse,HO)=>{var $f=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 Fk(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,$f.validateObject(e,It)}a(Fk,"addUserValidation");function Gk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(Gk,"alterUserValidation");function xk(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,$f.validateObject(e,It)}a(xk,"dropUserValidation");HO.exports={addUserValidation:Fk,alterUserValidation:Gk,dropUserValidation:xk}});var Be=m((Xse,GO)=>{"use strict";var{platform:Jse}=require("os"),kk="nats-server.zip",Yf="nats-server",Vk=process.platform==="win32"?`${Yf}.exe`:Yf,Kf="HDB",$k=/^[^\s.,*>]+$/,FO="__request__",Yk=a(e=>`${e}.${FO}`,"REQUEST_SUBJECT"),Kk={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Wk={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},Qk={HUB:"hub.pid",LEAF:"leaf.pid"},zk={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Jk={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:Kf,deliver_subject:"__HDB__.WORKQUEUE"},Xk={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:Kf,deliver_subject:"HDB.SCHEMAQUEUE"},Zk={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:Kf,deliver_subject:"HDB.USERQUEUE"},jk={SUCCESS:"success",ERROR:"error"},eV={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},tV={TXN:"txn",MSGID:"msgid"},xi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},rV={[xi.ERR]:1,[xi.WRN]:2,[xi.INF]:3,[xi.DBG]:4,[xi.TRC]:5},sV={debug:"-D",trace:"-DVV"};GO.exports={NATS_SERVER_ZIP:kk,NATS_SERVER_NAME:Yf,NATS_BINARY_NAME:Vk,PID_FILES:Qk,NATS_CONFIG_FILES:Wk,SERVER_SUFFIX:zk,WORK_QUEUE_CONSUMER_NAMES:Jk,SCHEMA_QUEUE_CONSUMER_NAMES:Xk,USER_QUEUE_CONSUMER_NAMES:Zk,NATS_TERM_CONSTRAINTS_RX:$k,REQUEST_SUFFIX:FO,UPDATE_REMOTE_RESPONSE_STATUSES:jk,CLUSTER_STATUS_STATUSES:eV,REQUEST_SUBJECT:Yk,SUBJECT_PREFIXES:tV,MSG_HEADERS:Kk,LOG_LEVELS:xi,LOG_LEVEL_FLAGS:sV,LOG_LEVEL_HIERARCHY:rV}});var kO=m((jse,xO)=>{"use strict";var ul=A(),ll=class{static{a(this,"BaseLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n){this.exp_date=t,this.ram_allocation=r,this.version=s,this.fingerprint=n}},Wf=class extends ll{static{a(this,"ExtendedLicense")}constructor(t=0,r=ul.RAM_ALLOCATION_ENUM.DEFAULT,s=ul.LICENSE_VALUES.VERSION_DEFAULT,n,i=!1){super(t,r,s,n),this.enterprise=i}};xO.exports={BaseLicense:ll,ExtendedLicense:Wf}});var ba=m((tne,QO)=>{"use strict";var Vi=require("fs-extra"),VO=cl(),$O=require("crypto"),nV=require("moment"),iV=require("uuid").v4,wt=x(),zf=require("path"),oV=V(),mn=A(),aV=kO().ExtendedLicense,ki="invalid license key format",cV="061183",uV="mofi25",lV="aes-256-cbc",_V=16,dV=32,YO=Q();YO.initSync();var Qf;QO.exports={validateLicense:KO,generateFingerPrint:fV,licenseSearch:WO,getLicense:SV};function Jf(){return zf.join(YO.getHdbBasePath(),mn.LICENSE_KEY_DIR_NAME,mn.LICENSE_FILE_NAME)}a(Jf,"getLicenseDirPath");function EV(){let e=Jf();return zf.join(e,mn.LICENSE_FILE_NAME)}a(EV,"getLicenseFilePath");function Xf(){let e=Jf();return zf.join(e,mn.REG_KEY_FILE_NAME)}a(Xf,"getFingerPrintFilePath");async function fV(){let e=Xf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await hV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(fV,"generateFingerPrint");async function hV(){let e=iV(),t=VO.hash(e),r=Xf();try{await Vi.mkdirp(Jf()),await Vi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(hV,"writeFingerprint");function KO(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=Xf(),n=!1;try{n=Vi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Vi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(uV),c=o[1];c=Buffer.concat([Buffer.from(c)],_V);let u=Buffer.concat([Buffer.from(i)],dV),l=$O.createDecipheriv(lV,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=mV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(ki),wt.error(ki),new Error(ki)}let d;if(isNaN(_))try{d=JSON.parse(_),r.version=d.version,r.exp_date=d.exp_date,isNaN(r.exp_date)&&(r.exp_date=new Date(r.exp_date).getTime()),d.ram_allocation&&(r.ram_allocation=d.ram_allocation)}catch{throw console.error(ki),wt.error(ki),new Error(ki)}else r.exp_date=_;r.exp_date<nV().valueOf()&&(r.valid_date=!1),VO.validate(o[1],`${cV}${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(KO,"validateLicense");function mV(e,t){try{let r=$O.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(mV,"checkOldLicense");function WO(){let e=new aV,t=[];try{t=Vi.readFileSync(EV(),"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(oV.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=KO(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 Qf=e,e}a(WO,"licenseSearch");async function SV(){return Qf||await WO(),Qf}a(SV,"getLicense")});var ar=m((one,lN)=>{"use strict";var jO="username is required",eN="nothing to update, must supply active, role or password to update",tN="password cannot be an empty string",rN="If role is specified, it cannot be empty.",sN="active must be true or false";lN.exports={addUser:yV,alterUser:IV,dropUser:CV,getSuperUser:MV,userInfo:UV,listUsers:dl,listUsersExternal:DV,setUsersToGlobal:Yi,findAndValidateUser:uN,getClusterUser:PV,USERNAME_REQUIRED:jO,ALTERUSER_NOTHING_TO_UPDATE:eN,EMPTY_PASSWORD:tN,EMPTY_ROLE:rN,ACTIVE_BOOLEAN:sN};var nN=br(),pV=jn(),jf=cl(),iN=qO(),oN=Nr(),eh=xs(),or=V(),aN=require("validate.js"),ue=x(),{promisify:TV}=require("util"),th=Fs(),zO=A(),JO=Be(),RV=Rr(),sne=Q(),nne=ba(),gV=Kn(),{table:ine}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:AV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Zf,HDB_ERROR_MSGS:$i}=AV,{UserEventMsg:rh}=Fr(),XO=require("lodash"),{_assignPackageExport:OV}=require("../../index");OV("getUser",uN);var cN={username:!0,active:!0,role:!0,password:!0},ZO=new Map,_l=oN.searchByValue,NV=oN.searchByHash,bV=TV(pV.delete);async function yV(e){let t=aN.cleanAttributes(e,cN),r=iN.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 _l(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,$i.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,$i.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await nN.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await Yi()}catch(u){throw ue.error("Got an error setting users to global"),ue.error(u),u}if(o.skipped_hashes.length===1)throw ns(new Error,$i.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],eh.signalUserChange(new rh(process.pid)),`${c.username} successfully added`}a(yV,"addUser");async function IV(e){let t=aN.cleanAttributes(e,cN);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(eN);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(tN);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(sN);let r=wV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=th.encrypt(t.password)),t.password=jf.hash(t.password)),t.role==="")throw new Error(rN);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 _l(i)||[])}catch(c){throw ue.error("Got an error searching for a role."),ue.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw ue.error(c),ns(new Error,c,is.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.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 nN.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await Yi()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return eh.signalUserChange(new rh(process.pid)),n}a(IV,"alterUser");function wV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(wV,"isClusterUser");async function CV(e){try{let t=iN.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,$i.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await bV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await Yi()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return eh.signalUserChange(new rh(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(CV,"dropUser");async function UV(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 NV(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(UV,"userInfo");async function DV(){let e;try{e=await dl()}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(DV,"listUsersExternal");async function dl(){try{let e={schema:"system",table:"hdb_role",search_value:"*",search_attribute:"role",get_attributes:["*"]},t;try{t=await _l(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]=XO.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 _l(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=XO.cloneDeep(o),o.role=r[o.role],LV(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(dl,"listUsers");function LV(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(gV)){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(LV,"appendSystemTablesToRole");async function Yi(){try{let e=await dl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(Yi,"setUsersToGlobal");async function uN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Zf.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(jf.validate(s.password,t))ZO.set(t,s.password);else throw ns(new Error,Zf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(uN,"findAndValidateUser");async function MV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(MV,"getSuperUser");async function PV(){let e=await dl(),t=RV.getConfigFromFile(zO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!or.isEmpty(r)&&r?.role?.role===zO.ROLE_TYPES_ENUM.CLUSTER_USER)return r.decrypt_hash=th.decrypt(r.hash),r.uri_encoded_d_hash=encodeURIComponent(r.decrypt_hash),r.uri_encoded_name=encodeURIComponent(r.username),r.sys_name=r.username+JO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+JO.SERVER_SUFFIX.ADMIN,r}a(PV,"getClusterUser")});var Ia=m((lne,fN)=>{"use strict";var ei=x(),cr=A(),vV=iO(),cne=Gs(),une=Qn(),BV=ar(),{validateEvent:_N}=Fr(),ya=qr(),HV=require("process"),{resetDatabases:qV}=(de(),re(Ne)),FV={[cr.ITC_EVENT_TYPES.SCHEMA]:GV,[cr.ITC_EVENT_TYPES.USER]:EN};async function GV(e){let t=_N(e);if(t){ei.error(t);return}ei.trace("ITC schemaHandler received schema event:",e),await vV(e.message),await xV(e.message)}a(GV,"schemaHandler");async function xV(e){try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=qV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ei.error(t)}}a(xV,"syncSchemaMetadata");var dN=[];async function EN(e){try{try{ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),ya.resetReadTxn(cr.SYSTEM_SCHEMA_NAME,cr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ei.warn(r)}let t=_N(e);if(t){ei.error(t);return}ei.trace(`ITC userHandler ${cr.HDB_ITC_CLIENT_PREFIX}${HV.pid} received user event:`,e),await BV.setUsersToGlobal();for(let r of dN)r()}catch(t){ei.error(t)}}a(EN,"userHandler");EN.addListener=function(e){dN.push(e)};fN.exports=FV});var Fr=m((mne,mN)=>{"use strict";var dne=x(),sh=V(),kV=A(),{ITC_ERRORS:wa}=rr(),{parentPort:Ene,threadId:VV,isMainThread:$V,workerData:fne}=require("worker_threads"),{onMessageFromWorkers:YV,broadcast:hne,broadcastWithAcknowledgement:KV}=dt();mN.exports={sendItcEvent:WV,validateEvent:hN,SchemaEventMsg:QV,UserEventMsg:zV};var El;YV(async(e,t)=>{El=El||Ia(),hN(e),El[e.type]&&await El[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function WV(e){return!$V&&e.message&&(e.message.originator=VV),KV(e)}a(WV,"sendItcEvent");function hN(e){if(typeof e!="object")return wa.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||sh.isEmpty(e.type))return wa.MISSING_TYPE;if(!e.hasOwnProperty("message")||sh.isEmpty(e.message))return wa.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||sh.isEmpty(e.message.originator))return wa.MISSING_ORIGIN;if(kV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return wa.INVALID_EVENT(e.type)}a(hN,"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}a(QV,"SchemaEventMsg");function zV(e){this.originator=e}a(zV,"UserEventMsg")});var xs=m((Tne,RN)=>{"use strict";var SN=A(),pne=V(),fl=x(),pN=rO(),Ki,{sendItcEvent:TN}=Fr();function JV(e){try{fl.trace("signalSchemaChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),TN(t)}catch(t){fl.error(t)}}a(JV,"signalSchemaChange");function XV(e){try{fl.trace("signalUserChange called with message:",e),Ki=Ki||Ia();let t=new pN(SN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),TN(t)}catch(t){fl.error(t)}}a(XV,"signalUserChange");RN.exports={signalSchemaChange:JV,signalUserChange:XV}});var hl=m((gne,AN)=>{"use strict";var gN=V(),ZV=A(),jV=x(),e$=Xu(),t$=Ju(),r$=xs(),{SchemaEventMsg:s$}=Fr(),n$="already exists in";AN.exports=i$;async function i$(e,t,r){if(gN.isEmptyOrZeroLength(r))return r;let s=[];gN.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 o$(e,t.schema,t.name,i)})),n}a(i$,"lmdbCheckForNewAttributes");async function o$(e,t,r,s){let n=new t$(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await a$(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(n$))jV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(o$,"createNewAttribute");async function a$(e){let t;return t=await e$(e),r$.signalSchemaChange(new s$(process.pid,ZV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(a$,"createAttribute")});var Wi=m((One,ON)=>{"use strict";var nh=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}};ON.exports=nh});var bN=m((bne,NN)=>{"use strict";var c$=Wi(),u$=A().OPERATIONS_ENUM,ih=class extends c${static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(u$.INSERT,r,s,n,i),this.records=t}};NN.exports=ih});var IN=m((Ine,yN)=>{"use strict";var l$=Wi(),_$=A().OPERATIONS_ENUM,oh=class extends l${static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(_$.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};yN.exports=oh});var CN=m((Cne,wN)=>{"use strict";var d$=Wi(),E$=A().OPERATIONS_ENUM,ah=class extends d${static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(E$.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};wN.exports=ah});var DN=m((Dne,UN)=>{"use strict";var f$=Wi(),h$=A().OPERATIONS_ENUM,ch=class extends f${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(h$.DELETE,s,n,t,i),this.original_records=r}};UN.exports=ch});var Ca=m((Pne,vN)=>{"use strict";var Mne=require("path"),LN=ye(),m$=bN(),S$=IN(),p$=CN(),T$=DN(),Qi=xe(),MN=V(),{CONFIG_PARAMS:R$}=A(),PN=Q();PN.initSync();var ml=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:g$}=we();vN.exports=A$;async function A$(e,t){if(PN.get(R$.LOGGING_AUDITLOG)===!1)return;let r=g$(e.schema,e.table),s=await LN.openEnvironment(r,e.table,!0),n=O$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){LN.initializeDBIs(s,Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Qi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),MN.isEmpty(n.user_name)||s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Qi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(A$,"writeTransaction");function O$(e,t){let r=MN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===ml.INSERT)return new m$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPDATE)return new S$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.UPSERT)return new p$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===ml.DELETE)return new T$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(O$,"createTransactionObject")});var uh=m((Hne,BN)=>{"use strict";var N$=pa(),Bne=Ta(),Ua=A(),b$=Oa(),y$=Fi().insertRecords,I$=ye(),w$=x(),C$=hl(),{getSchemaPath:U$}=we(),D$=Ca();BN.exports=L$;async function L$(e){try{let{schema_table:t,attributes:r}=N$(e);b$(e,r,t.hash_attribute),e.schema!==Ua.SYSTEM_SCHEMA_NAME&&(r.includes(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ua.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await C$(e.hdb_auth_header,t,r),n=U$(e.schema,e.table),i=await I$.openEnvironment(n,e.table),o=await y$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await D$(e,o)}catch(c){w$.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(L$,"lmdbCreateRecords")});var FN=m((Fne,qN)=>{"use strict";var HN=A(),M$=uh(),P$=Ta(),v$=require("fs-extra"),{getSchemaPath:B$}=we();qN.exports=H$;async function H$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new P$(HN.SYSTEM_SCHEMA_NAME,HN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await M$(r),await v$.mkdirp(B$(e.schema))}a(H$,"lmdbCreateSchema")});var xN=m((xne,GN)=>{"use strict";var lh=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}};GN.exports=lh});var YN=m((Kne,$N)=>{"use strict";var kN=ye(),_h=Ht(),dh=rr().LMDB_ERRORS_ENUM,q$=xe(),VN=x(),Vne=V(),F$=require("lmdb"),G$=xN(),x$=A(),{OVERFLOW_MARKER:$ne,MAX_SEARCH_KEY_LENGTH:Yne}=q$,k$=x$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function V$(e,t,r,s){if(_h.validateEnv(e),t===void 0)throw new Error(dh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(dh.IDS_REQUIRED):new Error(dh.IDS_MUST_BE_ITERABLE);try{let n=kN.listDBIs(e);kN.initializeDBIs(e,t,n);let i=new G$,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[k$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,F$.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 $=_h.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{VN.warn(`cannot delete from attribute: ${R}, ${k}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){VN.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=_h.getNextMonotonicTime(),i}catch(n){throw n}}a(V$,"deleteRecords");$N.exports={deleteRecords:V$}});var Da=m((Qne,WN)=>{"use strict";var zi=V(),$$=YN(),Y$=ye(),{getSchemaPath:K$}=we(),W$=Ca(),Q$=x();WN.exports=z$;async function z$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(zi.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(zi.isEmptyOrZeroLength(e.hash_values)&&!zi.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];zi.isEmpty(u)||e.hash_values.push(u)}}if(zi.isEmptyOrZeroLength(e.hash_values))return KN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(zi.isEmptyOrZeroLength(e.records)){e.records=[];for(let c=0;c<e.hash_values.length;c++)e.records[c]={[s]:e.hash_values[c]}}let n=K$(e.schema,e.table),i=await Y$.openEnvironment(n,e.table),o=await $$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await W$(e,o)}catch(c){Q$.error(`unable to write transaction due to ${c.message}`)}return KN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(z$,"lmdbDeleteRecords");function KN(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(KN,"createDeleteResponse")});var fh=m((Xne,QN)=>{"use strict";var J$=A(),Jne=Ht();function Eh(e,t){let r=Object.create(null);if(t.length===1&&J$.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(Eh,"parseRow");function X$(e,t,r,s){let n=Eh(r,e);s.push(n)}a(X$,"searchAll");function Z$(e,t,r,s){let n=Eh(r,e);s[t]=n}a(Z$,"searchAllToMap");function j$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(j$,"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 eY(e,t,r,s,n,i){t.toString().endsWith(e)&&ti(t,r,s,n,i)}a(eY,"endsWith");function tY(e,t,r,s,n,i){t.toString().includes(e)&&ti(t,r,s,n,i)}a(tY,"contains");function rY(e,t,r,s,n,i){t>e&&ti(t,r,s,n,i)}a(rY,"greaterThanCompare");function sY(e,t,r,s,n,i){t>=e&&ti(t,r,s,n,i)}a(sY,"greaterThanEqualCompare");function nY(e,t,r,s,n,i){t<e&&ti(t,r,s,n,i)}a(nY,"lessThanCompare");function iY(e,t,r,s,n,i){t<=e&&ti(t,r,s,n,i)}a(iY,"lessThanEqualCompare");QN.exports={parseRow:Eh,searchAll:X$,searchAllToMap:Z$,iterateDBI:j$,endsWith:eY,contains:tY,greaterThanCompare:rY,greaterThanEqualCompare:sY,lessThanCompare:nY,lessThanEqualCompare:iY,pushResults:ti}});var Ji=m((rie,tb)=>{"use strict";var Sn=ye(),jne=x(),ur=Ht(),Sl=xe(),ke=rr().LMDB_ERRORS_ENUM,eie=V(),oY=A(),pl=fh(),{parseRow:aY}=pl,tie=require("lmdb"),{OVERFLOW_MARKER:zN,MAX_SEARCH_KEY_LENGTH:cY}=Sl;function JN(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(JN,"iterateFullIndex");function La(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(La,"iterateRangeBetween");function ri(e,t,r,s){let n=e.database||e,i=Sn.openDBI(n,r);i[Sl.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 XN(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(zN)){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[Sl.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a(XN,"getOverflowCheck");function uY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ri(e,t,t,(o,c,u)=>(Tl(r),r=Ma(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>aY(l.value,r))))}a(uY,"searchAll");function lY(e,t,r,s=!1,n=void 0,i=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);Tl(r),r=Ma(e.database||e,r);let o=new Map;for(let{key:c,value:u}of JN(e,t,t,s,n,i))o.set(c,pl.parseRow(u,r));return o}a(lY,"searchAllToMap");function _Y(e,t,r=!1,s=void 0,n=void 0){if(ur.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=JN(e,void 0,t,r,s,n),c=o.transaction,u=XN(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(_Y,"iterateDBI");function dY(e,t){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return Sn.statDBI(e,t).entryCount}a(dY,"countAll");function EY(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=ur.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(EY,"equals");function fY(e,t,r){return pn(e,t,r),Sn.openDBI(e,t).getValuesCount(r)}a(fY,"count");function hY(e,t,r,s,n=!1,i=void 0,o=void 0){return pn(e,r,s),ri(e,null,r,(c,u)=>{s=ur.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(hY,"startsWith");function mY(e,t,r,s,n=!1,i=void 0,o=void 0){return ZN(e,t,r,s,n,i,o,!0)}a(mY,"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=XN(_,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(zN)?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[Sl.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 SY(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),La(e,t,r,s,u,n,i,o,!0,!1)}a(SY,"greaterThan");function pY(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),La(e,t,r,s,u,n,i,o,!1,!1)}a(pY,"greaterThanEqual");function TY(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),La(e,t,r,u,s,n,i,o,!1,!0)}a(TY,"lessThan");function RY(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),La(e,t,r,u,s,n,i,o,!1,!1)}a(RY,"lessThanEqual");function gY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(ur.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=ur.convertKeyValueToWrite(s),n=ur.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return La(e,t,r,s,n,i,o,c)}a(gY,"between");function AY(e,t,r,s){ur.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(r),r=Ma(n,r),s===void 0)throw new Error(ke.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=pl.parseRow(c,r)),o}a(AY,"searchByHash");function OY(e,t,r){ur.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(OY,"checkHashExists");function NY(e,t,r,s,n=[]){return eb(e,t,r,s,n),jN(e,t,r,s,n).map(i=>i[1])}a(NY,"batchSearchByHash");function bY(e,t,r,s,n=[]){eb(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(bY,"batchSearchByHashToMap");function jN(e,t,r,s,n=[]){return ri(e,t,t,(i,o,c)=>{r=Ma(c,r);let u=r.length<3;return s.map(l=>{let _=c.dbis[t].get(l,{transaction:i,lazy:u});if(_)return[l,pl.parseRow(_,r)];n.push(l)}).filter(l=>l)})}a(jN,"batchHashSearch");function eb(e,t,r,s,n){if(ur.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(Tl(r),s==null)throw new Error(ke.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(ke.IDS_MUST_BE_ITERABLE)}a(eb,"initializeBatchSearchByHash");function Tl(e){if(!Array.isArray(e))throw e===void 0?new Error(ke.FETCH_ATTRIBUTES_REQUIRED):new Error(ke.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(Tl,"validateFetchAttributes");function pn(e,t,r){if(ur.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>cY)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(pn,"validateComparisonFunctions");function Ma(e,t){return t.length===1&&oY.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Sn.listDBIs(e)),t}a(Ma,"setGetWholeRowAttributes");tb.exports={searchAll:uY,searchAllToMap:lY,count:fY,countAll:dY,equals:EY,startsWith:hY,endsWith:mY,contains:ZN,searchByHash:AY,setGetWholeRowAttributes:Ma,batchSearchByHash:NY,batchSearchByHashToMap:bY,checkHashExists:OY,iterateDBI:_Y,greaterThan:SY,greaterThanEqual:pY,lessThan:TY,lessThanEqual:RY,between:gY}});var Xi=m((nie,ob)=>{var rb=require("lodash"),sb=Pe(),Ce=require("joi"),yY=V(),{hdb_schema_table:Rl,checkValidTable:nb,hdb_table:ib,hdb_database:gl}=rs(),{handleHDBError:IY,hdb_errors:wY}=W(),{getDatabases:CY}=(de(),re(Ne)),{HTTP_STATUS_CODES:UY}=wY,DY=Ce.object({database:gl,schema:gl,table:ib,search_attribute:Rl,search_value:Ce.any().required(),get_attributes:Ce.array().min(1).items(Rl).optional(),desc:Ce.bool(),limit:Ce.number().integer().min(1),offset:Ce.number().integer().min(0)}),LY=Ce.object({database:gl,schema:gl,table:ib,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(Rl).optional(),conditions:Ce.array().min(1).items(Ce.object({search_attribute:Rl,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()});ob.exports=function(e,t){let r=null;switch(t){case"value":r=sb.validateBySchema(e,DY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(nb("database",e.schema)),i(nb("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=sb.validateBySchema(e,LY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=yY.checkGlobalSchemaTable(e.schema,e.table);if(n)return IY(new Error,n,UY.NOT_FOUND);let o=CY()[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=rb.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!rb.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 hh=m((oie,ab)=>{"use strict";var MY=ye(),PY=Xi(),{getSchemaPath:vY}=we();ab.exports=BY;function BY(e){let t=PY(e,"hashes");if(t)throw t;let r=vY(e.schema,e.table);return MY.openEnvironment(r,e.table)}a(BY,"initialize")});var mh=m((cie,cb)=>{"use strict";var HY=Ji(),qY=hh();cb.exports=FY;async function FY(e){let t=await qY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return HY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(FY,"lmdbGetDataByHash")});var Zi=m((lie,ub)=>{"use strict";var Sh=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};ub.exports=Sh});var _b=m((Eie,lb)=>{"use strict";var die=Zi(),GY=Ji(),xY=hh();lb.exports=kY;async function kY(e){let t=await xY(e),r=global.hdb_schema[e.schema][e.table];return GY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(kY,"lmdbSearchByHash")});var os=m((hie,db)=>{"use strict";var ph=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=_}};db.exports=ph});var Al=m((Sie,pb)=>{"use strict";var Ct=Ji(),VY=ye(),$Y=V(),ie=xe(),si=A(),YY=Kn(),Eb=rr().LMDB_ERRORS_ENUM,{getSchemaPath:KY}=we(),ks=si.SEARCH_WILDCARDS;async function WY(e,t,r){let s;e.schema===si.SYSTEM_SCHEMA_NAME?s=YY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=Sb(e,s.hash_attribute,r,t);return hb(e,n,s.hash_attribute,r)}a(WY,"prepSearch");async function hb(e,t,r,s){let n=KY(e.schema,e.table),i=await VY.openEnvironment(n,e.table),o=mb(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(QY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?fb(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?fb(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(hb,"executeSearch");function mb(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(mb,"searchByType");function fb(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(fb,"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}a(QY,"checkToFetchMore");function Sb(e,t,r,s){if($Y.isEmpty(s)){let n=e.search_value;typeof n=="object"?n=JSON.stringify(n):n=n.toString();let i=n.charAt(0),o=n.charAt(n.length-1),c=!1;if(e.search_attribute===t&&(c=!0),ks.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(ks[0])<0&&n.indexOf(ks[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(ks.indexOf(i)>=0&&ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(ks.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(ks.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(ks[0])||n.includes(ks[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(Eb.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(Eb.UNKNOWN_SEARCH_TYPE)}}a(Sb,"createSearchTypeFromSearchObject");pb.exports={executeSearch:hb,createSearchTypeFromSearchObject:Sb,prepSearch:WY,searchByType:mb}});var Rb=m((Rie,Tb)=>{"use strict";var Tie=os(),zY=Xi(),JY=V(),XY=A(),ZY=Al();Tb.exports=jY;function jY(e,t){if(!JY.isEmpty(t)&&XY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=zY(e,"value");if(s)throw s;let n=!0;return ZY.prepSearch(e,t,n)}a(jY,"lmdbGetDataByValue")});var Pa=m((Oie,gb)=>{"use strict";var Aie=os(),eK=Xi(),tK=V(),rK=A(),sK=Al();gb.exports=nK;async function nK(e,t){if(!tK.isEmpty(t)&&rK.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=eK(e,"value");if(s)throw s;return sK.prepSearch(e,t,!1)}a(nK,"lmdbSearchByValue")});var Ob=m((yie,Ab)=>{"use strict";var bie=xe(),Th=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}},Rh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},gh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};Ab.exports={SearchByConditionsObject:Th,SearchCondition:Rh,SortAttribute:gh}});var wb=m((Uie,Ib)=>{"use strict";var wie=Ob().SearchByConditionsObject,iK=os(),oK=Xi(),Ah=Ji(),Ol=xe(),{Resource:Cie}=(Zr(),re(xE)),yb=Al(),aK=fh(),cK=require("lodash"),{getSchemaPath:uK}=we(),Nb=ye(),{handleHDBError:lK,hdb_errors:_K}=W(),{HTTP_STATUS_CODES:dK}=_K,EK=1e8;Ib.exports=fK;async function fK(e){let t=oK(e,"conditions");if(t)throw lK(t,t.message,dK.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=uK(e.schema,e.table),s=await Nb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Nb.openDBI(s,l.search_attribute);let i=cK.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Ol.SEARCH_TYPES.EQUALS?l.estimated_count=Ah.count(s,l.search_attribute,l.search_value):_===Ol.SEARCH_TYPES.CONTAINS||_===Ol.SEARCH_TYPES.ENDS_WITH?l.estimated_count=1/0:l.estimated_count=EK}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await bb(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(yb.filterByType),d=_.length,E=Ah.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=>aK.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await bb(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=Ah.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(fK,"lmdbSearchByConditions");async function bb(e,t,r,s){let n=new iK(t.schema,t.table,void 0,void 0,s,t.get_attributes),i=r.search_type;return n.search_attribute=r.search_attribute,i===Ol.SEARCH_TYPES.BETWEEN?(n.search_value=r.search_value[0],n.end_value=r.search_value[1]):n.search_value=r.search_value,yb.searchByType(e,n,i,s).map(o=>o.value)}a(bb,"executeConditionSearch")});var va=m((Lie,Cb)=>{"use strict";var hK=A().OPERATIONS_ENUM,Oh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=hK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Cb.exports=Oh});var Nh=m((Pie,Hb)=>{"use strict";var Mb=os(),Pb=va(),vb=Pa(),Bb=Da(),Ft=A(),Ub=V(),Db=ye(),{getTransactionAuditStorePath:mK,getSchemaPath:SK}=we(),Lb=x();Hb.exports=pK;async function pK(e){try{if(Ub.isEmpty(global.hdb_schema[e.schema])||Ub.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await TK(e),await RK(e);let t=SK(e.schema,e.table);try{await Db.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=mK(e.schema,e.table);await Db.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")Lb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(pK,"lmdbDropTable");async function TK(e){let t=new Mb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Bb(n)}a(TK,"deleteAttributesFromSystem");async function RK(e){let t=new Mb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Ft.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await vb(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 Pb(Ft.SYSTEM_SCHEMA_NAME,Ft.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Bb(n)}catch(i){throw i}}a(RK,"dropTableFromSystem")});var Fb=m((Bie,qb)=>{"use strict";var gK=require("fs-extra"),AK=os(),OK=Zi(),NK=va(),bK=Nh(),yK=Da(),IK=mh(),wK=Pa(),Vs=A(),{getSchemaPath:CK}=we(),{handleHDBError:UK,hdb_errors:DK}=W(),{HDB_ERROR_MSGS:LK,HTTP_STATUS_CODES:MK}=DK;qb.exports=PK;async function PK(e){let t;try{t=await vK(e.schema);let r=new AK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await wK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await bK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new NK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await yK(n);let i=CK(t);await gK.remove(i)}catch(r){throw r}}a(PK,"lmdbDropSchema");async function vK(e){let t=new OK(Vs.SYSTEM_SCHEMA_NAME,Vs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Vs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await IK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw UK(new Error,LK.SCHEMA_NOT_FOUND(e),MK.NOT_FOUND,void 0,void 0,!0);return s}a(vK,"validateDropSchema")});var yh=m((qie,Gb)=>{"use strict";var bh=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Gb.exports=bh});var kb=m((xie,xb)=>{"use strict";var BK=require("fs-extra"),Nl=ye(),{getTransactionAuditStorePath:HK}=we(),Ih=xe(),Gie=yh();xb.exports=qK;async function qK(e){let t;try{let r=HK(e.schema,e.table);await BK.mkdirp(r),t=await Nl.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{Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Nl.createDBI(t,Ih.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Nl.createDBI(t,Ih.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(qK,"createTransactionsAuditEnvironment")});var Kb=m((Vie,Yb)=>{"use strict";var wh=A(),Vb=ye(),FK=Fi(),{getSystemSchemaPath:GK,getSchemaPath:xK}=we(),kK=Kn(),VK=Xu(),Ch=Ju(),$K=x(),YK=kb(),Dh=kK.hdb_table,$b=[];for(let e=0;e<Dh.attributes.length;e++)$b.push(Dh.attributes[e].attribute);Yb.exports=KK;async function KK(e,t){let r=xK(t.schema,t.table),s=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Ch(t.schema,t.table,wh.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Ch(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Vb.createEnvironment(r,t.table),e!==void 0){let o=await Vb.openEnvironment(GK(),wh.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await FK.insertRecords(o,Dh.hash_attribute,$b,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Uh(s),await Uh(n),await Uh(i)}await YK(t)}catch(o){throw o}}a(KK,"lmdbCreateTable");async function Uh(e){try{await VK(e)}catch(t){$K.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Uh,"createAttribute")});var Qb=m((Yie,Wb)=>{"use strict";var WK=pa(),QK=Oa(),zK=hl(),Ba=A(),JK=Fi().updateRecords,XK=ye(),{getSchemaPath:ZK}=we(),jK=Ca(),e1=x();Wb.exports=t1;async function t1(e){try{let{schema_table:t,attributes:r}=WK(e);QK(e,r,t.hash_attribute),e.schema!==Ba.SYSTEM_SCHEMA_NAME&&(r.includes(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ba.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await zK(e.hdb_auth_header,t,r),n=ZK(e.schema,e.table),i=await XK.openEnvironment(n,e.table),o=await JK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await jK(e,o)}catch(c){e1.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(t1,"lmdbUpdateRecords")});var Jb=m((Wie,zb)=>{"use strict";var r1=A().OPERATIONS_ENUM,Lh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=r1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};zb.exports=Lh});var Zb=m((Jie,Xb)=>{"use strict";var zie=Jb(),s1=pa(),n1=Oa(),i1=hl(),Ha=A(),o1=Fi().upsertRecords,a1=ye(),{getSchemaPath:c1}=we(),u1=Ca(),l1=x(),{handleHDBError:_1,hdb_errors:d1}=W();Xb.exports=E1;async function E1(e){let t;try{t=s1(e)}catch(u){throw _1(u,u.message,d1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;n1(e,s,r.hash_attribute),e.schema!==Ha.SYSTEM_SCHEMA_NAME&&(s.includes(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Ha.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await i1(e.hdb_auth_header,r,s),i=c1(e.schema,e.table),o=await a1.openEnvironment(i,e.table),c=await o1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await u1(e,c)}catch(u){l1.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(E1,"lmdbUpsertRecords")});var ey=m((Zie,jb)=>{"use strict";var Mh=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};jb.exports=Mh});var ry=m((eoe,ty)=>{"use strict";var Ph=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}};ty.exports=Ph});var iy=m((soe,ny)=>{"use strict";var vh=ye(),{getTransactionAuditStorePath:f1}=we(),roe=ey(),qa=xe(),h1=V(),sy=ry(),m1=require("util").promisify,S1=m1(setTimeout),p1=1e4,T1=100;ny.exports=R1;async function R1(e){let t=f1(e.schema,e.table),r=await vh.openEnvironment(t,e.table,!0),s=vh.listDBIs(r);vh.initializeDBIs(r,qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new sy;do n=await g1(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 S1(T1);while(n.transactions_deleted>0);return i}a(R1,"deleteAuditLogsBefore");async function g1(e,t){let r=new sy;try{let s=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],n;for(let{key:i,value:o}of s.getRange({start:!1})){if(i>=t)break;r.start_timestamp===void 0&&(r.start_timestamp=i),n=s.remove(i);let c=o[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];h1.isEmpty(c)||(n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[qa.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>p1)break}return await n,r}catch(s){throw s}}a(g1,"deleteTransactions")});var ay=m((ioe,oy)=>{"use strict";var Bh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};oy.exports=Bh});var uy=m((coe,cy)=>{"use strict";var A1=os(),O1=va(),aoe=ay(),as=A(),N1=V(),Hh=ye(),b1=Kn(),y1=Pa(),I1=Da(),{getSchemaPath:w1}=we();cy.exports=C1;async function C1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=b1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await D1(e),n=w1(e.schema,e.table),i=await Hh.openEnvironment(n,e.table);return t===!0&&await U1(e,i,r.hash_attribute),Hh.dropDBI(i,e.attribute),s}a(C1,"lmdbDropAttribute");async function U1(e,t,r){let s=Hh.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(U1,"removeAttributeFromAllObjects");async function D1(e){let t=new A1(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 y1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(N1.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 O1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return I1(i)}a(D1,"dropAttributeFromSystem")});var hy=m((_oe,fy)=>{"use strict";var qh=ye(),ji=xe(),loe=Ht(),Fh=A(),ly=V(),{getTransactionAuditStorePath:L1}=we(),M1=Ji(),bl=Wi(),P1=x();fy.exports=v1;async function v1(e){let t=L1(e.schema,e.table),r=await qh.openEnvironment(t,e.table,!0),s=qh.listDBIs(r);qh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return _y(r,e.search_values);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,H1(r,e.search_values,n);case Fh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return B1(r,e.search_values);default:return _y(r)}}a(v1,"readAuditLog");function _y(e,t=[0,Date.now()]){ly.isEmpty(t[0])&&(t[0]=0),ly.isEmpty(t[1])&&(t[1]=Date.now());let r=e.dbis[ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP],s;for(let n of r.getKeys({start:t[1]}))if(n!==t[1]){s=n;break}return r.getRange({start:t[0],end:s}).map(({value:n})=>Object.assign(new bl,n))}a(_y,"searchTransactionsByTimestamp");function B1(e,t=[]){let r=new Map;for(let s=0;s<t.length;s++){let n=t[s],i=[];for(let o of e.dbis[ji.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].getValues(n))i.push(o);r.set(n,Ey(e,i))}return Object.fromEntries(r)}a(B1,"searchTransactionsByUsername");function H1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=M1.equals(e,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,ji.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,l);for(let{value:d}of _){let E=Number(d);s.has(E)?s.get(E).push(l.toString()):s.set(E,[l.toString()])}}let n=Array.from(s.keys()),i=Ey(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);dy(u,"records",r,_,o),dy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(H1,"searchTransactionsByHashValues");function dy(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 bl(e.operation,e.user_name,i,void 0);d[t]=[c],l.push(d)}}else{let l=new bl(e.operation,e.user_name,i,void 0);l[t]=[c],n.set(u,[l])}}}a(dy,"loopRecords");function Ey(e,t){let r=[];try{let s=e.dbis[ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP];for(let n=0;n<t.length;n++)try{let i=s.get(t[n]);if(i){let o=Object.assign(new bl,i);r.push(o)}}catch(i){P1.warn(i)}return r}catch(s){throw s}}a(Ey,"batchSearchTransactions")});var Sy=m((hoe,my)=>{"use strict";var{getSchemaPath:Eoe}=we(),foe=ye(),{database:q1}=(de(),re(Ne));my.exports={writeTransaction:F1};async function F1(e,t,r){return q1({database:e,table:t}).transaction(r)}a(F1,"writeTransaction")});var gy=m((Soe,Ry)=>{"use strict";var{getSchemaPath:py}=we(),Ty=ye();Ry.exports={flush:G1,resetReadTxn:x1};async function G1(e,t){return(await Ty.openEnvironment(py(e,t),t.toString())).flushed}a(G1,"flush");async function x1(e,t){try{(await Ty.openEnvironment(py(e,t),t.toString())).resetReadTxn()}catch{}}a(x1,"resetReadTxn")});var by=m((Toe,Ny)=>{"use strict";var{Readable:k1}=require("stream"),{getDatabases:V1}=(de(),re(Ne)),{readSync:$1,openSync:Y1,createReadStream:Ay}=require("fs"),{open:K1}=require("lmdb"),Oy=Gu(),W1=ku(),{INTERNAL_DBIS_NAME:Q1}=xe();Ny.exports=J1;var Gh=32768,z1=100;async function J1(e){let t=e.database||e.schema||"data",r=V1()[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:W1.MAX_DBS}),E,f=d.openDB(Q1,new Oy(!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 Oy(!$,$);U.encoding="binary";let b=d.openDB(R,U),P=_.openDB(R,U);for(let{key:z,version:q,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,q),T++%z1===0&&await new Promise(je=>setTimeout(je,20))}await E;let p=Ay(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=Y1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Gh);$1(c,l,0,Gh);let _=o.useReadTransaction(),d=Ay(null,{fd:c,start:Gh}),E=new k1.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(J1,"getBackup")});var wy=m((goe,Iy)=>{"use strict";var X1=x(),{handleHDBError:Z1}=W(),j1=lA(),eW=Xu(),tW=uh(),rW=FN(),sW=Da(),nW=mh(),iW=_b(),oW=Rb(),aW=Pa(),cW=wb(),uW=Fb(),lW=Kb(),_W=Qb(),dW=Zb(),EW=iy(),fW=Nh(),hW=uy(),mW=hy(),SW=Sy(),yy=gy(),pW=by(),xh=class extends j1{static{a(this,"LMDBBridge")}async searchByConditions(t){return cW(t)}async getDataByHash(t){return await nW(t)}async searchByHash(t){return await iW(t)}async getDataByValue(t,r){return await oW(t,r)}async searchByValue(t){return await aW(t)}async createSchema(t){return await rW(t)}async dropSchema(t){return await uW(t)}async createTable(t,r){return await lW(t,r)}async dropTable(t){return await fW(t)}async createAttribute(t){return await eW(t)}async createRecords(t){return await tW(t)}async updateRecords(t){return await _W(t)}async upsertRecords(t){try{return await dW(t)}catch(r){throw Z1(r,null,null,X1.ERR,r)}}async deleteRecords(t){return await sW(t)}async dropAttribute(t){return await hW(t)}async deleteAuditLogsBefore(t){return await EW(t)}async readAuditLog(t){return await mW(t)}writeTransaction(t,r,s){return SW.writeTransaction(t,r,s)}flush(t,r){return yy.flush(t,r)}resetReadTxn(t,r){return yy.resetReadTxn(t,r)}getBackup(t){return pW(t)}};Iy.exports=xh});var Hy={};et(Hy,{ResourceBridge:()=>$h});function Yh({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 Uy(e,t){let r=cs(e),s=Yh(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&&Mu(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||RW,r=xr()[t];if(!r)throw(0,Gr.handleHDBError)(new Error,TW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Dy(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*Ly(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 My,yl,Gr,Py,vy,kr,kh,Vh,By,TW,RW,gW,AW,Cy,$h,qy=Se(()=>{"use strict";My=C(wy()),yl=C(Xi()),Gr=C(W());de();Py=C(pa()),vy=C(Oa()),kr=C(A()),kh=C(xs()),Vh=C(Fr()),By=C(V());$n();Pu();({HDB_ERROR_MSGS:TW}=Gr.hdb_errors),RW="data",gW=1e4,AW=10,$h=class extends My.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Cy=this}async searchByConditions(t){let r=(0,yl.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:Yh(t,s),allowFullScan:!0})}async createTable(t,r){let s=r.attributes,n=!!s,i=r.primary_key||r.hash_attribute;if(s)for(let o of s)o.is_primary_key?(o.isPrimaryKey=!0,delete o.is_primary_key):o.name===i&&i&&(o.isPrimaryKey=!0);else{if(!i)throw new Gr.ClientError("A primary key must be specified with a `primary_key` property or with `attributes`");s=[{name:i,isPrimaryKey:!0},{name:"__createdtime__",indexed:!0},{name:"__updatedtime__",indexed:!0}]}nt({database:r.schema,table:r.table,attributes:s,schemaDefined:n,expiration:r.expiration})}async createAttribute(t){return await 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}),kh.signalSchemaChange(new Vh.SchemaEventMsg(process.pid,kr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Kh(t.schema),kh.signalSchemaChange(new Vh.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,Cy.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Py.default)(t);(0,vy.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=Mu(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 Dy(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,By.async_set_timeout)(AW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%gW===0&&await l();return u.length>0&&await l(),n?Dy(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,yl.default)(t,"hashes");if(r)throw r;return Uy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Uy(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,yl.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:Yh(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 Ly(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return Ly(r,t.search_values?.[0],t.search_values?.[1])}}};a(Yh,"getSelect");a(Uy,"getRecords");a(cs,"getTable");a(Dy,"createDeleteResponse");a(Ly,"groupRecordsInHistory")});var qr=m((Ioe,Fy)=>{"use strict";var{ResourceBridge:OW}=(qy(),re(Hy)),NW=Q();NW.initSync();var Il;function bW(){return Il||(Il=new OW,Il)}a(bW,"getBridge");Fy.exports=bW()});var Vy=m((Coe,ky)=>{"use strict";var Gy=require("lodash"),Ga=require("mathjs"),yW=require("jsonata"),xy=V();ky.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?Gy.uniqWith(e,Gy.isEqual):e,searchJSON:IW,mad:xa.bind(null,Ga.mad),mean:xa.bind(null,Ga.mean),mode:xa.bind(null,Ga.mode),prod:xa.bind(null,Ga.prod),median:xa.bind(null,Ga.median)};function xa(e,t,r,s){return s===1?t==null?[]:[t]:s===2?(t!=null&&r.push(t),r):r!=null&&r.length>0?e(r):null}a(xa,"aggregateFunction");function IW(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(xy.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),xy.isEmpty(this.__ala__.res[r])){let s=yW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(IW,"searchJSON")});var Yy=m((Doe,$y)=>{"use strict";var We=require("moment"),Wh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;$y.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(Wh),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(Wh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(Wh)}});var zy=m((Loe,Qy)=>{"use strict";var wW=require("@turf/area"),CW=require("@turf/length"),UW=require("@turf/circle"),DW=require("@turf/difference"),LW=require("@turf/distance"),MW=require("@turf/boolean-contains"),PW=require("@turf/boolean-equal"),vW=require("@turf/boolean-disjoint"),BW=require("@turf/helpers"),Ky=A(),le=V();Qy.exports={geoArea:HW,geoLength:qW,geoCircle:FW,geoDifference:GW,geoDistance:Wy,geoNear:xW,geoContains:kW,geoEqual:VW,geoCrosses:$W,geoConvert:YW};var Qh="geo1 is required",zh="geo2 is required";function HW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),wW.default(e)}a(HW,"geoArea");function qW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),CW.default(e,{units:t||"kilometers"})}a(qW,"geoLength");function FW(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)),UW.default(e,t,{units:r||"kilometers"})}a(FW,"geoCircle");function GW(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)),DW(e,t)}a(GW,"geoDifference");function Wy(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)),LW.default(e,t,{units:r||"kilometers"})}a(Wy,"geoDistance");function xW(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 Wy(e,t,s)<=r}a(xW,"geoNear");function kW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),MW.default(e,t)}a(kW,"geoContains");function VW(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),PW.default(e,t)}a(VW,"geoEqual");function $W(e,t){if(le.isEmpty(e))throw new Error(Qh);if(le.isEmpty(e))throw new Error(zh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!vW.default(e,t)}a($W,"geoCrosses");function YW(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(Ky.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(Ky.GEO_CONVERSION_ENUM).join(",")}`);return BW[t](e,r)}a(YW,"geoConvert")});var wl=m((Poe,Jy)=>{var ni=Vy(),lr=Yy(),us=zy();Jy.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=lr.current_date,e.fn.current_time=e.fn.CURRENT_TIME=lr.current_time,e.fn.extract=e.fn.EXTRACT=lr.extract,e.fn.date=e.fn.DATE=lr.date,e.fn.date_format=e.fn.DATE_FORMAT=lr.date_format,e.fn.date_add=e.fn.DATE_ADD=lr.date_add,e.fn.date_sub=e.fn.DATE_SUB=lr.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=lr.date_diff,e.fn.now=e.fn.NOW=lr.now,e.fn.offset_utc=e.fn.OFFSET_UTC=lr.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=lr.get_server_time,e.fn.getdate=e.fn.GETDATE=lr.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=lr.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 eI=m((voe,jy)=>{"use strict";var ka=require("lodash"),pt=require("alasql");pt.options.cache=!1;var KW=wl(),Xy=require("clone"),Cl=require("recursive-iterator"),se=x(),ne=V(),eo=qr(),WW=A(),{hdb_errors:QW}=W(),{getDatabases:Zy}=(de(),re(Ne)),zW="IS NULL",Vr="There was a problem performing this search. Please check the logs and try again.";KW(pt);var Jh=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 Cl(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(Xy(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=ka.uniqBy(t,r=>[r.databaseid,r.tableid,r.as].join()),this.tables.forEach(r=>{let s=`${r.databaseid}_${r.as?r.as:r.tableid}`;this.data[s]={},this.data[s].__hash_name=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 Cl(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 Cl(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(WW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ne.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ne.isEmptyOrZeroLength(r.left.columnid)||ne.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ne.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ne.isEmpty(r.right.value)||!ne.isEmpty(r.left.value)?s.add(ne.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from)&&ne.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&ka.pullAt(this.statement.columns,t)}_findColumn(t){let r=this.all_table_attributes.filter(s=>{if(t.columnid_orig&&t.tableid_orig)return(s.table.as===t.tableid_orig||s.table.tableid===t.tableid_orig)&&s.attribute===t.columnid_orig;if(t.tableid)return(s.table.as===t.tableid||s.table.tableid===t.tableid)&&s.attribute===t.columnid;let n=t.columnid_orig?t.columnid_orig:t.columnid;return s.attribute===n});if(ne.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ne.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&!ne.isEmptyOrZeroLength(this.columns.columns))return t;if(ne.isEmptyOrZeroLength(this.all_table_attributes)&&ne.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw se.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),se.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push(Xy(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(zW)>-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=ka.uniqBy(this.fetch_attributes,n=>[n.table.databaseid,n.table.as?n.table.as:n.table.tableid,n.attribute].join()),r)return await this._simpleSQLQuery();let s=this.fetch_attributes.reduce((n,i)=>{let o=`${i.table.databaseid}_${i.table.as?i.table.as:i.table.tableid}`,c=this.data[o].__hash_name;return n[o]||(n[o]=[],n[o].push(null),this._addColumnToMergedAttributes(o,c)),i.attribute!==c&&(n[o].push(null),this._addColumnToMergedAttributes(o,i.attribute)),n},{});for(let n of this.fetch_attributes){let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`,o=this.data[i].__hash_name,c={schema:n.table.databaseid,table:n.table.tableid,get_attributes:[n.attribute]},u=!1,l=[n.table.databaseid,n.table.tableid,n.attribute].join("/");if(n.attribute===o&&(u=!0),!ne.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await eo.getDataByHash(c);for(let d of c.hash_values)_.get(d)&&!this.data[i].__merged_data[d]&&(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,d))}catch(_){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await eo.getDataByValue(d);for(let[f,h]of E)this.data[i].__merged_data[f]?this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]):(this.data[i].__merged_data[f]=[...s[i]],this._updateMergedAttribute(i,f,n.attribute,h[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(f)))}))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),se.error(_),new Error(Vr)}else if(!ne.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ne.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await eo.getDataByValue(c,f.operation);if(u)for(let[T]of h)this.data[i].__merged_data[T]||(this.data[i].__merged_data[T]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(T)));else for(let[T,p]of h)this.data[i].__merged_data[T]?this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]):(this.data[i].__merged_data[T]=[...s[i]],this._updateMergedAttribute(i,T,n.attribute,p[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(T)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(Vr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await eo.getDataByValue(c);if(u)for(let[d]of _)this.data[i].__merged_data[d]||(this.data[i].__merged_data[d]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(d)))}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),se.error(_),new Error(Vr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof pt.yy.Column||(t=!1)}),t)}_updateOrderByToAliases(){this.statement.order.forEach(t=>{if(t.expression.aggregatorid){t.is_aggregator=!0;return}if(t.expression.value){t.is_ordinal=!0,this.has_ordinal=!0;return}else t.is_ordinal=!1;let r=this.statement.columns.filter(n=>{let i=n.aggregatorid?n.expression:n,o=n.aggregatorid?n.as_orig:i.as_orig;return t.expression.tableid?i.columnid_orig===t.expression.columnid_orig&&i.tableid_orig===t.expression.tableid_orig:i.columnid_orig===t.expression.columnid_orig||t.expression.columnid_orig===o});r[0]||r.push(this._findColumn(t.expression));let s=r[0];if(t.is_func=!!s.funcid,t.is_aggregator=!!s.aggregatorid,s.as)if(s.as&&!t.expression.tableid)t.expression.columnid=s.as,t.expression.columnid_orig=s.as_orig;else{let n=new pt.yy.Column;n.columnid=s.as,n.columnid_orig=s.as_orig,t.expression=n}else{t.initial_select_column=Object.assign(new pt.yy.Column,t.expression),t.initial_select_column.as=`[${t.expression.columnid_orig}]`,t.expression.columnid=t.initial_select_column.as;return}if(!t.is_aggregator){let n=t.is_func?new pt.yy.FuncValue:new pt.yy.Column;t.initial_select_column=Object.assign(n,s)}})}_addNonAggregatorsToFetchColumns(){let r=this.statement.order.filter(s=>!s.is_aggregator&&!s.is_ordinal).map(s=>s.is_func?{columnid:s.initial_select_column.args.filter(i=>!!i.columnid_orig)[0].columnid_orig}:{columnid:s.expression.columnid_orig});this._addFetchColumns(r)}async _processJoins(){let t=[],r=[],s=this.statement.from[0],n=[s],i=["? "+(s.as?" AS "+s.as:s.tableid)];t.push(Object.values(this.data[`${s.databaseid_orig}_${s.as?s.as_orig:s.tableid_orig}`].__merged_data)),this.statement.joins&&this.statement.joins.forEach(f=>{f.joinmode&&f.joinmode!=="INNER"&&(this.has_outer_join=!0),n.push(f.table);let h=f.joinmode+" JOIN ? AS "+(f.as?f.as:f.table.tableid);f.on&&(h+=" ON "+f.on.toString()),i.push(h),t.push(Object.values(this.data[`${f.table.databaseid_orig}_${f.table.as?f.table.as_orig:f.table.tableid_orig}`].__merged_data))});let o=[],c={};n.forEach(f=>{let h=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__hash_name,T=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${T}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${T}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await pt.promise(h,t),t=null}catch(f){throw se.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),se.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let T=E[f];o.forEach(p=>{T[p.key]!==null&&T[p.key]!==void 0&&p.keys.add(T[p.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),T=ka.difference(h,[...f.keys].map(p=>p.toString()));for(let p=0,R=T.length;p<R;p++){let O=T[p];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new Cl(this.columns);for(let{node:i}of n)if(i&&i.columnid){let o=this._findColumn(i);if(o){let c=o.table.as?o.table.as:o.table.tableid;(!t[c]||t[c].indexOf(o.attribute)<0)&&s.push(o)}}s=ka.uniqBy(s,i=>[i.table.databaseid,i.table.as?i.table.as:i.table.tableid,i.attribute].join());try{await this._getData(s)}catch(i){throw se.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),se.error(i),new Error(Vr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await eo.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let T=n.columns[h],p=f[T]===void 0?null:f[T];this.data[s].__merged_data[E].push(p)}}}}catch(r){throw se.error("Error thrown from getDataByHash function in SQLSearch class method getData."),se.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();se.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),se.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw se.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),se.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return se.error(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((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await eo.getDataByValue(i);for(let[c,u]of o)this.data[n].__merged_data[c]||(u[s.attribute]===void 0&&(u[s.attribute]=null),this.data[n].__merged_data[c]=Object.assign({},r[n])),this.data[n].__merged_data[c][t[s.attribute]]=u[s.attribute]??null}catch(o){throw se.error("There was an error when processing this SQL operation. Check your logs"),se.error(o),new Error(Vr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};jy.exports=Jh});var Nr=m((Hoe,tI)=>{"use strict";var JW=cA();tI.exports={searchByConditions:ZW,searchByHash:jW,searchByValue:eQ,search:tQ};var Xh=qr(),{transformReq:Zh}=V(),XW=eI();async function ZW(e){return Zh(e),Xh.searchByConditions(e)}a(ZW,"searchByConditions");async function jW(e){Zh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Xh.searchByHash(e))r&&t.push(r);return t}a(jW,"searchByHash");async function eQ(e){Zh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Xh.searchByValue(e))t.push(r);return t}a(eQ,"searchByValue");function tQ(e,t){try{let r=new JW(e);r.validate(),new XW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(tQ,"search")});var Ul=m((Foe,rI)=>{"use strict";var rQ=qr();rI.exports={writeTransaction:sQ};function sQ(e,t,r){return rQ.writeTransaction(e,t,r)}a(sQ,"writeTransaction")});var oI=m((koe,iI)=>{"use strict";var nQ=Nr(),iQ=Gs(),sI=x(),oQ=br(),xoe=Ul(),aQ=require("clone"),em=require("alasql"),cQ=wl(),nI=require("util"),uQ=nI.promisify(iQ.getTableSchema),lQ=nI.promisify(nQ.search),_Q=A(),jh=V();cQ(em);iI.exports={update:EQ};var dQ="There was a problem performing this update. Please check the logs and try again.";async function EQ({statement:e,hdb_user:t}){let r=await uQ(e.table.databaseid,e.table.tableid),s=fQ(e.columns);jh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=aQ(n),c=jh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=em.parse(u).statements[0],_=await lQ(l),d=hQ(s,_);return mQ(o,d,t)}a(EQ,"update");function fQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=em.compile(`SELECT ${r.expression.toString()} AS [${_Q.FUNC_VAL}] FROM ?`)}),t}catch(t){throw sI.error(t),new Error(dQ)}}a(fQ,"createUpdateRecord");function hQ(e,t){return jh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(hQ,"buildUpdateRecords");async function mQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await oQ.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){sI.error(`Error delete new_attributes from update response: ${i}`)}return n}a(mQ,"updateRecords")});var cI=m((Koe,aI)=>{var SQ=require("alasql"),pQ=Nr(),TQ=x(),RQ=qr(),rm=require("util"),tm=V(),gQ=A(),AQ=Gs(),$oe=Ul(),Yoe=br(),OQ="record",NQ="successfully deleted",bQ=rm.callbackify(CQ),yQ=rm.promisify(pQ.search),IQ=rm.promisify(AQ.getTableSchema);aI.exports={convertDelete:bQ};function wQ(e){return`${e.deleted_hashes.length} ${OQ}${e.deleted_hashes.length===1?"":"s"} ${NQ}`}a(wQ,"generateReturnMessage");async function CQ({statement:e,hdb_user:t}){let r=await IQ(e.table.databaseid,e.table.tableid);tm.backtickASTSchemaItems(e);let{table:s,where:n}=e,i=tm.isEmpty(n)?"":` WHERE ${n.toString()}`,o=`SELECT ${r.hash_attribute} FROM ${s.toString()} ${i}`,c=SQ.parse(o).statements[0],u={operation:gQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await yQ(c);let l=await RQ.deleteRecords(u);return tm.isEmptyOrZeroLength(l.message)&&(l.message=wQ(l)),delete l.txn_time,l}catch(l){throw TQ.error(l),l.hdb_code?l.message:l}}a(CQ,"convertDelete")});var EI=m((Qoe,dI)=>{"use strict";var UQ=Qn(),{hdb_errors:uI}=W(),{getDatabases:lI}=(de(),re(Ne));dI.exports={checkSchemaExists:_I,checkSchemaTableExists:DQ,schema_describe:UQ};async function _I(e){if(!lI()[e])return uI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(_I,"checkSchemaExists");async function DQ(e,t){let r=await _I(e);if(r)return r;if(!lI()[e][t])return uI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(DQ,"checkSchemaTableExists")});var Va=m((Joe,LQ)=>{LQ.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 vl={};et(vl,{addAnalyticsListener:()=>om,recordAction:()=>ls,recordActionBinary:()=>to,setAnalyticsEnabled:()=>MQ});function MQ(e){OI=e}function ls(e,t,r,s,n){if(!OI)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=Ml.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},Ml.set(i,o)),Ll||PQ()}function to(e,t,r,s,n){ls(e?1:0,t,r,s,n)}function om(e){bI.push(e)}function PQ(){Ll=performance.now(),setTimeout(()=>{let e=performance.now()-Ll;Ll=0;let t=[],r={time:Date.now(),period:e,threadId:ii.threadId,metrics:t};for(let[n,i]of Ml)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 bI)n(t);Ml=new Map,ii.parentPort?ii.parentPort.postMessage({type:NI,report:r}):II({report:r})},im).unref()}async function vQ(e,t=6e4){let r=am(),s;for(let _ of r.primaryStore.getRange({start:Dl+"z",end:Dl,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:T,type:p,metric:R,count:O,threadId:k,...$}=f;O||(O=1);let U=R+(h?"-"+h:"");T&&(U+="-"+T);let b=i.get(U);if(b)for(let P in $){let z=$[P];if(typeof z=="number"){let q=b.count||1;b[P]=(b[P]*q+z*O)/(b.count=q+O)}}else b=Object.assign({period:t},f),i.set(U,b)}await BQ()}for(let[_,d]of i)d.id=Dl+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:Dl+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-fI,active:l-hI,time:c}),fI=u,hI=l}async function HQ(e,t){let r=am(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function am(){return mI||(mI=nt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function FQ(){yI=!0,setInterval(async()=>{await vQ(im,nm),await HQ(qQ,im)},nm/2).unref()}function II(e,t){let r=e.report;r.threadId=t?.threadId||ii.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(SI+=s.mean*s.count);r.totalBytesProcessed=SI,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(pI.get(t))}),pI.set(t,t.performance.eventLoopUtilization())),r.id=(0,gI.getNextMonotonicTime)(),am().put(r),yI||FQ(),GQ&&(wI=kQ(r))}async function kQ(e){if(await wI,!Tn){let r=(0,$a.dirname)((0,RI.getLogFilePath)());try{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"r+")}catch{Tn=await(0,sm.open)((0,$a.join)(r,"analytics.log"),"w+")}}let t=(await Tn.stat()).size;if(t>xQ){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,TI,RI,$a,sm,gI,Pl,AI,Ml,nm,OI,Ll,im,NI,bI,Dl,fI,hI,BQ,qQ,mI,yI,SI,pI,GQ,wI,Tn,xQ,oi=Se(()=>{ii=require("worker_threads"),TI=C(dt());de();RI=C(x()),$a=require("path"),sm=require("fs/promises"),gI=C(Ht()),Pl=C(Q()),AI=C(A());Jr();(0,Pl.initSync)();Ml=new Map,nm=(0,Pl.get)(AI.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3,OI=nm>0;a(MQ,"setAnalyticsEnabled");a(ls,"recordAction");rt.recordAnalytics=ls;a(to,"recordActionBinary");Ll=0,im=1e3,NI="analytics-report",bI=[];a(om,"addAnalyticsListener");a(PQ,"sendAnalytics");Dl="sum-";a(vQ,"aggregation");fI=0,hI=0,BQ=a(()=>new Promise(setImmediate),"rest");a(HQ,"cleanup");qQ=36e5;a(am,"getAnalyticsTable");(0,TI.setChildListenerByType)(NI,II);a(FQ,"startScheduledTasks");SI=0,pI=new Map,GQ=!1;a(II,"recordAnalytics");xQ=1e6;a(kQ,"logAnalytics")});var Qe=m((lae,WI)=>{"use strict";var Tt=Q();Tt.initSync();var VQ=require("fs-extra"),$Q=require("semver"),Qa=require("path"),{monotonicFactory:YQ}=require("ulidx"),_m=YQ(),KQ=require("util"),UI=require("child_process"),WQ=KQ.promisify(UI.exec),QQ=UI.spawn,_e=Be(),Te=A(),Bl=V(),yr=x(),Hl=Fs(),zQ=Ul(),Ya=Rr(),{Encoder:JQ,decode:dm}=require("msgpackr"),DI=new JQ,{isEmpty:ai}=Bl,LI=ar(),MI=12e10,XQ=48*36e11,ZQ=5e9,{connect:jQ,StorageType:PI,RetentionPolicy:vI,AckPolicy:ql,DeliverPolicy:Fl,DiscardPolicy:ez,NatsConnection:oae,JetStreamManager:aae,JetStreamClient:cae,StringCodec:uae,JSONCodec:tz,createInbox:Em,headers:rz,ErrorCode:CI}=require("nats"),{PACKAGE_ROOT:sz}=A(),nz=Va(),{recordAction:iz}=(oi(),re(vl)),BI=tz(),oz="clustering",az=nz.engines[_e.NATS_SERVER_NAME],cz=Qa.join(sz,"dependencies"),lm=Qa.join(cz,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),cm,um,Ka,ro,so;WI.exports={runCommand:HI,checkNATSServerInstalled:uz,createConnection:fm,getConnection:Gl,getJetStreamManager:za,getJetStream:qI,getNATSReferences:Gt,getServerList:_z,createLocalStream:hm,listStreams:FI,deleteLocalStream:dz,getServerConfig:Ja,listRemoteStreams:Ez,viewStream:fz,viewStreamIterator:hz,publishToStream:mz,createWorkQueueStream:Sz,addSourceToWorkStream:xI,request:Tz,removeSourceFromWorkStream:VI,reloadNATS:mm,reloadNATSHub:Rz,reloadNATSLeaf:gz,extractServerName:kI,requestErrorHandler:Az,updateWorkStream:Oz,createLocalTableStream:YI,createTableStreams:Nz,purgeTableStream:KI,purgeSchemaTableStreams:bz,getStreamInfo:yz,updateLocalStreams:wz,closeConnection:lz,getJsmServerName:Xa,addNatsMsgHeader:GI,updateIngestStreamConsumer:pz};async function HI(e,t=void 0){let{stdout:r,stderr:s}=await WQ(e,{cwd:t});if(s)throw new Error(s.replace(`
7
7
  `,""));return r.replace(`
8
- `,"")}a(PI,"runCommand");async function nz(){try{await qQ.access(am)}catch{return!1}let e=await PI(`${am} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return FQ.eq(t,rz)}a(nz,"checkNATSServerInstalled");async function _m(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await CI.getClusterUser();if(oi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Nr.trace("create nats connection called");let i=await QQ({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:Tt.get(Te.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Nr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(_m,"createConnection");async function iz(){us&&(await us.drain(),us=void 0,to=void 0,ro=void 0,Ya=void 0)}a(iz,"closeConnection");var us,Ya;async function Hl(){return Ya||(Ya=_m(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),us=await Ya),us||Ya}a(Hl,"getConnection");async function Wa(){if(to)return to;oi(us)&&await Hl();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return to=await us.jetstreamManager({domain:e}),to}a(Wa,"getJetStreamManager");async function vI(){if(ro)return ro;oi(us)&&await Hl();let{domain:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(oi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=us.jetstream({domain:e}),ro}a(vI,"getJetStream");async function Gt(){let e=us||await Hl(),t=to||await Wa(),r=ro||await vI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function oz(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await CI.getClusterUser(),n=await _m(t,r,s),i=lm(),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 Ml.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(oz,"getServerList");async function dm(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:zQ.Old,duplicate_window:UI,max_msgs:n,max_bytes:i,max_age:s})}a(dm,"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 az(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(az,"deleteLocalStream");async function cz(e){let{connection:t}=await Gt(),r=[],s=lm(),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(cz,"listRemoteStreams");async function uz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=cm(),o={durable_name:i,ack_policy:vl.Explicit};t&&(o.deliver_policy=Bl.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=um(_.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(uz,"viewStream");async function*lz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=cm(),o={durable_name:i,ack_policy:vl.Explicit};t&&(o.deliver_policy=Bl.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 _=um(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(lz,"viewStreamIterator");async function _z(e,t,r,s){Nr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=HI(s,r);let{js:n}=await Gt(),i=await za(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:wI.encode(s);try{Nr.trace(`publishToStream publishing to subject: ${o}`),ez(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"){Nr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await dm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(_z,"publishToStream");function HI(e,t){t===void 0&&(t=XQ());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Ml.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${cm()}`;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 Qa(e){e=e.toLowerCase();let t=Ka.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),tz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return oi(om)&&(om={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Ka.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),om;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return oi(im)&&(im={port:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Va.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Ka.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),im;Nr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Qa,"getServerConfig");async function dz(e){let{jsm:t}=await Gt(),r=await za();try{await t.streams.add({name:e.stream_name,storage:DI.File,retention:LI.Limits,duplicate_window:UI,max_age:KQ,max_bytes:WQ,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:vl.Explicit,durable_name:e.durable_name,deliver_policy:Bl.All,max_ack_pending:1e4});else throw s}}a(dz,"createWorkQueueStream");async function Ez(){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:vl.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Bl.All,max_ack_pending:1e4}))}a(Ez,"updateIngestStreamConsumer");async function qI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=FI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Pl.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let T=0,S=n.config.sources.length;T<S;T++)if(d=n.config.sources[T],E=T,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(qI,"addSourceToWorkStream");function FI(e){return e.split(".")[1]}a(FI,"extractServerName");async function GI(e,t,r){let{schema:s,table:n}=r,i=Pl.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 fz(e,t,r=2e4,s=lm()){if(!Ml.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 um(c.data)}a(fz,"request");function Em(e){return new Promise(async(t,r)=>{let s=VQ(am,["--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(Em,"reloadNATS");async function hz(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await Em(e)}a(hz,"reloadNATSHub");async function mz(){let{pid_file_path:e}=Qa(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await Em(e)}a(mz,"reloadNATSLeaf");function Sz(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(Sz,"requestErrorHandler");async function pz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await xI(async()=>{e.subscribe===!0?await qI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await GI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(pz,"updateWorkStream");function xI(e){return $Q.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(xI,"exclusiveLock");async function kI(e,t){let r=Pl.createNatsTableStreamName(e,t),s=await za(),n=Az(e,t,s);await dm(r,[n])}a(kI,"createLocalTableStream");async function Tz(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(Tz,"createTableStreams");async function VI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Pl.createNatsTableStreamName(e,t),{jsm:s}=await Gt();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Nr.warn(r);else throw r}}a(VI,"purgeTableStream");async function Rz(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(Rz,"purgeSchemaTableStreams");async function gz(e){return(await Wa()).streams.info(e)}a(gz,"getStreamInfo");function Az(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Az,"createSubjectName");async function za(){if($a)return $a;if($a=(await Wa())?.nc?.info?.server_name,$a===void 0)throw new Error("Unable to get jetstream manager server name");return $a}a(za,"getJsmServerName");async function Oz(){let e=await Wa(),t=await za(),r=await BI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Nz(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===_e.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===_e.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${_e.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;Nr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else{let l=i.split(".");l[l.length-1]=t;let _=l.join(".");Nr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(Oz,"updateLocalStreams");function Nz(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(Nz,"updateStreamLimits")});var xl=m((aae,QI)=>{"use strict";var so=Yu(),no=lI(),bz=F(),yz=require("uuid").v4,oae=require("clone"),Fl=Fs(),io=g(),Iz=require("util"),Tn=qr(),{handleHDBError:xt,hdb_errors:wz}=W(),{HDB_ERROR_MSGS:ql,HTTP_STATUS_CODES:kt}=wz,{SchemaEventMsg:Gl}=Fr(),YI=Qe(),{getDatabases:Cz}=(de(),te(Ne)),{transformReq:oo}=x();QI.exports={createSchema:Uz,createSchemaStructure:KI,createTable:Dz,createTableStructure:WI,createAttribute:Bz,dropSchema:Lz,dropTable:Mz,dropAttribute:Pz,getBackup:Hz};async function Uz(e){let t=await KI(e);return Fl.signalSchemaChange(new Gl(process.pid,e.operation,e.schema)),t}a(Uz,"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 Tn.createSchema(e),`database '${e.schema}' successfully created`}a(KI,"createSchemaStructure");async function Dz(e){return oo(e),await WI(e)}a(Dz,"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:yz(),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}}a(WI,"createTableStructure");async function Lz(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 Tn.dropSchema(e),Fl.signalSchemaChange(new Gl(process.pid,e.operation,e.schema)),await YI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Lz,"dropSchema");async function Mz(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 Tn.dropTable(e),await YI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(Mz,"dropTable");async function Pz(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 Tn.dropAttribute(e),vz(e),Fl.signalSchemaChange(new Gl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw bz.error(`Got an error deleting attribute ${Iz.inspect(e)}.`),s}}a(Pz,"dropAttribute");function vz(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(vz,"dropAttributeFromGlobal");async function Bz(e){oo(e);let t=Cz()[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),Fl.signalSchemaChange(new Gl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(Bz,"createAttribute");function Hz(e){return Tn.getBackup(e)}a(Hz,"getBackup")});var JI=m((uae,zI)=>{"use strict";var{OPERATIONS_ENUM:qz}=g(),fm=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=fm});var hm=m((dae,tw)=>{"use strict";var Fz=qr(),_ae=JI(),kl=x(),Vl=g(),Gz=Q(),{handleHDBError:XI,hdb_errors:xz}=W(),{HDB_ERROR_MSGS:ZI,HTTP_STATUS_CODES:jI}=xz,kz=Object.values(Vl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),ew="To use this operation audit log must be enabled in harperdb-config.yaml";tw.exports=Vz;async function Vz(e){if(kl.isEmpty(e.schema))throw new Error(ZI.SCHEMA_REQUIRED_ERR);if(kl.isEmpty(e.table))throw new Error(ZI.TABLE_REQUIRED_ERR);if(!Gz.get(Vl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw XI(new Error,ew,jI.BAD_REQUEST,Vl.LOG_LEVELS.ERROR,ew,!0);let t=kl.checkSchemaTableExist(e.schema,e.table);if(t)throw XI(new Error,t,jI.NOT_FOUND,Vl.LOG_LEVELS.ERROR,t,!0);if(!kl.isEmpty(e.search_type)&&kz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await Fz.readAuditLog(e)}a(Vz,"readAuditLog")});var sw=m((fae,rw)=>{"use strict";var{OPERATIONS_ENUM:$z}=g(),mm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=$z.GET_BACKUP,this.schema=t,this.table=r}};rw.exports=mm});var ow=m((pae,iw)=>{"use strict";var Yz=qr(),mae=sw(),Sm=x(),Kz=g(),Sae=Q(),{handleHDBError:Wz,hdb_errors:Qz}=W(),{HDB_ERROR_MSGS:nw,HTTP_STATUS_CODES:zz}=Qz;iw.exports=Jz;async function Jz(e){if(Sm.isEmpty(e.schema))throw new Error(nw.SCHEMA_REQUIRED_ERR);if(Sm.isEmpty(e.table))throw new Error(nw.TABLE_REQUIRED_ERR);let t=Sm.checkSchemaTableExist(e.schema,e.table);if(t)throw Wz(new Error,t,zz.NOT_FOUND,Kz.LOG_LEVELS.ERROR,t,!0);return await Yz.getBackup(read_audit_log_object)}a(Jz,"getBackup")});var dw=m((Rae,_w)=>{var Rn=require("validate.js"),cw=Pe(),ao=g(),{handleHDBError:Xz,hdb_errors:Zz}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:jz}=Zz,pm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),eJ={STRUCTURE_USER:"structure_user"},aw=Object.values(ao.ROLE_TYPES_ENUM),tJ="attribute_permissions",rJ="attribute_name",{PERMS_CRUD_ENUM:co}=ao,sJ=[tJ,...Object.values(co)],uw=[co.READ,co.INSERT,co.UPDATE],nJ=[rJ,...uw];function iJ(e){let t=pm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,lw(e,t)}a(iJ,"addRoleValidation");function oJ(e){let t=pm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,lw(e,t)}a(oJ,"alterRoleValidation");function aJ(e){let t=pm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,cw.validateObject(e,t)}a(aJ,"dropRoleValidation");var cJ=["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++)cJ.includes(s[o])||n.push(s[o]);n.length>0&&ze(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=cw.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=uJ(e);o&&ze(o,r),aw.forEach(c=>{e.permission[c]&&!Rn.isBoolean(e.permission[c])&&ze(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(aw.indexOf(o)<0){if(o===eJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze(Ve.SCHEMA_NOT_FOUND(d),r)}continue}ze(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze(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]){ze(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{sJ.includes(_)||ze(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(co).forEach(_=>{Rn.isDefined(l[_])?Rn.isBoolean(l[_])||ze(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze(Ve.TABLE_PERM_MISSING(_),r,o,u)}),Rn.isDefined(l.attribute_permissions)){if(!Rn.isArray(l.attribute_permissions)){ze(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze(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=>{!nJ.includes(T)&&T!==co.DELETE&&ze(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!Rn.isDefined(f.attribute_name)){ze(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}uw.forEach(T=>{Rn.isDefined(f[T])?Rn.isBoolean(f[T])||ze(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze(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}`;ze(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return lJ(r)}a(lw,"customValidate");_w.exports={addRoleValidation:iJ,alterRoleValidation:oJ,dropRoleValidation:aJ};function uJ(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(uJ,"validateNoSUPerms");function lJ(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 Xz(new Error,s,jz.BAD_REQUEST)}else return null}a(lJ,"generateRolePermResponse");function ze(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ze,"addPermError")});var Nm=m((Aae,mw)=>{"use strict";var Ew=Or(),fw=Ar(),_J=Zn(),Rm=dw(),gm=Fs(),dJ=require("uuid").v4,EJ=require("util"),$l=g(),fJ=x(),Am=fw.searchByValue,hJ=fw.searchByHash,mJ=EJ.promisify(_J.delete),SJ=is(),pJ=Xi(),{hdb_errors:TJ,handleHDBError:uo}=W(),{HDB_ERROR_MSGS:hw,HTTP_STATUS_CODES:Yl}=TJ,{UserEventMsg:Om}=Fr();mw.exports={addRole:RJ,alterRole:gJ,dropRole:AJ,listRoles:OJ};function Tm(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(Tm,"scrubRoleDetails");async function RJ(e){let t=Rm.addRoleValidation(e);if(t)throw t;e=Tm(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 Am(r)||[])}catch(i){throw uo(i)}if(s&&s.length>0)throw uo(new Error,hw.ROLE_ALREADY_EXISTS(e.role),Yl.CONFLICT,void 0,void 0,!0);e.id||(e.id=dJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await Ew.insert(n),gm.signalUserChange(new Om(process.pid)),e=Tm(e),e}a(RJ,"addRole");async function gJ(e){let t=Rm.alterRoleValidation(e);if(t)throw t;e=Tm(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",Yl.BAD_REQUEST,void 0,void 0,!0);return await gm.signalUserChange(new Om(process.pid)),e}a(gJ,"alterRole");async function AJ(e){let t=Rm.dropRoleValidation(e);if(t)throw uo(new Error,t,Yl.BAD_REQUEST,void 0,void 0,!0);let r=new pJ($l.SYSTEM_SCHEMA_NAME,$l.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await hJ(r));if(s.length===0)throw uo(new Error,hw.ROLE_NOT_FOUND,Yl.NOT_FOUND,void 0,void 0,!0);let n=new SJ($l.SYSTEM_SCHEMA_NAME,$l.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await Am(n)),o=!1;if(fJ.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 mJ(c),gm.signalUserChange(new Om(process.pid)),`${s[0].role} successfully deleted`}a(AJ,"dropRole");async function OJ(){return Am({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(OJ,"listRoles")});var Rw=m((Nae,Tw)=>{"use strict";var NJ=Q(),gn=require("joi"),bJ=Pe(),Sw=require("moment"),yJ=require("fs-extra"),bm=require("path"),IJ=require("lodash"),Ja=g(),{LOG_LEVELS:ai}=g(),wJ="YYYY-MM-DD hh:mm:ss",CJ=bm.resolve(__dirname,"../logs");Tw.exports=function(e){return bJ.validateBySchema(e,UJ)};var UJ=gn.object({from:gn.custom(pw),until:gn.custom(pw),level:gn.valid(ai.NOTIFY,ai.FATAL,ai.ERROR,ai.WARN,ai.INFO,ai.DEBUG,ai.TRACE),order:gn.valid("asc","desc"),limit:gn.number().min(1),start:gn.number().min(0),log_name:gn.custom(DJ)});function pw(e,t){if(Sw(e,Sw.ISO_8601).format(wJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(pw,"validateDatetime");function DJ(e,t){if(IJ.invert(Ja.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=NJ.get(Ja.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Ja.LOG_NAMES.HDB:e,i=n===Ja.LOG_NAMES.INSTALL?bm.join(CJ,Ja.LOG_NAMES.INSTALL):bm.join(s,n);return yJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(DJ,"validateReadLogPath")});var Im=m((yae,gw)=>{"use strict";var Kl=g(),LJ=F(),MJ=Q(),PJ=Rw(),ym=require("path"),vJ=require("fs-extra"),{once:BJ}=require("events"),{handleHDBError:HJ,hdb_errors:qJ}=W(),{PACKAGE_ROOT:FJ}=g(),GJ=ym.join(FJ,"logs"),xJ=1e3;gw.exports=kJ;async function kJ(e){let t=PJ(e);if(t)throw HJ(t,t.message,qJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=MJ.get(Kl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?Kl.LOG_NAMES.HDB:e.log_name,n=s===Kl.LOG_NAMES.INSTALL?ym.join(GJ,Kl.LOG_NAMES.INSTALL):ym.join(r,s),i=vJ.createReadStream(n);i.on("error",A=>{LJ.error(A)});let o=e.level!==void 0,c=o?e.level:void 0,u=e.from!==void 0,l=u?new Date(e.from):void 0,_=e.until!==void 0,d=_?new Date(e.until):void 0,E=e.limit===void 0?xJ:e.limit,f=e.order===void 0?void 0:e.order,h=e.start===void 0?0:e.start,T=h+E,S=0,y=[],O="",H;i.on("data",A=>{let w=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;A=O+A;let G=0,k;for(;(k=w.exec(A))&&!i.destroyed;){H&&(H.message=A.slice(G,k.index),Y(H));let[X,ge,ct]=k,Li=ct.split("] ["),ko=Li[0],Hn=Li[1];Li.splice(0,2),H={timestamp:ge,thread:ko,level:Hn,tags:Li,message:""},G=k.index+X.length}O=A.slice(G)}),i.on("end",A=>{i.destroyed||H&&(H.message=O.trim(),Y(H))}),i.resume();function Y(A){let w,G,k;switch(!0){case(o&&u&&_):w=new Date(A.timestamp),G=new Date(l),k=new Date(d),A.level===c&&w>=G&&w<=k&&S<h?S++:A.level===c&&w>=G&&w<=k&&(An(A,f,y),S++,S===T&&i.destroy());break;case(o&&u):w=new Date(A.timestamp),G=new Date(l),A.level===c&&w>=G&&S<h?S++:A.level===c&&w>=G&&(An(A,f,y),S++,S===T&&i.destroy());break;case(o&&_):w=new Date(A.timestamp),k=new Date(d),A.level===c&&w<=k&&S<h?S++:A.level===c&&w<=k&&(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 o: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 a(Y,"onLogMessage"),await BJ(i,"close"),y}a(kJ,"readLog");function An(e,t,r){t==="desc"?VJ(e,r):t==="asc"?$J(e,r):r.push(e)}a(An,"pushLineToResult");function VJ(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(VJ,"insertDescending");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,"insertAscending")});var Ql=m((Dae,bw)=>{"use strict";var wm=require("joi"),{string:Wl,boolean:Aw,date:YJ}=wm.types(),KJ=Pe(),{validateSchemaExists:wae,validateTableExists:Cae,validateSchemaName:Uae}=ts(),WJ=g(),QJ=Be(),Ow=Q();Ow.initSync();var zJ=Wl.invalid(Ow.get(WJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(QJ.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(),Nw={operation:Wl.valid("add_node","update_node"),node_name:zJ,subscriptions:wm.array().items({table:Wl.optional(),schema:Wl.required(),subscribe:Aw.required(),publish:Aw.required().custom(XJ),start_time:YJ.iso()}).min(1).required()};function JJ(e){return KJ.validateBySchema(e,wm.object(Nw))}a(JJ,"addUpdateNodeValidator");function XJ(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(XJ,"checkForFalsy");bw.exports={addUpdateNodeValidator:JJ,validation_schema:Nw}});var Iw=m((Mae,yw)=>{var ZJ=Pe(),jJ={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};yw.exports=function(e){return ZJ.validateObject(e,jJ)}});var Um=m((Pae,ww)=>{"use strict";var e2=g().OPERATIONS_ENUM,Cm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=e2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};ww.exports=Cm});var Uw=m((Bae,Cw)=>{"use strict";var t2={OPERATION:"operation",REFRESH:"refresh"},Dm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},Lm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Cw.exports={JWTTokens:Dm,TOKEN_TYPE_ENUM:t2,JWTRSAKeys:Lm}});var ja=m((qae,Pw)=>{"use strict";var Za=require("jsonwebtoken"),Mm=require("fs-extra"),Pm=x(),br=g(),{handleHDBError:Vt,hdb_errors:r2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=r2,Xa=F(),Dw=nl(),Hm=ar(),s2=Or().update,n2=Um(),i2=Fs(),{UserEventMsg:o2}=Fr(),On=Q();On.initSync();var vm=require("path"),{JWTTokens:a2,JWTRSAKeys:c2,TOKEN_TYPE_ENUM:zl}=Uw(),u2=On.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?On.get(br.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",l2=On.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?On.get(br.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",Jl="RS256",Bm;Pw.exports={createTokens:_2,validateOperationToken:E2,refreshOperationToken:d2,validateRefreshToken:Mw};async function _2(e){if(Pm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Pm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Pm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Hm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw Xa.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await Xl(),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 Lw(i,r.private_key,r.passphrase),c=await Za.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:l2,algorithm:Jl,subject:zl.REFRESH}),u=Dw.hash(c),l=new n2(br.SYSTEM_SCHEMA_NAME,br.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await s2(l)}catch(E){Xa.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return i2.signalUserChange(new o2(process.pid)),new a2(o,c)}a(_2,"createTokens");async function Lw(e,t,r){return await Za.sign(e,{key:t,passphrase:r},{expiresIn:u2,algorithm:Jl,subject:zl.OPERATION})}a(Lw,"signOperationToken");async function Xl(){if(Bm===void 0)try{let e=vm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PASSPHRASE_NAME),t=vm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=vm.join(On.getHdbBasePath(),br.LICENSE_KEY_DIR_NAME,br.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Mm.readFile(e)).toString(),n=(await Mm.readFile(t)).toString(),i=(await Mm.readFile(r)).toString();Bm=new c2(i,n,s)}catch(e){throw Xa.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Bm}a(Xl,"getJWTRSAKeys");async function d2(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 Mw(e.refresh_token);let t=await Xl(),r=await Za.decode(e.refresh_token);return{operation_token:await Lw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(d2,"refreshOperationToken");async function E2(e){try{let t=await Xl(),r=await Za.verify(e,t.public_key,{algorithms:Jl,subject:zl.OPERATION});return await Hm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw Xa.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(E2,"validateOperationToken");async function Mw(e){let t;try{let r=await Xl(),s=await Za.verify(e,r.public_key,{algorithms:Jl,subject:zl.REFRESH});t=await Hm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw Xa.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!Dw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Mw,"validateRefreshToken")});var qm=m((xae,Hw)=>{"use strict";var f2=Iw(),lo=require("passport"),h2=require("passport-local").Strategy,m2=require("passport-http").BasicStrategy,S2=require("util"),p2=ar(),Bw=S2.callbackify(p2.findAndValidateUser),Gae=rr(),T2=g(),vw=ja();lo.use(new h2(function(e,t,r){Bw(e,t,r)}));lo.use(new m2(function(e,t,r){Bw(e,t,r)}));lo.serializeUser(function(e,t){t(null,e)});lo.deserializeUser(function(e,t){t(null,e)});function R2(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===T2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?vw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):vw.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(R2,"authorize");function g2(e,t){let r=f2(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(g2,"checkPermissions");Hw.exports={authorize:R2,checkPermissions:g2}});var _o=m((Vae,qw)=>{"use strict";var Fm=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Gm=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:Gm}});var Gw=m((Yae,Fw)=>{"use strict";var A2=g().OPERATIONS_ENUM,xm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=A2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Fw.exports=xm});var ec=m((Wae,xw)=>{"use strict";var km=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},Vm=class{static{a(this,"RemotePayloadSubscription")}constructor(t,r,s,n,i,o,c){this.schema=t,this.table=r,this.hash_attribute=s,this.publish=n,this.subscribe=i,this.start_time=o,this.attributes=c}};xw.exports={RemotePayloadObject:km,RemotePayloadSubscription:Vm}});var Vw=m((zae,kw)=>{"use strict";var $m=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}};kw.exports=$m});var Kw=m((ece,Yw)=>{"use strict";var O2=Vw(),Xae=xe(),$w=ye(),N2=F(),{getSchemaPath:Zae,getTransactionAuditStorePath:jae}=we(),{getDatabases:b2}=(de(),te(Ne));Yw.exports=y2;async function y2(e){let t=new O2;try{let r=b2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await $w.environmentDataSize(schema_path,e.name),o=await $w.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){N2.warn(`unable to stat table dbi due to ${r}`)}return t}a(y2,"lmdbGetTableSize")});var Qw=m((rce,Ww)=>{"use strict";var Ym=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}};Ww.exports=Ym});var Eo=m((oce,Zw)=>{"use strict";var I2=require("fs-extra"),w2=require("path"),Ut=require("systeminformation"),Nn=F(),C2=Qe(),Km=Be(),jl=g(),U2=Kw(),Xw=Wn(),{getThreadInfo:zw}=_t(),rS=Q();rS.initSync();var D2=Qw(),{openEnvironment:nce}=ye(),{getSchemaPath:ice}=we(),{database:L2}=(de(),te(Ne)),Zl;Zw.exports={getHDBProcessInfo:Jm,getNetworkInfo:Zm,getDiskInfo:Xm,getMemoryInfo:zm,getCPUInfo:Qm,getTimeInfo:Wm,getSystemInformation:jm,systemInformation:M2,getTableSize:eS,getMetrics:tS};function Wm(){return Ut.time()}a(Wm,"getTimeInfo");async function Qm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:S,cpus:y,...O}=await Ut.currentLoad();return O.cpus=[],y.forEach(H=>{let{raw_load:Y,raw_load_idle:A,raw_load_irq:w,raw_load_nice:G,raw_load_system:k,raw_load_user:X,...ge}=H;O.cpus.push(ge)}),_.current_load=O,_}catch(e){return Nn.error(`error in getCPUInfo: ${e}`),{}}}a(Qm,"getCPUInfo");async function zm(){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}`),{}}}a(zm,"getMemoryInfo");async function Jm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await I2.readFile(w2.join(rS.get(jl.CONFIG_PARAMS.ROOTPATH),jl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===jl.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}}a(Jm,"getHDBProcessInfo");async function Xm(){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 Nn.error(`error in getDiskInfo: ${t}`),e}}a(Xm,"getDiskInfo");async function Zm(){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 Nn.error(`error in getNetworkInfo: ${t}`),e}}a(Zm,"getNetworkInfo");async function jm(){if(Zl!==void 0)return Zl;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,Zl=e,Zl}catch(t){return Nn.error(`error in getSystemInformation: ${t}`),e}}a(jm,"getSystemInformation");async function eS(){let e=[],t=await Xw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await U2(s));return e}a(eS,"getTableSize");async function tS(){let e=await Xw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=L2({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){Nn.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(tS,"getMetrics");async function Jw(){if(rS.get(jl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await C2.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}}a(Jw,"getNatsStreamInfo");async function M2(e){let t=new D2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await jm(),t.time=Wm(),t.cpu=await Qm(),t.memory=await zm(),t.disk=await Xm(),t.network=await Zm(),t.harperdb_processes=await Jm(),t.table_size=await eS(),t.metrics=await tS(),t.threads=await zw(),t.replication=await Jw(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await jm();break;case"time":t.time=Wm();break;case"cpu":t.cpu=await Qm();break;case"memory":t.memory=await zm();break;case"disk":t.disk=await Xm();break;case"network":t.network=await Zm();break;case"harperdb_processes":t.harperdb_processes=await Jm();break;case"table_size":t.table_size=await eS();break;case"database_metrics":case"metrics":t.metrics=await tS();break;case"threads":t.threads=await zw();break;case"replication":t.replication=await Jw();break;default:break}return t}a(M2,"systemInformation")});var sS=m((lce,jw)=>{"use strict";var cce=require("fs-extra"),uce=F();jw.exports={version:P2,printVersion:B2,nodeVersion:v2};var bn=xa();function P2(){if(bn)return bn.version}a(P2,"version");function v2(){if(bn&&bn.engines&&bn.engines["preferred-node"])return bn.engines["preferred-node"]}a(v2,"nodeVersion");function B2(){bn&&console.log(`HarperDB Version ${bn.version}`)}a(B2,"printVersion")});var ks=m((fce,sC)=>{"use strict";var H2=Or(),nS=x(),q2=require("util"),ci=g(),eC=Q();eC.initSync();var F2=qm(),tC=Ar(),{Node:dce,NodeSubscription:Ece}=_o(),G2=Xi(),x2=Gw(),{RemotePayloadObject:k2,RemotePayloadSubscription:V2}=ec(),{handleHDBError:$2,hdb_errors:Y2}=W(),{HTTP_STATUS_CODES:K2,HDB_ERROR_MSGS:W2}=Y2,Q2=is(),z2=Eo(),J2=sS(),{getDatabases:X2}=(de(),te(Ne)),Z2=q2.promisify(F2.authorize),j2=tC.searchByHash,e3=tC.searchByValue;sC.exports={authHeaderToUser:t3,isEmpty:r3,getNodeRecord:s3,upsertNodeRecord:n3,buildNodePayloads:i3,checkClusteringEnabled:o3,getAllNodeRecords:a3,getSystemInfo:c3,reverseSubscription:rC};async function t3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await Z2(t,null),e}a(t3,"authHeaderToUser");function r3(e){return e==null}a(r3,"isEmpty");async function s3(e){let t=new G2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return j2(t)}a(s3,"getNodeRecord");async function n3(e){let t=new x2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return H2.upsert(t)}a(n3,"upsertNodeRecord");function rC(e){if(nS.isEmpty(e.subscribe)||nS.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(rC,"reverseSubscription");function i3(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,_=nS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=rC(c),f=X2()[u]?.[l],h=new V2(u,l,_,E,d,c.start_time,f.schemaDefined&&f.attributes);n.push(h)}return new k2(r,t,n,s)}a(i3,"buildNodePayloads");function o3(){if(!eC.get(ci.CONFIG_PARAMS.CLUSTERING_ENABLED))throw $2(new Error,W2.CLUSTERING_NOT_ENABLED,K2.BAD_REQUEST,void 0,void 0,!0)}a(o3,"checkClusteringEnabled");async function a3(){let e=new Q2(ci.SYSTEM_SCHEMA_NAME,ci.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await e3(e))}a(a3,"getAllNodeRecords");async function c3(){let e=await z2.getSystemInformation();return{hdb_version:J2.version(),node_version:e.node_version,platform:e.platform}}a(c3,"getSystemInfo")});var iS=m((mce,_C)=>{"use strict";var e_=Qe(),nC=x(),iC=Be(),oC=g(),t_=F(),aC=xl(),u3=Oh(),{RemotePayloadObject:l3}=ec(),{handleHDBError:cC,hdb_errors:_3}=W(),{HTTP_STATUS_CODES:uC}=_3,{NodeSubscription:lC}=_o();_C.exports=d3;async function d3(e,t){let r;try{r=await e_.request(`${t}.${iC.REQUEST_SUFFIX}`,new l3(oC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),t_.trace("Response from remote describe all request:",r)}catch(o){t_.error(`addNode received error from describe all request to remote node: ${o}`);let c=e_.requestErrorHandler(o,"add_node",t);throw cC(new Error,c,uC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===iC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw cC(new Error,o,uC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===oC.SYSTEM_SCHEMA_NAME){await e_.createLocalTableStream(c,u);let h=new lC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=nC.doesSchemaExist(c),_=s[c]!==void 0,d=u?nC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(t_.trace(`addNode creating schema: ${c}`),await aC.createSchema({operation:"create_schema",schema:c})),!d&&E){t_.trace(`addNode creating table: ${u} in schema: ${c}`);let h=new u3(c,u,s[c][u].hash_attribute);h.attributes=s[c][u].attributes,await aC.createTable(h)}await e_.createLocalTableStream(c,u);let f=new lC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(d3,"reviewSubscriptions")});var n_=m((pce,fC)=>{"use strict";var{handleHDBError:r_,hdb_errors:E3}=W(),{HTTP_STATUS_CODES:s_}=E3,{addUpdateNodeValidator:f3}=Ql(),tc=F(),EC=g(),dC=Be(),h3=x(),oS=Qe(),rc=ks(),m3=Q(),S3=iS(),{Node:p3,NodeSubscription:T3}=_o(),{broadcast:R3}=_t(),g3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",A3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",O3=m3.get(EC.CONFIG_PARAMS.CLUSTERING_NODENAME);fC.exports=N3;async function N3(e,t=!1){tc.trace("addNode called with:",e),rc.checkClusteringEnabled();let r=f3(e);if(r)throw r_(r,r.message,s_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await rc.getNodeRecord(s);if(!h3.isEmptyOrZeroLength(d))throw r_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,s_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await S3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=g3,o;let c=rc.buildNodePayloads(n,O3,EC.OPERATIONS_ENUM.ADD_NODE,await rc.getSystemInfo());tc.trace("addNode sending remote payload:",c);let u;try{u=await oS.request(`${s}.${dC.REQUEST_SUFFIX}`,c)}catch(d){tc.error(`addNode received error from request: ${d}`);let E=oS.requestErrorHandler(d,"add_node",s);throw r_(new Error,E,s_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===dC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw r_(new Error,d,s_.INTERNAL_SERVER_ERROR,"error",d)}tc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];tc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await oS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new T3(f.schema,f.table,f.publish,f.subscribe))}let _=new p3(s,l,u.system_info);return await rc.upsertNodeRecord(_),R3({type:"nats_update"}),i.length>0?o.message=A3:o.message=`Successfully added '${s}' to manifest`,o}a(N3,"addNode")});var cS=m((Rce,SC)=>{"use strict";var{handleHDBError:i_,hdb_errors:b3}=W(),{HTTP_STATUS_CODES:o_}=b3,{addUpdateNodeValidator:y3}=Ql(),sc=F(),mC=g(),hC=Be(),I3=x(),aS=Qe(),nc=ks(),w3=Q(),{cloneDeep:C3}=require("lodash"),U3=iS(),{NodeSubscription:D3}=_o(),{broadcast:L3}=_t(),M3="Unable to update 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",v3=w3.get(mC.CONFIG_PARAMS.CLUSTERING_NODENAME);SC.exports=B3;async function B3(e){sc.trace("updateNode called with:",e),nc.checkClusteringEnabled();let t=y3(e);if(t)throw i_(t,t.message,o_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=C3(await nc.getNodeRecord(r));if(I3.isEmptyOrZeroLength(s))throw i_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await U3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=M3,o;let c=nc.buildNodePayloads(n,v3,mC.OPERATIONS_ENUM.UPDATE_NODE,await nc.getSystemInfo());sc.trace("updateNode sending remote payload:",c);let u;try{u=await aS.request(`${r}.${hC.REQUEST_SUFFIX}`,c)}catch(l){sc.error(`updateNode received error from request: ${l}`);let _=aS.requestErrorHandler(l,"update_node",r);throw i_(new Error,_,o_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===hC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw i_(new Error,l,o_.INTERNAL_SERVER_ERROR,"error",l)}sc.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];sc.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await aS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await H3(s[0],n,u.system_info),i.length>0?o.message=P3:o.message=`Successfully updated '${r}'`,o}a(B3,"updateNode");async function H3(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 D3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await nc.upsertNodeRecord(s),L3({type:"nats_update"})}a(H3,"updateNodeTable")});var AC=m((Ace,gC)=>{"use strict";var RC=require("joi"),{string:pC}=RC.types(),q3=Pe(),TC=g(),F3=Q(),G3=Be();gC.exports=x3;function x3(e){let t=pC.invalid(F3.get(TC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(G3.NATS_TERM_CONSTRAINTS_RX).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >","any.invalid":"'node_name' cannot be this nodes name"}).empty(null),r=RC.object({operation:pC.valid(TC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return q3.validateBySchema(e,r)}a(x3,"removeNodeValidator")});var c_=m((Nce,wC)=>{"use strict";var{handleHDBError:OC,hdb_errors:k3}=W(),{HTTP_STATUS_CODES:NC}=k3,V3=AC(),ic=F(),bC=ks(),$3=x(),a_=g(),yC=Be(),IC=Qe(),Y3=Q(),{RemotePayloadObject:K3}=ec(),{NodeSubscription:W3}=_o(),Q3=Ma(),z3=Zn(),{broadcast:J3}=_t(),X3=Y3.get(a_.CONFIG_PARAMS.CLUSTERING_NODENAME);wC.exports=Z3;async function Z3(e){ic.trace("removeNode called with:",e),bC.checkClusteringEnabled();let t=V3(e);if(t)throw OC(t,t.message,NC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await bC.getNodeRecord(r);if($3.isEmptyOrZeroLength(s))throw OC(new Error,`Node '${r}' was not found.`,NC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new K3(a_.OPERATIONS_ENUM.REMOVE_NODE,X3,[]),i,o=!1;try{i=await IC.request(`${r}.${yC.REQUEST_SUFFIX}`,n),ic.trace("Remove node reply from remote node:",r,i)}catch(u){ic.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];ic.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new W3(_.schema,_.table,!1,!1);await IC.updateWorkStream(d,r)}let c=new Q3(a_.SYSTEM_SCHEMA_NAME,a_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await z3.deleteRecord(c),J3({type:"nats_update"}),i?.status===yC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ic.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(Z3,"removeNode")});var DC=m((yce,UC)=>{"use strict";var CC=require("joi"),{string:j3,array:e4}=CC.types(),t4=Pe(),r4=Ql();UC.exports=s4;function s4(e){let t=CC.object({operation:j3.valid("configure_cluster").required(),connections:e4.items(r4.validation_schema).required()});return t4.validateBySchema(e,t)}a(s4,"configureClusterValidator")});var uS=m((wce,BC)=>{"use strict";var n4=g(),u_=F(),i4=x(),o4=c_(),a4=n_(),LC=ks(),c4=DC(),{handleHDBError:MC,hdb_errors:u4}=W(),{HTTP_STATUS_CODES:PC}=u4,l4="Configure cluster complete.",_4="Failed to configure the cluster. Check the logs for more details.",d4="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";BC.exports=E4;async function E4(e){u_.trace("configure cluster called with:",e),LC.checkClusteringEnabled();let t=c4(e);if(t)throw MC(t,t.message,PC.BAD_REQUEST,void 0,void 0,!0);let r=await LC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(vC(o4,{operation:n4.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);u_.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(vC(a4,f,f.node_name))}let c=await Promise.allSettled(i);u_.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"&&(u_.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(i4.isEmptyOrZeroLength(u))return{message:l4,connections:l};if(_)return{message:d4,failed_nodes:u,connections:l};throw MC(new Error,_4,PC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(E4,"configureCluster");async function vC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(vC,"functionWrapper")});var qC=m((Uce,HC)=>{"use strict";var l_=require("joi"),f4=Pe(),{validateSchemaExists:h4,validateTableExists:m4,validateSchemaName:S4}=ts(),p4=l_.object({operation:l_.string().valid("purge_stream"),schema:l_.string().custom(h4).custom(S4).required(),table:l_.string().custom(m4).required()});function T4(e){return f4.validateBySchema(e,p4)}a(T4,"purgeStreamValidator");HC.exports=T4});var lS=m((Lce,FC)=>{"use strict";var{handleHDBError:R4,hdb_errors:g4}=W(),{HTTP_STATUS_CODES:A4}=g4,O4=qC(),N4=Qe(),b4=ks();FC.exports=y4;async function y4(e){let t=O4(e);if(t)throw R4(t,t.message,A4.BAD_REQUEST,void 0,void 0,!0);b4.checkClusteringEnabled();let{schema:r,table:s}=e;return await N4.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(y4,"purgeStream")});var ES=m((Pce,YC)=>{"use strict";var dS=ks(),I4=Qe(),kC=Q(),__=g(),ui=Be(),w4=x(),_S=F(),{RemotePayloadObject:C4}=ec(),{ErrorCode:GC}=require("nats"),xC=kC.get(__.CONFIG_PARAMS.CLUSTERING_ENABLED),VC=kC.get(__.CONFIG_PARAMS.CLUSTERING_NODENAME);YC.exports={clusterStatus:U4,buildNodeStatus:$C};async function U4(){let e={node_name:VC,is_enabled:xC,connections:[]};if(!xC)return e;let t=await dS.getAllNodeRecords();if(w4.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push($C(t[s],e.connections));return await Promise.allSettled(r),e}a(U4,"clusterStatus");async function $C(e,t){let r=e.name,s=new C4(__.OPERATIONS_ENUM.CLUSTER_STATUS,VC,void 0,await dS.getSystemInfo()),n,i,o=ui.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await I4.request(ui.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ui.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ui.CLUSTER_STATUS_STATUSES.CLOSED,_S.error(`Error getting node status from ${r} `,n))}catch(u){_S.warn(`Error getting node status from ${r}`,u),u.code===GC.NoResponders?o=ui.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===GC.Timeout?o=ui.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ui.CLUSTER_STATUS_STATUSES.CLOSED}let c=new D4(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!==__.PRE_4_0_0_VERSION&&await dS.upsertNodeRecord(u)}catch(u){_S.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a($C,"buildNodeStatus");function D4(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(D4,"NodeStatusObject")});var hS=m((Bce,KC)=>{"use strict";var{handleHDBError:L4,hdb_errors:M4}=W(),{HTTP_STATUS_CODES:P4}=M4,v4=Qe(),B4=ks(),fS=x(),d_=require("joi"),H4=Pe(),q4=2e3,F4=d_.object({timeout:d_.number().min(1),connected_nodes:d_.boolean(),routes:d_.boolean()});KC.exports=G4;async function G4(e){B4.checkClusteringEnabled();let t=H4.validateBySchema(e,F4);if(t)throw L4(t,t.message,P4.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||fS.autoCastBoolean(s),o=n===void 0||fS.autoCastBoolean(n),c={nodes:[]},u=await v4.getServerList(r??q4),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(T=>T.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(T=>({host:T.split(":")[0],port:fS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(G4,"clusterNetwork")});var JC=m((qce,zC)=>{"use strict";var mS=require("joi"),WC=Pe(),{route_constraints:QC}=NE();zC.exports={setRoutesValidator:x4,deleteRoutesValidator:k4};function x4(e){let t=mS.object({server:mS.valid("hub","leaf").required(),routes:QC.required()});return WC.validateBySchema(e,t)}a(x4,"setRoutesValidator");function k4(e){let t=mS.object({routes:QC.required()});return WC.validateBySchema(e,t)}a(k4,"deleteRoutesValidator")});var pS=m((Gce,eU)=>{"use strict";var li=Rr(),SS=x(),E_=g(),XC=JC(),{handleHDBError:ZC,hdb_errors:V4}=W(),{HTTP_STATUS_CODES:jC}=V4,$4="cluster routes successfully set",Y4="cluster routes successfully deleted";eU.exports={setRoutes:K4,getRoutes:W4,deleteRoutes:Q4};function K4(e){let t=XC.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=[],o=[];for(let c=0,u=e.routes.length;c<u;c++){let l=e.routes[c];l.port=SS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?li.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):li.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:$4,set:o,skipped:i}}a(K4,"setRoutes");function W4(){let e=li.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(W4,"getRoutes");function Q4(e){let t=XC.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=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let T=s[f];if(d.host===T.host&&d.port===T.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,T=n.length;h<T;h++){let S=n[h];if(d.host===S.host&&d.port===S.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=SS.isEmptyOrZeroLength(s)?null:s,li.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=SS.isEmptyOrZeroLength(n)?null:n,li.updateConfigValue(E_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:Y4,deleted:i,skipped:o}}a(Q4,"deleteRoutes")});var rU=m((kce,tU)=>{"use strict";var oc=require("alasql"),_i=require("recursive-iterator"),$r=F(),z4=x(),ac=g(),TS=class{static{a(this,"sql_statement_bucket")}constructor(t){this.ast=t,this.affected_attributes=new Map,this.table_lookup=new Map,this.schema_lookup=new Map,this.table_to_schema_lookup=new Map,X4(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,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][ac.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=J4(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!ac.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new oc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function J4(e){return e.filter(t=>t[ac.PERMS_CRUD_ENUM.READ])}a(J4,"filterReadRestrictedAttrs");function X4(e,t,r,s,n){Z4(e,t,r,s,n)}a(X4,"interpretAST");function cc(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(cc,"addSchemaTableToMap");function Z4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof oc.yy.Insert?rX(e,t,r):e instanceof oc.yy.Select?j4(e,t,r,s,n):e instanceof oc.yy.Update?eX(e,t,r):e instanceof oc.yy.Delete?tX(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Z4,"getRecordAttributesAST");function j4(e,t,r,s,n){if(!e){$r.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(z4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{cc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),cc(c.table,t,r,s,n)});let o=new _i(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 _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)}}}a(j4,"getSelectAttributes");function eX(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new _i(e.columns),n=e.table.databaseid;cc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(eX,"getUpdateAttributes");function tX(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new _i(e.where),n=e.table.databaseid;cc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.table.tableid,n,i.columnid,t,r)}a(tX,"getDeleteAttributes");function rX(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new _i(e.columns),n=e.into.databaseid;cc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&RS(e.into.tableid,n,i.columnid,t,r)}a(rX,"getInsertAttributes");function RS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(RS,"pushAttribute");tU.exports=TS});var OS=m(($ce,oU)=>{var f_=Oa(),sU=require("chalk"),_r=F(),nU=require("prompt"),{promisify:sX}=require("util"),gS=g(),nX=require("fs-extra"),iX=require("path"),oX=x(),aX=sS(),iU=Q();iU.initSync();var cX=require("moment"),uX=sX(nU.get),lX=iX.join(iU.getHdbBasePath(),gS.LICENSE_KEY_DIR_NAME,gS.LICENSE_FILE_NAME,gS.LICENSE_FILE_NAME);oU.exports={getFingerprint:dX,setLicense:_X,parseLicense:AS,register:EX,getRegistrationInfo:hX};async function _X(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await AS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _r.error(r),_r.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(_X,"setLicense");async function dX(){let e={};try{e=await f_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(dX,"getFingerprint");async function AS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=f_.validateLicense(e,t);if(_r.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_r.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_r.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_r.info("writing license to disk"),await nX.writeFile(lX,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(AS,"parseLicense");async function EX(){let e=await fX();return AS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(EX,"register");async function fX(){let e=await f_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:sU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:sU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{nU.start()}catch(s){_r.error(s)}let r;try{r=await uX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(fX,"promptForRegistration");async function hX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await f_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(oX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=aX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=cX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(hX,"getRegistrationInfo")});var cU=m((Kce,aU)=>{"use strict";var mX=Be(),NS=class{static{a(this,"HubConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d,E,f,h){this.port=t,o===null&&(o=void 0),this.server_name=r+mX.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"}};aU.exports=NS});var _U=m((Qce,lU)=>{"use strict";var uU=Be(),bS=class{static{a(this,"LeafConfigObject")}constructor(t,r,s,n,i,o,c,u,l,_,d){this.port=t,d===null&&(d=void 0),this.server_name=r+uU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+uU.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"}};lU.exports=bS});var EU=m((Jce,dU)=>{"use strict";var yS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};dU.exports=yS});var hU=m((Zce,fU)=>{"use strict";var SX=Be(),IS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+SX.SERVER_SUFFIX.ADMIN,this.password=r}};fU.exports=IS});var US=m((eue,pU)=>{"use strict";var uc=require("path"),p_=require("fs-extra"),pX=cU(),TX=_U(),RX=EU(),gX=hU(),wS=ar(),fo=x(),Kt=Rr(),S_=g(),h_=Be(),{CONFIG_PARAMS:Je}=S_,_c=F(),T_=Q(),mU=Hs(),CS=Qe(),lc="clustering",AX=1e4,SU=5;pU.exports={generateNatsConfig:OX,removeNatsConfig:NX};async function OX(e=!1,t=void 0){T_.initSync();let r=T_.get(Je.ROOTPATH),s=uc.join(r,lc,h_.PID_FILES.HUB),n=uc.join(r,lc,h_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=uc.join(r,lc,h_.NATS_CONFIG_FILES.HUB_SERVER),c=uc.join(r,lc,h_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await CS.checkNATSServerInstalled()||R_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await wS.listUsers(),S=Kt.getConfigFromFile(Je.CLUSTERING_USER),y=await wS.getClusterUser();(fo.isEmpty(y)||y.active!==!0)&&R_(`Invalid cluster user '${S}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await m_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await m_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await m_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await m_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],H=[];for(let[ge,ct]of T.entries())ct.role.role===S_.ROLE_TYPES_ENUM.CLUSTER_USER&&ct.active&&(O.push(new gX(ct.username,mU.decrypt(ct.hash))),H.push(new RX(ct.username,mU.decrypt(ct.hash))));let Y=[],{hub_routes:A}=Kt.getClusteringRoutes();if(!fo.isEmptyOrZeroLength(A))for(let ge of A)Y.push(`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@${ge.host}:${ge.port}`);let w=new pX(Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),Y,O,H);_==null&&(delete w.tls.ca_file,delete w.leafnodes.tls.ca_file),t=fo.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===S_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await p_.writeJson(o,w),_c.trace(`Hub server config written to ${o}`));let G=`tls://${y.sys_name_encoded}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,k=`tls://${y.uri_encoded_name}:${y.uri_encoded_d_hash}@0.0.0.0:${h}`,X=new TX(Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[G],[k],O,H,u,l,_,d);_==null&&delete X.tls.ca_file,(t===void 0||t===S_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await p_.writeJson(c,X),_c.trace(`Leaf server config written to ${c}`))}a(OX,"generateNatsConfig");async function m_(e){let t=T_.get(e);return fo.isEmpty(t)&&R_(`port undefined for '${e}'`),await fo.isPortTaken(t)&&R_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(m_,"isPortAvailable");function R_(e){let t=`Error generating clustering config: ${e}`;_c.error(t),console.error(t),process.exit(1)}a(R_,"generateNatsConfigError");async function NX(e){let{port:t,config_file:r}=CS.getServerConfig(e),{username:s,decrypt_hash:n}=await wS.getClusterUser(),i=0,o=500;for(;i<SU;){try{let l=await CS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){_c.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=SU)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(AX),u=uc.join(T_.get(Je.ROOTPATH),lc,r);await p_.writeFile(u,c),await p_.remove(u),_c.notify(e,"started.")}a(NX,"removeNatsConfig")});var NU=m((rue,OU)=>{"use strict";var dr=Q(),bX=Oa(),ae=g(),dc=Be(),Vs=require("path"),{PACKAGE_ROOT:A_}=g(),TU=Q(),g_=x(),ho="/dev/null",yX=Vs.join(A_,"launchServiceScripts"),RU=Vs.join(A_,"utility/scripts"),IX=Vs.join(RU,ae.HDB_RESTART_SCRIPT),gU=Vs.resolve(A_,"dependencies",`${process.platform}-${process.arch}`,dc.NATS_BINARY_NAME);function AU(){let t=bX.licenseSearch().ram_allocation||ae.RAM_ALLOCATION_ENUM.DEFAULT,r=ae.MEM_SETTING_KEY+t,s={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return g_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=g_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:A_}}a(AU,"generateMainServerConfig");var wX=9930;function CX(){dr.initSync(!0);let e=dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",dc.NATS_CONFIG_FILES.HUB_SERVER),r=Vs.join(dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=TU.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=dc.LOG_LEVEL_FLAGS[dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==wX?"-"+s:""),script:gU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ho,i.error_file=ho),i}a(CX,"generateNatsHubServerConfig");var UX=9940;function DX(){dr.initSync(!0);let e=dr.get(ae.CONFIG_PARAMS.ROOTPATH),t=Vs.join(e,"clustering",dc.NATS_CONFIG_FILES.LEAF_SERVER),r=Vs.join(dr.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=TU.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=dc.LOG_LEVEL_FLAGS[dr.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==UX?"-"+s:""),script:gU,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=ho,i.error_file=ho),i}a(DX,"generateNatsLeafServerConfig");function LX(){dr.initSync();let e=Vs.join(dr.get(ae.CONFIG_PARAMS.LOGGING_ROOT),ae.LOG_NAMES.HDB),t={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:ae.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:yX,autorestart:!1};return dr.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=ho,t.error_file=ho),t}a(LX,"generateClusteringUpgradeV4ServiceConfig");function MX(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return g_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=g_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:RU},script:IX}}a(MX,"generateRestart");function PX(){return{apps:[AU()]}}a(PX,"generateAllServiceConfigs");OU.exports={generateAllServiceConfigs:PX,generateMainServerConfig:AU,generateRestart:MX,generateNatsHubServerConfig:CX,generateNatsLeafServerConfig:DX,generateClusteringUpgradeV4ServiceConfig:LX}});var FU=m((uue,qU)=>{"use strict";var Re=g(),vX=x(),Ec=US(),fc=Qe(),ls=Be(),yn=NU(),O_=Q(),$s=F(),BX=ks(),{startWorker:bU,onMessageFromWorkers:HX}=_t(),qX=Eo(),FX=require("util"),IU=require("child_process"),{execFile:GX}=IU,nue=FX.promisify(IU.exec),iue=require("systeminformation"),fe;qU.exports={enterPM2Mode:xX,start:di,stop:DS,reload:wU,restart:CU,list:LS,describe:DU,connect:Ys,kill:KX,startAllServices:WX,startService:MS,getUniqueServicesList:LU,restartAllServices:QX,isServiceRegistered:MU,reloadStopStart:PU,restartHdb:UU,deleteProcess:$X,startClusteringProcesses:BU,startClusteringThreads:HU,isHdbRestartRunning:YX,isClusteringRunning:JX,stopClustering:zX,reloadClustering:XX};var{PACKAGE_ROOT:oue}=g(),aue=g(),{loggerWithTag:cue}=$s,hc=!1;HX(e=>{e.type==="restart"&&O_.initSync(!0)});function xX(){hc=!0}a(xX,"enterPM2Mode");function Ys(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{$s.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ys,"connect");var Wt,kX=10,yU;function di(e){if(hc)return VX(e);let t=GX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!yU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<kX&&di(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=O_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ls.LOG_LEVELS[d]}if(ls.LOG_LEVEL_HIERARCHY[i]>=ls.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ls.LOG_LEVELS.ERR||l===ls.LOG_LEVELS.WRN?$s.OUTPUTS.STDERR:$s.OUTPUTS.STDOUT;$s.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{yU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(di,"start");function VX(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(VX,"startWithPM2");function DS(e){if(!hc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(DS,"stop");function wU(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(wU,"reload");function CU(e){if(!hc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(CU,"restart");function $X(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a($X,"deleteProcess");async function UU(){await di(yn.generateRestart())}a(UU,"restartHdb");async function YX(){let e=await LS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(YX,"isHdbRestartRunning");function LS(){return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(LS,"list");function DU(e){return new Promise(async(t,r)=>{try{await Ys()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(DU,"describe");function KX(){if(!hc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ys()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(KX,"kill");async function WX(){try{await BU(),await HU(),await di(yn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(WX,"startAllServices");async function MS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=yn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=yn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=yn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=yn.generateNatsHubServerConfig(),await di(t),await Ec.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=yn.generateNatsLeafServerConfig(),await di(t),await Ec.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=yn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await di(t)}catch(t){throw fe.disconnect(),t}}a(MS,"startService");async function LU(){try{let e=await LS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw fe.disconnect(),e}}a(LU,"getUniqueServicesList");async function QX(e=[]){try{let t=!1,r=await LU();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 CU(o))}t&&await PU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(QX,"restartAllServices");async function MU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await qX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(MU,"isServiceRegistered");async function PU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?O_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):O_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await DU(e),s=vX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await DS(e),await MS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await UU():await wU(e)}a(PU,"reloadStopStart");var vU;async function BU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await MS(t)}}a(BU,"startClusteringProcesses");async function HU(){vU=bU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await fc.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await fc.updateIngestStreamConsumer(),await fc.updateLocalStreams();let e=await BX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){$s.info("Starting clustering upgrade 4.0.0 process"),bU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(HU,"startClusteringThreads");async function zX(){for(let e in Re.CLUSTERING_PROCESSES)if(e!==Re.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Re.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await vU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await DS(t)}}a(zX,"stopClustering");async function JX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await MU(t)===!1)return!1}return!0}a(JX,"isClusteringRunning");async function XX(){await Ec.generateNatsConfig(!0),await fc.reloadNATSHub(),await fc.reloadNATSLeaf(),await Ec.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await Ec.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(XX,"reloadClustering")});var GS=m((_ue,YU)=>{"use strict";var ZX=require("minimist"),{isMainThread:BS,parentPort:kU}=require("worker_threads"),He=g(),{PROCESS_DESCRIPTORS_VALIDATE:mc}=He,_s=F(),HS=x(),N_=US(),mo=Qe(),PS=Be(),VU=Rr(),ds=FU(),GU=Eo(),jX=EE(),{restartWorkers:b_,onMessageByType:eZ}=_t(),{handleHDBError:tZ,hdb_errors:rZ}=W(),{HTTP_STATUS_CODES:sZ}=rZ,y_=Q();y_.initSync();var Sc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,nZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",xU="Clustering is not enabled so cannot be restarted",iZ="Invalid service",Ei,Yr;YU.exports={restart:$U,restartService:qS};BS&&eZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?qS({service:e.workerType}):$U({operation:"restart"})});async function $U(e){Yr=Object.keys(e).length===0,Ei=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=ZX(process.argv);if(t.service){await qS(t);return}if(Yr&&!Ei){console.error(nZ);return}if(Yr&&console.log(Sc),Ei){ds.enterPM2Mode(),_s.notify(Sc);let r=jX(Object.keys(He.CONFIG_PARAM_MAP),!0);return HS.isEmptyOrZeroLength(Object.keys(r))||VU.updateConfigValue(void 0,void 0,r,!0,!0),aZ(),Sc}return BS?(_s.notify(Sc),await FS(),setTimeout(()=>{b_()},50)):kU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),Sc}a($U,"restart");async function qS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw tZ(new Error,iZ,sZ.BAD_REQUEST,void 0,void 0,!0);if(Ei=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!BS)return kU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case mc.clustering:if(!y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=xU;break}Yr&&console.log("Restarting clustering"),_s.notify("Restarting clustering"),await FS();break;case mc.clustering_config:case mc["clustering config"]:if(!y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=xU;break}Yr&&console.log("Restarting clustering_config"),_s.notify("Restarting clustering_config"),await ds.reloadClustering();break;case"custom_functions":case"custom functions":case mc.harperdb:case mc.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"),_s.notify("Restarting http_workers"),Ei?await ds.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{b_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(_s.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(qS,"restartService");async function oZ(){await mo.publishToStream(`${PS.SUBJECT_PREFIXES.TXN}.${PS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,PS.WORK_QUEUE_CONSUMER_NAMES.stream_name,mo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(oZ,"postDummyNatsMsg");async function aZ(){await FS(),await ds.restart(He.HDB_PROC_DESCRIPTOR),await HS.async_set_timeout(2e3),y_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await vS(),Yr&&(await mo.closeConnection(),process.exit(0))}a(aZ,"restartPM2Mode");async function FS(){if(!VU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await GU.getHDBProcessInfo()).clustering.length===0)_s.trace("Clustering not running, restart will start clustering services"),await N_.generateNatsConfig(!0),await ds.startClusteringProcesses(),await ds.startClusteringThreads(),await vS(),Yr&&await mo.closeConnection();else{await oZ(),await N_.generateNatsConfig(!0),Ei?(_s.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ds.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await GU.getHDBProcessInfo()).clustering.forEach(n=>{_s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await HS.async_set_timeout(3e3),await vS(),await mo.updateLocalStreams(),Yr&&await mo.closeConnection(),_s.trace("Restart clustering restarting ingest and reply service threads");let t=b_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=b_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(FS,"restartClustering");async function vS(){await N_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await N_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(vS,"removeNatsConfig")});var rD=m((fue,tD)=>{"use strict";var Eue=require("lodash"),Qt=g(),{handleHDBError:KU,hdb_errors:cZ}=W(),{HDB_ERROR_MSGS:uZ,HTTP_STATUS_CODES:lZ}=cZ,xS=F();tD.exports={getRolePermissions:dZ};var fi=Object.create(null),_Z=a(e=>({key:e,perms:{}}),"perms_template_obj"),JU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),XU=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),kS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...XU(t,r,s,n)}),"table_perms_template"),WU=a((e,t=XU())=>({attribute_name:e,describe:eD(t),[pc]:t[pc],[VS]:t[VS],[$S]:t[$S]}),"attr_perms_template"),QU=a((e,t=!1)=>({attribute_name:e,describe:t,[pc]:t}),"timestamp_attr_perms_template"),{READ:pc,INSERT:VS,UPDATE:$S}=Qt.PERMS_CRUD_ENUM,ZU=Object.values(Qt.PERMS_CRUD_ENUM),jU=[pc,VS,$S];function dZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(fi[t]&&fi[t].key===s)return fi[t].perms;let n=EZ(e,r);return fi[t]?fi[t].key=s:fi[t]=_Z(s),fi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw xS.error(s),xS.debug(r),KU(new Error,uZ.OUTDATED_PERMS_TRANSLATION_ERROR,lZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
- ${r.stack}`;throw xS.error(s),KU(new Error)}}}a(dZ,"getRolePermissions");function EZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=fZ(t[i]);return}r[i]=JU(),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=hZ(c,u);r[i].describe||ZU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=kS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=kS()})}),r}a(EZ,"translateRolePermissions");function fZ(e){let t=JU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=kS(!0,!0,!0,!0,!0)}),t}a(fZ,"createStructureUserPermissions");function hZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Qt.TIME_STAMP_NAMES.includes(d)&&(E=QU(d,_[pc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=WU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=eD(_),n.attribute_permissions.push(_),c||mZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=QU(l):_=WU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=zU(n),n}else return e.describe=zU(e),e}a(hZ,"getTableAttrPerms");function zU(e){return ZU.filter(t=>e[t]).length>0}a(zU,"getSchemaTableDescribePerm");function eD(e){return jU.filter(t=>e[t]).length>0}a(eD,"getAttributeDescribePerm");function mZ(e,t){jU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(mZ,"checkForHashPerms")});var sD={};je(sD,{Resources:()=>I_,keyArrayToString:()=>So,resetResources:()=>SZ,resources:()=>In});function SZ(){return In=new I_}function So(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var I_,In,Tc=pe(()=>{Vn();I_=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(SZ,"resetResources");a(So,"keyArrayToString")});var Rc={};je(Rc,{authentication:()=>uD,login:()=>yZ,logout:()=>IZ,start:()=>bZ});async function uD(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?gZ?RZ:[]:TZ?pZ:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return w_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),w_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(w_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),S=n.indexOf("=",h);c=n.slice(S+1,T===-1?n.length:T),u=await iD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let S=new D_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);S.auth_strategy=T,c&&(S.session_id=c),e.headers.referer&&(S.referer=e.headers.referer),e.headers.origin&&(S.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?nD.notify(S):nD.error(S)},"authAuditLog"),_;if(s){if(_=po.get(s),!_){let[f,h]=s.split(" "),T,S;try{switch(f){case"Basic":[T,S]=atob(h).split(":"),_=T||S?await mt.auth(T,S):null;break;case"Bearer":try{_=await(0,U_.validateOperationToken)(h)}catch(y){if(y.message==="invalid token")try{return await(0,U_.validateRefreshToken)(h),{status:-1}}catch{throw y}}break}}catch(y){return NZ&&(po.get(h)||(po.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ks({error:y.message},e)}}po.set(s,_),OZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await mt.auth(u.user,null,!1):AZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,C_.getSuperUser)());w_&&(e.session.update=function(f){if(!c){c=(0,aD.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,iD.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")&&In.loginPath?(d.status=302,d.headers.Location=In.loginPath(e)):d.headers["WWW-Authenticate"]="Basic");let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f={});for(let h=0;h<E;){let T=o[h++];f[T]=o[h++]}}return o=null,d}function bZ({server:e,port:t}){e.request(uD,{port:t||"all"}),oD||(oD=!0,setInterval(()=>{po=new Map},yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),cD.user.addListener(()=>{po=new Map}))}async function yZ(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 IZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var C_,U_,aD,yr,Rt,D_,cD,nD,pZ,TZ,RZ,gZ,iD,w_,AZ,OZ,NZ,po,oD,L_=pe(()=>{C_=D(ar());ln();Tc();U_=D(ja());de();aD=require("uuid"),yr=D(Q()),Rt=D(g()),D_=D(F());To();cD=D(ba()),nD=(0,D_.loggerWithTag)("auth-event");yr.initSync();pZ=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),TZ=yr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),RZ=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),gZ=yr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);mt.auth=C_.findAndValidateUser;iD=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),w_=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,AZ=yr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,OZ=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,NZ=yr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,po=new Map;a(uD,"authentication");a(bZ,"start");a(yZ,"login");a(IZ,"logout")});var mD=m((Oue,hD)=>{"use strict";var he=require("joi"),lD=require("fs-extra"),_D=require("path"),Qs=Pe(),dD=Q(),ED=g(),fD=F(),{hdb_errors:wZ}=W(),{HDB_ERROR_MSGS:Dt}=wZ,Ws=/^[a-zA-Z0-9-_]+$/;hD.exports={getDropCustomFunctionValidator:UZ,setCustomFunctionValidator:DZ,addComponentValidator:vZ,dropCustomFunctionProjectValidator:BZ,packageComponentValidator:HZ,deployComponentValidator:qZ,setComponentFileValidator:LZ,getComponentFileValidator:PZ,dropComponentFileValidator:MZ};function M_(e,t,r){try{let s=dD.get(ED.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=_D.join(s,t);return lD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return fD.error(s),r.message(Dt.VALIDATION_ERR)}}a(M_,"checkProjectExists");function gc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(gc,"checkFilePath");function CZ(e,t,r,s){try{let n=dD.get(ED.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=_D.join(n,e,t,r+".js");return lD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return fD.error(n),s.message(Dt.VALIDATION_ERR)}}a(CZ,"checkFileExists");function UZ(e){let t=he.object({project:he.string().pattern(Ws).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Ws).custom(CZ.bind(null,e.project,e.type)).custom(gc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Qs.validateBySchema(e,t)}a(UZ,"getDropCustomFunctionValidator");function DZ(e){let t=he.object({project:he.string().pattern(Ws).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(gc).required(),function_content:he.string().required()});return Qs.validateBySchema(e,t)}a(DZ,"setCustomFunctionValidator");function LZ(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(gc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qs.validateBySchema(e,t)}a(LZ,"setComponentFileValidator");function MZ(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(gc).optional()});return Qs.validateBySchema(e,t)}a(MZ,"dropComponentFileValidator");function PZ(e){let t=he.object({project:he.string().required(),file:he.string().custom(gc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Qs.validateBySchema(e,t)}a(PZ,"getComponentFileValidator");function vZ(e){let t=he.object({project:he.string().pattern(Ws).custom(M_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Qs.validateBySchema(e,t)}a(vZ,"addComponentValidator");function BZ(e){let t=he.object({project:he.string().pattern(Ws).custom(M_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Qs.validateBySchema(e,t)}a(BZ,"dropCustomFunctionProjectValidator");function HZ(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Qs.validateBySchema(e,t)}a(HZ,"packageComponentValidator");function qZ(e){let t=he.object({project:he.string().pattern(Ws).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Qs.validateBySchema(e,t)}a(qZ,"deployComponentValidator")});var QS=m((bue,TD)=>{"use strict";var be=require("fs-extra"),YS=require("fast-glob"),me=require("path"),SD=require("tar-fs"),FZ=require("uuid").v4,KS=require("normalize-path"),Es=mD(),gt=F(),Ie=g(),$e=Q(),P_=Rr(),GZ=x(),{PACKAGE_ROOT:xZ}=g(),{handleHDBError:st,hdb_errors:kZ}=W(),{HDB_ERROR_MSGS:wn,HTTP_STATUS_CODES:nt}=kZ,VZ=me.join(xZ,"application-template"),WS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function pD(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw st(new Error,wn.NOT_ENABLED,nt.BAD_REQUEST,void 0,void 0,!0)}a(pD,"isCFEnabled");function $Z(){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,wn.FUNCTION_STATUS,nt.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a($Z,"customFunctionsStatus");function YZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{YS.sync(KS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:YS.sync(KS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:YS.sync(KS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw st(new Error,wn.GET_FUNCTIONS,nt.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(YZ,"getCustomFunctions");function KZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("getting custom api endpoint file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=me.join(r,s,n,i+".js");try{return be.readFileSync(o,{encoding:"utf8"})}catch(c){throw st(new Error,wn.GET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(KZ,"getCustomFunction");function WZ(e){pD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.setCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("setting custom function file content");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return be.outputFileSync(me.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw st(new Error,wn.SET_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(WZ,"setCustomFunction");function QZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=Es.getDropCustomFunctionValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);gt.trace("dropping custom function file");let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return be.unlinkSync(me.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw st(new Error,wn.DROP_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(QZ,"dropCustomFunction");function zZ(e){pD(),e.project&&(e.project=me.parse(e.project).name);let t=Es.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(VZ,n),`Successfully added project: ${s}`}catch(n){throw st(new Error,wn.ADD_FUNCTION,nt.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(zZ,"addComponent");function JZ(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.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(!GZ.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return P_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw st(new Error,wn.DROP_FUNCTION_PROJECT,nt.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(JZ,"dropCustomFunctionProject");async function XZ(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.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(WS);let i=me.join(WS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),SD.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(XZ,"packageComponent");async function ZZ(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.deployComponentValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(gt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=me.join(r,s);i="file:"+o,await be.ensureDir(o);let c,u;do c=me.join(WS,FZ()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(SD.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return P_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(ZZ,"deployComponent");async function jZ(){let e=P_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(jZ,"getComponents");async function ej(e){let t=Es.getComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await be.readFile(me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===Ie.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${me.join(e.project,e.file)}'`):s}}a(ej,"getComponentFile");async function tj(e){let t=Es.setComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await be.ensureFile(s),await be.outputFile(s,e.payload,r)):await be.ensureDir(s),"Successfully set component: "+e.file}a(tj,"setComponentFile");async function rj(e){let t=Es.dropComponentFileValidator(e);if(t)throw st(t,t.message,nt.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),P_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(rj,"dropComponent");TD.exports={customFunctionsStatus:$Z,getCustomFunctions:YZ,getCustomFunction:KZ,setCustomFunction:WZ,dropCustomFunction:QZ,addComponent:zZ,dropCustomFunctionProject:JZ,packageComponent:XZ,deployComponent:ZZ,getComponents:jZ,getComponentFile:ej,setComponentFile:tj,dropComponent:rj}});var zS=m((Iue,gD)=>{"use strict";var hs=require("joi"),RD=Pe();gD.exports={readTransactionLogValidator:sj,deleteTransactionLogsBeforeValidator:nj};function sj(e){let t=hs.object({schema:hs.string().required(),table:hs.string().required(),from:hs.date().timestamp(),to:hs.date().timestamp(),limit:hs.number().min(1)});return RD.validateBySchema(e,t)}a(sj,"readTransactionLogValidator");function nj(e){let t=hs.object({schema:hs.string().required(),table:hs.string().required(),timestamp:hs.date().timestamp().required()});return RD.validateBySchema(e,t)}a(nj,"deleteTransactionLogsBeforeValidator")});var B_=m((Cue,yD)=>{"use strict";var JS=g(),v_=Qe(),AD=x(),OD=Q(),ND=Hs(),{handleHDBError:Ro,hdb_errors:ij}=W(),{HTTP_STATUS_CODES:go}=ij,{readTransactionLogValidator:oj,deleteTransactionLogsBeforeValidator:aj}=zS(),bD="This operation relies on clustering and cannot run with it disable.",cj="Logs successfully deleted from transaction log.",uj="All logs successfully deleted from transaction log.";yD.exports={readTransactionLog:lj,deleteTransactionLogsBefore:_j};async function*lj(e){let t=oj(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!OD.get(JS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,bD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=AD.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 v_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===JS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(lj,"readTransactionLog");async function _j(e){let t=aj(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST,void 0,void 0,!0);if(!OD.get(JS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ro(new Error,bD,go.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=AD.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 v_.getNATSReferences(),u=await v_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=cj,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=uj):d=(await v_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(_j,"deleteTransactionLogsBefore")});var G_=m((Due,MD)=>{"use strict";var H_=require("joi"),q_=require("path"),ID=require("fs-extra"),{exec:dj}=require("child_process"),Ej=require("util"),wD=Ej.promisify(dj),Ac=g(),{handleHDBError:Ao,hdb_errors:fj}=W(),{HTTP_STATUS_CODES:Oo}=fj,Nc=Q(),hj=Pe(),Oc=F();Nc.initSync();var XS=Nc.get(Ac.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),CD="npm install --omit=dev --json",mj=`${CD} --dry-run`;MD.exports={installModules:Rj,auditModules:gj,installAllRootModules:Sj,uninstallRootModule:pj,linkHarperdb:Tj};async function Sj(e=!1){await F_(),await bc(e?"npm install --ignore-scripts":"npm install",Nc.get(Ac.CONFIG_PARAMS.ROOTPATH))}a(Sj,"installAllRootModules");async function pj(e){await bc(`npm uninstall ${e}`,Nc.get(Ac.CONFIG_PARAMS.ROOTPATH))}a(pj,"uninstallRootModule");async function Tj(){await F_(),await bc(`npm link ${Ac.PACKAGE_ROOT}`,Nc.get(Ac.CONFIG_PARAMS.ROOTPATH))}a(Tj,"linkHarperdb");async function bc(e,t=void 0){let{stdout:r,stderr:s}=await wD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
- `,""));return Oc.trace(r,s),r.replace(`
11
- `,"")}a(bc,"runCommand");async function Rj(e){Oc.info(`starting installModules for request: ${e}`);let t=LD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?mj:CD;await F_(),await DD(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let l=q_.join(XS,u),_,d=null;try{let{stdout:E,stderr:f}=await wD(n,{cwd:l});_=E?E.replace(`
8
+ `,"")}a(HI,"runCommand");async function uz(){try{await VQ.access(lm)}catch{return!1}let e=await HI(`${lm} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return $Q.eq(t,az)}a(uz,"checkNATSServerInstalled");async function fm(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await LI.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 jQ({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(fm,"createConnection");async function lz(){_s&&(await _s.drain(),_s=void 0,ro=void 0,so=void 0,Wa=void 0)}a(lz,"closeConnection");var _s,Wa;async function Gl(){return Wa||(Wa=fm(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),_s=await Wa),_s||Wa}a(Gl,"getConnection");async function za(){if(ro)return ro;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ro=await _s.jetstreamManager({domain:e}),ro}a(za,"getJetStreamManager");async function qI(){if(so)return so;ai(_s)&&await Gl();let{domain:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(ai(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return so=_s.jetstream({domain:e}),so}a(qI,"getJetStream");async function Gt(){let e=_s||await Gl(),t=ro||await za(),r=so||await qI();return{connection:e,jsm:t,js:r}}a(Gt,"getNATSReferences");async function _z(e){let t=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await LI.getClusterUser(),n=await fm(t,r,s),i=Em(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=BI.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 Bl.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(_z,"getServerList");async function hm(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:PI.File,retention:vI.Limits,subjects:t,discard:ez.Old,duplicate_window:MI,max_msgs:n,max_bytes:i,max_age:s})}a(hm,"createLocalStream");async function FI(){let{jsm:e}=await Gt(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(FI,"listStreams");async function dz(e){let{jsm:t}=await Gt();await t.streams.delete(e)}a(dz,"deleteLocalStream");async function Ez(e){let{connection:t}=await Gt(),r=[],s=Em(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(BI.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(Ez,"listRemoteStreams");async function fz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=_m(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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=dm(_.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(fz,"viewStream");async function*hz(e,t=void 0,r=void 0){let{jsm:s,js:n}=await Gt(),i=_m(),o={durable_name:i,ack_policy:ql.Explicit};t&&(o.deliver_policy=Fl.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 _=dm(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(hz,"viewStreamIterator");async function mz(e,t,r,s){yr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=GI(s,r);let{js:n}=await Gt(),i=await Xa(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:DI.encode(s);try{yr.trace(`publishToStream publishing to subject: ${o}`),iz(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 $I(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 hm(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(mz,"publishToStream");function GI(e,t){t===void 0&&(t=rz());let r=Tt.get(Te.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Bl.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${_m()}`;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(GI,"addNatsMsgHeader");function Ja(e){e=e.toLowerCase();let t=Qa.join(Tt.get(Te.CONFIG_PARAMS.ROOTPATH),oz);if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return ai(um)&&(um={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:Qa.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),um;if(e===Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return ai(cm)&&(cm={port:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Ya.getConfigFromFile(Te.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:Qa.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),cm;yr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(Ja,"getServerConfig");async function Sz(e){let{jsm:t}=await Gt(),r=await Xa();try{await t.streams.add({name:e.stream_name,storage:PI.File,retention:vI.Limits,duplicate_window:MI,max_age:XQ,max_bytes:ZQ,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:ql.Explicit,durable_name:e.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4});else throw s}}a(Sz,"createWorkQueueStream");async function pz(){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:ql.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:Fl.All,max_ack_pending:1e4}))}a(pz,"updateIngestStreamConsumer");async function xI(e,t,r){let{jsm:s}=await Gt(),n=await s.streams.info(t),i=kI(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Hl.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(xI,"addSourceToWorkStream");function kI(e){return e.split(".")[1]}a(kI,"extractServerName");async function VI(e,t,r){let{schema:s,table:n}=r,i=Hl.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(VI,"removeSourceFromWorkStream");async function Tz(e,t,r=2e4,s=Em()){if(!Bl.isObject(t))throw new Error("data param must be an object");let n=DI.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 dm(c.data)}a(Tz,"request");function mm(e){return new Promise(async(t,r)=>{let s=QQ(lm,["--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(mm,"reloadNATS");async function Rz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await mm(e)}a(Rz,"reloadNATSHub");async function gz(){let{pid_file_path:e}=Ja(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await mm(e)}a(gz,"reloadNATSLeaf");function Az(e,t,r){let s;switch(e.code){case CI.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case CI.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Az,"requestErrorHandler");async function Oz(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await $I(async()=>{e.subscribe===!0?await xI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await VI(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Oz,"updateWorkStream");function $I(e){return zQ.writeTransaction(Te.SYSTEM_SCHEMA_NAME,Te.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a($I,"exclusiveLock");async function YI(e,t){let r=Hl.createNatsTableStreamName(e,t),s=await Xa(),n=Iz(e,t,s);await hm(r,[n])}a(YI,"createLocalTableStream");async function Nz(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await YI(s,n)}}a(Nz,"createTableStreams");async function KI(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Hl.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(KI,"purgeTableStream");async function bz(e,t){if(Tt.get(Te.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await KI(e,t[r])}a(bz,"purgeSchemaTableStreams");async function yz(e){return(await za()).streams.info(e)}a(yz,"getStreamInfo");function Iz(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Iz,"createSubjectName");async function Xa(){if(Ka)return Ka;if(Ka=(await za())?.nc?.info?.server_name,Ka===void 0)throw new Error("Unable to get jetstream manager server name");return Ka}a(Xa,"getJsmServerName");async function wz(){let e=await za(),t=await Xa(),r=await FI();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Cz(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(wz,"updateLocalStreams");function Cz(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(Cz,"updateStreamLimits")});var $l=m((Eae,XI)=>{"use strict";var no=zu(),io=EI(),Uz=x(),Dz=require("uuid").v4,dae=require("clone"),kl=xs(),oo=A(),Lz=require("util"),Rn=qr(),{handleHDBError:xt,hdb_errors:Mz}=W(),{HDB_ERROR_MSGS:xl,HTTP_STATUS_CODES:kt}=Mz,{SchemaEventMsg:Vl}=Fr(),QI=Qe(),{getDatabases:Pz}=(de(),re(Ne)),{transformReq:ao}=V();XI.exports={createSchema:vz,createSchemaStructure:zI,createTable:Bz,createTableStructure:JI,createAttribute:xz,dropSchema:Hz,dropTable:qz,dropAttribute:Fz,getBackup:kz};async function vz(e){let t=await zI(e);return kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),t}a(vz,"createSchema");async function zI(e){let t=no.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(ao(e),!await io.checkSchemaExists(e.schema))throw xt(new Error,xl.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,xl.SCHEMA_EXISTS_ERR(e.schema),!0);return await Rn.createSchema(e),`database '${e.schema}' successfully created`}a(zI,"createSchemaStructure");async function Bz(e){return ao(e),await JI(e)}a(Bz,"createTable");async function JI(e){let t=no.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(no.validateTableResidence(e.residence),!await io.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,xl.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,oo.LOG_LEVELS.ERROR,xl.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:Dz(),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(JI,"createTableStructure");async function Hz(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=no.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let n=await io.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,n,!0);let i=await io.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await Rn.dropSchema(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema)),await QI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(Hz,"dropSchema");async function qz(e){let t=no.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,r,!0);return await Rn.dropTable(e),await QI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(qz,"dropTable");async function Fz(e){let t=no.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);ao(e);let r=await io.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,oo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw xt(new Error,"You cannot drop a hash attribute",kt.BAD_REQUEST,void 0,void 0,!0);if(oo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw xt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,kt.BAD_REQUEST,void 0,void 0,!0);try{return await Rn.dropAttribute(e),Gz(e),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw Uz.error(`Got an error deleting attribute ${Lz.inspect(e)}.`),s}}a(Fz,"dropAttribute");function Gz(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(Gz,"dropAttributeFromGlobal");async function xz(e){ao(e);let t=Pz()[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),kl.signalSchemaChange(new Vl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(xz,"createAttribute");function kz(e){return Rn.getBackup(e)}a(kz,"getBackup")});var jI=m((hae,ZI)=>{"use strict";var{OPERATIONS_ENUM:Vz}=A(),Sm=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=Vz.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};ZI.exports=Sm});var pm=m((pae,nw)=>{"use strict";var $z=qr(),Sae=jI(),Yl=V(),Kl=A(),Yz=Q(),{handleHDBError:ew,hdb_errors:Kz}=W(),{HDB_ERROR_MSGS:tw,HTTP_STATUS_CODES:rw}=Kz,Wz=Object.values(Kl.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),sw="To use this operation audit log must be enabled in harperdb-config.yaml";nw.exports=Qz;async function Qz(e){if(Yl.isEmpty(e.schema))throw new Error(tw.SCHEMA_REQUIRED_ERR);if(Yl.isEmpty(e.table))throw new Error(tw.TABLE_REQUIRED_ERR);if(!Yz.get(Kl.CONFIG_PARAMS.LOGGING_AUDITLOG))throw ew(new Error,sw,rw.BAD_REQUEST,Kl.LOG_LEVELS.ERROR,sw,!0);let t=Yl.checkSchemaTableExist(e.schema,e.table);if(t)throw ew(new Error,t,rw.NOT_FOUND,Kl.LOG_LEVELS.ERROR,t,!0);if(!Yl.isEmpty(e.search_type)&&Wz.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await $z.readAuditLog(e)}a(Qz,"readAuditLog")});var ow=m((Rae,iw)=>{"use strict";var{OPERATIONS_ENUM:zz}=A(),Tm=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=zz.GET_BACKUP,this.schema=t,this.table=r}};iw.exports=Tm});var uw=m((Nae,cw)=>{"use strict";var Jz=qr(),Aae=ow(),Rm=V(),Xz=A(),Oae=Q(),{handleHDBError:Zz,hdb_errors:jz}=W(),{HDB_ERROR_MSGS:aw,HTTP_STATUS_CODES:eJ}=jz;cw.exports=tJ;async function tJ(e){if(Rm.isEmpty(e.schema))throw new Error(aw.SCHEMA_REQUIRED_ERR);if(Rm.isEmpty(e.table))throw new Error(aw.TABLE_REQUIRED_ERR);let t=Rm.checkSchemaTableExist(e.schema,e.table);if(t)throw Zz(new Error,t,eJ.NOT_FOUND,Xz.LOG_LEVELS.ERROR,t,!0);return await Jz.getBackup(read_audit_log_object)}a(tJ,"getBackup")});var hw=m((yae,fw)=>{var gn=require("validate.js"),_w=Pe(),co=A(),{handleHDBError:rJ,hdb_errors:sJ}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:nJ}=sJ,gm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),iJ={STRUCTURE_USER:"structure_user"},lw=Object.values(co.ROLE_TYPES_ENUM),oJ="attribute_permissions",aJ="attribute_name",{PERMS_CRUD_ENUM:uo}=co,cJ=[oJ,...Object.values(uo)],dw=[uo.READ,uo.INSERT,uo.UPDATE],uJ=[aJ,...dw];function lJ(e){let t=gm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,Ew(e,t)}a(lJ,"addRoleValidation");function _J(e){let t=gm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,Ew(e,t)}a(_J,"alterRoleValidation");function dJ(e){let t=gm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,_w.validateObject(e,t)}a(dJ,"dropRoleValidation");var EJ=["operation","role","id","permission","hdb_user","hdb_auth_header"];function Ew(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)EJ.includes(s[o])||n.push(s[o]);n.length>0&&ze(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=_w.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=fJ(e);o&&ze(o,r),lw.forEach(c=>{e.permission[c]&&!gn.isBoolean(e.permission[c])&&ze(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(lw.indexOf(o)<0){if(o===iJ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze(Ve.SCHEMA_NOT_FOUND(d),r)}continue}ze(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze(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]){ze(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{cJ.includes(_)||ze(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(uo).forEach(_=>{gn.isDefined(l[_])?gn.isBoolean(l[_])||ze(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze(Ve.TABLE_PERM_MISSING(_),r,o,u)}),gn.isDefined(l.attribute_permissions)){if(!gn.isArray(l.attribute_permissions)){ze(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze(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=>{!uJ.includes(T)&&T!==uo.DELETE&&ze(Ve.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!gn.isDefined(f.attribute_name)){ze(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}dw.forEach(T=>{gn.isDefined(f[T])?gn.isBoolean(f[T])||ze(Ve.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze(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}`;ze(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return hJ(r)}a(Ew,"customValidate");fw.exports={addRoleValidation:lJ,alterRoleValidation:_J,dropRoleValidation:dJ};function fJ(e){let{operation:t,permission:r}=e;if(t===co.OPERATIONS_ENUM.ADD_ROLE||t===co.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?co.ROLE_TYPES_ENUM.SUPER_USER:co.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(fJ,"validateNoSUPerms");function hJ(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 rJ(new Error,s,nJ.BAD_REQUEST)}else return null}a(hJ,"generateRolePermResponse");function ze(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(ze,"addPermError")});var Im=m((wae,Tw)=>{"use strict";var mw=br(),Sw=Nr(),mJ=jn(),Om=hw(),Nm=xs(),SJ=require("uuid").v4,pJ=require("util"),Wl=A(),TJ=V(),bm=Sw.searchByValue,RJ=Sw.searchByHash,gJ=pJ.promisify(mJ.delete),AJ=os(),OJ=Zi(),{hdb_errors:NJ,handleHDBError:lo}=W(),{HDB_ERROR_MSGS:pw,HTTP_STATUS_CODES:Ql}=NJ,{UserEventMsg:ym}=Fr();Tw.exports={addRole:bJ,alterRole:yJ,dropRole:IJ,listRoles:wJ};function Am(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(Am,"scrubRoleDetails");async function bJ(e){let t=Om.addRoleValidation(e);if(t)throw t;e=Am(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 bm(r)||[])}catch(i){throw lo(i)}if(s&&s.length>0)throw lo(new Error,pw.ROLE_ALREADY_EXISTS(e.role),Ql.CONFLICT,void 0,void 0,!0);e.id||(e.id=SJ());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await mw.insert(n),Nm.signalUserChange(new ym(process.pid)),e=Am(e),e}a(bJ,"addRole");async function yJ(e){let t=Om.alterRoleValidation(e);if(t)throw t;e=Am(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await mw.update(r)}catch(n){throw lo(n)}if(s&&s?.message==="updated 0 of 1 records")throw lo(new Error,"Invalid role id",Ql.BAD_REQUEST,void 0,void 0,!0);return await Nm.signalUserChange(new ym(process.pid)),e}a(yJ,"alterRole");async function IJ(e){let t=Om.dropRoleValidation(e);if(t)throw lo(new Error,t,Ql.BAD_REQUEST,void 0,void 0,!0);let r=new OJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await RJ(r));if(s.length===0)throw lo(new Error,pw.ROLE_NOT_FOUND,Ql.NOT_FOUND,void 0,void 0,!0);let n=new AJ(Wl.SYSTEM_SCHEMA_NAME,Wl.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await bm(n)),o=!1;if(TJ.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 gJ(c),Nm.signalUserChange(new ym(process.pid)),`${s[0].role} successfully deleted`}a(IJ,"dropRole");async function wJ(){return bm({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(wJ,"listRoles")});var Ow=m((Uae,Aw)=>{"use strict";var CJ=Q(),An=require("joi"),UJ=Pe(),Rw=require("moment"),DJ=require("fs-extra"),wm=require("path"),LJ=require("lodash"),Za=A(),{LOG_LEVELS:ci}=A(),MJ="YYYY-MM-DD hh:mm:ss",PJ=wm.resolve(__dirname,"../logs");Aw.exports=function(e){return UJ.validateBySchema(e,vJ)};var vJ=An.object({from:An.custom(gw),until:An.custom(gw),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(BJ)});function gw(e,t){if(Rw(e,Rw.ISO_8601).format(MJ)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(gw,"validateDatetime");function BJ(e,t){if(LJ.invert(Za.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=CJ.get(Za.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Za.LOG_NAMES.HDB:e,i=n===Za.LOG_NAMES.INSTALL?wm.join(PJ,Za.LOG_NAMES.INSTALL):wm.join(s,n);return DJ.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(BJ,"validateReadLogPath")});var Um=m((Lae,bw)=>{"use strict";var zl=A(),HJ=x(),qJ=Q(),FJ=Ow(),Cm=require("path"),Nw=require("fs-extra"),{once:GJ}=require("events"),{handleHDBError:xJ,hdb_errors:kJ}=W(),{PACKAGE_ROOT:VJ}=A(),$J=Cm.join(VJ,"logs"),YJ=1e3,KJ=200;bw.exports=WJ;async function WJ(e){let t=FJ(e);if(t)throw xJ(t,t.message,kJ.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=qJ.get(zl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?zl.LOG_NAMES.HDB:e.log_name,n=s===zl.LOG_NAMES.INSTALL?Cm.join($J,zl.LOG_NAMES.INSTALL):Cm.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?YJ: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(Nw.statSync(n).size-(h+5)*KJ,0));let p=Nw.createReadStream(n,{start:T});p.on("error",b=>{HJ.error(b)});let R=0,O=[],k="",$;p.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,q;for(;(q=P.exec(b))&&!p.destroyed;){$&&($.message=b.slice(z,q.index),U($));let[Oe,je,au]=q,Mi=au.split("] ["),$o=Mi[0],qn=Mi[1];Mi.splice(0,2),$={timestamp:je,thread:$o,level:qn,tags:Mi,message:""},z=q.index+Oe.length}k=b.slice(z)}),p.on("end",b=>{p.destroyed||$&&($.message=k.trim(),U($))}),p.resume();function U(b){let P,z,q;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),b.level===o&&P>=z&&P<=q&&R<f?R++:b.level===o&&P>=z&&P<=q&&(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),q=new Date(_),b.level===o&&P<=q&&R<f?R++:b.level===o&&P<=q&&(On(b,E,O),R++,R===h&&p.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),q=new Date(_),P>=z&&P<=q&&R<f?R++:P>=z&&P<=q&&(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),q=new Date(_),P<=q&&R<f?R++:P<=q&&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 GJ(p,"close"),O}a(WJ,"readLog");function On(e,t,r){t==="desc"?QJ(e,r):t==="asc"?zJ(e,r):r.push(e)}a(On,"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)}a(QJ,"insertDescending");function zJ(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(zJ,"insertAscending")});var Xl=m((Hae,Cw)=>{"use strict";var Dm=require("joi"),{string:Jl,boolean:yw,date:JJ}=Dm.types(),XJ=Pe(),{validateSchemaExists:Pae,validateTableExists:vae,validateSchemaName:Bae}=rs(),ZJ=A(),jJ=Be(),Iw=Q();Iw.initSync();var e2=Jl.invalid(Iw.get(ZJ.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(jJ.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(),ww={operation:Jl.valid("add_node","update_node"),node_name:e2,subscriptions:Dm.array().items({table:Jl.optional(),schema:Jl.required(),subscribe:yw.required(),publish:yw.required().custom(r2),start_time:JJ.iso()}).min(1).required()};function t2(e){return XJ.validateBySchema(e,Dm.object(ww))}a(t2,"addUpdateNodeValidator");function r2(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(r2,"checkForFalsy");Cw.exports={addUpdateNodeValidator:t2,validation_schema:ww}});var Dw=m((Fae,Uw)=>{var s2=Pe(),n2={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};Uw.exports=function(e){return s2.validateObject(e,n2)}});var Mm=m((Gae,Lw)=>{"use strict";var i2=A().OPERATIONS_ENUM,Lm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=i2.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Lw.exports=Lm});var Pw=m((kae,Mw)=>{"use strict";var o2={OPERATION:"operation",REFRESH:"refresh"},Pm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},vm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};Mw.exports={JWTTokens:Pm,TOKEN_TYPE_ENUM:o2,JWTRSAKeys:vm}});var tc=m(($ae,qw)=>{"use strict";var ec=require("jsonwebtoken"),Bm=require("fs-extra"),Hm=V(),Ir=A(),{handleHDBError:Vt,hdb_errors:a2}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=a2,ja=x(),vw=cl(),Gm=ar(),c2=br().update,u2=Mm(),l2=xs(),{UserEventMsg:_2}=Fr(),Nn=Q();Nn.initSync();var qm=require("path"),{JWTTokens:d2,JWTRSAKeys:E2,TOKEN_TYPE_ENUM:Zl}=Pw(),f2=Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",h2=Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?Nn.get(Ir.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",jl="RS256",Fm;qw.exports={createTokens:m2,validateOperationToken:p2,refreshOperationToken:S2,validateRefreshToken:Hw};async function m2(e){if(Hm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Hm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Hm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Gm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ja.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await e_(),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 Bw(i,r.private_key,r.passphrase),c=await ec.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:h2,algorithm:jl,subject:Zl.REFRESH}),u=vw.hash(c),l=new u2(Ir.SYSTEM_SCHEMA_NAME,Ir.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await c2(l)}catch(E){ja.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw Vt(new Error,Yt.REFRESH_TOKEN_SAVE_FAILED,$t.INTERNAL_SERVER_ERROR);return l2.signalUserChange(new _2(process.pid)),new d2(o,c)}a(m2,"createTokens");async function Bw(e,t,r){return await ec.sign(e,{key:t,passphrase:r},{expiresIn:f2,algorithm:jl,subject:Zl.OPERATION})}a(Bw,"signOperationToken");async function e_(){if(Fm===void 0)try{let e=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PASSPHRASE_NAME),t=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=qm.join(Nn.getHdbBasePath(),Ir.LICENSE_KEY_DIR_NAME,Ir.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await Bm.readFile(e)).toString(),n=(await Bm.readFile(t)).toString(),i=(await Bm.readFile(r)).toString();Fm=new E2(i,n,s)}catch(e){throw ja.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Fm}a(e_,"getJWTRSAKeys");async function S2(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 Hw(e.refresh_token);let t=await e_(),r=await ec.decode(e.refresh_token);return{operation_token:await Bw({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(S2,"refreshOperationToken");async function p2(e){try{let t=await e_(),r=await ec.verify(e,t.public_key,{algorithms:jl,subject:Zl.OPERATION});return await Gm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ja.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(p2,"validateOperationToken");async function Hw(e){let t;try{let r=await e_(),s=await ec.verify(e,r.public_key,{algorithms:jl,subject:Zl.REFRESH});t=await Gm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ja.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!vw.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(Hw,"validateRefreshToken")});var xm=m((Wae,xw)=>{"use strict";var T2=Dw(),_o=require("passport"),R2=require("passport-local").Strategy,g2=require("passport-http").BasicStrategy,A2=require("util"),O2=ar(),Gw=A2.callbackify(O2.findAndValidateUser),Kae=rr(),N2=A(),Fw=tc();_o.use(new R2(function(e,t,r){Gw(e,t,r)}));_o.use(new g2(function(e,t,r){Gw(e,t,r)}));_o.serializeUser(function(e,t){t(null,e)});_o.deserializeUser(function(e,t){t(null,e)});function b2(e,t,r){if(e.raw?.user!==void 0)return r(null,e.raw.user);let s,n;if(e.headers?.authorization){let o=e.headers.authorization.split(" ");s=o[0],n=o[1]}function i(o,c){return o?r(o):c?r(null,c):r("Must login")}switch(a(i,"handleResponse"),s){case"Basic":_o.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===N2.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?Fw.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):Fw.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:_o.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(b2,"authorize");function y2(e,t){let r=T2(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(y2,"checkPermissions");xw.exports={authorize:b2,checkPermissions:y2}});var Eo=m((zae,kw)=>{"use strict";var km=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Vm=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};kw.exports={Node:km,NodeSubscription:Vm}});var $w=m((Xae,Vw)=>{"use strict";var I2=A().OPERATIONS_ENUM,$m=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=I2.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};Vw.exports=$m});var rc=m((jae,Yw)=>{"use strict";var Ym=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)}};Yw.exports={RemotePayloadObject:Ym,RemotePayloadSubscription:Km}});var Ww=m((tce,Kw)=>{"use strict";var Wm=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}};Kw.exports=Wm});var Jw=m((oce,zw)=>{"use strict";var w2=Ww(),sce=xe(),Qw=ye(),C2=x(),{getSchemaPath:nce,getTransactionAuditStorePath:ice}=we(),{getDatabases:U2}=(de(),re(Ne));zw.exports=D2;async function D2(e){let t=new w2;try{let r=U2()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await Qw.environmentDataSize(schema_path,e.name),o=await Qw.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){C2.warn(`unable to stat table dbi due to ${r}`)}return t}a(D2,"lmdbGetTableSize")});var Zw=m((cce,Xw)=>{"use strict";var Qm=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}};Xw.exports=Qm});var fo=m((dce,rC)=>{"use strict";var L2=require("fs-extra"),M2=require("path"),Ut=require("systeminformation"),bn=x(),P2=Qe(),zm=Be(),r_=A(),v2=Jw(),tC=Qn(),{getThreadInfo:jw}=dt(),iS=Q();iS.initSync();var B2=Zw(),{openEnvironment:lce}=ye(),{getSchemaPath:_ce}=we(),{database:H2}=(de(),re(Ne)),t_;rC.exports={getHDBProcessInfo:jm,getNetworkInfo:tS,getDiskInfo:eS,getMemoryInfo:Zm,getCPUInfo:Xm,getTimeInfo:Jm,getSystemInformation:rS,systemInformation:q2,getTableSize:sS,getMetrics:nS};function Jm(){return Ut.time()}a(Jm,"getTimeInfo");async function Xm(){try{let{family:e,model:t,stepping:r,revision:s,voltage:n,speedmin:i,speedmax:o,governor:c,socket:u,cache:l,..._}=await Ut.cpu();_.cpu_speed=await Ut.cpuCurrentSpeed();let{raw_currentload:d,raw_currentload_idle:E,raw_currentload_irq:f,raw_currentload_nice:h,raw_currentload_system:T,raw_currentload_user:p,cpus:R,...O}=await Ut.currentLoad();return O.cpus=[],R.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:q,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return bn.error(`error in getCPUInfo: ${e}`),{}}}a(Xm,"getCPUInfo");async function Zm(){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(Zm,"getMemoryInfo");async function jm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await L2.readFile(M2.join(iS.get(r_.CONFIG_PARAMS.ROOTPATH),r_.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===r_.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(jm,"getHDBProcessInfo");async function eS(){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(eS,"getDiskInfo");async function tS(){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(tS,"getNetworkInfo");async function rS(){if(t_!==void 0)return t_;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,t_=e,t_}catch(t){return bn.error(`error in getSystemInformation: ${t}`),e}}a(rS,"getSystemInformation");async function sS(){let e=[],t=await tC.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await v2(s));return e}a(sS,"getTableSize");async function nS(){let e=await tC.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=H2({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(nS,"getMetrics");async function eC(){if(iS.get(r_.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await P2.getNATSReferences(),r=await t.streams.info(zm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(zm.WORK_QUEUE_CONSUMER_NAMES.stream_name,zm.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(eC,"getNatsStreamInfo");async function q2(e){let t=new B2;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await rS(),t.time=Jm(),t.cpu=await Xm(),t.memory=await Zm(),t.disk=await eS(),t.network=await tS(),t.harperdb_processes=await jm(),t.table_size=await sS(),t.metrics=await nS(),t.threads=await jw(),t.replication=await eC(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await rS();break;case"time":t.time=Jm();break;case"cpu":t.cpu=await Xm();break;case"memory":t.memory=await Zm();break;case"disk":t.disk=await eS();break;case"network":t.network=await tS();break;case"harperdb_processes":t.harperdb_processes=await jm();break;case"table_size":t.table_size=await sS();break;case"database_metrics":case"metrics":t.metrics=await nS();break;case"threads":t.threads=await jw();break;case"replication":t.replication=await eC();break;default:break}return t}a(q2,"systemInformation")});var oS=m((mce,sC)=>{"use strict";var fce=require("fs-extra"),hce=x();sC.exports={version:F2,printVersion:x2,nodeVersion:G2};var yn=Va();function F2(){if(yn)return yn.version}a(F2,"version");function G2(){if(yn&&yn.engines&&yn.engines["preferred-node"])return yn.engines["preferred-node"]}a(G2,"nodeVersion");function x2(){yn&&console.log(`HarperDB Version ${yn.version}`)}a(x2,"printVersion")});var $s=m((Rce,aC)=>{"use strict";var k2=br(),aS=V(),V2=require("util"),ui=A(),nC=Q();nC.initSync();var $2=xm(),iC=Nr(),{Node:pce,NodeSubscription:Tce}=Eo(),Y2=Zi(),K2=$w(),{RemotePayloadObject:W2,RemotePayloadSubscription:Q2}=rc(),{handleHDBError:z2,hdb_errors:J2}=W(),{HTTP_STATUS_CODES:X2,HDB_ERROR_MSGS:Z2}=J2,j2=os(),e3=fo(),t3=oS(),{getDatabases:r3}=(de(),re(Ne)),s3=V2.promisify($2.authorize),n3=iC.searchByHash,i3=iC.searchByValue;aC.exports={authHeaderToUser:o3,isEmpty:a3,getNodeRecord:c3,upsertNodeRecord:u3,buildNodePayloads:l3,checkClusteringEnabled:_3,getAllNodeRecords:d3,getSystemInfo:E3,reverseSubscription:oC};async function o3(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await s3(t,null),e}a(o3,"authHeaderToUser");function a3(e){return e==null}a(a3,"isEmpty");async function c3(e){let t=new Y2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return n3(t)}a(c3,"getNodeRecord");async function u3(e){let t=new K2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return k2.upsert(t)}a(u3,"upsertNodeRecord");function oC(e){if(aS.isEmpty(e.subscribe)||aS.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(oC,"reverseSubscription");function l3(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,_=aS.getTableHashAttribute(u,l),{subscribe:d,publish:E}=oC(c),f=r3()[u]?.[l],h=new Q2(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new W2(r,t,n,s)}a(l3,"buildNodePayloads");function _3(){if(!nC.get(ui.CONFIG_PARAMS.CLUSTERING_ENABLED))throw z2(new Error,Z2.CLUSTERING_NOT_ENABLED,X2.BAD_REQUEST,void 0,void 0,!0)}a(_3,"checkClusteringEnabled");async function d3(){let e=new j2(ui.SYSTEM_SCHEMA_NAME,ui.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await i3(e))}a(d3,"getAllNodeRecords");async function E3(){let e=await e3.getSystemInformation();return{hdb_version:t3.version(),node_version:e.node_version,platform:e.platform}}a(E3,"getSystemInfo")});var cS=m((Ace,hC)=>{"use strict";var s_=Qe(),cC=V(),uC=Be(),lC=A(),n_=x(),_C=$l(),f3=yh(),{RemotePayloadObject:h3}=rc(),{handleHDBError:dC,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:EC}=m3,{NodeSubscription:fC}=Eo();hC.exports=S3;async function S3(e,t){let r;try{r=await s_.request(`${t}.${uC.REQUEST_SUFFIX}`,new h3(lC.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),n_.trace("Response from remote describe all request:",r)}catch(o){n_.error(`addNode received error from describe all request to remote node: ${o}`);let c=s_.requestErrorHandler(o,"add_node",t);throw dC(new Error,c,EC.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===uC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw dC(new Error,o,EC.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===lC.SYSTEM_SCHEMA_NAME){await s_.createLocalTableStream(c,u);let h=new fC(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=cC.doesSchemaExist(c),_=s[c]!==void 0,d=u?cC.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&(n_.trace(`addNode creating schema: ${c}`),await _C.createSchema({operation:"create_schema",schema:c})),!d&&E){n_.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new f3(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await _C.createTable(h)}await s_.createLocalTableStream(c,u);let f=new fC(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(S3,"reviewSubscriptions")});var a_=m((Nce,pC)=>{"use strict";var{handleHDBError:i_,hdb_errors:p3}=W(),{HTTP_STATUS_CODES:o_}=p3,{addUpdateNodeValidator:T3}=Xl(),sc=x(),SC=A(),mC=Be(),R3=V(),uS=Qe(),nc=$s(),g3=Q(),A3=cS(),{Node:O3,NodeSubscription:N3}=Eo(),{broadcast:b3}=dt(),y3="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",I3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w3=g3.get(SC.CONFIG_PARAMS.CLUSTERING_NODENAME);pC.exports=C3;async function C3(e,t=!1){sc.trace("addNode called with:",e),nc.checkClusteringEnabled();let r=T3(e);if(r)throw i_(r,r.message,o_.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await nc.getNodeRecord(s);if(!R3.isEmptyOrZeroLength(d))throw i_(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,o_.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await A3(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=y3,o;let c=nc.buildNodePayloads(n,w3,SC.OPERATIONS_ENUM.ADD_NODE,await nc.getSystemInfo());sc.trace("addNode sending remote payload:",c);let u;try{u=await uS.request(`${s}.${mC.REQUEST_SUFFIX}`,c)}catch(d){sc.error(`addNode received error from request: ${d}`);let E=uS.requestErrorHandler(d,"add_node",s);throw i_(new Error,E,o_.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===mC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw i_(new Error,d,o_.INTERNAL_SERVER_ERROR,"error",d)}sc.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];sc.trace("Add node updating work stream for node:",s,"subscriptions:",f),await uS.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new N3(f.schema,f.table,f.publish,f.subscribe))}let _=new O3(s,l,u.system_info);return await nc.upsertNodeRecord(_),b3({type:"nats_update"}),i.length>0?o.message=I3:o.message=`Successfully added '${s}' to manifest`,o}a(C3,"addNode")});var _S=m((yce,gC)=>{"use strict";var{handleHDBError:c_,hdb_errors:U3}=W(),{HTTP_STATUS_CODES:u_}=U3,{addUpdateNodeValidator:D3}=Xl(),ic=x(),RC=A(),TC=Be(),L3=V(),lS=Qe(),oc=$s(),M3=Q(),{cloneDeep:P3}=require("lodash"),v3=cS(),{NodeSubscription:B3}=Eo(),{broadcast:H3}=dt(),q3="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",F3="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",G3=M3.get(RC.CONFIG_PARAMS.CLUSTERING_NODENAME);gC.exports=x3;async function x3(e){ic.trace("updateNode called with:",e),oc.checkClusteringEnabled();let t=D3(e);if(t)throw c_(t,t.message,u_.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=P3(await oc.getNodeRecord(r));if(L3.isEmptyOrZeroLength(s))throw c_(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,u_.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await v3(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=q3,o;let c=oc.buildNodePayloads(n,G3,RC.OPERATIONS_ENUM.UPDATE_NODE,await oc.getSystemInfo());ic.trace("updateNode sending remote payload:",c);let u;try{u=await lS.request(`${r}.${TC.REQUEST_SUFFIX}`,c)}catch(l){ic.error(`updateNode received error from request: ${l}`);let _=lS.requestErrorHandler(l,"update_node",r);throw c_(new Error,_,u_.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===TC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw c_(new Error,l,u_.INTERNAL_SERVER_ERROR,"error",l)}ic.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];ic.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await lS.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await k3(s[0],n,u.system_info),i.length>0?o.message=F3:o.message=`Successfully updated '${r}'`,o}a(x3,"updateNode");async function k3(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 B3(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await oc.upsertNodeRecord(s),H3({type:"nats_update"})}a(k3,"updateNodeTable")});var yC=m((wce,bC)=>{"use strict";var NC=require("joi"),{string:AC}=NC.types(),V3=Pe(),OC=A(),$3=Q(),Y3=Be();bC.exports=K3;function K3(e){let t=AC.invalid($3.get(OC.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Y3.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=NC.object({operation:AC.valid(OC.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return V3.validateBySchema(e,r)}a(K3,"removeNodeValidator")});var __=m((Uce,LC)=>{"use strict";var{handleHDBError:IC,hdb_errors:W3}=W(),{HTTP_STATUS_CODES:wC}=W3,Q3=yC(),ac=x(),CC=$s(),z3=V(),l_=A(),UC=Be(),DC=Qe(),J3=Q(),{RemotePayloadObject:X3}=rc(),{NodeSubscription:Z3}=Eo(),j3=va(),eX=jn(),{broadcast:tX}=dt(),rX=J3.get(l_.CONFIG_PARAMS.CLUSTERING_NODENAME);LC.exports=sX;async function sX(e){ac.trace("removeNode called with:",e),CC.checkClusteringEnabled();let t=Q3(e);if(t)throw IC(t,t.message,wC.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await CC.getNodeRecord(r);if(z3.isEmptyOrZeroLength(s))throw IC(new Error,`Node '${r}' was not found.`,wC.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new X3(l_.OPERATIONS_ENUM.REMOVE_NODE,rX,[]),i,o=!1;try{i=await DC.request(`${r}.${UC.REQUEST_SUFFIX}`,n),ac.trace("Remove node reply from remote node:",r,i)}catch(u){ac.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];ac.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new Z3(_.schema,_.table,!1,!1);await DC.updateWorkStream(d,r)}let c=new j3(l_.SYSTEM_SCHEMA_NAME,l_.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await eX.deleteRecord(c),tX({type:"nats_update"}),i?.status===UC.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(ac.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(sX,"removeNode")});var vC=m((Lce,PC)=>{"use strict";var MC=require("joi"),{string:nX,array:iX}=MC.types(),oX=Pe(),aX=Xl();PC.exports=cX;function cX(e){let t=MC.object({operation:nX.valid("configure_cluster").required(),connections:iX.items(aX.validation_schema).required()});return oX.validateBySchema(e,t)}a(cX,"configureClusterValidator")});var dS=m((Pce,GC)=>{"use strict";var uX=A(),d_=x(),lX=V(),_X=__(),dX=a_(),BC=$s(),EX=vC(),{handleHDBError:HC,hdb_errors:fX}=W(),{HTTP_STATUS_CODES:qC}=fX,hX="Configure cluster complete.",mX="Failed to configure the cluster. Check the logs for more details.",SX="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";GC.exports=pX;async function pX(e){d_.trace("configure cluster called with:",e),BC.checkClusteringEnabled();let t=EX(e);if(t)throw HC(t,t.message,qC.BAD_REQUEST,void 0,void 0,!0);let r=await BC.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(FC(_X,{operation:uX.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);d_.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(FC(dX,f,f.node_name))}let c=await Promise.allSettled(i);d_.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"&&(d_.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(lX.isEmptyOrZeroLength(u))return{message:hX,connections:l};if(_)return{message:SX,failed_nodes:u,connections:l};throw HC(new Error,mX,qC.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(pX,"configureCluster");async function FC(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(FC,"functionWrapper")});var kC=m((Bce,xC)=>{"use strict";var E_=require("joi"),TX=Pe(),{validateSchemaExists:RX,validateTableExists:gX,validateSchemaName:AX}=rs(),OX=E_.object({operation:E_.string().valid("purge_stream"),schema:E_.string().custom(RX).custom(AX).required(),table:E_.string().custom(gX).required()});function NX(e){return TX.validateBySchema(e,OX)}a(NX,"purgeStreamValidator");xC.exports=NX});var ES=m((qce,VC)=>{"use strict";var{handleHDBError:bX,hdb_errors:yX}=W(),{HTTP_STATUS_CODES:IX}=yX,wX=kC(),CX=Qe(),UX=$s();VC.exports=DX;async function DX(e){let t=wX(e);if(t)throw bX(t,t.message,IX.BAD_REQUEST,void 0,void 0,!0);UX.checkClusteringEnabled();let{schema:r,table:s}=e;return await CX.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(DX,"purgeStream")});var mS=m((Gce,zC)=>{"use strict";var hS=$s(),LX=Qe(),KC=Q(),f_=A(),li=Be(),MX=V(),fS=x(),{RemotePayloadObject:PX}=rc(),{ErrorCode:$C}=require("nats"),YC=KC.get(f_.CONFIG_PARAMS.CLUSTERING_ENABLED),WC=KC.get(f_.CONFIG_PARAMS.CLUSTERING_NODENAME);zC.exports={clusterStatus:vX,buildNodeStatus:QC};async function vX(){let e={node_name:WC,is_enabled:YC,connections:[]};if(!YC)return e;let t=await hS.getAllNodeRecords();if(MX.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(QC(t[s],e.connections));return await Promise.allSettled(r),e}a(vX,"clusterStatus");async function QC(e,t){let r=e.name,s=new PX(f_.OPERATIONS_ENUM.CLUSTER_STATUS,WC,void 0,await hS.getSystemInfo()),n,i,o=li.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await LX.request(li.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===li.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=li.CLUSTER_STATUS_STATUSES.CLOSED,fS.error(`Error getting node status from ${r} `,n))}catch(u){fS.warn(`Error getting node status from ${r}`,u),u.code===$C.NoResponders?o=li.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===$C.Timeout?o=li.CLUSTER_STATUS_STATUSES.TIMEOUT:o=li.CLUSTER_STATUS_STATUSES.CLOSED}let c=new BX(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!==f_.PRE_4_0_0_VERSION&&await hS.upsertNodeRecord(u)}catch(u){fS.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(QC,"buildNodeStatus");function BX(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(BX,"NodeStatusObject")});var pS=m((kce,JC)=>{"use strict";var{handleHDBError:HX,hdb_errors:qX}=W(),{HTTP_STATUS_CODES:FX}=qX,GX=Qe(),xX=$s(),SS=V(),h_=require("joi"),kX=Pe(),VX=2e3,$X=h_.object({timeout:h_.number().min(1),connected_nodes:h_.boolean(),routes:h_.boolean()});JC.exports=YX;async function YX(e){xX.checkClusteringEnabled();let t=kX.validateBySchema(e,$X);if(t)throw HX(t,t.message,FX.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||SS.autoCastBoolean(s),o=n===void 0||SS.autoCastBoolean(n),c={nodes:[]},u=await GX.getServerList(r??VX),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:SS.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(YX,"clusterNetwork")});var eU=m(($ce,jC)=>{"use strict";var TS=require("joi"),XC=Pe(),{route_constraints:ZC}=wE();jC.exports={setRoutesValidator:KX,deleteRoutesValidator:WX};function KX(e){let t=TS.object({server:TS.valid("hub","leaf").required(),routes:ZC.required()});return XC.validateBySchema(e,t)}a(KX,"setRoutesValidator");function WX(e){let t=TS.object({routes:ZC.required()});return XC.validateBySchema(e,t)}a(WX,"deleteRoutesValidator")});var gS=m((Kce,nU)=>{"use strict";var _i=Rr(),RS=V(),m_=A(),tU=eU(),{handleHDBError:rU,hdb_errors:QX}=W(),{HTTP_STATUS_CODES:sU}=QX,zX="cluster routes successfully set",JX="cluster routes successfully deleted";nU.exports={setRoutes:XX,getRoutes:ZX,deleteRoutes:jX};function XX(e){let t=tU.setRoutesValidator(e);if(t)throw rU(t,t.message,sU.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=RS.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(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:zX,set:o,skipped:i}}a(XX,"setRoutes");function ZX(){let e=_i.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(ZX,"getRoutes");function jX(e){let t=tU.deleteRoutesValidator(e);if(t)throw rU(t,t.message,sU.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=RS.isEmptyOrZeroLength(s)?null:s,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=RS.isEmptyOrZeroLength(n)?null:n,_i.updateConfigValue(m_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:JX,deleted:i,skipped:o}}a(jX,"deleteRoutes")});var oU=m((Qce,iU)=>{"use strict";var cc=require("alasql"),di=require("recursive-iterator"),$r=x(),e4=V(),uc=A(),AS=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,r4(this.ast,this.affected_attributes,this.table_lookup,this.schema_lookup,this.table_to_schema_lookup)}getAttributesBySchemaTableName(t,r){if(!t||!r||!this.affected_attributes)return[];if(this.affected_attributes.has(t))return!this.affected_attributes.get(t).has(r)&&(r=this.table_lookup.get(r),!r)?[]:this.affected_attributes.get(t).get(r)}getAllTables(){let t=[];if(!this.affected_attributes)return t;for(let r of this.affected_attributes.keys())t.push(Array.from(this.affected_attributes.get(r).keys()));return t}getTablesBySchemaName(t){return!t||!this.affected_attributes?[]:Array.from(this.affected_attributes.get(t).keys())}getSchemas(){return this.affected_attributes?Array.from(this.affected_attributes.keys()):[]}getAst(){return this.ast}updateAttributeWildcardsForRolePerms(t){let r=this.ast.columns.filter(n=>uc.SEARCH_WILDCARDS.includes(n.columnid));if(r.length===0)return this.ast;let s=this.ast.from[0].databaseid;return this.ast.columns=this.ast.columns.filter(n=>!uc.SEARCH_WILDCARDS.includes(n.columnid)),r.forEach(n=>{let i=this.table_to_schema_lookup.has(n.tableid)?this.table_to_schema_lookup.get(n.tableid):s,o=this.table_lookup.has(n.tableid)?this.table_lookup.get(n.tableid):this.ast.from[0].tableid;if(t[i]&&t[i].tables[o]&&t[i].tables[o][uc.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=t4(t[i].tables[o].attribute_permissions):c=global.hdb_schema[i][o].attributes.map(l=>({attribute_name:l.attribute}));let u=this.affected_attributes.get(i).get(o).filter(l=>!uc.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new cc.yy.Column({columnid:l});n.tableid&&(_.tableid=n.tableid),this.ast.columns.push(_),u.includes(l)||u.push(l)}),this.affected_attributes.get(i).set(o,u)}}),this.ast}};function t4(e){return e.filter(t=>t[uc.PERMS_CRUD_ENUM.READ])}a(t4,"filterReadRestrictedAttrs");function r4(e,t,r,s,n){s4(e,t,r,s,n)}a(r4,"interpretAST");function lc(e,t,r,s,n){if(!(!e||!e.databaseid)&&(t.has(e.databaseid)||t.set(e.databaseid,new Map),t.get(e.databaseid).has(e.tableid)||t.get(e.databaseid).set(e.tableid,[]),e.as&&(r.has(e.as)||r.set(e.as,e.tableid),s&&!s.has(e.as)&&s.set(e.as,e.databaseid)),n)){let i=e.databaseid,o=e.tableid;e.as&&(o=e.as),n.set(o,i)}}a(lc,"addSchemaTableToMap");function s4(e,t,r,s,n){if(!e){$r.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof cc.yy.Insert?a4(e,t,r):e instanceof cc.yy.Select?n4(e,t,r,s,n):e instanceof cc.yy.Update?i4(e,t,r):e instanceof cc.yy.Delete?o4(e,t,r):$r.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(s4,"getRecordAttributesAST");function n4(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(e4.isEmptyOrZeroLength(i)){$r.error("No schema specified");return}e.from.forEach(c=>{lc(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),lc(c.table,t,r,s,n)});let o=new di(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{$r.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new di(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new di(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{$r.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new di(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{$r.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(n4,"getSelectAttributes");function i4(e,t,r){if(!e){$r.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(i4,"getUpdateAttributes");function o4(e,t,r){if(!e){$r.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new di(e.where),n=e.table.databaseid;lc(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.table.tableid,n,i.columnid,t,r)}a(o4,"getDeleteAttributes");function a4(e,t,r){if(!e){$r.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new di(e.columns),n=e.into.databaseid;lc(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&OS(e.into.tableid,n,i.columnid,t,r)}a(a4,"getInsertAttributes");function OS(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(OS,"pushAttribute");iU.exports=AS});var yS=m((Jce,lU)=>{var S_=ba(),aU=require("chalk"),_r=x(),cU=require("prompt"),{promisify:c4}=require("util"),NS=A(),u4=require("fs-extra"),l4=require("path"),_4=V(),d4=oS(),uU=Q();uU.initSync();var E4=require("moment"),f4=c4(cU.get),h4=l4.join(uU.getHdbBasePath(),NS.LICENSE_KEY_DIR_NAME,NS.LICENSE_FILE_NAME,NS.LICENSE_FILE_NAME);lU.exports={getFingerprint:S4,setLicense:m4,parseLicense:bS,register:p4,getRegistrationInfo:R4};async function m4(e){if(e&&e.key&&e.company){try{_r.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await bS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw _r.error(r),_r.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(m4,"setLicense");async function S4(){let e={};try{e=await S_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw _r.error(r),_r.error(t),new Error(r)}return e}a(S4,"getFingerprint");async function bS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");_r.info("Validating license input...");let r=S_.validateLicense(e,t);if(_r.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(_r.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(_r.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{_r.info("writing license to disk"),await u4.writeFile(h4,JSON.stringify({license_key:e,company:t}))}catch(s){throw _r.error("Failed to write License"),s}return"Registration successful."}a(bS,"parseLicense");async function p4(){let e=await T4();return bS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(p4,"register");async function T4(){let e=await S_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:aU.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:aU.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{cU.start()}catch(s){_r.error(s)}let r;try{r=await f4(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(T4,"promptForRegistration");async function R4(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await S_.getLicense()}catch(r){throw _r.error(`There was an error when searching licenses due to: ${r.message}`),r}if(_4.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=d4.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=E4.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(R4,"getRegistrationInfo")});var dU=m((Zce,_U)=>{"use strict";var g4=Be(),IS=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+g4.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"}};_U.exports=IS});var hU=m((eue,fU)=>{"use strict";var EU=Be(),wS=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+EU.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+EU.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"}};fU.exports=wS});var SU=m((rue,mU)=>{"use strict";var CS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};mU.exports=CS});var TU=m((nue,pU)=>{"use strict";var A4=Be(),US=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+A4.SERVER_SUFFIX.ADMIN,this.password=r}};pU.exports=US});var MS=m((oue,AU)=>{"use strict";var _c=require("path"),g_=require("fs-extra"),O4=dU(),N4=hU(),b4=SU(),y4=TU(),DS=ar(),ho=V(),Kt=Rr(),R_=A(),p_=Be(),{CONFIG_PARAMS:Je}=R_,Ec=x(),A_=Q(),RU=Fs(),LS=Qe(),dc="clustering",I4=1e4,gU=5;AU.exports={generateNatsConfig:w4,removeNatsConfig:C4};async function w4(e=!1,t=void 0){A_.initSync();let r=A_.get(Je.ROOTPATH),s=_c.join(r,dc,p_.PID_FILES.HUB),n=_c.join(r,dc,p_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=_c.join(r,dc,p_.NATS_CONFIG_FILES.HUB_SERVER),c=_c.join(r,dc,p_.NATS_CONFIG_FILES.LEAF_SERVER),u=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERTIFICATE),l=Kt.getConfigFromFile(Je.CLUSTERING_TLS_PRIVATEKEY),_=Kt.getConfigFromFile(Je.CLUSTERING_TLS_CERT_AUTH),d=Kt.getConfigFromFile(Je.CLUSTERING_TLS_INSECURE),E=Kt.getConfigFromFile(Je.CLUSTERING_TLS_VERIFY),f=Kt.getConfigFromFile(Je.CLUSTERING_NODENAME),h=Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await LS.checkNATSServerInstalled()||O_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await DS.listUsers(),p=Kt.getConfigFromFile(Je.CLUSTERING_USER),R=await DS.getClusterUser();(ho.isEmpty(R)||R.active!==!0)&&O_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await T_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await T_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await T_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await T_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,je]of T.entries())je.role.role===R_.ROLE_TYPES_ENUM.CLUSTER_USER&&je.active&&(O.push(new y4(je.username,RU.decrypt(je.hash))),k.push(new b4(je.username,RU.decrypt(je.hash))));let $=[],{hub_routes:U}=Kt.getClusteringRoutes();if(!ho.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new O4(Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NAME),Kt.getConfigFromFile(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=ho.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await g_.writeJson(o,b),Ec.trace(`Hub server config written to ${o}`));let P=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,q=new N4(Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete q.tls.ca_file,(t===void 0||t===R_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await g_.writeJson(c,q),Ec.trace(`Leaf server config written to ${c}`))}a(w4,"generateNatsConfig");async function T_(e){let t=A_.get(e);return ho.isEmpty(t)&&O_(`port undefined for '${e}'`),await ho.isPortTaken(t)&&O_(`'${e}' port '${t}' is is in use by another process, check to see if HarperDB is already running or another process is using this port.`),!0}a(T_,"isPortAvailable");function O_(e){let t=`Error generating clustering config: ${e}`;Ec.error(t),console.error(t),process.exit(1)}a(O_,"generateNatsConfigError");async function C4(e){let{port:t,config_file:r}=LS.getServerConfig(e),{username:s,decrypt_hash:n}=await DS.getClusterUser(),i=0,o=500;for(;i<gU;){try{let l=await LS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){Ec.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=gU)throw new Error(`Operations API timed out attempting to connect to ${e}. This is commonly caused by incorrect clustering config. Check the ${e} log for further details.`);await ho.async_set_timeout(o*i)}let c="0".repeat(I4),u=_c.join(A_.get(Je.ROOTPATH),dc,r);await g_.writeFile(u,c),await g_.remove(u),Ec.notify(e,"started.")}a(C4,"removeNatsConfig")});var wU=m((cue,IU)=>{"use strict";var dr=Q(),U4=ba(),oe=A(),fc=Be(),Ys=require("path"),{PACKAGE_ROOT:b_}=A(),OU=Q(),N_=V(),mo="/dev/null",D4=Ys.join(b_,"launchServiceScripts"),NU=Ys.join(b_,"utility/scripts"),L4=Ys.join(NU,oe.HDB_RESTART_SCRIPT),bU=Ys.resolve(b_,"dependencies",`${process.platform}-${process.arch}`,fc.NATS_BINARY_NAME);function yU(){let t=U4.licenseSearch().ram_allocation||oe.RAM_ALLOCATION_ENUM.DEFAULT,r=oe.MEM_SETTING_KEY+t,s={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.HDB,IS_SCRIPTED_SERVICE:!0};return N_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:b_}}a(yU,"generateMainServerConfig");var M4=9930;function P4(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",fc.NATS_CONFIG_FILES.HUB_SERVER),r=Ys.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=OU.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==M4?"-"+s:""),script:bU,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 dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(P4,"generateNatsHubServerConfig");var v4=9940;function B4(){dr.initSync(!0);let e=dr.get(oe.CONFIG_PARAMS.ROOTPATH),t=Ys.join(e,"clustering",fc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ys.join(dr.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=OU.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=fc.LOG_LEVEL_FLAGS[dr.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==v4?"-"+s:""),script:bU,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 dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=mo,i.error_file=mo),i}a(B4,"generateNatsLeafServerConfig");function H4(){dr.initSync();let e=Ys.join(dr.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:D4,autorestart:!1};return dr.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=mo,t.error_file=mo),t}a(H4,"generateClusteringUpgradeV4ServiceConfig");function q4(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return N_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=N_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:NU},script:L4}}a(q4,"generateRestart");function F4(){return{apps:[yU()]}}a(F4,"generateAllServiceConfigs");IU.exports={generateAllServiceConfigs:F4,generateMainServerConfig:yU,generateRestart:q4,generateNatsHubServerConfig:P4,generateNatsLeafServerConfig:B4,generateClusteringUpgradeV4ServiceConfig:H4}});var VU=m((hue,kU)=>{"use strict";var Re=A(),G4=V(),hc=MS(),mc=Qe(),ds=Be(),In=wU(),y_=Q(),Ks=x(),x4=$s(),{startWorker:CU,onMessageFromWorkers:k4}=dt(),V4=fo(),$4=require("util"),DU=require("child_process"),{execFile:Y4}=DU,lue=$4.promisify(DU.exec),_ue=require("systeminformation"),fe;kU.exports={enterPM2Mode:K4,start:Ei,stop:PS,reload:LU,restart:MU,list:vS,describe:vU,connect:Ws,kill:X4,startAllServices:Z4,startService:BS,getUniqueServicesList:BU,restartAllServices:j4,isServiceRegistered:HU,reloadStopStart:qU,restartHdb:PU,deleteProcess:z4,startClusteringProcesses:GU,startClusteringThreads:xU,isHdbRestartRunning:J4,isClusteringRunning:tZ,stopClustering:eZ,reloadClustering:rZ};var{PACKAGE_ROOT:due}=A(),Eue=A(),{loggerWithTag:fue}=Ks,Sc=!1;k4(e=>{e.type==="restart"&&y_.initSync(!0)});function K4(){Sc=!0}a(K4,"enterPM2Mode");function Ws(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Ks.setupConsoleLogging(),r&&t(r),e(s)})})}a(Ws,"connect");var Wt,W4=10,UU;function Ei(e){if(Sc)return Q4(e);let t=Y4(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!UU&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<W4&&Ei(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=y_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=ds.LOG_LEVELS[d]}if(ds.LOG_LEVEL_HIERARCHY[i]>=ds.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===ds.LOG_LEVELS.ERR||l===ds.LOG_LEVELS.WRN?Ks.OUTPUTS.STDERR:Ks.OUTPUTS.STDOUT;Ks.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{UU=!0,Wt&&(Wt.map(i=>i.kill()),process.exit(0))},"kill_children");process.on("exit",n),process.on("SIGINT",n),process.on("SIGQUIT",n),process.on("SIGTERM",n)}Wt.push(t)}a(Ei,"start");function Q4(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(Q4,"startWithPM2");function PS(e){if(!Sc){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.stop(e,async(s,n)=>{s&&(fe.disconnect(),r(s)),fe.delete(e,(i,o)=>{i&&(fe.disconnect(),r(s)),fe.disconnect(),t(o)})})})}a(PS,"stop");function LU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(LU,"reload");function MU(e){if(!Sc)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(MU,"restart");function z4(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(z4,"deleteProcess");async function PU(){await Ei(In.generateRestart())}a(PU,"restartHdb");async function J4(){let e=await vS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(J4,"isHdbRestartRunning");function vS(){return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(vS,"list");function vU(e){return new Promise(async(t,r)=>{try{await Ws()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(vU,"describe");function X4(){if(!Sc){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Ws()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(X4,"kill");async function Z4(){try{await GU(),await xU(),await Ei(In.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(Z4,"startAllServices");async function BS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=In.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=In.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=In.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=In.generateNatsHubServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=In.generateNatsLeafServerConfig(),await Ei(t),await hc.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=In.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await Ei(t)}catch(t){throw fe.disconnect(),t}}a(BS,"startService");async function BU(){try{let e=await vS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw fe.disconnect(),e}}a(BU,"getUniqueServicesList");async function j4(e=[]){try{let t=!1,r=await BU();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 MU(o))}t&&await qU(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(j4,"restartAllServices");async function HU(e){if(Wt?.find(r=>r.name===e))return!0;let t=await V4.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(HU,"isServiceRegistered");async function qU(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?y_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):y_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await vU(e),s=G4.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await PS(e),await BS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await PU():await LU(e)}a(qU,"reloadStopStart");var FU;async function GU(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await BS(t)}}a(GU,"startClusteringProcesses");async function xU(){FU=CU(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await mc.createWorkQueueStream(ds.WORK_QUEUE_CONSUMER_NAMES),await mc.updateIngestStreamConsumer(),await mc.updateLocalStreams();let e=await x4.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ks.info("Starting clustering upgrade 4.0.0 process"),CU(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(xU,"startClusteringThreads");async function eZ(){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 FU.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await PS(t)}}a(eZ,"stopClustering");async function tZ(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await HU(t)===!1)return!1}return!0}a(tZ,"isClusteringRunning");async function rZ(){await hc.generateNatsConfig(!0),await mc.reloadNATSHub(),await mc.reloadNATSLeaf(),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await hc.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(rZ,"reloadClustering")});var VS=m((Sue,zU)=>{"use strict";var sZ=require("minimist"),{isMainThread:FS,parentPort:KU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:pc}=He,Es=x(),GS=V(),I_=MS(),So=Qe(),HS=Be(),WU=Rr(),hs=VU(),$U=fo(),nZ=SE(),{restartWorkers:w_,onMessageByType:iZ}=dt(),{handleHDBError:oZ,hdb_errors:aZ}=W(),{HTTP_STATUS_CODES:cZ}=aZ,C_=Q();C_.initSync();var Tc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,uZ="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",YU="Clustering is not enabled so cannot be restarted",lZ="Invalid service",fi,Yr;zU.exports={restart:QU,restartService:xS};FS&&iZ(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?xS({service:e.workerType}):QU({operation:"restart"})});async function QU(e){Yr=Object.keys(e).length===0,fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=sZ(process.argv);if(t.service){await xS(t);return}if(Yr&&!fi){console.error(uZ);return}if(Yr&&console.log(Tc),fi){hs.enterPM2Mode(),Es.notify(Tc);let r=nZ(Object.keys(He.CONFIG_PARAM_MAP),!0);return GS.isEmptyOrZeroLength(Object.keys(r))||WU.updateConfigValue(void 0,void 0,r,!0,!0),dZ(),Tc}return FS?(Es.notify(Tc),await kS(),setTimeout(()=>{w_()},50)):KU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),Tc}a(QU,"restart");async function xS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw oZ(new Error,lZ,cZ.BAD_REQUEST,void 0,void 0,!0);if(fi=await hs.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!FS)return KU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case pc.clustering:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=YU;break}Yr&&console.log("Restarting clustering"),Es.notify("Restarting clustering"),await kS();break;case pc.clustering_config:case pc["clustering config"]:if(!C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=YU;break}Yr&&console.log("Restarting clustering_config"),Es.notify("Restarting clustering_config"),await hs.reloadClustering();break;case"custom_functions":case"custom functions":case pc.harperdb:case pc.http_workers:if(Yr&&!fi){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Yr&&console.log("Restarting http_workers"),Es.notify("Restarting http_workers"),fi?await hs.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{w_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(Es.error(r),Yr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(xS,"restartService");async function _Z(){await So.publishToStream(`${HS.SUBJECT_PREFIXES.TXN}.${HS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,HS.WORK_QUEUE_CONSUMER_NAMES.stream_name,So.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(_Z,"postDummyNatsMsg");async function dZ(){await kS(),await hs.restart(He.HDB_PROC_DESCRIPTOR),await GS.async_set_timeout(2e3),C_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await qS(),Yr&&(await So.closeConnection(),process.exit(0))}a(dZ,"restartPM2Mode");async function kS(){if(!WU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await $U.getHDBProcessInfo()).clustering.length===0)Es.trace("Clustering not running, restart will start clustering services"),await I_.generateNatsConfig(!0),await hs.startClusteringProcesses(),await hs.startClusteringThreads(),await qS(),Yr&&await So.closeConnection();else{await _Z(),await I_.generateNatsConfig(!0),fi?(Es.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await hs.restart(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await $U.getHDBProcessInfo()).clustering.forEach(n=>{Es.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await GS.async_set_timeout(3e3),await qS(),await So.updateLocalStreams(),Yr&&await So.closeConnection(),Es.trace("Restart clustering restarting ingest and reply service threads");let t=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=w_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(kS,"restartClustering");async function qS(){await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await I_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(qS,"removeNatsConfig")});var oD=m((Rue,iD)=>{"use strict";var Tue=require("lodash"),Qt=A(),{handleHDBError:JU,hdb_errors:EZ}=W(),{HDB_ERROR_MSGS:fZ,HTTP_STATUS_CODES:hZ}=EZ,$S=x();iD.exports={getRolePermissions:SZ};var hi=Object.create(null),mZ=a(e=>({key:e,perms:{}}),"perms_template_obj"),eD=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),tD=a((e=!1,t=!1,r=!1,s=!1)=>({[Qt.PERMS_CRUD_ENUM.READ]:e,[Qt.PERMS_CRUD_ENUM.INSERT]:t,[Qt.PERMS_CRUD_ENUM.UPDATE]:r,[Qt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),YS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...tD(t,r,s,n)}),"table_perms_template"),XU=a((e,t=tD())=>({attribute_name:e,describe:nD(t),[Rc]:t[Rc],[KS]:t[KS],[WS]:t[WS]}),"attr_perms_template"),ZU=a((e,t=!1)=>({attribute_name:e,describe:t,[Rc]:t}),"timestamp_attr_perms_template"),{READ:Rc,INSERT:KS,UPDATE:WS}=Qt.PERMS_CRUD_ENUM,rD=Object.values(Qt.PERMS_CRUD_ENUM),sD=[Rc,KS,WS];function SZ(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Qt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(hi[t]&&hi[t].key===s)return hi[t].perms;let n=pZ(e,r);return hi[t]?hi[t].key=s:hi[t]=mZ(s),hi[t].perms=n,n}catch(r){if(!e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Qt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Qt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw $S.error(s),$S.debug(r),JU(new Error,fZ.OUTDATED_PERMS_TRANSLATION_ERROR,hZ.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
9
+ ${r.stack}`;throw $S.error(s),JU(new Error)}}}a(SZ,"getRolePermissions");function pZ(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Qt.SYSTEM_SCHEMA_NAME]=s[Qt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=TZ(t[i]);return}r[i]=eD(),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=RZ(c,u);r[i].describe||rD.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=YS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=YS()})}),r}a(pZ,"translateRolePermissions");function TZ(e){let t=eD(!0);return Object.keys(e).forEach(r=>{t.tables[r]=YS(!0,!0,!0,!0,!0)}),t}a(TZ,"createStructureUserPermissions");function RZ(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Qt.TIME_STAMP_NAMES.includes(d)&&(E=ZU(d,_[Rc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=XU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=nD(_),n.attribute_permissions.push(_),c||gZ(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=ZU(l):_=XU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=jU(n),n}else return e.describe=jU(e),e}a(RZ,"getTableAttrPerms");function jU(e){return rD.filter(t=>e[t]).length>0}a(jU,"getSchemaTableDescribePerm");function nD(e){return sD.filter(t=>e[t]).length>0}a(nD,"getAttributeDescribePerm");function gZ(e,t){sD.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(gZ,"checkForHashPerms")});var aD={};et(aD,{Resources:()=>U_,keyArrayToString:()=>po,resetResources:()=>AZ,resources:()=>wn});function AZ(){return wn=new U_}function po(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var U_,wn,gc=Se(()=>{$n();U_=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ye(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(AZ,"resetResources");a(po,"keyArrayToString")});var To,QS=Se(()=>{To=class extends Map{static{a(this,"Headers")}set(t,r){return typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r),super.set(t.toLowerCase(),[t,r])}get(t){return typeof t!="string"&&(t=""+t),super.get(t.toLowerCase())?.[1]}append(t,r,s){typeof t!="string"&&(t=""+t),typeof r!="string"&&(r=""+r);let n=t.toLowerCase(),i=super.get(n);if(i){let o=i[1];s?r=(typeof o=="string"?o:o.join(", "))+", "+r:typeof o=="string"?r=[o,r]:o.push(r)}return super.set(n,[t,r])}[Symbol.iterator](){return super.values()[Symbol.iterator]()}}});var Ac={};et(Ac,{authentication:()=>ED,login:()=>DZ,logout:()=>LZ,start:()=>UZ});async function ED(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?yZ?bZ:[]:NZ?OZ:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h={"Access-Control-Allow-Methods":"POST, GET, PUT, DELETE, PATCH, OPTIONS","Access-Control-Allow-Headers":"Accept, Content-Type, Authorization","Access-Control-Allow-Origin":i};return D_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),D_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(D_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let T=n.indexOf(";",h),p=n.indexOf("=",h);c=n.slice(p+1,T===-1?n.length:T),u=await uD.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new P_.AuthAuditLog(f,h,Rt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);p.auth_strategy=T,c&&(p.session_id=c),e.headers.referer&&(p.referer=e.headers.referer),e.headers.origin&&(p.origin=e.headers.origin),h===Rt.AUTH_AUDIT_STATUS.SUCCESS?cD.notify(p):cD.error(p)},"authAuditLog"),_;if(s){if(_=Ro.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await rt.auth(T,p):null;break;case"Bearer":try{_=await(0,M_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,M_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return CZ&&(Ro.get(h)||(Ro.set(h,h),l(T,Rt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Qs({error:R.message},e)}}Ro.set(s,_),wZ&&l(_.username,Rt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await rt.auth(u.user,null,!1):IZ&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,L_.getSuperUser)());D_&&(e.session.update=function(f){if(!c){c=(0,_D.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,uD.put(f)},e.login=async function(f,h){e.user=await rt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&wn.loginPath?(d.status=302,d.headers.set("Location",wn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new To);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function UZ({server:e,port:t}){e.request(ED,{port:t||"all"}),lD||(lD=!0,setInterval(()=>{Ro=new Map},wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),dD.user.addListener(()=>{Ro=new Map}))}async function DZ(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 LZ(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var L_,M_,_D,wr,Rt,P_,dD,cD,OZ,NZ,bZ,yZ,uD,D_,IZ,wZ,CZ,Ro,lD,v_=Se(()=>{L_=C(ar());Jr();gc();M_=C(tc());de();_D=require("uuid"),wr=C(Q()),Rt=C(A()),P_=C(x());go();dD=C(Ia());QS();cD=(0,P_.loggerWithTag)("auth-event");wr.initSync();OZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),NZ=wr.get(Rt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),bZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),yZ=wr.get(Rt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);rt.auth=L_.findAndValidateUser;uD=nt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),D_=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,IZ=wr.get(Rt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,wZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,CZ=wr.get(Rt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,Ro=new Map;a(ED,"authentication");a(UZ,"start");a(DZ,"login");a(LZ,"logout")});var RD=m((Lue,TD)=>{"use strict";var he=require("joi"),fD=require("fs-extra"),hD=require("path"),Js=Pe(),mD=Q(),SD=A(),pD=x(),{hdb_errors:MZ}=W(),{HDB_ERROR_MSGS:Dt}=MZ,zs=/^[a-zA-Z0-9-_]+$/;TD.exports={getDropCustomFunctionValidator:vZ,setCustomFunctionValidator:BZ,addComponentValidator:GZ,dropCustomFunctionProjectValidator:xZ,packageComponentValidator:kZ,deployComponentValidator:VZ,setComponentFileValidator:HZ,getComponentFileValidator:FZ,dropComponentFileValidator:qZ};function B_(e,t,r){try{let s=mD.get(SD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=hD.join(s,t);return fD.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return pD.error(s),r.message(Dt.VALIDATION_ERR)}}a(B_,"checkProjectExists");function Oc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Oc,"checkFilePath");function PZ(e,t,r,s){try{let n=mD.get(SD.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=hD.join(n,e,t,r+".js");return fD.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return pD.error(n),s.message(Dt.VALIDATION_ERR)}}a(PZ,"checkFileExists");function vZ(e){let t=he.object({project:he.string().pattern(zs).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(zs).custom(PZ.bind(null,e.project,e.type)).custom(Oc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Js.validateBySchema(e,t)}a(vZ,"getDropCustomFunctionValidator");function BZ(e){let t=he.object({project:he.string().pattern(zs).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(Oc).required(),function_content:he.string().required()});return Js.validateBySchema(e,t)}a(BZ,"setCustomFunctionValidator");function HZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Oc).required(),payload:he.string().optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(HZ,"setComponentFileValidator");function qZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(Oc).optional()});return Js.validateBySchema(e,t)}a(qZ,"dropComponentFileValidator");function FZ(e){let t=he.object({project:he.string().required(),file:he.string().custom(Oc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Js.validateBySchema(e,t)}a(FZ,"getComponentFileValidator");function GZ(e){let t=he.object({project:he.string().pattern(zs).custom(B_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(GZ,"addComponentValidator");function xZ(e){let t=he.object({project:he.string().pattern(zs).custom(B_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Js.validateBySchema(e,t)}a(xZ,"dropCustomFunctionProjectValidator");function kZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Js.validateBySchema(e,t)}a(kZ,"packageComponentValidator");function VZ(e){let t=he.object({project:he.string().pattern(zs).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:he.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:he.string().optional()});return Js.validateBySchema(e,t)}a(VZ,"deployComponentValidator")});var ZS=m((Pue,OD)=>{"use strict";var be=require("fs-extra"),zS=require("fast-glob"),me=require("path"),gD=require("tar-fs"),$Z=require("uuid").v4,JS=require("normalize-path"),ms=RD(),gt=x(),Ie=A(),$e=Q(),H_=Rr(),YZ=V(),{PACKAGE_ROOT:KZ}=A(),{handleHDBError:it,hdb_errors:WZ}=W(),{HDB_ERROR_MSGS:Cn,HTTP_STATUS_CODES:ot}=WZ,QZ=me.join(KZ,"application-template"),XS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function AD(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,Cn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(AD,"isCFEnabled");function zZ(){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,Cn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,gt.ERR,t)}return e}a(zZ,"customFunctionsStatus");function JZ(){gt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{zS.sync(JS(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:zS.sync(JS(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:zS.sync(JS(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,Cn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,gt.ERR,r)}return e}a(JZ,"getCustomFunctions");function XZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.getDropCustomFunctionValidator(e);if(t)throw 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,Cn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(XZ,"getCustomFunction");function ZZ(e){AD(),e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.setCustomFunctionValidator(e);if(t)throw 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,Cn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,c)}}a(ZZ,"setCustomFunction");function jZ(e){e.project&&(e.project=me.parse(e.project).name),e.file&&(e.file=me.parse(e.file).name);let t=ms.getDropCustomFunctionValidator(e);if(t)throw 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,Cn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,o)}}a(jZ,"dropCustomFunction");function ej(e){AD(),e.project&&(e.project=me.parse(e.project).name);let t=ms.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(QZ,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,Cn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,gt.ERR,n)}}a(ej,"addComponent");function tj(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.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(!YZ.isEmptyOrZeroLength(n)){let i=!1;for(let[o,c]of n.entries())if(c.name===s){n.splice(o,1),i=!0;break}if(i)return H_.updateConfigValue(Ie.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=me.join(r,s);return be.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,Cn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,gt.ERR,i)}}a(tj,"dropCustomFunctionProject");async function rj(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.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(XS);let i=me.join(XS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),gD.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(rj,"packageComponent");async function sj(e){e.project&&(e.project=me.parse(e.project).name);let t=ms.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(XS,$Z()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(gD.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return H_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(sj,"deployComponent");async function nj(){let e=H_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await be.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=me.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await be.stat(u),_={name:me.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:$e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(me.sep).slice(-1).pop(),entries:t})}a(nj,"getComponents");async function ij(e){let t=ms.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(ij,"getComponentFile");async function oj(e){let t=ms.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(oj,"setComponentFile");async function aj(e){let t=ms.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?me.join(e.project,e.file):e.project,s=me.join($e.get(Ie.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await be.pathExists(s)&&await be.remove(s),H_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(aj,"dropComponent");OD.exports={customFunctionsStatus:zZ,getCustomFunctions:JZ,getCustomFunction:XZ,setCustomFunction:ZZ,dropCustomFunction:jZ,addComponent:ej,dropCustomFunctionProject:tj,packageComponent:rj,deployComponent:sj,getComponents:nj,getComponentFile:ij,setComponentFile:oj,dropComponent:aj}});var jS=m((Bue,bD)=>{"use strict";var Ss=require("joi"),ND=Pe();bD.exports={readTransactionLogValidator:cj,deleteTransactionLogsBeforeValidator:uj};function cj(e){let t=Ss.object({schema:Ss.string().required(),table:Ss.string().required(),from:Ss.date().timestamp(),to:Ss.date().timestamp(),limit:Ss.number().min(1)});return ND.validateBySchema(e,t)}a(cj,"readTransactionLogValidator");function uj(e){let t=Ss.object({schema:Ss.string().required(),table:Ss.string().required(),timestamp:Ss.date().timestamp().required()});return ND.validateBySchema(e,t)}a(uj,"deleteTransactionLogsBeforeValidator")});var F_=m((que,UD)=>{"use strict";var ep=A(),q_=Qe(),yD=V(),ID=Q(),wD=Fs(),{handleHDBError:Ao,hdb_errors:lj}=W(),{HTTP_STATUS_CODES:Oo}=lj,{readTransactionLogValidator:_j,deleteTransactionLogsBeforeValidator:dj}=jS(),CD="This operation relies on clustering and cannot run with it disable.",Ej="Logs successfully deleted from transaction log.",fj="All logs successfully deleted from transaction log.";UD.exports={readTransactionLog:hj,deleteTransactionLogsBefore:mj};async function*hj(e){let t=_j(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!ID.get(ep.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,CD,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=yD.checkSchemaTableExist(r,s);if(n)throw Ao(new Error,n,Oo.NOT_FOUND,void 0,void 0,!0);let i=wD.createNatsTableStreamName(r,s),o=await q_.viewStreamIterator(i,parseInt(e.from),e.limit);for await(let c of o){let u=Math.floor(c?.nats_timestamp/1e6);if(e.to&&u>e.to)break;let l={operation:c?.entry?.operation,user:c?.entry?.__origin?.user,timestamp:u,records:c?.entry?.records,attributes:c?.entry?.attributes};c?.entry?.operation===ep.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(hj,"readTransactionLog");async function mj(e){let t=dj(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST,void 0,void 0,!0);if(!ID.get(ep.CONFIG_PARAMS.CLUSTERING_ENABLED))throw Ao(new Error,CD,Oo.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=yD.checkSchemaTableExist(r,s);if(i)throw Ao(new Error,i,Oo.NOT_FOUND,void 0,void 0,!0);let o=wD.createNatsTableStreamName(r,s),{jsm:c}=await q_.getNATSReferences(),u=await q_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=Ej,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=fj):d=(await q_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(mj,"deleteTransactionLogsBefore")});var V_=m((Gue,HD)=>{"use strict";var G_=require("joi"),x_=require("path"),DD=require("fs-extra"),{exec:Sj}=require("child_process"),pj=require("util"),LD=pj.promisify(Sj),Nc=A(),{handleHDBError:No,hdb_errors:Tj}=W(),{HTTP_STATUS_CODES:bo}=Tj,yc=Q(),Rj=Pe(),bc=x();yc.initSync();var tp=yc.get(Nc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),MD="npm install --omit=dev --json",gj=`${MD} --dry-run`;HD.exports={installModules:bj,auditModules:yj,installAllRootModules:Aj,uninstallRootModule:Oj,linkHarperdb:Nj};async function Aj(e=!1){await k_(),await Ic(e?"npm install --ignore-scripts":"npm install",yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(Aj,"installAllRootModules");async function Oj(e){await Ic(`npm uninstall ${e}`,yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(Oj,"uninstallRootModule");async function Nj(){await k_(),await Ic(`npm link ${Nc.PACKAGE_ROOT}`,yc.get(Nc.CONFIG_PARAMS.ROOTPATH))}a(Nj,"linkHarperdb");async function Ic(e,t=void 0){let{stdout:r,stderr:s}=await LD(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
10
+ `,""));return bc.trace(r,s),r.replace(`
11
+ `,"")}a(Ic,"runCommand");async function bj(e){bc.info(`starting installModules for request: ${e}`);let t=BD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?gj:MD;await k_(),await vD(r);let i={};for(let o=0,c=r.length;o<c;o++){let u=r[o];i[u]={npm_output:null,npm_error:null};let l=x_.join(tp,u),_,d=null;try{let{stdout:E,stderr:f}=await LD(n,{cwd:l});_=E?E.replace(`
12
12
  `,""):null,d=f?f.replace(`
13
- `,""):null}catch(E){E.stderr?i[u].npm_error=UD(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 Oc.info(`finished installModules with response ${i}`),i}a(Rj,"installModules");function UD(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(UD,"parseNPMStdErr");async function gj(e){Oc.info(`starting auditModules for request: ${e}`);let t=LD(e);if(t)throw Ao(t,t.message,Oo.BAD_REQUEST);let{projects:r}=e;await F_(),await DD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=q_.join(XS,o);s[o]={npm_output:null,npm_error:null};try{let u=await bc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=UD(u.stderr)}}return Oc.info(`finished auditModules with response ${s}`),s}a(gj,"auditModules");async function F_(){try{return await bc("npm -v"),!0}catch{throw Ao(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",Oo.BAD_REQUEST,void 0,void 0,!0)}}a(F_,"checkNPMInstalled");async function DD(e){if(!Array.isArray(e)||e.length===0)throw Ao(new Error,"projects argument must be an array with at least 1 element",Oo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=q_.join(XS,i.toString());if(!await ID.pathExists(o)){t.push(i);continue}let u=q_.join(o,"package.json");await ID.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(DD,"checkProjectPaths");function LD(e){let t=H_.object({projects:H_.array().min(1).items(H_.string()).required(),dry_run:H_.boolean().default(!1)});return hj.validateBySchema(e,t)}a(LD,"modulesValidator")});var vD=m((Mue,PD)=>{"use strict";var ZS=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}};PD.exports=ZS});var HD=m((vue,BD)=>{"use strict";var jS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};BD.exports=jS});var tp=m((Hue,FD)=>{"use strict";var qD=vD(),Aj=HD(),{HDB_ERROR_MSGS:Oj}=rr(),ep=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=Oj.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 qD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Aj(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 qD(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}};FD.exports=ep});var $_=m((Fue,tL)=>{"use strict";var rp=Or(),x_=Ar(),wr=xl(),wc=Wn(),sp=Zn(),Nj=hm(),bj=ow(),Cc=ar(),k_=Nm(),it=F(),yj=Im(),Ij=n_(),wj=cS(),Cj=c_(),Uj=uS(),Dj=lS(),Lj=ES(),Mj=hS(),np=pS(),zs=x(),Pj=rU(),ip=OS(),kD=GS(),Ir=g(),VD=rD(),vj=Eo(),$D=ja(),YD=(L_(),te(Rc)),KD=Rr(),Er=QS(),Bj=require("alasql"),WD=B_(),QD=G_(),zD=tp(),{handleHDBError:zt,hdb_errors:JD}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:yc}=JD,P=new Map,XD="delete",Cn="insert",Js="read",hi="update",Ic="describe",GD=wc.describeSchema.name,xD=wc.describeTable.name,ZD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},Hj="catchup",qj="handleGetJob",Fj="handleGetJobsByStartDate",V_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Gj=[wr.createTable.name,wr.createAttribute.name,wr.dropTable.name,wr.dropAttribute.name],jD={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},q=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};P.set(rp.insert.name,new q(!1,[Cn]));P.set(rp.update.name,new q(!1,[hi]));P.set(rp.upsert.name,new q(!1,[Cn,hi]));P.set(x_.searchByConditions.name,new q(!1,[Js]));P.set(x_.searchByHash.name,new q(!1,[Js]));P.set(x_.searchByValue.name,new q(!1,[Js]));P.set(x_.search.name,new q(!1,[Js]));P.set(wr.createSchema.name,new q(!0,[]));P.set(wr.createTable.name,new q(!0,[]));P.set(wr.createAttribute.name,new q(!1,[Cn]));P.set(wr.dropSchema.name,new q(!0,[]));P.set(wr.dropTable.name,new q(!0,[]));P.set(wr.dropAttribute.name,new q(!0,[]));P.set(wc.describeSchema.name,new q(!1,[Js]));P.set(wc.describeTable.name,new q(!1,[Js]));P.set(sp.deleteRecord.name,new q(!1,[XD]));P.set(Cc.addUser.name,new q(!0,[]));P.set(Cc.alterUser.name,new q(!0,[]));P.set(Cc.dropUser.name,new q(!0,[]));P.set(Cc.listUsersExternal.name,new q(!0,[]));P.set(k_.listRoles.name,new q(!0,[]));P.set(k_.addRole.name,new q(!0,[]));P.set(k_.alterRole.name,new q(!0,[]));P.set(k_.dropRole.name,new q(!0,[]));P.set(yj.name,new q(!0,[]));P.set(Ij.name,new q(!0,[]));P.set(wj.name,new q(!0,[]));P.set(Cj.name,new q(!0,[]));P.set(Uj.name,new q(!0,[]));P.set(Dj.name,new q(!0,[]));P.set(np.setRoutes.name,new q(!0,[]));P.set(np.getRoutes.name,new q(!0,[]));P.set(np.deleteRoutes.name,new q(!0,[]));P.set(KD.setConfiguration.name,new q(!0,[]));P.set(Lj.clusterStatus.name,new q(!0,[]));P.set(Mj.name,new q(!0,[]));P.set(ip.getFingerprint.name,new q(!0,[]));P.set(ip.setLicense.name,new q(!0,[]));P.set(sp.deleteFilesBefore.name,new q(!0,[]));P.set(sp.deleteAuditLogsBefore.name,new q(!0,[]));P.set(kD.restart.name,new q(!0,[]));P.set(kD.restartService.name,new q(!0,[]));P.set(Nj.name,new q(!0,[]));P.set(bj.name,new q(!0,[Js]));P.set(vj.systemInformation.name,new q(!0,[]));P.set(KD.getConfiguration.name,new q(!0,[]));P.set(WD.readTransactionLog.name,new q(!0,[]));P.set(WD.deleteTransactionLogsBefore.name,new q(!0,[]));P.set(QD.installModules.name,new q(!0,[]));P.set(QD.auditModules.name,new q(!0,[]));P.set($D.createTokens.name,new q(!1,[]));P.set($D.refreshOperationToken.name,new q(!1,[]));P.set(YD.login.name,new q(!1,[]));P.set(YD.logout.name,new q(!1,[]));P.set(Er.customFunctionsStatus.name,new q(!0,[]));P.set(Er.getCustomFunctions.name,new q(!0,[]));P.set(Er.getComponents.name,new q(!0,[]));P.set(Er.getComponentFile.name,new q(!0,[]));P.set(Er.setComponentFile.name,new q(!0,[]));P.set(Er.dropComponent.name,new q(!0,[]));P.set(Er.getCustomFunction.name,new q(!0,[]));P.set(Er.setCustomFunction.name,new q(!0,[]));P.set(Er.dropCustomFunction.name,new q(!0,[]));P.set(Er.addComponent.name,new q(!0,[]));P.set(Er.dropCustomFunctionProject.name,new q(!0,[]));P.set(Er.packageComponent.name,new q(!0,[]));P.set(Er.deployComponent.name,new q(!0,[]));P.set(ip.getRegistrationInfo.name,new q(!1,[]));P.set(Cc.userInfo.name,new q(!1,[]));P.set(wc.describeAll.name,new q(!1,[]));P.set(qj,new q(!1,[]));P.set(Fj,new q(!0,[]));P.set(Hj,new q(!0,[]));P.set(V_.CSV_DATA_LOAD,new q(!1,[Cn,hi]));P.set(V_.CSV_URL_LOAD,new q(!1,[Cn,hi]));P.set(V_.CSV_FILE_LOAD,new q(!1,[Cn,hi]));P.set(V_.IMPORT_FROM_S3,new q(!1,[Cn,hi]));P.set(jD.EXPORT_TO_S3,new q(!0,[]));P.set(jD.EXPORT_LOCAL,new q(!0,[]));P.set(Ir.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[XD]));P.set(Ir.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[Js]));P.set(Ir.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Cn]));P.set(Ir.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[hi]));tL.exports={verifyPerms:kj,verifyPermsAst:xj,verifyBulkLoadAttributePerms:$j};function xj(e,t,r){if(zs.isEmptyOrZeroLength(e))throw it.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(zs.isEmptyOrZeroLength(t))throw it.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(zs.isEmptyOrZeroLength(r))throw it.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new zD,n=new Pj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw it.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&ZD[r])throw zt(new Error,At.DROP_SYSTEM,yc.FORBIDDEN);if(c&&!u)return null;let l=VD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof Bj.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 _=eL(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=ap(t.role.permission,E,d[f]);op(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(xj,"verifyPermsAst");function kj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw it.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,yc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new zD;if(zs.isEmptyOrZeroLength(e.hdb_user.role)||zs.isEmptyOrZeroLength(e.hdb_user.role.permission))return it.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(At.USER_HAS_NO_PERMS(e.hdb_user.username));let u=!!e.hdb_user.role.permission.super_user,l=e.hdb_user.role.permission.structure_user,_=o.has(Ir.SYSTEM_SCHEMA_NAME)||n===Ir.SYSTEM_SCHEMA_NAME;if(_&&ZD[r])throw zt(new Error,At.DROP_SYSTEM,yc.FORBIDDEN);if(u&&!_||l===!0&&(r===wr.createSchema.name||r===wr.dropSchema.name))return null;if(Gj.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=VD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===GD||r===xD){if(n===Ir.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===GD&&(!d[n]||!d[n][Ic]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===xD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Ic]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=eL(e.hdb_user,r,o,c,s);if(E)return E;if(P.get(r)&&P.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ir.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],S=d[n].tables[i];S[Ir.PERMS_CRUD_ENUM.READ]&&(S.attribute_permissions.length>0?S.attribute_permissions.filter(O=>O[Ir.PERMS_CRUD_ENUM.READ]).forEach(O=>{T.push(O.attribute_name)}):T=global.hdb_schema[n][i].attributes.map(y=>y.attribute),e.get_attributes=T)}let f=Vj(e),h=ap(e.hdb_user.role.permission,n,i);return op(f,h,r,i,n,c,s),c.getPermsResponse()}a(kj,"verifyPerms");function eL(e,t,r,s,n){if(zs.arrayHasEmptyValues([e,t,r]))throw it.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||P.get(t).requires_su))return null;if(!P.get(t))throw it.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),yc.BAD_REQUEST);if(P.get(t)&&P.get(t).requires_su)return it.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(At.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Ic]===!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[Ic]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=P.get(t).perms;!zs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],S=d[T];(S==null||S===!1)&&(it.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw it.error(f),it.error(E),zt(JD.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(eL,"hasPermissions");function op(e,t,r,s,n,i,o){if(!e||!t)throw it.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=P.get(r).perms;if(!c||c==="")throw it.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(zs.isEmptyOrZeroLength(t))return it.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Ic]===!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!==Js)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,yc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(op,"checkAttributePerms");function Vj(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ir.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS&&e.conditions.forEach(r=>{t.add(r.search_attribute)}),e&&e.search_attribute&&t.add(e.search_attribute),!e.records||e.records.length===0){if(!e.get_attributes||!e.get_attributes.length===0)return t;for(let r=0;r<e.get_attributes.length;r++)t.add(e.get_attributes[r])}else for(let r=0;r<e.records.length;r++){let s=Object.keys(e.records[r]);for(let n=0;n<s.length;n++)t.add(s[n])}}catch(r){it.info(r)}return t}a(Vj,"getRecordAttributes");function ap(e,t,r){let s=new Map;if(zs.isEmpty(e))return it.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{it.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(ap,"getAttributePermissions");function $j(e,t,r,s,n,i,o){let c=new Set(i),u=ap(e,s,n);op(c,u,t,n,s,o,r)}a($j,"verifyBulkLoadAttributePerms")});var K_=m((xue,oL)=>{"use strict";oL.exports={evaluateSQL:s5,processAST:iL,convertSQLToAST:nL,checkASTPermissions:sL};var Yj=Or(),rL=require("util"),Kj=rL.callbackify(Yj.insert),Wj=Ar().search,Qj=sI().update,zj=rL.callbackify(Qj),Jj=iI().convertDelete,Un=require("alasql"),Xj=$_(),Y_=F(),Zj=Nl(),jj=x(),Uc=g(),{hdb_errors:e5,handleHDBError:cp}=W(),{HTTP_STATUS_CODES:up}=e5;Zj(Un);var t5=403,r5="There was a problem performing this insert. Please check the logs and try again.",lp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function s5(e,t){let r=e.parsed_sql_object;if(!r){r=nL(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:Y_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Un.yy.Select)&&jj.isEmptyOrZeroLength(s))return t("No schema specified",null)}iL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(s5,"evaluateSQL");function sL(e,t){let r;try{r=Xj.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(sL,"checkASTPermissions");function nL(e){let t=new lp;if(!e)throw cp(new Error,"The 'sql' parameter is missing from the request body",up.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]?cp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,up.BAD_REQUEST):cp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",up.BAD_REQUEST)}return t}a(nL,"convertSQLToAST");function iL(e,t,r){try{let s=n5;if(!e.bypass_auth&&!t.permissions_checked){let i=sL(e,t);if(i&&i.length>0)return r(t5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Uc.VALID_SQL_OPS_ENUM.SELECT:s=Wj,n=t.ast.statements[0];break;case Uc.VALID_SQL_OPS_ENUM.INSERT:s=i5;break;case Uc.VALID_SQL_OPS_ENUM.UPDATE:s=zj;break;case Uc.VALID_SQL_OPS_ENUM.DELETE:s=Jj;break;default:throw new Error(`unsupported SQL type ${t.variant} in SQL: ${e}`)}s(n,(i,o)=>{if(i){r(i);return}r(null,o)})}catch(s){return r(s)}}a(iL,"processAST");function n5(e,t){Y_.info(e),t("unknown sql statement")}a(n5,"nullFunction");function i5({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=o5(i,e.values)}catch(o){return r(o)}Kj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Y_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(i5,"convertInsert");function o5(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 [${Uc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Y_.error(r),new Error(r5)}}a(o5,"createDataObjects")});var _p=m((Vue,cL)=>{"use strict";var{S3:a5,GetObjectCommand:c5}=require("@aws-sdk/client-s3");cL.exports={getFileStreamFromS3:u5,getS3AuthObj:aL};async function u5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await aL(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new c5(r))).Body}a(u5,"getFileStreamFromS3");function aL(e,t,r){return new a5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(aL,"getS3AuthObj")});var W_=m((Yue,pL)=>{"use strict";var _L=Ar(),l5=K_(),_5=_p(),{AsyncParser:d5,Transform:E5}=require("json2csv"),Lc=require("stream"),fr=x(),dp=require("fs-extra"),f5=require("path"),Cr=F(),{promisify:dL}=require("util"),Dc=x(),{handleHDBError:Xe,hdb_errors:h5}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Ze}=h5,{streamAsJSON:m5}=QE(),{Upload:S5}=require("@aws-sdk/lib-storage"),uL=["search_by_value","search_by_hash","sql"],lL=["json","csv"],EL="json",fL="csv",p5="Successfully exported JSON locally.",T5="Successfully exported CSV locally.",R5=1e3,g5=_L.searchByHash,A5=_L.searchByValue,O5=dL(l5.evaluateSQL),N5=dL(Lc.finished);pL.exports={export_to_s3:w5,export_local:b5,toCsvStream:hL};async function b5(e){Cr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=mL(e);if(!fr.isEmpty(t))throw Cr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(fr.isEmpty(e.path))throw Cr.error(Jt.MISSING_VALUE("path")),Xe(new Error,Jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(f5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=fr.buildFolderPath(e.path,r);await y5(e.path);let n=await SL(e);return await I5(s,e.format,n)}a(b5,"export_local");async function y5(e){if(Cr.trace("in confirmPath"),fr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await dp.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),Xe(new Error,s,Ze.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Cr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(y5,"confirmPath");async function I5(e,t,r){if(Cr.trace("in saveToLocal"),Dc.isEmptyOrZeroLength(e))throw Xe(new Error,Jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Dc.isEmptyOrZeroLength(t))throw Xe(new Error,Jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Dc.isEmpty(r))throw Xe(new Error,Jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===EL){let s=dp.createWriteStream(e);return m5(r).pipe(s),await N5(s),{message:p5,path:e}}else if(t===fL){let s=dp.createWriteStream(e),n=Lc.Readable.from(r),i={},o={objectMode:!0};return await new d5(i,o).fromInput(n).toOutput(s).promise(!1),{message:T5,path:e}}throw Xe(new Error,Jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(I5,"saveToLocal");async function w5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,Jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,Jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,Jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,Jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=mL(e);if(!fr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Cr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await SL(e)}catch(u){throw Cr.error(u),u}let s,n=await _5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Lc.PassThrough;if(e.format===fL){i=e.s3.key+".csv";let u=hL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===EL){i=e.s3.key+".json";let u=new Lc.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%R5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,Jt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new S5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(w5,"export_to_s3");function hL(e){let t=Lc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new E5(r,s);return t.pipe(n)}a(hL,"toCsvStream");function mL(e){if(Cr.trace("in exportCoreValidation"),fr.isEmpty(e.format))return"format missing";if(lL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${lL.join(", ")}`;let t=e.search_operation.operation;if(fr.isEmpty(t))return"search_operation.operation missing";if(uL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${uL.join(", ")}`}a(mL,"exportCoreValidation");async function SL(e){Cr.trace("in getRecords");let t,r;if(Dc.isEmpty(e.search_operation)||Dc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,Jt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=A5;break;case"search_by_hash":t=g5;break;case"sql":t=O5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Cr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(SL,"getRecords")});var NL={};je(NL,{contentTypes:()=>AL,findBestSerializer:()=>X_,getDeserializer:()=>No,registerContentHandlers:()=>fp,serialize:()=>hp,serializeMessage:()=>Ks});function C5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function fp(e){e.register(D5,{serializers:[{regex:/^application\/json$/,serializer:Q_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new mi.EncoderStream(Mc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?J_.Readable.from((0,ms.encodeIter)(t,Mc)):(0,ms.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ep.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ms.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 X_(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=dt.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(dt.keys()).join(", "))}};r=dt.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function hp(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers["Content-Type"]=e.contentType,r.headers.Vary="Accept-Encoding",n=e.data),e instanceof Uint8Array)r.headers["Content-Type"]="application/octet-stream",r.headers.Vary="Accept-Encoding",n=e;else{let i=X_(t);if(r.headers.Vary="Accept, Accept-Encoding",r.headers["Content-Type"]=i.type,e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers["Content-Encoding"]="br",o=o.pipe((0,z_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers["Content-Encoding"]="br",new Promise((i,o)=>(0,z_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ks(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=X_(t);return r=t.serialize=s.serializer.serialize,r(e)}function L5(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function No(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=dt.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=dt.get(e)?.deserialize||RL(e,s);return o=>L5(o).then(i)}return dt.get(e)?.deserialize||RL(e,s)}function RL(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 M5(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var Q_,Ep,ms,mi,z_,J_,gL,Mc,dt,AL,TL,OL,U5,D5,To=pe(()=>{Q_=D(QE()),Ep=D(W_()),ms=require("msgpackr"),mi=require("cbor-x"),z_=require("zlib"),J_=require("stream");ln();gL=require("../../index"),Mc={useRecords:!1,useToJSON:!0};mt.contentType=function(e,t){dt.set(e,t)};dt=new Map,AL=dt;(0,gL._assignPackageExport)("contentTypes",AL);dt.set("application/json",{serializeStream:Q_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});TL=new mi.Encoder(Mc);dt.set("application/cbor",{serializeStream(e){return new mi.EncoderStream(Mc).end(e)},serialize:TL.encode,deserialize:TL.decode,q:1});dt.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?J_.Readable.from((0,ms.encodeIter)(e,Mc)):(0,ms.pack)(e)},serialize:ms.pack,deserialize:ms.unpack,q:.9});dt.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Ep.toCsvStream)(e)},q:.1});dt.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});dt.set("text/event-stream",{serializeStream:function(e){return J_.Readable.from(M5(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=PD(E.stderr):i[u].npm_error=E.message;continue}try{i[u].npm_output=JSON.parse(_)}catch{i[u].npm_output=_}try{i[u].npm_error=JSON.parse(d)}catch{i[u].npm_error=d}}return bc.info(`finished installModules with response ${i}`),i}a(bj,"installModules");function PD(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(PD,"parseNPMStdErr");async function yj(e){bc.info(`starting auditModules for request: ${e}`);let t=BD(e);if(t)throw No(t,t.message,bo.BAD_REQUEST);let{projects:r}=e;await k_(),await vD(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=x_.join(tp,o);s[o]={npm_output:null,npm_error:null};try{let u=await Ic("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=PD(u.stderr)}}return bc.info(`finished auditModules with response ${s}`),s}a(yj,"auditModules");async function k_(){try{return await Ic("npm -v"),!0}catch{throw No(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",bo.BAD_REQUEST,void 0,void 0,!0)}}a(k_,"checkNPMInstalled");async function vD(e){if(!Array.isArray(e)||e.length===0)throw No(new Error,"projects argument must be an array with at least 1 element",bo.BAD_REQUEST,void 0,void 0,!0);let t=[],r=[];for(let s=0,n=e.length;s<n;s++){let i=e[s],o=x_.join(tp,i.toString());if(!await DD.pathExists(o)){t.push(i);continue}let u=x_.join(o,"package.json");await DD.pathExists(u)||r.push(i)}if(t.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,bo.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw No(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,bo.BAD_REQUEST,void 0,void 0,!0)}a(vD,"checkProjectPaths");function BD(e){let t=G_.object({projects:G_.array().min(1).items(G_.string()).required(),dry_run:G_.boolean().default(!1)});return Rj.validateBySchema(e,t)}a(BD,"modulesValidator")});var FD=m((kue,qD)=>{"use strict";var rp=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}};qD.exports=rp});var xD=m(($ue,GD)=>{"use strict";var sp=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};GD.exports=sp});var ip=m((Kue,VD)=>{"use strict";var kD=FD(),Ij=xD(),{HDB_ERROR_MSGS:wj}=rr(),np=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=wj.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 kD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new Ij(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 kD(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}};VD.exports=np});var W_=m((Que,iL)=>{"use strict";var op=br(),$_=Nr(),Ur=$l(),Uc=Qn(),ap=jn(),Cj=pm(),Uj=uw(),Dc=ar(),Y_=Im(),at=x(),Dj=Um(),Lj=a_(),Mj=_S(),Pj=__(),vj=dS(),Bj=ES(),Hj=mS(),qj=pS(),cp=gS(),Xs=V(),Fj=oU(),up=yS(),KD=VS(),Cr=A(),WD=oD(),Gj=fo(),QD=tc(),zD=(v_(),re(Ac)),JD=Rr(),Er=ZS(),xj=require("alasql"),XD=F_(),ZD=V_(),jD=ip(),{handleHDBError:zt,hdb_errors:eL}=W(),{HDB_ERROR_MSGS:At,HTTP_STATUS_CODES:wc}=eL,M=new Map,tL="delete",Un="insert",Zs="read",mi="update",Cc="describe",$D=Uc.describeSchema.name,YD=Uc.describeTable.name,rL={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},kj="catchup",Vj="handleGetJob",$j="handleGetJobsByStartDate",K_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},Yj=[Ur.createTable.name,Ur.createAttribute.name,Ur.dropTable.name,Ur.dropAttribute.name],sL={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(op.insert.name,new H(!1,[Un]));M.set(op.update.name,new H(!1,[mi]));M.set(op.upsert.name,new H(!1,[Un,mi]));M.set($_.searchByConditions.name,new H(!1,[Zs]));M.set($_.searchByHash.name,new H(!1,[Zs]));M.set($_.searchByValue.name,new H(!1,[Zs]));M.set($_.search.name,new H(!1,[Zs]));M.set(Ur.createSchema.name,new H(!0,[]));M.set(Ur.createTable.name,new H(!0,[]));M.set(Ur.createAttribute.name,new H(!1,[Un]));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(Uc.describeSchema.name,new H(!1,[Zs]));M.set(Uc.describeTable.name,new H(!1,[Zs]));M.set(ap.deleteRecord.name,new H(!1,[tL]));M.set(Dc.addUser.name,new H(!0,[]));M.set(Dc.alterUser.name,new H(!0,[]));M.set(Dc.dropUser.name,new H(!0,[]));M.set(Dc.listUsersExternal.name,new H(!0,[]));M.set(Y_.listRoles.name,new H(!0,[]));M.set(Y_.addRole.name,new H(!0,[]));M.set(Y_.alterRole.name,new H(!0,[]));M.set(Y_.dropRole.name,new H(!0,[]));M.set(Dj.name,new H(!0,[]));M.set(Lj.name,new H(!0,[]));M.set(Mj.name,new H(!0,[]));M.set(Pj.name,new H(!0,[]));M.set(vj.name,new H(!0,[]));M.set(Bj.name,new H(!0,[]));M.set(cp.setRoutes.name,new H(!0,[]));M.set(cp.getRoutes.name,new H(!0,[]));M.set(cp.deleteRoutes.name,new H(!0,[]));M.set(JD.setConfiguration.name,new H(!0,[]));M.set(Hj.clusterStatus.name,new H(!0,[]));M.set(qj.name,new H(!0,[]));M.set(up.getFingerprint.name,new H(!0,[]));M.set(up.setLicense.name,new H(!0,[]));M.set(ap.deleteFilesBefore.name,new H(!0,[]));M.set(ap.deleteAuditLogsBefore.name,new H(!0,[]));M.set(KD.restart.name,new H(!0,[]));M.set(KD.restartService.name,new H(!0,[]));M.set(Cj.name,new H(!0,[]));M.set(Uj.name,new H(!0,[Zs]));M.set(Gj.systemInformation.name,new H(!0,[]));M.set(JD.getConfiguration.name,new H(!0,[]));M.set(XD.readTransactionLog.name,new H(!0,[]));M.set(XD.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(ZD.installModules.name,new H(!0,[]));M.set(ZD.auditModules.name,new H(!0,[]));M.set(QD.createTokens.name,new H(!1,[]));M.set(QD.refreshOperationToken.name,new H(!1,[]));M.set(zD.login.name,new H(!1,[]));M.set(zD.logout.name,new H(!1,[]));M.set(Er.customFunctionsStatus.name,new H(!0,[]));M.set(Er.getCustomFunctions.name,new H(!0,[]));M.set(Er.getComponents.name,new H(!0,[]));M.set(Er.getComponentFile.name,new H(!0,[]));M.set(Er.setComponentFile.name,new H(!0,[]));M.set(Er.dropComponent.name,new H(!0,[]));M.set(Er.getCustomFunction.name,new H(!0,[]));M.set(Er.setCustomFunction.name,new H(!0,[]));M.set(Er.dropCustomFunction.name,new H(!0,[]));M.set(Er.addComponent.name,new H(!0,[]));M.set(Er.dropCustomFunctionProject.name,new H(!0,[]));M.set(Er.packageComponent.name,new H(!0,[]));M.set(Er.deployComponent.name,new H(!0,[]));M.set(up.getRegistrationInfo.name,new H(!1,[]));M.set(Dc.userInfo.name,new H(!1,[]));M.set(Uc.describeAll.name,new H(!1,[]));M.set(Vj,new H(!1,[]));M.set($j,new H(!0,[]));M.set(kj,new H(!0,[]));M.set(K_.CSV_DATA_LOAD,new H(!1,[Un,mi]));M.set(K_.CSV_URL_LOAD,new H(!1,[Un,mi]));M.set(K_.CSV_FILE_LOAD,new H(!1,[Un,mi]));M.set(K_.IMPORT_FROM_S3,new H(!1,[Un,mi]));M.set(sL.EXPORT_TO_S3,new H(!0,[]));M.set(sL.EXPORT_LOCAL,new H(!0,[]));M.set(Cr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[tL]));M.set(Cr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[Zs]));M.set(Cr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[Un]));M.set(Cr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[mi]));iL.exports={verifyPerms:Wj,verifyPermsAst:Kj,verifyBulkLoadAttributePerms:zj};function Kj(e,t,r){if(Xs.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Xs.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Xs.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new jD,n=new Fj(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),zt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&rL[r])throw zt(new Error,At.DROP_SYSTEM,wc.FORBIDDEN);if(c&&!u)return null;let l=WD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof xj.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 _=nL(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=_p(t.role.permission,E,d[f]);lp(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(Kj,"verifyPermsAst");function Wj(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),zt(new Error,At.DEFAULT_INVALID_REQUEST,wc.BAD_REQUEST);let r;t instanceof Function?r=t.name:r=t;let s=e.action,n=e.schema,i=e.table,o=new Map;n&&i&&o.set(n,[i]);let c=new jD;if(Xs.isEmptyOrZeroLength(e.hdb_user.role)||Xs.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(_&&rL[r])throw zt(new Error,At.DROP_SYSTEM,wc.FORBIDDEN);if(u&&!_||l===!0&&(r===Ur.createSchema.name||r===Ur.dropSchema.name))return null;if(Yj.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=WD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===$D||r===YD){if(n===Cr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(At.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===$D&&(!d[n]||!d[n][Cc]))return c.handleInvalidItem(At.SCHEMA_NOT_FOUND(n));if(r===YD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Cc]))return c.handleInvalidItem(At.TABLE_NOT_FOUND(n,i))}}let E=nL(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=Qj(e),h=_p(e.hdb_user.role.permission,n,i);return lp(f,h,r,i,n,c,s),c.getPermsResponse()}a(Wj,"verifyPerms");function nL(e,t,r,s,n){if(Xs.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw at.info(`operation ${t} not found.`),zt(new Error,At.OP_NOT_FOUND(t),wc.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][Cc]===!1){s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(At.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Cc]===!1)s.addInvalidItem(At.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Xs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(at.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=At.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),zt(eL.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(nL,"hasPermissions");function lp(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=M.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Xs.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[Cc]===!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!==Zs)throw zt(new Error,At.SYSTEM_TIMESTAMP_PERMS_ERR,wc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(At.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a(lp,"checkAttributePerms");function Qj(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(Qj,"getRecordAttributes");function _p(e,t,r){let s=new Map;if(Xs.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(_p,"getAttributePermissions");function zj(e,t,r,s,n,i,o){let c=new Set(i),u=_p(e,s,n);lp(c,u,t,n,s,o,r)}a(zj,"verifyBulkLoadAttributePerms")});var z_=m((Jue,lL)=>{"use strict";lL.exports={evaluateSQL:c5,processAST:uL,convertSQLToAST:cL,checkASTPermissions:aL};var Jj=br(),oL=require("util"),Xj=oL.callbackify(Jj.insert),Zj=Nr().search,jj=oI().update,e5=oL.callbackify(jj),t5=cI().convertDelete,Dn=require("alasql"),r5=W_(),Q_=x(),s5=wl(),n5=V(),Lc=A(),{hdb_errors:i5,handleHDBError:dp}=W(),{HTTP_STATUS_CODES:Ep}=i5;s5(Dn);var o5=403,a5="There was a problem performing this insert. Please check the logs and try again.",fp=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function c5(e,t){let r=e.parsed_sql_object;if(!r){r=cL(e.sql);let s,n=r.ast.statements[0];if(n instanceof Dn.yy.Insert?s=n.into.databaseid:n instanceof Dn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Dn.yy.Update||n instanceof Dn.yy.Delete?s=n.table.databaseid:Q_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Dn.yy.Select)&&n5.isEmptyOrZeroLength(s))return t("No schema specified",null)}uL(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(c5,"evaluateSQL");function aL(e,t){let r;try{r=r5.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(aL,"checkASTPermissions");function cL(e){let t=new fp;if(!e)throw dp(new Error,"The 'sql' parameter is missing from the request body",Ep.BAD_REQUEST);try{let r=e.trim(),s=Dn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
15
+ `);throw s[1]?dp(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,Ep.BAD_REQUEST):dp(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",Ep.BAD_REQUEST)}return t}a(cL,"convertSQLToAST");function uL(e,t,r){try{let s=u5;if(!e.bypass_auth&&!t.permissions_checked){let i=aL(e,t);if(i&&i.length>0)return r(o5,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Lc.VALID_SQL_OPS_ENUM.SELECT:s=Zj,n=t.ast.statements[0];break;case Lc.VALID_SQL_OPS_ENUM.INSERT:s=l5;break;case Lc.VALID_SQL_OPS_ENUM.UPDATE:s=e5;break;case Lc.VALID_SQL_OPS_ENUM.DELETE:s=t5;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(uL,"processAST");function u5(e,t){Q_.info(e),t("unknown sql statement")}a(u5,"nullFunction");function l5({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=_5(i,e.values)}catch(o){return r(o)}Xj(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){Q_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(l5,"convertInsert");function _5(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Dn.compile(`SELECT ${n.toString()} AS [${Lc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw Q_.error(r),new Error(a5)}}a(_5,"createDataObjects")});var hp=m((Zue,dL)=>{"use strict";var{S3:d5,GetObjectCommand:E5}=require("@aws-sdk/client-s3");dL.exports={getFileStreamFromS3:f5,getS3AuthObj:_L};async function f5(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await _L(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new E5(r))).Body}a(f5,"getFileStreamFromS3");function _L(e,t,r){return new d5({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(_L,"getS3AuthObj")});var J_=m((ele,AL)=>{"use strict";var hL=Nr(),h5=z_(),m5=hp(),{AsyncParser:S5,Transform:p5}=require("json2csv"),Pc=require("stream"),fr=V(),mp=require("fs-extra"),T5=require("path"),Dr=x(),{promisify:mL}=require("util"),Mc=V(),{handleHDBError:Xe,hdb_errors:R5}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Ze}=R5,{streamAsJSON:g5}=XE(),{Upload:A5}=require("@aws-sdk/lib-storage"),EL=["search_by_value","search_by_hash","sql"],fL=["json","csv"],SL="json",pL="csv",O5="Successfully exported JSON locally.",N5="Successfully exported CSV locally.",b5=1e3,y5=hL.searchByHash,I5=hL.searchByValue,w5=mL(h5.evaluateSQL),C5=mL(Pc.finished);AL.exports={export_to_s3:M5,export_local:U5,toCsvStream:TL};async function U5(e){Dr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=RL(e);if(!fr.isEmpty(t))throw Dr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(fr.isEmpty(e.path))throw Dr.error(Jt.MISSING_VALUE("path")),Xe(new Error,Jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(fr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(T5.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=fr.buildFolderPath(e.path,r);await D5(e.path);let n=await gL(e);return await L5(s,e.format,n)}a(U5,"export_local");async function D5(e){if(Dr.trace("in confirmPath"),fr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await mp.stat(e)}catch(r){let s;throw r.code==="ENOENT"?s=`path '${e}' does not exist`:r.code==="EACCES"?s=`access to path '${e}' is denied`:s=r.message,Dr.error(s),Xe(new Error,s,Ze.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Dr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(D5,"confirmPath");async function L5(e,t,r){if(Dr.trace("in saveToLocal"),Mc.isEmptyOrZeroLength(e))throw Xe(new Error,Jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Mc.isEmptyOrZeroLength(t))throw Xe(new Error,Jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Mc.isEmpty(r))throw Xe(new Error,Jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===SL){let s=mp.createWriteStream(e);return g5(r).pipe(s),await C5(s),{message:O5,path:e}}else if(t===pL){let s=mp.createWriteStream(e),n=Pc.Readable.from(r),i={},o={objectMode:!0};return await new S5(i,o).fromInput(n).toOutput(s).promise(!1),{message:N5,path:e}}throw Xe(new Error,Jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(L5,"saveToLocal");async function M5(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,Jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,Jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,Jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(fr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,Jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=RL(e);if(!fr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Dr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await gL(e)}catch(u){throw Dr.error(u),u}let s,n=await m5.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Pc.PassThrough;if(e.format===pL){i=e.s3.key+".csv";let u=TL(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===SL){i=e.s3.key+".json";let u=new Pc.Readable;u.pipe(o),u.on("error",d=>{throw d}),u.push("[");let l=r.length,_="";for(let[d,E]of r.entries()){let f=d===l-1?JSON.stringify(E):JSON.stringify(E)+",";_+=f,d!==0&&d%b5===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Xe(new Error,Jt.INVALID_VALUE("format"),Ze.BAD_REQUEST);return new A5({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(M5,"export_to_s3");function TL(e){let t=Pc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new p5(r,s);return t.pipe(n)}a(TL,"toCsvStream");function RL(e){if(Dr.trace("in exportCoreValidation"),fr.isEmpty(e.format))return"format missing";if(fL.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${fL.join(", ")}`;let t=e.search_operation.operation;if(fr.isEmpty(t))return"search_operation.operation missing";if(EL.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${EL.join(", ")}`}a(RL,"exportCoreValidation");async function gL(e){Dr.trace("in getRecords");let t,r;if(Mc.isEmpty(e.search_operation)||Mc.isEmptyOrZeroLength(e.search_operation.operation))throw Xe(new Error,Jt.INVALID_VALUE("Search operation"),Ze.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=I5;break;case"search_by_hash":t=y5;break;case"sql":t=w5;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Dr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(gL,"getRecords")});var wL={};et(wL,{contentTypes:()=>yL,findBestSerializer:()=>ed,getDeserializer:()=>yo,registerContentHandlers:()=>pp,serialize:()=>Tp,serializeMessage:()=>Qs});function P5(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function pp(e){e.register(B5,{serializers:[{regex:/^application\/json$/,serializer:X_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new Si.EncoderStream(vc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?j_.Readable.from((0,ps.encodeIter)(t,vc)):(0,ps.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Sp.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,ps.unpack)(r))}catch(n){n.statusCode=400,s(n)}}),e.addContentTypeParser("application/cbor",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Si.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function ed(e){let t=e.headers.accept,r,s=0,n,i,o=t?t.toLowerCase().split(/\s*,\s*/):[];for(let c of o){let[u,...l]=c.split(/\s*;\s*/),_=1,d={q:1};for(let f of l){let h=f.indexOf("=");d[f.substring(0,h)]=f.substring(h+1)}_=+d.q;let E=Et.get(u);if(E){let f=(E.q||1)*_;f>s&&(r=E,n=E.type||u,s=f,i=d)}}if(!r){if(t)return{serializer(){this.code(406).send("No supported content types found in Accept header, supported types include: "+Array.from(Et.keys()).join(", "))}};r=Et.get("application/json"),n="application/json"}return{serializer:r,type:n,parameters:i}}function Tp(e,t,r){let s=t.headers["accept-encoding"]?.includes("br"),n;if(e?.contentType!=null&&e.data!=null&&(r.headers.set("Content-Type",e.contentType),r.headers.set("Vary","Accept-Encoding"),n=e.data),e instanceof Uint8Array)r.headers.set("Content-Type","application/octet-stream"),r.headers.set("Vary","Accept-Encoding"),n=e;else{let i=ed(t);if(r.headers.set("Vary","Accept, Accept-Encoding"),r.headers.set("Content-Type",i.type),e[Symbol.iterator]&&i.serializer.serializeStream){let o=i.serializer.serializeStream(e);return s&&(r.headers.set("Content-Encoding","br"),o=o.pipe((0,Z_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,Z_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Qs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=ed(t);return r=t.serialize=s.serializer.serialize,r(e)}function H5(e){return new Promise((t,r)=>{let s=[];e.on("data",n=>s.push(n)),e.on("end",()=>t(Buffer.concat(s))),e.on("error",r)})}function yo(e,t){e||(e="");let r=e.indexOf(";"),s;r>-1&&(s=e.slice(r+1),e=e.slice(0,r));let n=Et.get(e);if(t){if(n?.deserializeStream)return n.deserializeStream;let i=Et.get(e)?.deserialize||NL(e,s);return o=>H5(o).then(i)}return Et.get(e)?.deserialize||NL(e,s)}function NL(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 q5(e,t){return{[Symbol.asyncIterator](){let r=e[Symbol.asyncIterator]?e[Symbol.asyncIterator]():e[Symbol.iterator]();return{next(){let s=r.next();return s.then?s.then(n=>({value:t(n.value),done:n.done})):{value:t(s.value),done:s.done}},return(s){return r.return(s)},throw(s){return r.throw(s)}}}}}var X_,Sp,ps,Si,Z_,j_,bL,vc,Et,yL,OL,IL,v5,B5,go=Se(()=>{X_=C(XE()),Sp=C(J_()),ps=require("msgpackr"),Si=require("cbor-x"),Z_=require("zlib"),j_=require("stream");Jr();bL=require("../../index"),vc={useRecords:!1,useToJSON:!0};rt.contentType=function(e,t){Et.set(e,t)};Et=new Map,yL=Et;(0,bL._assignPackageExport)("contentTypes",yL);Et.set("application/json",{serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});OL=new Si.Encoder(vc);Et.set("application/cbor",{serializeStream(e){return new Si.EncoderStream(vc).end(e)},serialize:OL.encode,deserialize:OL.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?j_.Readable.from((0,ps.encodeIter)(e,vc)):(0,ps.pack)(e)},serialize:ps.pack,deserialize:ps.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,Sp.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return j_.Readable.from(q5(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()}});OL={type:"application/json",serializeStream:Q_.streamAsJSON,serialize:JSON.stringify,deserialize:C5,q:.8};dt.set("*/*",OL);dt.set("",OL);a(C5,"tryJSONParse");a(fp,"registerContentHandlers");U5=require("fastify-plugin"),D5=U5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=X_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(X_,"findBestSerializer");a(hp,"serialize");a(Ks,"serializeMessage");a(L5,"streamToBuffer");a(No,"getDeserializer");a(RL,"deserializerUnknownType");a(M5,"transformIterable")});var Tp={};je(Tp,{start:()=>B5});async function v5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&Du(e);let s=performance.now(),n;try{let i=new pp;e.responseHeaders=i;let o=e.url.slice(1),c=Sp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=No(e.headers["content-type"],!0)(e.body)}catch(T){throw new Pc.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 Pc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Pc.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){P5[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),Dl(E<400,"success",n,r),_!==void 0&&(h.body=hp(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(i){let o=performance.now()-s;ii(o,"TTFB",n,r),Dl(!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 B5(e){if(bL)return;bL=!0,Sp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return v5(r,s)}),e.server.ws(async(r,s,n)=>{yL++,mp||(setTimeout(()=>{console.log("connection count",yL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),mp=!1},1e3),mp=!0),t(s);let i=new Jr;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 Sp.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),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var Pc,Ot,P5,bL,Sp,yL,mp,pp,IL=pe(()=>{To();eo();Pc=D(W());Lu();ia();Vn();Ot=new Uint8Array(8),P5=new Float64Array(Ot.buffer,0,1);a(v5,"http");yL=0;a(B5,"start");pp=class{static{a(this,"Headers")}set(t,r){this[t]=r}}});var Rp=m((rle,wL)=>{var{recordAction:Z_,recordActionBinary:H5}=(eo(),te(Ll)),q5=require("fastify-plugin"),F5=200;wL.exports=q5(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,l,_,d;u.isOperation?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),Z_(o,"TTFB",l,d,_),H5(n.raw.statusCode<400,"success",l,d,_);let E=F5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Z_(performance.now()-c,"transfer",l,d,_),Z_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Z_(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Np=m((sle,ML)=>{var sd=require("clone"),nd=Pe(),G5=x(),td=g(),x5=F(),j_=require("fs"),gp=require("joi"),{string:rd}=gp.types(),{hdb_errors:k5,handleHDBError:vc}=W(),{HDB_ERROR_MSGS:V5,HTTP_STATUS_CODES:ed}=k5,{common_validators:bo}=ts(),CL=1e9,UL=" is required",$5=["insert","update","upsert"],Ap={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:$5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Y5={schema:rd.required(),table:rd.required(),action:rd.valid("insert","update","upsert")},{AWS_ACCESS_KEY:K5,AWS_SECRET:W5,AWS_BUCKET:Q5,AWS_FILE_KEY:z5,REGION:J5}=td.S3_BUCKET_AUTH_KEYS,X5={s3:{presence:!0},[`s3.${K5}`]:{presence:!0,type:"String"},[`s3.${W5}`]:{presence:!0,type:"String"},[`s3.${Q5}`]:{presence:!0,type:"String"},[`s3.${z5}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${J5}`]:{presence:!0,type:"String"}},DL=sd(Ap);DL.data.presence={message:UL};var LL=sd(Ap);LL.file_path.presence={message:UL};var Z5=Object.assign(sd(Ap),X5),Op=sd(Y5);Op.csv_url=rd.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();Op.passthrough_headers=gp.object();function j5(e){let t=nd.validateObject(e,DL);return id(e,t)}a(j5,"dataObject");function e8(e){let t=nd.validateBySchema(e,gp.object(Op));return id(e,t)}a(e8,"urlObject");function t8(e){let t=nd.validateObject(e,LL);return id(e,t)}a(t8,"fileObject");function r8(e){let t=nd.validateObject(e,Z5);return id(e,t)}a(r8,"s3FileObject");function id(e,t){if(!t){let r=G5.checkGlobalSchemaTable(e.schema,e.table);if(r)return vc(new Error,r,ed.BAD_REQUEST);if(e.operation===td.OPERATIONS_ENUM.CSV_FILE_LOAD){try{j_.accessSync(e.file_path,j_.constants.R_OK|j_.constants.F_OK)}catch(s){return s.code===td.NODE_ERROR_CODES.ENOENT?vc(s,`No such file or directory ${s.path}`,ed.BAD_REQUEST):s.code===td.NODE_ERROR_CODES.EACCES?vc(s,`Permission denied ${s.path}`,ed.BAD_REQUEST):vc(s)}try{let s=j_.statSync(e.file_path).size;if(s>CL)return vc(new Error,V5.MAX_FILE_SIZE_ERR(s,CL),ed.BAD_REQUEST)}catch(s){x5.error(s),console.error(s)}}}return t}a(id,"postValidateChecks");ML.exports={dataObject:j5,urlObject:e8,fileObject:t8,s3FileObject:r8}});var bp=m((ile,PL)=>{"use strict";var Bc=F(),od=g();async function s8(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===od.OPERATIONS_ENUM.INSERT||t.operation===od.OPERATIONS_ENUM.UPDATE||t.operation===od.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===od.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Bc.info(i.message),i):i.http_resp_msg?(Bc.error(`Error calling operation: ${e.name}`),Bc.error(i.http_resp_msg),i):(Bc.error(`Error calling operation: ${e.name}`),Bc.error(i),i)}}a(s8,"callOperationFunctionAsAwait");PL.exports={callOperationFunctionAsAwait:s8}});var BL=m((ale,vL)=>{"use strict";var yp=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}},Ip=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};vL.exports={BulkLoadFileObject:yp,BulkLoadDataObject:Ip}});var qL=m((ule,HL)=>{"use strict";var wp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};HL.exports=wp});var Pp=m((hle,tM)=>{"use strict";var ad=Or(),ud=Np(),n8=require("needle"),Kr=g(),_le=Be(),yo=x(),{handleHDBError:qe,hdb_errors:WL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ot,CHECK_LOGS_WRAPPER:pi}=WL,Io=F(),Cp=require("papaparse");yo.promisifyPapaParse();var Wr=require("fs-extra"),i8=require("path"),{chain:FL}=require("stream-chain"),GL=require("stream-json/streamers/StreamArray"),xL=require("stream-json/utils/Batch"),kL=require("stream-chain/utils/comp"),{finished:VL}=require("stream"),o8=Q(),QL=bp(),a8=_p(),{BulkLoadFileObject:Dp,BulkLoadDataObject:c8}=BL(),Lp=tp(),{verifyBulkLoadAttributePerms:zL}=$_(),dle=qL(),Ele=Qe(),fle=Hs(),{databases:u8}=(de(),te(Ne)),{coerceType:l8}=(ld(),te(vp)),$L="No records parsed from csv file.",Si=`${o8.get("HDB_ROOT")}/tmp`,{schema_regex:_8}=ts(),YL=1024*1024*2,KL=5e3,d8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};tM.exports={csvDataLoad:E8,csvURLLoad:f8,csvFileLoad:h8,importFromS3:m8};async function E8(e,t){let r=ud.dataObject(e);if(r)throw qe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=ZL(e.schema,e.table),i=Cp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Up.bind(null,n),dynamicTyping:!1}),o=new Lp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&zL(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw qe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new c8(e.action,e.schema,e.table,i.data);return s=await QL.callOperationFunctionAsAwait(jL,u,null),s.message===$L?$L:eM(s.records,s.number_written)}catch(n){throw Ti(n)}}a(E8,"csvDataLoad");async function f8(e){let t=ud.urlObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Si}/${r}`;try{await S8(e,r)}catch(n){throw Io.error(ot.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,pi(ot.DOWNLOAD_FILE_ERR(r)))}try{let n=new Dp(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 Mp(n);return await cd(s),i}catch(n){throw await cd(s),Ti(n)}}a(f8,"csvURLLoad");async function h8(e){let t=ud.fileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Dp(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 Mp(r)}catch(s){throw Ti(s)}}a(h8,"csvFileLoad");async function m8(e){let t=ud.s3FileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=i8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Si}/${n}`;let i=new Dp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await p8(n,e);let o=await Mp(i);return await cd(r),o}catch(s){throw await cd(r),Ti(s)}}a(m8,"importFromS3");async function S8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await n8("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw qe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}R8(r,e.csv_url),await T8(t,r.raw)}a(S8,"downloadCSVFile");async function p8(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 a8.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Io.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Io.error(ot.S3_DOWNLOAD_ERR+" - "+r),qe(r,pi(ot.S3_DOWNLOAD_ERR))}}a(p8,"downloadFileFromS3");async function T8(e,t){try{await Wr.mkdirp(Si),await Wr.writeFile(`${Si}/${e}`,t)}catch(r){throw Io.error(ot.WRITE_TEMP_FILE_ERR),qe(r,pi(ot.DEFAULT_BULK_LOAD_ERR))}}a(T8,"writeFileToTempFolder");async function cd(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Io.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(cd,"deleteTempFile");function R8(e,t){if(e.statusCode!==WL.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!d8[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(R8,"validateURLResponse");async function Mp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await g8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await A8(e);break;default:throw qe(new Error,ot.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ot.INVALID_FILE_EXT_ERR(e))}return eM(t.records,t.number_written)}catch(t){throw Ti(t)}}a(Mp,"fileLoad");async function JL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await ad.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&zL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=qe(c);r(u)}}a(JL,"validateChunk");async function XL(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 QL.callOperationFunctionAsAwait(jL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,pi(ot.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.INSERT_CSV_ERR+" - "+c);r(u)}}a(XL,"insertChunk");async function g8(e){let t={records:0,number_written:0},r=ZL(e.schema,e.table);try{let s=new Lp,n=Wr.createReadStream(e.file_path,{highWaterMark:YL});n.setEncoding("utf8"),await Cp.parsePromise(n,JL.bind(null,e,s),Up.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:YL}),n.setEncoding("utf8"),await Cp.parsePromise(n,XL.bind(null,e,t),Up.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,pi(ot.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.PAPA_PARSE_ERR+s)}}a(g8,"callPapaParse");function ZL(e,t){let r=u8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>l8(i,n));return s}a(ZL,"createTransformMap");function Up(e,t,r){let s=e.get(r);return s?s(t):yo.autoCast(t)}a(Up,"typeFunction");async function A8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new Lp,n=FL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),GL.withParser(),c=>c.value,new xL({batchSize:KL}),kL(async c=>{await JL(e,s,r,c)})]);await new Promise((c,u)=>{VL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);let o=FL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),GL.withParser(),c=>c.value,new xL({batchSize:KL}),kL(async c=>{await XL(e,t,r,c)})]);return await new Promise((c,u)=>{VL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,pi(ot.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.INSERT_JSON_ERR+s)}}a(A8,"insertJson");async function jL(e){let t={};try{e.data&&e.data.length>0&&O8(e.data[0])?t=await N8(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(jL,"callBulkFileLoad");function O8(e){let t=Object.keys(e);for(let r of t)if(!_8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(O8,"validateColumnNames");async function N8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ad.insert;break;case"update":i=ad.update;break;case"upsert":i=ad.upsert;break;default:throw qe(new Error,ot.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ot.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=yo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ti(o)}}a(N8,"bulkFileLoad");function eM(e,t){return`successfully loaded ${t} of ${e} records`}a(eM,"buildResponseMsg");function Ti(e){return qe(e,pi(ot.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ot.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ti,"buildTopLevelErrMsg")});var sM=m((Sle,rM)=>{"use strict";var Bp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};rM.exports=Bp});var oM=m((Tle,iM)=>{"use strict";var b8=g(),nM=require("moment"),y8=require("uuid").v4,Hp=class{static{a(this,"JobObject")}constructor(){this.id=y8(),this.type=void 0,this.start_datetime=nM().valueOf(),this.created_datetime=nM().valueOf(),this.end_datetime=void 0,this.status=b8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};iM.exports=Hp});var dd=m((gle,dM)=>{"use strict";var I8=require("uuid").v4,uM=Or(),lM=Ar(),w8=is(),C8=Xi(),U8=sM(),Fe=g(),D8=oM(),L8=Um(),Ur=F(),M8=Sa(),wo=x(),{promisify:P8}=require("util"),Ri=require("moment"),v8=K_(),_d=Np(),aM=Pf(),{deleteTransactionLogsBeforeValidator:B8}=zS(),{handleHDBError:H8,hdb_errors:q8}=W(),{HTTP_STATUS_CODES:F8}=q8,cM=lM.searchByValue,G8=lM.searchByHash,x8=uM.insert,k8=P8(v8.evaluateSQL),V8=uM.update;dM.exports={addJob:K8,updateJob:Q8,handleGetJob:$8,handleGetJobsByStartDate:Y8,getJobById:_M};async function $8(e){try{let t=await _M(e.id);return wo.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Ur.error("There was an error getting job",t),new Error(r)}}a($8,"handleGetJob");async function Y8(e){try{let t=await W8(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=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 Ur.error(r),new Error(r)}}a(Y8,"handleGetJobsByStartDate");async function K8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||wo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Ur.info(_),t.error=_,t}if(!Fe.JOB_TYPE_ENUM[e.operation])return Ur.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Fe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=_d.fileObject(e);break;case Fe.OPERATIONS_ENUM.CSV_URL_LOAD:s=_d.urlObject(e);break;case Fe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=_d.dataObject(e);break;case Fe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=_d.s3FileObject(e);break;case Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=aM(e,"date");break;case Fe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=aM(e,"timestamp");break;case Fe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=B8(e);break;default:break}if(s)throw H8(s,s.message,F8.BAD_REQUEST,void 0,void 0,!0);let n=new D8;n.type=e.operation===Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new w8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await cM(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=I8();try{o=await cM(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Ur.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Ur.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new M8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await x8(u)}catch(_){return Ur.error(`There was an error inserting a job for job type: ${e.operation} -- ${_}`),t.success=!1,t}if(l.inserted_hashes.length===0)t.message=`Had a problem creating a job with type ${n.operation} and id ${n.id}`;else{let _=`Created a job with type ${n.type} and id ${n.id}`;t.message=_,t.createdJob=n,t.success=!0,Ur.trace(_)}return t}a(K8,"addJob");async function W8(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 U8(s,e.hdb_user);try{return await k8(n)}catch(i){throw Ur.error(`there was a problem searching for jobs from date ${e.from_date} to date ${e.to_date} ${i}`),new Error("there was an error searching for jobs. Please check the log for details.")}}a(W8,"getJobsInDateRange");async function _M(e){if(wo.isEmptyOrZeroLength(e))return wo.errorizeMessage("Invalid job ID specified.");let t=new C8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await G8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Ur.error(s),wo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(_M,"getJobById");async function Q8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(wo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Fe.JOB_STATUS_ENUM.COMPLETE||e.status===Fe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ri().valueOf());let t=new L8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await V8(t),r}a(Q8,"updateJob")});var pM=m((Ole,SM)=>{"use strict";var EM=x(),Xt=g(),z8=require("moment"),Ed=Pp(),fd=F(),fM=dd(),hM=W_(),mM=Zn(),J8=_t(),X8=B_(),qp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function Z8(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(EM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(EM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await Xs(e,Ed.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await Xs(e,Ed.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await Xs(e,Ed.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await Xs(e,Ed.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await Xs(e,hM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await Xs(e,hM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await Xs(e,mM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await Xs(e,mM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Xs(e,X8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(Z8,"parseMessage");async function Xs(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=z8().valueOf(),await fM.updateJob(e.job),await j8(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):fd.error(`There was an error running ${t.name} job with id ${e.job.id}`),fd.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await fM.updateJob(e.job)}catch(n){throw fd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Xs,"runJob");async function j8(e){fd.trace("launching job thread:",e),J8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(j8,"launchJobThread");SM.exports={parseMessage:Z8,RunnerMessage:qp}});var RM=m((ble,TM)=>{"use strict";var Fp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};TM.exports=Fp});var Yp=m((Ile,$p)=>{"use strict";var pd=Ar(),kp=K_(),hd=Pp(),Zs=xl(),md=Wn(),qc=Zn(),e6=hm(),Hc=ar(),Sd=Nm(),bt=QS(),at=F(),t6=Im(),r6=n_(),s6=cS(),n6=c_(),i6=uS(),o6=lS(),a6=ES(),c6=hS(),Gp=pS(),gM=W_(),u6=$_(),Vp=dd(),I=g(),{hdb_errors:Gc,handleHDBError:Fc}=W(),{HTTP_STATUS_CODES:AM}=Gc,xp=OS(),OM=GS(),LM=require("util"),Co=Or(),l6=qs(),_6=Eo(),NM=pM(),bM=ja(),yM=(L_(),te(Rc)),IM=Rr(),wM=B_(),CM=G_(),{setServerUtilities:d6}=(ld(),te(vp)),{CONTEXT:E6}=(Xr(),te(HE)),{_assignPackageExport:f6}=require("../../index"),{transformReq:h6}=x(),m6=bp(),UM=pd.searchByHash,S6=pd.searchByValue,p6=LM.promisify(pd.search),T6=LM.promisify(kp.evaluateSQL),R6={[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=RM();async function MM(e,t){try{if(e.body.operation!=="read_log"&&(at.log_level===I.LOG_LEVELS.INFO||at.log_level===I.LOG_LEVELS.DEBUG||at.log_level===I.LOG_LEVELS.TRACE)){let{hdb_user:s,hdb_auth_header:n,password:i,...o}=e.body;at.info(o)}}catch(s){at.error(s)}let r=await m6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return R6[e.body.operation]&&l6.setSchemaDataToGlobal(s=>{s&&at.error(s)}),r}a(MM,"processLocalTransaction");var DM=A6();$p.exports={chooseOperation:PM,getOperationFunction:vM,operation:BM,processLocalTransaction:MM};d6($p.exports);function PM(e){let t;try{t=vM(e)}catch(n){throw at.error(`Error when selecting operation function - ${n}`),n}let{operation_function:r,job_operation_function:s}=t;try{if(e.operation==="sql"||e.search_operation&&e.search_operation.operation==="sql"){let n=e.operation==="sql"?e.sql:e.search_operation.sql,i=kp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=kp.checkASTPermissions(e,i);if(o)throw at.error(`${AM.FORBIDDEN} from operation ${e.operation}`),at.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Fc(new Error,o,Gc.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=u6.verifyPerms(i,n);if(o)throw at.error(`${AM.FORBIDDEN} from operation ${e.operation}`),at.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Fc(new Error,o,Gc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Fc(n,"There was an error when trying to choose an operation path")}return r}a(PM,"chooseOperation");function vM(e){if(at.trace(`getOperationFunction with operation: ${e.operation}`),DM.has(e.operation))return DM.get(e.operation);throw Fc(new Error,Gc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Gc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(vM,"getOperationFunction");f6("operation",BM);function BM(e,t){e.hdb_user=this[E6]?.user,e.bypass_auth=!t;let r=PM(e);return MM({body:e},r)}a(BM,"operation");async function g6(e){at.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Co.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Co.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Co.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await qc.deleteRecord(i);break;default:at.warn("invalid operation in catchup");break}await transact_to_clustering_utils.postOperationHandler(i,o,e)}catch(o){at.info("Invalid operation in transaction"),at.error(o)}}a(g6,"catchup");async function Ss(e){h6(e);let t,r;try{r=await Vp.addJob(e),t=r.createdJob,at.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 at.error(n),Fc(s,n)}}a(Ss,"executeJob");function A6(){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(pd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(UM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(UM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(S6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(p6)),e.set(I.OPERATIONS_ENUM.SQL,new B(T6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Ss,hd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Ss,hd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Ss,hd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Ss,hd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(Zs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(Zs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(Zs.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(Zs.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(Zs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(Zs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(Zs.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(Zs.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(md.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(md.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(md.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(md.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(qc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Hc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Hc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Hc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Hc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Sd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Sd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Sd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Sd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Hc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(t6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(r6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(s6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(n6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(i6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(o6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(IM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(a6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(c6)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Gp.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Gp.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Gp.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Ss,gM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Ss,qc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Ss,qc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Ss,gM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Vp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Vp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(xp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(xp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(xp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(OM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(OM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(g6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(_6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Ss,qc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(e6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(bM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(bM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(yM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(yM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(IM.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(wM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Ss,wM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(CM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(CM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(Zs.getBackup)),e}a(A6,"initializeOperationFunctionMap")});var Rd=m((Cle,FM)=>{"use strict";var Kp=g(),O6=x(),xc=F(),{handleHDBError:Wp,hdb_errors:Td}=W(),{isMainThread:N6}=require("worker_threads"),{Readable:b6}=require("stream"),HM=require("os"),y6=require("util"),I6=qm(),w6=y6.promisify(I6.authorize),qM=Yp(),{Gzip:C6}=require("zlib");function U6(e){let t=`Found an uncaught exception with message: ${e.message}. ${HM.EOL}Stack: ${e.stack} ${HM.EOL}Terminating ${N6?"HDB":"thread"}.`;console.error(t),xc.fatal(t),process.exit(1)}a(U6,"handleServerUncaughtException");function D6(e,t,r){if(xc[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:Td.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(D6,"serverErrorHandler");function L6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Wp(new Error,"Invalid JSON.",Td.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(O6.isEmpty(e.body.operation)){let s=Wp(new Error,"Request body must include an 'operation' property.",Td.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(L6,"reqBodyValidationHandler");function M6(e,t,r){let s;e.body.operation!==Kp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==Kp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==Kp.OPERATIONS_ENUM.LOGOUT?w6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{xc.warn(n),xc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Wp(n,i,Td.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(M6,"authHandler");async function P6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=qM.chooseOperation(e.body);let n=await qM.processLocalTransaction(e,s);if(n instanceof b6&&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 C6))}return n}catch(n){throw xc.error(n),n}}a(P6,"handlePostRequest");FM.exports={authHandler:M6,handlePostRequest:P6,handleServerUncaughtException:U6,serverErrorHandler:D6,reqBodyValidationHandler:L6}});var VM=m((Dle,kM)=>{"use strict";var v6=require("fastify-plugin"),{handlePostRequest:GM,authHandler:B6,reqBodyValidationHandler:H6}=Rd();async function q6(e){e.decorate("hdbCore",{preValidation:[H6,B6],request:t=>xM(GM(t)),requestWithoutAuthentication:t=>xM(GM(t,!0))})}a(q6,"hdbCore");async function xM(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(xM,"convertAsyncIterators");kM.exports=v6(q6)});var YM=m((Mle,$M)=>{"use strict";var Qp=require("fs"),Uo=Q();Uo.initSync();var{CONFIG_PARAMS:kc}=g(),F6=1024*1024*1024;function G6(e){let t=Uo.get(kc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Uo.get(kc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:F6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Uo.get(kc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Uo.get(kc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Uo.get(kc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Qp.readFileSync(`${n}`),cert:Qp.readFileSync(i)+(o?`
22
+ `},q:.8});Et.set("application/x-www-form-urlencoded",{deserialize(e){let t={};for(let[r,s]of new URLSearchParams(e))if(t.hasOwnProperty(r)){let n=t[r];Array.isArray(n)?n.push(s):t.key=[n,s]}else t[r]=s},serialize(e){let t=new URLSearchParams;for(let r in e)t.set(r,e);return t.toString()}});IL={type:"application/json",serializeStream:X_.streamAsJSON,serialize:JSON.stringify,deserialize:P5,q:.8};Et.set("*/*",IL);Et.set("",IL);a(P5,"tryJSONParse");a(pp,"registerContentHandlers");v5=require("fastify-plugin"),B5=v5(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=ed(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(ed,"findBestSerializer");a(Tp,"serialize");a(Qs,"serializeMessage");a(H5,"streamToBuffer");a(yo,"getDeserializer");a(NL,"deserializerUnknownType");a(q5,"transformIterable")});var Ap={};et(Ap,{start:()=>x5});async function G5(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&vu(e);let s=performance.now(),n,i=new To;try{e.responseHeaders=i;let o=e.url.slice(1),c=gp.getMatch(o);if(!c)return t(e);let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=yo(e.headers["content-type"],!0)(e.body)}catch(R){throw new Bc.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 Bc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new Bc.ServerError(`Method ${r} is not recognized`,501)}}),d=performance.now()-s,E=200,f;if(_==null)E=r==="GET"||r==="HEAD"?404:204;else if(f=e?.lastModified){F5[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),to(E<400,"success",n,r),_!==void 0&&(h.body=Tp(_,e,h),r==="HEAD"&&(h.body=void 0)),h}catch(o){let c=performance.now()-s;return ls(c,"TTFB",n,r),to(!1,"success",n,r),o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(u=>u.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:Qs(o.toString(),e)}}}function x5(e){if(CL)return;CL=!0,gp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return G5(r,s)}),e.server.ws(async(r,s,n)=>{UL++,Rp||(setTimeout(()=>{console.log("connection count",UL,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),Rp=!1},1e3),Rp=!0),t(s);let i=new Xr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=yo(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await gp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Qs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Qs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var Bc,Ot,F5,CL,gp,UL,Rp,DL=Se(()=>{go();oi();Bc=C(W());Bu();aa();$n();QS();Ot=new Uint8Array(8),F5=new Float64Array(Ot.buffer,0,1);a(G5,"http");UL=0;a(x5,"start")});var Op=m((dle,LL)=>{var{recordAction:td,recordActionBinary:k5}=(oi(),re(vl)),V5=require("fastify-plugin"),$5=200;LL.exports=V5(function(e,t,r){e.addHook("onResponse",async(s,n)=>{n.getResponseTime()}),e.addHook("onSend",async(s,n,i)=>{let o=n.getResponseTime(),c=performance.now(),u=n.context.config,l,_,d;u.isOperation?(l=s.body?.operation,_="operation"):(l=u.url,_="fastify-route",d=u.method),td(o,"TTFB",l,d,_),k5(n.raw.statusCode<400,"success",l,d,_);let E=$5;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{td(performance.now()-c,"transfer",l,d,_),td(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,td(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Ip=m((Ele,HL)=>{var od=require("clone"),ad=Pe(),Y5=V(),nd=A(),K5=x(),rd=require("fs"),Np=require("joi"),{string:id}=Np.types(),{hdb_errors:W5,handleHDBError:Hc}=W(),{HDB_ERROR_MSGS:Q5,HTTP_STATUS_CODES:sd}=W5,{common_validators:Io}=rs(),ML=1e9,PL=" is required",z5=["insert","update","upsert"],bp={database:{presence:!1,format:Io.schema_format,length:Io.schema_length},schema:{presence:!1,format:Io.schema_format,length:Io.schema_length},table:{presence:!0,format:Io.schema_format,length:Io.schema_length},action:{inclusion:{within:z5,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},J5={schema:id.required(),table:id.required(),action:id.valid("insert","update","upsert")},{AWS_ACCESS_KEY:X5,AWS_SECRET:Z5,AWS_BUCKET:j5,AWS_FILE_KEY:e8,REGION:t8}=nd.S3_BUCKET_AUTH_KEYS,r8={s3:{presence:!0},[`s3.${X5}`]:{presence:!0,type:"String"},[`s3.${Z5}`]:{presence:!0,type:"String"},[`s3.${j5}`]:{presence:!0,type:"String"},[`s3.${e8}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${t8}`]:{presence:!0,type:"String"}},vL=od(bp);vL.data.presence={message:PL};var BL=od(bp);BL.file_path.presence={message:PL};var s8=Object.assign(od(bp),r8),yp=od(J5);yp.csv_url=id.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();yp.passthrough_headers=Np.object();function n8(e){let t=ad.validateObject(e,vL);return cd(e,t)}a(n8,"dataObject");function i8(e){let t=ad.validateBySchema(e,Np.object(yp));return cd(e,t)}a(i8,"urlObject");function o8(e){let t=ad.validateObject(e,BL);return cd(e,t)}a(o8,"fileObject");function a8(e){let t=ad.validateObject(e,s8);return cd(e,t)}a(a8,"s3FileObject");function cd(e,t){if(!t){let r=Y5.checkGlobalSchemaTable(e.schema,e.table);if(r)return Hc(new Error,r,sd.BAD_REQUEST);if(e.operation===nd.OPERATIONS_ENUM.CSV_FILE_LOAD){try{rd.accessSync(e.file_path,rd.constants.R_OK|rd.constants.F_OK)}catch(s){return s.code===nd.NODE_ERROR_CODES.ENOENT?Hc(s,`No such file or directory ${s.path}`,sd.BAD_REQUEST):s.code===nd.NODE_ERROR_CODES.EACCES?Hc(s,`Permission denied ${s.path}`,sd.BAD_REQUEST):Hc(s)}try{let s=rd.statSync(e.file_path).size;if(s>ML)return Hc(new Error,Q5.MAX_FILE_SIZE_ERR(s,ML),sd.BAD_REQUEST)}catch(s){K5.error(s),console.error(s)}}}return t}a(cd,"postValidateChecks");HL.exports={dataObject:n8,urlObject:i8,fileObject:o8,s3FileObject:a8}});var wp=m((hle,qL)=>{"use strict";var qc=x(),ud=A();async function c8(e,t,r,s=void 0){if(!e||typeof e!="function")throw new Error("Invalid function parameter");let n;try{return n=await e(t),r&&await r(t,n,s),t.operation===ud.OPERATIONS_ENUM.INSERT||t.operation===ud.OPERATIONS_ENUM.UPDATE||t.operation===ud.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===ud.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(qc.info(i.message),i):i.http_resp_msg?(qc.error(`Error calling operation: ${e.name}`),qc.error(i.http_resp_msg),i):(qc.error(`Error calling operation: ${e.name}`),qc.error(i),i)}}a(c8,"callOperationFunctionAsAwait");qL.exports={callOperationFunctionAsAwait:c8}});var GL=m((Sle,FL)=>{"use strict";var Cp=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}},Up=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};FL.exports={BulkLoadFileObject:Cp,BulkLoadDataObject:Up}});var kL=m((Tle,xL)=>{"use strict";var Dp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};xL.exports=Dp});var Hp=m((ble,iM)=>{"use strict";var ld=br(),dd=Ip(),u8=require("needle"),Kr=A(),gle=Be(),wo=V(),{handleHDBError:qe,hdb_errors:XL}=W(),{HTTP_STATUS_CODES:Nt,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:Ti}=XL,Co=x(),Lp=require("papaparse");wo.promisifyPapaParse();var Wr=require("fs-extra"),l8=require("path"),{chain:VL}=require("stream-chain"),$L=require("stream-json/streamers/StreamArray"),YL=require("stream-json/utils/Batch"),KL=require("stream-chain/utils/comp"),{finished:WL}=require("stream"),_8=Q(),ZL=wp(),d8=hp(),{BulkLoadFileObject:Pp,BulkLoadDataObject:E8}=GL(),vp=ip(),{verifyBulkLoadAttributePerms:jL}=W_(),Ale=kL(),Ole=Qe(),Nle=Fs(),{databases:f8}=(de(),re(Ne)),{coerceType:h8}=(Ed(),re(qp)),QL="No records parsed from csv file.",pi=`${_8.get("HDB_ROOT")}/tmp`,{schema_regex:m8}=rs(),zL=1024*1024*2,JL=5e3,S8={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};iM.exports={csvDataLoad:p8,csvURLLoad:T8,csvFileLoad:R8,importFromS3:g8};async function p8(e,t){let r=dd.dataObject(e);if(r)throw qe(r,r.message,Nt.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=rM(e.schema,e.table),i=Lp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Mp.bind(null,n),dynamicTyping:!1}),o=new vp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&jL(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw qe(new Error,c,Nt.BAD_REQUEST,void 0,void 0,!0);let u=new E8(e.action,e.schema,e.table,i.data);return s=await ZL.callOperationFunctionAsAwait(sM,u,null),s.message===QL?QL:nM(s.records,s.number_written)}catch(n){throw Ri(n)}}a(p8,"csvDataLoad");async function T8(e){let t=dd.urlObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${pi}/${r}`;try{await A8(e,r)}catch(n){throw Co.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,Ti(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Pp(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 Bp(n);return await _d(s),i}catch(n){throw await _d(s),Ri(n)}}a(T8,"csvURLLoad");async function R8(e){let t=dd.fileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r=new Pp(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 Bp(r)}catch(s){throw Ri(s)}}a(R8,"csvFileLoad");async function g8(e){let t=dd.s3FileObject(e);if(t)throw qe(t,t.message,Nt.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=l8.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${pi}/${n}`;let i=new Pp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await O8(n,e);let o=await Bp(i);return await _d(r),o}catch(s){throw await _d(r),Ri(s)}}a(g8,"importFromS3");async function A8(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await u8("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw qe(s,n,s.statusCode,Kr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}b8(r,e.csv_url),await N8(t,r.raw)}a(A8,"downloadCSVFile");async function O8(e,t){try{let r=`${pi}/${e}`;await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,"",{flag:"a+"});let s=await Wr.createWriteStream(r),n=await d8.getFileStreamFromS3(t);await new Promise((i,o)=>{n.on("error",function(c){o(c)}),n.pipe(s).on("error",function(c){o(c)}).on("close",function(){Co.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw Co.error(ct.S3_DOWNLOAD_ERR+" - "+r),qe(r,Ti(ct.S3_DOWNLOAD_ERR))}}a(O8,"downloadFileFromS3");async function N8(e,t){try{await Wr.mkdirp(pi),await Wr.writeFile(`${pi}/${e}`,t)}catch(r){throw Co.error(ct.WRITE_TEMP_FILE_ERR),qe(r,Ti(ct.DEFAULT_BULK_LOAD_ERR))}}a(N8,"writeFileToTempFolder");async function _d(e){if(e)try{await Wr.access(e),await Wr.unlink(e)}catch{Co.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(_d,"deleteTempFile");function b8(e,t){if(e.statusCode!==XL.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Nt.BAD_REQUEST);if(!S8[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Nt.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Nt.BAD_REQUEST)}a(b8,"validateURLResponse");async function Bp(e){try{let t;switch(e.file_type){case Kr.VALID_S3_FILE_TYPES.CSV:t=await y8(e);break;case Kr.VALID_S3_FILE_TYPES.JSON:t=await I8(e);break;default:throw qe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return nM(t.records,t.number_written)}catch(t){throw Ri(t)}}a(Bp,"fileLoad");async function eM(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;n&&n.pause();let o={operation:e.action,schema:e.schema,table:e.table,records:i};try{let{attributes:c}=await ld.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&jL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=qe(c);r(u)}}a(eM,"validateChunk");async function tM(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;wo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!wo.isEmpty(c)&&!wo.isEmpty(c.__parsed_extra)&&delete c.__parsed_extra});else{let c=new Set;i.forEach(u=>{Object.keys(u).forEach(l=>c.add(l))}),o=[...c]}try{let c={schema:e.schema,table:e.table,action:e.action,data:i},u=await ZL.callOperationFunctionAsAwait(sM,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,Ti(ct.INSERT_CSV_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(tM,"insertChunk");async function y8(e){let t={records:0,number_written:0},r=rM(e.schema,e.table);try{let s=new vp,n=Wr.createReadStream(e.file_path,{highWaterMark:zL});n.setEncoding("utf8"),await Lp.parsePromise(n,eM.bind(null,e,s),Mp.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);return n=Wr.createReadStream(e.file_path,{highWaterMark:zL}),n.setEncoding("utf8"),await Lp.parsePromise(n,tM.bind(null,e,t),Mp.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,Ti(ct.PAPA_PARSE_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(y8,"callPapaParse");function rM(e,t){let r=f8[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>h8(i,n));return s}a(rM,"createTransformMap");function Mp(e,t,r){let s=e.get(r);return s?s(t):wo.autoCast(t)}a(Mp,"typeFunction");async function I8(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new vp,n=VL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),$L.withParser(),c=>c.value,new YL({batchSize:JL}),KL(async c=>{await eM(e,s,r,c)})]);await new Promise((c,u)=>{WL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Nt.BAD_REQUEST);let o=VL([Wr.createReadStream(e.file_path,{encoding:"utf-8"}),$L.withParser(),c=>c.value,new YL({batchSize:JL}),KL(async c=>{await tM(e,t,r,c)})]);return await new Promise((c,u)=>{WL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,Ti(ct.INSERT_JSON_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(I8,"insertJson");async function sM(e){let t={};try{e.data&&e.data.length>0&&w8(e.data[0])?t=await C8(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",Co.info(t.message))}catch(r){throw Ri(r)}return t}a(sM,"callBulkFileLoad");function w8(e){let t=Object.keys(e);for(let r of t)if(!m8.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(w8,"validateColumnNames");async function C8(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ld.insert;break;case"update":i=ld.update;break;case"upsert":i=ld.upsert;break;default:throw qe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Nt.BAD_REQUEST,Kr.LOG_LEVELS.ERROR,ct.INVALID_ACTION_PARAM_ERR(s))}try{let o=await i(n),c;switch(s){case"insert":c=o.inserted_hashes;break;case"update":c=o.update_hashes;break;case"upsert":c=o.upserted_hashes;break;default:break}if(Array.isArray(o.skipped_hashes)&&o.skipped_hashes.length>0){let _=global.hdb_schema[t][r].hash_attribute,d=e.length;for(;d--;)o.skipped_hashes.indexOf(e[d][_])>=0&&e.splice(d,1)}let u=wo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Ri(o)}}a(C8,"bulkFileLoad");function nM(e,t){return`successfully loaded ${t} of ${e} records`}a(nM,"buildResponseMsg");function Ri(e){return qe(e,Ti(ct.DEFAULT_BULK_LOAD_ERR),Nt.INTERNAL_SERVER_ERROR,Kr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Ri,"buildTopLevelErrMsg")});var aM=m((Ile,oM)=>{"use strict";var Fp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};oM.exports=Fp});var lM=m((Cle,uM)=>{"use strict";var U8=A(),cM=require("moment"),D8=require("uuid").v4,Gp=class{static{a(this,"JobObject")}constructor(){this.id=D8(),this.type=void 0,this.start_datetime=cM().valueOf(),this.created_datetime=cM().valueOf(),this.end_datetime=void 0,this.status=U8.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};uM.exports=Gp});var hd=m((Dle,mM)=>{"use strict";var L8=require("uuid").v4,EM=br(),fM=Nr(),M8=os(),P8=Zi(),v8=aM(),Fe=A(),B8=lM(),H8=Mm(),Lr=x(),q8=Ta(),Uo=V(),{promisify:F8}=require("util"),gi=require("moment"),G8=z_(),fd=Ip(),_M=Hf(),{deleteTransactionLogsBeforeValidator:x8}=jS(),{handleHDBError:k8,hdb_errors:V8}=W(),{HTTP_STATUS_CODES:$8}=V8,dM=fM.searchByValue,Y8=fM.searchByHash,K8=EM.insert,W8=F8(G8.evaluateSQL),Q8=EM.update;mM.exports={addJob:X8,updateJob:j8,handleGetJob:z8,handleGetJobsByStartDate:J8,getJobById:hM};async function z8(e){try{let t=await hM(e.id);return Uo.isEmptyOrZeroLength(t)||(t[0]={...t[0]},t[0].request!==void 0&&delete t[0].request,delete t[0].__createdtime__,delete t[0].__updatedtime__),t}catch(t){let r=`There was an error getting job: ${t}`;throw Lr.error("There was an error getting job",t),new Error(r)}}a(z8,"handleGetJob");async function J8(e){try{let t=await Z8(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=gi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=gi(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Lr.error(r),new Error(r)}}a(J8,"handleGetJobsByStartDate");async function X8(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Uo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Lr.info(_),t.error=_,t}if(!Fe.JOB_TYPE_ENUM[e.operation])return Lr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Fe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=fd.fileObject(e);break;case Fe.OPERATIONS_ENUM.CSV_URL_LOAD:s=fd.urlObject(e);break;case Fe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=fd.dataObject(e);break;case Fe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=fd.s3FileObject(e);break;case Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=_M(e,"date");break;case Fe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=_M(e,"timestamp");break;case Fe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=x8(e);break;default:break}if(s)throw k8(s,s.message,$8.BAD_REQUEST,void 0,void 0,!0);let n=new B8;n.type=e.operation===Fe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Fe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new M8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await dM(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=L8();try{o=await dM(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 q8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await K8(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(X8,"addJob");async function Z8(e){let t=gi(e.from_date,gi.ISO_8601),r=gi(e.to_date,gi.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new v8(s,e.hdb_user);try{return await W8(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(Z8,"getJobsInDateRange");async function hM(e){if(Uo.isEmptyOrZeroLength(e))return Uo.errorizeMessage("Invalid job ID specified.");let t=new P8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await Y8(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Lr.error(s),Uo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(hM,"getJobById");async function j8(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Uo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Fe.JOB_STATUS_ENUM.COMPLETE||e.status===Fe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=gi().valueOf());let t=new H8(Fe.SYSTEM_SCHEMA_NAME,Fe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await Q8(t),r}a(j8,"updateJob")});var AM=m((Mle,gM)=>{"use strict";var SM=V(),Xt=A(),e6=require("moment"),md=Hp(),Sd=x(),pM=hd(),TM=J_(),RM=jn(),t6=dt(),r6=F_(),xp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function s6(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(SM.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(SM.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await js(e,md.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await js(e,md.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await js(e,md.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await js(e,md.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await js(e,TM.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await js(e,TM.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await js(e,RM.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await js(e,RM.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await js(e,r6.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(s6,"parseMessage");async function js(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=e6().valueOf(),await pM.updateJob(e.job),await n6(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):Sd.error(`There was an error running ${t.name} job with id ${e.job.id}`),Sd.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await pM.updateJob(e.job)}catch(n){throw Sd.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(js,"runJob");async function n6(e){Sd.trace("launching job thread:",e),t6.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(n6,"launchJobThread");gM.exports={parseMessage:s6,RunnerMessage:xp}});var NM=m((vle,OM)=>{"use strict";var kp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};OM.exports=kp});var Qp=m((Hle,Wp)=>{"use strict";var gd=Nr(),Yp=z_(),pd=Hp(),en=$l(),Td=Qn(),Gc=jn(),i6=pm(),Fc=ar(),Rd=Im(),bt=ZS(),ut=x(),o6=Um(),a6=a_(),c6=_S(),u6=__(),l6=dS(),_6=ES(),d6=mS(),E6=pS(),Vp=gS(),bM=J_(),f6=W_(),Kp=hd(),I=A(),{hdb_errors:kc,handleHDBError:xc}=W(),{HTTP_STATUS_CODES:yM}=kc,$p=yS(),IM=VS(),BM=require("util"),Do=br(),h6=Gs(),m6=fo(),wM=AM(),CM=tc(),UM=(v_(),re(Ac)),DM=Rr(),LM=F_(),MM=V_(),{setServerUtilities:S6}=(Ed(),re(qp)),{CONTEXT:p6}=(Zr(),re(xE)),{_assignPackageExport:T6}=require("../../index"),{transformReq:R6}=V(),g6=wp(),PM=gd.searchByHash,A6=gd.searchByValue,O6=BM.promisify(gd.search),N6=BM.promisify(Yp.evaluateSQL),b6={[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=NM();async function HM(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 g6.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return b6[e.body.operation]&&h6.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(HM,"processLocalTransaction");var vM=I6();Wp.exports={chooseOperation:qM,getOperationFunction:FM,operation:GM,processLocalTransaction:HM};S6(Wp.exports);function qM(e){let t;try{t=FM(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=Yp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Yp.checkASTPermissions(e,i);if(o)throw ut.error(`${yM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),xc(new Error,o,kc.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==I.OPERATIONS_ENUM.LOGIN&&e.operation!==I.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=f6.verifyPerms(i,n);if(o)throw ut.error(`${yM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),xc(new Error,o,kc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw xc(n,"There was an error when trying to choose an operation path")}return r}a(qM,"chooseOperation");function FM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),vM.has(e.operation))return vM.get(e.operation);throw xc(new Error,kc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),kc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(FM,"getOperationFunction");T6("operation",GM);function GM(e,t){e.hdb_user=this[p6]?.user,e.bypass_auth=!t;let r=qM(e);return HM({body:e},r)}a(GM,"operation");async function y6(e){ut.trace("In serverUtils.catchup");let t=e.transaction,r=t.channel.split(":"),s=r[0],n=r[1];for(let i of t.transactions)try{i.schema=s,i.table=n,i[I.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case I.OPERATIONS_ENUM.INSERT:o=await Do.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await Do.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await Do.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await Gc.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(y6,"catchup");async function Ts(e){R6(e);let t,r;try{r=await Kp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new wM.RunnerMessage(t,e);return await wM.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),xc(s,n)}}a(Ts,"executeJob");function I6(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(Do.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(Do.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(Do.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(gd.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(PM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(PM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(A6)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(O6)),e.set(I.OPERATIONS_ENUM.SQL,new B(N6)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Ts,pd.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Ts,pd.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Ts,pd.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Ts,pd.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(en.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(en.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(en.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(en.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(en.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(en.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(Td.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(Td.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(Td.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(Td.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Gc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Fc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Fc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Fc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Fc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(Rd.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(Rd.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(Rd.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(Rd.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Fc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(o6)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(a6)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(c6)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(u6)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(l6)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(_6)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(DM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(d6.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(E6)),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(Ts,bM.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Ts,Gc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Ts,Gc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Ts,bM.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Kp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Kp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B($p.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B($p.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B($p.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(IM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(IM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(y6)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(m6.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Ts,Gc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(i6)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(CM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(CM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(UM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(UM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(DM.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(LM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Ts,LM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(MM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(MM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(en.getBackup)),e}a(I6,"initializeOperationFunctionMap")});var Od=m((Fle,VM)=>{"use strict";var zp=A(),w6=V(),Vc=x(),{handleHDBError:Jp,hdb_errors:Ad}=W(),{isMainThread:C6}=require("worker_threads"),{Readable:U6}=require("stream"),xM=require("os"),D6=require("util"),L6=xm(),M6=D6.promisify(L6.authorize),kM=Qp(),{Gzip:P6}=require("zlib");function v6(e){let t=`Found an uncaught exception with message: ${e.message}. ${xM.EOL}Stack: ${e.stack} ${xM.EOL}Terminating ${C6?"HDB":"thread"}.`;console.error(t),Vc.fatal(t),process.exit(1)}a(v6,"handleServerUncaughtException");function B6(e,t,r){if(Vc[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:Ad.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(B6,"serverErrorHandler");function H6(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Jp(new Error,"Invalid JSON.",Ad.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(w6.isEmpty(e.body.operation)){let s=Jp(new Error,"Request body must include an 'operation' property.",Ad.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(H6,"reqBodyValidationHandler");function q6(e,t,r){let s;e.body.operation!==zp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==zp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==zp.OPERATIONS_ENUM.LOGOUT?M6(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Vc.warn(n),Vc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Jp(n,i,Ad.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(q6,"authHandler");async function F6(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=kM.chooseOperation(e.body);let n=await kM.processLocalTransaction(e,s);if(n instanceof U6&&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 P6))}return n}catch(n){throw Vc.error(n),n}}a(F6,"handlePostRequest");VM.exports={authHandler:q6,handlePostRequest:F6,handleServerUncaughtException:v6,serverErrorHandler:B6,reqBodyValidationHandler:H6}});var WM=m((xle,KM)=>{"use strict";var G6=require("fastify-plugin"),{handlePostRequest:$M,authHandler:x6,reqBodyValidationHandler:k6}=Od();async function V6(e){e.decorate("hdbCore",{preValidation:[k6,x6],request:t=>YM($M(t,response)),requestWithoutAuthentication:(t,r)=>YM($M(t,r,!0))})}a(V6,"hdbCore");async function YM(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(YM,"convertAsyncIterators");KM.exports=G6(V6)});var zM=m((Vle,QM)=>{"use strict";var Xp=require("fs"),Lo=Q();Lo.initSync();var{CONFIG_PARAMS:$c}=A(),$6=1024*1024*1024;function Y6(e){let t=Lo.get($c.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Lo.get($c.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:$6,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Lo.get($c.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Lo.get($c.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Lo.get($c.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Xp.readFileSync(`${n}`),cert:Xp.readFileSync(i)+(o?`
23
23
 
24
- `+Qp.readFileSync(o):"")},s.http2=!0}return s}a(G6,"getServerOptions");$M.exports=G6});var QM=m((vle,WM)=>{"use strict";var zp=Q();zp.initSync();var{CONFIG_PARAMS:KM}=g();function x6(){let e=zp.get(KM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=zp.get(KM.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(x6,"getCORSOptions");WM.exports=x6});var XM=m((Hle,JM)=>{"use strict";var zM=Q();zM.initSync();var k6=g();function V6(){return zM.get(k6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(V6,"getHeaderTimeoutConfig");JM.exports=V6});var Zp={};je(Zp,{customFunctionsServer:()=>K6,handleFile:()=>Y6,ready:()=>z6});async function Y6(e,t,r,s){if(!js){let c=Jp.get(Xp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);js=lP(c),mt.http((await js).server)}let n=await js,i=(0,jM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),ZM.has(i)||(ZM.add(i),n.register(Q6(i,o)))}async function K6(){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 W6();let e=Jp.get(Xp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=js=await lP(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 W6(){try{Ue.info("Custom Functions starting configuration."),await iP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function Q6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,eP.existsSync)(e)&&r.register(nP.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 lP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,oP.default)(e),r=(0,tP.default)(t);r.server.headersTimeout=(0,cP.default)(),r.setErrorHandler(uP.serverErrorHandler);let s=(0,aP.default)();return s&&r.register(rP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(sP.default),await r.register($6),await r.after(),fp(r),Ue.info("Custom Functions completed buildServer."),r}function z6(){if(js)return js.then?js.then(e=>e.ready()):js.ready()}var jM,eP,tP,rP,sP,nP,Jp,Xp,Ue,$6,iP,oP,aP,cP,uP,js,ZM,_P=pe(()=>{jM=require("path"),eP=require("fs"),tP=D(require("fastify")),rP=D(require("@fastify/cors")),sP=D(Rp()),nP=D(require("@fastify/autoload")),Jp=D(Q()),Xp=D(g()),Ue=D(F()),$6=D(VM()),iP=D(ar()),oP=D(YM()),aP=D(QM()),cP=D(XM()),uP=D(Rd());To();ln();ZM=new Set;a(Y6,"handleFile");a(K6,"customFunctionsServer");a(W6,"setUp");a(Q6,"buildRouteFolder");a(lP,"buildServer");a(z6,"ready")});var jp={};je(jp,{start:()=>J6});function J6(e){let t=e.root;return{handleFile(r,s,n){EP||(EP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=dP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,fP.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))),dP.set(s,n)}}}var fP,dP,EP,hP=pe(()=>{fP=D(require("send")),dP=new Map;a(J6,"start")});function j6(e,t=1,r){if(eT++,(0,gi.startWorker)("server/threads/threadServer.js",{name:Od.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===Od.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});Z6.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=Ad.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)RP[c.localPort](c)}}}),r){let s=setInterval(()=>{tT?tT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,gi.shutdownWorkers)(),eT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function gP(e=0,t){if(typeof e=="string")try{(0,Nd.existsSync)(e)&&(0,Nd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=e9:r=t9(t):r=rT;let s=(0,pP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},RP[e]=i=>{tT=!0,r(i,(o,c)=>{if(!o){mP?(mP.deliverSocket(i,e,c),i.resume()):eT>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"),j6(0));return}o.requests++,i._handle.fd>=0?o.postMessage({port:e,fd:i._handle.fd,data:c}):i9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=xa();return TP.info(`HarperDB ${n.version} Server running on port ${e}`),s}function rT(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>=gd)return gd=i,t(r);s=i}gd=0,t(r)}function e9(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);rT(e,i=>{Mo.set(r,{worker:i,lastUsed:n}),t(i)})}function t9(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);rT(s,_=>{Mo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function s9(){gd=0;for(let e of Do)e.expectedIdle=e.recentELU.idle+r9,e.requests=1;Do.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function i9(e,t,r){let s=n9++;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(),Ad.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")),Ad.delete(s)),n.event=="destroy"&&(e.destroy(),Ad.delete(s))})}var gi,pP,Od,TP,Nd,X6,Do,Lo,RP,mP,eT,Z6,tT,gd,SP,Mo,r9,Ad,n9,AP=pe(()=>{gi=D(_t()),pP=require("net"),Od=D(g()),TP=D(F()),Nd=require("fs"),{isMainThread:X6}=require("worker_threads"),Do=[],Lo=[],RP=[],eT=0,Z6=[];X6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(j6,"startHTTPWorker");a(gP,"startSocketServer");gd=0;a(rT,"findMostIdleWorker");SP=36e5,Mo=new Map;a(e9,"findByRemoteAddressAffinity");a(t9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Mo)r.lastUsed+SP<e&&Mo.delete(t)},SP).unref();r9=1e3;a(s9,"updateWorkerIdleness");(0,gi.setMonitorListener)(s9);Ad=new Map,n9=1;a(i9,"proxySocket")});var IP=m((Qle,yP)=>{"use strict";var o9=require("cluster"),Qr=Q();Qr.initSync();var NP=g(),Yle=require("util"),en=F(),sT=require("fs"),a9=require("fastify"),Kle=xa(),c9=require("@fastify/cors"),u9=require("@fastify/compress"),l9=require("@fastify/static"),_9=Rp(),d9=require("path"),{PACKAGE_ROOT:E9}=g(),f9=qs(),h9=x(),m9=ar(),S9=Oa(),{server:p9}=(ln(),te(qE)),{authHandler:T9,handlePostRequest:R9,serverErrorHandler:g9,reqBodyValidationHandler:A9}=Rd(),Wle=require("net"),{registerContentHandlers:O9}=(To(),te(NL)),N9=1024*1024*1024,bP="TRUE",{HDB_SETTINGS_NAMES:Oi,CONFIG_PARAMS:b9}=NP,y9=Oi.CORS_ENABLED_KEY,I9="CORS_ACCESSLIST",w9=Oi.SERVER_TIMEOUT_KEY,C9=Oi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,U9=Oi.SERVER_HEADERS_TIMEOUT_KEY,D9=Oi.PRIVATE_KEY_KEY,L9=Oi.CERT_KEY,M9=Oi.HTTP_SECURE_ENABLED_KEY,Ai;yP.exports={hdbServer:OP,start:OP};async function OP(e){try{en.info("In Fastify server"+process.cwd()),en.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),en.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=o9.isMaster,await P9();let t=Qr.get(M9),r=t&&(t===!0||t.toUpperCase()===bP);Ai=v9(r),await Ai.ready(),e||(e={}),e.isOperationsServer=!0,Ai.server.cantCleanupProperly=!0;try{p9.http(Ai.server,e),Ai.server.closeIdleConnections||await Ai.listen({port:0,host:"::"})}catch(s){throw Ai.close(),en.error(s),en.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),en.fatal(t),process.exit(1)}}a(OP,"operationsServer");async function P9(){en.trace("Configuring HarperDB process."),f9.setSchemaDataToGlobal(),await m9.setUsersToGlobal(),await S9.getLicense()}a(P9,"setUp");function v9(e){en.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=B9(e),r=a9(t);r.server.headersTimeout=q9(),r.setErrorHandler(g9);let s=H9();s&&r.register(c9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(_9),r.register(u9),r.register(l9,{root:d9.join(E9,"docs")}),O9(r);let n=Qr.get(NP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!h9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[A9,T9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),R9(i,o)}),r.get("/health",()=>"HarperDB is running."),en.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(v9,"buildServer");function B9(e){let t=Qr.get(w9),r=Qr.get(C9),s={bodyLimit:N9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(D9),i=Qr.get(L9),o=Qr.get(b9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:sT.readFileSync(n),cert:sT.readFileSync(i)+(o?`
24
+ `+Xp.readFileSync(o):"")},s.http2=!0}return s}a(Y6,"getServerOptions");QM.exports=Y6});var ZM=m((Yle,XM)=>{"use strict";var Zp=Q();Zp.initSync();var{CONFIG_PARAMS:JM}=A();function K6(){let e=Zp.get(JM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Zp.get(JM.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(K6,"getCORSOptions");XM.exports=K6});var tP=m((Wle,eP)=>{"use strict";var jM=Q();jM.initSync();var W6=A();function Q6(){return jM.get(W6.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(Q6,"getHeaderTimeoutConfig");eP.exports=Q6});var tT={};et(tT,{customFunctionsServer:()=>X6,handleFile:()=>J6,ready:()=>e9});async function J6(e,t,r,s){if(!tn){let c=jp.get(eT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);tn=fP(c),rt.http((await tn).server)}let n=await tn,i=(0,sP.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),rP.has(i)||(rP.add(i),n.register(j6(i,o)))}async function X6(){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 Z6();let e=jp.get(eT.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=tn=await fP(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 Z6(){try{Ue.info("Custom Functions starting configuration."),await uP.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function j6(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,nP.existsSync)(e)&&r.register(cP.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 fP(e){Ue.info("Custom Functions starting buildServer.");let t=(0,lP.default)(e),r=(0,iP.default)(t);r.server.headersTimeout=(0,dP.default)(),r.setErrorHandler(EP.serverErrorHandler);let s=(0,_P.default)();return s&&r.register(oP.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(aP.default),await r.register(z6),await r.after(),pp(r),Ue.info("Custom Functions completed buildServer."),r}function e9(){if(tn)return tn.then?tn.then(e=>e.ready()):tn.ready()}var sP,nP,iP,oP,aP,cP,jp,eT,Ue,z6,uP,lP,_P,dP,EP,tn,rP,hP=Se(()=>{sP=require("path"),nP=require("fs"),iP=C(require("fastify")),oP=C(require("@fastify/cors")),aP=C(Op()),cP=C(require("@fastify/autoload")),jp=C(Q()),eT=C(A()),Ue=C(x()),z6=C(WM()),uP=C(ar()),lP=C(zM()),_P=C(ZM()),dP=C(tP()),EP=C(Od());go();Jr();rP=new Set;a(J6,"handleFile");a(X6,"customFunctionsServer");a(Z6,"setUp");a(j6,"buildRouteFolder");a(fP,"buildServer");a(e9,"ready")});var rT={};et(rT,{start:()=>t9});function t9(e){let t=e.root;return{handleFile(r,s,n){SP||(SP=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=mP.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,pP.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))),mP.set(s,n)}}}var pP,mP,SP,TP=Se(()=>{pP=C(require("send")),mP=new Map;a(t9,"start")});function n9(e,t=1,r){if(sT++,(0,Ai.startWorker)("server/threads/threadServer.js",{name:yd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===yd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});s9.push(n),await n,Mo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=bd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Mo.indexOf(s);o>-1&&Mo.splice(o,1)}if(a(i,"removeWorker"),Po){let o=Po;Po=[];for(let c of o)OP[c.localPort](c)}}}),r){let s=setInterval(()=>{nT?nT=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ai.shutdownWorkers)(),sT=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function NP(e=0,t){if(typeof e=="string")try{(0,wd.existsSync)(e)&&(0,wd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=i9:r=o9(t):r=iT;let s=(0,AP.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},OP[e]=i=>{nT=!0,r(i,(o,c)=>{if(!o){RP?(RP.deliverSocket(i,e,c),i.resume()):sT>0?(Po.length===0&&setTimeout(()=>{Po.length>0&&console.warn("Incoming sockets/requests have been queued for workers to start, and no workers have handled them. Check to make sure an error is not preventing workers from starting")},1e4).unref(),Po.push(i)):(console.log("start up a dynamic thread to handle request"),n9(0));return}o.requests++;let u=i._handle.fd;Id.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):l9(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Va();return Id.info(`HarperDB ${n.version} Server running on port ${e}`),s}function iT(e,t){let r,s=0;for(let n of Mo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Nd)return Nd=i,t(r);s=i}Nd=0,t(r)}function i9(e,t){let r=e.remoteAddress,s=vo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);iT(e,i=>{vo.set(r,{worker:i,lastUsed:n}),t(i)})}function o9(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=vo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);iT(s,_=>{vo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function c9(){Nd=0;for(let e of Mo)e.expectedIdle=e.recentELU.idle+a9,e.requests=1;Mo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function l9(e,t,r){let s=u9++;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(),bd.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")),bd.delete(s)),n.event=="destroy"&&(e.destroy(),bd.delete(s))})}var Ai,AP,yd,Id,wd,r9,Mo,Po,OP,RP,sT,s9,nT,Nd,gP,vo,a9,bd,u9,bP=Se(()=>{Ai=C(dt()),AP=require("net"),yd=C(A()),Id=C(x()),wd=require("fs"),{isMainThread:r9}=require("worker_threads"),Mo=[],Po=[],OP=[],sT=0,s9=[];r9&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(n9,"startHTTPWorker");a(NP,"startSocketServer");Nd=0;a(iT,"findMostIdleWorker");gP=36e5,vo=new Map;a(i9,"findByRemoteAddressAffinity");a(o9,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of vo)r.lastUsed+gP<e&&vo.delete(t)},gP).unref();a9=1e3;a(c9,"updateWorkerIdleness");(0,Ai.setMonitorListener)(c9);bd=new Map,u9=1;a(l9,"proxySocket")});var UP=m((n_e,CP)=>{"use strict";var _9=require("cluster"),Qr=Q();Qr.initSync();var IP=A(),t_e=require("util"),rn=x(),oT=require("fs"),d9=require("fastify"),r_e=Va(),E9=require("@fastify/cors"),f9=require("@fastify/compress"),h9=require("@fastify/static"),m9=Op(),S9=require("path"),{PACKAGE_ROOT:p9}=A(),T9=Gs(),R9=V(),g9=ar(),A9=ba(),{server:O9}=(Jr(),re(Ru)),{authHandler:N9,handlePostRequest:b9,serverErrorHandler:y9,reqBodyValidationHandler:I9}=Od(),s_e=require("net"),{registerContentHandlers:w9}=(go(),re(wL)),C9=1024*1024*1024,wP="TRUE",{HDB_SETTINGS_NAMES:Ni,CONFIG_PARAMS:U9}=IP,D9=Ni.CORS_ENABLED_KEY,L9="CORS_ACCESSLIST",M9=Ni.SERVER_TIMEOUT_KEY,P9=Ni.SERVER_KEEP_ALIVE_TIMEOUT_KEY,v9=Ni.SERVER_HEADERS_TIMEOUT_KEY,B9=Ni.PRIVATE_KEY_KEY,H9=Ni.CERT_KEY,q9=Ni.HTTP_SECURE_ENABLED_KEY,Oi;CP.exports={hdbServer:yP,start:yP};async function yP(e){try{rn.info("In Fastify server"+process.cwd()),rn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),rn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=_9.isMaster,await F9();let t=Qr.get(q9),r=t&&(t===!0||t.toUpperCase()===wP);Oi=G9(r),await Oi.ready(),e||(e={}),e.isOperationsServer=!0,Oi.server.cantCleanupProperly=!0;try{O9.http(Oi.server,e),Oi.server.closeIdleConnections||await Oi.listen({port:0,host:"::"})}catch(s){throw Oi.close(),rn.error(s),rn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),rn.fatal(t),process.exit(1)}}a(yP,"operationsServer");async function F9(){rn.trace("Configuring HarperDB process."),T9.setSchemaDataToGlobal(),await g9.setUsersToGlobal(),await A9.getLicense()}a(F9,"setUp");function G9(e){rn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=x9(e),r=d9(t);r.server.headersTimeout=V9(),r.setErrorHandler(y9);let s=k9();s&&r.register(E9,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(m9),r.register(f9),r.register(h9,{root:S9.join(p9,"docs")}),w9(r);let n=Qr.get(IP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!R9.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[I9,N9],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),b9(i,o)}),r.get("/health",()=>"HarperDB is running."),rn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(G9,"buildServer");function x9(e){let t=Qr.get(M9),r=Qr.get(P9),s={bodyLimit:C9,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Qr.get(B9),i=Qr.get(H9),o=Qr.get(U9.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:oT.readFileSync(n),cert:oT.readFileSync(i)+(o?`
25
25
 
26
- `+sT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(B9,"getServerOptions");function H9(){let e=Qr.get(y9),t=Qr.get(I9),r;return e&&(e===!0||e.toUpperCase()===bP)&&(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(H9,"getCORSOpts");function q9(){return Qr.get(U9)}a(q9,"getHeaderTimeoutConfig")});var FP=m((Zle,qP)=>{"use strict";var{decode:F9}=require("msgpackr"),{isMainThread:G9,parentPort:x9,threadId:Jle}=require("worker_threads"),nT=Qe(),Po=Be(),k9=g(),Vc=F(),wP=Q(),DP=g();_t();var V9=Hs(),{recordAction:$9,recordActionBinary:Y9}=(eo(),te(Ll)),{publishToStream:K9}=nT,Xle={durable:Po.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Po.WORK_QUEUE_CONSUMER_NAMES.deliver_group},W9,Q9,z9,LP,MP;qP.exports={initialize:PP,workQueueListener:HP,setSubscription:J9,setIgnoreOrigin:Z9,getDatabaseSubscriptions:X9};async function PP(){MP=!0,Vc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await nT.getNATSReferences();W9=e,Q9=e.info.server_name,z9=t,LP=r}a(PP,"initialize");var yd=new Map;function J9(e,t,r){let s=yd.get(e);s||yd.set(e,s=new Map),s.set(t,r),MP||PP().then(HP)}a(J9,"setSubscription");function X9(){return yd}a(X9,"getDatabaseSubscriptions");var vP;function Z9(e){vP=e}a(Z9,"setIgnoreOrigin");var BP=100,CP=new Array(BP),bd=0;async function HP(){let t=await(await LP.consumers.get(Po.WORK_QUEUE_CONSUMER_NAMES.stream_name,Po.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await CP[bd],CP[bd]=j9(r).catch(s=>{Vc.error(s)}),++bd>=BP&&(bd=0)}a(HP,"workQueueListener");G9||x9.on("message",async e=>{let{type:t}=e;t===DP.ITC_EVENT_TYPES.SHUTDOWN&&nT.closeConnection()});async function j9(e){let t=F9(e.data);$9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Po.MSG_HEADERS.ORIGIN)===wP.get(k9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!vP;if(Y9(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;Vc.trace("processing message:",i,o,u,(l?"records: "+l.map(y=>y.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Vc.trace(`messageProcessor nats msg id: ${e.headers.get(Po.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},S=yd.get(o)?.get(u);if(!S)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,S.send(t);else if(l.length===1&&!c)S.send({type:UP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let y=l.map((O,H)=>({type:UP(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})}wP.get(DP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&K9(e.subject.split(".").slice(0,-1).join("."),V9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Vc.error(i)}e.ack()}a(j9,"messageProcessor");function UP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(UP,"convertOperation")});var Ud={};je(Ud,{disableNATS:()=>t7,setNATSReplicator:()=>iT,start:()=>e7});function e7(){wd.default.get(Cd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&s7()}function t7(e=!0){$P=e}function s7(){if($P)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];iT(n,r,i)}}_T((r,s)=>{iT(r.tableName,r.databaseName,r),s&&KP(r)}),!GP&&(GP=!0)}function iT(e,t,r){if(!r)return console.error(`Attempt to replicate non-existent table ${e} from database ${t}`);if(r.Source?.isNATSReplicator)return;let s;r.sourcedFrom(class extends ht{static{a(this,"NATSReplicator")}put(o){let c;return s?.put&&(!s.put.reliesOnPrototype||s.prototype.put)&&(c=s.put(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ie],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ie],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ie]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ie],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ie],record:o},c)}invalidate(o){if(n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ie]}),s?.invalidate&&(!s.invalidate.reliesOnPrototype||s.prototype.invalidate))return s.invalidate(this[ie],this.getContext())}static defineSchema(o){KP(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 Jr;return(0,xP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<r7}static isNATSReplicator=!0});function n(i){let o=i?.transaction?.nats;return o||(i?.transaction?(i.transaction.push(o=i.transaction.nats=new Id(i.transaction,i)),o.user=i.user):o=YP),o}a(n,"getNATSTransaction")}function KP(e){let t=wd.default.get(Cd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,aT.publishToStream)(`${cT.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,uT.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 aT,cT,uT,xP,kP,wd,Cd,VP,$P,r7,YP,GP,Id,oT,lT=pe(()=>{de();Xr();aT=D(Qe()),cT=D(Be()),uT=D(Hs());ia();xP=D(FP()),kP=D(Ht()),wd=D(Q()),Cd=D(g()),VP=D(F());a(e7,"start");a(t7,"disableNATS");r7=2;a(s7,"assignReplicationSource");a(iT,"setNATSReplicator");a(KP,"publishSchema");Id=class{constructor(t,r){this.transaction=t;this.options=r}static{a(this,"NATSTransaction")}user;writes_by_db=new Map;addWrite(t,r,s){let n=this.writes_by_db.get(t);if(n||this.writes_by_db.set(t,n=[]),s?.then)return s.then(()=>n.push(r));n.push(r)}commit(t){let r=wd.default.get(Cd.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||(VP.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,aT.publishToStream)(`${cT.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,uT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},oT=class extends Id{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,kP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};YP=new oT});async function QP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await dT.getResource(e,{});n=new fT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await dT.get(e);i&&i.delete()}n=new Ld(e,t)}return n}function ET(){return Dd++,Dd>65500&&(Dd=1),Dd}var WP,$c,dT,Dd,Ld,fT,zP=pe(()=>{de();Tc();WP=D(Ht()),$c=D(F());Vn();dT=rt({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(QP,"getSession");Dd=1;a(ET,"getNextMessageId");Ld=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,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=ET();let A=H.id;Array.isArray(A)&&(A=So(A)),A==null&&(A=""),this.listener(T+"/"+A,H.value,Y,t)}catch(Y){(0,$c.warn)(Y)}})(),O});return y.topic=n,y.qos=t.qos,this.subscriptions.push(y),y}resume(){}needsAcknowledge(t){return ET()}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=[]}},fT=class extends Ld{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=ET();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,$c.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,$c.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),dT.put(this.sessionRecord)),t.qos}}});var ST={};je(ST,{start:()=>i7});async function i7({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:_}=ZP(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,tn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;n7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,jP.getSuperUser)());let{onMessage:u,onClose:l}=ZP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,tn.info)("Socket error",_)})},{port:t,securePort:s})}function ZP(e,t,r,s,n){XP||(XP=!0,sm(_=>{_.push({metric:"mqtt-connections",connections:hT})})),hT++;let i,o={protocolVersion:4},c=(0,Md.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){hT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await mt.auth(_.username,_.password.toString()),(0,mT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&JP.notify({username:s.username,status:rn.AUTH_AUDIT_STATUS.SUCCESS,type:rn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,mT.get)(rn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&JP.error({username:s.username,status:rn.AUTH_AUDIT_STATUS.FAILURE,type:rn.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=QP({user:s,..._}),i=await i}catch(O){return(0,tn.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,tn.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,tn.error)(Y),H=128}f.push(H)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=No(r?.headers["content-type"])),S=_.payload?.length>0?T(_.payload):void 0,y;try{y=await i.publish(_,S)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:y===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Md.generate)(f,o);t(T),ii(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ks(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Md,jP,mT,rn,tn,JP,n7,XP,hT,ev=pe(()=>{Md=require("mqtt-packet");zP();jP=D(ar());To();eo();ln();mT=D(Q()),rn=D(g()),tn=D(F()),JP=(0,tn.loggerWithTag)("auth-event"),n7=!0;a(i7,"start");hT=0;a(ZP,"onSocket")});var lv={};je(lv,{loadComponent:()=>Pd,loadComponentDirectories:()=>uv});function uv(e,t){t&&(TT=t),e&&(RT=e);let r=[];if((0,ps.existsSync)(pT)){let n=(0,ps.readdirSync)(pT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Dr.join)(pT,o);r.push(Pd(c,TT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Pd(s,TT,s)),Promise.all(r).then(()=>{cv=!0})}async function Pd(e,t,r,s,n){if(!rv.has(e)){rv.set(e,!0),n&&(RT=n);try{let i,o=(0,Dr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(o)?i=(0,sv.parseDocument)((0,ps.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=u7;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,ps.existsSync)(f=(0,Dr.join)(E,"node_modules",u));)if(E=(0,Dr.dirname)(E),E.length<(0,av.getHdbBasePath)().length){f=null;break}if(f)_=await Pd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=c7[u];if(_)try{c.push(_);let E=a(S=>(S.origin=r,rt(S)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Yc.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&&!tv.includes(S)){tv.push(S);let y=gT.get(AT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);gP(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})||_),RT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,ov.handleHDBError)("Can not reference parent directories");let S=(0,Dr.join)(e,l.files);for(let y of await(0,nv.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 a7(O);Yc.isMainThread&&await _.setupFile?.(G,w,O,t),t.isWorker&&await _.handleFile?.(G,w,O,t)}else Yc.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 Kc(G))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Kc(E),null,!0)}}if(Yc.isMainThread&&!cv&&(0,iv.watchDir)(e,async()=>uv()),i.extensionModule)return await Pu((0,Dr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Kc(i))}}}var ps,Dr,Yc,sv,gT,AT,nv,iv,ov,av,o7,a7,pT,RT,cv,TT,c7,u7,tv,rv,Kc,_v=pe(()=>{ps=require("fs"),Dr=require("path"),Yc=require("worker_threads"),sv=require("yaml"),gT=D(Q()),AT=D(g());qg();kg();Vg();IL();_P();hP();nv=D(require("fast-glob")),iv=D(_t());kE();ln();ov=D(W());Xr();de();AP();av=D(Q()),o7=D(IP());L_();lT();ev();({readFile:a7}=ps.promises),pT=gT.get(AT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),RT=new Map;a(uv,"loadComponentDirectories");c7={REST:Tp,graphqlSchema:xE,jsResource:$E,fastifyRoutes:Zp,login:KE,static:jp,operationsApi:o7,customFunctions:{},clustering:Ud,authentication:Rc,mqtt:ST},u7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},tv=[],rv=new Map;a(Pd,"loadComponent");Kc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var Sv=m((y_e,mv)=>{"use strict";var Hd=require("fs-extra"),OT=require("path"),vd=F(),dv=x(),Bd=g(),hv=Q(),l7=Rr();mv.exports=_7;async function _7(){let e=d7(),t=hv.get(Bd.CONFIG_PARAMS.ROOTPATH),r=OT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Bd.PACKAGE_ROOT}},n=OT.join(t,"node_modules");await Hd.ensureDir(n);let i,o=!0,c=!1;try{i=await Hd.readJson(r)}catch(u){if(dv.isEmptyOrZeroLength(e))return;if(u.code!==Bd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!dv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await Ev(l);s.dependencies[u]=_+l}if(!o){vd.notify("Installing components"),await fv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await Ev(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(vd.notify("Removing component",u),c=!0);c&&(vd.notify("Updating components."),await fv(r,s))}a(_7,"installComponents");function d7(){let e=l7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(d7,"getComponentsConfig");async function Ev(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":OT.extname(e)||await Hd.pathExists(e)?"file:":"github:"}a(Ev,"getPkgPrefix");async function fv(e,t){vd.trace("npm installing components package.json",t),await Hd.writeFile(e,JSON.stringify(t,null," ")),await G_().installAllRootModules(hv.get(Bd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(fv,"installPackages")});var Rv=m((w_e,Tv)=>{var{isMainThread:pv}=require("worker_threads"),{getTables:E7}=(de(),te(Ne)),{loadComponentDirectories:f7,loadComponent:h7}=(_v(),te(lv)),{resetResources:m7}=(Tc(),te(sD)),S7=Sv(),p7=Rr(),{dirname:T7}=require("path"),{getConnection:R7}=Qe(),g7=Q(),A7=g(),NT=new Map;async function O7(e=!1){!pv&&g7.get(A7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&R7(),pv&&await S7();let t=m7();E7(),t.isWorker=e,await h7(T7(p7.getConfigFilePath()),t,"hdb",!0,NT),await f7(NT,t);let r=[];for(let[s]of NT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(O7,"loadRootComponents");Tv.exports.loadRootComponents=O7});var _t=m((D_e,Mn)=>{"use strict";var{Worker:N7,MessageChannel:b7,parentPort:Ts,isMainThread:CT,threadId:y7,workerData:Wc}=require("worker_threads"),{PACKAGE_ROOT:I7}=g(),{join:Ov,isAbsolute:w7,extname:Fd}=require("path"),{server:C7}=(ln(),te(qE)),{watch:U7,readdir:D7}=require("fs/promises"),{totalmem:gv}=require("os"),UT=g(),Ni=F(),U_e=g(),{randomBytes:L7}=require("crypto"),M7=1024*1024,Ln=[],Dn=[],P7=50,Nv=1e4,v7="restart",bv="request_thread_info",yv="resource_report",Iv="thread_info",wv="added-port",B7="ack",bT;Mn.exports={startWorker:yT,restartWorkers:DT,shutdownWorkers:G7,workers:Ln,setMonitorListener:Q7,onMessageFromWorkers:x7,onMessageByType:k7,broadcast:V7,broadcastWithAcknowledgement:Y7,setChildListenerByType:F7,getWorkerIndex:Uv,getTicketKeys:Dv,setMainIsWorker:H7,restartNumber:Wc?.restartNumber||1};var Cv;function Uv(){return Wc?Wc.workerIndex:Cv?0:void 0}a(Uv,"getWorkerIndex");function H7(e){Cv=e}a(H7,"setMainIsWorker");var qd;function Dv(){return qd||(qd=CT?L7(48):Wc.ticketKeys,qd)}a(Dv,"getTicketKeys");Object.defineProperty(C7,"workerIndex",{get(){return Uv()}});var Lv={[bv](e,t){K7(t)},[yv](e,t){W7(t,e)}};function yT(e,t={}){let r=process.constrainedMemory?.()||gv();r=Math.min(r,gv());let s=Math.max(Math.floor(r/M7/(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 b7;c.postMessage({type:wv,port:u},[u]),i.push(l)}Fd(e)||(e+=".js");let o=new N7(w7(e)?e:Ov(I7,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 xd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{yT(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<P7?(t.unexpectedRestarts=o.unexpectedRestarts+1,yT(e,t)):Ni.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{Lv[c.type]?.(c,o)}),Ln.push(o),J7(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(yT,"startWorker");var q7=[UT.THREAD_TYPES.HTTP];async function DT(e=null,t=2,r=!0){if(CT){if(r){let{loadRootComponents:n}=Rv();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:UT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=q7.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),Nv*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 Ts.postMessage({type:v7,workerType:e})}a(DT,"restartWorkers");function F7(e,t){Lv[e]=t}a(F7,"setChildListenerByType");function G7(e){return DT(e,1/0,!1)}a(G7,"shutdownWorkers");var Mv=[];function x7(e){Mv.push(e)}a(x7,"onMessageFromWorkers");var IT=new Map;function k7(e,t){let r=IT.get(e);r||IT.set(e,r=[]),r.push(t)}a(k7,"onMessageByType");function V7(e){for(let t of Dn)try{t.postMessage(e)}catch(r){Ni.error("Unable to send message to worker",r)}}a(V7,"broadcast");var Gd=new Map,$7=1;function Y7(e){return new Promise(t=>{let r=0;for(let s of Dn)try{let n=$7++,i=a(()=>{Gd.delete(n),--r===0&&t(),s!==Ts&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Gd.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Gd)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Ni.error("Unable to send message to worker",n)}r===0&&t()})}a(Y7,"broadcastWithAcknowledgement");function K7(e){e.postMessage({type:Iv,workers:Pv()})}a(K7,"sendThreadInfo");function Pv(){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(Pv,"getChildWorkerInfo");function W7(e,t){e.resources=t,e.resources.updated=Date.now()}a(W7,"recordResourceReport");var wT;function Q7(e){wT=e}a(Q7,"setMonitorListener");var z7=1e3,Av=!1;function J7(){Av||(Av=!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}wT&&wT()},z7).unref())}a(J7,"startMonitoring");var X7=1e3;if(Ts){xd(Ts);for(let e of Wc.addPorts)xd(e);setInterval(()=>{let e=process.memoryUsage();Ts.postMessage({type:yv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},X7).unref(),bT=a(()=>new Promise((e,t)=>{Ts.on("message",r),Ts.postMessage({type:bv});function r(s){s.type===Iv&&(Ts.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else bT=Pv;Mn.exports.getThreadInfo=bT;function xd(e,t){Dn.push(e),e.on("message",r=>{if(r.type===wv)xd(r.port);else if(r.type===B7){let s=Gd.get(r.id);s&&s()}else{for(let n of Mv)n(r,e);let s=IT.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(xd,"addPort");if(CT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await D7(s,{withFileTypes:!0}))i.isDirectory()&&r(Ov(s,i.name));for await(let{filename:i}of U7(s,{persistent:!1}))(Fd(i)===".ts"||Fd(i)===".js"||Fd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await DT(),Ni.info("Reloaded HarperDB components")},100))},"watch_dir");Mn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else Ts.on("message",async e=>{let{type:t}=e;t===UT.ITC_EVENT_TYPES.SHUTDOWN&&(Mn.exports.restartNumber=e.restartNumber,Ts.unref(),setTimeout(()=>{Ni.warn("Thread did not voluntarily terminate",y7),process.exit(0)},Nv).unref())})});function BT(e){let t=e.auditStore=e.openDB(Fv.AUDIT_STORE_NAME,j7);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,xv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{MT||(MT=setTimeout(()=>{if(MT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-vv,0]})){if((n[0]&15)===vT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},vv/10).unref())}),t}function $d(e,t,r){let s=$v[r.type],n=3;if(t?t.length>80?(s|=kd,n=(0,sn.writeKey)(t,Rs,e?14:6),LT.setUint16(2,n)):(n=(0,sn.writeKey)(t,Rs,e?11:3),Rs[1]=n):Rs[1]=0,e){s|=Vv;let i=s&kd?6:3;LT.setFloat64(i,e),t||(n=i+8)}return Rs[0]=s,s&kd?LT.setUint16(4,0):Rs[2]=0,r.value?Buffer.concat([Rs.slice(0,n),r.value]):Rs.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&kd,i=n?6:3,o;r&Vv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&PT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:$v[r&7],value:u,lastVersion:o,get user(){return c?(0,sn.readKey)(e,i,c):void 0}}}var sn,Vd,Fv,Gv,xv,kv,Rs,LT,Z7,j7,vv,MT,PT,Bv,vT,Hv,qv,kd,Vv,$v,Qc=pe(()=>{sn=require("ordered-binary"),Vd=D(Q()),Fv=D(xe()),Gv=D(g()),xv=D(_t()),kv=D(x());(0,Vd.initSync)();Rs=Buffer.alloc(1024),LT=new DataView(Rs.buffer,Rs.byteOffset,1024),Z7={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,sn.writeKey)(e[2],t,r+12)}else return(0,sn.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,sn.readKey)(e,t+12,r)]}else return(0,sn.readKey)(e,t,r)}},j7={encoding:"binary",keyEncoder:Z7},vv=(0,kv.convertToMS)((0,Vd.get)(Gv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,MT=null;a(BT,"openAuditStore");PT=16,Bv=1,vT=2,Hv=3,qv=4,kd=128,Vv=64,$v={put:Bv|PT,[Bv]:"put",delete:vT,[vT]:"delete",message:Hv|PT,[Hv]:"message",invalidate:qv,[qv]:"invalidate"};a($d,"createAuditEntry");a(Pn,"readAuditEntry")});var HT,bi,eee,zc,Yd,Yv=pe(()=>{HT=D(Ht());Qc();bi=Symbol("completion"),eee=100,zc=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,HT.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,$d(_.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<eee>>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=[]}},Yd=class extends zc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,HT.getNextMonotonicTime)())}getReadTxn(){}}});function zv(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;FT(d.path,E,d.txnId)}),(0,yi.onMessageByType)(Qv,d=>{(0,gs.trace)("confirming to proceed with txn",d.txnId)}),Bo=Object.create(null));let c=Bo[i]||(Bo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=So(t);let l=new qT(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 FT(e,t,r,s){if(!Bo)return;let n=Bo[e];if(n){if(vo&&vo+1!==r){(0,gs.trace)("Waiting to ensure latest txn id",vo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Kd)o<r&&((0,gs.trace)("Txn",r,"waiting for txn",o),await c);if(vo+1!==r){await(0,yi.broadcastWithAcknowledgement)({type:Qv,txnId:r});for(let[o,c]of Kd)o<r&&((0,gs.trace)("Txn",r,"waiting for txn",o),await c)}Kd.delete(r),(0,gs.trace)("Proceeding with txn id",r),vo=r-1,FT(e,t,r,s)})();return Kd.set(r,i),i}(0,gs.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,Kv.writeKey)(i,ree,0);let _=i[3];_&&(i.length=3);let d,E=So(u),f;do{let h=l.get(E);if(h){for(let S of h)if(!(f&&!S.includeDescendants)){if(S.startTime>=o){(0,gs.info)("omitting",u,S.startTime,o);continue}try{if(S.crossThreads===!1&&!s)continue;if(d===void 0){let y=n.auditStore.get(i);if(!y||(d=Pn(y,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}S.listener(u,d,o)}catch(y){console.error(y),(0,gs.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 Jv(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&tee)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}),FT(n,l,c,!0))})}}var gs,yi,Kv,Wv,Qv,tee,Bo,ree,qT,vo,Kd,Xv=pe(()=>{gs=D(F()),yi=D(_t()),Kv=require("ordered-binary");ia();Tc();Qc();Wv="transaction",Qv="transaction-await",tee=67108864,ree=Buffer.alloc(4096);a(zv,"addSubscription");qT=class extends Jr{static{a(this,"Subscription")}listener;subscriptions;startTime;constructor(t){super(),this.listener=t}end(){if(this.subscriptions.splice(this.subscriptions.indexOf(this),1),this.subscriptions.length===0){let t=this.subscriptions.tables,r=this.subscriptions.key;if(t.delete(r),t.size===0){let s=t.envs,n=t.dbi;delete s[n]}}}toJSON(){return{name:"subscription"}}},Kd=new Map;a(FT,"notifyFromTransactionData");a(Jv,"listenToCommits")});var vp={};je(vp,{coerceType:()=>Wd,makeTable:()=>zd,setServerUtilities:()=>aee});function zd(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=[]),Jv(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&&XT();class k extends ht{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=H;static updatedTimeProperty=Y;static dbisDB=_;static schemaDefined=l;static sourcedFrom(p,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(p,this.sourceOptions);else if(p.mergeSource)this.Source=p.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=p;return(async()=>{let L=!1,b=a(async C=>{let v=C.value,U=C.table?ve[c][C.table]:k;if(c===zr.SYSTEM_SCHEMA_NAME&&(C.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=v[U.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let M=await U.getResource(C.id,C,Jc);switch(C.type){case"put":return M._writeUpdate(v,Jc);case"delete":return M._writeDelete(Jc);case"publish":return M._writePublish(v,Jc);case"invalidate":return M.invalidate(Jc);default:Ci.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,wi.getWorkerIndex)()):(0,wi.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(re){throw re.message+=" writing "+JSON.stringify(K)+" of event "+JSON.stringify(M),re}}return Promise.all(Z)}else if(M.type==="define_schema"){let Z=this.attributes.slice(0),K;for(let re of M.attributes)Z.find(De=>De.name===re.name)||(Z.push(re),K=!0);K&&(rt({table:n,database:c,attributes:Z,origin:"cluster"}),jc.signalSchemaChange(new eu.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(M)});M.onCommit&&(J?.then&&L&&jc.signalUserChange(new eu.UserEventMsg(process.pid)),J?.then?J.then(M.onCommit):M.onCommit())}catch(V){console.error("error in subscription handler",V)}}catch(C){console.error(C)}})(),this}static getResource(p,N,L){let b=super.getResource(p,N,L);if(p!=null)try{if(b.hasOwnProperty(ce))return b;let C=b._txnForRequest();if(typeof p=="object"&&p&&!Array.isArray(p))throw new Error(`Invalid id ${JSON.stringify(p)}`);let v,U,V={transaction:C?.getReadTxn()},J;return ct(p,N,V,(Z,K)=>{K?U(K):(b[ce]=Z?.value,b[Zt]=Z?.version,J=!0,v?.(b))}),J?b:new Promise((Z,K)=>{v=Z,U=K})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(p)),C}return b}static setTTLExpiration(p){(0,wi.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,XT(),k.audit=!0}static coerceId(p){return p===""?null:Wd(p,O)}static async dropTable(){if(delete ve[c][n],c===o){for(let p in r)_.remove(k.tableName+"/"+p),r[p].drop();_.remove(k.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));jc.signalSchemaChange(new eu.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=GT(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=GT(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=GT(b,"insert");for(let v in N)if(!C[v])return!1}else return!0}}static allowDelete(p){if(!p)return!1;let N=p.role.permission;if(N.super_user||N[n]?.delete)return!0}update(p,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(p===!1)return this;let b;if(typeof p=="object"&&p){if(N)for(let C in this[ce])p[C]===void 0&&(p[C]=void 0);b=this[ft],b&&(p=Object.assign(b,p)),this[ft]=b=p}return!this[ce]&&t&&!(b||(b=this[ft]))?.[t]&&(b||(b=this[ft]=Object.create(null)),b[t]=this[ie]),this._writeUpdate(this),this}invalidate(p){this._txnForRequest().addWrite({key:this[ie],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let V in r)C[V]=this.getProperty(V);let v=k.Source,U,M=this[ie];return p?.isNotification||v?.invalidate&&(!v.invalidate.reliesOnPrototype||v.prototype.invalidate)&&(U=v.invalidate(M,this)),i.put(this[ie],C,L),{type:E&&"invalidate",[bi]: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,iB.operation(p,N)}async put(p){this.update(p,!0)}_writeUpdate(p,N){let L=this._txnForRequest();if(this[ie]===void 0)throw new Error("Can not save record without an id");let b=this[ce],C,v,U=this[ie];b||(this[ce]={}),L.addWrite({key:U,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(M,V)=>{let J;if(V){if(C)return;let K=i.getEntry(U);b=K?.value;let re=this[Oe];re&&K?.version>(re.lastModified||0)&&(re.lastModified=K.version)}if(!v){if(v=!0,N?.isNotification)p=aa(p);else{if(p[eB]&&(C=!yu(p),C))return;t&&p[t]!==U&&(p[t]=U),Y&&(p[Y.name]=Y.type==="Date"?new Date(M):Y.type==="String"?new Date(M).toISOString():M),H&&(b?p[H.name]=b[H.name]:p[H.name]=H.type==="Date"?new Date(M):H.type==="String"?new Date(M).toISOString():M),p=aa(p);let K=k.Source;K?.put&&(!K.put.reliesOnPrototype||K.prototype.put)&&(J=K.put(U,p,this))}if(p[ce])throw new Error("Can not assign a record with a record property");this[ce]=p}if(Ci.trace("Checking timestamp for put",U,this[Zt]>M,this[Zt],M),this[Zt]>M)return E&&{type:"put",value:i.encoder.encode(p)};let Z=i.encoder.encode(p);return i.put(this[ie],(0,Ho.asBinary)(Z),M),ge(this[ie],b,p),b===null&&!V&&Hn(-1),{type:E&&"put",value:Z,[bi]:J}}})}async delete(p){return typeof p=="string"?this.deleteProperty(p):this[ce]?this._writeDelete(p):!1}_writeDelete(p){let N=this._txnForRequest(),L,b=this[ie],C;return N.addWrite({key:b,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(v,U)=>{let M=this[ce];if(U){let V=i.getEntry(b);M=V?.value;let J=this[Oe];J&&V?.version>(J.lastModified||0)&&(J.lastModified=V.version)}if(!L&&(L=!0,!p?.isNotification)){let V=k.Source;V?.delete&&(!V.delete.reliesOnPrototype||V.prototype.delete)&&(C=V.delete(b,this))}if(!(this[Zt]>v))return ge(this[ie],M),Ci.trace("Write delete entry",E||f,v),E||f?(i.put(this[ie],null,v),E||JT(),U||Hn(1)):i.remove(this[ie]),{type:E&&"delete",[bi]: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 re=K[0]??K.attribute,De=re==null?O:h.find(nn=>nn.name==re);if(De)De.type&&(K[1]===void 0?K.value=C(K.value,De):K[1]=C(K[1],De));else if(re!=null)throw(0,Ii.handleHDBError)(new Error,`${re} is not a defined attribute`,404)}function C(K,re){return Array.isArray(K)?K.map(De=>Wd(De,re)):Wd(K,re)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,sB.sortBy)(b,K=>{if(K.estimated_count===void 0){let re=K.comparator||K.search_type;if(re===Xc.SEARCH_TYPES.EQUALS){let De=K[0]??K.attribute;if(De==null||De===t)K.estimated_count=1;else{let nn=r[De];K.estimated_count=nn?nn.getValuesCount(K[1]??K.value):1/0}}else re===Xc.SEARCH_TYPES.CONTAINS||re===Xc.SEARCH_TYPES.ENDS_WITH||re==="ne"?K.estimated_count=1/0:re===Xc.SEARCH_TYPES.STARTS_WITH||re==="prefix"?K.estimated_count=nee:K.estimated_count=see}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(re=>setImmediate(()=>re(K))):Ho.SKIP);else{let K=ME(M,v,L,k,p.allowFullScan);if(!p.operator||p.operator.toLowerCase()==="and"){let re=b.slice(1).map(PE);V=Z(K,re)}else{for(let De=1;De<b.length;De++){let nn=b[De],nE=ME(nn,v,L,k,p.allowFullScan);K=K.concat(nE)}let re=new Set;K=K.filter(De=>re.has(De)?!1:(re.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,re){let De=re?.length,nn={transaction:v,lazy:De>0||U?.length<4,alwaysPrefetch:!0};return K.map(nE=>new Promise(iE=>ct(nE,J,nn,CB=>{let oE=CB?.value;if(!oE)return iE(Ho.SKIP);for(let aE=0;aE<De;aE++)if(!re[aE](oE))return iE(Ho.SKIP);iE(oE)})))}return a(Z,"idsToRecords"),V}async subscribe(p){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||rt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=zv(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 Ii.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=Pn(U,i);(L==null||rB(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||rB(L,Z)){let K=Pn(M,i);if(v.push({id:Z,timestamp:V,...K}),--b<=0)break}}catch(V){Ci.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,nB.MAXIMUM_KEY],versions:!0}))U&&N.send({id:v,timestamp:M,value:U})}else{b&&!C&&(C=0);let v=this[Zt];if(C<v){let U=[],M=v;do{let V=[M,s,L],J=u.get(V);if(J){p.omitCurrent=!0;let Z=Pn(J,i);U.push({id:L,timestamp:M,...Z}),M=Z.lastVersion}else break;b&&b--}while(M>C&&b!==0);for(let V=U.length;V>0;)N.send(U[--V]);N.startTime=v}!p.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[Zt],value:this})}return p.listener&&N.on("data",p.listener),N}doesExist(){return!!this[ce]}async publish(p,N){this._writePublish(p,N)}_writePublish(p,N){let L=this._txnForRequest(),b=this[ie]||null,C,v;L.addWrite({store:i,key:b,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(p)},commit:(U,M)=>{if(this.validate(p),!v&&(v=!0,!N?.isNotification)){let Z=k.Source;Z?.publish&&(!Z.publish.reliesOnPrototype||Z.prototype.publish)&&(C=Z.publish(b,p,this))}let V=M>0?i.get(b):this[ce];V===void 0&&!M&&(E||f)&&(E||JT(),Hn(1));let J={type:"message",value:i.encoder.encode(p),[bi]:C};return!L.hasWrittenTime&&this[Zt]>U&&(U=J.newTxnTime=this[Zt]+.001),i.put(b,V??null,U),J}})}_txnForRequest(){let p=this[Oe],N=p?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new zc(i,p.user,u)),L}else return new Yd(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 Ii.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}static async addAttributes(p){let N=h.slice(0);for(let L of p){if(!L.name)throw new Ii.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new Ii.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),k.indexingOperation}static async removeAttributes(p){let N=h.filter(L=>!p.includes(L.name));return rt({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(){wu(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=Pn(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=Pn(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[eB]=!0,d&&k.setTTLExpiration(d/1e3),A&&wB(),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,Zc.getIndexedValues)(M);if(V){Zv&&C.prefetch(V.map(J=>({key:J,value:z})),tB);for(let J=0,Z=V.length;J<Z;J++)C.remove(V[J],z)}if(V=(0,Zc.getIndexedValues)(U),V){Zv&&C.prefetch(V.map(J=>({key:J,value:z})),tB);for(let J=0,Z=V.length;J<Z;J++)C.put(V[J],z)}}return L}a(ge,"updateIndices");function ct(z,p,N,L){let b=a(()=>{let C=N.transaction;if(C?.isDone)throw new Error("Invalid read transaction");let v;C&&!C.hasRunLoadRecord&&(v=!0,C.hasRunLoadRecord=!0);let U;try{U=i.getEntry(z,N)}catch(Z){throw Z.message+=". The read txn is "+JSON.stringify(C)+" first loadRecord: "+v,console.error(Z),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),Z}let M,V,J;if(U?(p&&U?.version>(p.lastModified||0)&&(p.lastModified=U.version),V=U.version,M=U.value,(V<0||!M||typeof M.__invalidated__=="number"||d&&V<Date.now()-d)&&(J=!0)):J=!0,J&&!N?.allowInvalidated){let Z=k.Source;if(Z&&Z.get&&(!Z.get.reliesOnPrototype||Z.prototype.get))return ko(z,M,V,p).then(re=>{if(re?.value?.[ce])throw new Error("Can not assign a record with a record property");L(re)},re=>{L(null,re)})}if(U?.value?.[ce])throw new Error("Can not assign a record with a record property");L(U)},"whenPrefetched");if(!N.alwaysPrefetch&&(z==null||i.cache?.get(z)))return b();i.prefetch([z],b)}a(ct,"loadRecord");function Li(){w=new Set,(0,wi.onMessageByType)("transaction",z),i.on("aftercommit",z);function z(){for(let p of w)p()}a(z,"onCommit")}a(Li,"setupCommitListeners");async function ko(z,p=null,N,L){if(N<0){let U;return w||Li(),await new Promise(M=>{let V,J=a(()=>{if(U=i.getEntry(z),!U||U.version>0){if(clearTimeout(V),w.delete(J),typeof U?.value?.__invalidated__=="number")return M(ko(z,U.value,U.version,L));M(U)}},"listener");w.add(J),V=setTimeout(()=>{w.delete(J),M(ko(z,U?.value,void 0,L))},1e4).unref()})}let b=p?.__invalidated__,C=-(N||1);i.put(z,p,C,N);let v={transaction:L?.transaction};try{let U=await k.Source.get(z,v),M=v.lastModified||N;(!M||d&&M<Date.now()-d)&&(M=(0,Zc.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],$d(b,null,U?{type:"put",value:i.encoder.encode(U)}:{type:"delete"})),{version:M,value:U}}catch(U){throw i.put(z,p,N,C),U}}a(ko,"getFromSource");function Hn(z){T||(T=i.get([jv,xT.threadId])||0),T+=z,y||(y=setTimeout(()=>{y=null,i.rootStore.status==="open"&&i.put([jv,xT.threadId],T)},50))}a(Hn,"recordDeletion");function JT(){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+oee).unref())}a(JT,"enqueueDeletionCleanup");function XT(){G=u?.addDeleteRemovalCallback(s,z=>{let p=i.getEntry(z);p?.value===null&&i.remove(z,p.version),Hn(-1)})}a(XT,"addDeleteRemoval");function wB(){(0,wi.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){Ci.error("Error in evicting old records",z)}},iee).unref()}a(wB,"runRecordExpirationEviction")}function GT(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 tB(){}function aee(e){iB=e}function Wd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!cee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Qd.autoCast)(e)}function rB(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,sB,xT,Xc,tu,Ii,jc,eu,Ci,nB,wi,Qd,iB,see,nee,iee,Zv,jv,Zt,eB,j_e,Jc,oee,cee,ld=pe(()=>{zr=D(g()),Ho=require("lmdb"),Zc=D(Ht()),sB=require("lodash"),xT=require("worker_threads");Xr();Yv();Xc=D(xe()),tu=D(Q());Xv();Ii=D(W()),jc=D(Fs()),eu=D(Fr());de();Lu();Ci=D(F());Uu();Vn();nB=require("ordered-binary"),wi=D(_t());Qc();Qd=D(x()),see=1e8,nee=1e7,iee=6e4;tu.initSync();Zv=tu.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),jv=Symbol.for("deletions"),Zt=Symbol.for("version"),eB=Symbol.for("incremental-update"),j_e=Symbol("source-resource"),Jc={isNotification:!0,allowInvalidated:!0},oee=(0,Qd.convertToMS)(tu.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(zd,"makeTable");a(GT,"attributesAsObject");a(tB,"noop");a(aee,"setServerUtilities");cee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Wd,"coerceType");a(rB,"isDescendantId")});var Ne={};je(Ne,{database:()=>Ha,databases:()=>ve,dropDatabase:()=>Vh,dropTableMeta:()=>fee,getDatabases:()=>xr,getTables:()=>uee,onUpdatedTable:()=>_T,readMetaDb:()=>ru,resetDatabases:()=>lee,table:()=>rt,tables:()=>nr});function uee(){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)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,hr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&ru((0,Me.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,Go.getBaseSchemaPath)())){for(let r of(0,hr.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,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);ru((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,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&ru((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,hr.existsSync)(u)&&ru(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[eE]}}return xo=null,ve}}function lee(){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 ru(e,t,r=$T,s,n){let i=new kT.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,Jd.open)(i),vn.set(e,o));let c=new Ui.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(qo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,Jd.open)(i),l.isLegacy=!0):l=BT(o));let _=uB(r),d=_[eE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,S]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),S===""?S=h.name:S||(S=T,T=t,h.name||(h.name=S,h.indexed=!h.is_hash_attribute)),d?.add(T);let y=E.get(T);y||E.set(T,y={attributes:[]}),(S==null||h.is_hash_attribute)&&(y.primary=h),S!=null&&y.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:S}=h;if(!S){for(let X of T)if(X.is_hash_attribute||X.isPrimaryKey){S=X;break}if(!S)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let y=_[f],O={},H=[],Y,A,w=typeof S.audit=="boolean"?S.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),G=S.trackDeletes,k=S.expiration;if(y)O=y.indices,H=y.attributes,y.schemaVersion++;else{Y=S.tableId,Y?Y>=(u.get(Fo)||0)&&u.putSync(Fo,Y+1):(S.tableId=Y=u.get(Fo),Y||(Y=1),u.putSync(Fo,Y+1),u.putSync(S.key,S));let X=new Ui.default(!S.is_hash_attribute,S.is_hash_attribute);Le.trace(`openDB ${S.key} from ${r}`),A=o.openDB(S.key,X),A.rootStore=o,A.tableId=Y}for(let X of T){X.attribute=X.name;try{if(!X.is_hash_attribute&&(X.indexed||X.attribute&&!X.name)){if(!O[X.name]){let ct=new Ui.default(!X.is_hash_attribute,X.is_hash_attribute);Le.trace(`openDB ${X.key} from ${r}`),O[X.name]=o.openDB(X.key,ct)}let ge=H.find(ct=>ct.name===X.name);ge?H.splice(H.indexOf(ge),1,X):H.push(X)}}catch(ge){Le.error("Error trying to update attribute",X,H,O,ge)}}if(!y){Le.trace(`creating table class ${f}`,Object.keys(_)),y=lB(_,f,zd({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 YT)X(y)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function uB(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[eE]=r,xo.set(e,r)}return t}function lB(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=$T),xr();let r=uB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,hr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=vn.get(i);if(!o){let c=new kT.default(i,!1);o=(0,Jd.open)(c),vn.set(i,o)}return o}async function Vh(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 oB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[eE]}delete ve[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=$T);let u=Ha({database:t,table:e}),l=ve[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Ui.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=BT(u)),E=s.find(X=>X.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let w=new Ui.default(!1,!0),G=e+"/";Le.trace(`openDB ${G} from ${t}`);let k=u.openDB(G,w);k.rootStore=u,Le.trace(`openDB ${qo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(qo.INTERNAL_DBIS_NAME,T),k.tableId=h.get(Fo),k.tableId||(k.tableId=1),h.putSync(Fo,k.tableId+1),E.tableId=k.tableId,_=lB(l,e,zd({primaryStore:k,auditStore:A,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:k.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,S=!0,Y(),h.put(G,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${qo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(qo.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:A,value:w}of h.getRange({start:!0})){let[G,k]=A.toString().split("/");if(k===""&&(k=w.name),k){if(G!==e)continue}else k=G;if(!s.find(ge=>ge.name===k)?.indexed&&w.indexed&&!w.isPrimaryKey){Y(),S=!0,h.remove(A);let ge=_.indices[G];ge&&O.push(ge)}}Le.trace(`${e} table loading, comparing atributes`);let H=[];try{for(let A of s||[]){let w=e+"/"+(A.name||"");Object.defineProperty(A,"key",{value:w,configurable:!0});let G=h.get(w);if(A.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),G||(w=e+"/",G=h.get(w));let X=Object.assign({},G,{audit:!0});S=!0,Y(),h.put(w,X)}continue}G?.attribute&&!G.name&&(G.indexed=!0);let k=!G||G.type!==A.type||G.indexed!==A.indexed||JSON.stringify(G.attributes)!==JSON.stringify(A.attributes)||JSON.stringify(G.elements)!==JSON.stringify(A.elements);if(A.indexed){let X=new Ui.default(!0,!1);Le.trace(`openDB ${w} from ${t}`);let ge=u.openDB(w,X);(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<su.workerData?.restartNumber)&&(S=!0,Y(),G=h.get(w),(k||G.indexingPID&&G.indexingPID!==process.pid||G.restartNumber<su.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=Eee(_,H,O):S&&Xd.signalSchemaChange(new Zd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,S)for(let A of YT)A(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function Y(){y||u.transactionSync(()=>({then(A){y=A}}))}a(Y,"startTxn")}async function Eee(e,t,r){try{let s=e.schemaVersion;await Xd.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,aB.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)}),su.workerData&&su.workerData.restartNumber!==cB.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>_ee?await n:u>dee&&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 Xd.signalSchemaChange(new Zd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function fee({table:e,database:t}){let r=Ha({database:t,table:e}),s=[],n=r.dbisDb;for(let i of n.getKeys({start:e+"/",end:e+"0"}))s.push(n.remove(i));return Promise.all(s)}function _T(e){YT.push(e)}var yt,qo,Jd,Me,hr,Go,Ui,kT,jt,oB,VT,aB,Xd,Zd,su,Le,cB,$T,eE,nr,ve,Fo,YT,jd,vn,xo,_ee,dee,de=pe(()=>{yt=D(Q()),qo=D(xe()),Jd=require("lmdb"),Me=require("path"),hr=require("fs"),Go=D(we());ld();Ui=D(Bu()),kT=D(qu()),jt=D(g()),oB=D(require("fs-extra")),VT=require("../../index"),aB=D(Ht()),Xd=D(Fs()),Zd=D(Fr()),su=require("worker_threads"),Le=D(F()),cB=D(_t());Qc();$T="data",eE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,VT._assignPackageExport)("databases",ve);(0,VT._assignPackageExport)("tables",nr);Fo=Symbol.for("next-table-id"),YT=[],vn=new Map;a(uee,"getTables");a(xr,"getDatabases");a(lee,"resetDatabases");a(ru,"readMetaDb");a(uB,"ensureDB");a(lB,"setTable");a(Ha,"database");a(Vh,"dropDatabase");a(rt,"table");_ee=1e3,dee=10;a(Eee,"runIndexing");a(fee,"dropTableMeta");a(_T,"onUpdatedTable")});var x=m((cde,NB)=>{"use strict";var Bn=require("path"),hB=require("fs-extra"),er=F(),_B=require("fs-extra"),tE=require("os"),hee=require("net"),mee=require("recursive-iterator"),Ge=g(),See=UR(),dB=require("papaparse"),rE=require("moment"),{inspect:pee}=require("util"),EB=require("is-number"),ade=require("lodash"),Tee=require("minimist"),Ree=require("https"),gee=require("http"),{hdb_errors:sE}=W(),Aee=/^((\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)))$/,mB=require("util").promisify(setTimeout),Oee=100,Nee=5,bee="",yee=4,fB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};NB.exports={isEmpty:mr,isEmptyOrZeroLength:As,arrayHasEmptyValues:Cee,arrayHasEmptyOrZeroLengthValues:Uee,buildFolderPath:Dee,isBoolean:SB,errorizeMessage:Iee,stripFileExtension:Mee,autoCast:Pee,autoCastJSON:pB,autoCastJSONDeep:WT,removeDir:vee,compareVersions:Bee,isCompatibleDataVersion:Hee,escapeRawValue:qee,unescapeValue:Fee,stringifyProps:Gee,timeoutPromise:kee,isClusterOperation:$ee,getClusterUser:Kee,checkGlobalSchemaTable:Yee,getHomeDir:RB,getPropsFilePath:xee,promisifyPapaParse:Wee,removeBOM:gB,createEventPromise:Qee,checkProcessRunning:zee,checkSchemaTableExist:Jee,checkSchemaExists:AB,checkTableExists:OB,getStartOfTomorrowInSeconds:Xee,getLimitKey:Zee,isObject:Lee,isNotEmptyAndHasValue:wee,autoCasterIsNumberCheck:TB,backtickASTSchemaItems:jee,isPortTaken:Vee,createForkArgs:ete,autoCastBoolean:tte,async_set_timeout:mB,getTableHashAttribute:rte,doesSchemaExist:ste,doesTableExist:nte,stringifyObj:ite,ms_to_time:ote,changeExtension:ate,getEnvCliRootPath:QT,noBootFile:cte,httpRequest:ute,transformReq:lte,convertToMS:_te,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Iee(e){return e instanceof Error?e:new Error(e)}a(Iee,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function wee(e){return!mr(e)&&(e||e===0||e===""||SB(e))}a(wee,"isNotEmptyAndHasValue");function As(e){return mr(e)||e.length===0||e.size===0}a(As,"isEmptyOrZeroLength");function Cee(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(Cee,"arrayHasEmptyValues");function Uee(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}a(Uee,"arrayHasEmptyOrZeroLengthValues");function Dee(...e){try{return e.join(Bn.sep)}catch{console.error(e)}}a(Dee,"buildFolderPath");function SB(e){return mr(e)?!1:e===!0||e===!1}a(SB,"isBoolean");function Lee(e){return mr(e)?!1:typeof e=="object"}a(Lee,"isObject");function Mee(e){return As(e)?bee:e.slice(0,-yee)}a(Mee,"stripFileExtension");function Pee(e){return mr(e)||e===""||typeof e!="string"?e:fB[e]!==void 0?fB[e]:TB(e)===!0?Number(e):Aee.test(e)?new Date(e):e}a(Pee,"autoCast");function pB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(pB,"autoCastJSON");function WT(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=WT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=WT(r);s!==r&&(e[t]=s)}return e}else return pB(e)}a(WT,"autoCastJSONDeep");function TB(e){if(e.startsWith("0.")&&EB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&EB(e))}a(TB,"autoCasterIsNumberCheck");async function vee(e){if(As(e))throw new Error(`Directory path: ${e} does not exist`);try{await _B.emptyDir(e),await _B.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(vee,"removeDir");function Bee(e,t){if(As(e)){er.info("Invalid current version sent as parameter.");return}if(As(t)){er.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(Bee,"compareVersions");function Hee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(Hee,"isCompatibleDataVersion");function qee(e){if(mr(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(qee,"escapeRawValue");function Fee(e){if(mr(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(Fee,"unescapeValue");function Gee(e,t){if(mr(e))return er.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+tE.EOL}!As(s)&&s[0]===";"?r+=" "+s+n+tE.EOL:As(s)||(r+=s+"="+n+tE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Gee,"stringifyProps");function RB(){let e;try{e=tE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(RB,"getHomeDir");function xee(){let e=Bn.join(RB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return hB.existsSync(e)||(e=Bn.join(__dirname,"../","hdb_boot_properties.file")),e}a(xee,"getPropsFilePath");function kee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(kee,"timeoutPromise");async function Vee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=hee.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Vee,"isPortTaken");function $ee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a($ee,"isClusterOperation");function Yee(e,t){let r=(de(),te(Ne)).getDatabases();if(!r[e])return sE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return sE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Yee,"checkGlobalSchemaTable");function Kee(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||As(e)){er.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Kee,"getClusterUser");function Wee(){dB.parsePromise=function(e,t,r){return new Promise(function(s,n){dB.parse(e,{header:!0,transformHeader:gB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Wee,"promisifyPapaParse");function gB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(gB,"removeBOM");function Qee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${pee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(Qee,"createEventPromise");async function zee(e){let t=!0,r=0;do await mB(Oee*r++),(await See.findPs(e)).length>0&&(t=!1);while(t&&r<Nee);if(t)throw new Error(`process ${e} was not started`)}a(zee,"checkProcessRunning");function Jee(e,t){let r=AB(e);if(r)return r;let s=OB(e,t);if(s)return s}a(Jee,"checkSchemaTableExist");function AB(e){let{getDatabases:t}=(de(),te(Ne));if(!t()[e])return sE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(AB,"checkSchemaExists");function OB(e,t){let{getDatabases:r}=(de(),te(Ne));if(!r()[e][t])return sE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(OB,"checkTableExists");function Xee(){let e=rE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=rE().utc().unix();return e-t}a(Xee,"getStartOfTomorrowInSeconds");function Zee(){return rE().utc().format("DD-MM-YYYY")}a(Zee,"getLimitKey");function jee(e){try{let t=new mee(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){er.error("Got an error back ticking items."),er.error(t)}}a(jee,"backtickASTSchemaItems");function ete(e){return[e]}a(ete,"createForkArgs");function tte(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(tte,"autoCastBoolean");function rte(e,t){let{getDatabases:r}=(de(),te(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(rte,"getTableHashAttribute");function ste(e){let{getDatabases:t}=(de(),te(Ne));return t()[e]!==void 0}a(ste,"doesSchemaExist");function nte(e,t){let{getDatabases:r}=(de(),te(Ne));return r()[e]?.[t]!==void 0}a(nte,"doesTableExist");function ite(e){try{return JSON.stringify(e)}catch{return e}}a(ite,"stringifyObj");function ote(e){let t=rE.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(ote,"ms_to_time");function ate(e,t){let r=Bn.basename(e,Bn.extname(e));return Bn.join(Bn.dirname(e),r+t)}a(ate,"changeExtension");function QT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Tee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(QT,"getEnvCliRootPath");var KT;function cte(){if(KT)return KT;let e=QT();QT()&&hB.pathExistsSync(Bn.join(e,Ge.HDB_CONFIG_FILE))&&(KT=!0)}a(cte,"noBootFile");function ute(e,t){let r;return e.protocol==="http:"?r=gee:r=Ree,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(ute,"httpRequest");function lte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(lte,"transformReq");function _te(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(_te,"convertToMS")});var zT=g(),bB=x(),nu=F(),dte=qs(),Ete=ar(),fte=Yp(),{start:hte}=(lT(),te(Ud)),{closeConnection:mte}=Qe(),yB=require("moment"),IB=dd(),{cloneDeep:Ste}=require("lodash"),pte=process.env[zT.PROCESS_NAME_ENV_PROP],Di=pte.substring(4);a(async function(){let t={id:Di,request:void 0},r=0;try{nu.notify("Starting job:",Di),hte(),dte.setSchemaDataToGlobal(),await Ete.setUsersToGlobal();let s=await IB.getJobById(Di);if(bB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Di}`);let{request:n}=s[0];if(bB.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=Ste(n);let i=fte.getOperationFunction(n);nu.trace("Running operation:",n.operation,"for job",Di);let o=await i.job_operation_function(n);nu.trace("Result from job:",Di,o),t.status=zT.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=yB().valueOf(),nu.notify("Successfully completed job:",Di)}catch(s){r=1,nu.error(s),t.status=zT.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=yB().valueOf()}finally{await IB.updateJob(t),await mte(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();
26
+ `+oT.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(x9,"getServerOptions");function k9(){let e=Qr.get(D9),t=Qr.get(L9),r;return e&&(e===!0||e.toUpperCase()===wP)&&(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(k9,"getCORSOpts");function V9(){return Qr.get(v9)}a(V9,"getHeaderTimeoutConfig")});var kP=m((c_e,xP)=>{"use strict";var{decode:$9}=require("msgpackr"),{isMainThread:Y9,parentPort:K9,threadId:o_e}=require("worker_threads"),aT=Qe(),Bo=Be(),W9=A(),Yc=x(),DP=Q(),PP=A();dt();var Q9=Fs(),{recordAction:z9,recordActionBinary:J9}=(oi(),re(vl)),{publishToStream:X9}=aT,a_e={durable:Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Bo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},Z9,j9,e7,vP,BP;xP.exports={initialize:HP,workQueueListener:GP,setSubscription:t7,setIgnoreOrigin:s7,getDatabaseSubscriptions:r7};async function HP(){BP=!0,Yc.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await aT.getNATSReferences();Z9=e,j9=e.info.server_name,e7=t,vP=r}a(HP,"initialize");var Ud=new Map;function t7(e,t,r){let s=Ud.get(e);s||Ud.set(e,s=new Map),s.set(t,r),BP||HP().then(GP)}a(t7,"setSubscription");function r7(){return Ud}a(r7,"getDatabaseSubscriptions");var qP;function s7(e){qP=e}a(s7,"setIgnoreOrigin");var FP=100,LP=new Array(FP),Cd=0;async function GP(){let t=await(await vP.consumers.get(Bo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Bo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await LP[Cd],LP[Cd]=n7(r).catch(s=>{Yc.error(s)}),++Cd>=FP&&(Cd=0)}a(GP,"workQueueListener");Y9||K9.on("message",async e=>{let{type:t}=e;t===PP.ITC_EVENT_TYPES.SHUTDOWN&&aT.closeConnection()});async function n7(e){let t=$9(e.data);z9(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Bo.MSG_HEADERS.ORIGIN)===DP.get(W9.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!qP;if(J9(n,"echo",e.subject,t.operation,"ingest"),n){e.ack();return}try{let{operation:i,schema:o,next:c,table:u,records:l,hash_values:_,__origin:d}=t;Yc.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),Yc.trace(`messageProcessor nats msg id: ${e.headers.get(Bo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=Ud.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:MP(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,k)=>({type:MP(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})}DP.get(PP.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&X9(e.subject.split(".").slice(0,-1).join("."),Q9.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){Yc.error(i)}e.ack()}a(n7,"messageProcessor");function MP(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(MP,"convertOperation")});var Pd={};et(Pd,{disableNATS:()=>o7,setNATSReplicator:()=>cT,start:()=>i7});function i7(){Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&c7()}function o7(e=!0){WP=e}function c7(){if(WP)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];cT(n,r,i)}}fT((r,s)=>{cT(r.tableName,r.databaseName,r),s&&zP(r)}),!VP&&(VP=!0)}function cT(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){zP(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,$P.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<a7}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 Dd(i.transaction,i)),o.user=i.user):o=QP),o}a(n,"getNATSTransaction")}function zP(e){let t=Ld.default.get(Md.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,dT.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 lT,_T,dT,$P,YP,Ld,Md,KP,WP,a7,QP,VP,Dd,uT,ET=Se(()=>{de();Zr();lT=C(Qe()),_T=C(Be()),dT=C(Fs());aa();$P=C(kP()),YP=C(Ht()),Ld=C(Q()),Md=C(A()),KP=C(x());a(i7,"start");a(o7,"disableNATS");a7=2;a(c7,"assignReplicationSource");a(cT,"setNATSReplicator");a(zP,"publishSchema");Dd=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=Ld.default.get(Md.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||(KP.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,lT.publishToStream)(`${_T.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,dT.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},uT=class extends Dd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,YP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};QP=new uT});async function XP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await hT.getResource(e,{});n=new ST(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await hT.get(e);i&&i.delete()}n=new Bd(e,t)}return n}function mT(){return vd++,vd>65500&&(vd=1),vd}var JP,Kc,hT,vd,Bd,ST,ZP=Se(()=>{de();gc();JP=C(Ht()),Kc=C(x());$n();hT=nt({database:"system",table:"hdb_durable_session",attributes:[{name:"id",isPrimaryKey:!0},{name:"subscriptions",type:"array",elements:{attributes:[{name:"topic"},{name:"qos"},{name:"startTime"},{name:"acks"}]}}]});a(XP,"getSession");vd=1;a(mT,"getNextMessageId");Bd=class{static{a(this,"SubscriptionsSession")}listener;sessionId;user;subscriptions=[];awaitingAcks;sessionWasPresent;constructor(t,r){this.sessionId=t,this.user=r}async addSubscription(t,r,s){let{topic:n,omitCurrent:i,startTime:o}=t,c=n.indexOf("?"),u,l;if(c>-1?(u=n.slice(c),l=n.slice(0,c)):l=n,!l)throw new Error("No topic provided");let _=!1,d;if((l.endsWith("+")||l.endsWith("#"))&&(_=!0,l.endsWith("+")&&(d=!0),l=l.slice(0,l.length-1)),l.indexOf(".")>-1)throw new Error("Dots are not allowed in topic names");if(l.indexOf("#")>-1||l.indexOf("+")>-1)throw new Error("Only trailing wildcards are supported");let E=this.subscriptions.find(O=>O.topic===n);E&&(E.end(),this.subscriptions.splice(this.subscriptions.indexOf(E),1));let f={search:u,user:this.user,startTime:o,omitCurrent:i,isCollection:_,shallowWildcard:d,url:""},h=wn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let T=h.path,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)):$=mT();let U=k.id;Array.isArray(U)&&(U=po(U)),U==null&&(U=""),this.listener(T+"/"+U,k.value,$,t)}catch($){(0,Kc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return mT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=wn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ye(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},ST=class extends Bd{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=mT();return this.awaitingAcks.set(r,{topic:t.topic,timestamp:t.timestamp}),r}acknowledge(t){let r=this.awaitingAcks.get(t);this.awaitingAcks.delete(t);let s=r.topic;for(let[,n]of this.awaitingAcks)if(n.topic===s&&n.timestamp<r.timestamp){for(let i of this.sessionRecord.subscriptions)if(i.topic===s){i.acks||(i.acks=[]),i.acks.push(r.timestamp),(0,Kc.trace)("Received ack",s,r.timestamp),this.sessionRecord.update();return}}for(let n of this.sessionRecord.subscriptions)n.topic===s&&(n.startTime=r.timestamp);this.sessionRecord.update()}async addSubscription(t,r){await this.resumeSubscription(t,r);let{qos:s,startTime:n}=t;return s>0&&!n&&(this.sessionRecord.subscriptions=this.subscriptions.map(i=>{let o=i.startTime;return o||(o=i.startTime=(0,JP.getNextMonotonicTime)()),(0,Kc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),hT.put(this.sessionRecord)),t.qos}}});var RT={};et(RT,{start:()=>l7});async function l7({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:_}=tv(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,sn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;u7&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,rv.getSuperUser)());let{onMessage:u,onClose:l}=tv(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,sn.info)("Socket error",_)})},{port:t,securePort:s})}function tv(e,t,r,s,n){ev||(ev=!0,om(_=>{_.push({metric:"mqtt-connections",connections:pT})})),pT++;let i,o={protocolVersion:4},c=(0,Hd.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){pT--,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 rt.auth(_.username,_.password.toString()),(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&jP.notify({username:s.username,status:nn.AUTH_AUDIT_STATUS.SUCCESS,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,TT.get)(nn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&jP.error({username:s.username,status:nn.AUTH_AUDIT_STATUS.FAILURE,type:nn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=XP({user:s,..._}),i=await i}catch(O){return(0,sn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,k,$,U)=>{try{let b=O.indexOf("/",1),P=b>0?O.slice(0,b):O;d({cmd:"publish",topic:O,payload:E(k),messageId:$||Math.floor(Math.random()*1e8),qos:U.qos},P)}catch(b){(0,sn.error)(b),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let k;try{k=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,sn.error)($),k=128}f.push(k)}await i.committed,d({cmd:"suback",granted:f,messageId:_.messageId});break;case"unsubscribe":for(let O of _.unsubscriptions)i.removeSubscription(O);d({cmd:"unsuback",messageId:_.messageId});break;case"pubrel":d({cmd:"pubcomp",messageId:_.messageId,reasonCode:0});return;case"publish":let h=_.qos===2?"pubrec":"puback",T=e.deserialize||(e.deserialize=yo(r?.headers["content-type"])),p=_.payload?.length>0?T(_.payload):void 0,R;try{R=await i.publish(_,p)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:R===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let T=(0,Hd.generate)(f,o);t(T),ls(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Qs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Hd,rv,TT,nn,sn,jP,u7,ev,pT,sv=Se(()=>{Hd=require("mqtt-packet");ZP();rv=C(ar());go();oi();Jr();TT=C(Q()),nn=C(A()),sn=C(x()),jP=(0,sn.loggerWithTag)("auth-event"),u7=!0;a(l7,"start");pT=0;a(tv,"onSocket")});var Ev={};et(Ev,{loadComponent:()=>qd,loadComponentDirectories:()=>dv});function dv(e,t){t&&(AT=t),e&&(OT=e);let r=[];if((0,Rs.existsSync)(gT)){let n=(0,Rs.readdirSync)(gT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Mr.join)(gT,o);r.push(qd(c,AT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(qd(s,AT,s)),Promise.all(r).then(()=>{_v=!0})}async function qd(e,t,r,s,n){if(!iv.has(e)){iv.set(e,!0),n&&(OT=n);try{let i,o=(0,Mr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,Rs.existsSync)(o)?i=(0,ov.parseDocument)((0,Rs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=f7;let c=[];for(let u in i){let l=i[u];if(!l)continue;let _,d=l.package;if(d){let E=e,f;for(;!(0,Rs.existsSync)(f=(0,Mr.join)(E,"node_modules",u));)if(E=(0,Mr.dirname)(E),E.length<(0,lv.getHdbBasePath)().length){f=null;break}if(f)_=await qd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=E7[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,nt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Wc.isMainThread&&(_=await _.startOnMainThread?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!nv.includes(p)){nv.push(p);let R=NT.get(bT.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);NP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:rt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),OT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,uv.handleHDBError)("Can not reference parent directories");let p=(0,Mr.join)(e,l.files);for(let R of await(0,av.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 d7(O);Wc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Wc.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 Qc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Qc(E),null,!0)}}if(Wc.isMainThread&&!_v&&(0,cv.watchDir)(e,async()=>dv()),i.extensionModule)return await qu((0,Mr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Qc(i))}}}var Rs,Mr,Wc,ov,NT,bT,av,cv,uv,lv,_7,d7,gT,OT,_v,AT,E7,f7,nv,iv,Qc,fv=Se(()=>{Rs=require("fs"),Mr=require("path"),Wc=require("worker_threads"),ov=require("yaml"),NT=C(Q()),bT=C(A());xg();Yg();Kg();DL();hP();TP();av=C(require("fast-glob")),cv=C(dt());YE();Jr();uv=C(W());Zr();de();bP();lv=C(Q()),_7=C(UP());v_();ET();sv();({readFile:d7}=Rs.promises),gT=NT.get(bT.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),OT=new Map;a(dv,"loadComponentDirectories");E7={REST:Ap,graphqlSchema:$E,jsResource:WE,fastifyRoutes:tT,login:zE,static:rT,operationsApi:_7,customFunctions:{},clustering:Pd,authentication:Ac,mqtt:RT},f7={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},nv=[],iv=new Map;a(qd,"loadComponent");Qc=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 Rv=m((B_e,Tv)=>{"use strict";var xd=require("fs-extra"),yT=require("path"),Fd=x(),hv=V(),Gd=A(),pv=Q(),h7=Rr();Tv.exports=m7;async function m7(){let e=S7(),t=pv.get(Gd.CONFIG_PARAMS.ROOTPATH),r=yT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+Gd.PACKAGE_ROOT}},n=yT.join(t,"node_modules");await xd.ensureDir(n);let i,o=!0,c=!1;try{i=await xd.readJson(r)}catch(u){if(hv.isEmptyOrZeroLength(e))return;if(u.code!==Gd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!hv.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await mv(l);s.dependencies[u]=_+l}if(!o){Fd.notify("Installing components"),await Sv(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await mv(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(Fd.notify("Removing component",u),c=!0);c&&(Fd.notify("Updating components."),await Sv(r,s))}a(m7,"installComponents");function S7(){let e=h7.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(S7,"getComponentsConfig");async function mv(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":yT.extname(e)||await xd.pathExists(e)?"file:":"github:"}a(mv,"getPkgPrefix");async function Sv(e,t){Fd.trace("npm installing components package.json",t),await xd.writeFile(e,JSON.stringify(t,null," ")),await V_().installAllRootModules(pv.get(Gd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(Sv,"installPackages")});var Ov=m((q_e,Av)=>{var{isMainThread:gv}=require("worker_threads"),{getTables:p7}=(de(),re(Ne)),{loadComponentDirectories:T7,loadComponent:R7}=(fv(),re(Ev)),{resetResources:g7}=(gc(),re(aD)),A7=Rv(),O7=Rr(),{dirname:N7}=require("path"),{getConnection:b7}=Qe(),y7=Q(),I7=A(),IT=new Map;async function w7(e=!1){!gv&&y7.get(I7.CONFIG_PARAMS.CLUSTERING_ENABLED)&&b7(),gv&&await A7();let t=g7();p7(),t.isWorker=e,await R7(N7(O7.getConfigFilePath()),t,"hdb",!0,IT),await T7(IT,t);let r=[];for(let[s]of IT)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(w7,"loadRootComponents");Av.exports.loadRootComponents=w7});var dt=m((x_e,Pn)=>{"use strict";var{Worker:C7,MessageChannel:U7,parentPort:gs,isMainThread:LT,threadId:D7,workerData:zc}=require("worker_threads"),{PACKAGE_ROOT:L7}=A(),{join:yv,isAbsolute:M7,extname:Vd}=require("path"),{server:P7}=(Jr(),re(Ru)),{watch:v7,readdir:B7}=require("fs/promises"),{totalmem:Nv}=require("os"),MT=A(),bi=x(),G_e=A(),{randomBytes:H7}=require("crypto"),q7=1024*1024,Mn=[],Ln=[],F7=50,Iv=1e4,G7="restart",wv="request_thread_info",Cv="resource_report",Uv="thread_info",Dv="added-port",x7="ack",wT;Pn.exports={startWorker:CT,restartWorkers:PT,shutdownWorkers:Y7,workers:Mn,setMonitorListener:j7,onMessageFromWorkers:K7,onMessageByType:W7,broadcast:Q7,broadcastWithAcknowledgement:J7,setChildListenerByType:$7,getWorkerIndex:Mv,getTicketKeys:Pv,setMainIsWorker:k7,restartNumber:zc?.restartNumber||1};var Lv;function Mv(){return zc?zc.workerIndex:Lv?0:void 0}a(Mv,"getWorkerIndex");function k7(e){Lv=e}a(k7,"setMainIsWorker");var kd;function Pv(){return kd||(kd=LT?H7(48):zc.ticketKeys,kd)}a(Pv,"getTicketKeys");Object.defineProperty(P7,"workerIndex",{get(){return Mv()}});var vv={[wv](e,t){X7(t)},[Cv](e,t){Z7(t,e)}};function CT(e,t={}){let r=process.constrainedMemory?.()||Nv();r=Math.min(r,Nv());let s=Math.max(Math.floor(r/q7/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of Ln){let{port1:u,port2:l}=new U7;c.postMessage({type:Dv,port:u},[u]),i.push(l)}Vd(e)||(e+=".js");let o=new C7(M7(e)?e:yv(L7,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Pn.exports.restartNumber,ticketKeys:Pv()},transferList:i},t));return Yd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{CT(e,t)},o.on("error",c=>{console.error("Worker error:",c),bi.error("Worker error:",c)}),o.on("exit",c=>{Mn.splice(Mn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<F7?(t.unexpectedRestarts=o.unexpectedRestarts+1,CT(e,t)):bi.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{vv[c.type]?.(c,o)}),Mn.push(o),tee(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(CT,"startWorker");var V7=[MT.THREAD_TYPES.HTTP];async function PT(e=null,t=2,r=!0){if(LT){if(r){let{loadRootComponents:n}=Ov();await n()}Pn.exports.restartNumber++,t<1&&(t=t*Mn.length);let s=[];for(let n of Mn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Pn.exports.restartNumber,type:MT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=V7.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 gs.postMessage({type:G7,workerType:e})}a(PT,"restartWorkers");function $7(e,t){vv[e]=t}a($7,"setChildListenerByType");function Y7(e){return PT(e,1/0,!1)}a(Y7,"shutdownWorkers");var Bv=[];function K7(e){Bv.push(e)}a(K7,"onMessageFromWorkers");var UT=new Map;function W7(e,t){let r=UT.get(e);r||UT.set(e,r=[]),r.push(t)}a(W7,"onMessageByType");function Q7(e){for(let t of Ln)try{t.postMessage(e)}catch(r){bi.error("Unable to send message to worker",r)}}a(Q7,"broadcast");var $d=new Map,z7=1;function J7(e){return new Promise(t=>{let r=0;for(let s of Ln)try{let n=z7++,i=a(()=>{$d.delete(n),--r===0&&t(),s!==gs&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,$d.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of $d)o.port===s&&o()})),s.postMessage(e),r++}catch(n){bi.error("Unable to send message to worker",n)}r===0&&t()})}a(J7,"broadcastWithAcknowledgement");function X7(e){e.postMessage({type:Uv,workers:Hv()})}a(X7,"sendThreadInfo");function Hv(){let e=Date.now();return Mn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(Hv,"getChildWorkerInfo");function Z7(e,t){e.resources=t,e.resources.updated=Date.now()}a(Z7,"recordResourceReport");var DT;function j7(e){DT=e}a(j7,"setMonitorListener");var eee=1e3,bv=!1;function tee(){bv||(bv=!0,setInterval(()=>{for(let e of Mn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}DT&&DT()},eee).unref())}a(tee,"startMonitoring");var ree=1e3;if(gs){Yd(gs);for(let e of zc.addPorts)Yd(e);setInterval(()=>{let e=process.memoryUsage();gs.postMessage({type:Cv,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},ree).unref(),wT=a(()=>new Promise((e,t)=>{gs.on("message",r),gs.postMessage({type:wv});function r(s){s.type===Uv&&(gs.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else wT=Hv;Pn.exports.getThreadInfo=wT;function Yd(e,t){Ln.push(e),e.on("message",r=>{if(r.type===Dv)Yd(r.port);else if(r.type===x7){let s=$d.get(r.id);s&&s()}else{for(let n of Bv)n(r,e);let s=UT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){bi.error(i)}}}).on("close",()=>{Ln.splice(Ln.indexOf(e),1)}).on("exit",()=>{Ln.splice(Ln.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Yd,"addPort");if(LT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await B7(s,{withFileTypes:!0}))i.isDirectory()&&r(yv(s,i.name));for await(let{filename:i}of v7(s,{persistent:!1}))(Vd(i)===".ts"||Vd(i)===".js"||Vd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await PT(),bi.info("Reloaded HarperDB components")},100))},"watch_dir");Pn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else gs.on("message",async e=>{let{type:t}=e;t===MT.ITC_EVENT_TYPES.SHUTDOWN&&(Pn.exports.restartNumber=e.restartNumber,gs.unref(),setTimeout(()=>{bi.warn("Thread did not voluntarily terminate",D7),process.exit(0)},Iv).unref())})});function FT(e){let t=e.auditStore=e.openDB(kv.AUDIT_STORE_NAME,nee);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,$v.getWorkerIndex)()===0&&e.on("aftercommit",()=>{BT||(BT=setTimeout(()=>{if(BT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-qv,0]})){if((n[0]&15)===qT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},qv/10).unref())}),t}function Qd(e,t,r){let s=Wv[r.type],n=3;if(t?t.length>80?(s|=Kd,n=(0,on.writeKey)(t,As,e?14:6),vT.setUint16(2,n)):(n=(0,on.writeKey)(t,As,e?11:3),As[1]=n):As[1]=0,e){s|=Kv;let i=s&Kd?6:3;vT.setFloat64(i,e),t||(n=i+8)}return As[0]=s,s&Kd?vT.setUint16(4,0):As[2]=0,r.value?Buffer.concat([As.slice(0,n),r.value]):As.subarray(0,n)}function vn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Kd,i=n?6:3,o;r&Kv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&HT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:Wv[r&7],value:u,lastVersion:o,get user(){return c?(0,on.readKey)(e,i,c):void 0}}}var on,Wd,kv,Vv,$v,Yv,As,vT,see,nee,qv,BT,HT,Fv,qT,Gv,xv,Kd,Kv,Wv,Jc=Se(()=>{on=require("ordered-binary"),Wd=C(Q()),kv=C(xe()),Vv=C(A()),$v=C(dt()),Yv=C(V());(0,Wd.initSync)();As=Buffer.alloc(1024),vT=new DataView(As.buffer,As.byteOffset,1024),see={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,on.writeKey)(e[2],t,r+12)}else return(0,on.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,on.readKey)(e,t+12,r)]}else return(0,on.readKey)(e,t,r)}},nee={encoding:"binary",keyEncoder:see},qv=(0,Yv.convertToMS)((0,Wd.get)(Vv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,BT=null;a(FT,"openAuditStore");HT=16,Fv=1,qT=2,Gv=3,xv=4,Kd=128,Kv=64,Wv={put:Fv|HT,[Fv]:"put",delete:qT,[qT]:"delete",message:Gv|HT,[Gv]:"message",invalidate:xv,[xv]:"invalidate"};a(Qd,"createAuditEntry");a(vn,"readAuditEntry")});var GT,yi,iee,Xc,zd,Qv=Se(()=>{GT=C(Ht());Jc();yi=Symbol("completion"),iee=100,Xc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,GT.getNextMonotonicTime)(),r=!0,s=0){this.resetReadSnapshot();let n,i=[],o=0,c;this.hasWrittenTime=!1;let u=a(_=>{let d=_.commit(t,s);if(d&&(d[yi]&&(i||(i=[]),i.push(d[yi])),c=_.store,this.auditStore)){d.user=this.username,d.lastVersion=_.lastVersion,d.newTxnTime&&!this.hasWrittenTime&&(t=d.newTxnTime),this.hasWrittenTime=!0;let E=[t,_.store.tableId,_.key];_.invalidated&&(E.invalidated=!0),this.auditStore.put(E,Qd(_.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<iee>>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=[]}},zd=class extends Xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,GT.getNextMonotonicTime)())}getReadTxn(){}}});function Zv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;qo||((0,Ii.onMessageByType)(Jv,d=>{let E=d.auditIds;kT(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(Xv,d=>{(0,Os.trace)("confirming to proceed with txn",d.txnId)}),qo=Object.create(null));let c=qo[i]||(qo[i]=[]);c.auditStore=e.auditStore;let u=c[o];u||(u=c[o]=new Map,u.envs=c,u.tableId=o,u.store=e.primaryStore),t=po(t);let l=new xT(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 kT(e,t,r,s){if(!qo)return;let n=qo[e];if(n){if(Ho&&Ho+1!==r){(0,Os.trace)("Waiting to ensure latest txn id",Ho,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c);if(Ho+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:Xv,txnId:r});for(let[o,c]of Jd)o<r&&((0,Os.trace)("Txn",r,"waiting for txn",o),await c)}Jd.delete(r),(0,Os.trace)("Proceeding with txn id",r),Ho=r-1,kT(e,t,r,s)})();return Jd.set(r,i),i}(0,Os.trace)("Notifying with txn id",r,s),Ho=r;try{n.auditStore.resetReadTxn()}catch(i){throw i.message+=" in "+e,i}e:for(let i of t){let[o,c,u]=i,l=n[c];if(!l)continue;(0,zv.writeKey)(i,aee,0);let _=i[3];_&&(i.length=3);let d,E=po(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,Os.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=vn(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,Os.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 jv(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&oee)continue;let _;i.meta&&i.meta.store===t&&(_=i.meta.key)&&(typeof _[2]=="symbol"&&(_[2]=null),_.invalidated&&(_[3]=!0),l.push(_))}while(i!=o&&(i=i.next));l.length!==0&&((0,Ii.broadcast)({type:Jv,path:n,auditIds:l,txnId:c,start:u}),kT(n,l,c,!0))})}}var Os,Ii,zv,Jv,Xv,oee,qo,aee,xT,Ho,Jd,eB=Se(()=>{Os=C(x()),Ii=C(dt()),zv=require("ordered-binary");aa();gc();Jc();Jv="transaction",Xv="transaction-await",oee=67108864,aee=Buffer.alloc(4096);a(Zv,"addSubscription");xT=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"}}},Jd=new Map;a(kT,"notifyFromTransactionData");a(jv,"listenToCommits")});var qp={};et(qp,{coerceType:()=>Xd,makeTable:()=>jd,setServerUtilities:()=>dee});function jd(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=[]),jv(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&&eR();class q extends mt{static name=n;static primaryStore=i;static auditStore=u;static primaryKey=t;static tableName=n;static indices=r;static audit=E;static databasePath=o;static databaseName=c;static attributes=h;static expirationTimer;static createdTimeProperty=$;static updatedTimeProperty=U;static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,F=w.table?ve[c][w.table]:q;if(c===zr.SYSTEM_SCHEMA_NAME&&(w.table===zr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===zr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[F.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await F.getResource(w.id,w,Zc);switch(w.type){case"put":return L._writeUpdate(v,Zc);case"delete":return L._writeDelete(Zc);case"publish":return L._writePublish(v,Zc);case"invalidate":return L.invalidate(Zc);default:Ui.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,Ci.getWorkerIndex)()):(0,Ci.getWorkerIndex)()===0,F=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(F)for await(let L of F)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(nt({table:n,database:c,attributes:J,origin:"cluster"}),tu.signalSchemaChange(new ru.SchemaEventMsg(process.pid,zr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&tu.signalUserChange(new ru.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,F,G={transaction:w?.getReadTxn()},X;return au(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?F(Y):(y[ce]=J?.value,y[Zt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,F=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,Ci.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&q.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,eR(),q.audit=!0}static coerceId(S){return S===""?null:Xd(S,k)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(q.tableName+"/"+S),r[S].drop();_.remove(q.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));tu.signalSchemaChange(new ru.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=VT(y,"read");N.select=w.filter(F=>v[F])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=VT(w,"update");for(let F in N)if(!v[F])return!1;if(D)for(let F of w){let L=F.attribute_name;!F.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=VT(y,"insert");for(let v in N)if(!w[v])return!1}else return!0}}static allowDelete(S){if(!S)return!1;let N=S.role.permission;if(N.super_user||N[n]?.delete)return!0}update(S,N){if(!this._txnForRequest())throw new Error("Can not update a table resource outside of a transaction");if(S===!1)return this;let y;if(typeof S=="object"&&S){if(N)for(let w in this[ce])S[w]===void 0&&(S[w]=void 0);y=this[ht],y&&(S=Object.assign(y,S)),this[ht]=y=S}return!this[ce]&&t&&!(y||(y=this[ht]))?.[t]&&(y||(y=this[ht]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=q.Source,F,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(F=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[yi]:F}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,uB.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,F=this[ae];y||(this[ce]={}),D.addWrite({key:F,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(F);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ua(S);else{if(S[sB]&&(w=!Uu(S),w))return;t&&S[t]!==F&&(S[t]=F),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ua(S);let Y=q.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(F,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(Ui.trace("Checking timestamp for put",F,this[Zt]>L,this[Zt],L),this[Zt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Fo.asBinary)(J),L),je(this[ae],y,S),y===null&&!G&&qn(-1),{type:E&&"put",value:J,[yi]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,commit:(v,F)=>{let L=this[ce];if(F){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=q.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Zt]>v))return je(this[ae],L),Ui.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||jT(),F||qn(1)):i.remove(this[ae]),{type:E&&"delete",[yi]: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(an=>an.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,wi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Xd(De,j)):Xd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,aB.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===jc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let an=r[De];Y.estimated_count=an?an.getValuesCount(Y[1]??Y.value):1/0}}else j===jc.SEARCH_TYPES.CONTAINS||j===jc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===jc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=uee:Y.estimated_count=cee}return Y.estimated_count}));let v=N.getReadTxn();v.use();let F=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:F?.length<4}:{start:!1,transaction:v,lazy:F?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Fo.SKIP);else{let Y=HE(L,v,D,q,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(qE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let an=y[De],cE=HE(an,v,D,q,S.allowFullScan);Y=Y.concat(cE)}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,an={transaction:v,lazy:De>0||F?.length<4,alwaysPrefetch:!0};return Y.map(cE=>new Promise(uE=>au(cE,X,an,null,!1,MB=>{let lE=MB?.value;if(!lE)return uE(Fo.SKIP);for(let _E=0;_E<De;_E++)if(!j[_E](lE))return uE(Fo.SKIP);uE(lE)})))}return a(J,"idsToRecords"),G}async subscribe(S){if(!u)throw new Error("Can not subscribe to a table without an audit log");E||nt({table:n,database:c,schemaDefined:l,attributes:h,audit:!0});let N=Zv(q,this[ae]??null,function(v,F,L){try{this.send({id:v,timestamp:L,...F})}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 wi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:F}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=vn(F,i);(D==null||oB(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:F,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=F;if(F.length>3&&(J=F.slice(2)),X!==s)continue;if(D==null||oB(D,J)){let Y=vn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){Ui.error("Error getting history entry",F,G)}for(let F=v.length;F>0;)N.send(v[--F]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:F,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,cB.MAXIMUM_KEY],versions:!0}))F&&N.send({id:v,timestamp:L,value:F})}else{y&&!w&&(w=0);let v=this[Zt];if(w<v){let F=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=vn(X,i);F.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=F.length;G>0;)N.send(F[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Zt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Zt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(F,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=q.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||jT(),qn(1));let X={type:"message",value:i.encoder.encode(S),[yi]:w};return!D.hasWrittenTime&&this[Zt]>F&&(F=X.newTxnTime=this[Zt]+.001),i.put(y,G??null,F),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new Xc(i,S.user,u)),D}else return new zd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(F=>typeof F=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new wi.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[nB]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new wi.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return nt({table:n,database:c,schemaDefined:l,attributes:N}),q.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Lu(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,F]=D;D.length>3&&(F=D.slice(2)),v===s&&(N=i.remove(F))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,F]=D;if(D.length>3&&(F=D.slice(2)),v!==s)continue;let L=vn(y,i);L.id=F,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],F=u.get(v);if(F){let L=vn(F,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}q.updatedAttributes();let Oe=q.prototype;return Oe[sB]=!0,d&&q.setTTLExpiration(d/1e3),b&&LB(),q;function je(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,F=N?.[y],L=S?.[y];if(F===L&&!v)continue;D=!0;let G=(0,eu.getIndexedValues)(L);if(G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,eu.getIndexedValues)(F),G){tB&&w.prefetch(G.map(X=>({key:X,value:Z})),iB);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(je,"updateIndices");function au(Z,S,N,D,y,w){let v=a(()=>{let F=N.transaction;if(F?.isDone)throw new Error("Invalid read transaction");let L;F&&!F.hasRunLoadRecord&&(L=!0,F.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(F)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,R&&to(Y,"cache-hit",n),Y&&!y&&(D&&(D[nB]=!0),R))return $o(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(au,"loadRecord");function Mi(){P=new Set,(0,Ci.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Mi,"setupCommitListeners");async function $o(Z,S=null,N,D){if(N<0){let L;return P||Mi(),await new Promise(G=>{let X,J=a(()=>{if(L=i.getEntry(Z),!L||L.version>0){if(clearTimeout(X),P.delete(J),typeof L?.value?.__invalidated__=="number")return G($o(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G($o(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},F=D?.responseHeaders;F&&(v.responseHeaders=F);try{let L=performance.now(),G=await q.Source.get(Z,v),X=performance.now()-L;ls(X,"cache-resolution",n),F&&F.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,eu.getNextMonotonicTime)());let j=je(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],Qd(y,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(L){throw i.put(Z,S,N,w),L}}a($o,"getFromSource");function qn(Z){T||(T=i.get([rB,$T.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([rB,$T.threadId],T)},50))}a(qn,"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),qn(-1)}}},q.getRecordCount()*100+_ee).unref())}a(jT,"enqueueDeletionCleanup");function eR(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),qn(-1)})}a(eR,"addDeleteRemoval");function LB(){(0,Ci.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&q.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){Ui.error("Error in evicting old records",Z)}},lee).unref()}a(LB,"runRecordExpirationEviction")}function VT(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 iB(){}function dee(e){uB=e}function Xd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!Eee.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Zd.autoCast)(e)}function oB(e,t){if(e==null)return!0;if(!Array.isArray(t))return e===t;if(Array.isArray(e)){let r=e.length;if(e[r-1]===null&&r--,t.length>=r){for(let s=0;s<r;s++)if(t[s]!==e[s])return!1;return!0}return!1}else if(t[0]===e)return!0}var zr,Fo,eu,aB,$T,jc,su,wi,tu,ru,Ui,cB,Ci,Zd,uB,cee,uee,lee,tB,rB,Zt,sB,lde,nB,Zc,_ee,Eee,Ed=Se(()=>{zr=C(A()),Fo=require("lmdb"),eu=C(Ht()),aB=require("lodash"),$T=require("worker_threads");Zr();Qv();jc=C(xe()),su=C(Q());eB();wi=C(W()),tu=C(xs()),ru=C(Fr());de();Bu();Ui=C(x());Pu();$n();cB=require("ordered-binary"),Ci=C(dt());Jc();Zd=C(V());oi();cee=1e8,uee=1e7,lee=6e4;su.initSync();tB=su.get(zr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),rB=Symbol.for("deletions"),Zt=Symbol.for("version"),sB=Symbol.for("incremental-update"),lde=Symbol("source-resource"),nB=Symbol("load-from-source"),Zc={isNotification:!0,allowInvalidated:!0},_ee=(0,Zd.convertToMS)(su.get(zr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(jd,"makeTable");a(VT,"attributesAsObject");a(iB,"noop");a(dee,"setServerUtilities");Eee=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Xd,"coerceType");a(oB,"isDescendantId")});var Ne={};et(Ne,{database:()=>Fa,databases:()=>ve,dropDatabase:()=>Kh,dropTableMeta:()=>Tee,getDatabases:()=>xr,getTables:()=>fee,onUpdatedTable:()=>fT,readMetaDb:()=>nu,resetDatabases:()=>hee,table:()=>nt,tables:()=>nr});function fee(){return sE||xr(),nr||{}}function xr(){if(sE)return ve;sE=!0,Vo=new Map;let e=(0,yt.getHdbBasePath)()&&(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,hr.existsSync)(e)?e:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,hr.existsSync)(e))for(let r of(0,hr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&nu((0,Me.join)(e,r.name),null,s)}if((0,hr.existsSync)((0,ko.getBaseSchemaPath)())){for(let r of(0,hr.readdirSync)((0,ko.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,ko.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,ko.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,hr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);nu((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,hr.existsSync)(n))for(let o of(0,hr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&nu((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,hr.existsSync)(u)&&nu(u,o,r,null,!0)}}for(let r in ve){let s=Vo.get(r);if(s){let n=ve[r];r.includes("delete")&&Le.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Le.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in nr)delete nr[n];delete nr[nE]}}return Vo=null,ve}}function hee(){sE=!1;for(let[,e]of Bn)e.needsDeletion=!0;xr();for(let[e,t]of Bn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),Bn.delete(e));return ve}function nu(e,t,r=WT,s,n){let i=new YT.default(e,!1);e.includes("delete")&&Le.trace(`reading meta data from ${e}`);try{let o=Bn.get(e);o?o.needsDeletion=!1:(o=(0,eE.open)(i),Bn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Go.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,hr.existsSync)(s)&&(i.path=s,l=(0,eE.open)(i),l.isLegacy=!0):l=FT(o));let _=EB(r),d=_[nE],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),p===""?p=h.name:p||(p=T,T=t,h.name||(h.name=p,h.indexed=!h.is_hash_attribute)),d?.add(T);let R=E.get(T);R||E.set(T,R={attributes:[]}),(p==null||h.is_hash_attribute)&&(R.primary=h),p!=null&&R.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:T,primary:p}=h;if(!p){for(let q of T)if(q.is_hash_attribute||q.isPrimaryKey){p=q;break}if(!p)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(T)}`)}let R=_[f],O={},k=[],$,U,b=typeof p.audit=="boolean"?p.audit:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=p.trackDeletes,z=p.expiration;if(R)O=R.indices,k=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(xo)||0)&&u.putSync(xo,$+1):(p.tableId=$=u.get(xo),$||($=1),u.putSync(xo,$+1),u.putSync(p.key,p));let q=new Di.default(!p.is_hash_attribute,p.is_hash_attribute);Le.trace(`openDB ${p.key} from ${r}`),U=o.openDB(p.key,q),U.rootStore=o,U.tableId=$}for(let q of T){q.attribute=q.name;try{if(!q.is_hash_attribute&&(q.indexed||q.attribute&&!q.name)){if(!O[q.name]){let je=new Di.default(!q.is_hash_attribute,q.is_hash_attribute);Le.trace(`openDB ${q.key} from ${r}`),O[q.name]=o.openDB(q.key,je)}let Oe=k.find(je=>je.name===q.name);Oe?k.splice(k.indexOf(Oe),1,q):k.push(q)}}catch(Oe){Le.error("Error trying to update attribute",q,k,O,Oe)}}if(!R){Le.trace(`creating table class ${f}`,Object.keys(_)),R=fB(_,f,jd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:p.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:T,schemaDefined:p.schemaDefined,dbisDB:u})),R.schemaVersion=1;for(let q of QT)q(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function EB(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=nr:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Vo&&!Vo.has(e)){let r=new Set;t[nE]=r,Vo.set(e,r)}return t}function fB(e,t,r){return e[t]=r,r}function Fa({database:e,table:t}){e||(e=WT),xr();let r=EB(e),s=(0,Me.join)((0,yt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,yt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,yt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,hr.existsSync)(s)?s:(0,Me.join)((0,yt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=Bn.get(i);if(!o){let c=new YT.default(i,!1);o=(0,eE.open)(c),Bn.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;Bn.delete(n.path),n.status==="open"&&(await n.close(),await lB.remove(n.path))}if(e==="data"){for(let r in nr)delete nr[r];delete nr[nE]}delete ve[e]}function nt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=WT);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 Di.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=FT(u)),E=s.find(q=>q.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,yt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Di.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T),z.tableId=h.get(xo),z.tableId||(z.tableId=1),h.putSync(xo,z.tableId+1),E.tableId=z.tableId,_=fB(l,e,jd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${Go.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Go.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),p=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let q=Object.assign({},P,{audit:!0});p=!0,$(),h.put(b,q)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let q=new Di.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,q);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.workerData?.restartNumber)&&(p=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<iu.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=pee(_,k,O):p&&tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let U of QT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(U){R=U}}))}a($,"startTxn")}async function pee(e,t,r){try{let s=e.schemaVersion;await tE.signalSchemaChange(new rE.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,_B.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)}),iu.workerData&&iu.workerData.restartNumber!==dB.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>mee?await n:u>See&&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 tE.signalSchemaChange(new rE.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function Tee({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 fT(e){QT.push(e)}var yt,Go,eE,Me,hr,ko,Di,YT,jt,lB,KT,_B,tE,rE,iu,Le,dB,WT,nE,nr,ve,xo,QT,sE,Bn,Vo,mee,See,de=Se(()=>{yt=C(Q()),Go=C(xe()),eE=require("lmdb"),Me=require("path"),hr=require("fs"),ko=C(we());Ed();Di=C(Gu()),YT=C(ku()),jt=C(A()),lB=C(require("fs-extra")),KT=require("../../index"),_B=C(Ht()),tE=C(xs()),rE=C(Fr()),iu=require("worker_threads"),Le=C(x()),dB=C(dt());Jc();WT="data",nE=Symbol("defined-tables");(0,yt.initSync)();nr=Object.create(null),ve=Object.create(null);(0,KT._assignPackageExport)("databases",ve);(0,KT._assignPackageExport)("tables",nr);xo=Symbol.for("next-table-id"),QT=[],Bn=new Map;a(fee,"getTables");a(xr,"getDatabases");a(hee,"resetDatabases");a(nu,"readMetaDb");a(EB,"ensureDB");a(fB,"setTable");a(Fa,"database");a(Kh,"dropDatabase");a(nt,"table");mee=1e3,See=10;a(pee,"runIndexing");a(Tee,"dropTableMeta");a(fT,"onUpdatedTable")});var V=m((Tde,wB)=>{"use strict";var Hn=require("path"),TB=require("fs-extra"),er=x(),hB=require("fs-extra"),iE=require("os"),Ree=require("net"),gee=require("recursive-iterator"),Ge=A(),Aee=MR(),mB=require("papaparse"),oE=require("moment"),{inspect:Oee}=require("util"),SB=require("is-number"),pde=require("lodash"),Nee=require("minimist"),bee=require("https"),yee=require("http"),{hdb_errors:aE}=W(),Iee=/^((\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)))$/,RB=require("util").promisify(setTimeout),wee=100,Cee=5,Uee="",Dee=4,pB={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};wB.exports={isEmpty:mr,isEmptyOrZeroLength:Ns,arrayHasEmptyValues:Pee,arrayHasEmptyOrZeroLengthValues:vee,buildFolderPath:Bee,isBoolean:gB,errorizeMessage:Lee,stripFileExtension:qee,autoCast:Fee,autoCastJSON:AB,autoCastJSONDeep:JT,removeDir:Gee,compareVersions:xee,isCompatibleDataVersion:kee,escapeRawValue:Vee,unescapeValue:$ee,stringifyProps:Yee,timeoutPromise:Wee,isClusterOperation:zee,getClusterUser:Xee,checkGlobalSchemaTable:Jee,getHomeDir:NB,getPropsFilePath:Kee,promisifyPapaParse:Zee,removeBOM:bB,createEventPromise:jee,checkProcessRunning:ete,checkSchemaTableExist:tte,checkSchemaExists:yB,checkTableExists:IB,getStartOfTomorrowInSeconds:rte,getLimitKey:ste,isObject:Hee,isNotEmptyAndHasValue:Mee,autoCasterIsNumberCheck:OB,backtickASTSchemaItems:nte,isPortTaken:Qee,createForkArgs:ite,autoCastBoolean:ote,async_set_timeout:RB,getTableHashAttribute:ate,doesSchemaExist:cte,doesTableExist:ute,stringifyObj:lte,ms_to_time:_te,changeExtension:dte,getEnvCliRootPath:XT,noBootFile:Ete,httpRequest:fte,transformReq:hte,convertToMS:mte,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function Lee(e){return e instanceof Error?e:new Error(e)}a(Lee,"errorizeMessage");function mr(e){return e==null}a(mr,"isEmpty");function Mee(e){return!mr(e)&&(e||e===0||e===""||gB(e))}a(Mee,"isNotEmptyAndHasValue");function Ns(e){return mr(e)||e.length===0||e.size===0}a(Ns,"isEmptyOrZeroLength");function Pee(e){if(mr(e))return!0;for(let t=0;t<e.length;t++)if(mr(e[t]))return!0;return!1}a(Pee,"arrayHasEmptyValues");function vee(e){if(Ns(e))return!0;for(let t=0;t<e.length;t++)if(Ns(e[t]))return!0;return!1}a(vee,"arrayHasEmptyOrZeroLengthValues");function Bee(...e){try{return e.join(Hn.sep)}catch{console.error(e)}}a(Bee,"buildFolderPath");function gB(e){return mr(e)?!1:e===!0||e===!1}a(gB,"isBoolean");function Hee(e){return mr(e)?!1:typeof e=="object"}a(Hee,"isObject");function qee(e){return Ns(e)?Uee:e.slice(0,-Dee)}a(qee,"stripFileExtension");function Fee(e){return mr(e)||e===""||typeof e!="string"?e:pB[e]!==void 0?pB[e]:OB(e)===!0?Number(e):Iee.test(e)?new Date(e):e}a(Fee,"autoCast");function AB(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(AB,"autoCastJSON");function JT(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=JT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=JT(r);s!==r&&(e[t]=s)}return e}else return AB(e)}a(JT,"autoCastJSONDeep");function OB(e){if(e.startsWith("0.")&&SB(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&SB(e))}a(OB,"autoCasterIsNumberCheck");async function Gee(e){if(Ns(e))throw new Error(`Directory path: ${e} does not exist`);try{await hB.emptyDir(e),await hB.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(Gee,"removeDir");function xee(e,t){if(Ns(e)){er.info("Invalid current version sent as parameter.");return}if(Ns(t)){er.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(xee,"compareVersions");function kee(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(kee,"isCompatibleDataVersion");function Vee(e){if(mr(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(Vee,"escapeRawValue");function $ee(e){if(mr(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($ee,"unescapeValue");function Yee(e,t){if(mr(e))return er.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+iE.EOL}!Ns(s)&&s[0]===";"?r+=" "+s+n+iE.EOL:Ns(s)||(r+=s+"="+n+iE.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(Yee,"stringifyProps");function NB(){let e;try{e=iE.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(NB,"getHomeDir");function Kee(){let e=Hn.join(NB(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return TB.existsSync(e)||(e=Hn.join(__dirname,"../","hdb_boot_properties.file")),e}a(Kee,"getPropsFilePath");function Wee(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(Wee,"timeoutPromise");async function Qee(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=Ree.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(Qee,"isPortTaken");function zee(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(zee,"isClusterOperation");function Jee(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Jee,"checkGlobalSchemaTable");function Xee(e,t){if(mr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(mr(e)||Ns(e)){er.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){er.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){er.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(Xee,"getClusterUser");function Zee(){mB.parsePromise=function(e,t,r){return new Promise(function(s,n){mB.parse(e,{header:!0,transformHeader:bB,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(Zee,"promisifyPapaParse");function bB(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(bB,"removeBOM");function jee(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${Oee(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(jee,"createEventPromise");async function ete(e){let t=!0,r=0;do await RB(wee*r++),(await Aee.findPs(e)).length>0&&(t=!1);while(t&&r<Cee);if(t)throw new Error(`process ${e} was not started`)}a(ete,"checkProcessRunning");function tte(e,t){let r=yB(e);if(r)return r;let s=IB(e,t);if(s)return s}a(tte,"checkSchemaTableExist");function yB(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return aE.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(yB,"checkSchemaExists");function IB(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return aE.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(IB,"checkTableExists");function rte(){let e=oE().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=oE().utc().unix();return e-t}a(rte,"getStartOfTomorrowInSeconds");function ste(){return oE().utc().format("DD-MM-YYYY")}a(ste,"getLimitKey");function nte(e){try{let t=new gee(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){er.error("Got an error back ticking items."),er.error(t)}}a(nte,"backtickASTSchemaItems");function ite(e){return[e]}a(ite,"createForkArgs");function ote(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(ote,"autoCastBoolean");function ate(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(ate,"getTableHashAttribute");function cte(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(cte,"doesSchemaExist");function ute(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(ute,"doesTableExist");function lte(e){try{return JSON.stringify(e)}catch{return e}}a(lte,"stringifyObj");function _te(e){let t=oE.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(_te,"ms_to_time");function dte(e,t){let r=Hn.basename(e,Hn.extname(e));return Hn.join(Hn.dirname(e),r+t)}a(dte,"changeExtension");function XT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=Nee(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(XT,"getEnvCliRootPath");var zT;function Ete(){if(zT)return zT;let e=XT();XT()&&TB.pathExistsSync(Hn.join(e,Ge.HDB_CONFIG_FILE))&&(zT=!0)}a(Ete,"noBootFile");function fte(e,t){let r;return e.protocol==="http:"?r=yee:r=bee,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(fte,"httpRequest");function hte(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(hte,"transformReq");function mte(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(mte,"convertToMS")});var ZT=A(),CB=V(),ou=x(),Ste=Gs(),pte=ar(),Tte=Qp(),{start:Rte}=(ET(),re(Pd)),{closeConnection:gte}=Qe(),UB=require("moment"),DB=hd(),{cloneDeep:Ate}=require("lodash"),Ote=process.env[ZT.PROCESS_NAME_ENV_PROP],Li=Ote.substring(4);a(async function(){let t={id:Li,request:void 0},r=0;try{ou.notify("Starting job:",Li),Rte(),Ste.setSchemaDataToGlobal(),await pte.setUsersToGlobal();let s=await DB.getJobById(Li);if(CB.isEmptyOrZeroLength(s))throw new Error(`Unable to find a record in hdb_job for job: ${Li}`);let{request:n}=s[0];if(CB.isEmptyOrZeroLength(n))throw new Error("Did not find job request in hdb_job table, unable to proceed");n=Ate(n);let i=Tte.getOperationFunction(n);ou.trace("Running operation:",n.operation,"for job",Li);let o=await i.job_operation_function(n);ou.trace("Result from job:",Li,o),t.status=ZT.JOB_STATUS_ENUM.COMPLETE,t.message=o,t.end_datetime=UB().valueOf(),ou.notify("Successfully completed job:",Li)}catch(s){r=1,ou.error(s),t.status=ZT.JOB_STATUS_ENUM.ERROR,t.message=s.message?s.message:s,t.end_datetime=UB().valueOf()}finally{await DB.updateJob(t),await gte(),setTimeout(()=>{process.exit(r)},3e3).unref()}},"job")();