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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,26 +1,26 @@
1
- "use strict";var wB=Object.create;var Vo=Object.defineProperty;var CB=Object.getOwnPropertyDescriptor;var UB=Object.getOwnPropertyNames;var DB=Object.getPrototypeOf,LB=Object.prototype.hasOwnProperty;var a=(e,t)=>Vo(e,"name",{value:t,configurable:!0});var Se=(e,t)=>()=>(e&&(t=e(e=0)),t);var m=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),je=(e,t)=>{for(var r in t)Vo(e,r,{get:t[r],enumerable:!0})},XT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of UB(t))!LB.call(e,n)&&n!==r&&Vo(e,n,{get:()=>t[n],enumerable:!(s=CB(t,n))||s.enumerable});return e};var C=(e,t,r)=>(r=e!=null?wB(DB(e)):{},XT(t||!e||!e.__esModule?Vo(r,"default",{value:e,enumerable:!0}):r,e)),re=e=>XT(Vo({},"__esModule",{value:!0}),e);var eR=m((dte,jT)=>{var MB=require("fast-glob"),{statSync:aE,existsSync:cE,readFileSync:PB,writeFileSync:vB}=require("fs"),{spawnSync:BB,spawn:HB}=require("child_process"),{isMainThread:FB}=require("worker_threads"),{join:Ns,relative:ZT}=require("path"),{PACKAGE_ROOT:mr}=A(),{tmpdir:qB}=require("os");require("source-map-support").install();var GB=["resources","server","dataLayer"],$o="ts-build",uE,xB=__filename.endsWith("tsBuild.js");if(xB){if(FB){let r;try{aE(Ns(mr,$o)),r=!0}catch{}if(r)for(let s of MB.sync(GB.map(n=>n+"/**/*.ts"),{cwd:mr})){let n=0,i=0;try{n=aE(Ns(mr,s)).mtimeMs-5e3,i=aE(Ns(mr,$o,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),uE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),uE=!0;if(uE){let s=BB(process.argv[0],[Ns(mr,"node_modules/.bin/tsc")],{cwd:mr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=Ns(qB(),"harperdb-tsc.pid"),i;if(cE(n))try{process.kill(+PB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=HB(process.argv[0],[Ns(mr,"node_modules/.bin/tsc"),"--watch"],{cwd:mr,detached:!0,stdio:"ignore"});vB(n,o.pid.toString()),o.unref()}}}}let e=jT.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(mr)&&!s[0].includes("node_modules")){let i=ZT(mr,s[0]),o;i.startsWith($o)?o=Ns(mr,ZT($o,i)):o=Ns(mr,$o,i);let c=Ns(o,r),u=c+".js";if(cE(u))return u;if(c.includes(".")&&cE(c))return c}return t(r,s,n)}}});var A=m((hte,fR)=>{"use strict";var Sr=require("path"),kB=require("fs"),{relative:Ete,join:fte}=Sr,{existsSync:VB}=kB;function $B(){let e=__dirname;for(;!VB(Sr.join(e,"package.json"));){let t=Sr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a($B,"getHDBPackageRoot");var on=$B(),tR="js",au=tR,YB="harperdb-config.yaml",KB="defaultConfig.yaml",WB="hdb",rR=`harperdb.${au}`,sR=`customFunctionsServer.${au}`,QB=`restartHdb.${au}`,_E="HarperDB",ou="Custom Functions",cu="Clustering Hub",uu="Clustering Leaf",zB="Clustering Ingest Service",JB="Clustering Reply Service",XB="foreground.pid",ZB="hdb.pid",jB="data",eH={HDB:_E,CLUSTERING_HUB:cu,CLUSTERING_LEAF:uu,CLUSTERING_INGEST_SERVICE:zB,CLUSTERING_REPLY_SERVICE:JB,CUSTOM_FUNCTIONS:ou,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},tH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},rH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},sH={harperdb:_E,"clustering hub":cu,"clustering leaf":uu,"custom functions":ou,custom_functions:ou,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},nH={CLUSTERING_HUB_PROC_DESCRIPTOR:cu,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu},lE={HDB:Sr.join(on,"server/harperdb"),CUSTOM_FUNCTIONS:Sr.join(on,"server/customFunctions"),CLUSTERING_HUB:Sr.join(on,"server/nats"),CLUSTERING_LEAF:Sr.join(on,"server/nats")},iH={HDB:Sr.join(lE.HDB,rR),CUSTOM_FUNCTIONS:Sr.join(lE.CUSTOM_FUNCTIONS,sR)},oH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Sr.join(on,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Sr.join(on,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Sr.join(on,"launchServiceScripts/launchUpdateNodes4-0-0.js")},aH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},nR="support@harperdb.io",cH="customer-success@harperdb.io",iR=1,uH=4141,oR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",lH="https://www.harperdb.io/product",_H=`For support, please submit a request at ${oR} or contact ${nR}`,aR=`For license support, please contact ${cH}`,dH="None of the specified records were found.",EH="hash attribute not found",fH=`Your current license only supports ${iR} role. ${aR}`,hH="Your current license only supports 3 connections to a node.",mH="127.0.0.1",SH=1,pH=/^\.$/,TH=/^\.\.$/,RH="U+002E",gH=/\//g,AH="U+002F",OH=/U\+002F/g,NH=/^U\+002E$/,bH=/^U\+002EU\+002E$/,yH="d",IH=999999,wH="*",CH="--max-old-space-size=",UH="system",DH="__hdb_hash",LH=".harperdb",MH=".hdb",PH="keys",vH="hdb_boot_properties.file",BH=".updateConfig.json",HH="SIGTSTP",FH=24,qH=6e4,GH=448,xH="blob",kH="trash",VH="database",$H="schema",YH="transactions",KH=".count",WH="id",QH="PROCESS_NAME",cR={SETTINGS_PATH_KEY:"settings_path"},uR=require("lodash"),zH={TC_AGREEMENT:"TC_AGREEMENT",CLUSTERING_USER:"CLUSTERING_USER",CLUSTERING_PASSWORD:"CLUSTERING_PASSWORD",HDB_ADMIN_USERNAME:"HDB_ADMIN_USERNAME",HDB_ADMIN_PASSWORD:"HDB_ADMIN_PASSWORD",OPERATIONSAPI_ROOT:"OPERATIONSAPI_ROOT",ROOTPATH:"ROOTPATH",OPERATIONSAPI_NETWORK_PORT:"OPERATIONSAPI_NETWORK_PORT",CLUSTERING_NODENAME:"CLUSTERING_NODENAME",CLUSTERING_ENABLED:"CLUSTERING_ENABLED",CLUSTERING_PORT:"CLUSTERING_PORT",HDB_ROOT:"HDB_ROOT",SERVER_PORT:"SERVER_PORT",NODE_NAME:"NODE_NAME",CLUSTERING:"CLUSTERING"},JH={HDB_PATH_KEY:"HDB_INTERNAL_PATH",HDB_AUTH_HEADER:"hdb_auth_header",HDB_USER_DATA_KEY:"hdb_user",CHUNK_SIZE:1e3,MAX_CHARACTER_SIZE:250},XH={DATA_VERSION:"data_version",UPGRADE_VERSION:"upgrade_version"},ZH={JOB_TABLE_NAME:"hdb_job",NODE_TABLE_NAME:"hdb_nodes",ATTRIBUTE_TABLE_NAME:"hdb_attribute",LICENSE_TABLE_NAME:"hdb_license",ROLE_TABLE_NAME:"hdb_role",SCHEMA_TABLE_NAME:"hdb_schema",TABLE_TABLE_NAME:"hdb_table",USER_TABLE_NAME:"hdb_user",INFO_TABLE_NAME:"hdb_info"},jH={JOB_TABLE_HASH_ATTRIBUTE:"id",NODE_TABLE_HASH_ATTRIBUTE:"name",ATTRIBUTE_TABLE_HASH_ATTRIBUTE:"id",LICENSE_TABLE_HASH_ATTRIBUTE:"license_key",ROLE_TABLE_HASH_ATTRIBUTE:"id",SCHEMA_TABLE_HASH_ATTRIBUTE:"name",TABLE_TABLE_HASH_ATTRIBUTE:"id",USER_TABLE_HASH_ATTRIBUTE:"username",INFO_TABLE_ATTRIBUTE:"info_id"},tr="hdb_internal:",e0={CREATE_SCHEMA:tr+"create_schema",CREATE_TABLE:tr+"create_table",CREATE_ATTRIBUTE:tr+"create_attribute",ADD_USER:tr+"add_user",ALTER_USER:tr+"alter_user",DROP_USER:tr+"drop_user",HDB_NODES:tr+"hdb_nodes",HDB_USERS:tr+"hdb_users",HDB_WORKERS:tr+"hdb_workers",CATCHUP:tr+"catchup",SCHEMA_CATCHUP:tr+"schema_catchup",WORKER_ROOM:tr+"cluster_workers"},t0={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},r0="060493.ks",s0=".license",n0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},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"},i0={CSV:".csv",JSON:".json"},o0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},a0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Yo={};Yo[K.INSERT]=K.INSERT;Yo[K.UPDATE]=K.UPDATE;Yo[K.UPSERT]=K.UPSERT;Yo[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 c0={DEBUG:"debug",RUN:"run",START:"start",INSTALL:"install",REGISTER:"register",STOP:"stop",RESTART:"restart",VERSION:"version",UPGRADE:"upgrade",HELP:"help",STATUS:"status"},u0={point:"point",lineString:"lineString",multiLineString:"multiLineString",multiPoint:"multiPoint",multiPolygon:"multiPolygon",polygon:"polygon"},lR={HDB_ROOT_KEY:"HDB_ROOT",SERVER_PORT_KEY:"SERVER_PORT",CERT_KEY:"CERTIFICATE",PRIVATE_KEY_KEY:"PRIVATE_KEY",HTTP_SECURE_ENABLED_KEY:"HTTPS_ON",CORS_ENABLED_KEY:"CORS_ON",CORS_WHITELIST_KEY:"CORS_WHITELIST",LOG_LEVEL_KEY:"LOG_LEVEL",LOGGER_KEY:"LOGGER",LOG_PATH_KEY:"LOG_PATH",LOG_ROTATE:"LOG_ROTATE",LOG_ROTATE_MAX_SIZE:"LOG_ROTATE_MAX_SIZE",LOG_ROTATE_RETAIN:"LOG_ROTATE_RETAIN",LOG_ROTATE_COMPRESS:"LOG_ROTATE_COMPRESS",LOG_ROTATE_DATE_FORMAT:"LOG_ROTATE_DATE_FORMAT",LOG_ROTATE_ROTATE_MODULE:"LOG_ROTATE_ROTATE_MODULE",LOG_ROTATE_WORKER_INTERVAL:"LOG_ROTATE_WORKER_INTERVAL",LOG_ROTATE_ROTATE_INTERVAL:"LOG_ROTATE_ROTATE_INTERVAL",LOG_ROTATE_TIMEZONE:"LOG_ROTATE_TIMEZONE",LOG_DAILY_ROTATE_KEY:"LOG_DAILY_ROTATE",LOG_MAX_DAILY_FILES_KEY:"LOG_MAX_DAILY_FILES",PROPS_ENV_KEY:"NODE_ENV",SETTINGS_PATH_KEY:"settings_path",CLUSTERING_PORT_KEY:"CLUSTERING_PORT",CLUSTERING_NODE_NAME_KEY:"NODE_NAME",CLUSTERING_ENABLED_KEY:"CLUSTERING",ALLOW_SELF_SIGNED_SSL_CERTS:"ALLOW_SELF_SIGNED_SSL_CERTS",MAX_HDB_PROCESSES:"MAX_HDB_PROCESSES",INSTALL_USER:"install_user",CLUSTERING_USER_KEY:"CLUSTERING_USER",MAX_CLUSTERING_PROCESSES:"MAX_CLUSTERING_PROCESSES",SERVER_TIMEOUT_KEY:"SERVER_TIMEOUT_MS",SERVER_KEEP_ALIVE_TIMEOUT_KEY:"SERVER_KEEP_ALIVE_TIMEOUT",SERVER_HEADERS_TIMEOUT_KEY:"SERVER_HEADERS_TIMEOUT",DISABLE_TRANSACTION_LOG_KEY:"DISABLE_TRANSACTION_LOG",OPERATION_TOKEN_TIMEOUT_KEY:"OPERATION_TOKEN_TIMEOUT",REFRESH_TOKEN_TIMEOUT_KEY:"REFRESH_TOKEN_TIMEOUT",CUSTOM_FUNCTIONS_ENABLED_KEY:"CUSTOM_FUNCTIONS",CUSTOM_FUNCTIONS_PORT_KEY:"CUSTOM_FUNCTIONS_PORT",CUSTOM_FUNCTIONS_DIRECTORY_KEY:"CUSTOM_FUNCTIONS_DIRECTORY",MAX_CUSTOM_FUNCTION_PROCESSES:"MAX_CUSTOM_FUNCTION_PROCESSES",LOG_TO_FILE:"LOG_TO_FILE",LOG_TO_STDSTREAMS:"LOG_TO_STDSTREAMS",RUN_IN_FOREGROUND:"RUN_IN_FOREGROUND",LOCAL_STUDIO_ON:"LOCAL_STUDIO_ON",STORAGE_WRITE_ASYNC:"STORAGE_WRITE_ASYNC"},l0=uR.invert(lR),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"},_R={settings_path:cR.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];_R[t.toLowerCase()]=t}var _0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},d0={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"},E0={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},f0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},h0={VERSION_DEFAULT:"2.2.0"},m0={DEVELOPMENT:8192,DEFAULT:512},S0={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},p0={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},T0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},dR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},R0=Symbol("metadata"),g0="__clustering__",A0=Object.values(dR),O0=15984864e5,ER={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},N0=uR.invert(ER),b0={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},y0=111,I0=`\r
2
- `,w0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},C0=["*","%"],U0="unauthorized_access",D0="func_val",L0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},M0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},P0={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},v0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},B0={HTTP:"http"},H0={STOPPED:"stopped",ONLINE:"online"},F0="3.x.x",q0={SUCCESS:"success",FAILURE:"failure"},G0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};fR.exports={LOCAL_HARPERDB_OPERATIONS:ge,HDB_SUPPORT_ADDRESS:nR,HDB_SUPPORT_URL:oR,HDB_PRICING_URL:lH,SUPPORT_HELP_MSG:_H,LICENSE_HELP_MSG:aR,HDB_PROC_NAME:rR,HDB_PROC_DESCRIPTOR:_E,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:UH,HASH_FOLDER_NAME:DH,HDB_HOME_DIR_NAME:LH,UPDATE_FILE_NAME:BH,LICENSE_KEY_DIR_NAME:PH,BOOT_PROPS_FILE_NAME:vH,JOB_TYPE_ENUM:d0,JOB_STATUS_ENUM:n0,SYSTEM_TABLE_NAMES:ZH,SYSTEM_TABLE_HASH_ATTRIBUTES:jH,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:i0,S3_BUCKET_AUTH_KEYS:o0,VALID_SQL_OPS_ENUM:a0,GEO_CONVERSION_ENUM:u0,HDB_SETTINGS_NAMES:lR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:l0,SERVICE_ACTIONS_ENUM:c0,CLUSTER_MESSAGE_TYPE_ENUM:E0,CLUSTER_CONNECTION_DIRECTION_ENUM:f0,CLUSTER_EVENTS_DEFS_ENUM:S0,PERIOD_REGEX:pH,DOUBLE_PERIOD_REGEX:TH,UNICODE_PERIOD:RH,FORWARD_SLASH_REGEX:gH,UNICODE_FORWARD_SLASH:AH,ESCAPED_FORWARD_SLASH_REGEX:OH,ESCAPED_PERIOD_REGEX:NH,ESCAPED_DOUBLE_PERIOD_REGEX:bH,REG_KEY_FILE_NAME:r0,RESTART_TIMEOUT_MS:qH,HDB_FILE_PERMISSIONS:GH,DATABASES_DIR_NAME:VH,LEGACY_DATABASES_DIR_NAME:$H,TRANSACTIONS_DIR_NAME:YH,LIMIT_COUNT_NAME:KH,ID_ATTRIBUTE_STRING:WH,INSERT_MODULE_ENUM:JH,UPGRADE_JSON_FIELD_NAMES_ENUM:XH,RESTART_CODE:HH,RESTART_CODE_NUM:FH,CLUSTER_OPERATIONS:Yo,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:t0,HDB_INTERNAL_SC_CHANNEL_PREFIX:tr,INTERNAL_SC_CHANNELS:e0,CLUSTERING_MESSAGE_TYPES:b0,HDB_FILE_SUFFIX:MH,BLOB_FOLDER_NAME:xH,HDB_TRASH_DIR:kH,ORIGINATOR_SET_VALUE:y0,LICENSE_VALUES:h0,RAM_ALLOCATION_ENUM:m0,TIME_STAMP_NAMES_ENUM:dR,TIME_STAMP_NAMES:A0,PERMS_UPDATE_RELEASE_TIMESTAMP:O0,SEARCH_NOT_FOUND_MESSAGE:dH,SEARCH_ATTRIBUTE_NOT_FOUND:EH,LICENSE_ROLE_DENIED_RESPONSE:fH,LICENSE_MAX_CONNS_REACHED:hH,BASIC_LICENSE_MAX_NON_CU_ROLES:iR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:uH,VALUE_SEARCH_COMPARATORS:ER,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:N0,LICENSE_FILE_NAME:s0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:p0,NEW_LINE:I0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:SH,MOMENT_DAYS_TAG:yH,API_TURNOVER_SEC:IH,LOOPBACK:mH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:wH,NODE_ERROR_CODES:T0,JAVASCRIPT_EXTENSION:tR,PERMS_CRUD_ENUM:w0,UNAUTHORIZED_PERMISSION_NAME:U0,SEARCH_WILDCARDS:C0,FUNC_VAL:D0,READ_AUDIT_LOG_SEARCH_TYPES_ENUM:L0,JWT_ENUM:M0,CLUSTERING_FLAG:g0,ITC_EVENT_TYPES:P0,CUSTOM_FUNCTION_PROC_NAME:sR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:v0,THREAD_TYPES:B0,MEM_SETTING_KEY:CH,HDB_RESTART_SCRIPT:QB,PROCESS_DESCRIPTORS:eH,SERVICE_SERVERS:iH,SERVICE_SERVERS_CWD:lE,PROCESS_DESCRIPTORS_VALIDATE:sH,LAUNCH_SERVICE_SCRIPTS:oH,LOG_LEVELS:rH,PROCESS_NAME_ENV_PROP:QH,LOG_NAMES:tH,PM2_PROCESS_STATUSES:H0,CONFIG_PARAM_MAP:_R,CONFIG_PARAMS:R,HDB_CONFIG_FILE:YB,HDB_DEFAULT_CONFIG_FILE:KB,ROLE_TYPES_ENUM:aH,BOOT_PROP_PARAMS:cR,INSTALL_PROMPTS:zH,HDB_ROOT_DIR_NAME:WB,CLUSTERING_PROCESSES:nH,FOREGROUND_PID_FILE:XB,PACKAGE_ROOT:on,PRE_4_0_0_VERSION:F0,SCHEMAS_PARAM_CONFIG:_0,METADATA_PROPERTY:R0,AUTH_AUDIT_STATUS:q0,AUTH_AUDIT_TYPES:G0,HDB_PID_FILE:ZB,DEFAULT_DATABASE_NAME:jB};eR()});var dE=m((Ste,SR)=>{"use strict";var hR=require("minimist");SR.exports=x0;function x0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=mR(process.env),s=mR(hR(process.argv))):(r=process.env,s=hR(process.argv));let n={};for(let i=0,o=e.length;i<o;i++){let c=e[i];s[c]!==void 0?n[c]=s[c].toString().trim():r[c]!==void 0&&(n[c]=r[c].toString().trim())}return n}a(x0,"assignCMDENVVariables");function mR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(mR,"objKeysToLowerCase")});var x=m((Tte,TE)=>{"use strict";var Fn=require("fs-extra"),{workerData:k0,threadId:V0}=require("worker_threads"),Is=require("path"),RR=require("yaml"),gR=require("properties-reader"),et=A(),pR=dE(),$0=require("os"),{PACKAGE_ROOT:fE}=A(),{_assignPackageExport:Y0}=require("../index"),Wo={};for(let e in console)Wo[e]||(Wo[e]=console[e]);var Mt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},AR={STDOUT:"stdOut",STDERR:"stdErr"},K0=Is.join(fE,"logs"),W0=Is.join(fE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),Q0=1e4,bs,ys,Lt,lu,_u,Qo,Li,Ko;Ko===void 0&&OR();TE.exports={notify:yR,fatal:IR,error:zo,warn:pE,info:du,debug:SE,trace:mE,setLogLevel:tF,log_level:Lt,loggerWithTag:z0,suppressLogging:J0,initLogSettings:OR,setupConsoleLogging:NR,logCustomLevel:j0,closeLogFile:hE,getLogFilePath:()=>Qo,OUTPUTS:AR,AuthAuditLog:nF};Y0("logger",TE.exports);function OR(e=!1){try{if(Ko===void 0||e){hE();let t=eF(),r=pR(["ROOTPATH"]);try{Ko=gR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!Fn.pathExistsSync(Is.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Lt,config_log_path:_u,to_file:bs,to_stream:ys}=rF(r.ROOTPATH?Is.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Ko.get("settings_path"))),lu=et.LOG_NAMES.HDB,Qo=Is.join(_u,lu)}}catch(t){if(Ko=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=pR(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){ys=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(bs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=sF();bs=bs===void 0?n:bs,bs=TR(bs),ys=ys===void 0?i:ys,ys=TR(ys),Lt=Lt===void 0?s:Lt,_u=K0,lu=et.LOG_NAMES.INSTALL,Qo=Is.join(_u,lu);return}throw zo("Error initializing log settings"),zo(t),t}NR()}a(OR,"initLogSettings");var EE=!0;function NR(){Di("error",zo),Di("warn",pE),Di("log",du),Di("info",du),Di("debug",SE),Di("trace",mE)}a(NR,"setupConsoleLogging");function Di(e,t){console[e]=function(...r){if(EE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Wo[e](...r)}}a(Di,"logConsole");function z0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(yR),fatal:r(IR),error:r(zo),warn:r(pE),info:r(du),debug:r(SE),trace:r(mE)};function r(s){return function(...n){return s(t,...n)}}}a(z0,"loggerWithTag");function J0(e){try{EE=!1,e()}finally{EE=!0}}a(J0,"suppressLogging");var X0=k0?.name?.replace(/ /g,"-")||"main";function ws(e,t){let r=new Date(Date.now()).toISOString(),s="",n=t.length,i=n-1,o=[e],c=0,u;for(typeof t[0]=="object"&&(t[0]?.tagName?(o.push(t[0]?.tagName),c++):t[0]?.serviceName&&(u=t[0]?.serviceName,c++)),o.unshift(u||X0+"/"+V0);c<n;c++){let l=t[c];l instanceof Error&&l.stack?s+=l.stack:typeof l=="object"?s+=JSON.stringify(l):s+=l,c<i&&(s+=" ")}return`${r} [${o.join("] [")}]: ${s}
3
- `}a(ws,"createLogRecord");function Jo(e){bs&&bR(e),ys&&process.stdout.write(e)}a(Jo,"logStdOut");function Eu(e){bs&&bR(e),ys&&process.stderr.write(e)}a(Eu,"logStdErr");function bR(e){Z0(),Li?Fn.appendFileSync(Li,e):Wo.log(e)}a(bR,"logToFile");function hE(){try{Fn.closeSync(Li)}catch{}Li=null}a(hE,"closeLogFile");function Z0(){if(!Li){try{if(!Qo)debugger;Li=Fn.openSync(Qo,"a")}catch(e){Wo.error(e)}setTimeout(()=>{hE()},Q0).unref()}}a(Z0,"openLogFile");function du(...e){Mt[Lt]<=Mt.info&&Jo(ws("info",e))}a(du,"info");function mE(...e){Mt[Lt]<=Mt.trace&&Jo(ws("trace",e))}a(mE,"trace");function zo(...e){Mt[Lt]<=Mt.error&&Eu(ws("error",e))}a(zo,"error");function SE(...e){Mt[Lt]<=Mt.debug&&Jo(ws("debug",e))}a(SE,"debug");function yR(...e){Mt[Lt]<=Mt.notify&&Jo(ws("notify",e))}a(yR,"notify");function IR(...e){Mt[Lt]<=Mt.fatal&&Eu(ws("fatal",e))}a(IR,"fatal");function pE(...e){Mt[Lt]<=Mt.warn&&Eu(ws("warn",e))}a(pE,"warn");function j0(e,t,...r){t===AR.STDERR?Eu(ws(e,r)):Jo(ws(e,r))}a(j0,"logCustomLevel");function eF(){let e;try{e=$0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Is.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return Fn.existsSync(t)||(t=Is.join(fE,"utility/hdb_boot_properties.file")),t}a(eF,"getPropsFilePath");function tF(e){Lt=e}a(tF,"setLogLevel");function TR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TR,"autoCastBoolean");function rF(e){try{if(e.includes("config/settings.js")){let o=gR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Is.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=RR.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===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(rF,"getLogConfig");function sF(){try{let e=RR.parseDocument(Fn.readFileSync(W0,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(sF,"getDefaultConfig");function nF(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(nF,"AuthAuditLog")});var CR=m((gte,wR)=>{"use strict";var iF=require("util"),oF=require("path"),aF=require("child_process"),cF=iF.promisify(aF.execFile),uF=1e3*1e3*10;wR.exports={findPs:lF};async function lF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await cF("ps",["wwxo",`pid,${r}`],{maxBuffer:uF});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:oF.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(lF,"findPs")});var xe=m((Ote,DR)=>{"use strict";var _F="__dbis__",dF="__txns__",EF="__environment_name__",fF="__dbi_defintion__",hF={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"},mF=["__createdtime__","__updatedtime__"],SF="\uFFFF",UR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},pF=Object.values(UR);DR.exports={AUDIT_STORE_NAME:dF,INTERNAL_DBIS_NAME:_F,DBI_DEFINITION_NAME:fF,SEARCH_TYPES:hF,TIMESTAMP_NAMES:mF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:EF,TRANSACTIONS_DBI_NAMES_ENUM:UR,TRANSACTIONS_DBIS:pF,OVERFLOW_MARKER:SF}});var rr=m((Nte,GR)=>{"use strict";var LR=A(),MR=xe(),PR={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},vR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),BR={500:vR("There was an error processing your request."),400:"Invalid request"},TF=BR[PR.INTERNAL_SERVER_ERROR],RF={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.`},gF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},AF={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"},OF={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 ${MR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${MR.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},NF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${LR.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 ${LR.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"},HR={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"},bF={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."},yF={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},IF={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},wF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},CF={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.`},qR={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},UF={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."},DF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},LF={...HR,...AF,...RF,...bF,...yF,...IF,...wF,...CF,...NF,...FR,...qR,...UF,...DF,...gF};GR.exports={CHECK_LOGS_WRAPPER:vR,HDB_ERROR_MSGS:LF,DEFAULT_ERROR_MSGS:BR,DEFAULT_ERROR_RESP:TF,HTTP_STATUS_CODES:PR,LMDB_ERRORS_ENUM:OF,AUTHENTICATION_ERROR_MSGS:HR,VALIDATION_ERROR_MSGS:FR,ITC_ERRORS:qR}});var W=m((yte,VR)=>{"use strict";var Mi=rr(),MF=x(),PF=A(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,xR),this.statusCode=s||Mi.HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR,this.http_resp_msg=r||(Mi.DEFAULT_ERROR_MSGS[s]?Mi.DEFAULT_ERROR_MSGS[s]:Mi.DEFAULT_ERROR_MSGS[Mi.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&&MF[n](i)}},RE=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}},gE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function xR(e,t,r,s=PF.LOG_LEVELS.ERROR,n=null,i=!1){if(kR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(xR,"handleHDBError");function kR(e){return e.__proto__.constructor.name===fu.name}a(kR,"isHDBError");VR.exports={isHDBError:kR,handleHDBError:xR,ClientError:RE,ServerError:gE,hdb_errors:Mi}});var we=m((wte,JR)=>{"use strict";var ta=A(),vF=V(),Pt=Q(),ra=require("path"),BF=require("minimist"),$R=require("fs-extra"),YR=require("lodash");Pt.initSync();var{CONFIG_PARAMS:an,SCHEMAS_PARAM_CONFIG:Xo,SYSTEM_SCHEMA_NAME:hu}=ta,Zo,jo,ea;function KR(){if(Zo!==void 0)return Zo;if(Pt.getHdbBasePath()!==void 0)return Zo=Pt.get(an.STORAGE_PATH)||ra.join(Pt.getHdbBasePath(),ta.DATABASES_DIR_NAME),Zo}a(KR,"getBaseSchemaPath");function WR(){if(jo!==void 0)return jo;if(Pt.getHdbBasePath()!==void 0)return jo=zR(hu),jo}a(WR,"getSystemSchemaPath");function QR(){if(ea!==void 0)return ea;if(Pt.getHdbBasePath()!==void 0)return ea=Pt.get(ta.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||ra.join(Pt.getHdbBasePath(),ta.TRANSACTIONS_DIR_NAME),ea}a(QR,"getTransactionAuditStoreBasePath");function HF(e,t){let r=Pt.get(an.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||ra.join(QR(),e.toString())}a(HF,"getTransactionAuditStorePath");function zR(e,t){e=e.toString(),t=t&&t.toString();let r=Pt.get(ta.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||ra.join(KR(),e)}a(zR,"getSchemaPath");function FF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,BF(process.argv));let s=r[an.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!vF.isObject(s))throw o;i=s}for(let o of i){let c=o[hu];if(!c)continue;let u=Pt.get(an.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Xo.PATH];if(l)return YR.set(u,[hu,Xo.TABLES,t,Xo.PATH],l),Pt.setProperty(an.SCHEMAS,u),l;let _=c?.[Xo.PATH];if(_)return YR.set(u,[hu,Xo.PATH],_),Pt.setProperty(an.SCHEMAS,u),_}}let n=r[an.STORAGE_PATH.toUpperCase()];if(n){if(!$R.pathExistsSync(n))throw new Error(n+" does not exist");let i=ra.join(n,e);return $R.mkdirsSync(i),Pt.setProperty(an.STORAGE_PATH,n),i}return WR()}a(FF,"initSystemSchemaPaths");function qF(){Zo=void 0,jo=void 0,ea=void 0}a(qF,"resetPaths");JR.exports={getBaseSchemaPath:KR,getSystemSchemaPath:WR,getTransactionAuditStorePath:HF,getTransactionAuditStoreBasePath:QR,getSchemaPath:zR,initSystemSchemaPaths:FF,resetPaths:qF}});var vt=m((Lte,tg)=>{"use strict";var GF=rr().LMDB_ERRORS_ENUM,Ute=require("lmdb"),xF=xe(),Dte=require("buffer").Buffer,{OVERFLOW_MARKER:XR,MAX_SEARCH_KEY_LENGTH:mu}=xF,ZR=["number","string","symbol","boolean","bigint"];function kF(e){if(e=e?.primaryStore||e,!e)throw new Error(GF.ENV_REQUIRED)}a(kF,"validateEnv");function VF(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(VF,"stringifyData");function $F(e){return e instanceof Date?e.valueOf():e}a($F,"convertKeyValueToWrite");function YF(e){if(e==null)return;if(ZR.includes(typeof e))return e.length>mu?[e.slice(0,mu)+XR]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(ZR.includes(typeof n))n.length>mu?t.push(n.slice(0,mu)+XR):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(YF,"getIndexedValues");var Su=0,jR=0;function eg(){jR=Date.now()-performance.now()}a(eg,"adjustStartTime");eg();var KF=6e4;setInterval(eg,KF).unref();function WF(){let e=performance.now()+jR;return e>Su?(Su=e,e):(Su+=488e-6,Su)}a(WF,"getNextMonotonicTime");tg.exports={validateEnv:kF,stringifyData:VF,convertKeyValueToWrite:$F,getNextMonotonicTime:WF,getIndexedValues:YF}});var rg,Jr,AE,sa=Se(()=>{rg=require("events"),Jr=class extends rg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new AE;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)}},AE=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 na(e){return e[ft]||(e[ft]=Object.create(null))}function Au(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=sg(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){na(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,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);na(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);na(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 pu.ClientError("Can not add a property to a sealed table schema");na(this)[o]=c}),i("deleteProperty",function(o){na(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 sg(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}},Au(r,t)),new r(e)):new Tu(e);case Array:let s=new gu(e.length);s[ce]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=sg(o,t?.elements)),s[n]=o}return s}}function Ou(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=Ou(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ce])),Object.assign(r,e)),r||e[ce]}function ia(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=ia(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=ia(n)),t[s]=n}return t?Object.freeze(t):e[ce]||Object.freeze(e)}function Ru(e){let t=e[ce];if(!t)return!0;if(e.constructor===Array){if(e[qn]||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(Ru(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(Ru(n))return!0}else return!0}else return!0}}return!1}var pu,ft,Tu,qn,gu,Nu=Se(()=>{Xr();pu=C(W()),ft=Symbol("own-data");a(na,"getChanges");a(Au,"assignTrackedAccessors");a(sg,"trackObject");Tu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ce]=t}};Au(Tu,{});a(Ou,"collapseData");a(ia,"deepFreeze");a(Ru,"hasChanges");qn=Symbol.for("has-array-changes"),gu=class extends Array{static{a(this,"TrackedArray")}[qn];constructor(t){super(t)}splice(...t){return this[qn]=!0,super.splice(...t)}push(...t){return this[qn]=!0,super.push(...t)}pop(){return this[qn]=!0,super.pop()}unshift(...t){return this[qn]=!0,super.unshift(...t)}shift(){return this[qn]=!0,super.shift()}};gu.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 OE;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 ng,ig,OE,Gn=Se(()=>{ng=C(vt()),ig=require("../index");Xr();a(Ye,"transaction");(0,ig._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()};OE=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,ng.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 yE(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(zF[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 T=o;o=c,c=T,T=!l,l=!u,u=T}let f=i===s.primaryKey||i==null,h=f?s.primaryStore:s.indices[i];if(!h||h.isIndexing||E){if(!n)throw new NE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let T=IE(e);if(!T)throw new NE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:g,value:O})=>new Promise(k=>setImmediate(()=>k(T(O)?g:ag.SKIP))))}let p={start:o,end:c,inclusiveEnd:u,exclusiveStart:l,values:!f,transaction:t,reverse:r};return f?h.getRange(p):h.getRange(p).map(({value:T})=>T)}function IE(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 bu(e){if(!e)return;let t=new bE,r,s,n,i,o;for(;r=og.exec(e);){i=og.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=QF[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 NE,lt,jr,ag,og,QF,zF,bE,yu=Se(()=>{NE=C(W()),lt=C(xe()),jr=require("ordered-binary"),ag=require("lmdb"),og=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,QF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(yE,"idsForCondition");zF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(IE,"filterByType");a(Zr,"attributeComparator");a(bu,"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 UE={};je(UE,{CONTEXT:()=>Ae,ID_PROPERTY:()=>ae,IS_COLLECTION:()=>Cs,RECORD_PROPERTY:()=>ce,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Eg,snake_case:()=>XF});function XF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function cg(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new CE(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[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[Eg]=!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 Iu(o.user);return typeof l?.then=="function"?l.then(p=>e(E,u,o,p)):e(E,u,o,l)});if(!f)throw new Iu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function Tr(e,t){let r=new dg.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 wE(e){let t=e[ce];if(t){let r=e[ft];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function ug(e){if(typeof e=="string")return t=>wE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=wE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=wE(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 lg,_g,dg,Ae,ae,Cs,Eg,ce,JF,ht,Iu,CE,Xr=Se(()=>{lg=require("crypto");sa();_g=require("../index"),dg=C(W());Nu();Gn();yu();Ae=Symbol.for("context"),ae=Symbol.for("primary-key"),Cs=Symbol("is-collection"),Eg=Symbol("save-updates"),ce=Symbol("stored-record"),JF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=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=pr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=ug(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=pr(function(t,r,s,n){if(Array.isArray(n)&&t[Cs]){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):Tr(t,"put")},{hasContent:!0,type:"update"});static delete=pr(function(t,r,s,n){return t.delete?t.delete(r):Tr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,lg.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):Tr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=pr(function(t,r,s,n){return t.invalidate?t.invalidate(r):Tr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=pr(function(t,r,s,n){return t[ae]!=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):Tr(t,"connect")},{type:"read"});static subscribe=pr(function(t,r,s,n){return t.subscribe?t.subscribe(r):Tr(t,"subscribe")},{type:"read"});static publish=pr(function(t,r,s,n){return t[ae]!=null&&t.update(),t.publish?t.publish(n,r):Tr(t,"publish")},{hasContent:!0,type:"create"});static search=pr(function(t,r,s,n){let i=t.search?t.search(s):Tr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=ug(o);return i.map(c)}return i},{type:"read"});static query=pr(function(t,r,s,n){return t.search?t.search(n,r):Tr(t,"search")},{hasContent:!0,type:"read"});static copy=pr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):Tr(t,"copy")},{type:"create"});static move=pr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):Tr(t,"move")},{type:"delete"});post(t){if(this[Cs])return this.constructor.create(this[ae],t,this[Ae]);Tr(this,"post")}static isCollection(t){return t?.[Cs]}static coerceId(t){return t}static parseQuery(t){return bu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&JF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:cg(t,this)}}return cg(t,this)}static getResource(t,r,s){let n,i=r[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[Cs]=!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[ae]}getContext(){return this[Ae]}};ht.prototype[Ae]=null;(0,_g._assignPackageExport)("Resource",ht);a(XF,"snake_case");Iu=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(cg,"pathToId");CE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(pr,"transactional");a(Tr,"missingMethod");a(wE,"selectFromObject");a(ug,"transformForSelect")});var wu={};je(wu,{server:()=>tt});var fg,tt,es=Se(()=>{fg=require("../index"),tt={};(0,fg._assignPackageExport)("server",tt)});var ME={};je(ME,{loadGQLSchema:()=>jF,start:()=>LE,startOnMainThread:()=>ZF});function LE({ensureTable:e}){return{handleFile:t,setupFile:t};async function t(r,s,n,i){let{parse:o,Source:c,Kind:u,NamedTypeNode:l,StringValueNode:_}=await import("graphql"),d=o(new c(r.toString(),n)),E=new Map,f=[],h;for(let p of d.definitions)switch(p.kind){case u.OBJECT_TYPE_DEFINITION:let $=function(U){if(U.kind==="NonNullType"){let P=$(U.type);return P.nullable=!0,P}return U.kind==="ListType"?{type:"array",elements:$(U.type)}:{type:U.name?.value}};a($,"getProperty");let T=p.name.value,g=[],O={table:null,database:null,properties:g};E.set(T,O);for(let U of p.directives){if(U.name.value==="table"){for(let b of U.arguments)O[b.name.value]=b.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=T),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(U.name.value==="sealed"&&(O.sealed=!0),U.name.value==="export"){O.export=!0;for(let b of U.arguments)b.name.value==="name"&&(O.export={name:b.value.value})}}let k=!1;for(let U of p.fields){let b=$(U.type);b.name=U.name.value,g.push(b);for(let P of U.directives)if(P.name.value==="primaryKey")k?console.warn("Can not define two attributes as a primary key"):(b.isPrimaryKey=!0,k=!0);else if(P.name.value==="indexed")b.indexed=!0;else if(P.name.value==="createdTime")b.assignCreatedTime=!0;else if(P.name.value==="updatedTime")b.assignUpdatedTime=!0;else if(P.name.value==="expiresAt")b.expiresAt=!0;else if(P.name.value==="allow"){let z=b.authorizedRoles=[];for(let F of P.arguments)F.name.value==="role"&&z.push(F.value.value)}}O.typeName=T,T==="Query"&&(h=O)}for(let[p,T]of E)for(let g of T.properties){let O=E.get(g.type);O&&(g.properties=O.properties)}for(let p of f)p.tableClass=e(p),p.export&&i.set((0,DE.dirname)(s)+"/"+(p.export.name||p.typeName),p.tableClass);if(h)for(let p of h.properties){let T=E.get(p.type);if(!T)throw new Error(`${p.type} was not found as a Query export`);i.set((0,DE.dirname)(s)+"/"+p.name,T.tableClass)}}}var DE,ZF,jF,hg=Se(()=>{DE=require("path");de();a(LE,"start");ZF=LE,jF=LE({ensureTable:rt}).handleFile});async function Cu(e){return eq?(oa||(oa=tq(sq)),(await(await oa).import(e)).namespace):import(e)}async function tq(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),oa=new Compartment({console,Math,Date,fetch:rq,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Sg.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:sr,databases:Pe})}};let s=await(0,mg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),oa}function rq(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 sq(){return{Resource:ht,tables:sr}}var mg,Sg,eq,oa,PE=Se(()=>{Xr();de();mg=require("fs/promises"),Sg=require("path"),eq=!1;a(Cu,"secureImport");a(tq,"getCompartment");a(rq,"secureOnlyFetch");a(sq,"getGlobalVars")});var BE={};je(BE,{handleFile:()=>nq});async function nq(e,t,r,s){let n=new Map,i=(0,pg.pathToFileURL)(r).toString(),o=await Cu(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 pg,vE,Tg=Se(()=>{pg=require("url");PE();vE=require("path");a(nq,"handleFile")});var FE={};je(FE,{start:()=>iq});function iq({resources:e}){e.set("login",HE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HE,Rg=Se(()=>{Xr();a(iq,"start");HE=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 GE=m((ore,Og)=>{"use strict";var{Readable:oq}=require("stream"),aq=1e4;Og.exports={streamAsJSON(e){return new qE({value:e})}};var qE=class extends oq{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),gg)}catch(n){yield gg(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);Ag(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>aq?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 Ag(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 gg(e){return console.error(e),JSON.stringify(e.toString())}a(gg,"handleError");function Ag(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Ag,"when")});var Bg=m((ure,vg)=>{"use strict";var xE=require("recursive-iterator"),cq=require("alasql"),kE=require("clone"),Ng=V(),{handleHDBError:bg,hdb_errors:uq}=W(),{HDB_ERROR_MSGS:yg,HTTP_STATUS_CODES:Ig}=uq,{getDatabases:lq}=(de(),re(Ne)),_q=["DISTINCT_ARRAY"],wg=Symbol("validateTables"),VE=Symbol("validateTable"),cre=Symbol("getAllColumns"),Cg=Symbol("validateAllColumns"),Uu=Symbol("findColumn"),Ug=Symbol("validateOrderBy"),aa=Symbol("validateSegment"),$E=Symbol("validateColumn"),Dg=Symbol("setColumnsForTable"),Lg=Symbol("checkColumnsForAsterisk"),Mg=Symbol("validateGroupBy"),Pg=Symbol("hasColumns"),YE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wg](),this[Lg](),this[Cg]()}[wg](){if(this[Pg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[VE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[VE](t.table)})}}[Pg](){let t=!1,r=new xE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[VE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=lq();if(!r[t.databaseid])throw bg(new Error,yg.SCHEMA_NOT_FOUND(t.databaseid),Ig.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw bg(new Error,yg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ig.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=kE(n);i.table=kE(t),this.attributes.push(i)})}[Uu](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)}[Lg](){let t=new xE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Dg](r.tableid)}[Dg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new cq.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Cg](){this[aa](this.statement.columns,!1),this[aa](this.statement.joins,!1),this[aa](this.statement.where,!1),this[Mg](this.statement.group,!1),this[aa](this.statement.order,!0)}[aa](t,r){if(!t)return;let s=new xE(t),n=[];for(let{node:i,path:o}of s)!Ng.isEmpty(i)&&!Ng.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Ug](i):n.push(this[$E](i)));return n}[Mg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&_q.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=kE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Uu](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[Uu](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`}[Ug](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[$E](t)}[$E](t){let r=this[Uu](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]}};vg.exports=YE});var Fg=m((_re,Hg)=>{"use strict";var KE=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")}};Hg.exports=KE});var Gg=m((Ere,qg)=>{"use strict";var WE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qg.exports=WE});var Du=m((hre,xg)=>{"use strict";var zE=Q(),JE=A();zE.initSync();var dq=zE.get(JE.CONFIG_PARAMS.STORAGE_COMPRESSION),Eq=zE.get(JE.CONFIG_PARAMS.STORAGE_CACHING)!==!1,fq=JE.UPDATES_PROPERTY,QE=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=dq&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=Eq&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===fq)}};xg.exports=QE});var Mu=m((Sre,Vg)=>{"use strict";var Pi=Q(),ca=A();Pi.initSync();var hq=Pi.get(ca.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Pi.get(ca.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Pi.get(ca.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kg=Pi.get(ca.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),mq=Pi.get(ca.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Lu=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=hq,this.noFSAccess=!0,kg!==void 0&&(this.overlappingSync=kg),this.noReadAhead=mq}};Vg.exports=Lu;Lu.MAX_DBS=1e4});var ye=m((Tre,jg)=>{"use strict";var ZE=require("lmdb"),Pr=require("fs-extra"),nr=require("path"),Pu=vt(),Kg=x(),Bt=rr().LMDB_ERRORS_ENUM,vu=Gg(),jE=Du(),Wg=Mu(),cn=xe(),$g=A(),{table:Sq,resetDatabases:pq}=(de(),re(Ne)),Yg=Q(),vr=cn.INTERNAL_DBIS_NAME,Qg=cn.DBI_DEFINITION_NAME,Tq="data.mdb",Rq="lock.mdb",ua=".mdb",gq="-lock",XE=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Rr(t,r),this.key_type=this.dbi[cn.DBI_DEFINITION_NAME].key_type,this.is_hash_attribute=this.dbi[cn.DBI_DEFINITION_NAME].is_hash_attribute,this.txn=t.beginTxn({readOnly:s===!1}),this.cursor=new ZE.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bu(e,t){if(e===void 0)throw new Error(Bt.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Bt.ENV_NAME_REQUIRED)}a(Bu,"pathEnvNameValidation");async function ef(e,t,r=!0){try{await Pr.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Bt.INVALID_BASE_PATH):s}try{let s=nr.join(e,t+ua);return await Pr.access(s,Pr.constants.R_OK|Pr.constants.F_OK),s}catch(s){if(s.code==="ENOENT")if(r)try{return await Pr.access(nr.join(e,t,Tq),Pr.constants.R_OK|Pr.constants.F_OK),nr.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Bt.INVALID_ENVIRONMENT)}else throw new Error(Bt.INVALID_ENVIRONMENT);throw s}}a(ef,"validateEnvironmentPath");function Hu(e,t){if(Pu.validateEnv(e),t===void 0)throw new Error(Bt.DBI_NAME_REQUIRED)}a(Hu,"validateEnvDBIName");async function Aq(e,t,r=!1,s=!1){Bu(e,t);let n=nr.basename(e);t=t.toString();let i=Yg.get($g.CONFIG_PARAMS.SCHEMAS);i||Yg.setProperty($g.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ef(e,t,s),zg(e,t,r)}catch(o){if(o.message===Bt.INVALID_ENVIRONMENT){let c=nr.join(e,t);await Pr.mkdirp(s?c:e);let u=new Wg(s?c:c+ua,!1),l=ZE.open(u);l.dbis=Object.create(null);let _=new jE(!1);l.openDB(vr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=tf(e,t,r);return l[cn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Aq,"createEnvironment");async function Oq(e,t,r,s=!0){Bu(e,t),t=t.toString();let n=nr.join(e,t);return Sq({table:t,database:nr.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(Oq,"copyEnvironment");async function zg(e,t,r=!1){Bu(e,t),t=t.toString();let s=tf(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ef(e,t),i=nr.join(e,t+ua),o=n!=i,c=new Wg(n,o),u=ZE.open(c);u.dbis=Object.create(null);let l=Xg(u);for(let _=0;_<l.length;_++)Rr(u,l[_]);return u[cn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(zg,"openEnvironment");async function Nq(e,t,r=!1){Bu(e,t),t=t.toString();let s=nr.join(e,t+ua),n=await ef(e,t);if(global.lmdb_map!==void 0){let i=tf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Jg(o),delete global.lmdb_map[i]}}await Pr.remove(n),await Pr.remove(n===s?n+gq:nr.join(nr.dirname(n),Rq))}a(Nq,"deleteEnvironment");async function Jg(e){Pu.validateEnv(e);let t=e[cn.ENVIRONMENT_NAME_KEY];await e.close(),t!==void 0&&global.lmdb_map!==void 0&&delete global.lmdb_map[t]}a(Jg,"closeEnvironment");function tf(e,t,r=!1){let n=`${nr.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(tf,"getCachedEnvironmentName");function bq(e){Pu.validateEnv(e);let t=Object.create(null),r=Rr(e,vr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==vr)try{t[s]=Object.assign(new vu,n)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(bq,"listDBIDefinitions");function Xg(e){Pu.validateEnv(e);let t=[],r=Rr(e,vr);for(let{key:s}of r.getRange({start:!1}))s!==vr&&t.push(s);return t}a(Xg,"listDBIs");function yq(e,t){let s=Rr(e,vr).getEntry(t),n=new vu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(yq,"getDBIDefinition");function Zg(e,t,r,s=!r){if(Hu(e,t),t=t.toString(),t===vr)throw new Error(Bt.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Rr(e,t)}catch(n){if(n.message===Bt.DBI_DOES_NOT_EXIST){let i=new jE(r,s===!0),o=e.openDB(t,i),c=new vu(r===!0,s);return o[Qg]=c,Rr(e,vr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Zg,"createDBI");function Rr(e,t){if(Hu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==vr?r=yq(e,t):r=new vu,r===void 0)throw new Error(Bt.DBI_DOES_NOT_EXIST);let s;try{let n=new jE(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(Bt.DBI_DOES_NOT_EXIST):n}return s[Qg]=r,e.dbis[t]=s,s}a(Rr,"openDBI");function Iq(e,t){Hu(e,t),t=t.toString();let r=Rr(e,t),s=r.getStats();return r[cn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Iq,"statDBI");async function wq(e,t){try{let r=nr.join(e,t+ua);return(await Pr.stat(r)).size}catch{throw new Error(Bt.INVALID_ENVIRONMENT)}}a(wq,"environmentDataSize");function Cq(e,t){if(Hu(e,t),t=t.toString(),t===vr)throw new Error(Bt.CANNOT_DROP_INTERNAL_DBIS_NAME);Rr(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Rr(e,vr).removeSync(t)}a(Cq,"dropDBI");function Uq(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Rr(e,i)}catch(o){if(o.message===Bt.DBI_DOES_NOT_EXIST)Zg(e,i,i!==t,i===t),s=!0;else throw o}}s&&pq()}a(Uq,"initializeDBIs");jg.exports={openDBI:Rr,openEnvironment:zg,createEnvironment:Aq,listDBIs:Xg,listDBIDefinitions:bq,createDBI:Zg,dropDBI:Cq,statDBI:Iq,deleteEnvironment:Nq,initializeDBIs:Uq,TransactionCursor:XE,environmentDataSize:wq,copyEnvironment:Oq,closeEnvironment:Jg}});var tA=m((gre,eA)=>{"use strict";var rf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};eA.exports=rf});var sA=m((Ore,rA)=>{"use strict";var sf=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}};rA.exports=sf});var iA=m((bre,nA)=>{"use strict";var nf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};nA.exports=nf});var vi=m((Ure,cA)=>{"use strict";var Dq=ye(),Lq=tA(),Mq=sA(),Pq=iA(),ts=vt(),la=rr().LMDB_ERRORS_ENUM,vq=xe(),Us=A(),Bq=V(),Hq=require("uuid"),Ire=require("lmdb"),{handleHDBError:Fq,hdb_errors:qq}=W(),{OVERFLOW_MARKER:wre,MAX_SEARCH_KEY_LENGTH:Cre}=vq,oA=Q();oA.initSync();var Fu=oA.get(Us.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),of=Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME,xn=Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function Gq(e,t,r,s,n=ts.getNextMonotonicTime()){lf(e,t,r,s),af(e,t,r);let i=new Lq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];aA(l,!0,n);let _=xq(e,t,r,l),d=l[t];o.push(_),c.push(d)}return cf(o,c,s,i,n)}a(Gq,"insertRecords");function xq(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][Us.FUNC_VAL],s[o]=c)}let u=ts.getIndexedValues(c),l=e.dbis[o];if(u){Fu&&l.prefetch(u.map(_=>({key:_,value:n})),qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Fu&&e.dbis[t].prefetch([n],qu),e.dbis[t].put(n,s,s[xn])})}a(xq,"insertRecord");function kq(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a(kq,"removeSkippedRecords");function aA(e,t,r){let s=r>0;(s||!Number.isInteger(e[xn]))&&(e[xn]=r||(r=ts.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[of]))&&(e[of]=r||ts.getNextMonotonicTime()):delete e[of]}a(aA,"setTimestamps");function af(e,t,r){r.indexOf(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME)<0&&r.push(Us.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.indexOf(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)<0&&r.push(Us.TIME_STAMP_NAMES_ENUM.UPDATED_TIME),Dq.initializeDBIs(e,t,r)}a(af,"initializeTransaction");async function Vq(e,t,r,s,n=ts.getNextMonotonicTime()){lf(e,t,r,s),af(e,t,r);let i=new Mq,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=uf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return cf(c,u,s,i,n,o)}a(Vq,"updateRecords");async function $q(e,t,r,s,n=ts.getNextMonotonicTime()){try{lf(e,t,r,s)}catch(u){throw Fq(u,u.message,qq.HTTP_STATUS_CODES.BAD_REQUEST)}af(e,t,r);let i=new Pq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Bq.isEmpty(l[t])?(_=Hq.v4(),l[t]=_):_=l[t];let d=uf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return cf(o,c,s,i,n)}a($q,"upsertRecords");async function cf(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(),kq(r,i),s}a(cf,"finalizeWrite");function uf(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(aA(r,!_,o),Number.isInteger(r[xn])&&l[xn]>r[xn])return!1;_&&n.original_records.push(l);let d,E=a(()=>{for(let h in r){if(!r.hasOwnProperty(h)||h===t)continue;let p=r[h],T=e.dbis[h];if(T===void 0)continue;let g=l[h];if(typeof p=="function"){let k=p([[l]]);Array.isArray(k)&&(p=k[0][Us.FUNC_VAL],r[h]=p)}if(p===g)continue;let O=ts.getIndexedValues(g);if(O){Fu&&T.prefetch(O.map(k=>({key:k,value:s})),qu);for(let k=0,$=O.length;k<$;k++)T.remove(O[k],s)}if(O=ts.getIndexedValues(p),O){Fu&&T.prefetch(O.map(k=>({key:k,value:s})),qu);for(let k=0,$=O.length;k<$;k++)T.put(O[k],s)}}let f=Object.assign({},l,r);c.put(s,f,f[xn])},"do_put");return u?d=c.ifVersion(s,u.version,E):d=c.ifNoExists(s,E),d.then(f=>f?!0:uf(e,t,r,s,n,i,o))}a(uf,"updateUpsertRecord");function Yq(e,t,r){if(ts.validateEnv(e),t===void 0)throw new Error(la.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(la.WRITE_ATTRIBUTES_REQUIRED):new Error(la.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Yq,"validateBasic");function lf(e,t,r,s){if(Yq(e,t,r),!Array.isArray(s))throw s===void 0?new Error(la.RECORDS_REQUIRED):new Error(la.RECORDS_MUST_BE_ARRAY)}a(lf,"validateWrite");function qu(){}a(qu,"noop");cA.exports={insertRecords:Gq,updateRecords:Vq,upsertRecords:$q}});var kn=m((Lre,Kq)=>{Kq.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((Mre,_A)=>{"use strict";var lA=V(),uA=A(),Bi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,Ds=require("joi"),un={schema_format:{pattern:Bi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},Wq=Ds.alternatives(Ds.string().min(1).max(un.schema_length.maximum).pattern(Bi).messages({"string.pattern.base":"{:#label} "+un.schema_format.message}),Ds.number()).required(),Qq=Ds.alternatives(Ds.string().min(1).max(un.schema_length.maximum).pattern(Bi).messages({"string.pattern.base":"{:#label} "+un.schema_format.message}),Ds.number()),zq=Ds.alternatives(Ds.string().min(1).max(un.schema_length.maximum).pattern(Bi).messages({"string.pattern.base":"{:#label} "+un.schema_format.message}),Ds.number()).required();function Jq(e,t){return t?typeof t!="string"?`'${e}' must be a string`:t.length?t.length>un.schema_length.maximum?`'${e}' maximum of 250 characters`:Bi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Jq,"checkValidTable");function Xq(e,t){return lA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(Xq,"validateSchemaExists");function Zq(e,t){let r=t.state.ancestors[0].schema;return lA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(Zq,"validateTableExists");function jq(e,t){return e.toLowerCase()===uA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${uA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(jq,"validateSchemaName");_A.exports={common_validators:un,schema_regex:Bi,hdb_schema_table:Wq,validateSchemaExists:Xq,validateTableExists:Zq,validateSchemaName:jq,checkValidTable:Jq,hdb_database:Qq,hdb_table:zq}});var ve=m((vre,dA)=>{"use strict";var Ht=require("validate.js");Ht.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ht.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ht.validators.type.checks={Object:function(e){return Ht.isObject(e)&&!Ht.isArray(e)},Array:Ht.isArray,Integer:Ht.isInteger,Number:Ht.isNumber,String:Ht.isString,Date:Ht.isDate,Boolean:function(e){return typeof e=="boolean"}};Ht.validators.hasValidFileExt=function(e,t){return Ht.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};dA.exports={validateObject:eG,validateObjectAsync:tG,validateBySchema:rG};function eG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ht(e,t,{format:"flat"});return r?new Error(r):null}a(eG,"validateObject");async function tG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ht.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(tG,"validateObjectAsync");function rG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(rG,"validateBySchema")});var Gu=m((Hre,EA)=>{var{common_validators:ss}=rs(),da=ve(),_a="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 Ea(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(Ea,"makeAttributesStrings");function sG(e){return e=Ea(e),Ke.table.presence=!1,Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,da.validateObject(e,Ke)}a(sG,"schema_object");function nG(e){return e=Ea(e),Ke.table.presence={message:_a},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,da.validateObject(e,Ke)}a(nG,"table_object");function iG(e){return e=Ea(e),Ke.table.presence={message:_a},Ke.attribute.presence=!1,da.validateObject(e,Ke)}a(iG,"create_table_object");function oG(e){return e=Ea(e),Ke.table.presence={message:_a},Ke.attribute.presence={message:_a},Ke.hash_attribute.presence=!1,da.validateObject(e,Ke)}a(oG,"attribute_object");function aG(e){return e=Ea(e),Ke.table.presence={message:_a},Ke.attribute.presence=!1,Ke.hash_attribute.presence=!1,da.validateObject(e,Ke)}a(aG,"describe_table");function cG(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(cG,"validateTableResidence");EA.exports={schema_object:sG,create_table_object:iG,table_object:nG,attribute_object:oG,describe_table:aG,validateTableResidence:cG}});var hA=m((qre,fA)=>{"use strict";var uG=require("uuid"),_f=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||uG.v4(),this.schema_table=`${this.schema}.${this.table}`}};fA.exports=_f});var xu=m((xre,mA)=>{"use strict";var lG=hA(),df=class extends lG{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}};mA.exports=df});var pA=m((Vre,SA)=>{"use strict";SA.exports=dG;var _G="inserted";function dG(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===_G?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(dG,"returnObject")});var ku=m((Yre,OA)=>{"use strict";var EG=A(),Ef=ye(),fG=vi(),{getSystemSchemaPath:hG,getSchemaPath:mG}=we(),SG=kn(),pG=Gu(),TG=xu(),RG=pA(),{handleHDBError:TA,hdb_errors:gA}=W(),RA=V(),{HTTP_STATUS_CODES:gG}=gA,ff=SG.hdb_attribute,AA=[];for(let e=0;e<ff.attributes.length;e++)AA.push(ff.attributes[e].attribute);var AG="inserted";OA.exports=OG;async function OG(e){let t=pG.attribute_object(e);if(t)throw TA(new Error,t.message,gA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&RA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw TA(new Error,r,gG.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=RA.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 TG(e.schema,e.table,e.attribute,e.id);try{let i=await Ef.openEnvironment(mG(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}`);Ef.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ef.openEnvironment(hG(),EG.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await fG.insertRecords(o,ff.hash_attribute,AA,[n]);return RG(AG,c,{records:[n]},u)}catch(i){throw i}}a(OG,"lmdbCreateAttribute")});var mf=m((Wre,bA)=>{var{hdb_table:NG,hdb_database:NA}=rs(),bG=ve(),hf=require("joi"),yG={undefined:"undefined",null:"null"},IG=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||yG[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"),wG=hf.object({database:NA,schema:NA,table:NG,records:hf.array().items(hf.object().custom(IG)).required()});bA.exports=function(e){return bG.validateBySchema(e,wG)}});var fa=m((Jre,IA)=>{"use strict";var Ls=V(),yA=x(),zre=mf(),{getDatabases:CG}=(de(),re(Ne)),{ClientError:Vn}=W();IA.exports=UG;function UG(e){if(Ls.isEmpty(e))throw new Vn("invalid update parameters defined.");if(Ls.isEmptyOrZeroLength(e.schema))throw new Vn("invalid schema specified.");if(Ls.isEmptyOrZeroLength(e.table))throw new Vn("invalid table specified.");if(!Array.isArray(e.records))throw new Vn("records must be an array");let t=CG()[e.schema]?.[e.table];if(Ls.isEmpty(t))throw new Vn(`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&&Ls.isEmptyOrZeroLength(o[r]))throw yA.error("a valid hash attribute must be provided with update record:",o),new Vn("a valid hash attribute must be provided with update record, check log for more info");if(!Ls.isEmptyOrZeroLength(o[r])&&(o[r]==="null"||o[r]==="undefined"))throw yA.error(`a valid hash value must be provided with ${e.operation} record:`,o),new Vn(`Invalid hash value: '${o[r]}' is not a valid hash attribute value, check log for more info`);!Ls.isEmpty(o[r])&&o[r]!==""&&s.has(Ls.autoCast(o[r]))&&(o.skip=!0),s.add(Ls.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(UG,"insertUpdateValidate")});var ha=m((Zre,wA)=>{"use strict";var DG=A().OPERATIONS_ENUM,Sf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=DG.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};wA.exports=Sf});var Ta=m((tse,CA)=>{"use strict";var ese=ha(),Vu=A(),Tf=V(),pf=x(),LG=require("uuid"),{handleHDBError:ma,hdb_errors:MG}=W(),{HDB_ERROR_MSGS:Sa,HTTP_STATUS_CODES:pa}=MG;CA.exports=PG;function PG(e,t,r){for(let n=0;n<t.length;n++)vG(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];BG(i,r,e.operation)}}a(PG,"processRows");function vG(e){if(Buffer.byteLength(String(e))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw ma(new Error,Sa.ATTR_NAME_LENGTH_ERR(e),pa.BAD_REQUEST,void 0,void 0,!0);if(Tf.isEmptyOrZeroLength(e)||Tf.isEmpty(e.trim()))throw ma(new Error,Sa.ATTR_NAME_NULLISH_ERR,pa.BAD_REQUEST,void 0,void 0,!0)}a(vG,"validateAttribute");function BG(e,t,r){if(!e.hasOwnProperty(t)||Tf.isEmptyOrZeroLength(e[t])){if(r===Vu.OPERATIONS_ENUM.INSERT||r===Vu.OPERATIONS_ENUM.UPSERT){e[t]=LG.v4();return}throw pf.error("Update transaction aborted due to record with no hash value:",e),ma(new Error,Sa.RECORD_MISSING_HASH_ERR,pa.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw pf.error(e),ma(new Error,Sa.HASH_VAL_LENGTH_ERR,pa.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw pf.error(e),ma(new Error,Sa.INVALID_FORWARD_SLASH_IN_HASH_ERR,pa.BAD_REQUEST,void 0,void 0,!0)}a(BG,"validateHash")});var DA=m((sse,UA)=>{"use strict";var Rf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UA.exports=Rf});var PA=m((ise,MA)=>{"use strict";var gf=ye(),HG=x(),LA=rr().LMDB_ERRORS_ENUM;MA.exports=FG;async function FG(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 gf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await gf.closeEnvironment(global.lmdb_map[s]),await gf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LA.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){HG.error(t)}}a(FG,"cleanLMDBMap")});var Ms=m((ase,FA)=>{"use strict";var Ra=require("crypto"),qG=Q(),{CONFIG_PARAMS:GG}=A(),BA="aes-256-cbc",xG=32,kG=16,Af=64,HA=32,VG=Af+HA,vA=new Map;FA.exports={encrypt:$G,decrypt:YG,createNatsTableStreamName:KG};function $G(e){let t=Ra.randomBytes(xG),r=Ra.randomBytes(kG),s=Ra.createCipheriv(BA,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($G,"encrypt");function YG(e){let t=e.substr(0,Af),r=e.substr(Af,HA),s=e.substr(VG,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=Ra.createDecipheriv(BA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(YG,"decrypt");function KG(e,t){let r=qG.get(GG.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=vA.get(r);return s||(s=Ra.createHash("md5").update(r).digest("hex"),vA.set(r,s)),s}a(KG,"createNatsTableStreamName")});var $n=m((lse,GA)=>{"use strict";var use=gr(),$u=x(),qA=Gu(),WG=Ms(),Yu=V(),{handleHDBError:Ku,hdb_errors:QG}=W(),{HDB_ERROR_MSGS:Wu,HTTP_STATUS_CODES:Of}=QG,zG=Q();zG.initSync();var{getDatabases:Nf}=(de(),re(Ne));GA.exports={describeAll:JG,describeTable:Qu,describeSchema:XG};async function JG(e){try{let t=Yu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Nf(),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 Qu({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 Qu({schema:l,table:d},f)}E&&c.push(E)}catch(E){$u.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 $u.error("Got an error in describeAll"),$u.error(t),Ku(new Error,Wu.DESCRIBE_ALL_ERR)}}a(JG,"describeAll");async function Qu(e,t){Yu.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=qA.describe_table(e);if(i)throw i;let c=Nf()[r];if(!c)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Of.NOT_FOUND);let u=c[s];if(!u)throw Ku(new Error,Wu.TABLE_NOT_FOUND(e.schema,e.table),Of.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=WG.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){$u.warn(`unable to stat table dbi due to ${d}`)}return _}a(Qu,"descTable");async function XG(e){Yu.transformReq(e);let t=qA.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=Nf()[s];if(!i)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Of.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yu.isEmpty(u)||u.describe){let l=await Qu({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(XG,"describeSchema")});var ln=m((fse,YA)=>{var ZG=kn(),{callbackify:kA,promisify:jG}=require("util"),{getDatabases:VA}=(de(),re(Ne));YA.exports={setSchemaDataToGlobal:xA,getTableSchema:ex,getSystemSchema:tx,setSchemaDataToGlobalAsync:jG(xA)};var $A=$n(),dse=kA($A.describeAll),Ese=kA($A.describeTable);function xA(e){global.hdb_schema=VA(),e&&e()}a(xA,"setSchemaDataToGlobal");function ex(e,t,r){let s=VA()[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(ex,"getTableSchema");function tx(){return ZG}a(tx,"getSystemSchema")});var Ar=m((mse,zA)=>{"use strict";var Ju=mf(),mt=V(),rx=require("util"),Xu=Br(),sx=ln(),KA=x(),{handleHDBError:Yn,hdb_errors:nx}=W(),{HTTP_STATUS_CODES:Kn}=nx,ix=rx.promisify(sx.getTableSchema),ox="updated",WA="inserted",QA="upserted";zA.exports={insert:cx,update:ux,upsert:lx,validation:ax,flush:_x};async function ax(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ix(e.schema,e.table),r=Ju(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&mt.isEmptyOrZeroLength(c[s]))throw KA.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(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw KA.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.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(ax,"validation");async function cx(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ju(e);if(t)throw Yn(new Error,t.message,Kn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yn(new Error,r,Kn.BAD_REQUEST);let s=await Xu.createRecords(e);return zu(WA,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(cx,"insertData");async function ux(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ju(e);if(t)throw Yn(new Error,t.message,Kn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yn(new Error,r,Kn.BAD_REQUEST);let s=await Xu.updateRecords(e);return mt.isEmpty(s.existing_rows)?zu(ox,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zu(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(ux,"updateData");async function lx(e){if(e.operation!=="upsert")throw Yn(new Error,"invalid operation, must be upsert",Kn.INTERNAL_SERVER_ERROR);let t=Ju(e);if(t)throw Yn(new Error,t.message,Kn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Yn(new Error,r,Kn.BAD_REQUEST);let s=await Xu.upsertRecords(e);return zu(QA,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(lx,"upsertData");function zu(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===WA?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===QA?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zu,"returnObject");function _x(e){return mt.transformReq(e),Xu.flush(e.schema,e.table)}a(_x,"flush")});var yf=m((pse,ZA)=>{var dx=ve(),bf=require("joi"),{hdb_table:Ex,hdb_database:JA}=rs(),XA={schema:JA,database:JA,table:Ex},fx={date:bf.date().iso().required()},hx={timestamp:bf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ZA.exports=function(e,t){let r=t==="timestamp"?{...XA,...hx}:{...XA,...fx},s=bf.object(r);return dx.validateBySchema(e,s)}});var tO=m((Tse,eO)=>{var mx=ve(),If=require("joi"),{hdb_table:Sx,hdb_database:jA}=rs(),px=If.object({schema:jA,database:jA,table:Sx,hash_values:If.array().required(),ids:If.array()});eO.exports=function(e){return mx.validateBySchema(e,px)}});var sO=m((Rse,rO)=>{"use strict";var wf=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}},Cf=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}},Uf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rO.exports={InsertObject:wf,NoSQLSeachObject:Cf,DeleteResponseObject:Uf}});var zn=m((Ase,cO)=>{"use strict";var iO=yf(),Tx=tO(),Wn=V(),nO=require("moment"),oO=x(),{promisify:Rx,callbackify:gx}=require("util"),Qn=A(),Ax=ln(),Df=Rx(Ax.getTableSchema),Lf=Br(),{DeleteResponseObject:Ox}=sO(),{handleHDBError:_n,hdb_errors:Nx}=W(),{HDB_ERROR_MSGS:Zu,HTTP_STATUS_CODES:dn}=Nx,bx="records successfully deleted",yx=gx(aO);cO.exports={delete:yx,deleteRecord:aO,deleteFilesBefore:Ix,deleteAuditLogsBefore:wx};async function Ix(e){let t=iO(e,"date");if(t)throw _n(t,t.message,dn.BAD_REQUEST,void 0,void 0,!0);if(Wn.transformReq(e),!nO(e.date,nO.ISO_8601).isValid())throw _n(new Error,Zu.INVALID_DATE,dn.BAD_REQUEST,Qn.LOG_LEVELS.ERROR,Zu.INVALID_DATE,!0);let s=Wn.checkSchemaTableExist(e.schema,e.table);if(s)throw _n(new Error,s,dn.NOT_FOUND,Qn.LOG_LEVELS.ERROR,s,!0);let n=await Lf.deleteRecordsBefore(e);if(await Df(e.schema,e.table),oO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Ix,"deleteFilesBefore");async function wx(e){let t=iO(e,"timestamp");if(t)throw _n(t,t.message,dn.BAD_REQUEST,void 0,void 0,!0);if(Wn.transformReq(e),isNaN(e.timestamp))throw _n(new Error,Zu.INVALID_VALUE("Timestamp"),dn.BAD_REQUEST,Qn.LOG_LEVELS.ERROR,Zu.INVALID_VALUE("Timestamp"),!0);let r=Wn.checkSchemaTableExist(e.schema,e.table);if(r)throw _n(new Error,r,dn.NOT_FOUND,Qn.LOG_LEVELS.ERROR,r,!0);let s=await Lf.deleteAuditLogsBefore(e);return await Df(e.schema,e.table),oO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(wx,"deleteAuditLogsBefore");async function aO(e){e.ids&&(e.hash_values=e.ids);let t=Tx(e);if(t)throw _n(t,t.message,dn.BAD_REQUEST,void 0,void 0,!0);Wn.transformReq(e);let r=Wn.checkSchemaTableExist(e.schema,e.table);if(r)throw _n(new Error,r,dn.NOT_FOUND,Qn.LOG_LEVELS.ERROR,r,!0);try{await Df(e.schema,e.table);let s=await Lf.deleteRecords(e);return Wn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${bx}`),s}catch(s){if(s.message===Qn.SEARCH_NOT_FOUND_MESSAGE){let n=new Ox;return n.message=Qn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(aO,"deleteRecord")});var ju=m((Nse,_O)=>{var Cx=require("crypto"),uO=9;function Ux(e){let t=Lx(uO),r=lO(e+t);return t+r}a(Ux,"createHash");function Dx(e,t){let r=e.substr(0,uO),s=r+lO(t+r);return e===s}a(Dx,"validateHash");function Lx(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(Lx,"generateSalt");function lO(e){return Cx.createHash("md5").update(e).digest("hex")}a(lO,"md5");_O.exports={hash:Ux,validate:Dx}});var EO=m((yse,dO)=>{var Mf=ve(),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 Mx(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Mf.validateObject(e,It)}a(Mx,"addUserValidation");function Px(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Mf.validateObject(e,It)}a(Px,"alterUserValidation");function vx(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Mf.validateObject(e,It)}a(vx,"dropUserValidation");dO.exports={addUserValidation:Mx,alterUserValidation:Px,dropUserValidation:vx}});var Be=m((Cse,hO)=>{"use strict";var{platform:wse}=require("os"),Bx="nats-server.zip",Pf="nats-server",Hx=process.platform==="win32"?`${Pf}.exe`:Pf,vf="HDB",Fx=/^[^\s.,*>]+$/,fO="__request__",qx=a(e=>`${e}.${fO}`,"REQUEST_SUBJECT"),Gx={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},xx={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},kx={HUB:"hub.pid",LEAF:"leaf.pid"},Vx={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},$x={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vf,deliver_subject:"__HDB__.WORKQUEUE"},Yx={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vf,deliver_subject:"HDB.SCHEMAQUEUE"},Kx={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vf,deliver_subject:"HDB.USERQUEUE"},Wx={SUCCESS:"success",ERROR:"error"},Qx={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},zx={TXN:"txn",MSGID:"msgid"},Hi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Jx={[Hi.ERR]:1,[Hi.WRN]:2,[Hi.INF]:3,[Hi.DBG]:4,[Hi.TRC]:5},Xx={debug:"-D",trace:"-DVV"};hO.exports={NATS_SERVER_ZIP:Bx,NATS_SERVER_NAME:Pf,NATS_BINARY_NAME:Hx,PID_FILES:kx,NATS_CONFIG_FILES:xx,SERVER_SUFFIX:Vx,WORK_QUEUE_CONSUMER_NAMES:$x,SCHEMA_QUEUE_CONSUMER_NAMES:Yx,USER_QUEUE_CONSUMER_NAMES:Kx,NATS_TERM_CONSTRAINTS_RX:Fx,REQUEST_SUFFIX:fO,UPDATE_REMOTE_RESPONSE_STATUSES:Wx,CLUSTER_STATUS_STATUSES:Qx,REQUEST_SUBJECT:qx,SUBJECT_PREFIXES:zx,MSG_HEADERS:Gx,LOG_LEVELS:Hi,LOG_LEVEL_FLAGS:Xx,LOG_LEVEL_HIERARCHY:Jx}});var SO=m((Dse,mO)=>{"use strict";var Zx={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))},jx="certificate.pem",ek="privateKey.pem",tk="ca.pem";mO.exports={CERTIFICATE_VALUES:Zx,CERTIFICATE_PEM_NAME:jx,PRIVATEKEY_PEM_NAME:ek,CA_PEM_NAME:tk}});var Hf=m((Mse,OO)=>{"use strict";var gO=require("fs-extra"),ee=require("joi"),rk=require("os"),{boolean:pe,string:vs,number:ir,array:Bf}=ee.types(),{totalmem:pO}=require("os"),Fi=require("path"),sk=x(),tl=V(),Lse=SO(),TO=A(),nk=ve(),RO="log",ik="components",ok="Invalid logging.rotation.maxSize unit. Available units are G, M or K",ak="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",ck="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",uk="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",lk="rootPath config parameter is undefined",_k="clustering.enabled config parameter is undefined",Ps=ir.min(0).required(),rl=Bf.items({host:vs.required(),port:Ps}).empty(null),Bs;OO.exports={configValidator:dk,routesValidator:pk,route_constraints:rl};function dk(e){if(Bs=e.rootPath,tl.isEmpty(Bs))throw lk;let t=pe.required(),r=ee.valid("production","development").required(),s=ir.min(0).max(1e3).empty(null).default(Sk),n=vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),i=ee.custom(Ek).messages({"any.custom":"{:#label} {:#error}"}),o=vs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=ee.string().empty(null).default(el),u=ee.custom(fk).empty(null).default(el),l=e.clustering?.enabled;if(tl.isEmpty(l))throw _k;let _;return l===!0?_=ee.object({enabled:t,hubServer:ee.object({cluster:ee.object({name:ee.required().empty(null),network:ee.object({port:Ps,routes:rl}).required()}).required(),leafNodes:ee.object({network:ee.object({port:Ps}).required()}).required(),network:ee.object({port:Ps}).required()}).required(),leafServer:ee.object({network:ee.object({port:Ps,routes:rl}).required(),streams:ee.object({maxAge:ir.min(120).allow(null).optional(),maxBytes:ir.min(1).allow(null).optional(),maxMsgs:ir.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:vs.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:ir.required(),enableSessions:pe,operationTokenTimeout:ee.required(),refreshTokenTimeout:ee.required()}),analytics:ee.object({aggregatePeriod:ir}),clustering:_,customFunctions:ee.object({enabled:t,network:ee.object({cors:pe.required(),corsAccessList:Bf.required(),headersTimeout:ir.min(1).required(),https:pe.required(),keepAliveTimeout:ir.min(1).required(),port:Ps,timeout:ir.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:vs.custom(mk).optional().empty(null),maxSize:vs.custom(hk).optional().empty(null),path:vs.optional().empty(null).default(el)}).required(),root:n,stdStreams:pe.required(),auditLog:pe.required()}).required(),operationsApi:ee.object({foreground:pe.required(),network:ee.object({cors:pe.required(),corsAccessList:Bf.required(),headersTimeout:ir.min(1).required(),https:pe.required(),keepAliveTimeout:ir.min(1).required(),port:Ps,timeout:ir.min(1).required()}).required(),nodeEnv:r,tls:ee.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:ee.object({network:ee.object({port:Ps,securePort:Ps}).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(dk,"configValidator");function AO(e){return gO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AO,"doesPathExist");function Ek(e,t){if(e===null)return;let r=AO(e);return r?t.message(r):e}a(Ek,"validatePemFile");function fk(e,t){ee.assert(e,vs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AO(e);if(r)return t.message(r)}a(fk,"validatePath");function hk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ok);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(ck):e}a(hk,"validateRotationMaxSize");function mk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(ak);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(uk):e}a(mk,"validateRotationInterval");function Sk(e,t){let r=t.state.path.join("."),s=rk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||pO();return i=Math.round(Math.min(i,pO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),sk.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(Sk,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(Bs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return Fi.join(Bs,ik);case"logging.root":return Fi.join(Bs,RO);case"clustering.leafServer.streams.path":return Fi.join(Bs,"clustering","leaf");case"storage.path":let s=Fi.join(Bs,TO.LEGACY_DATABASES_DIR_NAME);return gO.existsSync(s)?s:Fi.join(Bs,TO.DATABASES_DIR_NAME);case"logging.rotation.path":return Fi.join(Bs,RO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function pk(e){let t=ee.object({routes:rl});return nk.validateBySchema({routes:e},t)}a(pk,"routesValidator")});var Nr=m((Bse,MO)=>{"use strict";var Or=A(),_t=V(),st=x(),{configValidator:Tk,routesValidator:NO}=Hf(),Ft=require("fs-extra"),Rk=require("yaml"),Hr=require("path"),gk=require("is-number"),yO=require("properties-reader"),Ak=require("lodash"),{handleHDBError:Ok}=W(),{HTTP_STATUS_CODES:Nk,HDB_ERROR_MSGS:sl}=rr(),vse=require("minimist"),{server:bk}=(es(),re(wu)),{SCHEMAS_PARAM_CONFIG:ga,CONFIG_PARAMS:En,CONFIG_PARAM_MAP:Hs}=Or,yk="Unable to get config value because config is uninitialized",Ik="Config successfully initialized",wk="Error backing up config file",Ck="Empty parameter sent to getConfigValue",IO=Hr.join(Or.PACKAGE_ROOT,"config","yaml",Or.HDB_DEFAULT_CONFIG_FILE),Uk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",bO={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"},nl,St;MO.exports={createConfigFile:Dk,getDefaultConfig:Lk,getConfigValue:CO,initConfig:UO,flattenConfig:Xn,updateConfigValue:DO,updateConfigObject:Pk,getConfiguration:Hk,setConfiguration:Fk,readConfigFile:Gf,getClusteringRoutes:qk,initOldConfig:LO,getConfigFromFile:Gk,getConfigFilePath:Jn,addConfig:xk,deleteConfigFromFile:kk};function Dk(e){let t=fn(IO);nl=Xn(t.toJSON());let r;for(let o in e){let c=Hs[o.toLowerCase()];if(c===En.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=Ff(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&wO(t,r),qf(t);let s=t.toJSON();St=Xn(s);let n=t.getIn(["rootPath"]),i=Hr.join(n,Or.HDB_CONFIG_FILE);Ft.createFileSync(i),Ft.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(Dk,"createConfigFile");function wO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(ga.TABLES))for(let i in s[n][ga.TABLES])for(let o in s[n][ga.TABLES][i]){let c=s[n][ga.TABLES][i][o],u=[En.SCHEMAS,n,ga.TABLES,i,o];e.hasIn(u)?e.setIn(u,c):e.addIn(u,c)}else for(let i in s[n]){let o=s[n][i],c=[En.SCHEMAS,n,i];e.hasIn(c)?e.setIn(c,o):e.addIn(c,o)}}}catch(s){st.error("Error parsing schemas CLI/env config arguments",s)}}a(wO,"setSchemasConfig");function Lk(e){if(nl===void 0){let r=fn(IO);nl=Xn(r.toJSON())}let t=Hs[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(Lk,"getDefaultConfig");function CO(e){if(e==null){st.error(Ck);return}if(St===void 0){st.trace(yk);return}let t=Hs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(CO,"getConfigValue");function Jn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?Hr.join(t,Or.HDB_CONFIG_FILE):yO(e).get(Or.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(Jn,"getConfigFilePath");function UO(e=!1){if(St===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{Ft.accessSync(t,Ft.constants.F_OK|Ft.constants.R_OK)}catch(i){throw st.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=Jn(t),s;if(r.includes("config/settings.js"))try{LO(r);return}catch(i){if(i.code!==Or.NODE_ERROR_CODES.ENOENT)throw i}try{s=fn(r)}catch(i){if(i.code===Or.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}`)}Mk(s,r),qf(s);let n=s.toJSON();if(bk.config=n,St=Xn(n),St.logging_rotation_rotate)for(let i in bO)St[i]&&st.error(`Config ${bO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(Ik)}}a(UO,"initConfig");function Mk(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],Hr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],Hr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],Hr.join(r,"log")),s=!0),e.hasIn(["clustering","tls","verify"])||(e.setIn(["clustering","tls","verify"],!0),s=!0),s&&(st.trace("Updating config file with missing config params"),Ft.writeFileSync(t,String(e)))}a(Mk,"checkForUpdatedConfig");function qf(e){let t=e.toJSON(),r=Tk(t);if(r.error)throw sl.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(qf,"validateConfig");function Pk(e,t){St===void 0&&(St={});let r=Hs[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(Pk,"updateConfigObject");function DO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&UO();let o=CO(Hs.hdb_root),c=Hr.join(o,Or.HDB_CONFIG_FILE),u=fn(c),l;if(r===void 0&&e.toLowerCase()===En.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=Hs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Ff(E,t);u.setIn([...f],h)}else for(let E in r){let f=Hs[E.toLowerCase()];if(f===En.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),p=Ff(f,r[E]);f==="rootPath"&&p?.endsWith("/")&&(p=p.slice(0,-1));try{u.setIn([...h],p)}catch(T){st.error(T)}}}l&&wO(u,l),qf(u);let _=u.getIn(["rootPath"]),d=Hr.join(_,Or.HDB_CONFIG_FILE);s===!0&&vk(c,_),Ft.writeFileSync(d,String(u)),n&&(St=Xn(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(DO,"updateConfigValue");function vk(e,t){try{let r=Hr.join(t,"backup",`${Or.HDB_CONFIG_FILE}.bak`);Ft.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(wk),st.error(r)}}a(vk,"backupConfigFile");var Bk=["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])&&!Bk.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 Ff(e,t){if(e===En.CLUSTERING_NODENAME||e===En.CLUSTERING_USER){if(!isNaN(t))return t.toString();if(typeof t=="string"&&t.toLowerCase()==="true"||typeof t=="string"&&t.toLowerCase()==="false")return t}else{if(gk(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return _t.autoCast(t)}a(Ff,"castConfigValue");function Hk(){let e=_t.getPropsFilePath(),t=Jn(e);return fn(t).toJSON()}a(Hk,"getConfiguration");async function Fk(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return DO(void 0,void 0,n,!0),Uk}catch(i){throw typeof i=="string"||i instanceof String?Ok(i,i,Nk.BAD_REQUEST,void 0,void 0,!0):i}}a(Fk,"setConfiguration");function Gf(){let e=_t.getPropsFilePath();try{Ft.accessSync(e,Ft.constants.F_OK|Ft.constants.R_OK)}catch(s){if(!_t.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=Jn(e);return fn(t).toJSON()}a(Gf,"readConfigFile");function fn(e){return Rk.parseDocument(Ft.readFileSync(e,"utf8"),{simpleKeys:!0})}a(fn,"parseYamlDoc");function qk(){let e=Gf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=NO(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=NO(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(qk,"getClusteringRoutes");function LO(e){let t=yO(e);St={};for(let r in Hs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=Hs[r].toLowerCase();n===En.LOGGING_ROOT?St[n]=Hr.dirname(s):St[n]=s}return St}a(LO,"initOldConfig");function Gk(e){let t=Gf();return Ak.get(t,e.replaceAll("_","."))}a(Gk,"getConfigFromFile");async function xk(e,t){let r=fn(Jn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await Ft.writeFile(Jn(),String(r))}a(xk,"addConfig");function kk(e){let t=Jn(_t.getPropsFilePath()),r=fn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=Hr.join(s,Or.HDB_CONFIG_FILE);Ft.writeFileSync(n,String(r))}a(kk,"deleteConfigFromFile")});var vO=m((Fse,PO)=>{"use strict";var il=A(),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}},xf=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}};PO.exports={BaseLicense:ol,ExtendedLicense:xf}});var Aa=m((Gse,xO)=>{"use strict";var Gi=require("fs-extra"),BO=ju(),HO=require("crypto"),Vk=require("moment"),$k=require("uuid").v4,wt=x(),Vf=require("path"),Yk=V(),hn=A(),Kk=vO().ExtendedLicense,qi="invalid license key format",Wk="061183",Qk="mofi25",zk="aes-256-cbc",Jk=16,Xk=32,FO=Q();FO.initSync();var kf;xO.exports={validateLicense:qO,generateFingerPrint:jk,licenseSearch:GO,getLicense:rV};function $f(){return Vf.join(FO.getHdbBasePath(),hn.LICENSE_KEY_DIR_NAME,hn.LICENSE_FILE_NAME)}a($f,"getLicenseDirPath");function Zk(){let e=$f();return Vf.join(e,hn.LICENSE_FILE_NAME)}a(Zk,"getLicenseFilePath");function Yf(){let e=$f();return Vf.join(e,hn.REG_KEY_FILE_NAME)}a(Yf,"getFingerPrintFilePath");async function jk(){let e=Yf();try{return await Gi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await eV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(jk,"generateFingerPrint");async function eV(){let e=$k(),t=BO.hash(e),r=Yf();try{await Gi.mkdirp($f()),await Gi.writeFile(r,t)}catch(s){if(s.code==="EEXIST")return t;throw wt.error(`Error writing fingerprint file to ${r}`),wt.error(s),new Error("There was an error generating the fingerprint")}return t}a(eV,"writeFingerprint");function qO(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=Yf(),n=!1;try{n=Gi.statSync(s)}catch(i){wt.error(i)}if(n){let i;try{i=Gi.readFileSync(s,"utf8")}catch{wt.error("error validating this machine in the license"),r.valid_machine=!1;return}let o=e.split(Qk),c=o[1];c=Buffer.concat([Buffer.from(c)],Jk);let u=Buffer.concat([Buffer.from(i)],Xk),l=HO.createDecipheriv(zk,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=tV(o[0],i);if(f)_=f;else throw r.valid_license=!1,r.valid_machine=!1,console.error(qi),wt.error(qi),new Error(qi)}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(qi),wt.error(qi),new Error(qi)}else r.exp_date=_;r.exp_date<Vk().valueOf()&&(r.valid_date=!1),BO.validate(o[1],`${Wk}${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(qO,"validateLicense");function tV(e,t){try{let r=HO.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(tV,"checkOldLicense");function GO(){let e=new Kk,t=[];try{t=Gi.readFileSync(Zk(),"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(Yk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qO(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 kf=e,e}a(GO,"licenseSearch");async function rV(){return kf||await GO(),kf}a(rV,"getLicense")});var br=m((Yse,sN)=>{"use strict";var KO="username is required",WO="nothing to update, must supply active, role or password to update",QO="password cannot be an empty string",zO="If role is specified, it cannot be empty.",JO="active must be true or false";sN.exports={addUser:_V,alterUser:dV,dropUser:fV,getSuperUser:pV,userInfo:hV,listUsers:cl,listUsersExternal:mV,setUsersToGlobal:ki,findAndValidateUser:rN,getClusterUser:TV,USERNAME_REQUIRED:KO,ALTERUSER_NOTHING_TO_UPDATE:WO,EMPTY_PASSWORD:QO,EMPTY_ROLE:zO,ACTIVE_BOOLEAN:JO};var XO=Ar(),sV=zn(),Wf=ju(),ZO=EO(),jO=gr(),Qf=Fs(),or=V(),eN=require("validate.js"),ue=x(),{promisify:nV}=require("util"),zf=Ms(),kO=A(),VO=Be(),iV=Nr(),kse=Q(),Vse=Aa(),oV=kn(),{table:$se}=(de(),re(Ne)),{handleHDBError:ns,hdb_errors:aV}=W(),{HTTP_STATUS_CODES:is,AUTHENTICATION_ERROR_MSGS:Kf,HDB_ERROR_MSGS:xi}=aV,{UserEventMsg:Jf}=Fr(),$O=require("lodash"),{_assignPackageExport:cV}=require("../index");cV("getUser",rN);var tN={username:!0,active:!0,role:!0,password:!0},YO=new Map,al=jO.searchByValue,uV=jO.searchByHash,lV=nV(sV.delete);async function _V(e){let t=eN.cleanAttributes(e,tN),r=ZO.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 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 ns(new Error,xi.ROLE_NAME_NOT_FOUND(t.role),is.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw ns(new Error,xi.DUP_ROLES_FOUND(t.role),is.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=zf.encrypt(t.password)),t.password=Wf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XO.insert(i)}catch(u){throw ue.error("There was an error searching for a user."),ue.error(u),u}ue.debug(o);try{await ki()}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,xi.USER_ALREADY_EXISTS(t.username),is.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Qf.signalUserChange(new Jf(process.pid)),`${c.username} successfully added`}a(_V,"addUser");async function dV(e){let t=eN.cleanAttributes(e,tN);if(or.isEmptyOrZeroLength(t.username))throw new Error(KO);if(or.isEmptyOrZeroLength(t.password)&&or.isEmptyOrZeroLength(t.role)&&or.isEmptyOrZeroLength(t.active))throw new Error(WO);if(!or.isEmpty(t.password)&&or.isEmptyOrZeroLength(t.password.trim()))throw new Error(QO);if(!or.isEmpty(t.active)&&!or.isBoolean(t.active))throw new Error(JO);let r=EV(t.username);if(!or.isEmpty(t.password)&&!or.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=zf.encrypt(t.password)),t.password=Wf.hash(t.password)),t.role==="")throw new Error(zO);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=xi.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=xi.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 XO.update(s)}catch(i){throw ue.error("Error during update."),ue.error(i),i}try{await ki()}catch(i){throw ue.error("Got an error setting users to global"),ue.error(i),i}return Qf.signalUserChange(new Jf(process.pid)),n}a(dV,"alterUser");function EV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(EV,"isClusterUser");async function fV(e){try{let t=ZO.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,xi.USER_NOT_EXIST(e.username),is.NOT_FOUND,void 0,void 0,!0);let s;try{s=await lV(r)}catch(n){throw ue.error("Got an error deleting a user."),ue.error(n),n}ue.debug(s);try{await ki()}catch(n){throw ue.error("Got an error setting users to global."),ue.error(n),n}return Qf.signalUserChange(new Jf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(fV,"dropUser");async function hV(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 uV(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(hV,"userInfo");async function mV(){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(mV,"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]=$O.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=$O.cloneDeep(o),o.role=r[o.role],SV(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 SV(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(oV)){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(SV,"appendSystemTablesToRole");async function ki(){try{let e=await cl();global.hdb_users=e}catch(e){throw ue.error(e),e}}a(ki,"setUsersToGlobal");async function rN(e,t,r=!0){global.hdb_users||await ki();let s=global.hdb_users.get(e);if(!s)throw ns(new Error,Kf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw ns(new Error,Kf.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(YO.get(t)===s.password)return n;if(Wf.validate(s.password,t))YO.set(t,s.password);else throw ns(new Error,Kf.GENERIC_AUTH_FAIL,is.UNAUTHORIZED,void 0,void 0,!0)}return n}a(rN,"findAndValidateUser");async function pV(){global.hdb_users||await ki();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(pV,"getSuperUser");async function TV(){let e=await cl(),t=iV.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+VO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VO.SERVER_SUFFIX.ADMIN,r}a(TV,"getClusterUser")});var Na=m((zse,aN)=>{"use strict";var Zn=x(),ar=A(),RV=PA(),Wse=ln(),Qse=$n(),gV=br(),{validateEvent:nN}=Fr(),Oa=Br(),AV=require("process"),{resetDatabases:OV}=(de(),re(Ne)),NV={[ar.ITC_EVENT_TYPES.SCHEMA]:bV,[ar.ITC_EVENT_TYPES.USER]:oN};async function bV(e){let t=nN(e);if(t){Zn.error(t);return}Zn.trace("ITC schemaHandler received schema event:",e),await RV(e.message),await yV(e.message)}a(bV,"schemaHandler");async function yV(e){try{Oa.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Oa.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Oa.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=OV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){Zn.error(t)}}a(yV,"syncSchemaMetadata");var iN=[];async function oN(e){try{try{Oa.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Oa.resetReadTxn(ar.SYSTEM_SCHEMA_NAME,ar.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){Zn.warn(r)}let t=nN(e);if(t){Zn.error(t);return}Zn.trace(`ITC userHandler ${ar.HDB_ITC_CLIENT_PREFIX}${AV.pid} received user event:`,e),await gV.setUsersToGlobal();for(let r of iN)r()}catch(t){Zn.error(t)}}a(oN,"userHandler");oN.addListener=function(e){iN.push(e)};aN.exports=NV});var Fr=m((tne,uN)=>{"use strict";var Xse=x(),Xf=V(),IV=A(),{ITC_ERRORS:ba}=rr(),{parentPort:Zse,threadId:wV,isMainThread:CV,workerData:jse}=require("worker_threads"),{onMessageFromWorkers:UV,broadcast:ene,broadcastWithAcknowledgement:DV}=dt();uN.exports={sendItcEvent:LV,validateEvent:cN,SchemaEventMsg:MV,UserEventMsg:PV};var ul;UV(async(e,t)=>{ul=ul||Na(),cN(e),ul[e.type]&&await ul[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function LV(e){return!CV&&e.message&&(e.message.originator=wV),DV(e)}a(LV,"sendItcEvent");function cN(e){if(typeof e!="object")return ba.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Xf.isEmpty(e.type))return ba.MISSING_TYPE;if(!e.hasOwnProperty("message")||Xf.isEmpty(e.message))return ba.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Xf.isEmpty(e.message.originator))return ba.MISSING_ORIGIN;if(IV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ba.INVALID_EVENT(e.type)}a(cN,"validateEvent");function MV(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(MV,"SchemaEventMsg");function PV(e){this.originator=e}a(PV,"UserEventMsg")});var Fs=m((nne,EN)=>{"use strict";var lN=A(),sne=V(),ll=x(),_N=DA(),Vi,{sendItcEvent:dN}=Fr();function vV(e){try{ll.trace("signalSchemaChange called with message:",e),Vi=Vi||Na();let t=new _N(lN.ITC_EVENT_TYPES.SCHEMA,e);return Vi.schema(t),dN(t)}catch(t){ll.error(t)}}a(vV,"signalSchemaChange");function BV(e){try{ll.trace("signalUserChange called with message:",e),Vi=Vi||Na();let t=new _N(lN.ITC_EVENT_TYPES.USER,e);return Vi.user(t),dN(t)}catch(t){ll.error(t)}}a(BV,"signalUserChange");EN.exports={signalSchemaChange:vV,signalUserChange:BV}});var _l=m((one,hN)=>{"use strict";var fN=V(),HV=A(),FV=x(),qV=ku(),GV=xu(),xV=Fs(),{SchemaEventMsg:kV}=Fr(),VV="already exists in";hN.exports=$V;async function $V(e,t,r){if(fN.isEmptyOrZeroLength(r))return r;let s=[];fN.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 YV(e,t.schema,t.name,i)})),n}a($V,"lmdbCheckForNewAttributes");async function YV(e,t,r,s){let n=new GV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await KV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(VV))FV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(YV,"createNewAttribute");async function KV(e){let t;return t=await qV(e),xV.signalSchemaChange(new kV(process.pid,HV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(KV,"createAttribute")});var $i=m((cne,mN)=>{"use strict";var Zf=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}};mN.exports=Zf});var pN=m((lne,SN)=>{"use strict";var WV=$i(),QV=A().OPERATIONS_ENUM,jf=class extends WV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(QV.INSERT,r,s,n,i),this.records=t}};SN.exports=jf});var RN=m((dne,TN)=>{"use strict";var zV=$i(),JV=A().OPERATIONS_ENUM,eh=class extends zV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(JV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};TN.exports=eh});var AN=m((fne,gN)=>{"use strict";var XV=$i(),ZV=A().OPERATIONS_ENUM,th=class extends XV{static{a(this,"LMDBUpsertTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(ZV.UPSERT,s,n,i,o),this.records=t,this.original_records=r}};gN.exports=th});var NN=m((mne,ON)=>{"use strict";var jV=$i(),e$=A().OPERATIONS_ENUM,rh=class extends jV{static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(e$.DELETE,s,n,t,i),this.original_records=r}};ON.exports=rh});var ya=m((Tne,wN)=>{"use strict";var pne=require("path"),bN=ye(),t$=pN(),r$=RN(),s$=AN(),n$=NN(),Yi=xe(),yN=V(),{CONFIG_PARAMS:i$}=A(),IN=Q();IN.initSync();var dl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:o$}=we();wN.exports=a$;async function a$(e,t){if(IN.get(i$.LOGGING_AUDITLOG)===!1)return;let r=o$(e.schema,e.table),s=await bN.openEnvironment(r,e.table,!0),n=c$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){bN.initializeDBIs(s,Yi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,Yi.TRANSACTIONS_DBIS);let i=n.timestamp;return await s.dbis[Yi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].ifNoExists(i,()=>{s.dbis[Yi.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP].put(i,n),yN.isEmpty(n.user_name)||s.dbis[Yi.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].put(n.user_name,i);for(let o=0;o<n.hash_values.length;o++)s.dbis[Yi.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].put(n.hash_values[o],i)})}}a(a$,"writeTransaction");function c$(e,t){let r=yN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===dl.INSERT)return new t$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPDATE)return new r$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPSERT)return new s$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.DELETE)return new n$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(c$,"createTransactionObject")});var sh=m((Ane,CN)=>{"use strict";var u$=fa(),gne=ha(),Ia=A(),l$=Ta(),_$=vi().insertRecords,d$=ye(),E$=x(),f$=_l(),{getSchemaPath:h$}=we(),m$=ya();CN.exports=S$;async function S$(e){try{let{schema_table:t,attributes:r}=u$(e);l$(e,r,t.hash_attribute),e.schema!==Ia.SYSTEM_SCHEMA_NAME&&(r.includes(Ia.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ia.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ia.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ia.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await f$(e.hdb_auth_header,t,r),n=h$(e.schema,e.table),i=await d$.openEnvironment(n,e.table),o=await _$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await m$(e,o)}catch(c){E$.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(S$,"lmdbCreateRecords")});var LN=m((Nne,DN)=>{"use strict";var UN=A(),p$=sh(),T$=ha(),R$=require("fs-extra"),{getSchemaPath:g$}=we();DN.exports=A$;async function A$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new T$(UN.SYSTEM_SCHEMA_NAME,UN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await p$(r),await R$.mkdirp(g$(e.schema))}a(A$,"lmdbCreateSchema")});var PN=m((yne,MN)=>{"use strict";var nh=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}};MN.exports=nh});var FN=m((Dne,HN)=>{"use strict";var vN=ye(),ih=vt(),oh=rr().LMDB_ERRORS_ENUM,O$=xe(),BN=x(),wne=V(),N$=require("lmdb"),b$=PN(),y$=A(),{OVERFLOW_MARKER:Cne,MAX_SEARCH_KEY_LENGTH:Une}=O$,I$=y$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function w$(e,t,r,s){if(ih.validateEnv(e),t===void 0)throw new Error(oh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(oh.IDS_REQUIRED):new Error(oh.IDS_MUST_BE_ITERABLE);try{let n=vN.listDBIs(e);vN.initializeDBIs(e,t,n);let i=new b$,o,c=[],u=[];for(let E=0,f=r.length;E<f;E++)try{o=r[E];let h=e.dbis[t].get(o);if(!h||s&&h[I$]>s){i.skipped.push(o);continue}let p=e.dbis[t].ifVersion(o,N$.IF_EXISTS,()=>{e.dbis[t].remove(o);for(let T=0;T<n.length;T++){let g=n[T];if(!h.hasOwnProperty(g)||g===t)continue;let O=e.dbis[g],k=h[g];if(k!=null)try{let $=ih.getIndexedValues(k);if($)for(let U=0,b=$.length;U<b;U++)O.remove($[U],o)}catch{BN.warn(`cannot delete from attribute: ${g}, ${k}:${o}`)}}});c.push(p),u.push(o),i.original_records.push(h)}catch(h){BN.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=ih.getNextMonotonicTime(),i}catch(n){throw n}}a(w$,"deleteRecords");HN.exports={deleteRecords:w$}});var wa=m((Mne,GN)=>{"use strict";var Ki=V(),C$=FN(),U$=ye(),{getSchemaPath:D$}=we(),L$=ya(),M$=x();GN.exports=P$;async function P$(e,t=!0){let s=global.hdb_schema[e.schema][e.table].hash_attribute;if(Ki.isEmpty(s))throw new Error(`could not retrieve hash attribute for schema:${e.schema} and table ${e.table}`);try{if(Ki.isEmptyOrZeroLength(e.hash_values)&&!Ki.isEmptyOrZeroLength(e.records)){e.hash_values=[];for(let c=0;c<e.records.length;c++){let u=e.records[c][s];Ki.isEmpty(u)||e.hash_values.push(u)}}if(Ki.isEmptyOrZeroLength(e.hash_values))return qN([],[]);if(!Array.isArray(e.hash_values))throw new Error("hash_values must be an array");if(Ki.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=D$(e.schema,e.table),i=await U$.openEnvironment(n,e.table),o=await C$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await L$(e,o)}catch(c){M$.error(`unable to write transaction due to ${c.message}`)}return qN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(P$,"lmdbDeleteRecords");function qN(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(qN,"createDeleteResponse")});var ch=m((Bne,xN)=>{"use strict";var v$=A(),vne=vt();function ah(e,t){let r=Object.create(null);if(t.length===1&&v$.SEARCH_WILDCARDS.indexOf(t[0])>=0)Object.assign(r,e);else for(let s=0;s<t.length;s++){let n=t[s],i=e[n];r[n]=i===void 0?null:i}return r}a(ah,"parseRow");function B$(e,t,r,s){let n=ah(r,e);s.push(n)}a(B$,"searchAll");function H$(e,t,r,s){let n=ah(r,e);s[t]=n}a(H$,"searchAllToMap");function F$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(F$,"iterateDBI");function jn(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(jn,"pushResults");function q$(e,t,r,s,n,i){t.toString().endsWith(e)&&jn(t,r,s,n,i)}a(q$,"endsWith");function G$(e,t,r,s,n,i){t.toString().includes(e)&&jn(t,r,s,n,i)}a(G$,"contains");function x$(e,t,r,s,n,i){t>e&&jn(t,r,s,n,i)}a(x$,"greaterThanCompare");function k$(e,t,r,s,n,i){t>=e&&jn(t,r,s,n,i)}a(k$,"greaterThanEqualCompare");function V$(e,t,r,s,n,i){t<e&&jn(t,r,s,n,i)}a(V$,"lessThanCompare");function $$(e,t,r,s,n,i){t<=e&&jn(t,r,s,n,i)}a($$,"lessThanEqualCompare");xN.exports={parseRow:ah,searchAll:B$,searchAllToMap:H$,iterateDBI:F$,endsWith:q$,contains:G$,greaterThanCompare:x$,greaterThanEqualCompare:k$,lessThanCompare:V$,lessThanEqualCompare:$$,pushResults:jn}});var Wi=m((xne,QN)=>{"use strict";var mn=ye(),Fne=x(),cr=vt(),El=xe(),ke=rr().LMDB_ERRORS_ENUM,qne=V(),Y$=A(),fl=ch(),{parseRow:K$}=fl,Gne=require("lmdb"),{OVERFLOW_MARKER:kN,MAX_SEARCH_KEY_LENGTH:W$}=El;function VN(e,t,r,s=!1,n=void 0,i=void 0){return ei(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(VN,"iterateFullIndex");function Ca(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return ei(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(k=>({value:k}))):d.getRange(O)})}a(Ca,"iterateRangeBetween");function ei(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(ei,"setupTransaction");function $N(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($N,"getOverflowCheck");function Q$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return ei(e,t,t,(o,c,u)=>(hl(r),r=Ua(u,r),c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}).map(l=>K$(l.value,r))))}a(Q$,"searchAll");function z$(e,t,r,s=!1,n=void 0,i=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);hl(r),r=Ua(e.database||e,r);let o=new Map;for(let{key:c,value:u}of VN(e,t,t,s,n,i))o.set(c,fl.parseRow(u,r));return o}a(z$,"searchAllToMap");function J$(e,t,r=!1,s=void 0,n=void 0){if(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=VN(e,void 0,t,r,s,n),c=o.transaction,u=$N(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(J$,"iterateDBI");function X$(e,t){if(cr.validateEnv(e),t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);return mn.statDBI(e,t).entryCount}a(X$,"countAll");function Z$(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,t,r,(c,u,l,_)=>(s=cr.convertKeyValueToWrite(s),_===r?u.get(s,{transaction:c,lazy:!0})===void 0?[]:[{key:s,value:s}]:u.getValues(s,{transaction:c,reverse:n,limit:i,offset:o}).map(d=>({key:s,value:d}))))}a(Z$,"equals");function j$(e,t,r){return Sn(e,t,r),mn.openDBI(e,t).getValuesCount(r)}a(j$,"count");function eY(e,t,r,s,n=!1,i=void 0,o=void 0){return Sn(e,r,s),ei(e,null,r,(c,u)=>{s=cr.convertKeyValueToWrite(s);let l=!0;typeof s=="number"&&(l=!1);let _;if(n===!0){let d;for(let E of u.getKeys({transaction:c,start:s}))if(!E.startsWith(s)){d=E;break}return d!==void 0&&(Number.isInteger(o)?o++:i++),_=u.getRange({transaction:c,start:d,end:void 0,reverse:n,limit:i,offset:o}).map(E=>{let{key:f}=E;if(f!==d){if(f.toString().startsWith(s))return E;if(l===!0)return _.DONE}}),_.filter(E=>E)}else return _=u.getRange({transaction:c,start:s,reverse:n,limit:i,offset:o}).map(d=>{if(d.key.toString().startsWith(s))return d;if(l===!0)return _.DONE}),l?_:_.filter(d=>d)})}a(eY,"startsWith");function tY(e,t,r,s,n=!1,i=void 0,o=void 0){return YN(e,t,r,s,n,i,o,!0)}a(tY,"endsWith");function YN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return Sn(e,r,s),ei(e,null,r,(u,l,_,d)=>{let E=$N(_,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(p=>{let T=E(f,p);if(c?T.endsWith(s):T.includes(s))return{key:T,value:p}}).filter(p=>p):(c?h.endsWith(s):h.includes(s))?l[El.DBI_DEFINITION_NAME].is_hash_attribute?{key:f,value:f}:l.getValues(f,{transaction:u}).map(p=>({key:f,value:p})):[]}).slice(o,i===void 0?void 0:i+(o||0))})}a(YN,"contains");function rY(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),Ca(e,t,r,s,u,n,i,o,!0,!1)}a(rY,"greaterThan");function sY(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),Ca(e,t,r,s,u,n,i,o,!1,!1)}a(sY,"greaterThanEqual");function nY(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),Ca(e,t,r,u,s,n,i,o,!1,!0)}a(nY,"lessThan");function iY(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),Ca(e,t,r,u,s,n,i,o,!1,!1)}a(iY,"lessThanEqual");function oY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(cr.validateEnv(e),r===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(ke.START_VALUE_REQUIRED);if(n===void 0)throw new Error(ke.END_VALUE_REQUIRED);if(s=cr.convertKeyValueToWrite(s),n=cr.convertKeyValueToWrite(n),s>n)throw new Error(ke.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ca(e,t,r,s,n,i,o,c)}a(oY,"between");function aY(e,t,r,s){cr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(hl(r),r=Ua(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(aY,"searchByHash");function cY(e,t,r){cr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(ke.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(cY,"checkHashExists");function uY(e,t,r,s,n=[]){return WN(e,t,r,s,n),KN(e,t,r,s,n).map(i=>i[1])}a(uY,"batchSearchByHash");function lY(e,t,r,s,n=[]){WN(e,t,r,s,n);let i=new Map;for(let[o,c]of KN(e,t,r,s,n))i.set(o,c);return i}a(lY,"batchSearchByHashToMap");function KN(e,t,r,s,n=[]){return ei(e,t,t,(i,o,c)=>{r=Ua(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(KN,"batchHashSearch");function WN(e,t,r,s,n){if(cr.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(WN,"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(cr.validateEnv(e),t===void 0)throw new Error(ke.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(ke.SEARCH_VALUE_REQUIRED);if(r?.length>W$)throw new Error(ke.SEARCH_VALUE_TOO_LARGE)}a(Sn,"validateComparisonFunctions");function Ua(e,t){return t.length===1&&Y$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=mn.listDBIs(e)),t}a(Ua,"setGetWholeRowAttributes");QN.exports={searchAll:Q$,searchAllToMap:z$,count:j$,countAll:X$,equals:Z$,startsWith:eY,endsWith:tY,contains:YN,searchByHash:aY,setGetWholeRowAttributes:Ua,batchSearchByHash:uY,batchSearchByHashToMap:lY,checkHashExists:cY,iterateDBI:J$,greaterThan:rY,greaterThanEqual:sY,lessThan:nY,lessThanEqual:iY,between:oY}});var Qi=m((Vne,jN)=>{var zN=require("lodash"),JN=ve(),Ce=require("joi"),_Y=V(),{hdb_schema_table:ml,checkValidTable:XN,hdb_table:ZN,hdb_database:Sl}=rs(),{handleHDBError:dY,hdb_errors:EY}=W(),{getDatabases:fY}=(de(),re(Ne)),{HTTP_STATUS_CODES:hY}=EY,mY=Ce.object({database:Sl,schema:Sl,table:ZN,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)}),SY=Ce.object({database:Sl,schema:Sl,table:ZN,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()});jN.exports=function(e,t){let r=null;switch(t){case"value":r=JN.validateBySchema(e,mY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(XN("database",e.schema)),i(XN("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=JN.validateBySchema(e,SY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=_Y.checkGlobalSchemaTable(e.schema,e.table);if(n)return dY(new Error,n,hY.NOT_FOUND);let o=fY()[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=zN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!zN.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 uh=m((Yne,eb)=>{"use strict";var pY=ye(),TY=Qi(),{getSchemaPath:RY}=we();eb.exports=gY;function gY(e){let t=TY(e,"hashes");if(t)throw t;let r=RY(e.schema,e.table);return pY.openEnvironment(r,e.table)}a(gY,"initialize")});var lh=m((Wne,tb)=>{"use strict";var AY=Wi(),OY=uh();tb.exports=NY;async function NY(e){let t=await OY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return AY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(NY,"lmdbGetDataByHash")});var zi=m((zne,rb)=>{"use strict";var _h=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rb.exports=_h});var nb=m((Zne,sb)=>{"use strict";var Xne=zi(),bY=Wi(),yY=uh();sb.exports=IY;async function IY(e){let t=await yY(e),r=global.hdb_schema[e.schema][e.table];return bY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(IY,"lmdbSearchByHash")});var os=m((eie,ib)=>{"use strict";var dh=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=_}};ib.exports=dh});var pl=m((rie,_b)=>{"use strict";var Ct=Wi(),wY=ye(),CY=V(),ie=xe(),ti=A(),UY=kn(),ob=rr().LMDB_ERRORS_ENUM,{getSchemaPath:DY}=we(),qs=ti.SEARCH_WILDCARDS;async function LY(e,t,r){let s;e.schema===ti.SYSTEM_SCHEMA_NAME?s=UY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lb(e,s.hash_attribute,r,t);return cb(e,n,s.hash_attribute,r)}a(LY,"prepSearch");async function cb(e,t,r,s){let n=DY(e.schema,e.table),i=await wY.openEnvironment(n,e.table),o=ub(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(MY(e,r)===!1){let _=e.search_attribute;if(_===r)return s?ab(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ab(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(cb,"executeSearch");function ub(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(ub,"searchByType");function ab(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ab,"createMapFromIterable");function MY(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(MY,"checkToFetchMore");function lb(e,t,r,s){if(CY.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),qs.indexOf(n)>-1)return r===!0?ie.SEARCH_TYPES.SEARCH_ALL_TO_MAP:ie.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(qs[0])<0&&n.indexOf(qs[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(qs.indexOf(i)>=0&&qs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),ie.SEARCH_TYPES.CONTAINS;if(qs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),ie.SEARCH_TYPES.ENDS_WITH;if(qs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),ie.SEARCH_TYPES.STARTS_WITH;if(n.includes(qs[0])||n.includes(qs[1]))return ie.SEARCH_TYPES.EQUALS;throw new Error(ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ti.VALUE_SEARCH_COMPARATORS.BETWEEN:return ie.SEARCH_TYPES.BETWEEN;case ti.VALUE_SEARCH_COMPARATORS.GREATER:return ie.SEARCH_TYPES.GREATER_THAN;case ti.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return ie.SEARCH_TYPES.GREATER_THAN_EQUAL;case ti.VALUE_SEARCH_COMPARATORS.LESS:return ie.SEARCH_TYPES.LESS_THAN;case ti.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return ie.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ob.UNKNOWN_SEARCH_TYPE)}}a(lb,"createSearchTypeFromSearchObject");_b.exports={executeSearch:cb,createSearchTypeFromSearchObject:lb,prepSearch:LY,searchByType:ub}});var Eb=m((iie,db)=>{"use strict";var nie=os(),PY=Qi(),vY=V(),BY=A(),HY=pl();db.exports=FY;function FY(e,t){if(!vY.isEmpty(t)&&BY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=PY(e,"value");if(s)throw s;let n=!0;return HY.prepSearch(e,t,n)}a(FY,"lmdbGetDataByValue")});var Da=m((cie,fb)=>{"use strict";var aie=os(),qY=Qi(),GY=V(),xY=A(),kY=pl();fb.exports=VY;async function VY(e,t){if(!GY.isEmpty(t)&&xY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=qY(e,"value");if(s)throw s;return kY.prepSearch(e,t,!1)}a(VY,"lmdbSearchByValue")});var mb=m((_ie,hb)=>{"use strict";var lie=xe(),Eh=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}},fh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},hh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hb.exports={SearchByConditionsObject:Eh,SearchCondition:fh,SortAttribute:hh}});var gb=m((hie,Rb)=>{"use strict";var Eie=mb().SearchByConditionsObject,$Y=os(),YY=Qi(),mh=Wi(),Tl=xe(),{Resource:fie}=(Xr(),re(UE)),Tb=pl(),KY=ch(),WY=require("lodash"),{getSchemaPath:QY}=we(),Sb=ye(),{handleHDBError:zY,hdb_errors:JY}=W(),{HTTP_STATUS_CODES:XY}=JY,ZY=1e8;Rb.exports=jY;async function jY(e){let t=YY(e,"conditions");if(t)throw zY(t,t.message,XY.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=QY(e.schema,e.table),s=await Sb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Sb.openDBI(s,l.search_attribute);let i=WY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Tl.SEARCH_TYPES.EQUALS?l.estimated_count=mh.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=ZY}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await pb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Tb.filterByType),d=_.length,E=mh.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=>KY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await pb(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=mh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(jY,"lmdbSearchByConditions");async function pb(e,t,r,s){let n=new $Y(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,Tb.searchByType(e,n,i,s).map(o=>o.value)}a(pb,"executeConditionSearch")});var La=m((Sie,Ab)=>{"use strict";var eK=A().OPERATIONS_ENUM,Sh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=eK.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ab.exports=Sh});var ph=m((Tie,Ub)=>{"use strict";var yb=os(),Ib=La(),wb=Da(),Cb=wa(),qt=A(),Ob=V(),Nb=ye(),{getTransactionAuditStorePath:tK,getSchemaPath:rK}=we(),bb=x();Ub.exports=sK;async function sK(e){try{if(Ob.isEmpty(global.hdb_schema[e.schema])||Ob.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await nK(e),await iK(e);let t=rK(e.schema,e.table);try{await Nb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=tK(e.schema,e.table);await Nb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(sK,"lmdbDropTable");async function nK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Cb(n)}a(nK,"deleteAttributesFromSystem");async function iK(e){let t=new yb(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,qt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await wb(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 Ib(qt.SYSTEM_SCHEMA_NAME,qt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Cb(n)}catch(i){throw i}}a(iK,"dropTableFromSystem")});var Lb=m((gie,Db)=>{"use strict";var oK=require("fs-extra"),aK=os(),cK=zi(),uK=La(),lK=ph(),_K=wa(),dK=lh(),EK=Da(),Gs=A(),{getSchemaPath:fK}=we(),{handleHDBError:hK,hdb_errors:mK}=W(),{HDB_ERROR_MSGS:SK,HTTP_STATUS_CODES:pK}=mK;Db.exports=TK;async function TK(e){let t;try{t=await RK(e.schema);let r=new aK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await EK(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await lK(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new uK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await _K(n);let i=fK(t);await oK.remove(i)}catch(r){throw r}}a(TK,"lmdbDropSchema");async function RK(e){let t=new cK(Gs.SYSTEM_SCHEMA_NAME,Gs.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[Gs.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await dK(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw hK(new Error,SK.SCHEMA_NOT_FOUND(e),pK.NOT_FOUND,void 0,void 0,!0);return s}a(RK,"validateDropSchema")});var Rh=m((Oie,Mb)=>{"use strict";var Th=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Mb.exports=Th});var vb=m((yie,Pb)=>{"use strict";var gK=require("fs-extra"),Rl=ye(),{getTransactionAuditStorePath:AK}=we(),gh=xe(),bie=Rh();Pb.exports=OK;async function OK(e){let t;try{let r=AK(e.schema,e.table);await gK.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,gh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rl.createDBI(t,gh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rl.createDBI(t,gh.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(OK,"createTransactionsAuditEnvironment")});var qb=m((wie,Fb)=>{"use strict";var Ah=A(),Bb=ye(),NK=vi(),{getSystemSchemaPath:bK,getSchemaPath:yK}=we(),IK=kn(),wK=ku(),Oh=xu(),CK=x(),UK=vb(),bh=IK.hdb_table,Hb=[];for(let e=0;e<bh.attributes.length;e++)Hb.push(bh.attributes[e].attribute);Fb.exports=DK;async function DK(e,t){let r=yK(t.schema,t.table),s=new Oh(t.schema,t.table,Ah.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Oh(t.schema,t.table,Ah.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Oh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Bb.createEnvironment(r,t.table),e!==void 0){let o=await Bb.openEnvironment(bK(),Ah.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await NK.insertRecords(o,bh.hash_attribute,Hb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Nh(s),await Nh(n),await Nh(i)}await UK(t)}catch(o){throw o}}a(DK,"lmdbCreateTable");async function Nh(e){try{await wK(e)}catch(t){CK.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Nh,"createAttribute")});var xb=m((Uie,Gb)=>{"use strict";var LK=fa(),MK=Ta(),PK=_l(),Ma=A(),vK=vi().updateRecords,BK=ye(),{getSchemaPath:HK}=we(),FK=ya(),qK=x();Gb.exports=GK;async function GK(e){try{let{schema_table:t,attributes:r}=LK(e);MK(e,r,t.hash_attribute),e.schema!==Ma.SYSTEM_SCHEMA_NAME&&(r.includes(Ma.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||r.push(Ma.TIME_STAMP_NAMES_ENUM.CREATED_TIME),r.includes(Ma.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||r.push(Ma.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let s=await PK(e.hdb_auth_header,t,r),n=HK(e.schema,e.table),i=await BK.openEnvironment(n,e.table),o=await vK(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await FK(e,o)}catch(c){qK.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(GK,"lmdbUpdateRecords")});var Vb=m((Lie,kb)=>{"use strict";var xK=A().OPERATIONS_ENUM,yh=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=yh});var Yb=m((vie,$b)=>{"use strict";var Pie=Vb(),kK=fa(),VK=Ta(),$K=_l(),Pa=A(),YK=vi().upsertRecords,KK=ye(),{getSchemaPath:WK}=we(),QK=ya(),zK=x(),{handleHDBError:JK,hdb_errors:XK}=W();$b.exports=ZK;async function ZK(e){let t;try{t=kK(e)}catch(u){throw JK(u,u.message,XK.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;VK(e,s,r.hash_attribute),e.schema!==Pa.SYSTEM_SCHEMA_NAME&&(s.includes(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME)||s.push(Pa.TIME_STAMP_NAMES_ENUM.CREATED_TIME),s.includes(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME)||s.push(Pa.TIME_STAMP_NAMES_ENUM.UPDATED_TIME));let n=await $K(e.hdb_auth_header,r,s),i=WK(e.schema,e.table),o=await KK.openEnvironment(i,e.table),c=await YK(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await QK(e,c)}catch(u){zK.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(ZK,"lmdbUpsertRecords")});var Wb=m((Hie,Kb)=>{"use strict";var Ih=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Kb.exports=Ih});var zb=m((qie,Qb)=>{"use strict";var wh=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}};Qb.exports=wh});var Zb=m((kie,Xb)=>{"use strict";var Ch=ye(),{getTransactionAuditStorePath:jK}=we(),xie=Wb(),va=xe(),e1=V(),Jb=zb(),t1=require("util").promisify,r1=t1(setTimeout),s1=1e4,n1=100;Xb.exports=i1;async function i1(e){let t=jK(e.schema,e.table),r=await Ch.openEnvironment(t,e.table,!0),s=Ch.listDBIs(r);Ch.initializeDBIs(r,va.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Jb;do n=await o1(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 r1(n1);while(n.transactions_deleted>0);return i}a(i1,"deleteAuditLogsBefore");async function o1(e,t){let r=new Jb;try{let s=e.dbis[va.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[va.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME];e1.isEmpty(c)||(n=e.dbis[va.TRANSACTIONS_DBI_NAMES_ENUM.USER_NAME].remove(c,i));for(let u=0;u<o.hash_values.length;u++)n=e.dbis[va.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE].remove(o.hash_values[u],i);if(r.transactions_deleted++,r.end_timestamp=i,r.transactions_deleted>s1)break}return await n,r}catch(s){throw s}}a(o1,"deleteTransactions")});var ey=m(($ie,jb)=>{"use strict";var Uh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};jb.exports=Uh});var ry=m((Wie,ty)=>{"use strict";var a1=os(),c1=La(),Kie=ey(),as=A(),u1=V(),Dh=ye(),l1=kn(),_1=Da(),d1=wa(),{getSchemaPath:E1}=we();ty.exports=f1;async function f1(e,t=!0){let r;e.schema===as.SYSTEM_SCHEMA_NAME?r=l1[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await m1(e),n=E1(e.schema,e.table),i=await Dh.openEnvironment(n,e.table);return t===!0&&await h1(e,i,r.hash_attribute),Dh.dropDBI(i,e.attribute),s}a(f1,"lmdbDropAttribute");async function h1(e,t,r){let s=Dh.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(h1,"removeAttributeFromAllObjects");async function m1(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 _1(t)).filter(o=>o[as.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(u1.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 c1(as.SYSTEM_SCHEMA_NAME,as.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return d1(i)}a(m1,"dropAttributeFromSystem")});var cy=m((Jie,ay)=>{"use strict";var Lh=ye(),Ji=xe(),zie=vt(),Mh=A(),sy=V(),{getTransactionAuditStorePath:S1}=we(),p1=Wi(),gl=$i(),T1=x();ay.exports=R1;async function R1(e){let t=S1(e.schema,e.table),r=await Lh.openEnvironment(t,e.table,!0),s=Lh.listDBIs(r);Lh.initializeDBIs(r,Ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ny(r,e.search_values);case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,A1(r,e.search_values,n);case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return g1(r,e.search_values);default:return ny(r)}}a(R1,"readAuditLog");function ny(e,t=[0,Date.now()]){sy.isEmpty(t[0])&&(t[0]=0),sy.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 gl,n))}a(ny,"searchTransactionsByTimestamp");function g1(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,oy(e,i))}return Object.fromEntries(r)}a(g1,"searchTransactionsByUsername");function A1(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=p1.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=oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);iy(u,"records",r,_,o),iy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(A1,"searchTransactionsByHashValues");function iy(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(iy,"loopRecords");function oy(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 gl,i);r.push(o)}}catch(i){T1.warn(i)}return r}catch(s){throw s}}a(oy,"batchSearchTransactions")});var ly=m((eoe,uy)=>{"use strict";var{getSchemaPath:Zie}=we(),jie=ye(),{database:O1}=(de(),re(Ne));uy.exports={writeTransaction:N1};async function N1(e,t,r){return O1({database:e,table:t}).transaction(r)}a(N1,"writeTransaction")});var fy=m((roe,Ey)=>{"use strict";var{getSchemaPath:_y}=we(),dy=ye();Ey.exports={flush:b1,resetReadTxn:y1};async function b1(e,t){return(await dy.openEnvironment(_y(e,t),t.toString())).flushed}a(b1,"flush");async function y1(e,t){try{(await dy.openEnvironment(_y(e,t),t.toString())).resetReadTxn()}catch{}}a(y1,"resetReadTxn")});var py=m((noe,Sy)=>{"use strict";var{Readable:I1}=require("stream"),{getDatabases:w1}=(de(),re(Ne)),{readSync:C1,openSync:U1,createReadStream:hy}=require("fs"),{open:D1}=require("lmdb"),my=Du(),L1=Mu(),{INTERNAL_DBIS_NAME:M1}=xe();Sy.exports=v1;var Ph=32768,P1=100;async function v1(e){let t=e.database||e.schema||"data",r=w1()[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=D1({noSync:!0,maxDbs:L1.MAX_DBS}),E,f=d.openDB(M1,new my(!1)),h=_.useReadTransaction(),p=0;for(let{key:g,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(k=>g.startsWith?.(k+"/"))){f.put(g,O);let[,k]=g.split("/"),$=!k,U=new my(!$,$);U.encoding="binary";let b=d.openDB(g,U),P=_.openDB(g,U);for(let{key:z,version:F,value:Oe}of P.getRange({transaction:h,versions:$}))E=b.put(z,Oe,F),p++%P1===0&&await new Promise(Ze=>setTimeout(Ze,20))}await E;let T=hy(d.path);return T.headers=u(),T.on("close",()=>{h.done(),d.close()}),T}let o=r[Object.keys(r)[0]].primaryStore,c=U1(o.path);return o.transaction(()=>{let l=Buffer.alloc(Ph);C1(c,l,0,Ph);let _=o.useReadTransaction(),d=hy(null,{fd:c,start:Ph}),E=new I1.from(async function*(){yield l;for await(let f of d)yield f;_.done()}());return E.headers=u(),E});function u(){let l=new Map;return l.set("content-type","application/octet-stream"),l.set("content-disposition",`attachment; filename="${t}"`),l.set("date",s),l}}a(v1,"getBackup")});var gy=m((ooe,Ry)=>{"use strict";var B1=x(),{handleHDBError:H1}=W(),F1=Fg(),q1=ku(),G1=sh(),x1=LN(),k1=wa(),V1=lh(),$1=nb(),Y1=Eb(),K1=Da(),W1=gb(),Q1=Lb(),z1=qb(),J1=xb(),X1=Yb(),Z1=Zb(),j1=ph(),eW=ry(),tW=cy(),rW=ly(),Ty=fy(),sW=py(),vh=class extends F1{static{a(this,"LMDBBridge")}async searchByConditions(t){return W1(t)}async getDataByHash(t){return await V1(t)}async searchByHash(t){return await $1(t)}async getDataByValue(t,r){return await Y1(t,r)}async searchByValue(t){return await K1(t)}async createSchema(t){return await x1(t)}async dropSchema(t){return await Q1(t)}async createTable(t,r){return await z1(t,r)}async dropTable(t){return await j1(t)}async createAttribute(t){return await q1(t)}async createRecords(t){return await G1(t)}async updateRecords(t){return await J1(t)}async upsertRecords(t){try{return await X1(t)}catch(r){throw H1(r,null,null,B1.ERR,r)}}async deleteRecords(t){return await k1(t)}async dropAttribute(t){return await eW(t)}async deleteAuditLogsBefore(t){return await Z1(t)}async readAuditLog(t){return await tW(t)}writeTransaction(t,r,s){return rW.writeTransaction(t,r,s)}flush(t,r){return Ty.flush(t,r)}resetReadTxn(t,r){return Ty.resetReadTxn(t,r)}getBackup(t){return sW(t)}};Ry.exports=vh});var Uy={};je(Uy,{ResourceBridge:()=>Fh});function qh({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 Oy(e,t){let r=cs(e),s=qh(e,r);if(!r)throw new qr.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&&Ou(u),t?yield{key:c,value:u}:yield u}})}function cs(e){let t=e.database||e.schema||iW,r=Gr()[t];if(!r)throw(0,qr.handleHDBError)(new Error,nW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ny(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*by(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 yy,Al,qr,Iy,wy,xr,Bh,Hh,Cy,nW,iW,oW,aW,Ay,Fh,Dy=Se(()=>{"use strict";yy=C(gy()),Al=C(Qi()),qr=C(W());de();Iy=C(fa()),wy=C(Ta()),xr=C(A()),Bh=C(Fs()),Hh=C(Fr()),Cy=C(V());Gn();Nu();({HDB_ERROR_MSGS:nW}=qr.hdb_errors),iW="data",oW=1e4,aW=10,Fh=class extends yy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ay=this}async searchByConditions(t){let r=(0,Al.default)(t,"conditions");if(r)throw(0,qr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=cs(t);if(!s)throw new qr.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:qh(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 qr.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 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 Ba({database:t.schema,table:null}),Bh.signalSchemaChange(new Hh.SchemaEventMsg(process.pid,xr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Gh(t.schema),Bh.signalSchemaChange(new Hh.SchemaEventMsg(process.pid,xr.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,Ay.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Iy.default)(t);(0,wy.default)(t,s,r.primaryKey);let n,i=Gr()[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=Ou(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=Gr()[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 Ny(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=Gr()[t.schema][t.table];if(!r.createdTimeProperty)throw new qr.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:xr.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,Cy.async_set_timeout)(aW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%oW===0&&await l();return u.length>0&&await l(),n?Ny(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Al.default)(t,"hashes");if(r)throw r;return Oy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Oy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&xr.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=cs(t);if(!n)throw new qr.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===xr.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:qh(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 xr.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 xr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of by(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return by(r,t.search_values?.[0],t.search_values?.[1])}}};a(qh,"getSelect");a(Oy,"getRecords");a(cs,"getTable");a(Ny,"createDeleteResponse");a(by,"groupRecordsInHistory")});var Br=m((doe,Ly)=>{"use strict";var{ResourceBridge:cW}=(Dy(),re(Uy)),uW=Q();uW.initSync();var Ol;function lW(){return Ol||(Ol=new cW,Ol)}a(lW,"getBridge");Ly.exports=lW()});var By=m((foe,vy)=>{"use strict";var My=require("lodash"),Ha=require("mathjs"),_W=require("jsonata"),Py=V();vy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?My.uniqWith(e,My.isEqual):e,searchJSON:dW,mad:Fa.bind(null,Ha.mad),mean:Fa.bind(null,Ha.mean),mode:Fa.bind(null,Ha.mode),prod:Fa.bind(null,Ha.prod),median:Fa.bind(null,Ha.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 dW(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(Py.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Py.isEmpty(this.__ala__.res[r])){let s=_W(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(dW,"searchJSON")});var Fy=m((moe,Hy)=>{"use strict";var We=require("moment"),xh="YYYY-MM-DDTHH:mm:ss.SSSZZ";We.suppressDeprecationWarnings=!0;Hy.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(xh),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(xh),offset_utc:(e,t)=>We(e).utc().utcOffset(t).format(xh)}});var ky=m((Soe,xy)=>{"use strict";var EW=require("@turf/area"),fW=require("@turf/length"),hW=require("@turf/circle"),mW=require("@turf/difference"),SW=require("@turf/distance"),pW=require("@turf/boolean-contains"),TW=require("@turf/boolean-equal"),RW=require("@turf/boolean-disjoint"),gW=require("@turf/helpers"),qy=A(),le=V();xy.exports={geoArea:AW,geoLength:OW,geoCircle:NW,geoDifference:bW,geoDistance:Gy,geoNear:yW,geoContains:IW,geoEqual:wW,geoCrosses:CW,geoConvert:UW};var kh="geo1 is required",Vh="geo2 is required";function AW(e){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),EW.default(e)}a(AW,"geoArea");function OW(e,t){if(le.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),fW.default(e,{units:t||"kilometers"})}a(OW,"geoLength");function NW(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)),hW.default(e,t,{units:r||"kilometers"})}a(NW,"geoCircle");function bW(e,t){if(le.isEmpty(e))throw new Error("poly1 is required");if(le.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),mW(e,t)}a(bW,"geoDifference");function Gy(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)),SW.default(e,t,{units:r||"kilometers"})}a(Gy,"geoDistance");function yW(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 Gy(e,t,s)<=r}a(yW,"geoNear");function IW(e,t){if(le.isEmpty(e))throw new Error(kh);if(le.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),pW.default(e,t)}a(IW,"geoContains");function wW(e,t){if(le.isEmpty(e))throw new Error(kh);if(le.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),TW.default(e,t)}a(wW,"geoEqual");function CW(e,t){if(le.isEmpty(e))throw new Error(kh);if(le.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=le.autoCastJSON(e)),typeof t=="string"&&(t=le.autoCastJSON(t)),!RW.default(e,t)}a(CW,"geoCrosses");function UW(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(qy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qy.GEO_CONVERSION_ENUM).join(",")}`);return gW[t](e,r)}a(UW,"geoConvert")});var Nl=m((Toe,Vy)=>{var ri=By(),ur=Fy(),us=ky();Vy.exports=e=>{e.aggr.mad=e.aggr.MAD=ri.mad,e.aggr.mean=e.aggr.MEAN=ri.mean,e.aggr.mode=e.aggr.MODE=ri.mode,e.aggr.prod=e.aggr.PROD=ri.prod,e.aggr.median=e.aggr.MEDIAN=ri.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ri.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ri.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=ur.current_date,e.fn.current_time=e.fn.CURRENT_TIME=ur.current_time,e.fn.extract=e.fn.EXTRACT=ur.extract,e.fn.date=e.fn.DATE=ur.date,e.fn.date_format=e.fn.DATE_FORMAT=ur.date_format,e.fn.date_add=e.fn.DATE_ADD=ur.date_add,e.fn.date_sub=e.fn.DATE_SUB=ur.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=ur.date_diff,e.fn.now=e.fn.NOW=ur.now,e.fn.offset_utc=e.fn.OFFSET_UTC=ur.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=ur.get_server_time,e.fn.getdate=e.fn.GETDATE=ur.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=ur.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=us.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=us.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=us.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=us.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=us.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=us.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=us.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=us.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=us.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=us.geoNear}});var Wy=m((Roe,Ky)=>{"use strict";var qa=require("lodash"),pt=require("alasql");pt.options.cache=!1;var DW=Nl(),$y=require("clone"),bl=require("recursive-iterator"),se=x(),ne=V(),Xi=Br(),LW=A(),{hdb_errors:MW}=W(),{getDatabases:Yy}=(de(),re(Ne)),PW="IS NULL",kr="There was a problem performing this search. Please check the logs and try again.";DW(pt);var $h=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(kr)}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(kr)}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(kr)}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(kr)}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(kr)}}_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($y(r)))}_getTables(){let t=[];this.all_table_attributes.forEach(r=>{t.push(r.table)}),this.tables=qa.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=Yy()[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(LW.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&&qa.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($y(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(PW)>-1&&this.tables.forEach(n=>{let i={columnid:Yy()[n.databaseid][n.tableid].primaryKey,tableid:n.tableid};this._addFetchColumns([i])}),this.statement.order&&(this._updateOrderByToAliases(),this._addNonAggregatorsToFetchColumns()),this.fetch_attributes=qa.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 Xi.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(kr)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await Xi.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(kr)}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 Xi.getDataByValue(c,f.operation);if(u)for(let[p]of h)this.data[i].__merged_data[p]||(this.data[i].__merged_data[p]=[...s[i]],this._setMergedHashAttribute(i,ne.autoCast(p)));else for(let[p,T]of h)this.data[i].__merged_data[p]?this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]):(this.data[i].__merged_data[p]=[...s[i]],this._updateMergedAttribute(i,p,n.attribute,T[n.attribute]),this._setMergedHashAttribute(i,ne.autoCast(p)))}}catch(_){throw se.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),se.error(_),new Error(kr)}else try{c.search_attribute=n.attribute,c.search_value="*";let _=await Xi.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(kr)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof 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,p=f.as?f.as_orig:f.tableid_orig;o.push({key:`'${p}.${h}'`,schema:f.databaseid_orig,table:f.as?f.as_orig:f.tableid_orig,keys:new Set}),r.push(`${f.as?f.as:f.tableid}.\`${h}\` AS "${p}.${h}"`),c[f.as?f.as_orig:f.tableid_orig]=this.data[`${f.databaseid_orig}_${f.as?f.as_orig:f.tableid_orig}`].__merged_attributes});let u=this.statement.where?"WHERE "+this.statement.where:"",l="";this.statement.order&&!this.has_ordinal&&!this.has_aggregator&&!this.statement.group&&this.statement.limit&&(l="ORDER BY "+this.statement.order.toString(),this.statement.order.forEach(f=>{f.is_func?r.push(f.initial_select_column.toString()):f.initial_select_column.tableid?r.push(`${f.initial_select_column.tableid}.${f.initial_select_column.columnid} AS ${f.expression.columnid}`):r.push(`${f.initial_select_column.columnid} AS ${f.expression.columnid}`)}));let _="",d="";!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(_=this.statement.limit?"LIMIT "+this.statement.limit:"",d=this.statement.offset?"OFFSET "+this.statement.offset:"");let E=[];try{let f=`SELECT ${r.join(", ")} FROM ${i.join(" ")} ${u} ${l} ${_} ${d}`,h=this._convertColumnsToIndexes(f,n);E=await 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 p=E[f];o.forEach(T=>{p[T.key]!==null&&p[T.key]!==void 0&&T.keys.add(p[T.key])})}o.forEach(f=>{let h=Object.keys(this.data[`${f.schema}_${f.table}`].__merged_data),p=qa.difference(h,[...f.keys].map(T=>T.toString()));for(let T=0,g=p.length;T<g;T++){let O=p[T];delete this.data[`${f.schema}_${f.table}`].__merged_data[O]}})}return{existing_attributes:c,joined_length:E?E.length:0}}async _getFinalAttributeData(t,r){if(r===0)return;let s=[],n=new 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=qa.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(kr)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await Xi.getDataByHash(c),l=n.columns.length;for(let _=0,d=o.length;_<d;_++){let E=o[_],f=u.get(E);for(let h=0;h<l;h++){let p=n.columns[h],T=f[p]===void 0?null:f[p];this.data[s].__merged_data[E].push(T)}}}}catch(r){throw 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(MW.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 Xi.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(kr)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ky.exports=$h});var gr=m((Aoe,Qy)=>{"use strict";var vW=Bg();Qy.exports={searchByConditions:HW,searchByHash:FW,searchByValue:qW,search:GW};var Yh=Br(),{transformReq:Kh}=V(),BW=Wy();async function HW(e){return Kh(e),Yh.searchByConditions(e)}a(HW,"searchByConditions");async function FW(e){Kh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Yh.searchByHash(e))r&&t.push(r);return t}a(FW,"searchByHash");async function qW(e){Kh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Yh.searchByValue(e))t.push(r);return t}a(qW,"searchByValue");function GW(e,t){try{let r=new vW(e);r.validate(),new BW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(GW,"search")});var yl=m((Noe,zy)=>{"use strict";var xW=Br();zy.exports={writeTransaction:kW};function kW(e,t,r){return xW.writeTransaction(e,t,r)}a(kW,"writeTransaction")});var jy=m((Ioe,Zy)=>{"use strict";var VW=gr(),$W=ln(),Jy=x(),YW=Ar(),yoe=yl(),KW=require("clone"),Qh=require("alasql"),WW=Nl(),Xy=require("util"),QW=Xy.promisify($W.getTableSchema),zW=Xy.promisify(VW.search),JW=A(),Wh=V();WW(Qh);Zy.exports={update:ZW};var XW="There was a problem performing this update. Please check the logs and try again.";async function ZW({statement:e,hdb_user:t}){let r=await QW(e.table.databaseid,e.table.tableid),s=jW(e.columns);Wh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=KW(n),c=Wh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Qh.parse(u).statements[0],_=await zW(l),d=eQ(s,_);return tQ(o,d,t)}a(ZW,"update");function jW(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Qh.compile(`SELECT ${r.expression.toString()} AS [${JW.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jy.error(t),new Error(XW)}}a(jW,"createUpdateRecord");function eQ(e,t){return Wh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(eQ,"buildUpdateRecords");async function tQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await YW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Jy.error(`Error delete new_attributes from update response: ${i}`)}return n}a(tQ,"updateRecords")});var tI=m((Doe,eI)=>{var rQ=require("alasql"),sQ=gr(),nQ=x(),iQ=Br(),Jh=require("util"),zh=V(),oQ=A(),aQ=ln(),Coe=yl(),Uoe=Ar(),cQ="record",uQ="successfully deleted",lQ=Jh.callbackify(fQ),_Q=Jh.promisify(sQ.search),dQ=Jh.promisify(aQ.getTableSchema);eI.exports={convertDelete:lQ};function EQ(e){return`${e.deleted_hashes.length} ${cQ}${e.deleted_hashes.length===1?"":"s"} ${uQ}`}a(EQ,"generateReturnMessage");async function fQ({statement:e,hdb_user:t}){let r=await dQ(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=rQ.parse(o).statements[0],u={operation:oQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await _Q(c);let l=await iQ.deleteRecords(u);return zh.isEmptyOrZeroLength(l.message)&&(l.message=EQ(l)),delete l.txn_time,l}catch(l){throw nQ.error(l),l.hdb_code?l.message:l}}a(fQ,"convertDelete")});var oI=m((Moe,iI)=>{"use strict";var hQ=$n(),{hdb_errors:rI}=W(),{getDatabases:sI}=(de(),re(Ne));iI.exports={checkSchemaExists:nI,checkSchemaTableExists:mQ,schema_describe:hQ};async function nI(e){if(!sI()[e])return rI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nI,"checkSchemaExists");async function mQ(e,t){let r=await nI(e);if(r)return r;if(!sI()[e][t])return rI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(mQ,"checkSchemaTableExists")});var Ul=m((Boe,lI)=>{"use strict";var Zi=Gu(),ji=oI(),SQ=x(),pQ=require("uuid").v4,voe=require("clone"),wl=Fs(),eo=A(),TQ=require("util"),pn=Br(),{handleHDBError:Gt,hdb_errors:RQ}=W(),{HDB_ERROR_MSGS:Il,HTTP_STATUS_CODES:xt}=RQ,{SchemaEventMsg:Cl}=Fr(),aI=nt(),{getDatabases:gQ}=(de(),re(Ne)),{transformReq:to}=V();lI.exports={createSchema:AQ,createSchemaStructure:cI,createTable:OQ,createTableStructure:uI,createAttribute:wQ,dropSchema:NQ,dropTable:bQ,dropAttribute:yQ,getBackup:CQ};async function AQ(e){let t=await cI(e);return wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),t}a(AQ,"createSchema");async function cI(e){let t=Zi.schema_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(to(e),!await ji.checkSchemaExists(e.schema))throw Gt(new Error,Il.SCHEMA_EXISTS_ERR(e.schema),xt.BAD_REQUEST,eo.LOG_LEVELS.ERROR,Il.SCHEMA_EXISTS_ERR(e.schema),!0);return await pn.createSchema(e),`database '${e.schema}' successfully created`}a(cI,"createSchemaStructure");async function OQ(e){return to(e),await uI(e)}a(OQ,"createTable");async function uI(e){let t=Zi.create_table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);if(Zi.validateTableResidence(e.residence),!await ji.checkSchemaTableExists(e.schema,e.table))throw Gt(new Error,Il.TABLE_EXISTS_ERR(e.schema,e.table),xt.BAD_REQUEST,eo.LOG_LEVELS.ERROR,Il.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:pQ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await pn.createTable(s,e);else throw Gt(new Error,"Clustering does not appear to be enabled. Cannot insert table with property 'residence'.",xt.BAD_REQUEST);else await pn.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uI,"createTableStructure");async function NQ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=Zi.schema_object(e),s=t??r;if(s)throw Gt(s,s.message,xt.BAD_REQUEST,void 0,void 0,!0);to(e);let n=await ji.checkSchemaExists(e.schema);if(n)throw Gt(new Error,n,xt.NOT_FOUND,eo.LOG_LEVELS.ERROR,n,!0);let i=await ji.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await pn.dropSchema(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),await aI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(NQ,"dropSchema");async function bQ(e){let t=Zi.table_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);to(e);let r=await ji.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,eo.LOG_LEVELS.ERROR,r,!0);return await pn.dropTable(e),await aI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(bQ,"dropTable");async function yQ(e){let t=Zi.attribute_object(e);if(t)throw Gt(t,t.message,xt.BAD_REQUEST,void 0,void 0,!0);to(e);let r=await ji.checkSchemaTableExists(e.schema,e.table);if(r)throw Gt(new Error,r,xt.NOT_FOUND,eo.LOG_LEVELS.ERROR,r,!0);if(e.attribute===global.hdb_schema[e.schema][e.table].hash_attribute)throw Gt(new Error,"You cannot drop a hash attribute",xt.BAD_REQUEST,void 0,void 0,!0);if(eo.TIME_STAMP_NAMES.indexOf(e.attribute)>=0)throw Gt(new Error,`cannot drop internal timestamp attribute: ${e.attribute}`,xt.BAD_REQUEST,void 0,void 0,!0);try{return await pn.dropAttribute(e),IQ(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw SQ.error(`Got an error deleting attribute ${TQ.inspect(e)}.`),s}}a(yQ,"dropAttribute");function IQ(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(IQ,"dropAttributeFromGlobal");async function wQ(e){to(e);let t=gQ()[e.schema][e.table].attributes;for(let{name:r}of t)if(r===e.attribute)throw Gt(new Error,`attribute '${e.attribute}' already exists in ${e.schema}.${e.table}`,xt.BAD_REQUEST,void 0,void 0,!0);return await pn.createAttribute(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(wQ,"createAttribute");function CQ(e){return pn.getBackup(e)}a(CQ,"getBackup")});var dI=m((Foe,_I)=>{"use strict";var{OPERATIONS_ENUM:UQ}=A(),Xh=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=UQ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_I.exports=Xh});var Zh=m((xoe,SI)=>{"use strict";var DQ=Br(),Goe=dI(),Dl=V(),Ll=A(),LQ=Q(),{handleHDBError:EI,hdb_errors:MQ}=W(),{HDB_ERROR_MSGS:fI,HTTP_STATUS_CODES:hI}=MQ,PQ=Object.values(Ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mI="To use this operation audit log must be enabled in harperdb-config.yaml";SI.exports=vQ;async function vQ(e){if(Dl.isEmpty(e.schema))throw new Error(fI.SCHEMA_REQUIRED_ERR);if(Dl.isEmpty(e.table))throw new Error(fI.TABLE_REQUIRED_ERR);if(!LQ.get(Ll.CONFIG_PARAMS.LOGGING_AUDITLOG))throw EI(new Error,mI,hI.BAD_REQUEST,Ll.LOG_LEVELS.ERROR,mI,!0);let t=Dl.checkSchemaTableExist(e.schema,e.table);if(t)throw EI(new Error,t,hI.NOT_FOUND,Ll.LOG_LEVELS.ERROR,t,!0);if(!Dl.isEmpty(e.search_type)&&PQ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await DQ.readAuditLog(e)}a(vQ,"readAuditLog")});var TI=m((Voe,pI)=>{"use strict";var{OPERATIONS_ENUM:BQ}=A(),jh=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=BQ.GET_BACKUP,this.schema=t,this.table=r}};pI.exports=jh});var AI=m((Woe,gI)=>{"use strict";var HQ=Br(),Yoe=TI(),em=V(),FQ=A(),Koe=Q(),{handleHDBError:qQ,hdb_errors:GQ}=W(),{HDB_ERROR_MSGS:RI,HTTP_STATUS_CODES:xQ}=GQ;gI.exports=kQ;async function kQ(e){if(em.isEmpty(e.schema))throw new Error(RI.SCHEMA_REQUIRED_ERR);if(em.isEmpty(e.table))throw new Error(RI.TABLE_REQUIRED_ERR);let t=em.checkSchemaTableExist(e.schema,e.table);if(t)throw qQ(new Error,t,xQ.NOT_FOUND,FQ.LOG_LEVELS.ERROR,t,!0);return await HQ.getBackup(read_audit_log_object)}a(kQ,"getBackup")});var wI=m((zoe,II)=>{var Tn=require("validate.js"),NI=ve(),ro=A(),{handleHDBError:VQ,hdb_errors:$Q}=W(),{HDB_ERROR_MSGS:Ve,HTTP_STATUS_CODES:YQ}=$Q,tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),KQ={STRUCTURE_USER:"structure_user"},OI=Object.values(ro.ROLE_TYPES_ENUM),WQ="attribute_permissions",QQ="attribute_name",{PERMS_CRUD_ENUM:so}=ro,zQ=[WQ,...Object.values(so)],bI=[so.READ,so.INSERT,so.UPDATE],JQ=[QQ,...bI];function XQ(e){let t=tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yI(e,t)}a(XQ,"addRoleValidation");function ZQ(e){let t=tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yI(e,t)}a(ZQ,"alterRoleValidation");function jQ(e){let t=tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NI.validateObject(e,t)}a(jQ,"dropRoleValidation");var ez=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yI(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)ez.includes(s[o])||n.push(s[o]);n.length>0&&Qe(Ve.INVALID_ROLE_JSON_KEYS(n),r);let i=NI.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{Qe(o,r)}),e.permission){let o=tz(e);o&&Qe(o,r),OI.forEach(c=>{e.permission[c]&&!Tn.isBoolean(e.permission[c])&&Qe(Ve.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OI.indexOf(o)<0){if(o===KQ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||Qe(Ve.SCHEMA_NOT_FOUND(d),r)}continue}Qe(Ve.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){Qe(Ve.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){Qe(Ve.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{zQ.includes(_)||Qe(Ve.INVALID_PERM_KEY(_),r,o,u)}),Object.values(so).forEach(_=>{Tn.isDefined(l[_])?Tn.isBoolean(l[_])||Qe(Ve.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):Qe(Ve.TABLE_PERM_MISSING(_),r,o,u)}),Tn.isDefined(l.attribute_permissions)){if(!Tn.isArray(l.attribute_permissions)){Qe(Ve.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{Qe(Ve.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(p=>{!JQ.includes(p)&&p!==so.DELETE&&Qe(Ve.INVALID_ATTR_PERM_KEY(p),r,o,u)}),!Tn.isDefined(f.attribute_name)){Qe(Ve.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){Qe(Ve.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bI.forEach(p=>{Tn.isDefined(f[p])?Tn.isBoolean(f[p])||Qe(Ve.ATTR_PERM_NOT_BOOLEAN(p,h),r,o,u):Qe(Ve.ATTR_PERM_MISSING(p,h),r,o,u)}),!d.read&&f.read===!0&&(d.read=!0),!d.insert&&f.insert===!0&&(d.insert=!0),!d.update&&f.update===!0&&(d.update=!0)}if(l.read===!1&&d.read===!0||l.insert===!1&&d.insert===!0||l.update===!1&&d.update===!0){let E=`${o}.${u}`;Qe(Ve.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return rz(r)}a(yI,"customValidate");II.exports={addRoleValidation:XQ,alterRoleValidation:ZQ,dropRoleValidation:jQ};function tz(e){let{operation:t,permission:r}=e;if(t===ro.OPERATIONS_ENUM.ADD_ROLE||t===ro.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return Ve.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?ro.ROLE_TYPES_ENUM.SUPER_USER:ro.ROLE_TYPES_ENUM.CLUSTER_USER;return Ve.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(tz,"validateNoSUPerms");function rz(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 VQ(new Error,s,YQ.BAD_REQUEST)}else return null}a(rz,"generateRolePermResponse");function Qe(e,t,r,s){if(!r)t.main_permissions.push(e);else{let n=s?r+"_"+s:r;t.schema_permissions[n]?t.schema_permissions[n].push(e):t.schema_permissions[n]=[e]}}a(Qe,"addPermError")});var am=m((Xoe,LI)=>{"use strict";var CI=Ar(),UI=gr(),sz=zn(),sm=wI(),nm=Fs(),nz=require("uuid").v4,iz=require("util"),Ml=A(),oz=V(),im=UI.searchByValue,az=UI.searchByHash,cz=iz.promisify(sz.delete),uz=os(),lz=zi(),{hdb_errors:_z,handleHDBError:no}=W(),{HDB_ERROR_MSGS:DI,HTTP_STATUS_CODES:Pl}=_z,{UserEventMsg:om}=Fr();LI.exports={addRole:dz,alterRole:Ez,dropRole:fz,listRoles:hz};function rm(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(rm,"scrubRoleDetails");async function dz(e){let t=sm.addRoleValidation(e);if(t)throw t;e=rm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await im(r)||[])}catch(i){throw no(i)}if(s&&s.length>0)throw no(new Error,DI.ROLE_ALREADY_EXISTS(e.role),Pl.CONFLICT,void 0,void 0,!0);e.id||(e.id=nz());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CI.insert(n),nm.signalUserChange(new om(process.pid)),e=rm(e),e}a(dz,"addRole");async function Ez(e){let t=sm.alterRoleValidation(e);if(t)throw t;e=rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CI.update(r)}catch(n){throw no(n)}if(s&&s?.message==="updated 0 of 1 records")throw no(new Error,"Invalid role id",Pl.BAD_REQUEST,void 0,void 0,!0);return await nm.signalUserChange(new om(process.pid)),e}a(Ez,"alterRole");async function fz(e){let t=sm.dropRoleValidation(e);if(t)throw no(new Error,t,Pl.BAD_REQUEST,void 0,void 0,!0);let r=new lz(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await az(r));if(s.length===0)throw no(new Error,DI.ROLE_NOT_FOUND,Pl.NOT_FOUND,void 0,void 0,!0);let n=new uz(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await im(n)),o=!1;if(oz.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 cz(c),nm.signalUserChange(new om(process.pid)),`${s[0].role} successfully deleted`}a(fz,"dropRole");async function hz(){return im({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(hz,"listRoles")});var BI=m((joe,vI)=>{"use strict";var mz=Q(),Rn=require("joi"),Sz=ve(),MI=require("moment"),pz=require("fs-extra"),cm=require("path"),Tz=require("lodash"),Ga=A(),{LOG_LEVELS:si}=A(),Rz="YYYY-MM-DD hh:mm:ss",gz=cm.resolve(__dirname,"../logs");vI.exports=function(e){return Sz.validateBySchema(e,Az)};var Az=Rn.object({from:Rn.custom(PI),until:Rn.custom(PI),level:Rn.valid(si.NOTIFY,si.FATAL,si.ERROR,si.WARN,si.INFO,si.DEBUG,si.TRACE),order:Rn.valid("asc","desc"),limit:Rn.number().min(1),start:Rn.number().min(0),log_name:Rn.custom(Oz)});function PI(e,t){if(MI(e,MI.ISO_8601).format(Rz)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PI,"validateDatetime");function Oz(e,t){if(Tz.invert(Ga.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=mz.get(Ga.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?Ga.LOG_NAMES.HDB:e,i=n===Ga.LOG_NAMES.INSTALL?cm.join(gz,Ga.LOG_NAMES.INSTALL):cm.join(s,n);return pz.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(Oz,"validateReadLogPath")});var lm=m((tae,FI)=>{"use strict";var vl=A(),Nz=x(),bz=Q(),yz=BI(),um=require("path"),HI=require("fs-extra"),{once:Iz}=require("events"),{handleHDBError:wz,hdb_errors:Cz}=W(),{PACKAGE_ROOT:Uz}=A(),Dz=um.join(Uz,"logs"),Lz=1e3,Mz=200;FI.exports=Pz;async function Pz(e){let t=yz(e);if(t)throw wz(t,t.message,Cz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=bz.get(vl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?vl.LOG_NAMES.HDB:e.log_name,n=s===vl.LOG_NAMES.INSTALL?um.join(Dz,vl.LOG_NAMES.INSTALL):um.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?Lz:e.limit,E=e.order===void 0?void 0:e.order,f=e.start===void 0?0:e.start,h=f+d,p=0;E==="desc"&&!u&&!_&&(p=Math.max(HI.statSync(n).size-(h+5)*Mz,0));let T=HI.createReadStream(n,{start:p});T.on("error",b=>{Nz.error(b)});let g=0,O=[],k="",$;T.on("data",b=>{let P=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;b=k+b;let z=0,F;for(;(F=P.exec(b))&&!T.destroyed;){$&&($.message=b.slice(z,F.index),U($));let[Oe,Ze,iu]=F,Ui=iu.split("] ["),ko=Ui[0],Hn=Ui[1];Ui.splice(0,2),$={timestamp:Ze,thread:ko,level:Hn,tags:Ui,message:""},z=F.index+Oe.length}k=b.slice(z)}),T.on("end",b=>{T.destroyed||$&&($.message=k.trim(),U($))}),T.resume();function U(b){let P,z,F;switch(!0){case(i&&c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),b.level===o&&P>=z&&P<=F&&g<f?g++:b.level===o&&P>=z&&P<=F&&(gn(b,E,O),g++,g===h&&T.destroy());break;case(i&&c):P=new Date(b.timestamp),z=new Date(u),b.level===o&&P>=z&&g<f?g++:b.level===o&&P>=z&&(gn(b,E,O),g++,g===h&&T.destroy());break;case(i&&l):P=new Date(b.timestamp),F=new Date(_),b.level===o&&P<=F&&g<f?g++:b.level===o&&P<=F&&(gn(b,E,O),g++,g===h&&T.destroy());break;case(c&&l):P=new Date(b.timestamp),z=new Date(u),F=new Date(_),P>=z&&P<=F&&g<f?g++:P>=z&&P<=F&&(gn(b,E,O),g++,g===h&&T.destroy());break;case i:b.level===o&&g<f?g++:b.level===o&&(gn(b,E,O),g++,g===h&&T.destroy());break;case c:P=new Date(b.timestamp),z=new Date(u),P>=z&&g<f?g++:P>=z&&g>=f&&(gn(b,E,O),g++,g===h&&T.destroy());break;case l:P=new Date(b.timestamp),F=new Date(_),P<=F&&g<f?g++:P<=F&&g>=f&&(gn(b,E,O),g++,g===h&&T.destroy());break;default:g<f?g++:(gn(b,E,O),g++,g===h&&T.destroy())}}return a(U,"onLogMessage"),await Iz(T,"close"),O}a(Pz,"readLog");function gn(e,t,r){t==="desc"?vz(e,r):t==="asc"?Bz(e,r):r.push(e)}a(gn,"pushLineToResult");function vz(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(vz,"insertDescending");function Bz(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(Bz,"insertAscending")});var Hl=m((oae,kI)=>{"use strict";var _m=require("joi"),{string:Bl,boolean:qI,date:Hz}=_m.types(),Fz=ve(),{validateSchemaExists:sae,validateTableExists:nae,validateSchemaName:iae}=rs(),qz=A(),Gz=Be(),GI=Q();GI.initSync();var xz=Bl.invalid(GI.get(qz.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(Gz.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(),xI={operation:Bl.valid("add_node","update_node"),node_name:xz,subscriptions:_m.array().items({table:Bl.optional(),schema:Bl.required(),subscribe:qI.required(),publish:qI.required().custom(Vz),start_time:Hz.iso()}).min(1).required()};function kz(e){return Fz.validateBySchema(e,_m.object(xI))}a(kz,"addUpdateNodeValidator");function Vz(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(Vz,"checkForFalsy");kI.exports={addUpdateNodeValidator:kz,validation_schema:xI}});var $I=m((cae,VI)=>{var $z=ve(),Yz={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VI.exports=function(e){return $z.validateObject(e,Yz)}});var Em=m((uae,YI)=>{"use strict";var Kz=A().OPERATIONS_ENUM,dm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Kz.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YI.exports=dm});var WI=m((_ae,KI)=>{"use strict";var Wz={OPERATION:"operation",REFRESH:"refresh"},fm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},hm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KI.exports={JWTTokens:fm,TOKEN_TYPE_ENUM:Wz,JWTRSAKeys:hm}});var Va=m((Eae,XI)=>{"use strict";var ka=require("jsonwebtoken"),mm=require("fs-extra"),Sm=V(),yr=A(),{handleHDBError:kt,hdb_errors:Qz}=W(),{HTTP_STATUS_CODES:Vt,AUTHENTICATION_ERROR_MSGS:$t}=Qz,xa=x(),QI=ju(),Rm=br(),zz=Ar().update,Jz=Em(),Xz=Fs(),{UserEventMsg:Zz}=Fr(),An=Q();An.initSync();var pm=require("path"),{JWTTokens:jz,JWTRSAKeys:eJ,TOKEN_TYPE_ENUM:Fl}=WI(),tJ=An.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?An.get(yr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",rJ=An.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?An.get(yr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ql="RS256",Tm;XI.exports={createTokens:sJ,validateOperationToken:iJ,refreshOperationToken:nJ,validateRefreshToken:JI};async function sJ(e){if(Sm.isEmpty(e)||typeof e!="object")throw kt(new Error,$t.INVALID_AUTH_OBJECT,Vt.BAD_REQUEST,void 0,void 0,!0);if(Sm.isEmpty(e.username))throw kt(new Error,$t.USERNAME_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);if(Sm.isEmpty(e.password))throw kt(new Error,$t.PASSWORD_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Rm.findAndValidateUser(e.username,e.password),!t)throw kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw xa.error(E),kt(new Error,$t.INVALID_CREDENTIALS,Vt.UNAUTHORIZED,void 0,void 0,!0)}let r=await Gl(),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 zI(i,r.private_key,r.passphrase),c=await ka.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:rJ,algorithm:ql,subject:Fl.REFRESH}),u=QI.hash(c),l=new Jz(yr.SYSTEM_SCHEMA_NAME,yr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await zz(l)}catch(E){xa.error(E),d=E}if(d!==void 0||_.skipped_hashes.length>0)throw kt(new Error,$t.REFRESH_TOKEN_SAVE_FAILED,Vt.INTERNAL_SERVER_ERROR);return Xz.signalUserChange(new Zz(process.pid)),new jz(o,c)}a(sJ,"createTokens");async function zI(e,t,r){return await ka.sign(e,{key:t,passphrase:r},{expiresIn:tJ,algorithm:ql,subject:Fl.OPERATION})}a(zI,"signOperationToken");async function Gl(){if(Tm===void 0)try{let e=pm.join(An.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=pm.join(An.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=pm.join(An.getHdbBasePath(),yr.LICENSE_KEY_DIR_NAME,yr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await mm.readFile(e)).toString(),n=(await mm.readFile(t)).toString(),i=(await mm.readFile(r)).toString();Tm=new eJ(i,n,s)}catch(e){throw xa.error(e),kt(new Error,$t.NO_ENCRYPTION_KEYS,Vt.INTERNAL_SERVER_ERROR)}return Tm}a(Gl,"getJWTRSAKeys");async function nJ(e){if(!e)throw kt(new Error,$t.INVALID_BODY,Vt.BAD_REQUEST,void 0,void 0,!0);if(!e.refresh_token)throw kt(new Error,$t.REFRESH_TOKEN_REQUIRED,Vt.BAD_REQUEST,void 0,void 0,!0);await JI(e.refresh_token);let t=await Gl(),r=await ka.decode(e.refresh_token);return{operation_token:await zI({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(nJ,"refreshOperationToken");async function iJ(e){try{let t=await Gl(),r=await ka.verify(e,t.public_key,{algorithms:ql,subject:Fl.OPERATION});return await Rm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw xa.warn(t),t.name&&t.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}}a(iJ,"validateOperationToken");async function JI(e){let t;try{let r=await Gl(),s=await ka.verify(e,r.public_key,{algorithms:ql,subject:Fl.REFRESH});t=await Rm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw xa.warn(r),r.name&&r.name==="TokenExpiredError"?kt(new Error,$t.TOKEN_EXPIRED,Vt.FORBIDDEN):kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED)}if(!QI.validate(t.refresh_token,e))throw kt(new Error,$t.INVALID_TOKEN,Vt.UNAUTHORIZED);return t}a(JI,"validateRefreshToken")});var gm=m((mae,ew)=>{"use strict";var oJ=$I(),io=require("passport"),aJ=require("passport-local").Strategy,cJ=require("passport-http").BasicStrategy,uJ=require("util"),lJ=br(),jI=uJ.callbackify(lJ.findAndValidateUser),hae=rr(),_J=A(),ZI=Va();io.use(new aJ(function(e,t,r){jI(e,t,r)}));io.use(new cJ(function(e,t,r){jI(e,t,r)}));io.serializeUser(function(e,t){t(null,e)});io.deserializeUser(function(e,t){t(null,e)});function dJ(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":io.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===_J.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZI.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):ZI.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:io.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(dJ,"authorize");function EJ(e,t){let r=oJ(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(EJ,"checkPermissions");ew.exports={authorize:dJ,checkPermissions:EJ}});var oo=m((pae,tw)=>{"use strict";var Am=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Om=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tw.exports={Node:Am,NodeSubscription:Om}});var sw=m((Rae,rw)=>{"use strict";var fJ=A().OPERATIONS_ENUM,Nm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=fJ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rw.exports=Nm});var $a=m((Aae,nw)=>{"use strict";var bm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},ym=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)}};nw.exports={RemotePayloadObject:bm,RemotePayloadSubscription:ym}});var ow=m((Nae,iw)=>{"use strict";var Im=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}};iw.exports=Im});var uw=m((Cae,cw)=>{"use strict";var hJ=ow(),yae=xe(),aw=ye(),mJ=x(),{getSchemaPath:Iae,getTransactionAuditStorePath:wae}=we(),{getDatabases:SJ}=(de(),re(Ne));cw.exports=pJ;async function pJ(e){let t=new hJ;try{let r=SJ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aw.environmentDataSize(schema_path,e.name),o=await aw.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){mJ.warn(`unable to stat table dbi due to ${r}`)}return t}a(pJ,"lmdbGetTableSize")});var _w=m((Dae,lw)=>{"use strict";var wm=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}};lw.exports=wm});var ao=m((vae,hw)=>{"use strict";var TJ=require("fs-extra"),RJ=require("path"),Ut=require("systeminformation"),On=x(),gJ=nt(),Cm=Be(),kl=A(),AJ=uw(),fw=$n(),{getThreadInfo:dw}=dt(),qm=Q();qm.initSync();var OJ=_w(),{openEnvironment:Mae}=ye(),{getSchemaPath:Pae}=we(),{database:NJ}=(de(),re(Ne)),xl;hw.exports={getHDBProcessInfo:Mm,getNetworkInfo:vm,getDiskInfo:Pm,getMemoryInfo:Lm,getCPUInfo:Dm,getTimeInfo:Um,getSystemInformation:Bm,systemInformation:bJ,getTableSize:Hm,getMetrics:Fm};function Um(){return Ut.time()}a(Um,"getTimeInfo");async function Dm(){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:p,raw_currentload_user:T,cpus:g,...O}=await Ut.currentLoad();return O.cpus=[],g.forEach(k=>{let{raw_load:$,raw_load_idle:U,raw_load_irq:b,raw_load_nice:P,raw_load_system:z,raw_load_user:F,...Oe}=k;O.cpus.push(Oe)}),_.current_load=O,_}catch(e){return On.error(`error in getCPUInfo: ${e}`),{}}}a(Dm,"getCPUInfo");async function Lm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return On.error(`error in getMemoryInfo: ${e}`),{}}}a(Lm,"getMemoryInfo");async function Mm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await TJ.readFile(RJ.join(qm.get(kl.CONFIG_PARAMS.ROOTPATH),kl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===kl.NODE_ERROR_CODES.ENOENT)On.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 On.error(`error in getHDBProcessInfo: ${t}`),e}}a(Mm,"getHDBProcessInfo");async function Pm(){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 On.error(`error in getDiskInfo: ${t}`),e}}a(Pm,"getDiskInfo");async function vm(){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 On.error(`error in getNetworkInfo: ${t}`),e}}a(vm,"getNetworkInfo");async function Bm(){if(xl!==void 0)return xl;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,xl=e,xl}catch(t){return On.error(`error in getSystemInformation: ${t}`),e}}a(Bm,"getSystemInformation");async function Hm(){let e=[],t=await fw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await AJ(s));return e}a(Hm,"getTableSize");async function Fm(){let e=await fw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=NJ({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){On.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Fm,"getMetrics");async function Ew(){if(qm.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await gJ.getNATSReferences(),r=await t.streams.info(Cm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Cm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Cm.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(Ew,"getNatsStreamInfo");async function bJ(e){let t=new OJ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Bm(),t.time=Um(),t.cpu=await Dm(),t.memory=await Lm(),t.disk=await Pm(),t.network=await vm(),t.harperdb_processes=await Mm(),t.table_size=await Hm(),t.metrics=await Fm(),t.threads=await dw(),t.replication=await Ew(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Bm();break;case"time":t.time=Um();break;case"cpu":t.cpu=await Dm();break;case"memory":t.memory=await Lm();break;case"disk":t.disk=await Pm();break;case"network":t.network=await vm();break;case"harperdb_processes":t.harperdb_processes=await Mm();break;case"table_size":t.table_size=await Hm();break;case"database_metrics":case"metrics":t.metrics=await Fm();break;case"threads":t.threads=await dw();break;case"replication":t.replication=await Ew();break;default:break}return t}a(bJ,"systemInformation")});var Ya=m((Hae,yJ)=>{yJ.exports={name:"harperdb",version:"4.2.0-alpha.14",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.383.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.7.16","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.18.0","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.11","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Gm=m((Gae,mw)=>{"use strict";var Fae=require("fs-extra"),qae=x();mw.exports={version:IJ,printVersion:CJ,nodeVersion:wJ};var Nn=Ya();function IJ(){if(Nn)return Nn.version}a(IJ,"version");function wJ(){if(Nn&&Nn.engines&&Nn.engines["preferred-node"])return Nn.engines["preferred-node"]}a(wJ,"nodeVersion");function CJ(){Nn&&console.log(`HarperDB Version ${Nn.version}`)}a(CJ,"printVersion")});var xs=m(($ae,Rw)=>{"use strict";var UJ=Ar(),xm=V(),DJ=require("util"),ni=A(),Sw=Q();Sw.initSync();var LJ=gm(),pw=gr(),{Node:kae,NodeSubscription:Vae}=oo(),MJ=zi(),PJ=sw(),{RemotePayloadObject:vJ,RemotePayloadSubscription:BJ}=$a(),{handleHDBError:HJ,hdb_errors:FJ}=W(),{HTTP_STATUS_CODES:qJ,HDB_ERROR_MSGS:GJ}=FJ,xJ=os(),kJ=ao(),VJ=Gm(),{getDatabases:$J}=(de(),re(Ne)),YJ=DJ.promisify(LJ.authorize),KJ=pw.searchByHash,WJ=pw.searchByValue;Rw.exports={authHeaderToUser:QJ,isEmpty:zJ,getNodeRecord:JJ,upsertNodeRecord:XJ,buildNodePayloads:ZJ,checkClusteringEnabled:jJ,getAllNodeRecords:e2,getSystemInfo:t2,reverseSubscription:Tw};async function QJ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await YJ(t,null),e}a(QJ,"authHeaderToUser");function zJ(e){return e==null}a(zJ,"isEmpty");async function JJ(e){let t=new MJ(ni.SYSTEM_SCHEMA_NAME,ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return KJ(t)}a(JJ,"getNodeRecord");async function XJ(e){let t=new PJ(ni.SYSTEM_SCHEMA_NAME,ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return UJ.upsert(t)}a(XJ,"upsertNodeRecord");function Tw(e){if(xm.isEmpty(e.subscribe)||xm.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(Tw,"reverseSubscription");function ZJ(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,_=xm.getTableHashAttribute(u,l),{subscribe:d,publish:E}=Tw(c),f=$J()[u]?.[l],h=new BJ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new vJ(r,t,n,s)}a(ZJ,"buildNodePayloads");function jJ(){if(!Sw.get(ni.CONFIG_PARAMS.CLUSTERING_ENABLED))throw HJ(new Error,GJ.CLUSTERING_NOT_ENABLED,qJ.BAD_REQUEST,void 0,void 0,!0)}a(jJ,"checkClusteringEnabled");async function e2(){let e=new xJ(ni.SYSTEM_SCHEMA_NAME,ni.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await WJ(e))}a(e2,"getAllNodeRecords");async function t2(){let e=await kJ.getSystemInformation();return{hdb_version:VJ.version(),node_version:e.node_version,platform:e.platform}}a(t2,"getSystemInfo")});var km=m((Kae,ww)=>{"use strict";var Vl=nt(),gw=V(),Aw=Be(),Ow=A(),$l=x(),Nw=Ul(),r2=Rh(),{RemotePayloadObject:s2}=$a(),{handleHDBError:bw,hdb_errors:n2}=W(),{HTTP_STATUS_CODES:yw}=n2,{NodeSubscription:Iw}=oo();ww.exports=i2;async function i2(e,t){let r;try{r=await Vl.request(`${t}.${Aw.REQUEST_SUFFIX}`,new s2(Ow.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),$l.trace("Response from remote describe all request:",r)}catch(o){$l.error(`addNode received error from describe all request to remote node: ${o}`);let c=Vl.requestErrorHandler(o,"add_node",t);throw bw(new Error,c,yw.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Aw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bw(new Error,o,yw.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===Ow.SYSTEM_SCHEMA_NAME){await Vl.createLocalTableStream(c,u);let h=new Iw(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gw.doesSchemaExist(c),_=s[c]!==void 0,d=u?gw.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&($l.trace(`addNode creating schema: ${c}`),await Nw.createSchema({operation:"create_schema",schema:c})),!d&&E){$l.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new r2(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await Nw.createTable(h)}await Vl.createLocalTableStream(c,u);let f=new Iw(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(i2,"reviewSubscriptions")});var Wl=m((Qae,Dw)=>{"use strict";var{handleHDBError:Yl,hdb_errors:o2}=W(),{HTTP_STATUS_CODES:Kl}=o2,{addUpdateNodeValidator:a2}=Hl(),Ka=x(),Uw=A(),Cw=Be(),c2=V(),Vm=nt(),Wa=xs(),u2=Q(),l2=km(),{Node:_2,NodeSubscription:d2}=oo(),{broadcast:E2}=dt(),f2="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",h2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",m2=u2.get(Uw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dw.exports=S2;async function S2(e,t=!1){Ka.trace("addNode called with:",e),Wa.checkClusteringEnabled();let r=a2(e);if(r)throw Yl(r,r.message,Kl.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Wa.getNodeRecord(s);if(!c2.isEmptyOrZeroLength(d))throw Yl(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Kl.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await l2(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=f2,o;let c=Wa.buildNodePayloads(n,m2,Uw.OPERATIONS_ENUM.ADD_NODE,await Wa.getSystemInfo());Ka.trace("addNode sending remote payload:",c);let u;try{u=await Vm.request(`${s}.${Cw.REQUEST_SUFFIX}`,c)}catch(d){Ka.error(`addNode received error from request: ${d}`);let E=Vm.requestErrorHandler(d,"add_node",s);throw Yl(new Error,E,Kl.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===Cw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Yl(new Error,d,Kl.INTERNAL_SERVER_ERROR,"error",d)}Ka.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Ka.trace("Add node updating work stream for node:",s,"subscriptions:",f),await Vm.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new d2(f.schema,f.table,f.publish,f.subscribe))}let _=new _2(s,l,u.system_info);return await Wa.upsertNodeRecord(_),E2({type:"nats_update"}),i.length>0?o.message=h2:o.message=`Successfully added '${s}' to manifest`,o}a(S2,"addNode")});var Ym=m((Jae,Pw)=>{"use strict";var{handleHDBError:Ql,hdb_errors:p2}=W(),{HTTP_STATUS_CODES:zl}=p2,{addUpdateNodeValidator:T2}=Hl(),Qa=x(),Mw=A(),Lw=Be(),R2=V(),$m=nt(),za=xs(),g2=Q(),{cloneDeep:A2}=require("lodash"),O2=km(),{NodeSubscription:N2}=oo(),{broadcast:b2}=dt(),y2="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",I2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",w2=g2.get(Mw.CONFIG_PARAMS.CLUSTERING_NODENAME);Pw.exports=C2;async function C2(e){Qa.trace("updateNode called with:",e),za.checkClusteringEnabled();let t=T2(e);if(t)throw Ql(t,t.message,zl.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=A2(await za.getNodeRecord(r));if(R2.isEmptyOrZeroLength(s))throw Ql(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,zl.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await O2(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=y2,o;let c=za.buildNodePayloads(n,w2,Mw.OPERATIONS_ENUM.UPDATE_NODE,await za.getSystemInfo());Qa.trace("updateNode sending remote payload:",c);let u;try{u=await $m.request(`${r}.${Lw.REQUEST_SUFFIX}`,c)}catch(l){Qa.error(`updateNode received error from request: ${l}`);let _=$m.requestErrorHandler(l,"update_node",r);throw Ql(new Error,_,zl.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Lw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Ql(new Error,l,zl.INTERNAL_SERVER_ERROR,"error",l)}Qa.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];Qa.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await $m.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await U2(s[0],n,u.system_info),i.length>0?o.message=I2:o.message=`Successfully updated '${r}'`,o}a(C2,"updateNode");async function U2(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 N2(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await za.upsertNodeRecord(s),b2({type:"nats_update"})}a(U2,"updateNodeTable")});var qw=m((Zae,Fw)=>{"use strict";var Hw=require("joi"),{string:vw}=Hw.types(),D2=ve(),Bw=A(),L2=Q(),M2=Be();Fw.exports=P2;function P2(e){let t=vw.invalid(L2.get(Bw.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(M2.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=Hw.object({operation:vw.valid(Bw.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return D2.validateBySchema(e,r)}a(P2,"removeNodeValidator")});var Xl=m((ece,Yw)=>{"use strict";var{handleHDBError:Gw,hdb_errors:v2}=W(),{HTTP_STATUS_CODES:xw}=v2,B2=qw(),Ja=x(),kw=xs(),H2=V(),Jl=A(),Vw=Be(),$w=nt(),F2=Q(),{RemotePayloadObject:q2}=$a(),{NodeSubscription:G2}=oo(),x2=La(),k2=zn(),{broadcast:V2}=dt(),$2=F2.get(Jl.CONFIG_PARAMS.CLUSTERING_NODENAME);Yw.exports=Y2;async function Y2(e){Ja.trace("removeNode called with:",e),kw.checkClusteringEnabled();let t=B2(e);if(t)throw Gw(t,t.message,xw.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await kw.getNodeRecord(r);if(H2.isEmptyOrZeroLength(s))throw Gw(new Error,`Node '${r}' was not found.`,xw.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new q2(Jl.OPERATIONS_ENUM.REMOVE_NODE,$2,[]),i,o=!1;try{i=await $w.request(`${r}.${Vw.REQUEST_SUFFIX}`,n),Ja.trace("Remove node reply from remote node:",r,i)}catch(u){Ja.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Ja.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new G2(_.schema,_.table,!1,!1);await $w.updateWorkStream(d,r)}let c=new x2(Jl.SYSTEM_SCHEMA_NAME,Jl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await k2.deleteRecord(c),V2({type:"nats_update"}),i?.status===Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Ja.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(Y2,"removeNode")});var Qw=m((rce,Ww)=>{"use strict";var Kw=require("joi"),{string:K2,array:W2}=Kw.types(),Q2=ve(),z2=Hl();Ww.exports=J2;function J2(e){let t=Kw.object({operation:K2.valid("configure_cluster").required(),connections:W2.items(z2.validation_schema).required()});return Q2.validateBySchema(e,t)}a(J2,"configureClusterValidator")});var Km=m((nce,jw)=>{"use strict";var X2=A(),Zl=x(),Z2=V(),j2=Xl(),e3=Wl(),zw=xs(),t3=Qw(),{handleHDBError:Jw,hdb_errors:r3}=W(),{HTTP_STATUS_CODES:Xw}=r3,s3="Configure cluster complete.",n3="Failed to configure the cluster. Check the logs for more details.",i3="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";jw.exports=o3;async function o3(e){Zl.trace("configure cluster called with:",e),zw.checkClusteringEnabled();let t=t3(e);if(t)throw Jw(t,t.message,Xw.BAD_REQUEST,void 0,void 0,!0);let r=await zw.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(Zw(j2,{operation:X2.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);Zl.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(Zw(e3,f,f.node_name))}let c=await Promise.allSettled(i);Zl.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"&&(Zl.error(h.reason),u.includes(h.reason.node_name)||u.push(h.reason.node_name)),h.status==="fulfilled"&&(_=!0);let p=h?.value?.result;typeof p=="string"&&p.includes("Successfully removed")||h.status==="rejected"||l.push({node_name:h?.value?.node_name,subscriptions:h?.value?.result})}if(Z2.isEmptyOrZeroLength(u))return{message:s3,connections:l};if(_)return{message:i3,failed_nodes:u,connections:l};throw Jw(new Error,n3,Xw.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(o3,"configureCluster");async function Zw(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Zw,"functionWrapper")});var tC=m((oce,eC)=>{"use strict";var jl=require("joi"),a3=ve(),{validateSchemaExists:c3,validateTableExists:u3,validateSchemaName:l3}=rs(),_3=jl.object({operation:jl.string().valid("purge_stream"),schema:jl.string().custom(c3).custom(l3).required(),table:jl.string().custom(u3).required()});function d3(e){return a3.validateBySchema(e,_3)}a(d3,"purgeStreamValidator");eC.exports=d3});var Wm=m((cce,rC)=>{"use strict";var{handleHDBError:E3,hdb_errors:f3}=W(),{HTTP_STATUS_CODES:h3}=f3,m3=tC(),S3=nt(),p3=xs();rC.exports=T3;async function T3(e){let t=m3(e);if(t)throw E3(t,t.message,h3.BAD_REQUEST,void 0,void 0,!0);p3.checkClusteringEnabled();let{schema:r,table:s}=e;return await S3.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(T3,"purgeStream")});var Jm=m((lce,cC)=>{"use strict";var zm=xs(),R3=nt(),iC=Q(),e_=A(),ii=Be(),g3=V(),Qm=x(),{RemotePayloadObject:A3}=$a(),{ErrorCode:sC}=require("nats"),nC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED),oC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_NODENAME);cC.exports={clusterStatus:O3,buildNodeStatus:aC};async function O3(){let e={node_name:oC,is_enabled:nC,connections:[]};if(!nC)return e;let t=await zm.getAllNodeRecords();if(g3.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(aC(t[s],e.connections));return await Promise.allSettled(r),e}a(O3,"clusterStatus");async function aC(e,t){let r=e.name,s=new A3(e_.OPERATIONS_ENUM.CLUSTER_STATUS,oC,void 0,await zm.getSystemInfo()),n,i,o=ii.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await R3.request(ii.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ii.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ii.CLUSTER_STATUS_STATUSES.CLOSED,Qm.error(`Error getting node status from ${r} `,n))}catch(u){Qm.warn(`Error getting node status from ${r}`,u),u.code===sC.NoResponders?o=ii.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===sC.Timeout?o=ii.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ii.CLUSTER_STATUS_STATUSES.CLOSED}let c=new N3(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==e_.PRE_4_0_0_VERSION&&await zm.upsertNodeRecord(u)}catch(u){Qm.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(aC,"buildNodeStatus");function N3(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(N3,"NodeStatusObject")});var Zm=m((dce,uC)=>{"use strict";var{handleHDBError:b3,hdb_errors:y3}=W(),{HTTP_STATUS_CODES:I3}=y3,w3=nt(),C3=xs(),Xm=V(),t_=require("joi"),U3=ve(),D3=2e3,L3=t_.object({timeout:t_.number().min(1),connected_nodes:t_.boolean(),routes:t_.boolean()});uC.exports=M3;async function M3(e){C3.checkClusteringEnabled();let t=U3.validateBySchema(e,L3);if(t)throw b3(t,t.message,I3.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Xm.autoCastBoolean(s),o=n===void 0||Xm.autoCastBoolean(n),c={nodes:[]},u=await w3.getServerList(r??D3),l={};if(i)for(let _=0,d=u.length;_<d;_++){let E=u[_].statsz;E&&(l[u[_].server.name]=E.routes)}for(let _=0,d=u.length;_<d;_++){if(u[_].statsz)continue;let E=u[_].server,f=u[_].data;if(E.name.endsWith("-hub")){let h={name:E.name.slice(0,-4),response_time:u[_].response_time};i&&(h.connected_nodes=l[E.name]?l[E.name].map(p=>p.name.slice(0,-4)):[]),o&&(h.routes=f.cluster?.urls?f.cluster?.urls.map(p=>({host:p.split(":")[0],port:Xm.autoCast(p.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(M3,"clusterNetwork")});var EC=m((fce,dC)=>{"use strict";var jm=require("joi"),lC=ve(),{route_constraints:_C}=Hf();dC.exports={setRoutesValidator:P3,deleteRoutesValidator:v3};function P3(e){let t=jm.object({server:jm.valid("hub","leaf").required(),routes:_C.required()});return lC.validateBySchema(e,t)}a(P3,"setRoutesValidator");function v3(e){let t=jm.object({routes:_C.required()});return lC.validateBySchema(e,t)}a(v3,"deleteRoutesValidator")});var tS=m((mce,SC)=>{"use strict";var oi=Nr(),eS=V(),r_=A(),fC=EC(),{handleHDBError:hC,hdb_errors:B3}=W(),{HTTP_STATUS_CODES:mC}=B3,H3="cluster routes successfully set",F3="cluster routes successfully deleted";SC.exports={setRoutes:q3,getRoutes:G3,deleteRoutes:x3};function q3(e){let t=fC.setRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=oi.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=eS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?oi.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):oi.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:H3,set:o,skipped:i}}a(q3,"setRoutes");function G3(){let e=oi.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(G3,"getRoutes");function x3(e){let t=fC.deleteRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=oi.getClusteringRoutes(),s=r.hub_routes,n=r.leaf_routes,i=[],o=[],c=!1,u=!1;for(let l=0,_=e.routes.length;l<_;l++){let d=e.routes[l],E=!1;for(let f=0,h=s.length;f<h;f++){let p=s[f];if(d.host===p.host&&d.port===p.port){s.splice(f,1),E=!0,c=!0,i.push(d);break}}if(!E){let f=!0;for(let h=0,p=n.length;h<p;h++){let T=n[h];if(d.host===T.host&&d.port===T.port){n.splice(h,1),u=!0,f=!1,i.push(d);break}}f&&o.push(d)}}return c&&(s=eS.isEmptyOrZeroLength(s)?null:s,oi.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=eS.isEmptyOrZeroLength(n)?null:n,oi.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:F3,deleted:i,skipped:o}}a(x3,"deleteRoutes")});var TC=m((pce,pC)=>{"use strict";var Xa=require("alasql"),ai=require("recursive-iterator"),Vr=x(),k3=V(),Za=A(),rS=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,$3(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=>Za.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=>!Za.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][Za.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=V3(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=>!Za.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Xa.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 V3(e){return e.filter(t=>t[Za.PERMS_CRUD_ENUM.READ])}a(V3,"filterReadRestrictedAttrs");function $3(e,t,r,s,n){Y3(e,t,r,s,n)}a($3,"interpretAST");function ja(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(ja,"addSchemaTableToMap");function Y3(e,t,r,s,n){if(!e){Vr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Xa.yy.Insert?z3(e,t,r):e instanceof Xa.yy.Select?K3(e,t,r,s,n):e instanceof Xa.yy.Update?W3(e,t,r):e instanceof Xa.yy.Delete?Q3(e,t,r):Vr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(Y3,"getRecordAttributesAST");function K3(e,t,r,s,n){if(!e){Vr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if(k3.isEmptyOrZeroLength(i)){Vr.error("No schema specified");return}e.from.forEach(c=>{ja(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ja(c.table,t,r,s,n)});let o=new ai(e.columns);for(let{node:c}of o)if(c&&c.columnid){let u=c.tableid,l=s.has(u)?s.get(u):i;if(u||(u=e.from[0].tableid),!t.get(l).has(u))if(r.has(u))u=r.get(u);else{Vr.info(`table specified as ${u} not found.`);return}t.get(l).get(u).indexOf(c.columnid)<0&&t.get(l).get(u).push(c.columnid)}if(e.where){let c=new ai(e.where),u=e.from[0].tableid;for(let{node:l}of c)if(l&&l.columnid){let _=l.tableid?l.tableid:u;if(!t.get(i).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(i).get(_).indexOf(l.columnid)<0&&t.get(i).get(_).push(l.columnid)}}if(e.joins&&e.joins.forEach(c=>{let u=new ai(c.on);for(let{node:l}of u)if(l&&l.columnid){let _=l.tableid,d=n.get(_);if(!t.get(d).has(_))if(r.has(_))_=r.get(_);else{Vr.info(`table specified as ${_} not found.`);continue}t.get(d).get(_).indexOf(l.columnid)<0&&t.get(d).get(_).push(l.columnid)}}),e.order){let c=new ai(e.order);for(let{node:u}of c)if(u&&u.columnid){let l=u.tableid,_=s.has(l)?s.get(l):i;if(l||(l=e.from[0].tableid),!t.get(_).has(l))if(r.has(l))l=r.get(l);else{Vr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(K3,"getSelectAttributes");function W3(e,t,r){if(!e){Vr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new ai(e.columns),n=e.table.databaseid;ja(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.table.tableid,n,i.columnid,t,r)}a(W3,"getUpdateAttributes");function Q3(e,t,r){if(!e){Vr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new ai(e.where),n=e.table.databaseid;ja(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.table.tableid,n,i.columnid,t,r)}a(Q3,"getDeleteAttributes");function z3(e,t,r){if(!e){Vr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new ai(e.columns),n=e.into.databaseid;ja(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.into.tableid,n,i.columnid,t,r)}a(z3,"getInsertAttributes");function sS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(sS,"pushAttribute");pC.exports=rS});var oS=m((Rce,OC)=>{var s_=Aa(),RC=require("chalk"),lr=x(),gC=require("prompt"),{promisify:J3}=require("util"),nS=A(),X3=require("fs-extra"),Z3=require("path"),j3=V(),eX=Gm(),AC=Q();AC.initSync();var tX=require("moment"),rX=J3(gC.get),sX=Z3.join(AC.getHdbBasePath(),nS.LICENSE_KEY_DIR_NAME,nS.LICENSE_FILE_NAME,nS.LICENSE_FILE_NAME);OC.exports={getFingerprint:iX,setLicense:nX,parseLicense:iS,register:oX,getRegistrationInfo:cX};async function nX(e){if(e&&e.key&&e.company){try{lr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await iS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw lr.error(r),lr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(nX,"setLicense");async function iX(){let e={};try{e=await s_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw lr.error(r),lr.error(t),new Error(r)}return e}a(iX,"getFingerprint");async function iS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");lr.info("Validating license input...");let r=s_.validateLicense(e,t);if(lr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(lr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(lr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{lr.info("writing license to disk"),await X3.writeFile(sX,JSON.stringify({license_key:e,company:t}))}catch(s){throw lr.error("Failed to write License"),s}return"Registration successful."}a(iS,"parseLicense");async function oX(){let e=await aX();return iS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(oX,"register");async function aX(){let e=await s_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:RC.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:RC.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gC.start()}catch(s){lr.error(s)}let r;try{r=await rX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(aX,"promptForRegistration");async function cX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await s_.getLicense()}catch(r){throw lr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(j3.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=eX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=tX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(cX,"getRegistrationInfo")});var bC=m((Ace,NC)=>{"use strict";var uX=Be(),aS=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+uX.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"}};NC.exports=aS});var wC=m((Nce,IC)=>{"use strict";var yC=Be(),cS=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+yC.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+yC.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"}};IC.exports=cS});var UC=m((yce,CC)=>{"use strict";var uS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CC.exports=uS});var LC=m((wce,DC)=>{"use strict";var lX=Be(),lS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+lX.SERVER_SUFFIX.ADMIN,this.password=r}};DC.exports=lS});var ES=m((Uce,vC)=>{"use strict";var ec=require("path"),a_=require("fs-extra"),_X=bC(),dX=wC(),EX=UC(),fX=LC(),_S=br(),co=V(),Yt=Nr(),o_=A(),n_=Be(),{CONFIG_PARAMS:ze}=o_,rc=x(),c_=Q(),MC=Ms(),dS=nt(),tc="clustering",hX=1e4,PC=5;vC.exports={generateNatsConfig:mX,removeNatsConfig:SX};async function mX(e=!1,t=void 0){c_.initSync();let r=c_.get(ze.ROOTPATH),s=ec.join(r,tc,n_.PID_FILES.HUB),n=ec.join(r,tc,n_.PID_FILES.LEAF),i=Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=ec.join(r,tc,n_.NATS_CONFIG_FILES.HUB_SERVER),c=ec.join(r,tc,n_.NATS_CONFIG_FILES.LEAF_SERVER),u=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERTIFICATE),l=Yt.getConfigFromFile(ze.CLUSTERING_TLS_PRIVATEKEY),_=Yt.getConfigFromFile(ze.CLUSTERING_TLS_CERT_AUTH),d=Yt.getConfigFromFile(ze.CLUSTERING_TLS_INSECURE),E=Yt.getConfigFromFile(ze.CLUSTERING_TLS_VERIFY),f=Yt.getConfigFromFile(ze.CLUSTERING_NODENAME),h=Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT);await dS.checkNATSServerInstalled()||u_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let p=await _S.listUsers(),T=Yt.getConfigFromFile(ze.CLUSTERING_USER),g=await _S.getClusterUser();(co.isEmpty(g)||g.active!==!0)&&u_(`Invalid cluster user '${T}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await i_(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await i_(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),await i_(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],k=[];for(let[Oe,Ze]of p.entries())Ze.role.role===o_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ze.active&&(O.push(new fX(Ze.username,MC.decrypt(Ze.hash))),k.push(new EX(Ze.username,MC.decrypt(Ze.hash))));let $=[],{hub_routes:U}=Yt.getClusteringRoutes();if(!co.isEmptyOrZeroLength(U))for(let Oe of U)$.push(`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@${Oe.host}:${Oe.port}`);let b=new _X(Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_NETWORK_PORT),f,s,u,l,_,d,E,h,Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NAME),Yt.getConfigFromFile(ze.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),$,O,k);_==null&&(delete b.tls.ca_file,delete b.leafnodes.tls.ca_file),t=co.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await a_.writeJson(o,b),rc.trace(`Hub server config written to ${o}`));let P=`tls://${g.sys_name_encoded}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${g.uri_encoded_name}:${g.uri_encoded_d_hash}@0.0.0.0:${h}`,F=new dX(Yt.getConfigFromFile(ze.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[P],[z],O,k,u,l,_,d);_==null&&delete F.tls.ca_file,(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await a_.writeJson(c,F),rc.trace(`Leaf server config written to ${c}`))}a(mX,"generateNatsConfig");async function i_(e){let t=c_.get(e);return co.isEmpty(t)&&u_(`port undefined for '${e}'`),await co.isPortTaken(t)&&u_(`'${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(i_,"isPortAvailable");function u_(e){let t=`Error generating clustering config: ${e}`;rc.error(t),console.error(t),process.exit(1)}a(u_,"generateNatsConfigError");async function SX(e){let{port:t,config_file:r}=dS.getServerConfig(e),{username:s,decrypt_hash:n}=await _S.getClusterUser(),i=0,o=500;for(;i<PC;){try{let l=await dS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){rc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=PC)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 co.async_set_timeout(o*i)}let c="0".repeat(hX),u=ec.join(c_.get(ze.ROOTPATH),tc,r);await a_.writeFile(u,c),await a_.remove(u),rc.notify(e,"started.")}a(SX,"removeNatsConfig")});var xC=m((Lce,GC)=>{"use strict";var _r=Q(),pX=Aa(),oe=A(),sc=Be(),ks=require("path"),{PACKAGE_ROOT:__}=A(),BC=Q(),l_=V(),uo="/dev/null",TX=ks.join(__,"launchServiceScripts"),HC=ks.join(__,"utility/scripts"),RX=ks.join(HC,oe.HDB_RESTART_SCRIPT),FC=ks.resolve(__,"dependencies",`${process.platform}-${process.arch}`,sc.NATS_BINARY_NAME);function qC(){let t=pX.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 l_.noBootFile()&&(s[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{name:oe.PROCESS_DESCRIPTORS.HDB,script:oe.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:__}}a(qC,"generateMainServerConfig");var gX=9930;function AX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=ks.join(e,"clustering",sc.NATS_CONFIG_FILES.HUB_SERVER),r=ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=sc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==gX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_HUB},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=uo,i.error_file=uo),i}a(AX,"generateNatsHubServerConfig");var OX=9940;function NX(){_r.initSync(!0);let e=_r.get(oe.CONFIG_PARAMS.ROOTPATH),t=ks.join(e,"clustering",sc.NATS_CONFIG_FILES.LEAF_SERVER),r=ks.join(_r.get(oe.HDB_SETTINGS_NAMES.LOG_PATH_KEY),oe.LOG_NAMES.HDB),s=BC.get(oe.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=sc.LOG_LEVEL_FLAGS[_r.get(oe.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==OX?"-"+s:""),script:FC,args:n?`${n} -c ${t}`:`-c ${t}`,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF},merge_logs:!0,out_file:r,error_file:r,instances:1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=uo,i.error_file=uo),i}a(NX,"generateNatsLeafServerConfig");function bX(){_r.initSync();let e=ks.join(_r.get(oe.CONFIG_PARAMS.LOGGING_ROOT),oe.LOG_NAMES.HDB),t={name:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0,script:oe.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,exec_mode:"fork",env:{[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0},merge_logs:!0,out_file:e,error_file:e,instances:1,cwd:TX,autorestart:!1};return _r.get(oe.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=uo,t.error_file=uo),t}a(bX,"generateClusteringUpgradeV4ServiceConfig");function yX(){let e={[oe.PROCESS_NAME_ENV_PROP]:oe.PROCESS_DESCRIPTORS.RESTART_HDB};return l_.noBootFile()&&(e[oe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{...{name:oe.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:HC},script:RX}}a(yX,"generateRestart");function IX(){return{apps:[qC()]}}a(IX,"generateAllServiceConfigs");GC.exports={generateAllServiceConfigs:IX,generateMainServerConfig:qC,generateRestart:yX,generateNatsHubServerConfig:AX,generateNatsLeafServerConfig:NX,generateClusteringUpgradeV4ServiceConfig:bX}});var rU=m((qce,tU)=>{"use strict";var Te=A(),wX=V(),nc=ES(),ic=nt(),ls=Be(),bn=xC(),d_=Q(),Vs=x(),CX=xs(),{startWorker:kC,onMessageFromWorkers:UX}=dt(),DX=ao(),LX=require("util"),$C=require("child_process"),{execFile:MX}=$C,Pce=LX.promisify($C.exec),vce=require("systeminformation"),fe;tU.exports={enterPM2Mode:PX,start:ci,stop:fS,reload:YC,restart:KC,list:hS,describe:QC,connect:$s,kill:qX,startAllServices:GX,startService:mS,getUniqueServicesList:zC,restartAllServices:xX,isServiceRegistered:JC,reloadStopStart:XC,restartHdb:WC,deleteProcess:HX,startClusteringProcesses:jC,startClusteringThreads:eU,isHdbRestartRunning:FX,isClusteringRunning:VX,stopClustering:kX,reloadClustering:$X};var{PACKAGE_ROOT:Bce}=A(),Hce=A(),{loggerWithTag:Fce}=Vs,oc=!1;UX(e=>{e.type==="restart"&&d_.initSync(!0)});function PX(){oc=!0}a(PX,"enterPM2Mode");function $s(){return fe||(fe=require("pm2")),new Promise((e,t)=>{fe.connect((r,s)=>{Vs.setupConsoleLogging(),r&&t(r),e(s)})})}a($s,"connect");var Kt,vX=10,VC;function ci(e){if(oc)return BX(e);let t=MX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Kt.indexOf(t);i>-1&&Kt.splice(i,1),!VC&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<vX&&ci(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(Te.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?Vs.OUTPUTS.STDERR:Vs.OUTPUTS.STDOUT;Vs.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?Vs.OUTPUTS.STDERR:Vs.OUTPUTS.STDOUT;Vs.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Kt){Kt=[];let n=a(()=>{VC=!0,Kt&&(Kt.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)}Kt.push(t)}a(ci,"start");function BX(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.start(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(BX,"startWithPM2");function fS(e){if(!oc){for(let t of Kt||[])t.name===e&&(Kt.splice(Kt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await $s()}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(fS,"stop");function YC(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.reload(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(YC,"reload");function KC(e){if(!oc)for(let t of Kt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.restart(e,(s,n)=>{fe.disconnect(),t(n)})})}a(KC,"restart");function HX(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.delete(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(HX,"deleteProcess");async function WC(){await ci(bn.generateRestart())}a(WC,"restartHdb");async function FX(){let e=await hS();for(let t in e)if(e[t].name===Te.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(FX,"isHdbRestartRunning");function hS(){return new Promise(async(e,t)=>{try{await $s()}catch(r){t(r)}fe.list((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(hS,"list");function QC(e){return new Promise(async(t,r)=>{try{await $s()}catch(s){r(s)}fe.describe(e,(s,n)=>{s&&(fe.disconnect(),r(s)),fe.disconnect(),t(n)})})}a(QC,"describe");function qX(){if(!oc){for(let e of Kt||[])e.kill();Kt=[];return}return new Promise(async(e,t)=>{try{await $s()}catch(r){t(r)}fe.killDaemon((r,s)=>{r&&(fe.disconnect(),t(r)),fe.disconnect(),e(s)})})}a(qX,"kill");async function GX(){try{await jC(),await eU(),await ci(bn.generateAllServiceConfigs())}catch(e){throw fe.disconnect(),e}}a(GX,"startAllServices");async function mS(e){try{let t;switch(e=e.toLowerCase(),e){case Te.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=bn.generateMainServerConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=bn.generateNatsIngestServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=bn.generateNatsReplyServiceConfig();break;case Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=bn.generateNatsHubServerConfig(),await ci(t),await nc.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=bn.generateNatsLeafServerConfig(),await ci(t),await nc.removeNatsConfig(e);return;case Te.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=bn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await ci(t)}catch(t){throw fe.disconnect(),t}}a(mS,"startService");async function zC(){try{let e=await hS(),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(zC,"getUniqueServicesList");async function xX(e=[]){try{let t=!1,r=await zC();for(let s=0,n=Object.values(r).length;s<n;s++){let o=Object.values(r)[s].name;e.includes(o)||(o===Te.PROCESS_DESCRIPTORS.HDB?t=!0:await KC(o))}t&&await XC(Te.PROCESS_DESCRIPTORS.HDB)}catch(t){throw fe.disconnect(),t}}a(xX,"restartAllServices");async function JC(e){if(Kt?.find(r=>r.name===e))return!0;let t=await DX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(JC,"isServiceRegistered");async function XC(e){let t=e===Te.PROCESS_DESCRIPTORS.HDB?d_.get(Te.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(Te.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await QC(e),s=wX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await fS(e),await mS(e)):e===Te.PROCESS_DESCRIPTORS.HDB?await WC():await YC(e)}a(XC,"reloadStopStart");var ZC;async function jC(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];await mS(t)}}a(jC,"startClusteringProcesses");async function eU(){ZC=kC(Te.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Te.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await ic.createWorkQueueStream(ls.WORK_QUEUE_CONSUMER_NAMES),await ic.updateIngestStreamConsumer(),await ic.updateLocalStreams();let e=await CX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Te.PRE_4_0_0_VERSION){Vs.info("Starting clustering upgrade 4.0.0 process"),kC(Te.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(eU,"startClusteringThreads");async function kX(){for(let e in Te.CLUSTERING_PROCESSES)if(e!==Te.CLUSTERING_PROCESSES.CLUSTERING_INGEST_PROC_DESCRIPTOR)if(e===Te.CLUSTERING_PROCESSES.CLUSTERING_REPLY_SERVICE_DESCRIPTOR)await ZC.terminate();else{let t=Te.CLUSTERING_PROCESSES[e];await fS(t)}}a(kX,"stopClustering");async function VX(){for(let e in Te.CLUSTERING_PROCESSES){let t=Te.CLUSTERING_PROCESSES[e];if(await JC(t)===!1)return!1}return!0}a(VX,"isClusteringRunning");async function $X(){await nc.generateNatsConfig(!0),await ic.reloadNATSHub(),await ic.reloadNATSLeaf(),await nc.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await nc.removeNatsConfig(Te.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a($X,"reloadClustering")});var OS=m((xce,cU)=>{"use strict";var YX=require("minimist"),{isMainThread:TS,parentPort:iU}=require("worker_threads"),He=A(),{PROCESS_DESCRIPTORS_VALIDATE:ac}=He,_s=x(),RS=V(),E_=ES(),lo=nt(),SS=Be(),oU=Nr(),ds=rU(),sU=ao(),KX=dE(),{restartWorkers:f_,onMessageByType:WX}=dt(),{handleHDBError:QX,hdb_errors:zX}=W(),{HTTP_STATUS_CODES:JX}=zX,h_=Q();h_.initSync();var cc=`Restarting HarperDB. This may take up to ${He.RESTART_TIMEOUT_MS/1e3} seconds.`,XX="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nU="Clustering is not enabled so cannot be restarted",ZX="Invalid service",ui,$r;cU.exports={restart:aU,restartService:gS};TS&&WX(He.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?gS({service:e.workerType}):aU({operation:"restart"})});async function aU(e){$r=Object.keys(e).length===0,ui=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR);let t=YX(process.argv);if(t.service){await gS(t);return}if($r&&!ui){console.error(XX);return}if($r&&console.log(cc),ui){ds.enterPM2Mode(),_s.notify(cc);let r=KX(Object.keys(He.CONFIG_PARAM_MAP),!0);return RS.isEmptyOrZeroLength(Object.keys(r))||oU.updateConfigValue(void 0,void 0,r,!0,!0),e4(),cc}return TS?(_s.notify(cc),await AS(),setTimeout(()=>{f_()},50)):iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART}),cc}a(aU,"restart");async function gS(e){let{service:t}=e;if(He.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw QX(new Error,ZX,JX.BAD_REQUEST,void 0,void 0,!0);if(ui=await ds.isServiceRegistered(He.HDB_PROC_DESCRIPTOR),!TS)return iU.postMessage({type:He.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case ac.clustering:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering"),_s.notify("Restarting clustering"),await AS();break;case ac.clustering_config:case ac["clustering config"]:if(!h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}$r&&console.log("Restarting clustering_config"),_s.notify("Restarting clustering_config"),await ds.reloadClustering();break;case"custom_functions":case"custom functions":case ac.harperdb:case ac.http_workers:if($r&&!ui){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}$r&&console.log("Restarting http_workers"),_s.notify("Restarting http_workers"),ui?await ds.restart(He.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(_s.error(r),$r&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(gS,"restartService");async function jX(){await lo.publishToStream(`${SS.SUBJECT_PREFIXES.TXN}.${SS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,SS.WORK_QUEUE_CONSUMER_NAMES.stream_name,lo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(jX,"postDummyNatsMsg");async function e4(){await AS(),await ds.restart(He.HDB_PROC_DESCRIPTOR),await RS.async_set_timeout(2e3),h_.get(He.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await pS(),$r&&(await lo.closeConnection(),process.exit(0))}a(e4,"restartPM2Mode");async function AS(){if(!oU.getConfigFromFile(He.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sU.getHDBProcessInfo()).clustering.length===0)_s.trace("Clustering not running, restart will start clustering services"),await E_.generateNatsConfig(!0),await ds.startClusteringProcesses(),await ds.startClusteringThreads(),await pS(),$r&&await lo.closeConnection();else{await jX(),await E_.generateNatsConfig(!0),ui?(_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 sU.getHDBProcessInfo()).clustering.forEach(n=>{_s.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await RS.async_set_timeout(3e3),await pS(),await lo.updateLocalStreams(),$r&&await lo.closeConnection(),_s.trace("Restart clustering restarting ingest and reply service threads");let t=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(He.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(AS,"restartClustering");async function pS(){await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await E_.removeNatsConfig(He.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(pS,"removeNatsConfig")});var TU=m(($ce,pU)=>{"use strict";var Vce=require("lodash"),Wt=A(),{handleHDBError:uU,hdb_errors:t4}=W(),{HDB_ERROR_MSGS:r4,HTTP_STATUS_CODES:s4}=t4,NS=x();pU.exports={getRolePermissions:i4};var li=Object.create(null),n4=a(e=>({key:e,perms:{}}),"perms_template_obj"),EU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),fU=a((e=!1,t=!1,r=!1,s=!1)=>({[Wt.PERMS_CRUD_ENUM.READ]:e,[Wt.PERMS_CRUD_ENUM.INSERT]:t,[Wt.PERMS_CRUD_ENUM.UPDATE]:r,[Wt.PERMS_CRUD_ENUM.DELETE]:s}),"permissions_template"),bS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...fU(t,r,s,n)}),"table_perms_template"),lU=a((e,t=fU())=>({attribute_name:e,describe:SU(t),[uc]:t[uc],[yS]:t[yS],[IS]:t[IS]}),"attr_perms_template"),_U=a((e,t=!1)=>({attribute_name:e,describe:t,[uc]:t}),"timestamp_attr_perms_template"),{READ:uc,INSERT:yS,UPDATE:IS}=Wt.PERMS_CRUD_ENUM,hU=Object.values(Wt.PERMS_CRUD_ENUM),mU=[uc,yS,IS];function i4(e){let t;try{if(e.permission.super_user||e.permission.cluster_user)return e.permission;let r=Object.assign({},global.hdb_schema);delete r[Wt.SYSTEM_SCHEMA_NAME],t=e.role;let s=JSON.stringify([e.__updatedtime__,r]);if(li[t]&&li[t].key===s)return li[t].perms;let n=o4(e,r);return li[t]?li[t].key=s:li[t]=n4(s),li[t].perms=n,n}catch(r){if(!e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]||e[Wt.TIME_STAMP_NAMES_ENUM.UPDATED_TIME]<Wt.PERMS_UPDATE_RELEASE_TIMESTAMP){let s=`Role permissions for role '${t}' must be updated to align with new structure from the 2.2.0 release.`;throw NS.error(s),NS.debug(r),uU(new Error,r4.OUTDATED_PERMS_TRANSLATION_ERROR,s4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
6
- ${r.stack}`;throw NS.error(s),uU(new Error)}}}a(i4,"getRolePermissions");function o4(e,t){let r=Object.create(null);r.super_user=!1;let s=e.permission;r[Wt.SYSTEM_SCHEMA_NAME]=s[Wt.SYSTEM_SCHEMA_NAME],r.structure_user=s.structure_user;let n=Array.isArray(e.permission.structure_user)||e.permission.structure_user===!0?e.permission.structure_user:[];return Object.keys(t).forEach(i=>{if(n===!0||n.indexOf(i)>-1){r[i]=a4(t[i]);return}r[i]=EU(),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=c4(c,u);r[i].describe||hU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=bS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=bS()})}),r}a(o4,"translateRolePermissions");function a4(e){let t=EU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=bS(!0,!0,!0,!0,!0)}),t}a(a4,"createStructureUserPermissions");function c4(e,t){let{attribute_permissions:r}=e;if(r.length>0){let n=Object.assign({},e);n.attribute_permissions=[];let i=r.reduce((l,_)=>{let{attribute_name:d}=_,E=_;return Wt.TIME_STAMP_NAMES.includes(d)&&(E=_U(d,_[uc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=lU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=SU(_),n.attribute_permissions.push(_),c||u4(_,u)}else if(l!==o){let _;Wt.TIME_STAMP_NAMES.includes(l)?_=_U(l):_=lU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=dU(n),n}else return e.describe=dU(e),e}a(c4,"getTableAttrPerms");function dU(e){return hU.filter(t=>e[t]).length>0}a(dU,"getSchemaTableDescribePerm");function SU(e){return mU.filter(t=>e[t]).length>0}a(SU,"getAttributeDescribePerm");function u4(e,t){mU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(u4,"checkForHashPerms")});var RU={};je(RU,{Resources:()=>m_,keyArrayToString:()=>_o,resetResources:()=>l4,resources:()=>yn});function l4(){return yn=new m_}function _o(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var m_,yn,lc=Se(()=>{Gn();m_=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(l4,"resetResources");a(_o,"keyArrayToString")});var Eo,wS=Se(()=>{Eo=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 _c={};je(_c,{authentication:()=>yU,login:()=>T4,logout:()=>R4,start:()=>p4});async function yU(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?f4?E4:[]:d4?_4:[];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 S_&&(h["Access-Control-Allow-Credentials"]="true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),S_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(S_){let f=(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session=",h=n?.indexOf(f);if(h>=0){let p=n.indexOf(";",h),T=n.indexOf("=",h);c=n.slice(T+1,p===-1?n.length:p),u=await AU.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,p)=>{let T=new R_.AuthAuditLog(f,h,Tt.AUTH_AUDIT_TYPES.AUTHENTICATION,e.headers["x-forwarded-for"]??e.ip,e.method,e.pathname);T.auth_strategy=p,c&&(T.session_id=c),e.headers.referer&&(T.referer=e.headers.referer),e.headers.origin&&(T.origin=e.headers.origin),h===Tt.AUTH_AUDIT_STATUS.SUCCESS?gU.notify(T):gU.error(T)},"authAuditLog"),_;if(s){if(_=fo.get(s),!_){let[f,h]=s.split(" "),p,T;try{switch(f){case"Basic":[p,T]=atob(h).split(":"),_=p||T?await tt.auth(p,T):null;break;case"Bearer":try{_=await(0,T_.validateOperationToken)(h)}catch(g){if(g.message==="invalid token")try{return await(0,T_.validateRefreshToken)(h),{status:-1}}catch{throw g}}break}}catch(g){return S4&&(fo.get(h)||(fo.set(h,h),l(p,Tt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:Ys({error:g.message},e)}}fo.set(s,_),m4&&l(_.username,Tt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):h4&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,p_.getSuperUser)());S_&&(e.session.update=function(f){if(!c){c=(0,NU.v4)();let p=`${(i?i.replace(/^https?:\/\//,"").replace(/\W/,"_")+"-":"")+"hdb-session="}${c}; Path=/; Expires=Tue, 01 Oct 8307 19:33:20 GMT; HttpOnly${e.protocol==="https"?"; SameSite=None; Secure":""}`;o?o.push("Set-Cookie",p):d?.headers?.set&&d.headers.set("Set-Cookie",p)}return f.id=c,AU.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&yn.loginPath?(d.status=302,d.headers.set("Location",yn.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new Eo);for(let h=0;h<E;){let p=o[h++];f.set(p,o[h++])}}return o=null,d}function p4({server:e,port:t}){e.request(yU,{port:t||"all"}),OU||(OU=!0,setInterval(()=>{fo=new Map},Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),bU.user.addListener(()=>{fo=new Map}))}async function T4(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 R4(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var p_,T_,NU,Ir,Tt,R_,bU,gU,_4,d4,E4,f4,AU,S_,h4,m4,S4,fo,OU,g_=Se(()=>{p_=C(br());es();lc();T_=C(Va());de();NU=require("uuid"),Ir=C(Q()),Tt=C(A()),R_=C(x());ho();bU=C(Na());wS();gU=(0,R_.loggerWithTag)("auth-event");Ir.initSync();_4=Ir.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),d4=Ir.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),E4=Ir.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),f4=Ir.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=p_.findAndValidateUser;AU=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),S_=Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,h4=Ir.get(Tt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,m4=Ir.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,S4=Ir.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,fo=new Map;a(yU,"authentication");a(p4,"start");a(T4,"login");a(R4,"logout")});var MU=m((rue,LU)=>{"use strict";var he=require("joi"),IU=require("fs-extra"),wU=require("path"),Ws=ve(),CU=Q(),UU=A(),DU=x(),{hdb_errors:g4}=W(),{HDB_ERROR_MSGS:Dt}=g4,Ks=/^[a-zA-Z0-9-_]+$/;LU.exports={getDropCustomFunctionValidator:O4,setCustomFunctionValidator:N4,addComponentValidator:w4,dropCustomFunctionProjectValidator:C4,packageComponentValidator:U4,deployComponentValidator:D4,setComponentFileValidator:b4,getComponentFileValidator:I4,dropComponentFileValidator:y4};function A_(e,t,r){try{let s=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=wU.join(s,t);return IU.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return DU.error(s),r.message(Dt.VALIDATION_ERR)}}a(A_,"checkProjectExists");function dc(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(dc,"checkFilePath");function A4(e,t,r,s){try{let n=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=wU.join(n,e,t,r+".js");return IU.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return DU.error(n),s.message(Dt.VALIDATION_ERR)}}a(A4,"checkFileExists");function O4(e){let t=he.object({project:he.string().pattern(Ks).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().pattern(Ks).custom(A4.bind(null,e.project,e.type)).custom(dc).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Ws.validateBySchema(e,t)}a(O4,"getDropCustomFunctionValidator");function N4(e){let t=he.object({project:he.string().pattern(Ks).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:he.string().valid("helpers","routes").required(),file:he.string().custom(dc).required(),function_content:he.string().required()});return Ws.validateBySchema(e,t)}a(N4,"setCustomFunctionValidator");function b4(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(dc).required(),payload:he.string().allow("").optional(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ws.validateBySchema(e,t)}a(b4,"setComponentFileValidator");function y4(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:he.string().custom(dc).optional()});return Ws.validateBySchema(e,t)}a(y4,"dropComponentFileValidator");function I4(e){let t=he.object({project:he.string().required(),file:he.string().custom(dc).required(),encoding:he.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Ws.validateBySchema(e,t)}a(I4,"getComponentFileValidator");function w4(e){let t=he.object({project:he.string().pattern(Ks).custom(A_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ws.validateBySchema(e,t)}a(w4,"addComponentValidator");function C4(e){let t=he.object({project:he.string().pattern(Ks).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Ws.validateBySchema(e,t)}a(C4,"dropCustomFunctionProjectValidator");function U4(e){let t=he.object({project:he.string().pattern(Ks).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:he.boolean()});return Ws.validateBySchema(e,t)}a(U4,"packageComponentValidator");function D4(e){let t=he.object({project:he.string().pattern(Ks).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 Ws.validateBySchema(e,t)}a(D4,"deployComponentValidator")});var LS=m((nue,BU)=>{"use strict";var be=require("fs-extra"),CS=require("fast-glob"),me=require("path"),PU=require("tar-fs"),L4=require("uuid").v4,US=require("normalize-path"),Es=MU(),Rt=x(),Ie=A(),$e=Q(),O_=Nr(),M4=V(),{PACKAGE_ROOT:P4}=A(),{handleHDBError:it,hdb_errors:v4}=W(),{HDB_ERROR_MSGS:In,HTTP_STATUS_CODES:ot}=v4,B4=me.join(P4,"application-template"),DS=me.join($e.get(Ie.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vU(){let e=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,In.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(vU,"isCFEnabled");function H4(){Rt.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,In.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,t)}return e}a(H4,"customFunctionsStatus");function F4(){Rt.trace("getting custom api endpoints");let e={},t=$e.get(Ie.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{CS.sync(US(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:CS.sync(US(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:CS.sync(US(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,In.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,r)}return e}a(F4,"getCustomFunctions");function q4(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 it(t,t.message,ot.BAD_REQUEST);Rt.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,In.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(q4,"getCustomFunction");function G4(e){vU(),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 it(t,t.message,ot.BAD_REQUEST);Rt.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,In.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(G4,"setCustomFunction");function x4(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 it(t,t.message,ot.BAD_REQUEST);Rt.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,In.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,o)}}a(x4,"dropCustomFunction");function k4(e){vU(),e.project&&(e.project=me.parse(e.project).name);let t=Es.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.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(B4,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,In.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,n)}}a(k4,"addComponent");function V4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.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(!M4.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 O_.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,In.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,Rt.ERR,i)}}a(V4,"dropCustomFunctionProject");async function $4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.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;Rt.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(DS);let i=me.join(DS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(me.join(n,"node_modules"))}),PU.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($4,"packageComponent");async function Y4(e){e.project&&(e.project=me.parse(e.project).name);let t=Es.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(Rt.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(DS,L4()+".tar"),u=await be.pathExists(c);while(u);await be.outputFile(c,n,{encoding:"base64"});let l=be.createReadStream(c);l.pipe(PU.extract(o)),await new Promise(_=>l.on("end",_)),await be.unlink(c)}return O_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(Y4,"deployComponent");async function K4(){let e=O_.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(K4,"getComponents");async function W4(e){let t=Es.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(W4,"getComponentFile");async function Q4(e){let t=Es.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(Q4,"setComponentFile");async function z4(e){let t=Es.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),O_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(z4,"dropComponent");BU.exports={customFunctionsStatus:H4,getCustomFunctions:F4,getCustomFunction:q4,setCustomFunction:G4,dropCustomFunction:x4,addComponent:k4,dropCustomFunctionProject:V4,packageComponent:$4,deployComponent:Y4,getComponents:K4,getComponentFile:W4,setComponentFile:Q4,dropComponent:z4}});var MS=m((oue,FU)=>{"use strict";var hs=require("joi"),HU=ve();FU.exports={readTransactionLogValidator:J4,deleteTransactionLogsBeforeValidator:X4};function J4(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 HU.validateBySchema(e,t)}a(J4,"readTransactionLogValidator");function X4(e){let t=hs.object({schema:hs.string().required(),table:hs.string().required(),timestamp:hs.date().timestamp().required()});return HU.validateBySchema(e,t)}a(X4,"deleteTransactionLogsBeforeValidator")});var b_=m((cue,VU)=>{"use strict";var PS=A(),N_=nt(),qU=V(),GU=Q(),xU=Ms(),{handleHDBError:mo,hdb_errors:Z4}=W(),{HTTP_STATUS_CODES:So}=Z4,{readTransactionLogValidator:j4,deleteTransactionLogsBeforeValidator:eZ}=MS(),kU="This operation relies on clustering and cannot run with it disable.",tZ="Logs successfully deleted from transaction log.",rZ="All logs successfully deleted from transaction log.";VU.exports={readTransactionLog:sZ,deleteTransactionLogsBefore:nZ};async function*sZ(e){let t=j4(e);if(t)throw mo(t,t.message,So.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(PS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw mo(new Error,kU,So.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qU.checkSchemaTableExist(r,s);if(n)throw mo(new Error,n,So.NOT_FOUND,void 0,void 0,!0);let i=xU.createNatsTableStreamName(r,s),o=await N_.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===PS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(sZ,"readTransactionLog");async function nZ(e){let t=eZ(e);if(t)throw mo(t,t.message,So.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(PS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw mo(new Error,kU,So.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qU.checkSchemaTableExist(r,s);if(i)throw mo(new Error,i,So.NOT_FOUND,void 0,void 0,!0);let o=xU.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),u=await N_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=tZ,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=rZ):d=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(nZ,"deleteTransactionLogsBefore")});var C_=m((lue,JU)=>{"use strict";var y_=require("joi"),I_=require("path"),$U=require("fs-extra"),{exec:iZ}=require("child_process"),oZ=require("util"),YU=oZ.promisify(iZ),Ec=A(),{handleHDBError:po,hdb_errors:aZ}=W(),{HTTP_STATUS_CODES:To}=aZ,hc=Q(),cZ=ve(),fc=x();hc.initSync();var vS=hc.get(Ec.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),KU="npm install --omit=dev --json",uZ=`${KU} --dry-run`;JU.exports={installModules:EZ,auditModules:fZ,installAllRootModules:lZ,uninstallRootModule:_Z,linkHarperdb:dZ};async function lZ(e=!1){await w_(),await mc(e?"npm install --ignore-scripts":"npm install",hc.get(Ec.CONFIG_PARAMS.ROOTPATH))}a(lZ,"installAllRootModules");async function _Z(e){await mc(`npm uninstall ${e}`,hc.get(Ec.CONFIG_PARAMS.ROOTPATH))}a(_Z,"uninstallRootModule");async function dZ(){await w_(),await mc(`npm link ${Ec.PACKAGE_ROOT}`,hc.get(Ec.CONFIG_PARAMS.ROOTPATH))}a(dZ,"linkHarperdb");async function mc(e,t=void 0){let{stdout:r,stderr:s}=await YU(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
7
- `,""));return fc.trace(r,s),r.replace(`
8
- `,"")}a(mc,"runCommand");async function EZ(e){fc.info(`starting installModules for request: ${e}`);let t=zU(e);if(t)throw po(t,t.message,To.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?uZ:KU;await w_(),await QU(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=I_.join(vS,u),_,d=null;try{let{stdout:E,stderr:f}=await YU(n,{cwd:l});_=E?E.replace(`
1
+ "use strict";var UB=Object.create;var $o=Object.defineProperty;var DB=Object.getOwnPropertyDescriptor;var LB=Object.getOwnPropertyNames;var MB=Object.getPrototypeOf,PB=Object.prototype.hasOwnProperty;var a=(e,t)=>$o(e,"name",{value:t,configurable:!0});var 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)$o(e,r,{get:t[r],enumerable:!0})},XT=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of LB(t))!PB.call(e,n)&&n!==r&&$o(e,n,{get:()=>t[n],enumerable:!(s=DB(t,n))||s.enumerable});return e};var U=(e,t,r)=>(r=e!=null?UB(MB(e)):{},XT(t||!e||!e.__esModule?$o(r,"default",{value:e,enumerable:!0}):r,e)),se=e=>XT($o({},"__esModule",{value:!0}),e);var eR=m((Ete,jT)=>{var vB=require("fast-glob"),{statSync:aE,existsSync:cE,readFileSync:BB,writeFileSync:HB}=require("fs"),{spawnSync:FB,spawn:qB}=require("child_process"),{isMainThread:GB}=require("worker_threads"),{join:ws,relative:ZT}=require("path"),{PACKAGE_ROOT:pr}=A(),{tmpdir:xB}=require("os");require("source-map-support").install();var kB=["resources","server","dataLayer"],Yo="ts-build",uE,VB=__filename.endsWith("tsBuild.js");if(VB){if(GB){let r;try{aE(ws(pr,Yo)),r=!0}catch{}if(r)for(let s of vB.sync(kB.map(n=>n+"/**/*.ts"),{cwd:pr})){let n=0,i=0;try{n=aE(ws(pr,s)).mtimeMs-5e3,i=aE(ws(pr,Yo,s.replace(/.ts$/,".js"))).mtimeMs}catch{}if(n>i){console.warn(`TypeScript ${s} is not compiled`+(i?` (TS source file was modified at ${new Date(n)} and compiled file at ${new Date(i)})`:"")+", consider enabling auto-compilation of TypeScript in your IDE), compiling now."),uE=!0;break}}else console.log("TypeScript modules are not compiled, compiling now"),uE=!0;if(uE){let s=FB(process.argv[0],[ws(pr,"node_modules/.bin/tsc")],{cwd:pr});if(s.stdout.length&&console.log(s.stdout.toString()),s.stderr.length&&console.log(s.stderr.toString()),r){let n=ws(xB(),"harperdb-tsc.pid"),i;if(cE(n))try{process.kill(+BB(n,{encoding:"utf8"}),0),i=!0}catch{}if(!i){console.log("starting tsc background process");let o=qB(process.argv[0],[ws(pr,"node_modules/.bin/tsc"),"--watch"],{cwd:pr,detached:!0,stdio:"ignore"});HB(n,o.pid.toString()),o.unref()}}}}let e=jT.constructor,t=e._findPath;e._findPath=function(r,s,n){if(r.startsWith(".")&&!n&&s.length===1&&s[0].startsWith(pr)&&!s[0].includes("node_modules")){let i=ZT(pr,s[0]),o;i.startsWith(Yo)?o=ws(pr,ZT(Yo,i)):o=ws(pr,Yo,i);let c=ws(o,r),u=c+".js";if(cE(u))return u;if(c.includes(".")&&cE(c))return c}return t(r,s,n)}}});var A=m((mte,fR)=>{"use strict";var Tr=require("path"),$B=require("fs"),{relative:fte,join:hte}=Tr,{existsSync:YB}=$B;function KB(){let e=__dirname;for(;!YB(Tr.join(e,"package.json"));){let t=Tr.dirname(e);if(t===e)throw new Error("Could not find package root");e=t}return e}a(KB,"getHDBPackageRoot");var ln=KB(),tR="js",au=tR,WB="harperdb-config.yaml",QB="defaultConfig.yaml",zB="hdb",rR=`harperdb.${au}`,sR=`customFunctionsServer.${au}`,JB=`restartHdb.${au}`,_E="HarperDB",ou="Custom Functions",cu="Clustering Hub",uu="Clustering Leaf",XB="Clustering Ingest Service",ZB="Clustering Reply Service",jB="foreground.pid",eH="hdb.pid",tH="data",rH={HDB:_E,CLUSTERING_HUB:cu,CLUSTERING_LEAF:uu,CLUSTERING_INGEST_SERVICE:XB,CLUSTERING_REPLY_SERVICE:ZB,CUSTOM_FUNCTIONS:ou,RESTART_HDB:"Restart HDB",INSTALL:"Install",RUN:"Run",STOP:"Stop",UPGRADE:"Upgrade",REGISTER:"Register",JOB:"Job",CLUSTERING_UPGRADE_4_0_0:"Upgrade-4-0-0"},sH={HDB:"hdb.log",INSTALL:"install.log",CLUSTERING_HUB:"clustering_hub.log",CLUSTERING_LEAF:"clustering_leaf.log"},nH={NOTIFY:"notify",FATAL:"fatal",ERROR:"error",WARN:"warn",INFO:"info",DEBUG:"debug",TRACE:"trace"},iH={harperdb:_E,"clustering hub":cu,"clustering leaf":uu,"custom functions":ou,custom_functions:ou,clustering:"clustering","clustering config":"clustering config",clustering_config:"clustering_config",http_workers:"http_workers"},oH={CLUSTERING_HUB_PROC_DESCRIPTOR:cu,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu},lE={HDB:Tr.join(ln,"server/harperdb"),CUSTOM_FUNCTIONS:Tr.join(ln,"server/customFunctions"),CLUSTERING_HUB:Tr.join(ln,"server/nats"),CLUSTERING_LEAF:Tr.join(ln,"server/nats")},aH={HDB:Tr.join(lE.HDB,rR),CUSTOM_FUNCTIONS:Tr.join(lE.CUSTOM_FUNCTIONS,sR)},cH={MAIN:"bin/harperdb.js",NATS_INGEST_SERVICE:Tr.join(ln,"launchServiceScripts/launchNatsIngestService.js"),NATS_REPLY_SERVICE:Tr.join(ln,"launchServiceScripts/launchNatsReplyService.js"),NODES_UPGRADE_4_0_0:Tr.join(ln,"launchServiceScripts/launchUpdateNodes4-0-0.js")},uH={SUPER_USER:"super_user",CLUSTER_USER:"cluster_user"},nR="support@harperdb.io",lH="customer-success@harperdb.io",iR=1,_H=4141,oR="https://harperdbhelp.zendesk.com/hc/en-us/requests/new",dH="https://www.harperdb.io/product",EH=`For support, please submit a request at ${oR} or contact ${nR}`,aR=`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 ${iR} role. ${aR}`,SH="Your current license only supports 3 connections to a node.",pH="127.0.0.1",TH=1,RH=/^\.$/,gH=/^\.\.$/,AH="U+002E",OH=/\//g,NH="U+002F",bH=/U\+002F/g,yH=/^U\+002E$/,IH=/^U\+002EU\+002E$/,wH="d",CH=999999,UH="*",DH="--max-old-space-size=",LH="system",MH="__hdb_hash",PH=".harperdb",vH=".hdb",BH="keys",HH="hdb_boot_properties.file",FH=".updateConfig.json",qH="SIGTSTP",GH=24,xH=6e4,kH=448,VH="blob",$H="trash",YH="database",KH="schema",WH="transactions",QH=".count",zH="id",JH="PROCESS_NAME",cR={SETTINGS_PATH_KEY:"settings_path"},uR=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"},sr="hdb_internal:",r0={CREATE_SCHEMA:sr+"create_schema",CREATE_TABLE:sr+"create_table",CREATE_ATTRIBUTE:sr+"create_attribute",ADD_USER:sr+"add_user",ALTER_USER:sr+"alter_user",DROP_USER:sr+"drop_user",HDB_NODES:sr+"hdb_nodes",HDB_USERS:sr+"hdb_users",HDB_WORKERS:sr+"hdb_workers",CATCHUP:sr+"catchup",SCHEMA_CATCHUP:sr+"schema_catchup",WORKER_ROOM:sr+"cluster_workers"},s0={ATTR_ATTRIBUTE_KEY:"attribute",ATTR_CREATEDDATE_KEY:"createddate",ATTR_HASH_ATTRIBUTE_KEY:"hash_attribute",ATTR_ID_KEY:"id",ATTR_NAME_KEY:"name",ATTR_PASSWORD_KEY:"password",ATTR_RESIDENCE_KEY:"residence",ATTR_ROLE_KEY:"role",ATTR_SCHEMA_KEY:"schema",ATTR_SCHEMA_TABLE_KEY:"schema_table",ATTR_TABLE_KEY:"table",ATTR_USERNAME_KEY:"username"},n0="060493.ks",i0=".license",o0={CREATED:"CREATED",IN_PROGRESS:"IN_PROGRESS",COMPLETE:"COMPLETE",ERROR:"ERROR"},K={INSERT:"insert",UPDATE:"update",UPSERT:"upsert",SEARCH_BY_CONDITIONS:"search_by_conditions",SEARCH_BY_HASH:"search_by_hash",SEARCH_BY_ID:"search_by_id",SEARCH_BY_VALUE:"search_by_value",SEARCH:"search",SQL:"sql",CSV_DATA_LOAD:"csv_data_load",CSV_FILE_LOAD:"csv_file_load",CSV_URL_LOAD:"csv_url_load",CREATE_SCHEMA:"create_schema",CREATE_DATABASE:"create_database",CREATE_TABLE:"create_table",CREATE_ATTRIBUTE:"create_attribute",DROP_SCHEMA:"drop_schema",DROP_DATABASE:"drop_database",DROP_TABLE:"drop_table",DESCRIBE_SCHEMA:"describe_schema",DESCRIBE_DATABASE:"describe_database",DESCRIBE_TABLE:"describe_table",DESCRIBE_ALL:"describe_all",DELETE:"delete",ADD_USER:"add_user",ALTER_USER:"alter_user",DROP_USER:"drop_user",LIST_USERS:"list_users",LIST_ROLES:"list_roles",ADD_ROLE:"add_role",ALTER_ROLE:"alter_role",DROP_ROLE:"drop_role",USER_INFO:"user_info",READ_LOG:"read_log",ADD_NODE:"add_node",UPDATE_NODE:"update_node",EXPORT_TO_S3:"export_to_s3",IMPORT_FROM_S3:"import_from_s3",DELETE_FILES_BEFORE:"delete_files_before",DELETE_RECORDS_BEFORE:"delete_records_before",EXPORT_LOCAL:"export_local",SEARCH_JOBS_BY_START_DATE:"search_jobs_by_start_date",GET_JOB:"get_job",DELETE_JOB:"delete_job",UPDATE_JOB:"update_job",GET_FINGERPRINT:"get_fingerprint",SET_LICENSE:"set_license",GET_REGISTRATION_INFO:"registration_info",CONFIGURE_CLUSTER:"configure_cluster",SET_CONFIGURATION:"set_configuration",CLUSTER_STATUS:"cluster_status",CLUSTER_NETWORK:"cluster_network",DROP_ATTRIBUTE:"drop_attribute",REMOVE_NODE:"remove_node",RESTART:"restart",RESTART_SERVICE:"restart_service",CATCHUP:"catchup",SYSTEM_INFORMATION:"system_information",DELETE_AUDIT_LOGS_BEFORE:"delete_audit_logs_before",READ_AUDIT_LOG:"read_audit_log",CREATE_AUTHENTICATION_TOKENS:"create_authentication_tokens",LOGIN:"login",LOGOUT:"logout",REFRESH_OPERATION_TOKEN:"refresh_operation_token",GET_CONFIGURATION:"get_configuration",CUSTOM_FUNCTIONS_STATUS:"custom_functions_status",GET_CUSTOM_FUNCTIONS:"get_custom_functions",GET_CUSTOM_FUNCTION:"get_custom_function",SET_CUSTOM_FUNCTION:"set_custom_function",GET_COMPONENTS:"get_components",GET_COMPONENT_FILE:"get_component_file",SET_COMPONENT_FILE:"set_component_file",DROP_COMPONENT:"drop_component",DROP_CUSTOM_FUNCTION:"drop_custom_function",ADD_CUSTOM_FUNCTION_PROJECT:"add_custom_function_project",ADD_COMPONENT:"add_component",DROP_CUSTOM_FUNCTION_PROJECT:"drop_custom_function_project",PACKAGE_CUSTOM_FUNCTION_PROJECT:"package_custom_function_project",DEPLOY_CUSTOM_FUNCTION_PROJECT:"deploy_custom_function_project",PACKAGE_COMPONENT:"package_component",DEPLOY_COMPONENT:"deploy_component",CLUSTER_SET_ROUTES:"cluster_set_routes",CLUSTER_DELETE_ROUTES:"cluster_delete_routes",CLUSTER_GET_ROUTES:"cluster_get_routes",READ_TRANSACTION_LOG:"read_transaction_log",DELETE_TRANSACTION_LOGS_BEFORE:"delete_transaction_logs_before",INSTALL_NODE_MODULES:"install_node_modules",AUDIT_NODE_MODULES:"audit_node_modules",PURGE_STREAM:"purge_stream",GET_BACKUP:"get_backup"},a0={CSV:".csv",JSON:".json"},c0={AWS_ACCESS_KEY:"aws_access_key_id",AWS_SECRET:"aws_secret_access_key",AWS_BUCKET:"bucket",AWS_FILE_KEY:"key",REGION:"region"},u0={SELECT:"select",INSERT:"insert",UPDATE:"update",DELETE:"delete"},Ko={};Ko[K.INSERT]=K.INSERT;Ko[K.UPDATE]=K.UPDATE;Ko[K.UPSERT]=K.UPSERT;Ko[K.DELETE]=K.DELETE;var Ae=Object.create(null);Ae[K.DESCRIBE_ALL]=K.DESCRIBE_ALL;Ae[K.DESCRIBE_TABLE]=K.DESCRIBE_TABLE;Ae[K.DESCRIBE_SCHEMA]=K.DESCRIBE_SCHEMA;Ae[K.READ_LOG]=K.READ_LOG;Ae[K.ADD_NODE]=K.ADD_NODE;Ae[K.LIST_USERS]=K.LIST_USERS;Ae[K.LIST_ROLES]=K.LIST_ROLES;Ae[K.USER_INFO]=K.USER_INFO;Ae[K.SQL]=K.SQL;Ae[K.GET_JOB]=K.GET_JOB;Ae[K.SEARCH_JOBS_BY_START_DATE]=K.SEARCH_JOBS_BY_START_DATE;Ae[K.DELETE_FILES_BEFORE]=K.DELETE_FILES_BEFORE;Ae[K.EXPORT_LOCAL]=K.EXPORT_LOCAL;Ae[K.EXPORT_TO_S3]=K.EXPORT_TO_S3;Ae[K.CLUSTER_STATUS]=K.CLUSTER_STATUS;Ae[K.REMOVE_NODE]=K.REMOVE_NODE;Ae[K.RESTART]=K.RESTART;Ae[K.CUSTOM_FUNCTIONS_STATUS]=K.CUSTOM_FUNCTIONS_STATUS;Ae[K.GET_CUSTOM_FUNCTIONS]=K.GET_CUSTOM_FUNCTIONS;Ae[K.GET_CUSTOM_FUNCTION]=K.GET_CUSTOM_FUNCTION;Ae[K.SET_CUSTOM_FUNCTION]=K.SET_CUSTOM_FUNCTION;Ae[K.DROP_CUSTOM_FUNCTION]=K.DROP_CUSTOM_FUNCTION;Ae[K.ADD_CUSTOM_FUNCTION_PROJECT]=K.ADD_CUSTOM_FUNCTION_PROJECT;Ae[K.DROP_CUSTOM_FUNCTION_PROJECT]=K.DROP_CUSTOM_FUNCTION_PROJECT;Ae[K.PACKAGE_CUSTOM_FUNCTION_PROJECT]=K.PACKAGE_CUSTOM_FUNCTION_PROJECT;Ae[K.DEPLOY_CUSTOM_FUNCTION_PROJECT]=K.DEPLOY_CUSTOM_FUNCTION_PROJECT;var 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"},lR={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=uR.invert(lR),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"},_R={settings_path:cR.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];_R[t.toLowerCase()]=t}var E0={TABLES:"tables",PATH:"path",AUDIT_PATH:"auditPath"},f0={csv_file_load:"csv_file_load",csv_data_load:K.CSV_DATA_LOAD,csv_url_load:K.CSV_URL_LOAD,delete_files_before:"delete_files_before",delete_records_before:"delete_records_before",delete_audit_logs_before:"delete_audit_logs_before",delete_transaction_logs_before:"delete_transaction_logs_before",empty_trash:"empty_trash",export_local:"export_local",export_to_s3:"export_to_s3",import_from_s3:"import_from_s3"},h0={CLUSTERING_PAYLOAD:"clustering_payload",DELEGATE_THREAD_RESPONSE:"delegate_thread_response",CLUSTERING:"clustering",SCHEMA:"schema",CLUSTER_STATUS:"cluster_status",JOB:"job",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",USER:"user",RESTART:"restart"},m0={BIDIRECTIONAL:"BIDIRECTIONAL",OUTBOUND:"OUTBOUND",INBOUND:"INBOUND"},S0={VERSION_DEFAULT:"2.2.0"},p0={DEVELOPMENT:8192,DEFAULT:512},T0={IDENTIFY:"identify",AUTHENTICATE:"authenticate",AUTHENTICATE_OK:"authenticated",AUTHENTICATE_FAIL:"authenticate_fail",CONNECTION:"connection",CONNECT:"connect",CATCHUP_REQUEST:"catchup_request",CATCHUP_RESPONSE:"catchup",CONFIRM_MSG:"confirm_msg",ERROR:"error",DISCONNECT:"disconnect",SCHEMA_UPDATE_REQ:"schema_update_request",SCHEMA_UPDATE_RES:"schema_update_response",RECONNECT_ATTEMPT:"reconnect_attempt",CONNECT_ERROR:"connect_error",MESSAGE:"msg",VERSION_MISMATCH:"version_mismatch",DIRECTION_CHANGE:"direction_change"},R0={1e3:"SUCCESSFUL_SHUTDOWN",1001:"CLOSE_GOING_AWAY",1002:"CLOSE_PROTOCOL_ERROR",1003:"CLOSE_UNSUPPORTED",1005:"CLOSE_NO_STATUS",1006:"CLOSE_ABNORMAL",1007:"UNSUPPORTED_PAYLOAD",1008:"POLICY_VIOLATION",1009:"CLOSE_TOO_LARGE",1010:"MANDATORY_EXTENSION",1011:"SERVER_ERROR",1012:"SERVICE_RESTART",1013:"SERVER_BUSY",1014:"BAD_GATEWAY",1015:"HANDSHAKE_FAIL",4141:"LICENSE_LIMIT_REACHED"},g0={ENOENT:"ENOENT",EACCES:"EACCES",EEXIST:"EEXIST"},dR={CREATED_TIME:"__createdtime__",UPDATED_TIME:"__updatedtime__"},A0=Symbol("metadata"),O0="__clustering__",N0=Object.values(dR),b0=15984864e5,ER={LESS:"<",LESS_OR_EQ:"<=",GREATER:">",GREATER_OR_EQ:">=",BETWEEN:"..."},y0=uR.invert(ER),I0={GET_CLUSTER_STATUS:"GET_CLUSTER_STATUS",CLUSTER_STATUS_RESPONSE:"CLUSTER_STATUS_RESPONSE",ERROR_RESPONSE:"ERROR",ADD_USER:"ADD_USER",ALTER_USER:"ALTER_USER",DROP_USER:"DROP_USER",HDB_OPERATION:"HDB_OPERATION",ADD_NODE:"ADD_NODE",UPDATE_NODE:"UPDATE_NODE",REMOVE_NODE:"REMOVE_NODE",HDB_USERS_MSG:"HDB_USERS_MSG",HDB_WORKERS:"HDB_WORKERS",HDB_TRANSACTION:"HDB_TRANSACTION"},w0=111,C0=`\r
2
+ `,U0={READ:"read",INSERT:"insert",UPDATE:"update",DELETE:"delete"},D0=["*","%"],L0="unauthorized_access",M0="func_val",P0={HASH_VALUE:"hash_value",TIMESTAMP:"timestamp",USERNAME:"username"},v0={JWT_PRIVATE_KEY_NAME:".jwtPrivate.key",JWT_PUBLIC_KEY_NAME:".jwtPublic.key",JWT_PASSPHRASE_NAME:".jwtPass"},B0={SHUTDOWN:"shutdown",CHILD_STARTED:"child_started",CHILD_STOPPED:"child_stopped",SCHEMA:"schema",USER:"user",CLUSTER_STATUS_RESPONSE:"cluster_status_response",CLUSTER_STATUS_REQUEST:"cluster_status_request",METRICS:"metrics",GET_METRICS:"get_metrics",RESTART:"restart"},H0={HDB_CORE:"hdb_core",CUSTOM_FUNCTIONS:"custom_functions"},F0={HTTP:"http"},q0={STOPPED:"stopped",ONLINE:"online"},G0="3.x.x",x0={SUCCESS:"success",FAILURE:"failure"},k0={AUTHENTICATION:"authentication",AUTHORIZATION:"authorization"};fR.exports={LOCAL_HARPERDB_OPERATIONS:Ae,HDB_SUPPORT_ADDRESS:nR,HDB_SUPPORT_URL:oR,HDB_PRICING_URL:dH,SUPPORT_HELP_MSG:EH,LICENSE_HELP_MSG:aR,HDB_PROC_NAME:rR,HDB_PROC_DESCRIPTOR:_E,CLUSTERING_LEAF_PROC_DESCRIPTOR:uu,CLUSTERING_HUB_PROC_DESCRIPTOR:cu,SYSTEM_SCHEMA_NAME:LH,HASH_FOLDER_NAME:MH,HDB_HOME_DIR_NAME:PH,UPDATE_FILE_NAME:FH,LICENSE_KEY_DIR_NAME:BH,BOOT_PROPS_FILE_NAME:HH,JOB_TYPE_ENUM:f0,JOB_STATUS_ENUM:o0,SYSTEM_TABLE_NAMES:e0,SYSTEM_TABLE_HASH_ATTRIBUTES:t0,OPERATIONS_ENUM:K,VALID_S3_FILE_TYPES:a0,S3_BUCKET_AUTH_KEYS:c0,VALID_SQL_OPS_ENUM:u0,GEO_CONVERSION_ENUM:_0,HDB_SETTINGS_NAMES:lR,HDB_SETTINGS_NAMES_REVERSE_LOOKUP:d0,SERVICE_ACTIONS_ENUM:l0,CLUSTER_MESSAGE_TYPE_ENUM:h0,CLUSTER_CONNECTION_DIRECTION_ENUM:m0,CLUSTER_EVENTS_DEFS_ENUM:T0,PERIOD_REGEX:RH,DOUBLE_PERIOD_REGEX:gH,UNICODE_PERIOD:AH,FORWARD_SLASH_REGEX:OH,UNICODE_FORWARD_SLASH:NH,ESCAPED_FORWARD_SLASH_REGEX:bH,ESCAPED_PERIOD_REGEX:yH,ESCAPED_DOUBLE_PERIOD_REGEX:IH,REG_KEY_FILE_NAME:n0,RESTART_TIMEOUT_MS:xH,HDB_FILE_PERMISSIONS:kH,DATABASES_DIR_NAME:YH,LEGACY_DATABASES_DIR_NAME:KH,TRANSACTIONS_DIR_NAME:WH,LIMIT_COUNT_NAME:QH,ID_ATTRIBUTE_STRING:zH,INSERT_MODULE_ENUM:ZH,UPGRADE_JSON_FIELD_NAMES_ENUM:jH,RESTART_CODE:qH,RESTART_CODE_NUM:GH,CLUSTER_OPERATIONS:Ko,SYSTEM_DEFAULT_ATTRIBUTE_NAMES:s0,HDB_INTERNAL_SC_CHANNEL_PREFIX:sr,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:dR,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:iR,BASIC_LICENSE_CLUSTER_CONNECTION_LIMIT_WS_ERROR_CODE:_H,VALUE_SEARCH_COMPARATORS:ER,VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP:y0,LICENSE_FILE_NAME:i0,WEBSOCKET_CLOSE_CODE_DESCRIPTION_LOOKUP:R0,NEW_LINE:C0,BASIC_LICENSE_MAX_CLUSTER_USER_ROLES:TH,MOMENT_DAYS_TAG:wH,API_TURNOVER_SEC:CH,LOOPBACK:pH,CODE_EXTENSION:au,WILDCARD_SEARCH_VALUE:UH,NODE_ERROR_CODES:g0,JAVASCRIPT_EXTENSION:tR,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:sR,CUSTOM_FUNCTION_PROC_DESCRIPTOR:ou,SERVICES:H0,THREAD_TYPES:F0,MEM_SETTING_KEY:DH,HDB_RESTART_SCRIPT:JB,PROCESS_DESCRIPTORS:rH,SERVICE_SERVERS:aH,SERVICE_SERVERS_CWD:lE,PROCESS_DESCRIPTORS_VALIDATE:iH,LAUNCH_SERVICE_SCRIPTS:cH,LOG_LEVELS:nH,PROCESS_NAME_ENV_PROP:JH,LOG_NAMES:sH,PM2_PROCESS_STATUSES:q0,CONFIG_PARAM_MAP:_R,CONFIG_PARAMS:g,HDB_CONFIG_FILE:WB,HDB_DEFAULT_CONFIG_FILE:QB,ROLE_TYPES_ENUM:uH,BOOT_PROP_PARAMS:cR,INSTALL_PROMPTS:XH,HDB_ROOT_DIR_NAME:zB,CLUSTERING_PROCESSES:oH,FOREGROUND_PID_FILE:jB,PACKAGE_ROOT:ln,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};eR()});var dE=m((pte,SR)=>{"use strict";var hR=require("minimist");SR.exports=V0;function V0(e=[],t=!1){if(!Array.isArray(e))return{};let r,s;t?(r=mR(process.env),s=mR(hR(process.argv))):(r=process.env,s=hR(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 mR(e){let t,r=Object.keys(e),s=r.length,n={};for(;s--;)t=r[s],n[t.toLowerCase()]=e[t];return n}a(mR,"objKeysToLowerCase")});var k=m((Rte,TE)=>{"use strict";var xn=require("fs-extra"),{workerData:$0,threadId:Y0}=require("worker_threads"),Ds=require("path"),RR=require("yaml"),gR=require("properties-reader"),et=A(),pR=dE(),K0=require("os"),{PACKAGE_ROOT:fE}=A(),{_assignPackageExport:W0}=require("../index"),Qo={};for(let e in console)Qo[e]||(Qo[e]=console[e]);var Pt={notify:7,fatal:6,error:5,warn:4,info:3,debug:2,trace:1},AR={STDOUT:"stdOut",STDERR:"stdErr"},Q0=Ds.join(fE,"logs"),z0=Ds.join(fE,"config/yaml/",et.HDB_DEFAULT_CONFIG_FILE),J0=1e4,Cs,Us,Mt,lu,_u,zo,vi,Wo;Wo===void 0&&OR();TE.exports={notify:yR,fatal:IR,error:Jo,warn:pE,info:du,debug:SE,trace:mE,setLogLevel:sF,log_level:Mt,loggerWithTag:X0,suppressLogging:Z0,initLogSettings:OR,setupConsoleLogging:NR,logCustomLevel:tF,closeLogFile:hE,getLogFilePath:()=>zo,OUTPUTS:AR,AuthAuditLog:oF};W0("logger",TE.exports);function OR(e=!1){try{if(Wo===void 0||e){hE();let t=rF(),r=pR(["ROOTPATH"]);try{Wo=gR(t)}catch(s){if(!r.ROOTPATH||r.ROOTPATH&&!xn.pathExistsSync(Ds.join(r.ROOTPATH,et.HDB_CONFIG_FILE)))throw s}({level:Mt,config_log_path:_u,to_file:Cs,to_stream:Us}=nF(r.ROOTPATH?Ds.join(r.ROOTPATH,et.HDB_CONFIG_FILE):Wo.get("settings_path"))),lu=et.LOG_NAMES.HDB,zo=Ds.join(_u,lu)}}catch(t){if(Wo=void 0,t.code===et.NODE_ERROR_CODES.ENOENT){let r=pR(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){Mt=u;continue}if(c===et.CONFIG_PARAMS.LOGGING_STDSTREAMS){Us=u;continue}c===et.CONFIG_PARAMS.LOGGING_FILE&&(Cs=c)}let{default_level:s,default_to_file:n,default_to_stream:i}=iF();Cs=Cs===void 0?n:Cs,Cs=TR(Cs),Us=Us===void 0?i:Us,Us=TR(Us),Mt=Mt===void 0?s:Mt,_u=Q0,lu=et.LOG_NAMES.INSTALL,zo=Ds.join(_u,lu);return}throw Jo("Error initializing log settings"),Jo(t),t}NR()}a(OR,"initLogSettings");var EE=!0;function NR(){Pi("error",Jo),Pi("warn",pE),Pi("log",du),Pi("info",du),Pi("debug",SE),Pi("trace",mE)}a(NR,"setupConsoleLogging");function Pi(e,t){console[e]=function(...r){if(EE&&t(...r),!/PM2 log:|App \[/.test(r[0]))return Qo[e](...r)}}a(Pi,"logConsole");function X0(e){let t={tagName:e.replace(/ /g,"-")};return{notify:r(yR),fatal:r(IR),error:r(Jo),warn:r(pE),info:r(du),debug:r(SE),trace:r(mE)};function r(s){return function(...n){return s(t,...n)}}}a(X0,"loggerWithTag");function Z0(e){try{EE=!1,e()}finally{EE=!0}}a(Z0,"suppressLogging");var j0=$0?.name?.replace(/ /g,"-")||"main";function Ls(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(Ls,"createLogRecord");function Xo(e){Cs&&bR(e),Us&&process.stdout.write(e)}a(Xo,"logStdOut");function Eu(e){Cs&&bR(e),Us&&process.stderr.write(e)}a(Eu,"logStdErr");function bR(e){eF(),vi?xn.appendFileSync(vi,e):Qo.log(e)}a(bR,"logToFile");function hE(){try{xn.closeSync(vi)}catch{}vi=null}a(hE,"closeLogFile");function eF(){if(!vi){try{if(!zo)debugger;vi=xn.openSync(zo,"a")}catch(e){Qo.error(e)}setTimeout(()=>{hE()},J0).unref()}}a(eF,"openLogFile");function du(...e){Pt[Mt]<=Pt.info&&Xo(Ls("info",e))}a(du,"info");function mE(...e){Pt[Mt]<=Pt.trace&&Xo(Ls("trace",e))}a(mE,"trace");function Jo(...e){Pt[Mt]<=Pt.error&&Eu(Ls("error",e))}a(Jo,"error");function SE(...e){Pt[Mt]<=Pt.debug&&Xo(Ls("debug",e))}a(SE,"debug");function yR(...e){Pt[Mt]<=Pt.notify&&Xo(Ls("notify",e))}a(yR,"notify");function IR(...e){Pt[Mt]<=Pt.fatal&&Eu(Ls("fatal",e))}a(IR,"fatal");function pE(...e){Pt[Mt]<=Pt.warn&&Eu(Ls("warn",e))}a(pE,"warn");function tF(e,t,...r){t===AR.STDERR?Eu(Ls(e,r)):Xo(Ls(e,r))}a(tF,"logCustomLevel");function rF(){let e;try{e=K0.homedir()}catch{e=process.env.HOME}e||(e="~/");let t=Ds.join(e,et.HDB_HOME_DIR_NAME,et.BOOT_PROPS_FILE_NAME);return xn.existsSync(t)||(t=Ds.join(fE,"utility/hdb_boot_properties.file")),t}a(rF,"getPropsFilePath");function sF(e){Mt=e}a(sF,"setLogLevel");function TR(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(TR,"autoCastBoolean");function nF(e){try{if(e.includes("config/settings.js")){let o=gR(e);return{level:o.get(et.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY),config_log_path:Ds.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=RR.parseDocument(xn.readFileSync(e,"utf8")),r=t.getIn(["logging","level"]),s=t.getIn(["logging","root"]),n=t.getIn(["logging","file"]),i=t.getIn(["logging","stdStreams"]);return{level:r,config_log_path:s,to_file:n,to_stream:i}}catch(t){if(t.code===et.NODE_ERROR_CODES.ENOENT)throw t;console.error("Error accessing config file for logging"),console.error(t)}}a(nF,"getLogConfig");function iF(){try{let e=RR.parseDocument(xn.readFileSync(z0,"utf8")),t=e.getIn(["logging","level"]),r=e.getIn(["logging","file"]),s=e.getIn(["logging","stdStreams"]);return{default_level:t,default_to_file:r,default_to_stream:s}}catch(e){console.error("Error accessing default config file for logging"),console.error(e)}}a(iF,"getDefaultConfig");function oF(e,t,r,s,n,i){this.username=e,this.status=t,this.type=r,this.originating_ip=s,this.request_method=n,this.path=i}a(oF,"AuthAuditLog")});var CR=m((Ate,wR)=>{"use strict";var aF=require("util"),cF=require("path"),uF=require("child_process"),lF=aF.promisify(uF.execFile),_F=1e3*1e3*10;wR.exports={findPs:dF};async function dF(e){let t={};try{await Promise.all(["comm","args","ppid","uid","%cpu","%mem"].map(async r=>{let{stdout:s}=await lF("ps",["wwxo",`pid,${r}`],{maxBuffer:_F});for(let n of s.trim().split(`
4
+ `).slice(1)){n=n.trim();let[i]=n.split(" ",1),o=n.slice(i.length+1).trim();t[i]===void 0&&(t[i]={}),t[i][r]=o}}))}catch(r){throw r}return Object.entries(t).filter(([,r])=>r.comm&&r.args&&r.ppid&&r.uid&&r["%cpu"]&&r["%mem"]&&r.args.includes(e)).map(([r,s])=>({pid:Number.parseInt(r,10),name:cF.basename(s.comm),cmd:s.args,ppid:Number.parseInt(s.ppid,10),uid:Number.parseInt(s.uid,10),cpu:Number.parseFloat(s["%cpu"]),memory:Number.parseFloat(s["%mem"])}))}a(dF,"findPs")});var ke=m((Nte,DR)=>{"use strict";var EF="__dbis__",fF="__txns__",hF="__environment_name__",mF="__dbi_defintion__",SF={EQUALS:"equals",STARTS_WITH:"startsWith",_STARTS_WITH:"starts_with",ENDS_WITH:"endsWith",_ENDS_WITH:"ends_with",CONTAINS:"contains",SEARCH_ALL:"searchAll",SEARCH_ALL_TO_MAP:"searchAllToMap",BATCH_SEARCH_BY_HASH:"batchSearchByHash",BATCH_SEARCH_BY_HASH_TO_MAP:"batchSearchByHashToMap",GREATER_THAN:"greaterThan",_GREATER_THAN:"greater_than",GREATER_THAN_EQUAL:"greaterThanEqual",_GREATER_THAN_EQUAL:"greater_than_equal",LESS_THAN:"lessThan",_LESS_THAN:"less_than",LESS_THAN_EQUAL:"lessThanEqual",_LESS_THAN_EQUAL:"less_than_equal",BETWEEN:"between"},pF=["__createdtime__","__updatedtime__"],TF="\uFFFF",UR={TIMESTAMP:"timestamp",HASH_VALUE:"hash_value",USER_NAME:"user_name"},RF=Object.values(UR);DR.exports={AUDIT_STORE_NAME:fF,INTERNAL_DBIS_NAME:EF,DBI_DEFINITION_NAME:mF,SEARCH_TYPES:SF,TIMESTAMP_NAMES:pF,MAX_SEARCH_KEY_LENGTH:256,ENVIRONMENT_NAME_KEY:hF,TRANSACTIONS_DBI_NAMES_ENUM:UR,TRANSACTIONS_DBIS:RF,OVERFLOW_MARKER:TF}});var nr=m((bte,GR)=>{"use strict";var LR=A(),MR=ke(),PR={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},vR=a(e=>`${e} Check logs and try again.`,"CHECK_LOGS_WRAPPER"),BR={500:vR("There was an error processing your request."),400:"Invalid request"},gF=BR[PR.INTERNAL_SERVER_ERROR],AF={OP_NOT_SUPPORTED_FOR_FS:e=>`${e} is not available for this instance because it uses the File System data store.`,MISSING_VALUE:e=>`${e} is missing.`,INVALID_VALUE:e=>`${e} is invalid.`,NOT_FOUND:e=>`${e} not found.`},OF={CONFIG_VALIDATION:e=>`HarperDB config file validation error: ${e}`},NF={DEFAULT_BULK_LOAD_ERR:"There was an error during your bulk load into HarperDB.",DOWNLOAD_FILE_ERR:e=>`There was an error downloading '${e}'.`,INSERT_JSON_ERR:"There was an error inserting the downloaded JSON data.",INSERT_CSV_ERR:"There was an error inserting the downloaded CSV data.",INVALID_ACTION_PARAM_ERR:e=>`Bulk load operation failed - ${e} is not a valid 'action' parameter`,INVALID_FILE_EXT_ERR:e=>`Error selecting correct parser - valid file type not found in json - ${e}`,MAX_FILE_SIZE_ERR:(e,t)=>`File size is ${e} bytes, which exceeded the maximum size allowed of: ${t} bytes`,PAPA_PARSE_ERR:"There was an error parsing the downloaded CSV data.",S3_DOWNLOAD_ERR:e=>`There was an error downloading '${e}' from AWS.`,WRITE_TEMP_FILE_ERR:"Error writing temporary file to storage"},bF={BASE_PATH_REQUIRED:"base_path is required",DESTINATION_PATH_REQUIRED:"destination_path is required",ENV_NAME_REQUIRED:"env_name is required",INVALID_BASE_PATH:"invalid base_path",INVALID_DESTINATION_PATH:"invalid destination_path",INVALID_ENVIRONMENT:"invalid environment",ENV_REQUIRED:"env is required",DBI_NAME_REQUIRED:"dbi_name is required",DBI_DOES_NOT_EXIST:"dbi does not exist",HASH_ATTRIBUTE_REQUIRED:"hash_attribute is required",ID_REQUIRED:"id is required",IDS_REQUIRED:"ids is required",IDS_MUST_BE_ITERABLE:"ids must be iterable",FETCH_ATTRIBUTES_REQUIRED:"fetch_attributes is required",FETCH_ATTRIBUTES_MUST_BE_ARRAY:"fetch_attributes must be an array",ATTRIBUTE_REQUIRED:"attribute is required",SEARCH_VALUE_REQUIRED:"search_value is required",SEARCH_VALUE_TOO_LARGE:"search_value is too long",WRITE_ATTRIBUTES_REQUIRED:"write_attributes is required",WRITE_ATTRIBUTES_MUST_BE_ARRAY:"write_attributes must be an array",RECORDS_REQUIRED:"records is required",RECORDS_MUST_BE_ARRAY:"records must be an array",CANNOT_CREATE_INTERNAL_DBIS_NAME:`cannot create a dbi named ${MR.INTERNAL_DBIS_NAME}`,CANNOT_DROP_INTERNAL_DBIS_NAME:`cannot drop a dbi named ${MR.INTERNAL_DBIS_NAME}`,START_VALUE_REQUIRED:"start_value is required",END_VALUE_REQUIRED:"end_value is required",CANNOT_COMPARE_STRING_TO_NUMERIC_KEYS:"cannot compare a string to numeric keys",END_VALUE_MUST_BE_GREATER_THAN_START_VALUE:"end_value must be greater than or equal to start_value",UNKNOWN_SEARCH_TYPE:"unknown search type",CANNOT_DROP_TABLE_HASH_ATTRIBUTE:"cannot drop a table's hash attribute"},yF={ATTR_NAME_LENGTH_ERR:e=>`transaction aborted due to attribute name ${e} being too long. Attribute names cannot be longer than ${LR.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 ${LR.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"},HR={GENERIC_AUTH_FAIL:"Login failed",USER_INACTIVE:"Cannot complete request: User is inactive",INVALID_TOKEN:"invalid token",NO_ENCRYPTION_KEYS:"unable to generate JWT as there are no encryption keys. please contact your administrator",INVALID_CREDENTIALS:"invalid credentials",PASSWORD_REQUIRED:"password is required",USERNAME_REQUIRED:"username is required",REFRESH_TOKEN_REQUIRED:"refresh_token is required",INVALID_AUTH_OBJECT:"invalid auth_object",INVALID_BODY:"invalid body",TOKEN_EXPIRED:"token expired",REFRESH_TOKEN_SAVE_FAILED:"unable to store refresh_token"},IF={DEFAULT_INVALID_REQUEST:"Invalid request",OP_AUTH_PERMS_ERROR:"This operation is not authorized due to role restrictions and/or invalid database items",OP_IS_SU_ONLY:e=>`Operation '${e}' is restricted to 'super_user' roles`,OP_NOT_FOUND:e=>`Operation '${e}' not found`,SYSTEM_TIMESTAMP_PERMS_ERR:"Internal timestamp attributes - '__createdtime_' and '__updatedtime__' - cannot be inserted to or updated by HDB users.",UNKNOWN_OP_AUTH_ERROR:(e,t,r)=>`There was an error authorizing ${e} op on table '${t}.${r}'`,USER_HAS_NO_PERMS:e=>`User ${e} has no role or permissions. Please assign the user a valid role.`,DROP_SYSTEM:"The 'system' database, tables and records are used internally by HarperDB and cannot be updated or removed."},wF={ATTR_PERM_MISSING:(e,t)=>`${e.toUpperCase()} attribute permission missing for '${t}'`,ATTR_PERM_MISSING_NAME:"Permission object in 'attribute_permission' missing an 'attribute_name'",ATTR_PERM_NOT_BOOLEAN:(e,t)=>`${e.toUpperCase()} attribute permission for '${t}' must be a boolean`,ATTR_PERMS_ARRAY_MISSING:"Missing 'attribute_permissions' array",ATTR_PERMS_NOT_ARRAY:"Value for 'attribute_permissions' must be an array",INVALID_ATTRIBUTE_IN_PERMS:e=>`Invalid attribute '${e}' in 'attribute_permissions'`,INVALID_PERM_KEY:e=>`Invalid table permission key value '${e}'`,INVALID_ATTR_PERM_KEY:e=>`Invalid attribute permission key value '${e}'`,INVALID_ROLE_JSON_KEYS:e=>`Invalid ${e.length>1?"keys":"key"} in JSON body - '${e.join("', '")}'`,MISMATCHED_TABLE_ATTR_PERMS:e=>`You have a conflict with TABLE permissions for '${e}' being false and ATTRIBUTE permissions being true`,OUTDATED_PERMS_TRANSLATION_ERROR:"This instance was recently upgraded and uses our new role permissions structure. Please login to this instance in HarperDB Studio, go to 'Roles', and click 'Update Role Permission' for all standard roles to migrate them to the new structure.",ROLE_ALREADY_EXISTS:e=>`A role with name '${e}' already exists`,ROLE_NOT_FOUND:"Role not found",ROLE_PERMS_ERROR:"Errors in the role permissions JSON provided",SCHEMA_PERM_ERROR:e=>`Your role does not have permission to view database metadata for '${e}'`,SCHEMA_TABLE_PERM_ERROR:(e,t)=>`Your role does not have permission to view database.table metadata for '${e}.${t}'`,SU_ROLE_MISSING_ERROR:"Missing 'super_user' key/value in permission set",SU_CU_ROLE_BOOLEAN_ERROR:e=>`Value for '${e}' permission must be a boolean`,STRUCTURE_USER_ROLE_TYPE_ERROR:e=>`Value for '${e}' permission must be a boolean or Array`,SU_CU_ROLE_NO_PERMS_ALLOWED:e=>`Roles with '${e}' set to true cannot have other permissions set.`,SU_CU_ROLE_COMBINED_ERROR:"Roles cannot have both 'super_user' and 'cluster_user' values included in their permissions set.",TABLE_PERM_MISSING:e=>`Missing table ${e.toUpperCase()} permission`,TABLE_PERM_NOT_BOOLEAN:e=>`Table ${e.toUpperCase()} permission must be a boolean`},CF={ATTR_NOT_FOUND:(e,t,r)=>`Attribute '${r}' does not exist on '${e}.${t}'`,ATTR_EXISTS_ERR:(e,t,r)=>`Attribute '${r}' already exists in ${e}.${t}'`,DESCRIBE_ALL_ERR:"There was an error during describeAll. Please check the logs and try again.",INVALID_TABLE_ERR:e=>`Invalid table ${JSON.stringify(e)}`,SCHEMA_NOT_FOUND:e=>`database '${e}' does not exist`,SCHEMA_EXISTS_ERR:e=>`database '${e}' already exists`,TABLE_EXISTS_ERR:(e,t)=>`Table '${t}' already exists in '${e}'`,SCHEMA_REQUIRED_ERR:"database is required",TABLE_NOT_FOUND:(e,t)=>`Table '${e}.${t}' does not exist`,TABLE_REQUIRED_ERR:"table is required"},UF={OUTER_JOIN_TRANSLATION_ERROR:"There was an error translating the final SQL outer join data."},DF={ALTER_USER_DUP_ROLES:e=>`Update failed. There are duplicates for the '${e}' role which is not allowed. Update your roles and try again.`,ALTER_USER_ROLE_NOT_FOUND:e=>`Update failed. Requested '${e}' role not found.`,DUP_ROLES_FOUND:e=>`Multiple ${e} roles found. Roles must have unique 'role' value. Please update and try again.`,ROLE_NAME_NOT_FOUND:e=>`${e} role not found`,USER_ALREADY_EXISTS:e=>`User ${e} already exists`,USER_NOT_EXIST:e=>`User ${e} does not exist`},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.`},qR={INVALID_ITC_DATA_TYPE:"Invalid ITC event data type, must be an object",MISSING_TYPE:"ITC event missing 'type'",MISSING_MSG:"ITC event missing 'message'",MISSING_ORIGIN:"ITC event message missing 'originator' property",INVALID_EVENT:e=>`ITC server received invalid event type: ${e}`},LF={FUNCTION_STATUS:"Error getting custom function status, check the log for more details",GET_FUNCTIONS:"Error getting custom functions, check the log for more details",GET_FUNCTION:"Error getting custom function, check the log for more details",SET_FUNCTION:"Error setting custom function, check the log for more details",NO_PROJECT:"Project does not exist. Create one using 'add_custom_function_project'",PROJECT_EXISTS:"Project already exists",VALIDATION_ERR:"Error validating request, check the log for more details",NO_FILE:"File does not exist",BAD_FILE_NAME:"File name can only contain alphanumeric, dash and underscore characters",BAD_PROJECT_NAME:"Project name can only contain alphanumeric, dash and underscores characters",BAD_PACKAGE:"Packaged project must be base64-encoded tar file of project directory",DROP_FUNCTION:"Error dropping custom function, check the log for more details",ADD_FUNCTION:"Error adding custom function project, check the log for more details",DROP_FUNCTION_PROJECT:"Error dropping custom function project, check the log for more details",BAD_FILE_PATH:"Filepath must be valid, and contain the name of the tarball you wish to write",NOT_ENABLED:"Custom functions is not enabled, to enable set fastifyRoutes enabled to true in hdb/harperdb-config.yaml file."},MF={CLUSTERING_NOT_ENABLED:"Clustering must be enabled to perform this operation."},PF={...HR,...NF,...AF,...IF,...wF,...CF,...UF,...DF,...yF,...FR,...qR,...LF,...MF,...OF};GR.exports={CHECK_LOGS_WRAPPER:vR,HDB_ERROR_MSGS:PF,DEFAULT_ERROR_MSGS:BR,DEFAULT_ERROR_RESP:gF,HTTP_STATUS_CODES:PR,LMDB_ERRORS_ENUM:bF,AUTHENTICATION_ERROR_MSGS:HR,VALIDATION_ERROR_MSGS:FR,ITC_ERRORS:qR}});var W=m((Ite,VR)=>{"use strict";var Bi=nr(),vF=k(),BF=A(),fu=class extends Error{static{a(this,"HdbError")}constructor(t,r,s,n,i){super(),Error.captureStackTrace(this,xR),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&&vF[n](i)}},RE=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}},gE=class extends Error{static{a(this,"ServerError")}constructor(t,r){super(t),this.statusCode=r||500}};function xR(e,t,r,s=BF.LOG_LEVELS.ERROR,n=null,i=!1){if(kR(e))return e;let o=new fu(e,t,r,s,n);return i&&delete o.stack,o}a(xR,"handleHDBError");function kR(e){return e.__proto__.constructor.name===fu.name}a(kR,"isHDBError");VR.exports={isHDBError:kR,handleHDBError:xR,ClientError:RE,ServerError:gE,hdb_errors:Bi}});var Ce=m((Cte,JR)=>{"use strict";var ra=A(),HF=V(),vt=Q(),sa=require("path"),FF=require("minimist"),$R=require("fs-extra"),YR=require("lodash");vt.initSync();var{CONFIG_PARAMS:_n,SCHEMAS_PARAM_CONFIG:Zo,SYSTEM_SCHEMA_NAME:hu}=ra,jo,ea,ta;function KR(){if(jo!==void 0)return jo;if(vt.getHdbBasePath()!==void 0)return jo=vt.get(_n.STORAGE_PATH)||sa.join(vt.getHdbBasePath(),ra.DATABASES_DIR_NAME),jo}a(KR,"getBaseSchemaPath");function WR(){if(ea!==void 0)return ea;if(vt.getHdbBasePath()!==void 0)return ea=zR(hu),ea}a(WR,"getSystemSchemaPath");function QR(){if(ta!==void 0)return ta;if(vt.getHdbBasePath()!==void 0)return ta=vt.get(ra.CONFIG_PARAMS.STORAGE_AUDIT_PATH)||sa.join(vt.getHdbBasePath(),ra.TRANSACTIONS_DIR_NAME),ta}a(QR,"getTransactionAuditStoreBasePath");function qF(e,t){let r=vt.get(_n.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.auditPath||r?.auditPath||sa.join(QR(),e.toString())}a(qF,"getTransactionAuditStorePath");function zR(e,t){e=e.toString(),t=t&&t.toString();let r=vt.get(ra.CONFIG_PARAMS.SCHEMAS)?.[e];return t&&r?.tables?.[t]?.path||r?.path||sa.join(KR(),e)}a(zR,"getSchemaPath");function GF(e,t){e=e.toString(),t=t.toString();let r=process.env;Object.assign(r,FF(process.argv));let s=r[_n.SCHEMAS.toUpperCase()];if(s){let i;try{i=JSON.parse(s)}catch(o){if(!HF.isObject(s))throw o;i=s}for(let o of i){let c=o[hu];if(!c)continue;let u=vt.get(_n.SCHEMAS);u=u??{};let l=c?.tables?.[t]?.[Zo.PATH];if(l)return YR.set(u,[hu,Zo.TABLES,t,Zo.PATH],l),vt.setProperty(_n.SCHEMAS,u),l;let _=c?.[Zo.PATH];if(_)return YR.set(u,[hu,Zo.PATH],_),vt.setProperty(_n.SCHEMAS,u),_}}let n=r[_n.STORAGE_PATH.toUpperCase()];if(n){if(!$R.pathExistsSync(n))throw new Error(n+" does not exist");let i=sa.join(n,e);return $R.mkdirsSync(i),vt.setProperty(_n.STORAGE_PATH,n),i}return WR()}a(GF,"initSystemSchemaPaths");function xF(){jo=void 0,ea=void 0,ta=void 0}a(xF,"resetPaths");JR.exports={getBaseSchemaPath:KR,getSystemSchemaPath:WR,getTransactionAuditStorePath:qF,getTransactionAuditStoreBasePath:QR,getSchemaPath:zR,initSystemSchemaPaths:GF,resetPaths:xF}});var Bt=m((Mte,tg)=>{"use strict";var kF=nr().LMDB_ERRORS_ENUM,Dte=require("lmdb"),VF=ke(),Lte=require("buffer").Buffer,{OVERFLOW_MARKER:XR,MAX_SEARCH_KEY_LENGTH:mu}=VF,ZR=["number","string","symbol","boolean","bigint"];function $F(e){if(e=e?.primaryStore||e,!e)throw new Error(kF.ENV_REQUIRED)}a($F,"validateEnv");function YF(e){if(e==null)return null;let t;try{t=typeof e=="object"?JSON.stringify(e):e.toString()}catch{t=e.toString()}return t}a(YF,"stringifyData");function KF(e){return e instanceof Date?e.valueOf():e}a(KF,"convertKeyValueToWrite");function WF(e){if(e==null)return;if(ZR.includes(typeof e))return e.length>mu?[e.slice(0,mu)+XR]:[e];let t;if(Array.isArray(e)){t=[];for(let r=0,s=e.length;r<s;r++){let n=e[r];if(ZR.includes(typeof n))n.length>mu?t.push(n.slice(0,mu)+XR):t.push(n);else if(n instanceof Date)return t.push(n.getTime())}}else if(e instanceof Date)return[e.getTime()];return t}a(WF,"getIndexedValues");var Su=0,jR=0;function eg(){jR=Date.now()-performance.now()}a(eg,"adjustStartTime");eg();var QF=6e4;setInterval(eg,QF).unref();function zF(){let e=performance.now()+jR;return e>Su?(Su=e,e):(Su+=488e-6,Su)}a(zF,"getNextMonotonicTime");tg.exports={validateEnv:$F,stringifyData:YF,convertKeyValueToWrite:KF,getNextMonotonicTime:zF,getIndexedValues:WF}});var rg,jr,AE,na=pe(()=>{rg=require("events"),jr=class extends rg.EventEmitter{static{a(this,"IterableEventQueue")}resolveNext;queue;hasDataListeners;[Symbol.asyncIterator](){let t=new AE;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)}},AE=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 ia(e){return e[ft]||(e[ft]=Object.create(null))}function Au(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[ue]?.[c];if(_&&typeof _=="object"){let d=sg(_,o);if(d)return l||(l=this[ft]=Object.create(null)),l[c]=d}return _},set(l){ia(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,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ia(this)[c]=l};break;case"Int":u.set=function(l){if(typeof l!="number")throw(0,pu.ClientError)(`${c} must be a string, attempt to assign ${l}`);ia(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[ue]?.[o]}),i("set",function(o,c){let u=s[o];if(u)return u.set.call(this,c);if(t.sealed)throw new pu.ClientError("Can not add a property to a sealed table schema");ia(this)[o]=c}),i("deleteProperty",function(o){ia(this)[o]=void 0}),i("toJSON",function(){let o=this[ft],c;for(let l in o)c||(c=Object.assign({},this[ue])),c[l]=o[l];return Object.keys(this).length>0&&(c||(c=Object.assign({},this[ue])),Object.assign(c,this)),c||this[ue]}),r.get||i("get",r.getProperty),r.delete||i("delete",r.deleteProperty);function i(o,c){Object.defineProperty(r,o,{value:c,configurable:!0})}a(i,"setMethod")}function sg(e,t){let r;switch(e.constructor){case Object:return t?((r=t.TrackedObject)||(t.TrackedObject=r=class{static{a(this,"TrackedObject")}constructor(n){this[ue]=n}},Au(r,t)),new r(e)):new Tu(e);case Array:let s=new gu(e.length);s[ue]=e;for(let n=0,i=e.length;n<i;n++){let o=e[n];o&&typeof o=="object"&&(o=sg(o,t?.elements)),s[n]=o}return s}}function Ou(e){let t=e[ft],r;for(let n in t){r||(r=Object.assign({},e[ue]));let i=t[n];i&&typeof i=="object"&&(i=Ou(i)),r[n]=i}return Object.keys(e).length>0&&(r||(r=Object.assign({},e[ue])),Object.assign(r,e)),r||e[ue]}function oa(e){let t;if(e[ue]&&e.constructor===Array&&!Object.isFrozen(e)){t=e;for(let s=0,n=e.length;s<n;s++){let i=e[s];if(i&&typeof i=="object"){let o=oa(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[ue]));let n=r[s];n&&typeof n=="object"&&(n=oa(n)),t[s]=n}return t?Object.freeze(t):e[ue]||Object.freeze(e)}function Ru(e){let t=e[ue];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?.[ue]===n){if(Ru(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[ue]===i){if(Ru(n))return!0}else return!0}else return!0}}return!1}var pu,ft,Tu,kn,gu,Nu=pe(()=>{es();pu=U(W()),ft=Symbol("own-data");a(ia,"getChanges");a(Au,"assignTrackedAccessors");a(sg,"trackObject");Tu=class{static{a(this,"GenericTrackedObject")}constructor(t){this[ue]=t}};Au(Tu,{});a(Ou,"collapseData");a(oa,"deepFreeze");a(Ru,"hasChanges");kn=Symbol.for("has-array-changes"),gu=class extends Array{static{a(this,"TrackedArray")}[kn];constructor(t){super(t)}splice(...t){return this[kn]=!0,super.splice(...t)}push(...t){return this[kn]=!0,super.push(...t)}pop(){return this[kn]=!0,super.pop()}unshift(...t){return this[kn]=!0,super.unshift(...t)}shift(){return this[kn]=!0,super.shift()}};gu.prototype.constructor=Array});function Ke(e,t){if(!t)t=e,e={};else if(!e)e={};else if(e?.transaction&&typeof t=="function")return t(e.transaction);if(typeof t!="function")throw new Error("Callback function must be provided to transaction");let r=e.transaction=new OE;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 ng,ig,OE,Vn=pe(()=>{ng=U(Bt()),ig=require("../index");es();a(Ke,"transaction");(0,ig._assignPackageExport)("transaction",Ke);Ke.commit=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to commit");return t.commit()};Ke.abort=function(e){let t=(e[Oe]||e)?.transaction;if(!t)throw new Error("No active transaction is available to abort");return t.abort()};OE=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,ng.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 yE(e,t,r,s,n){let i=e[0]??e.attribute,o,c,u,l,_=e[1]??e.value;_ instanceof Date&&(_=_.getTime());let d=e.comparator,E;switch(XF[d]||d){case"lt":o=!0,c=_;break;case"le":o=!0,c=_,u=!0;break;case"gt":o=_,l=!0;break;case"ge":o=_;break;case"prefix":o=_,c=_.slice(0),c[c.length-1]=rs.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 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 NE.ClientError(`"${i}" is not indexed${h?.isIndexing?" yet":""}, can not search for this attribute`,404);let p=IE(e);if(!p)throw new NE.ClientError(`Unknown search operator ${e.comparator}`);return s.primaryStore.getRange({start:!0,transaction:t,reverse:r}).map(({key:R,value:O})=>new Promise(F=>setImmediate(()=>F(p(O)?R:ag.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 IE(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 ts(r,n=>n===s);case lt.SEARCH_TYPES.CONTAINS:return ts(r,n=>n?.toString().includes(s));case lt.SEARCH_TYPES.ENDS_WITH:case lt.SEARCH_TYPES._ENDS_WITH:return ts(r,n=>n?.toString().endsWith(s));case lt.SEARCH_TYPES.STARTS_WITH:case lt.SEARCH_TYPES._STARTS_WITH:return ts(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()),ts(r,n=>(0,rs.compareKeys)(n,s[0])>=0&&(0,rs.compareKeys)(n,s[1])<=0);case"gt":case lt.SEARCH_TYPES.GREATER_THAN:case lt.SEARCH_TYPES._GREATER_THAN:return ts(r,n=>(0,rs.compareKeys)(n,s)>0);case"ge":case lt.SEARCH_TYPES.GREATER_THAN_EQUAL:case lt.SEARCH_TYPES._GREATER_THAN_EQUAL:return ts(r,n=>(0,rs.compareKeys)(n,s)>=0);case lt.SEARCH_TYPES.LESS_THAN:case"lt":case lt.SEARCH_TYPES._LESS_THAN:return ts(r,n=>(0,rs.compareKeys)(n,s)<0);case"le":case lt.SEARCH_TYPES.LESS_THAN_EQUAL:case lt.SEARCH_TYPES._LESS_THAN_EQUAL:return ts(r,n=>(0,rs.compareKeys)(n,s)<=0);case"ne":return ts(r,n=>(0,rs.compareKeys)(n,s)!==0);default:return}}function ts(e,t){return r=>{let s=r[e];return typeof s!="object"||!s?t(s):Array.isArray(s)?s.some(t):s instanceof Date?t(s.getTime()):!1}}function bu(e){if(!e)return;let t=new bE,r,s,n,i,o;for(;r=og.exec(e);){i=og.lastIndex;let[,c,u]=r;switch(u){case")":switch(o){case"limit":if(c.indexOf(",")>-1){let[l,_]=c.split(",");t.offset=+l,t.limit=_-t.offset}else t.limit=+c;break;case"select":if(c[0]==="["){if(c[c.length-1]!=="]")throw new Error("Unmatched brackets");t.select=c.slice(1,-1).split(","),t.select.asArray=!0}else c.indexOf(",")>-1?t.select=(c.endsWith(",")?c.slice(0,-1):c).split(","):t.select=c;break;case"group-by":throw new Error("Group by is not implemented yet");case"sort":t.sort=c.split(",").map(l=>{switch(l[0]){case"-":return{attribute:l.slice(1),descending:!0};case"+":return{attribute:l.slice(1),descending:!1};default:return{attribute:l,descending:!1}}});break;default:throw new Error(`Unknown query function call ${o}`)}break;case"(":o=c;break;case"=":s?c.length<=2&&(n=c):(n="equals",s=decodeURIComponent(c));break;case"!=":case"<":case"<=":case">":case">=":n=JF[u],s=decodeURIComponent(c);break;case"=*":n="ends_with",s=decodeURIComponent(c);break;case"*":case"*&":t.conditions.push({comparator:n==="ends_with"?"contains":"starts_with",attribute:s,value:decodeURIComponent(c)}),s=null;break;case"":case void 0:case"&":case"|":if(!s)throw new Error(`Unable to parse query, no part before ${u} at ${i} in ${e}`);t.conditions.push({comparator:n,attribute:s,value:decodeURIComponent(c)}),s=void 0;break;default:throw new Error(`Unknown operator ${u} in query ${e}`)}}if(i!==e.length)throw new Error(`Unable to parse query, unexpected end in ${e}`);return t}var NE,lt,rs,ag,og,JF,XF,bE,yu=pe(()=>{NE=U(W()),lt=U(ke()),rs=require("ordered-binary"),ag=require("lmdb"),og=/([^?&|=<>!()*]+)([&|=<>!()*]*)/g,JF={"<":"lt","<=":"le",">":"gt",">=":"ge","!=":"ne"};a(yE,"idsForCondition");XF={greater_than:"gt",greater_than_equal:"ge",less_than:"lt",less_than_equal:"le",not_equal:"ne",">":"gt",">=":"ge","<":"lt","<=":"le","...":"between"};a(IE,"filterByType");a(ts,"attributeComparator");a(bu,"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 UE={};je(UE,{CONTEXT:()=>Oe,ID_PROPERTY:()=>ce,IS_COLLECTION:()=>Ms,RECORD_PROPERTY:()=>ue,Resource:()=>ht,SAVE_UPDATES_PROPERTY:()=>Eg,snake_case:()=>jF});function jF(e){return e[0].toLowerCase()+e.slice(1).replace(/[a-z][A-Z][a-z]/g,t=>t[0]+"_"+t.slice(1))}function cg(e,t){if(e=e.slice(1),e.indexOf("/")===-1)return e.startsWith("$")&&(e=parseInt(e,36)),t.coerceId(decodeURIComponent(e));let r=e.split("/"),s=new CE(r.length);for(let n=0;n<r.length;n++)s[n]=t.coerceId(decodeURIComponent(r[n]));return s}function Rr(e,t){s.reliesOnPrototype=!0;let r=t.hasContent;return s;function s(n,i,o){let c,u,l;if(r?o?(l=i,o=o[Oe]||o):i?typeof n=="object"&&n&&(!Array.isArray(n)||typeof n[0]=="object")?(l=n,c=l[this.primaryKey]??null,o=i[Oe]||i):l=i:(l=n,c=l[ce]??l[this.primaryKey]??null):i?o=i[Oe]||i:n&&typeof n=="object"&&!Array.isArray(n)&&(o=n),c===void 0)if(typeof n=="string")c=n;else if(typeof n=="object"&&n)if(u=n,n[Symbol.iterator]){c=[];for(let E of n){if(typeof E=="object"&&E)break;c.push(E)}c.length===0?c=null:(c.length===1&&(c=c[0]),u.slice&&(u=u.slice(c.length,u.length),u.length===0&&(u=null)))}else{if(typeof(c=n.url)=="string"){let E=c.indexOf("?");if(E>-1){let h=this.parseQuery(c.slice(E+1));u?u=Object.assign(h,u):u=h,c=c.slice(0,E)}let f=this.parsePath(c,o,u);f?.query?(u=f.query,c=f.id):c=f}c===void 0&&(c=n.id??null)}else c=n??null;o||(o={});let _;if(u?.allowInvalidated?(_=Object.assign({},t),_.allowInvalidated=!0):_=t,o.transaction){let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)}else return Ke(o,()=>{let E=this.getResource(c,o,_);return E.then?E.then(d):d(E)});function d(E){if(t.type==="read"&&(E[Eg]=!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 Iu(o.user);return typeof l?.then=="function"?l.then(T=>e(E,u,o,T)):e(E,u,o,l)});if(!f)throw new Iu(o.user)}return typeof l?.then=="function"?l.then(f=>e(E,u,o,f)):e(E,u,o,l)}a(d,"authorizeActionOnResource")}}function gr(e,t){let r=new dg.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 wE(e){let t=e[ue];if(t){let r=e[ft];return s=>{let n;return e.hasOwnProperty(s)&&typeof(n=e[s])!="function"?n:r&&s in r?r[s]:t[s]}}else return r=>e[r]}function ug(e){if(typeof e=="string")return t=>wE(t)(e);if(typeof e=="object"){if(e.asArray)return r=>{let s=[],n=wE(r);for(let i of e)s.push(n(i));return s};let t=e.forceNulls;return r=>{let s={},n=wE(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 lg,_g,dg,Oe,ce,Ms,Eg,ue,ZF,ht,Iu,CE,es=pe(()=>{lg=require("crypto");na();_g=require("../index"),dg=U(W());Nu();Vn();yu();Oe=Symbol.for("context"),ce=Symbol.for("primary-key"),Ms=Symbol("is-collection"),Eg=Symbol("save-updates"),ue=Symbol("stored-record"),ZF={json:"application/json",cbor:"application/cbor",msgpack:"application/x-msgpack",csv:"text/csv"},ht=class{static{a(this,"Resource")}[Oe];[ce];static transactions;constructor(t,r){this[ce]=t;let s=r?.[Oe];this[Oe]=s!==void 0?s:r||null}updateModificationTime(t=Date.now()){t>this[LAST_MODIFICATION_PROPERTY]&&(this[LAST_MODIFICATION_PROPERTY]=t)}static get=Rr(function(t,r,s,n){let i=t.get?.(r);if(i?.then)return i.then(o);return o(i);function o(c){let u;if((u=r?.select)&&c!=null){let l=ug(u);return typeof c?.map=="function"?c.map(l):l(c)}return c}},{type:"read"});static put=Rr(function(t,r,s,n){if(Array.isArray(n)&&t[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):gr(t,"put")},{hasContent:!0,type:"update"});static delete=Rr(function(t,r,s,n){return t.delete?t.delete(r):gr(t,"delete")},{hasContent:!1,type:"delete",allowInvalidated:!0});static getNewId(){return(0,lg.randomUUID)()}static create(t,r,s){let n;return t==null?n=this.getNewId():Array.isArray(t)&&typeof t[0]!="object"?n=[...t,this.getNewId()]:typeof t!="object"?n=[t,this.getNewId()]:(n=this.getNewId(),s=r,r=t),Ke(s,()=>{let i=new this(n,s),o=i.put?i.put(r):gr(i,"put");return s.newLocation=n,s.createdResource=!0,o?.then?o.then(()=>n):n})}static invalidate=Rr(function(t,r,s,n){return t.invalidate?t.invalidate(r):gr(t,"delete")},{hasContent:!1,type:"update",allowInvalidated:!0});static post=Rr(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.post(n,r)},{hasContent:!0,type:"create"});static connect=Rr(function(t,r,s,n){return t.connect?t.connect(r):gr(t,"connect")},{type:"read"});static subscribe=Rr(function(t,r,s,n){return t.subscribe?t.subscribe(r):gr(t,"subscribe")},{type:"read"});static publish=Rr(function(t,r,s,n){return t[ce]!=null&&t.update?.(),t.publish?t.publish(n,r):gr(t,"publish")},{hasContent:!0,type:"create"});static search=Rr(function(t,r,s,n){let i=t.search?t.search(s):gr(t,"search"),o=s.select;if(o&&s.hasOwnProperty("select")&&i!=null){let c=ug(o);return i.map(c)}return i},{type:"read"});static query=Rr(function(t,r,s,n){return t.search?t.search(n,r):gr(t,"search")},{hasContent:!0,type:"read"});static copy=Rr(function(t,r,s,n){return t.copy?t.copy(s.headers?.destination,r):gr(t,"copy")},{type:"create"});static move=Rr(function(t,r,s,n){return t.move?t.move(s.headers?.destination,r):gr(t,"move")},{type:"delete"});post(t){if(this[Ms])return this.constructor.create(this[ce],t,this[Oe]);gr(this,"post")}static isCollection(t){return t?.[Ms]}static coerceId(t){return t}static parseQuery(t){return bu(t)}static parsePath(t,r,s){let n=t.indexOf(".");if(n>-1){let i=t.slice(n+1);t=t.slice(0,n);let o=r?.headers&&ZF[i];if(o)r.headers.accept=o;else if(s)s.property=i;else return{query:{property:i},id:cg(t,this)}}return cg(t,this)}static getResource(t,r,s){let n,i=r[Oe],o;typeof r.isCollection=="boolean"&&r.hasOwnProperty("isCollection")?o=r.isCollection:o=t==null||Array.isArray(t)&&t[t.length-1]==null;let c=o&&this.Collection||this;if(i||(i=i===void 0?r:{}),i.transaction){let u;if(i.resourceCache?u=i.resourceCache:u=i.resourceCache=[],u.asMap){let l=u.asMap.get(t);if(n=l?.find(_=>_.constructor===c),n)return n;l||u.asMap.set(t,l=[]),l.push(n=new c(t,i))}else{if(n=u.find(l=>l[ce]===t&&l.constructor===c),n)return n;if(u.push(n=new c(t,i)),u.length>10){let l=new Map;for(let _ of u){let d=_[ce],E=l.get(d);E?E.push(_):l.set(d,[_])}i.resourceCache.length=0,i.resourceCache.asMap=l}}}else n=new c(t,i);return o&&(n[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}allowRead(t){return t?.role.permission.super_user}allowUpdate(t){return t?.role.permission.super_user}allowCreate(t){return t?.role.permission.super_user}allowDelete(t){return t?.role.permission.super_user}getId(){return this[ce]}getContext(){return this[Oe]}};ht.prototype[Oe]=null;(0,_g._assignPackageExport)("Resource",ht);a(jF,"snake_case");Iu=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(cg,"pathToId");CE=class extends Array{static{a(this,"MulitPartId")}toString(){return this.join("/")}};a(Rr,"transactional");a(gr,"missingMethod");a(wE,"selectFromObject");a(ug,"transformForSelect")});var wu={};je(wu,{server:()=>tt});var fg,tt,ss=pe(()=>{fg=require("../index"),tt={};(0,fg._assignPackageExport)("server",tt)});var ME={};je(ME,{loadGQLSchema:()=>tq,start:()=>LE,startOnMainThread:()=>eq});function LE({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(w){if(w.kind==="NonNullType"){let D=$(w.type);return D.nullable=!0,D}return w.kind==="ListType"?{type:"array",elements:$(w.type)}:{type:w.name?.value}};a($,"getProperty");let p=T.name.value,R=[],O={table:null,database:null,properties:R};E.set(p,O);for(let w of T.directives){if(w.name.value==="table"){for(let I of w.arguments)O[I.name.value]=I.value.value;O.schema&&(O.database=O.schema),O.table||(O.table=p),O.audit&&(O.audit=O.audit!=="false"),O.attributes=O.properties,f.push(O)}if(w.name.value==="sealed"&&(O.sealed=!0),w.name.value==="export"){O.export=!0;for(let I of w.arguments)I.name.value==="name"&&(O.export={name:I.value.value})}}let F=!1;for(let w of T.fields){let I=$(w.type);I.name=w.name.value,R.push(I);for(let D of w.directives)if(D.name.value==="primaryKey")F?console.warn("Can not define two attributes as a primary key"):(I.isPrimaryKey=!0,F=!0);else if(D.name.value==="indexed")I.indexed=!0;else if(D.name.value==="createdTime")I.assignCreatedTime=!0;else if(D.name.value==="updatedTime")I.assignUpdatedTime=!0;else if(D.name.value==="expiresAt")I.expiresAt=!0;else if(D.name.value==="allow"){let z=I.authorizedRoles=[];for(let M of D.arguments)M.name.value==="role"&&z.push(M.value.value)}}O.typeName=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,DE.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,DE.dirname)(s)+"/"+T.name,p.tableClass)}}}var DE,eq,tq,hg=pe(()=>{DE=require("path");Ee();a(LE,"start");eq=LE,tq=LE({ensureTable:rt}).handleFile});async function Cu(e){return rq?(aa||(aa=sq(iq)),(await(await aa).import(e)).namespace):import(e)}async function sq(e){let{StaticModuleRecord:t}=await import("@endo/static-module-record");return require("ses"),lockdown({domainTaming:"unsafe",consoleTaming:"unsafe",errorTaming:"unsafe",errorTrapping:"none",stackFiltering:"verbose"}),aa=new Compartment({console,Math,Date,fetch:nq,...e()},{},{name:"h-dapp",resolveHook(r,s){return r==="harperdb"?"harperdb":(r=new URL(r,s).toString(),(0,Sg.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:ir,databases:ve})}};let s=await(0,mg.readFile)(new URL(r),{encoding:"utf-8"});return new t(s,r)}}),aa}function nq(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 iq(){return{Resource:ht,tables:ir}}var mg,Sg,rq,aa,PE=pe(()=>{es();Ee();mg=require("fs/promises"),Sg=require("path"),rq=!1;a(Cu,"secureImport");a(sq,"getCompartment");a(nq,"secureOnlyFetch");a(iq,"getGlobalVars")});var BE={};je(BE,{handleFile:()=>oq});async function oq(e,t,r,s){let n=new Map,i=(0,pg.pathToFileURL)(r).toString(),o=await Cu(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 pg,vE,Tg=pe(()=>{pg=require("url");PE();vE=require("path");a(oq,"handleFile")});var FE={};je(FE,{start:()=>aq});function aq({resources:e}){e.set("login",HE),e.loginPath=t=>"/login?redirect="+encodeURIComponent(t.url)}var HE,Rg=pe(()=>{es();a(aq,"start");HE=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 GE=m((are,Og)=>{"use strict";var{Readable:cq}=require("stream"),uq=1e4;Og.exports={streamAsJSON(e){return new qE({value:e})}};var qE=class extends cq{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),gg)}catch(n){yield gg(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);Ag(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>uq?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 Ag(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 gg(e){return console.error(e),JSON.stringify(e.toString())}a(gg,"handleError");function Ag(e,t,r){return e&&e.then?r?e.then(t,r):e.then(t):t(e)}a(Ag,"when")});var Bg=m((lre,vg)=>{"use strict";var xE=require("recursive-iterator"),lq=require("alasql"),kE=require("clone"),Ng=V(),{handleHDBError:bg,hdb_errors:_q}=W(),{HDB_ERROR_MSGS:yg,HTTP_STATUS_CODES:Ig}=_q,{getDatabases:dq}=(Ee(),se(be)),Eq=["DISTINCT_ARRAY"],wg=Symbol("validateTables"),VE=Symbol("validateTable"),ure=Symbol("getAllColumns"),Cg=Symbol("validateAllColumns"),Uu=Symbol("findColumn"),Ug=Symbol("validateOrderBy"),ca=Symbol("validateSegment"),$E=Symbol("validateColumn"),Dg=Symbol("setColumnsForTable"),Lg=Symbol("checkColumnsForAsterisk"),Mg=Symbol("validateGroupBy"),Pg=Symbol("hasColumns"),YE=class{static{a(this,"SelectValidator")}constructor(t){this.statement=t,this.attributes=[]}validate(){if(!this.statement)throw new Error("invalid sql statement");this[wg](),this[Lg](),this[Cg]()}[wg](){if(this[Pg]()){if(!this.statement.from||this.statement.from.length===0)throw"no from clause";this.statement.from.forEach(t=>{this[VE](t)}),this.statement.joins&&this.statement.joins.forEach(t=>{t.table.as=t.as,this[VE](t.table)})}}[Pg](){let t=!1,r=new xE(this.statement);for(let{node:s,path:n}of r)if(s&&s.columnid){t=!0;break}return t}[VE](t){if(!t.databaseid)throw`schema not defined for table ${t.tableid}`;let r=dq();if(!r[t.databaseid])throw bg(new Error,yg.SCHEMA_NOT_FOUND(t.databaseid),Ig.NOT_FOUND);if(!r[t.databaseid][t.tableid])throw bg(new Error,yg.TABLE_NOT_FOUND(t.databaseid,t.tableid),Ig.NOT_FOUND);r[t.databaseid][t.tableid].attributes.forEach(n=>{let i=kE(n);i.table=kE(t),this.attributes.push(i)})}[Uu](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)}[Lg](){let t=new xE(this.statement.columns);for(let{node:r,path:s}of t)r&&r.columnid==="*"&&s.indexOf("expression")<0&&this[Dg](r.tableid)}[Dg](t){this.attributes.forEach(r=>{(!t||t&&(r.table.tableid===t||r.table.as===t))&&this.statement.columns.push(new lq.yy.Column({columnid:r.attribute,tableid:r.table.as?r.table.as:r.table.tableid}))})}[Cg](){this[ca](this.statement.columns,!1),this[ca](this.statement.joins,!1),this[ca](this.statement.where,!1),this[Mg](this.statement.group,!1),this[ca](this.statement.order,!0)}[ca](t,r){if(!t)return;let s=new xE(t),n=[];for(let{node:i,path:o}of s)!Ng.isEmpty(i)&&!Ng.isEmpty(i.columnid)&&i.columnid!=="*"&&(r?this[Ug](i):n.push(this[$E](i)));return n}[Mg](t){if(!t)return;let r=[];if(this.statement.columns.forEach(s=>{if(!(s.funcid&&Eq.indexOf(s.funcid.toUpperCase())>=0)){if(!s.aggregatorid&&!s.columnid){let n=kE(s);delete n.as,r.push(n)}else if(s.columnid){let n=this[Uu](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[Uu](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`}[Ug](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[$E](t)}[$E](t){let r=this[Uu](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]}};vg.exports=YE});var Fg=m((dre,Hg)=>{"use strict";var KE=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")}};Hg.exports=KE});var Gg=m((fre,qg)=>{"use strict";var WE=class{static{a(this,"DBIDefinition")}constructor(t=!1,r=!1){this.dup_sort=t,this.is_hash_attribute=r,this.useVersions=r}};qg.exports=WE});var Du=m((mre,xg)=>{"use strict";var zE=Q(),JE=A();zE.initSync();var fq=zE.get(JE.CONFIG_PARAMS.STORAGE_COMPRESSION),hq=zE.get(JE.CONFIG_PARAMS.STORAGE_CACHING)!==!1,mq=JE.UPDATES_PROPERTY,QE=class{static{a(this,"OpenDBIObject")}constructor(t,r=!1){this.dupSort=t===!0,this.encoding=t?"ordered-binary":"msgpack",this.useVersions=r,this.compression=fq&&r,this.sharedStructuresKey=Symbol.for("structures"),r&&(this.cache=hq&&{validated:!0},this.randomAccessStructure=!0,this.freezeData=!0,this.alwaysLazyProperty=s=>s===mq)}};xg.exports=QE});var Mu=m((pre,Vg)=>{"use strict";var Hi=Q(),ua=A();Hi.initSync();var Sq=Hi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)===!0||Hi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="true"||Hi.get(ua.CONFIG_PARAMS.STORAGE_WRITEASYNC)==="TRUE",kg=Hi.get(ua.CONFIG_PARAMS.STORAGE_OVERLAPPINGSYNC),pq=Hi.get(ua.CONFIG_PARAMS.STORAGE_NOREADAHEAD),Lu=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=Sq,this.noFSAccess=!0,kg!==void 0&&(this.overlappingSync=kg),this.noReadAhead=pq}};Vg.exports=Lu;Lu.MAX_DBS=1e4});var Ie=m((Rre,jg)=>{"use strict";var ZE=require("lmdb"),Br=require("fs-extra"),or=require("path"),Pu=Bt(),Kg=k(),Ht=nr().LMDB_ERRORS_ENUM,vu=Gg(),jE=Du(),Wg=Mu(),dn=ke(),$g=A(),{table:Tq,resetDatabases:Rq}=(Ee(),se(be)),Yg=Q(),Hr=dn.INTERNAL_DBIS_NAME,Qg=dn.DBI_DEFINITION_NAME,gq="data.mdb",Aq="lock.mdb",la=".mdb",Oq="-lock",XE=class{static{a(this,"TransactionCursor")}constructor(t,r,s=!1){this.dbi=Ar(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 ZE.Cursor(this.txn,this.dbi)}close(){this.cursor.close(),this.txn.abort()}commit(){this.cursor.close(),this.txn.commit()}};function Bu(e,t){if(e===void 0)throw new Error(Ht.BASE_PATH_REQUIRED);if(t===void 0)throw new Error(Ht.ENV_NAME_REQUIRED)}a(Bu,"pathEnvNameValidation");async function ef(e,t,r=!0){try{await Br.access(e)}catch(s){throw s.code==="ENOENT"?new Error(Ht.INVALID_BASE_PATH):s}try{let s=or.join(e,t+la);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(or.join(e,t,gq),Br.constants.R_OK|Br.constants.F_OK),or.join(e,t)}catch(n){if(n.code==="ENOENT")throw new Error(Ht.INVALID_ENVIRONMENT)}else throw new Error(Ht.INVALID_ENVIRONMENT);throw s}}a(ef,"validateEnvironmentPath");function Hu(e,t){if(Pu.validateEnv(e),t===void 0)throw new Error(Ht.DBI_NAME_REQUIRED)}a(Hu,"validateEnvDBIName");async function Nq(e,t,r=!1,s=!1){Bu(e,t);let n=or.basename(e);t=t.toString();let i=Yg.get($g.CONFIG_PARAMS.SCHEMAS);i||Yg.setProperty($g.CONFIG_PARAMS.SCHEMAS,i={}),i[n]||(i[n]={}),i[n].path=e;try{return await ef(e,t,s),zg(e,t,r)}catch(o){if(o.message===Ht.INVALID_ENVIRONMENT){let c=or.join(e,t);await Br.mkdirp(s?c:e);let u=new Wg(s?c:c+la,!1),l=ZE.open(u);l.dbis=Object.create(null);let _=new jE(!1);l.openDB(Hr,_),global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null));let d=tf(e,t,r);return l[dn.ENVIRONMENT_NAME_KEY]=d,global.lmdb_map[d]=l,l}throw o}}a(Nq,"createEnvironment");async function bq(e,t,r,s=!0){Bu(e,t),t=t.toString();let n=or.join(e,t);return Tq({table:t,database:or.parse(e).name,path:n,attributes:[{name:"id",isPrimaryKey:!0}]})}a(bq,"copyEnvironment");async function zg(e,t,r=!1){Bu(e,t),t=t.toString();let s=tf(e,t,r);if(global.lmdb_map===void 0&&(global.lmdb_map=Object.create(null)),global.lmdb_map[s]!==void 0)return global.lmdb_map[s];let n=await ef(e,t),i=or.join(e,t+la),o=n!=i,c=new Wg(n,o),u=ZE.open(c);u.dbis=Object.create(null);let l=Xg(u);for(let _=0;_<l.length;_++)Ar(u,l[_]);return u[dn.ENVIRONMENT_NAME_KEY]=s,global.lmdb_map[s]=u,u}a(zg,"openEnvironment");async function yq(e,t,r=!1){Bu(e,t),t=t.toString();let s=or.join(e,t+la),n=await ef(e,t);if(global.lmdb_map!==void 0){let i=tf(e,t,r);if(global.lmdb_map[i]){let o=global.lmdb_map[i];await Jg(o),delete global.lmdb_map[i]}}await Br.remove(n),await Br.remove(n===s?n+Oq:or.join(or.dirname(n),Aq))}a(yq,"deleteEnvironment");async function Jg(e){Pu.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(Jg,"closeEnvironment");function tf(e,t,r=!1){let n=`${or.basename(e)}.${t}`;return r===!0&&(n=`txn.${n}`),n}a(tf,"getCachedEnvironmentName");function Iq(e){Pu.validateEnv(e);let t=Object.create(null),r=Ar(e,Hr);for(let{key:s,value:n}of r.getRange({start:!1}))if(s!==Hr)try{t[s]=Object.assign(new vu,n)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return t}a(Iq,"listDBIDefinitions");function Xg(e){Pu.validateEnv(e);let t=[],r=Ar(e,Hr);for(let{key:s}of r.getRange({start:!1}))s!==Hr&&t.push(s);return t}a(Xg,"listDBIs");function wq(e,t){let s=Ar(e,Hr).getEntry(t),n=new vu;if(s!==void 0){try{n=Object.assign(n,s.value)}catch{Kg.warn(`an internal error occurred: unable to parse DBI Definition for ${s}`)}return n}}a(wq,"getDBIDefinition");function Zg(e,t,r,s=!r){if(Hu(e,t),t=t.toString(),t===Hr)throw new Error(Ht.CANNOT_CREATE_INTERNAL_DBIS_NAME);try{return Ar(e,t)}catch(n){if(n.message===Ht.DBI_DOES_NOT_EXIST){let i=new jE(r,s===!0),o=e.openDB(t,i),c=new vu(r===!0,s);return o[Qg]=c,Ar(e,Hr).putSync(t,c),e.dbis[t]=o,o}throw n}}a(Zg,"createDBI");function Ar(e,t){if(Hu(e,t),t=t.toString(),e.dbis[t]!==void 0)return e.dbis[t];let r;if(t!==Hr?r=wq(e,t):r=new vu,r===void 0)throw new Error(Ht.DBI_DOES_NOT_EXIST);let s;try{let n=new jE(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(Ht.DBI_DOES_NOT_EXIST):n}return s[Qg]=r,e.dbis[t]=s,s}a(Ar,"openDBI");function Cq(e,t){Hu(e,t),t=t.toString();let r=Ar(e,t),s=r.getStats();return r[dn.DBI_DEFINITION_NAME].is_hash_attribute&&s.entryCount>0&&s.entryCount--,s}a(Cq,"statDBI");async function Uq(e,t){try{let r=or.join(e,t+la);return(await Br.stat(r)).size}catch{throw new Error(Ht.INVALID_ENVIRONMENT)}}a(Uq,"environmentDataSize");function Dq(e,t){if(Hu(e,t),t=t.toString(),t===Hr)throw new Error(Ht.CANNOT_DROP_INTERNAL_DBIS_NAME);Ar(e,t).dropSync(),e.dbis!==void 0&&delete e.dbis[t],Ar(e,Hr).removeSync(t)}a(Dq,"dropDBI");function Lq(e,t,r){let s;for(let n=0;n<r.length;n++){let i=r[n];if(!e.dbis[i])try{Ar(e,i)}catch(o){if(o.message===Ht.DBI_DOES_NOT_EXIST)Zg(e,i,i!==t,i===t),s=!0;else throw o}}s&&Rq()}a(Lq,"initializeDBIs");jg.exports={openDBI:Ar,openEnvironment:zg,createEnvironment:Nq,listDBIs:Xg,listDBIDefinitions:Iq,createDBI:Zg,dropDBI:Dq,statDBI:Cq,deleteEnvironment:yq,initializeDBIs:Lq,TransactionCursor:XE,environmentDataSize:Uq,copyEnvironment:bq,closeEnvironment:Jg}});var tA=m((Are,eA)=>{"use strict";var rf=class{static{a(this,"InsertRecordsResponseObject")}constructor(t=[],r=[],s=void 0){this.written_hashes=t,this.skipped_hashes=r,this.txn_time=s}};eA.exports=rf});var sA=m((Nre,rA)=>{"use strict";var sf=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}};rA.exports=sf});var iA=m((yre,nA)=>{"use strict";var nf=class{static{a(this,"UpsertRecordsResponseObject")}constructor(t=[],r=void 0,s=[]){this.written_hashes=t,this.txn_time=r,this.original_records=s}};nA.exports=nf});var Fi=m((Dre,cA)=>{"use strict";var Mq=Ie(),Pq=tA(),vq=sA(),Bq=iA(),ns=Bt(),_a=nr().LMDB_ERRORS_ENUM,Hq=ke(),Ps=A(),Fq=V(),qq=require("uuid"),wre=require("lmdb"),{handleHDBError:Gq,hdb_errors:xq}=W(),{OVERFLOW_MARKER:Cre,MAX_SEARCH_KEY_LENGTH:Ure}=Hq,oA=Q();oA.initSync();var Fu=oA.get(Ps.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),of=Ps.TIME_STAMP_NAMES_ENUM.CREATED_TIME,$n=Ps.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function kq(e,t,r,s,n=ns.getNextMonotonicTime()){lf(e,t,r,s),af(e,t,r);let i=new Pq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u];aA(l,!0,n);let _=Vq(e,t,r,l),d=l[t];o.push(_),c.push(d)}return cf(o,c,s,i,n)}a(kq,"insertRecords");function Vq(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=ns.getIndexedValues(c),l=e.dbis[o];if(u){Fu&&l.prefetch(u.map(_=>({key:_,value:n})),qu);for(let _=0,d=u.length;_<d;_++)l.put(u[_],n)}}Fu&&e.dbis[t].prefetch([n],qu),e.dbis[t].put(n,s,s[$n])})}a(Vq,"insertRecord");function $q(e,t=[]){let r=0;for(let s=0;s<t.length;s++){let n=t[s];e.splice(n-r,1),r++}}a($q,"removeSkippedRecords");function aA(e,t,r){let s=r>0;(s||!Number.isInteger(e[$n]))&&(e[$n]=r||(r=ns.getNextMonotonicTime())),t===!0?(s||!Number.isInteger(e[of]))&&(e[of]=r||ns.getNextMonotonicTime()):delete e[of]}a(aA,"setTimestamps");function af(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),Mq.initializeDBIs(e,t,r)}a(af,"initializeTransaction");async function Yq(e,t,r,s,n=ns.getNextMonotonicTime()){lf(e,t,r,s),af(e,t,r);let i=new vq,o=[],c=[],u=[];for(let l=0;l<s.length;l++){let _=s[l],d=_[t],E;try{E=uf(e,t,_,d,i,!0,n)}catch{i.skipped_hashes.push(d),o.push(l);continue}c.push(E),u.push(d)}return cf(c,u,s,i,n,o)}a(Yq,"updateRecords");async function Kq(e,t,r,s,n=ns.getNextMonotonicTime()){try{lf(e,t,r,s)}catch(u){throw Gq(u,u.message,xq.HTTP_STATUS_CODES.BAD_REQUEST)}af(e,t,r);let i=new Bq,o=[],c=[];for(let u=0;u<s.length;u++){let l=s[u],_;Fq.isEmpty(l[t])?(_=qq.v4(),l[t]=_):_=l[t];let d=uf(e,t,l,_,i,!1,n);o.push(d),c.push(_)}return cf(o,c,s,i,n)}a(Kq,"upsertRecords");async function cf(e,t,r,s,n,i=[]){let o=await Promise.all(e);for(let c=0,u=o.length;c<u;c++)o[c]===!0?s.written_hashes.push(t[c]):(s.skipped_hashes.push(t[c]),i.push(c));return s.txn_time=n||ns.getNextMonotonicTime(),$q(r,i),s}a(cf,"finalizeWrite");function uf(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(aA(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],p=e.dbis[h];if(p===void 0)continue;let R=l[h];if(typeof T=="function"){let F=T([[l]]);Array.isArray(F)&&(T=F[0][Ps.FUNC_VAL],r[h]=T)}if(T===R)continue;let O=ns.getIndexedValues(R);if(O){Fu&&p.prefetch(O.map(F=>({key:F,value:s})),qu);for(let F=0,$=O.length;F<$;F++)p.remove(O[F],s)}if(O=ns.getIndexedValues(T),O){Fu&&p.prefetch(O.map(F=>({key:F,value:s})),qu);for(let F=0,$=O.length;F<$;F++)p.put(O[F],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:uf(e,t,r,s,n,i,o))}a(uf,"updateUpsertRecord");function Wq(e,t,r){if(ns.validateEnv(e),t===void 0)throw new Error(_a.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(_a.WRITE_ATTRIBUTES_REQUIRED):new Error(_a.WRITE_ATTRIBUTES_MUST_BE_ARRAY)}a(Wq,"validateBasic");function lf(e,t,r,s){if(Wq(e,t,r),!Array.isArray(s))throw s===void 0?new Error(_a.RECORDS_REQUIRED):new Error(_a.RECORDS_MUST_BE_ARRAY)}a(lf,"validateWrite");function qu(){}a(qu,"noop");cA.exports={insertRecords:kq,updateRecords:Yq,upsertRecords:Kq}});var Yn=m((Mre,Qq)=>{Qq.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 is=m((Pre,_A)=>{"use strict";var lA=V(),uA=A(),qi=/^[\x20-\x2E|\x30-\x5F|\x61-\x7E]*$/,vs=require("joi"),En={schema_format:{pattern:qi,message:"names cannot include backticks or forward slashes"},schema_length:{minimum:1,maximum:250,tooLong:"cannot exceed 250 characters"}},zq=vs.alternatives(vs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),vs.number()).required(),Jq=vs.alternatives(vs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),vs.number()),Xq=vs.alternatives(vs.string().min(1).max(En.schema_length.maximum).pattern(qi).messages({"string.pattern.base":"{:#label} "+En.schema_format.message}),vs.number()).required();function Zq(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`:qi.test(t)?"":`'${e}' has illegal characters`:`'${e}' must be at least one character`:`'${e}' is required`}a(Zq,"checkValidTable");function jq(e,t){return lA.doesSchemaExist(e)?e:t.message(`Database '${e}' does not exist`)}a(jq,"validateSchemaExists");function eG(e,t){let r=t.state.ancestors[0].schema;return lA.doesTableExist(r,e)?e:t.message(`Table '${e}' does not exist`)}a(eG,"validateTableExists");function tG(e,t){return e.toLowerCase()===uA.SYSTEM_SCHEMA_NAME?t.message(`'subscriptions[${t.state.path[1]}]' invalid database name, '${uA.SYSTEM_SCHEMA_NAME}' name is reserved`):e}a(tG,"validateSchemaName");_A.exports={common_validators:En,schema_regex:qi,hdb_schema_table:zq,validateSchemaExists:jq,validateTableExists:eG,validateSchemaName:tG,checkValidTable:Zq,hdb_database:Jq,hdb_table:Xq}});var Be=m((Bre,dA)=>{"use strict";var Ft=require("validate.js");Ft.validators.type=function(e,t,r,s){return e===null||typeof e>"u"||Ft.validators.type.checks[t](e)?null:` must be a '${t}' value`};Ft.validators.type.checks={Object:function(e){return Ft.isObject(e)&&!Ft.isArray(e)},Array:Ft.isArray,Integer:Ft.isInteger,Number:Ft.isNumber,String:Ft.isString,Date:Ft.isDate,Boolean:function(e){return typeof e=="boolean"}};Ft.validators.hasValidFileExt=function(e,t){return Ft.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};dA.exports={validateObject:rG,validateObjectAsync:sG,validateBySchema:nG};function rG(e,t){if(!e||!t)return new Error("validateObject parameters were null");let r=Ft(e,t,{format:"flat"});return r?new Error(r):null}a(rG,"validateObject");async function sG(e,t){if(!e||!t)return new Error("validateObject parameters were null");try{await Ft.async(e,t,{format:"flat"})}catch(r){let s=r.join(",");return new Error(s)}return null}a(sG,"validateObjectAsync");function nG(e,t){let r=t.validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}});if(r.error)return new Error(r.error.message)}a(nG,"validateBySchema")});var Gu=m((Fre,EA)=>{var{common_validators:os}=is(),Ea=Be(),da="is required",We={database:{presence:!1,format:os.schema_format,length:os.schema_length},schema:{presence:!1,format:os.schema_format,length:os.schema_length},table:{presence:!0,format:os.schema_format,length:os.schema_length},attribute:{presence:!0,format:os.schema_format,length:os.schema_length},hash_attribute:{presence:!0,format:os.schema_format,length:os.schema_length}};function fa(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(fa,"makeAttributesStrings");function iG(e){return e=fa(e),We.table.presence=!1,We.attribute.presence=!1,We.hash_attribute.presence=!1,Ea.validateObject(e,We)}a(iG,"schema_object");function oG(e){return e=fa(e),We.table.presence={message:da},We.attribute.presence=!1,We.hash_attribute.presence=!1,Ea.validateObject(e,We)}a(oG,"table_object");function aG(e){return e=fa(e),We.table.presence={message:da},We.attribute.presence=!1,Ea.validateObject(e,We)}a(aG,"create_table_object");function cG(e){return e=fa(e),We.table.presence={message:da},We.attribute.presence={message:da},We.hash_attribute.presence=!1,Ea.validateObject(e,We)}a(cG,"attribute_object");function uG(e){return e=fa(e),We.table.presence={message:da},We.attribute.presence=!1,We.hash_attribute.presence=!1,Ea.validateObject(e,We)}a(uG,"describe_table");function lG(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(lG,"validateTableResidence");EA.exports={schema_object:iG,create_table_object:aG,table_object:oG,attribute_object:cG,describe_table:uG,validateTableResidence:lG}});var hA=m((Gre,fA)=>{"use strict";var _G=require("uuid"),_f=class{static{a(this,"CreateAttributeObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.attribute=s,this.id=n||_G.v4(),this.schema_table=`${this.schema}.${this.table}`}};fA.exports=_f});var xu=m((kre,mA)=>{"use strict";var dG=hA(),df=class extends dG{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}};mA.exports=df});var pA=m(($re,SA)=>{"use strict";SA.exports=fG;var EG="inserted";function fG(e,t,r,s){let n={message:`${e} ${t.length} of ${r.records.length} records`,skipped_hashes:s};return e===EG?(n.inserted_hashes=t,n):(n.update_hashes=t,n)}a(fG,"returnObject")});var ku=m((Kre,OA)=>{"use strict";var hG=A(),Ef=Ie(),mG=Fi(),{getSystemSchemaPath:SG,getSchemaPath:pG}=Ce(),TG=Yn(),RG=Gu(),gG=xu(),AG=pA(),{handleHDBError:TA,hdb_errors:gA}=W(),RA=V(),{HTTP_STATUS_CODES:OG}=gA,ff=TG.hdb_attribute,AA=[];for(let e=0;e<ff.attributes.length;e++)AA.push(ff.attributes[e].attribute);var NG="inserted";OA.exports=bG;async function bG(e){let t=RG.attribute_object(e);if(t)throw TA(new Error,t.message,gA.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=!e.skip_table_check&&RA.checkGlobalSchemaTable(e.schema,e.table);if(r)throw TA(new Error,r,OG.NOT_FOUND);e.is_hash_attribute=e.is_hash_attribute=="true",e.dup_sort=RA.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 gG(e.schema,e.table,e.attribute,e.id);try{let i=await Ef.openEnvironment(pG(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}`);Ef.createDBI(i,e.attribute,e.dup_sort,e.is_hash_attribute);let o=await Ef.openEnvironment(SG(),hG.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),{written_hashes:c,skipped_hashes:u}=await mG.insertRecords(o,ff.hash_attribute,AA,[n]);return AG(NG,c,{records:[n]},u)}catch(i){throw i}}a(bG,"lmdbCreateAttribute")});var mf=m((Qre,bA)=>{var{hdb_table:yG,hdb_database:NA}=is(),IG=Be(),hf=require("joi"),wG={undefined:"undefined",null:"null"},CG=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||wG[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"),UG=hf.object({database:NA,schema:NA,table:yG,records:hf.array().items(hf.object().custom(CG)).required()});bA.exports=function(e){return IG.validateBySchema(e,UG)}});var ha=m((Xre,IA)=>{"use strict";var Bs=V(),yA=k(),Jre=mf(),{getDatabases:DG}=(Ee(),se(be)),{ClientError:Kn}=W();IA.exports=LG;function LG(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=DG()[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 yA.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 yA.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(LG,"insertUpdateValidate")});var ma=m((jre,wA)=>{"use strict";var MG=A().OPERATIONS_ENUM,Sf=class{static{a(this,"InsertObject")}constructor(t,r,s,n,i=void 0){this.operation=MG.INSERT,this.schema=t,this.table=r,this.hash_attribute=s,this.records=n,this.__origin=i}};wA.exports=Sf});var Ra=m((rse,CA)=>{"use strict";var tse=ma(),Vu=A(),Tf=V(),pf=k(),PG=require("uuid"),{handleHDBError:Sa,hdb_errors:vG}=W(),{HDB_ERROR_MSGS:pa,HTTP_STATUS_CODES:Ta}=vG;CA.exports=BG;function BG(e,t,r){for(let n=0;n<t.length;n++)HG(t[n]);let{records:s}=e;for(let n=0;n<s.length;n++){let i=s[n];FG(i,r,e.operation)}}a(BG,"processRows");function HG(e){if(Buffer.byteLength(String(e))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw Sa(new Error,pa.ATTR_NAME_LENGTH_ERR(e),Ta.BAD_REQUEST,void 0,void 0,!0);if(Tf.isEmptyOrZeroLength(e)||Tf.isEmpty(e.trim()))throw Sa(new Error,pa.ATTR_NAME_NULLISH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}a(HG,"validateAttribute");function FG(e,t,r){if(!e.hasOwnProperty(t)||Tf.isEmptyOrZeroLength(e[t])){if(r===Vu.OPERATIONS_ENUM.INSERT||r===Vu.OPERATIONS_ENUM.UPSERT){e[t]=PG.v4();return}throw pf.error("Update transaction aborted due to record with no hash value:",e),Sa(new Error,pa.RECORD_MISSING_HASH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}if(Buffer.byteLength(String(e[t]))>Vu.INSERT_MODULE_ENUM.MAX_CHARACTER_SIZE)throw pf.error(e),Sa(new Error,pa.HASH_VAL_LENGTH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0);if(isNaN(e[t])&&e[t].includes("/"))throw pf.error(e),Sa(new Error,pa.INVALID_FORWARD_SLASH_IN_HASH_ERR,Ta.BAD_REQUEST,void 0,void 0,!0)}a(FG,"validateHash")});var DA=m((nse,UA)=>{"use strict";var Rf=class{static{a(this,"ITCEventObject")}constructor(t,r){this.type=t,this.message=r}};UA.exports=Rf});var PA=m((ose,MA)=>{"use strict";var gf=Ie(),qG=k(),LA=nr().LMDB_ERRORS_ENUM;MA.exports=GG;async function GG(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 gf.closeEnvironment(global.lmdb_map[o])}catch(c){if(c.message!==LA.ENV_REQUIRED)throw c}}break;case"drop_table":let s=`${e.schema}.${e.table}`,n=`txn.${s}`;try{await gf.closeEnvironment(global.lmdb_map[s]),await gf.closeEnvironment(global.lmdb_map[n])}catch(i){if(i.message!==LA.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){qG.error(t)}}a(GG,"cleanLMDBMap")});var Hs=m((cse,FA)=>{"use strict";var ga=require("crypto"),xG=Q(),{CONFIG_PARAMS:kG}=A(),BA="aes-256-cbc",VG=32,$G=16,Af=64,HA=32,YG=Af+HA,vA=new Map;FA.exports={encrypt:KG,decrypt:WG,createNatsTableStreamName:QG};function KG(e){let t=ga.randomBytes(VG),r=ga.randomBytes($G),s=ga.createCipheriv(BA,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(KG,"encrypt");function WG(e){let t=e.substr(0,Af),r=e.substr(Af,HA),s=e.substr(YG,e.length),n=Buffer.from(r,"hex"),i=Buffer.from(s,"hex"),o=ga.createDecipheriv(BA,Buffer.from(t,"hex"),n),c=o.update(i);return c=Buffer.concat([c,o.final()]),c.toString()}a(WG,"decrypt");function QG(e,t){let r=xG.get(kG.CLUSTERING_DATABASELEVEL)?e:`${e}.${t}`,s=vA.get(r);return s||(s=ga.createHash("md5").update(r).digest("hex"),vA.set(r,s)),s}a(QG,"createNatsTableStreamName")});var Wn=m((_se,GA)=>{"use strict";var lse=Or(),$u=k(),qA=Gu(),zG=Hs(),Yu=V(),{handleHDBError:Ku,hdb_errors:JG}=W(),{HDB_ERROR_MSGS:Wu,HTTP_STATUS_CODES:Of}=JG,XG=Q();XG.initSync();var{getDatabases:Nf}=(Ee(),se(be));GA.exports={describeAll:ZG,describeTable:Qu,describeSchema:jG};async function ZG(e){try{let t=Yu.isEmptyOrZeroLength(e),r,s;t||(r=e.hdb_user.role.permission,s=r.super_user||r.cluster_user);let n=Nf(),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 Qu({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 Qu({schema:l,table:d},f)}E&&c.push(E)}catch(E){$u.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 $u.error("Got an error in describeAll"),$u.error(t),Ku(new Error,Wu.DESCRIBE_ALL_ERR)}}a(ZG,"describeAll");async function Qu(e,t){Yu.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=qA.describe_table(e);if(i)throw i;let c=Nf()[r];if(!c)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Of.NOT_FOUND);let u=c[s];if(!u)throw Ku(new Error,Wu.TABLE_NOT_FOUND(e.schema,e.table),Of.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=zG.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){$u.warn(`unable to stat table dbi due to ${d}`)}return _}a(Qu,"descTable");async function jG(e){Yu.transformReq(e);let t=qA.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=Nf()[s];if(!i)throw Ku(new Error,Wu.SCHEMA_NOT_FOUND(e.schema),Of.NOT_FOUND);let o={};for(let c in i){let u;if(r&&r.tables[c]&&(u=r.tables[c]),Yu.isEmpty(u)||u.describe){let l=await Qu({schema:e.schema,table:c},u?u.attribute_permissions:null);l&&(o[l.name]=l)}}return o}a(jG,"describeSchema")});var fn=m((hse,YA)=>{var ex=Yn(),{callbackify:kA,promisify:tx}=require("util"),{getDatabases:VA}=(Ee(),se(be));YA.exports={setSchemaDataToGlobal:xA,getTableSchema:rx,getSystemSchema:sx,setSchemaDataToGlobalAsync:tx(xA)};var $A=Wn(),Ese=kA($A.describeAll),fse=kA($A.describeTable);function xA(e){global.hdb_schema=VA(),e&&e()}a(xA,"setSchemaDataToGlobal");function rx(e,t,r){let s=VA()[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(rx,"getTableSchema");function sx(){return ex}a(sx,"getSystemSchema")});var Nr=m((Sse,zA)=>{"use strict";var Ju=mf(),mt=V(),nx=require("util"),Xu=Fr(),ix=fn(),KA=k(),{handleHDBError:Qn,hdb_errors:ox}=W(),{HTTP_STATUS_CODES:zn}=ox,ax=nx.promisify(ix.getTableSchema),cx="updated",WA="inserted",QA="upserted";zA.exports={insert:lx,update:_x,upsert:dx,validation:ux,flush:Ex};async function ux(e){if(mt.isEmpty(e))throw new Error("invalid update parameters defined.");if(mt.isEmptyOrZeroLength(e.schema))throw new Error("invalid database specified.");if(mt.isEmptyOrZeroLength(e.table))throw new Error("invalid table specified.");let t=await ax(e.schema,e.table),r=Ju(e);if(r)throw r;if(!Array.isArray(e.records))throw new Error("records must be an array");let s=t.hash_attribute,n=new Set,i={},o=!1;return e.operation==="update"&&(o=!0),e.records.forEach(c=>{if(o&&mt.isEmptyOrZeroLength(c[s]))throw KA.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(!mt.isEmptyOrZeroLength(c[s])&&(c[s]==="null"||c[s]==="undefined"))throw KA.error(`a valid hash value must be provided with ${e.operation} record:`,c),new Error(`"${c[s]}" is not a valid hash attribute value`);!mt.isEmpty(c[s])&&c[s]!==""&&n.has(mt.autoCast(c[s]))&&(c.skip=!0),n.add(mt.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(ux,"validation");async function lx(e){if(e.operation!=="insert")throw new Error("invalid operation, must be insert");let t=Ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await Xu.createRecords(e);return zu(WA,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time)}a(lx,"insertData");async function _x(e){if(e.operation!=="update")throw new Error("invalid operation, must be update");let t=Ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await Xu.updateRecords(e);return mt.isEmpty(s.existing_rows)?zu(cx,s.written_hashes,e,s.skipped_hashes,s.new_attributes,s.txn_time):zu(s.update_action,[],e,s.hashes,void 0,s.txn_time)}a(_x,"updateData");async function dx(e){if(e.operation!=="upsert")throw Qn(new Error,"invalid operation, must be upsert",zn.INTERNAL_SERVER_ERROR);let t=Ju(e);if(t)throw Qn(new Error,t.message,zn.BAD_REQUEST);mt.transformReq(e);let r=mt.checkSchemaTableExist(e.schema,e.table);if(r)throw Qn(new Error,r,zn.BAD_REQUEST);let s=await Xu.upsertRecords(e);return zu(QA,s.written_hashes,e,[],s.new_attributes,s.txn_time)}a(dx,"upsertData");function zu(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===WA?(o.inserted_hashes=t,o.skipped_hashes=s,o):e===QA?(o.upserted_hashes=t,o):(o.update_hashes=t,o.skipped_hashes=s,o)}a(zu,"returnObject");function Ex(e){return mt.transformReq(e),Xu.flush(e.schema,e.table)}a(Ex,"flush")});var yf=m((Tse,ZA)=>{var fx=Be(),bf=require("joi"),{hdb_table:hx,hdb_database:JA}=is(),XA={schema:JA,database:JA,table:hx},mx={date:bf.date().iso().required()},Sx={timestamp:bf.date().timestamp().required().messages({"date.format":"'timestamp' is invalid"})};ZA.exports=function(e,t){let r=t==="timestamp"?{...XA,...Sx}:{...XA,...mx},s=bf.object(r);return fx.validateBySchema(e,s)}});var tO=m((Rse,eO)=>{var px=Be(),If=require("joi"),{hdb_table:Tx,hdb_database:jA}=is(),Rx=If.object({schema:jA,database:jA,table:Tx,hash_values:If.array().required(),ids:If.array()});eO.exports=function(e){return px.validateBySchema(e,Rx)}});var sO=m((gse,rO)=>{"use strict";var wf=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}},Cf=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}},Uf=class{static{a(this,"DeleteResponseObject")}constructor(){this.message=void 0,this.deleted_hashes=[],this.skipped_hashes=[]}};rO.exports={InsertObject:wf,NoSQLSeachObject:Cf,DeleteResponseObject:Uf}});var Zn=m((Ose,cO)=>{"use strict";var iO=yf(),gx=tO(),Jn=V(),nO=require("moment"),oO=k(),{promisify:Ax,callbackify:Ox}=require("util"),Xn=A(),Nx=fn(),Df=Ax(Nx.getTableSchema),Lf=Fr(),{DeleteResponseObject:bx}=sO(),{handleHDBError:hn,hdb_errors:yx}=W(),{HDB_ERROR_MSGS:Zu,HTTP_STATUS_CODES:mn}=yx,Ix="records successfully deleted",wx=Ox(aO);cO.exports={delete:wx,deleteRecord:aO,deleteFilesBefore:Cx,deleteAuditLogsBefore:Ux};async function Cx(e){let t=iO(e,"date");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),!nO(e.date,nO.ISO_8601).isValid())throw hn(new Error,Zu.INVALID_DATE,mn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,Zu.INVALID_DATE,!0);let s=Jn.checkSchemaTableExist(e.schema,e.table);if(s)throw hn(new Error,s,mn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,s,!0);let n=await Lf.deleteRecordsBefore(e);if(await Df(e.schema,e.table),oO.info(`Finished deleting files before ${e.date}`),n&&n.message)return n.message}a(Cx,"deleteFilesBefore");async function Ux(e){let t=iO(e,"timestamp");if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);if(Jn.transformReq(e),isNaN(e.timestamp))throw hn(new Error,Zu.INVALID_VALUE("Timestamp"),mn.BAD_REQUEST,Xn.LOG_LEVELS.ERROR,Zu.INVALID_VALUE("Timestamp"),!0);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);let s=await Lf.deleteAuditLogsBefore(e);return await Df(e.schema,e.table),oO.info(`Finished deleting audit logs before ${e.timestamp}`),s}a(Ux,"deleteAuditLogsBefore");async function aO(e){e.ids&&(e.hash_values=e.ids);let t=gx(e);if(t)throw hn(t,t.message,mn.BAD_REQUEST,void 0,void 0,!0);Jn.transformReq(e);let r=Jn.checkSchemaTableExist(e.schema,e.table);if(r)throw hn(new Error,r,mn.NOT_FOUND,Xn.LOG_LEVELS.ERROR,r,!0);try{await Df(e.schema,e.table);let s=await Lf.deleteRecords(e);return Jn.isEmptyOrZeroLength(s.message)&&(s.message=`${s.deleted_hashes.length} of ${e.hash_values.length} ${Ix}`),s}catch(s){if(s.message===Xn.SEARCH_NOT_FOUND_MESSAGE){let n=new bx;return n.message=Xn.SEARCH_NOT_FOUND_MESSAGE,n.skipped_hashes=e.hash_values.length,n.deleted_hashes=0,n}throw s}}a(aO,"deleteRecord")});var ju=m((bse,_O)=>{var Dx=require("crypto"),uO=9;function Lx(e){let t=Px(uO),r=lO(e+t);return t+r}a(Lx,"createHash");function Mx(e,t){let r=e.substr(0,uO),s=r+lO(t+r);return e===s}a(Mx,"validateHash");function Px(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(Px,"generateSalt");function lO(e){return Dx.createHash("md5").update(e).digest("hex")}a(lO,"md5");_O.exports={hash:Lx,validate:Mx}});var EO=m((Ise,dO)=>{var Mf=Be(),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 vx(e){return It.password.presence=!0,It.username.presence=!0,It.role.presence=!0,It.active.presence=!0,Mf.validateObject(e,It)}a(vx,"addUserValidation");function Bx(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Mf.validateObject(e,It)}a(Bx,"alterUserValidation");function Hx(e){return It.password.presence=!1,It.username.presence=!0,It.role.presence=!1,It.active.presence=!1,Mf.validateObject(e,It)}a(Hx,"dropUserValidation");dO.exports={addUserValidation:vx,alterUserValidation:Bx,dropUserValidation:Hx}});var He=m((Use,hO)=>{"use strict";var{platform:Cse}=require("os"),Fx="nats-server.zip",Pf="nats-server",qx=process.platform==="win32"?`${Pf}.exe`:Pf,vf="HDB",Gx=/^[^\s.,*>]+$/,fO="__request__",xx=a(e=>`${e}.${fO}`,"REQUEST_SUBJECT"),kx={NATS_MSG_ID:"Nats-Msg-Id",ORIGIN:"origin"},Vx={HUB_SERVER:"hub.json",LEAF_SERVER:"leaf.json"},$x={HUB:"hub.pid",LEAF:"leaf.pid"},Yx={HUB:"-hub",LEAF:"-leaf",ADMIN:"-admin"},Kx={stream_name:"__HARPERDB_WORK_QUEUE__",durable_name:"HDB_WORK_QUEUE",deliver_group:vf,deliver_subject:"__HDB__.WORKQUEUE"},Wx={stream_name:"__HARPERDB_SCHEMA_QUEUE__",durable_name:"HDB_SCHEMA_QUEUE",deliver_group:vf,deliver_subject:"HDB.SCHEMAQUEUE"},Qx={stream_name:"__HARPERDB_USER_QUEUE__",durable_name:"HDB_USER_QUEUE",deliver_group:vf,deliver_subject:"HDB.USERQUEUE"},zx={SUCCESS:"success",ERROR:"error"},Jx={OPEN:"open",CLOSED:"closed",NO_RESPONDERS:"NoResponders",TIMEOUT:"Timeout"},Xx={TXN:"txn",MSGID:"msgid"},Gi={ERR:"error",WRN:"warn",INF:"info",DBG:"debug",TRC:"trace"},Zx={[Gi.ERR]:1,[Gi.WRN]:2,[Gi.INF]:3,[Gi.DBG]:4,[Gi.TRC]:5},jx={debug:"-D",trace:"-DVV"};hO.exports={NATS_SERVER_ZIP:Fx,NATS_SERVER_NAME:Pf,NATS_BINARY_NAME:qx,PID_FILES:$x,NATS_CONFIG_FILES:Vx,SERVER_SUFFIX:Yx,WORK_QUEUE_CONSUMER_NAMES:Kx,SCHEMA_QUEUE_CONSUMER_NAMES:Wx,USER_QUEUE_CONSUMER_NAMES:Qx,NATS_TERM_CONSTRAINTS_RX:Gx,REQUEST_SUFFIX:fO,UPDATE_REMOTE_RESPONSE_STATUSES:zx,CLUSTER_STATUS_STATUSES:Jx,REQUEST_SUBJECT:xx,SUBJECT_PREFIXES:Xx,MSG_HEADERS:kx,LOG_LEVELS:Gi,LOG_LEVEL_FLAGS:jx,LOG_LEVEL_HIERARCHY:Zx}});var SO=m((Lse,mO)=>{"use strict";var ek={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))},tk="certificate.pem",rk="privateKey.pem",sk="ca.pem";mO.exports={CERTIFICATE_VALUES:ek,CERTIFICATE_PEM_NAME:tk,PRIVATEKEY_PEM_NAME:rk,CA_PEM_NAME:sk}});var Hf=m((Pse,OO)=>{"use strict";var gO=require("fs-extra"),te=require("joi"),nk=require("os"),{boolean:Te,string:qs,number:ar,array:Bf}=te.types(),{totalmem:pO}=require("os"),xi=require("path"),ik=k(),tl=V(),Mse=SO(),TO=A(),ok=Be(),RO="log",ak="components",ck="Invalid logging.rotation.maxSize unit. Available units are G, M or K",uk="Invalid logging.rotation.interval unit. Available units are D, H or M (minutes)",lk="Invalid logging.rotation.maxSize value. Value should be a number followed by unit e.g. '10M'",_k="Invalid logging.rotation.interval value. Value should be a number followed by unit e.g. '10D'",dk="rootPath config parameter is undefined",Ek="clustering.enabled config parameter is undefined",Fs=ar.min(0).required(),rl=Bf.items({host:qs.required(),port:Fs}).empty(null),Gs;OO.exports={configValidator:fk,routesValidator:Rk,route_constraints:rl};function fk(e){if(Gs=e.rootPath,tl.isEmpty(Gs))throw dk;let t=Te.required(),r=te.valid("production","development").required(),s=ar.min(0).max(1e3).empty(null).default(Tk),n=qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").empty(null).default(el),i=te.custom(hk).messages({"any.custom":"{:#label} {:#error}"}),o=qs.pattern(/^[^\s.,*>]+$/).messages({"string.pattern.base":"{:#label} invalid, must not contain ., * or >"}).empty(null).required(),c=te.string().empty(null).default(el),u=te.custom(mk).empty(null).default(el),l=e.clustering?.enabled;if(tl.isEmpty(l))throw Ek;let _;return l===!0?_=te.object({enabled:t,hubServer:te.object({cluster:te.object({name:te.required().empty(null),network:te.object({port:Fs,routes:rl}).required()}).required(),leafNodes:te.object({network:te.object({port:Fs}).required()}).required(),network:te.object({port:Fs}).required()}).required(),leafServer:te.object({network:te.object({port:Fs,routes:rl}).required(),streams:te.object({maxAge:ar.min(120).allow(null).optional(),maxBytes:ar.min(1).allow(null).optional(),maxMsgs:ar.min(1).allow(null).optional(),path:c}).required()}).required(),logLevel:te.valid("error","warn","info","debug","trace"),nodeName:o,republishMessages:Te.optional(),databaseLevel:Te.optional(),tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required(),verify:Te.optional()}),user:qs.optional().empty(null)}).required():_=te.object({enabled:t,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i,insecure:Te.required()})}).required(),te.object({authentication:te.object({authorizeLocal:Te,cacheTTL:ar.required(),enableSessions:Te,operationTokenTimeout:te.required(),refreshTokenTimeout:te.required()}),analytics:te.object({aggregatePeriod:ar}),clustering:_,customFunctions:te.object({enabled:t,network:te.object({cors:Te.required(),corsAccessList:Bf.required(),headersTimeout:ar.min(1).required(),https:Te.required(),keepAliveTimeout:ar.min(1).required(),port:Fs,timeout:ar.min(1).required()}),nodeEnv:r,root:n,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),localStudio:te.object({enabled:t}).required(),logging:te.object({auditAuthEvents:te.object({logFailed:Te,logSuccessful:Te}),file:Te.required(),level:te.valid("notify","fatal","error","warn","info","debug","trace"),rotation:te.object({enabled:Te.optional(),compress:Te.optional(),interval:qs.custom(pk).optional().empty(null),maxSize:qs.custom(Sk).optional().empty(null),path:qs.optional().empty(null).default(el)}).required(),root:n,stdStreams:Te.required(),auditLog:Te.required()}).required(),operationsApi:te.object({foreground:Te.required(),network:te.object({cors:Te.required(),corsAccessList:Bf.required(),headersTimeout:ar.min(1).required(),https:Te.required(),keepAliveTimeout:ar.min(1).required(),port:Fs,timeout:ar.min(1).required()}).required(),nodeEnv:r,tls:te.object({certificate:i,certificateAuthority:i,privateKey:i})}).required(),rootPath:qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path").required(),mqtt:te.object({network:te.object({port:Fs,securePort:Fs}).required(),webSocket:Te.optional(),requireAuthentication:Te.optional()}),http:te.object({threads:s}).required(),storage:te.object({writeAsync:Te.required(),overlappingSync:Te.optional(),caching:Te.optional(),compression:Te.optional(),noReadAhead:Te.optional(),path:u,prefetchWrites:Te.optional()}).required(),ignoreScripts:Te.optional()}).validate(e,{allowUnknown:!0,abortEarly:!1,errors:{wrap:{label:"'"}}})}a(fk,"configValidator");function AO(e){return gO.existsSync(e)?null:`Specified path ${e} does not exist.`}a(AO,"doesPathExist");function hk(e,t){if(e===null)return;let r=AO(e);return r?t.message(r):e}a(hk,"validatePemFile");function mk(e,t){te.assert(e,qs.pattern(/^[\\\/]$|([\\\/][a-zA-Z_0-9\:-]+)+$/,"directory path"));let r=AO(e);if(r)return t.message(r)}a(mk,"validatePath");function Sk(e,t){let r=e.slice(-1);if(r!=="G"&&r!=="M"&&r!=="K")return t.message(ck);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(lk):e}a(Sk,"validateRotationMaxSize");function pk(e,t){let r=e.slice(-1);if(r!=="D"&&r!=="H"&&r!=="M")return t.message(uk);let s=e.slice(0,-1);return isNaN(parseInt(s))?t.message(_k):e}a(pk,"validateRotationInterval");function Tk(e,t){let r=t.state.path.join("."),s=nk.cpus().length,n=s-1;n<=2&&(n=2);let i=process.constrainedMemory?.()||pO();return i=Math.round(Math.min(i,pO())/1e6),n=Math.max(Math.min(n,Math.round((i-750)/300)),1),ik.info(`Detected ${s} cores and ${i}MB on this machine, defaulting ${r} to ${n}`),n}a(Tk,"setDefaultThreads");function el(e,t){if(!tl.isEmpty(t.original))return t.original;let r=t.state.path.join(".");if(tl.isEmpty(Gs))throw new Error(`Error setting default root for: ${r}. HDB root is not defined`);switch(r){case"customFunctions.root":return xi.join(Gs,ak);case"logging.root":return xi.join(Gs,RO);case"clustering.leafServer.streams.path":return xi.join(Gs,"clustering","leaf");case"storage.path":let s=xi.join(Gs,TO.LEGACY_DATABASES_DIR_NAME);return gO.existsSync(s)?s:xi.join(Gs,TO.DATABASES_DIR_NAME);case"logging.rotation.path":return xi.join(Gs,RO);default:throw new Error(`Error setting default root for config parameter: ${r}. Unrecognized config parameter`)}}a(el,"setDefaultRoot");function Rk(e){let t=te.object({routes:rl});return ok.validateBySchema({routes:e},t)}a(Rk,"routesValidator")});var yr=m((Hse,MO)=>{"use strict";var br=A(),_t=V(),st=k(),{configValidator:gk,routesValidator:NO}=Hf(),qt=require("fs-extra"),Ak=require("yaml"),qr=require("path"),Ok=require("is-number"),yO=require("properties-reader"),Nk=require("lodash"),{handleHDBError:bk}=W(),{HTTP_STATUS_CODES:yk,HDB_ERROR_MSGS:sl}=nr(),Bse=require("minimist"),{server:Ik}=(ss(),se(wu)),{SCHEMAS_PARAM_CONFIG:Aa,CONFIG_PARAMS:Sn,CONFIG_PARAM_MAP:xs}=br,wk="Unable to get config value because config is uninitialized",Ck="Config successfully initialized",Uk="Error backing up config file",Dk="Empty parameter sent to getConfigValue",IO=qr.join(br.PACKAGE_ROOT,"config","yaml",br.HDB_DEFAULT_CONFIG_FILE),Lk="Configuration successfully set. You must restart HarperDB for new config settings to take effect.",bO={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"},nl,St;MO.exports={createConfigFile:Mk,getDefaultConfig:Pk,getConfigValue:CO,initConfig:UO,flattenConfig:ei,updateConfigValue:DO,updateConfigObject:Bk,getConfiguration:qk,setConfiguration:Gk,readConfigFile:Gf,getClusteringRoutes:xk,initOldConfig:LO,getConfigFromFile:kk,getConfigFilePath:jn,addConfig:Vk,deleteConfigFromFile:$k};function Mk(e){let t=pn(IO);nl=ei(t.toJSON());let r;for(let o in e){let c=xs[o.toLowerCase()];if(c===Sn.SCHEMAS){r=e[o];continue}if(c!==void 0){let u=c.split("_"),l=Ff(c,e[o]);c==="rootPath"&&l?.endsWith("/")&&(l=l.slice(0,-1));try{t.setIn([...u],l)}catch(_){st.error(_)}}}r&&wO(t,r),qf(t);let s=t.toJSON();St=ei(s);let n=t.getIn(["rootPath"]),i=qr.join(n,br.HDB_CONFIG_FILE);qt.createFileSync(i),qt.writeFileSync(i,String(t)),st.trace(`Config file written to ${i}`)}a(Mk,"createConfigFile");function wO(e,t){let r;try{try{r=JSON.parse(t)}catch(s){if(!_t.isObject(t))throw s;r=t}for(let s of r){let n=Object.keys(s)[0];if(s[n].hasOwnProperty(Aa.TABLES))for(let i in s[n][Aa.TABLES])for(let o in s[n][Aa.TABLES][i]){let c=s[n][Aa.TABLES][i][o],u=[Sn.SCHEMAS,n,Aa.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=[Sn.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(wO,"setSchemasConfig");function Pk(e){if(nl===void 0){let r=pn(IO);nl=ei(r.toJSON())}let t=xs[e.toLowerCase()];if(t!==void 0)return nl[t.toLowerCase()]}a(Pk,"getDefaultConfig");function CO(e){if(e==null){st.error(Dk);return}if(St===void 0){st.trace(wk);return}let t=xs[e.toLowerCase()];if(t!==void 0)return St[t.toLowerCase()]}a(CO,"getConfigValue");function jn(e=_t.getPropsFilePath()){let t=_t.getEnvCliRootPath();return t?qr.join(t,br.HDB_CONFIG_FILE):yO(e).get(br.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY)}a(jn,"getConfigFilePath");function UO(e=!1){if(St===void 0||e){let t;if(!_t.noBootFile()){t=_t.getPropsFilePath();try{qt.accessSync(t,qt.constants.F_OK|qt.constants.R_OK)}catch(i){throw st.error(i),new Error(`HarperDB properties file at path ${t} does not exist`)}}let r=jn(t),s;if(r.includes("config/settings.js"))try{LO(r);return}catch(i){if(i.code!==br.NODE_ERROR_CODES.ENOENT)throw i}try{s=pn(r)}catch(i){if(i.code===br.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}`)}vk(s,r),qf(s);let n=s.toJSON();if(Ik.config=n,St=ei(n),St.logging_rotation_rotate)for(let i in bO)St[i]&&st.error(`Config ${bO[i]} has been deprecated. Please check https://docs.harperdb.io/docs/ for further details.`);st.trace(Ck)}}a(UO,"initConfig");function vk(e,t){let r=e.getIn(["rootPath"]),s=!1;e.hasIn(["storage","path"])||(e.setIn(["storage","path"],qr.join(r,"database")),s=!0),e.hasIn(["clustering","leafServer","streams","path"])||(e.setIn(["clustering","leafServer","streams","path"],qr.join(r,"clustering","leaf")),s=!0),e.hasIn(["logging","rotation","path"])||(e.setIn(["logging","rotation","path"],qr.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"),qt.writeFileSync(t,String(e)))}a(vk,"checkForUpdatedConfig");function qf(e){let t=e.toJSON(),r=gk(t);if(r.error)throw sl.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(qf,"validateConfig");function Bk(e,t){St===void 0&&(St={});let r=xs[e.toLowerCase()];if(r===void 0){st.trace(`Unable to update config object because config param '${e}' does not exist`);return}St[r.toLowerCase()]=t}a(Bk,"updateConfigObject");function DO(e,t,r=void 0,s=!1,n=!1,i=!1){St===void 0&&UO();let o=CO(xs.hdb_root),c=qr.join(o,br.HDB_CONFIG_FILE),u=pn(c),l;if(r===void 0&&e.toLowerCase()===Sn.SCHEMAS)l=t;else if(r===void 0){let E;if(i)E=e;else if(E=xs[e.toLowerCase()],E===void 0)throw new Error(`Unable to update config, unrecognized config parameter: ${e}`);let f=E.split("_"),h=Ff(E,t);u.setIn([...f],h)}else for(let E in r){let f=xs[E.toLowerCase()];if(f===Sn.SCHEMAS){l=r[E];continue}if(f!==void 0){let h=f.split("_"),T=Ff(f,r[E]);f==="rootPath"&&T?.endsWith("/")&&(T=T.slice(0,-1));try{u.setIn([...h],T)}catch(p){st.error(p)}}}l&&wO(u,l),qf(u);let _=u.getIn(["rootPath"]),d=qr.join(_,br.HDB_CONFIG_FILE);s===!0&&Hk(c,_),qt.writeFileSync(d,String(u)),n&&(St=ei(u.toJSON())),st.trace(`Config parameter: ${e} updated with value: ${t}`)}a(DO,"updateConfigValue");function Hk(e,t){try{let r=qr.join(t,"backup",`${br.HDB_CONFIG_FILE}.bak`);qt.copySync(e,r),st.trace(`Config file: ${e} backed up to: ${r}`)}catch(r){st.error(Uk),st.error(r)}}a(Hk,"backupConfigFile");var Fk=["schemas"];function ei(e){let t={};for(let r in e)if(e.hasOwnProperty(r))if(typeof e[r]=="object"&&e[r]!==null&&!Array.isArray(e[r])&&!Fk.includes(r)){let s=ei(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(ei,"flattenConfig");function Ff(e,t){if(e===Sn.CLUSTERING_NODENAME||e===Sn.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(Ok(t))return parseFloat(t);if(t===!0||t===!1||Array.isArray(t)||_t.isObject(t)||t===null)return t;if(typeof t=="string"&&t.toLowerCase()==="true")return!0;if(typeof t=="string"&&t.toLowerCase()==="false")return!1}if(t===void 0||t.toLowerCase()==="undefined")return null;if(typeof t=="string"&&(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))try{return JSON.parse(t)}catch{}return _t.autoCast(t)}a(Ff,"castConfigValue");function qk(){let e=_t.getPropsFilePath(),t=jn(e);return pn(t).toJSON()}a(qk,"getConfiguration");async function Gk(e){let{operation:t,hdb_user:r,hdb_auth_header:s,...n}=e;try{return DO(void 0,void 0,n,!0),Lk}catch(i){throw typeof i=="string"||i instanceof String?bk(i,i,yk.BAD_REQUEST,void 0,void 0,!0):i}}a(Gk,"setConfiguration");function Gf(){let e=_t.getPropsFilePath();try{qt.accessSync(e,qt.constants.F_OK|qt.constants.R_OK)}catch(s){if(!_t.noBootFile())throw st.error(s),new Error(`HarperDB properties file at path ${e} does not exist`)}let t=jn(e);return pn(t).toJSON()}a(Gf,"readConfigFile");function pn(e){return Ak.parseDocument(qt.readFileSync(e,"utf8"),{simpleKeys:!0})}a(pn,"parseYamlDoc");function xk(){let e=Gf(),t=e?.clustering?.hubServer?.cluster?.network?.routes;t=_t.isEmptyOrZeroLength(t)?[]:t;let r=NO(t);if(r)throw sl.CONFIG_VALIDATION(r.message);let s=e?.clustering?.leafServer?.network?.routes;s=_t.isEmptyOrZeroLength(s)?[]:s;let n=NO(s);if(n)throw sl.CONFIG_VALIDATION(n.message);if(!_t.isEmptyOrZeroLength(s)&&!_t.isEmptyOrZeroLength(t)){let i=t.filter(o=>s.some(c=>c.host===o.host&&c.port===o.port));if(!_t.isEmptyOrZeroLength(i)){let o=`Duplicate hub and leaf routes found ${JSON.stringify(i)}`;throw sl.CONFIG_VALIDATION(o)}}return{hub_routes:t,leaf_routes:s}}a(xk,"getClusteringRoutes");function LO(e){let t=yO(e);St={};for(let r in xs){let s=t.get(r.toUpperCase());if(_t.isEmpty(s)||typeof s=="string"&&s.trim().length===0)continue;let n=xs[r].toLowerCase();n===Sn.LOGGING_ROOT?St[n]=qr.dirname(s):St[n]=s}return St}a(LO,"initOldConfig");function kk(e){let t=Gf();return Nk.get(t,e.replaceAll("_","."))}a(kk,"getConfigFromFile");async function Vk(e,t){let r=pn(jn());r.hasIn([e])?r.setIn([e],t):r.addIn([e],t),await qt.writeFile(jn(),String(r))}a(Vk,"addConfig");function $k(e){let t=jn(_t.getPropsFilePath()),r=pn(t);r.deleteIn(e);let s=r.getIn(["rootPath"]),n=qr.join(s,br.HDB_CONFIG_FILE);qt.writeFileSync(n,String(r))}a($k,"deleteConfigFromFile")});var vO=m((qse,PO)=>{"use strict";var il=A(),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}},xf=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}};PO.exports={BaseLicense:ol,ExtendedLicense:xf}});var Oa=m((xse,xO)=>{"use strict";var Vi=require("fs-extra"),BO=ju(),HO=require("crypto"),Yk=require("moment"),Kk=require("uuid").v4,wt=k(),Vf=require("path"),Wk=V(),Tn=A(),Qk=vO().ExtendedLicense,ki="invalid license key format",zk="061183",Jk="mofi25",Xk="aes-256-cbc",Zk=16,jk=32,FO=Q();FO.initSync();var kf;xO.exports={validateLicense:qO,generateFingerPrint:tV,licenseSearch:GO,getLicense:nV};function $f(){return Vf.join(FO.getHdbBasePath(),Tn.LICENSE_KEY_DIR_NAME,Tn.LICENSE_FILE_NAME)}a($f,"getLicenseDirPath");function eV(){let e=$f();return Vf.join(e,Tn.LICENSE_FILE_NAME)}a(eV,"getLicenseFilePath");function Yf(){let e=$f();return Vf.join(e,Tn.REG_KEY_FILE_NAME)}a(Yf,"getFingerPrintFilePath");async function tV(){let e=Yf();try{return await Vi.readFile(e,"utf8")}catch(t){if(t.code==="ENOENT")return await rV();throw wt.error(`Error writing fingerprint file to ${e}`),wt.error(t),new Error("There was an error generating the fingerprint")}}a(tV,"generateFingerPrint");async function rV(){let e=Kk(),t=BO.hash(e),r=Yf();try{await Vi.mkdirp($f()),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(rV,"writeFingerprint");function qO(e,t){let r={valid_license:!1,valid_date:!1,valid_machine:!1,exp_date:null,ram_allocation:Tn.RAM_ALLOCATION_ENUM.DEFAULT,version:Tn.LICENSE_VALUES.VERSION_DEFAULT};if(!e)return wt.error("empty license key passed to validate."),r;let s=Yf(),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(Jk),c=o[1];c=Buffer.concat([Buffer.from(c)],Zk);let u=Buffer.concat([Buffer.from(i)],jk),l=HO.createDecipheriv(Xk,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=sV(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<Yk().valueOf()&&(r.valid_date=!1),BO.validate(o[1],`${zk}${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(qO,"validateLicense");function sV(e,t){try{let r=HO.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(sV,"checkOldLicense");function GO(){let e=new Qk,t=[];try{t=Vi.readFileSync(eV(),"utf-8").split(Tn.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(Wk.isEmptyOrZeroLength(s))continue;let n=JSON.parse(s),i=qO(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=Tn.RAM_ALLOCATION_ENUM.DEFAULT,e.enterprise=!1}}return kf=e,e}a(GO,"licenseSearch");async function nV(){return kf||await GO(),kf}a(nV,"getLicense")});var Ir=m((Kse,sN)=>{"use strict";var KO="username is required",WO="nothing to update, must supply active, role or password to update",QO="password cannot be an empty string",zO="If role is specified, it cannot be empty.",JO="active must be true or false";sN.exports={addUser:EV,alterUser:fV,dropUser:mV,getSuperUser:RV,userInfo:SV,listUsers:cl,listUsersExternal:pV,setUsersToGlobal:Yi,findAndValidateUser:rN,getClusterUser:gV,USERNAME_REQUIRED:KO,ALTERUSER_NOTHING_TO_UPDATE:WO,EMPTY_PASSWORD:QO,EMPTY_ROLE:zO,ACTIVE_BOOLEAN:JO};var XO=Nr(),iV=Zn(),Wf=ju(),ZO=EO(),jO=Or(),Qf=ks(),cr=V(),eN=require("validate.js"),le=k(),{promisify:oV}=require("util"),zf=Hs(),kO=A(),VO=He(),aV=yr(),Vse=Q(),$se=Oa(),cV=Yn(),{table:Yse}=(Ee(),se(be)),{handleHDBError:as,hdb_errors:uV}=W(),{HTTP_STATUS_CODES:cs,AUTHENTICATION_ERROR_MSGS:Kf,HDB_ERROR_MSGS:$i}=uV,{UserEventMsg:Jf}=Gr(),$O=require("lodash"),{_assignPackageExport:lV}=require("../index");lV("getUser",rN);var tN={username:!0,active:!0,role:!0,password:!0},YO=new Map,al=jO.searchByValue,_V=jO.searchByHash,dV=oV(iV.delete);async function EV(e){let t=eN.cleanAttributes(e,tN),r=ZO.addUserValidation(t);if(r)throw as(new Error,r.message,cs.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 le.error("There was an error searching for a role in add user"),le.error(u),u}if(!n||n.length<1)throw as(new Error,$i.ROLE_NAME_NOT_FOUND(t.role),cs.NOT_FOUND,void 0,void 0,!0);if(n.length>1)throw as(new Error,$i.DUP_ROLES_FOUND(t.role),cs.CONFLICT,void 0,void 0,!0);n[0].permission.cluster_user===!0&&(t.hash=zf.encrypt(t.password)),t.password=Wf.hash(t.password),t.role=n[0].id;let i={operation:"insert",schema:"system",table:"hdb_user",records:[t]},o;try{o=await XO.insert(i)}catch(u){throw le.error("There was an error searching for a user."),le.error(u),u}le.debug(o);try{await Yi()}catch(u){throw le.error("Got an error setting users to global"),le.error(u),u}if(o.skipped_hashes.length===1)throw as(new Error,$i.USER_ALREADY_EXISTS(t.username),cs.CONFLICT,void 0,void 0,!0);let c=Object.assign({},t);return c.role=n[0],Qf.signalUserChange(new Jf(process.pid)),`${c.username} successfully added`}a(EV,"addUser");async function fV(e){let t=eN.cleanAttributes(e,tN);if(cr.isEmptyOrZeroLength(t.username))throw new Error(KO);if(cr.isEmptyOrZeroLength(t.password)&&cr.isEmptyOrZeroLength(t.role)&&cr.isEmptyOrZeroLength(t.active))throw new Error(WO);if(!cr.isEmpty(t.password)&&cr.isEmptyOrZeroLength(t.password.trim()))throw new Error(QO);if(!cr.isEmpty(t.active)&&!cr.isBoolean(t.active))throw new Error(JO);let r=hV(t.username);if(!cr.isEmpty(t.password)&&!cr.isEmptyOrZeroLength(t.password.trim())&&(r&&(t.hash=zf.encrypt(t.password)),t.password=Wf.hash(t.password)),t.role==="")throw new Error(zO);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 le.error("Got an error searching for a role."),le.error(c),c}if(!o||o.length===0){let c=$i.ALTER_USER_ROLE_NOT_FOUND(t.role);throw le.error(c),as(new Error,c,cs.NOT_FOUND,void 0,void 0,!0)}if(o.length>1){let c=$i.ALTER_USER_DUP_ROLES(t.role);throw le.error(c),as(new Error,c,cs.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 XO.update(s)}catch(i){throw le.error("Error during update."),le.error(i),i}try{await Yi()}catch(i){throw le.error("Got an error setting users to global"),le.error(i),i}return Qf.signalUserChange(new Jf(process.pid)),n}a(fV,"alterUser");function hV(e){let t=!1,r=global.hdb_users.get(e);return r&&r.role.permission.cluster_user===!0&&(t=!0),t}a(hV,"isClusterUser");async function mV(e){try{let t=ZO.dropUserValidation(e);if(t)throw new Error(t);let r={table:"hdb_user",schema:"system",hash_values:[e.username]};if(cr.isEmpty(global.hdb_users.get(e.username)))throw as(new Error,$i.USER_NOT_EXIST(e.username),cs.NOT_FOUND,void 0,void 0,!0);let s;try{s=await dV(r)}catch(n){throw le.error("Got an error deleting a user."),le.error(n),n}le.debug(s);try{await Yi()}catch(n){throw le.error("Got an error setting users to global."),le.error(n),n}return Qf.signalUserChange(new Jf(process.pid)),`${e.username} successfully deleted`}catch(t){throw t}}a(mV,"dropUser");async function SV(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 _V(r)}catch(n){throw le.error("Got an error searching for a role."),le.error(n),n}t.role=s[0],delete t.password,delete t.refresh_token,delete t.hash}catch(r){throw le.error(r),r}return t}a(SV,"userInfo");async function pV(){let e;try{e=await cl()}catch(t){throw le.error("Got an error listing users."),le.error(t),t}try{e.forEach(t=>{delete t.password,delete t.hash,delete t.refresh_token})}catch{throw new Error("there was an error massaging the user data")}return[...e.values()]}a(pV,"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 le.error("Got an error searching for roles."),le.error(o),o}let r={};for(let o of t)r[o.id]=$O.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 le.error("Got an error searching for users."),le.error(o),o}let i=new Map;for(let o of n)o=$O.cloneDeep(o),o.role=r[o.role],TV(o.role),i.set(o.username,o);return i}catch(e){throw le.error("got an error listing users"),le.error(e),cr.errorizeMessage(e)}return null}a(cl,"listUsers");function TV(e){try{if(!e){le.error("invalid user role found.");return}e.permission.system||(e.permission.system={}),e.permission.system.tables||(e.permission.system.tables={});for(let t of Object.keys(cV)){let r={read:!!e.permission.super_user,insert:!1,update:!1,delete:!1,attribute_permissions:[]};e.permission.system.tables[t]=r}}catch(t){le.error("Got an error trying to set system permissions."),le.error(t)}}a(TV,"appendSystemTablesToRole");async function Yi(){try{let e=await cl();global.hdb_users=e}catch(e){throw le.error(e),e}}a(Yi,"setUsersToGlobal");async function rN(e,t,r=!0){global.hdb_users||await Yi();let s=global.hdb_users.get(e);if(!s)throw as(new Error,Kf.GENERIC_AUTH_FAIL,cs.UNAUTHORIZED,void 0,void 0,!0);if(s&&!s.active)throw as(new Error,Kf.USER_INACTIVE,cs.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(YO.get(t)===s.password)return n;if(Wf.validate(s.password,t))YO.set(t,s.password);else throw as(new Error,Kf.GENERIC_AUTH_FAIL,cs.UNAUTHORIZED,void 0,void 0,!0)}return n}a(rN,"findAndValidateUser");async function RV(){global.hdb_users||await Yi();for(let[,e]of global.hdb_users)if(e.role.role==="super_user")return e}a(RV,"getSuperUser");async function gV(){let e=await cl(),t=aV.getConfigFromFile(kO.CONFIG_PARAMS.CLUSTERING_USER),r=e.get(t);if(!cr.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+VO.SERVER_SUFFIX.ADMIN,r.sys_name_encoded=r.uri_encoded_name+VO.SERVER_SUFFIX.ADMIN,r}a(gV,"getClusterUser")});var ba=m((Jse,aN)=>{"use strict";var ti=k(),ur=A(),AV=PA(),Qse=fn(),zse=Wn(),OV=Ir(),{validateEvent:nN}=Gr(),Na=Fr(),NV=require("process"),{resetDatabases:bV}=(Ee(),se(be)),yV={[ur.ITC_EVENT_TYPES.SCHEMA]:IV,[ur.ITC_EVENT_TYPES.USER]:oN};async function IV(e){let t=nN(e);if(t){ti.error(t);return}ti.trace("ITC schemaHandler received schema event:",e),await AV(e.message),await wV(e.message)}a(IV,"schemaHandler");async function wV(e){try{Na.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME),Na.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME),Na.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME);let t=bV();e.table&&e.database&&await t[e.database][e.table].put(Symbol.for("write-verify"),null)}catch(t){ti.error(t)}}a(wV,"syncSchemaMetadata");var iN=[];async function oN(e){try{try{Na.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.USER_TABLE_NAME),Na.resetReadTxn(ur.SYSTEM_SCHEMA_NAME,ur.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME)}catch(r){ti.warn(r)}let t=nN(e);if(t){ti.error(t);return}ti.trace(`ITC userHandler ${ur.HDB_ITC_CLIENT_PREFIX}${NV.pid} received user event:`,e),await OV.setUsersToGlobal();for(let r of iN)r()}catch(t){ti.error(t)}}a(oN,"userHandler");oN.addListener=function(e){iN.push(e)};aN.exports=yV});var Gr=m((rne,uN)=>{"use strict";var Zse=k(),Xf=V(),CV=A(),{ITC_ERRORS:ya}=nr(),{parentPort:jse,threadId:UV,isMainThread:DV,workerData:ene}=require("worker_threads"),{onMessageFromWorkers:LV,broadcast:tne,broadcastWithAcknowledgement:MV}=dt();uN.exports={sendItcEvent:PV,validateEvent:cN,SchemaEventMsg:vV,UserEventMsg:BV};var ul;LV(async(e,t)=>{ul=ul||ba(),cN(e),ul[e.type]&&await ul[e.type](e),e.requestId&&t&&t.postMessage({type:"ack",id:e.requestId})});function PV(e){return!DV&&e.message&&(e.message.originator=UV),MV(e)}a(PV,"sendItcEvent");function cN(e){if(typeof e!="object")return ya.INVALID_ITC_DATA_TYPE;if(!e.hasOwnProperty("type")||Xf.isEmpty(e.type))return ya.MISSING_TYPE;if(!e.hasOwnProperty("message")||Xf.isEmpty(e.message))return ya.MISSING_MSG;if(!e.message.hasOwnProperty("originator")||Xf.isEmpty(e.message.originator))return ya.MISSING_ORIGIN;if(CV.ITC_EVENT_TYPES[e.type.toUpperCase()]===void 0)return ya.INVALID_EVENT(e.type)}a(cN,"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 BV(e){this.originator=e}a(BV,"UserEventMsg")});var ks=m((ine,EN)=>{"use strict";var lN=A(),nne=V(),ll=k(),_N=DA(),Ki,{sendItcEvent:dN}=Gr();function HV(e){try{ll.trace("signalSchemaChange called with message:",e),Ki=Ki||ba();let t=new _N(lN.ITC_EVENT_TYPES.SCHEMA,e);return Ki.schema(t),dN(t)}catch(t){ll.error(t)}}a(HV,"signalSchemaChange");function FV(e){try{ll.trace("signalUserChange called with message:",e),Ki=Ki||ba();let t=new _N(lN.ITC_EVENT_TYPES.USER,e);return Ki.user(t),dN(t)}catch(t){ll.error(t)}}a(FV,"signalUserChange");EN.exports={signalSchemaChange:HV,signalUserChange:FV}});var _l=m((ane,hN)=>{"use strict";var fN=V(),qV=A(),GV=k(),xV=ku(),kV=xu(),VV=ks(),{SchemaEventMsg:$V}=Gr(),YV="already exists in";hN.exports=KV;async function KV(e,t,r){if(fN.isEmptyOrZeroLength(r))return r;let s=[];fN.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 WV(e,t.schema,t.name,i)})),n}a(KV,"lmdbCheckForNewAttributes");async function WV(e,t,r,s){let n=new kV(t,r,s,void 0,!0);e&&(n.hdb_auth_header=e);try{await QV(n)}catch(i){if(typeof i=="object"&&i.message!==void 0&&i.message.includes(YV))GV.warn(`attribute ${t}.${r}.${s} already exists`);else throw i}}a(WV,"createNewAttribute");async function QV(e){let t;return t=await xV(e),VV.signalSchemaChange(new $V(process.pid,qV.OPERATIONS_ENUM.CREATE_ATTRIBUTE,e.schema,e.table,e.attribute)),t}a(QV,"createAttribute")});var Wi=m((une,mN)=>{"use strict";var Zf=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}};mN.exports=Zf});var pN=m((_ne,SN)=>{"use strict";var zV=Wi(),JV=A().OPERATIONS_ENUM,jf=class extends zV{static{a(this,"LMDBInsertTransactionObject")}constructor(t,r,s,n,i=void 0){super(JV.INSERT,r,s,n,i),this.records=t}};SN.exports=jf});var RN=m((Ene,TN)=>{"use strict";var XV=Wi(),ZV=A().OPERATIONS_ENUM,eh=class extends XV{static{a(this,"LMDBUpdateTransactionObject")}constructor(t,r,s,n,i,o=void 0){super(ZV.UPDATE,s,n,i,o),this.records=t,this.original_records=r}};TN.exports=eh});var AN=m((hne,gN)=>{"use strict";var jV=Wi(),e$=A().OPERATIONS_ENUM,th=class extends jV{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}};gN.exports=th});var NN=m((Sne,ON)=>{"use strict";var t$=Wi(),r$=A().OPERATIONS_ENUM,rh=class extends t${static{a(this,"LMDBDeleteTransactionObject")}constructor(t,r,s,n,i=void 0){super(r$.DELETE,s,n,t,i),this.original_records=r}};ON.exports=rh});var Ia=m((Rne,wN)=>{"use strict";var Tne=require("path"),bN=Ie(),s$=pN(),n$=RN(),i$=AN(),o$=NN(),Qi=ke(),yN=V(),{CONFIG_PARAMS:a$}=A(),IN=Q();IN.initSync();var dl=A().OPERATIONS_ENUM,{getTransactionAuditStorePath:c$}=Ce();wN.exports=u$;async function u$(e,t){if(IN.get(a$.LOGGING_AUDITLOG)===!1)return;let r=c$(e.schema,e.table),s=await bN.openEnvironment(r,e.table,!0),n=l$(e,t);if(!(n===void 0||n.hash_values.length===0)&&s!==void 0){bN.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),yN.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(u$,"writeTransaction");function l$(e,t){let r=yN.isEmpty(e.hdb_user)?void 0:e.hdb_user.username;if(e.operation===dl.INSERT)return new s$(e.records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPDATE)return new n$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.UPSERT)return new i$(e.records,t.original_records,r,t.txn_time,t.written_hashes,e.__origin);if(e.operation===dl.DELETE)return new o$(t.deleted,t.original_records,r,t.txn_time,e.__origin)}a(l$,"createTransactionObject")});var sh=m((One,CN)=>{"use strict";var _$=ha(),Ane=ma(),wa=A(),d$=Ra(),E$=Fi().insertRecords,f$=Ie(),h$=k(),m$=_l(),{getSchemaPath:S$}=Ce(),p$=Ia();CN.exports=T$;async function T$(e){try{let{schema_table:t,attributes:r}=_$(e);d$(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 m$(e.hdb_auth_header,t,r),n=S$(e.schema,e.table),i=await f$.openEnvironment(n,e.table),o=await E$(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await p$(e,o)}catch(c){h$.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(T$,"lmdbCreateRecords")});var LN=m((bne,DN)=>{"use strict";var UN=A(),R$=sh(),g$=ma(),A$=require("fs-extra"),{getSchemaPath:O$}=Ce();DN.exports=N$;async function N$(e){let t=[{name:e.schema,createddate:Date.now()}],r=new g$(UN.SYSTEM_SCHEMA_NAME,UN.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,void 0,t);await R$(r),await A$.mkdirp(O$(e.schema))}a(N$,"lmdbCreateSchema")});var PN=m((Ine,MN)=>{"use strict";var nh=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}};MN.exports=nh});var FN=m((Lne,HN)=>{"use strict";var vN=Ie(),ih=Bt(),oh=nr().LMDB_ERRORS_ENUM,b$=ke(),BN=k(),Cne=V(),y$=require("lmdb"),I$=PN(),w$=A(),{OVERFLOW_MARKER:Une,MAX_SEARCH_KEY_LENGTH:Dne}=b$,C$=w$.TIME_STAMP_NAMES_ENUM.UPDATED_TIME;async function U$(e,t,r,s){if(ih.validateEnv(e),t===void 0)throw new Error(oh.HASH_ATTRIBUTE_REQUIRED);if(!Array.isArray(r))throw r===void 0?new Error(oh.IDS_REQUIRED):new Error(oh.IDS_MUST_BE_ITERABLE);try{let n=vN.listDBIs(e);vN.initializeDBIs(e,t,n);let i=new I$,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[C$]>s){i.skipped.push(o);continue}let T=e.dbis[t].ifVersion(o,y$.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],F=h[R];if(F!=null)try{let $=ih.getIndexedValues(F);if($)for(let w=0,I=$.length;w<I;w++)O.remove($[w],o)}catch{BN.warn(`cannot delete from attribute: ${R}, ${F}:${o}`)}}});c.push(T),u.push(o),i.original_records.push(h)}catch(h){BN.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=ih.getNextMonotonicTime(),i}catch(n){throw n}}a(U$,"deleteRecords");HN.exports={deleteRecords:U$}});var Ca=m((Pne,GN)=>{"use strict";var zi=V(),D$=FN(),L$=Ie(),{getSchemaPath:M$}=Ce(),P$=Ia(),v$=k();GN.exports=B$;async function B$(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 qN([],[]);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=M$(e.schema,e.table),i=await L$.openEnvironment(n,e.table),o=await D$.deleteRecords(i,s,e.hash_values,e.__origin?.timestamp);try{t===!0&&await P$(e,o)}catch(c){v$.error(`unable to write transaction due to ${c.message}`)}return qN(o.deleted,o.skipped,o.txn_time)}catch(n){throw n}}a(B$,"lmdbDeleteRecords");function qN(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(qN,"createDeleteResponse")});var ch=m((Hne,xN)=>{"use strict";var H$=A(),Bne=Bt();function ah(e,t){let r=Object.create(null);if(t.length===1&&H$.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(ah,"parseRow");function F$(e,t,r,s){let n=ah(r,e);s.push(n)}a(F$,"searchAll");function q$(e,t,r,s){let n=ah(r,e);s[t]=n}a(q$,"searchAllToMap");function G$(e,t,r){r[e]===void 0&&(r[e]=[]),r[e].push(t)}a(G$,"iterateDBI");function ri(e,t,r,s,n){let i=Object.create(null);i[n]=e;let o;s===n?o=e:(o=t,s!==void 0&&(i[s]=o)),r[0].push(o),r[1].push(i)}a(ri,"pushResults");function x$(e,t,r,s,n,i){t.toString().endsWith(e)&&ri(t,r,s,n,i)}a(x$,"endsWith");function k$(e,t,r,s,n,i){t.toString().includes(e)&&ri(t,r,s,n,i)}a(k$,"contains");function V$(e,t,r,s,n,i){t>e&&ri(t,r,s,n,i)}a(V$,"greaterThanCompare");function $$(e,t,r,s,n,i){t>=e&&ri(t,r,s,n,i)}a($$,"greaterThanEqualCompare");function Y$(e,t,r,s,n,i){t<e&&ri(t,r,s,n,i)}a(Y$,"lessThanCompare");function K$(e,t,r,s,n,i){t<=e&&ri(t,r,s,n,i)}a(K$,"lessThanEqualCompare");xN.exports={parseRow:ah,searchAll:F$,searchAllToMap:q$,iterateDBI:G$,endsWith:x$,contains:k$,greaterThanCompare:V$,greaterThanEqualCompare:$$,lessThanCompare:Y$,lessThanEqualCompare:K$,pushResults:ri}});var Ji=m((kne,QN)=>{"use strict";var Rn=Ie(),qne=k(),lr=Bt(),El=ke(),Ve=nr().LMDB_ERRORS_ENUM,Gne=V(),W$=A(),fl=ch(),{parseRow:Q$}=fl,xne=require("lmdb"),{OVERFLOW_MARKER:kN,MAX_SEARCH_KEY_LENGTH:z$}=El;function VN(e,t,r,s=!1,n=void 0,i=void 0){return si(e,t,r,(o,c)=>c.getRange({transaction:o,start:s?void 0:!1,end:s?!1:void 0,limit:n,offset:i,reverse:s}))}a(VN,"iterateFullIndex");function Ua(e,t,r,s,n,i=!1,o=void 0,c=void 0,u=!1,l=!1){return si(e,t,r,(_,d,E,f)=>{let O={transaction:_,start:i===!0?n:s,end:i===!0?s:n,reverse:i,limit:o,offset:c,inclusiveEnd:i===!0?!u:!l,exclusiveStart:i===!0?l:u};return f===r?(O.values=!1,d.getRange(O).map(F=>({value:F}))):d.getRange(O)})}a(Ua,"iterateRangeBetween");function si(e,t,r,s){let n=e.database||e,i=Rn.openDBI(n,r);i[El.DBI_DEFINITION_NAME].is_hash_attribute?t=r:t&&Rn.openDBI(n,t);let o;e.database?o=e:(o=e.useReadTransaction(),o.database=e);let c=s(o,i,n,t);return c.transaction=o,e.database||(c.onDone=()=>{o.done()}),c}a(si,"setupTransaction");function $N(e,t,r,s){let n;return function(i,o){if(typeof i=="string"&&i.endsWith(kN)){if(!n)if(r)n=Rn.openDBI(e,r);else{let u=Rn.listDBIs(e);for(let l=0,_=u.length;l<_&&(n=Rn.openDBI(e,u[l]),!n[El.DBI_DEFINITION_NAME].is_hash_attribute);l++);}i=n.get(o,{transaction:t,lazy:!0})[s]}return i}}a($N,"getOverflowCheck");function J$(e,t,r,s=!1,n=void 0,i=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return si(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=>Q$(l.value,r))))}a(J$,"searchAll");function X$(e,t,r,s=!1,n=void 0,i=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);hl(r),r=Da(e.database||e,r);let o=new Map;for(let{key:c,value:u}of VN(e,t,t,s,n,i))o.set(c,fl.parseRow(u,r));return o}a(X$,"searchAllToMap");function Z$(e,t,r=!1,s=void 0,n=void 0){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);let i=Object.create(null),o=VN(e,void 0,t,r,s,n),c=o.transaction,u=$N(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(Z$,"iterateDBI");function j$(e,t){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);return Rn.statDBI(e,t).entryCount}a(j$,"countAll");function eY(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(e,t,r,(c,u,l,_)=>(s=lr.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 tY(e,t,r){return gn(e,t,r),Rn.openDBI(e,t).getValuesCount(r)}a(tY,"count");function rY(e,t,r,s,n=!1,i=void 0,o=void 0){return gn(e,r,s),si(e,null,r,(c,u)=>{s=lr.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(rY,"startsWith");function sY(e,t,r,s,n=!1,i=void 0,o=void 0){return YN(e,t,r,s,n,i,o,!0)}a(sY,"endsWith");function YN(e,t,r,s,n=!1,i=void 0,o=void 0,c=!1){return gn(e,r,s),si(e,null,r,(u,l,_,d)=>{let E=$N(_,u,d,r);return o=Number.isInteger(o)?o:0,l.getKeys({transaction:u,end:n?!1:void 0,reverse:n}).flatMap(f=>{let h=f.toString();return h.endsWith(kN)?l.getValues(f,{transaction:u}).map(T=>{let p=E(f,T);if(c?p.endsWith(s):p.includes(s))return{key:p,value:T}}).filter(T=>T):(c?h.endsWith(s):h.includes(s))?l[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(YN,"contains");function nY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!0,!1)}a(nY,"greaterThan");function iY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\uFFFF":c==="number"?u=1/0:c==="boolean"&&(u=!0),Ua(e,t,r,s,u,n,i,o,!1,!1)}a(iY,"greaterThanEqual");function oY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!0)}a(oY,"lessThan");function aY(e,t,r,s,n=!1,i=void 0,o=void 0){gn(e,r,s);let c=typeof s,u;return c==="string"?u="\0":c==="number"?u=-1/0:c==="boolean"&&(u=!1),Ua(e,t,r,u,s,n,i,o,!1,!1)}a(aY,"lessThanEqual");function cY(e,t,r,s,n,i=!1,o=void 0,c=void 0){if(lr.validateEnv(e),r===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(s===void 0)throw new Error(Ve.START_VALUE_REQUIRED);if(n===void 0)throw new Error(Ve.END_VALUE_REQUIRED);if(s=lr.convertKeyValueToWrite(s),n=lr.convertKeyValueToWrite(n),s>n)throw new Error(Ve.END_VALUE_MUST_BE_GREATER_THAN_START_VALUE);return Ua(e,t,r,s,n,i,o,c)}a(cY,"between");function uY(e,t,r,s){lr.validateEnv(e);let n=e.database||e,i=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(hl(r),r=Da(n,r),s===void 0)throw new Error(Ve.ID_REQUIRED);let o=null,c=n.dbis[t].get(s,{transaction:i,lazy:r.length<3});return c&&(o=fl.parseRow(c,r)),o}a(uY,"searchByHash");function lY(e,t,r){lr.validateEnv(e);let s=e.database||e,n=e.database?e:null;if(t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.ID_REQUIRED);let i=!0;return s.dbis[t].get(r,{transaction:n,lazy:!0})===void 0&&(i=!1),i}a(lY,"checkHashExists");function _Y(e,t,r,s,n=[]){return WN(e,t,r,s,n),KN(e,t,r,s,n).map(i=>i[1])}a(_Y,"batchSearchByHash");function dY(e,t,r,s,n=[]){WN(e,t,r,s,n);let i=new Map;for(let[o,c]of KN(e,t,r,s,n))i.set(o,c);return i}a(dY,"batchSearchByHashToMap");function KN(e,t,r,s,n=[]){return si(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(KN,"batchHashSearch");function WN(e,t,r,s,n){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.HASH_ATTRIBUTE_REQUIRED);if(hl(r),s==null)throw new Error(Ve.IDS_REQUIRED);if(!s[Symbol.iterator])throw new Error(Ve.IDS_MUST_BE_ITERABLE)}a(WN,"initializeBatchSearchByHash");function hl(e){if(!Array.isArray(e))throw e===void 0?new Error(Ve.FETCH_ATTRIBUTES_REQUIRED):new Error(Ve.FETCH_ATTRIBUTES_MUST_BE_ARRAY)}a(hl,"validateFetchAttributes");function gn(e,t,r){if(lr.validateEnv(e),t===void 0)throw new Error(Ve.ATTRIBUTE_REQUIRED);if(r===void 0)throw new Error(Ve.SEARCH_VALUE_REQUIRED);if(r?.length>z$)throw new Error(Ve.SEARCH_VALUE_TOO_LARGE)}a(gn,"validateComparisonFunctions");function Da(e,t){return t.length===1&&W$.SEARCH_WILDCARDS.indexOf(t[0])>=0&&(t=Rn.listDBIs(e)),t}a(Da,"setGetWholeRowAttributes");QN.exports={searchAll:J$,searchAllToMap:X$,count:tY,countAll:j$,equals:eY,startsWith:rY,endsWith:sY,contains:YN,searchByHash:uY,setGetWholeRowAttributes:Da,batchSearchByHash:_Y,batchSearchByHashToMap:dY,checkHashExists:lY,iterateDBI:Z$,greaterThan:nY,greaterThanEqual:iY,lessThan:oY,lessThanEqual:aY,between:cY}});var Xi=m(($ne,jN)=>{var zN=require("lodash"),JN=Be(),Ue=require("joi"),EY=V(),{hdb_schema_table:ml,checkValidTable:XN,hdb_table:ZN,hdb_database:Sl}=is(),{handleHDBError:fY,hdb_errors:hY}=W(),{getDatabases:mY}=(Ee(),se(be)),{HTTP_STATUS_CODES:SY}=hY,pY=Ue.object({database:Sl,schema:Sl,table:ZN,search_attribute:ml,search_value:Ue.any().required(),get_attributes:Ue.array().min(1).items(ml).optional(),desc:Ue.bool(),limit:Ue.number().integer().min(1),offset:Ue.number().integer().min(0)}),TY=Ue.object({database:Sl,schema:Sl,table:ZN,operator:Ue.string().valid("and","or").default("and").lowercase(),offset:Ue.number().integer().min(0),limit:Ue.number().integer().min(1),get_attributes:Ue.array().min(1).items(ml).optional(),conditions:Ue.array().min(1).items(Ue.object({search_attribute:ml,search_type:Ue.string().valid("equals","contains","starts_with","ends_with","greater_than","greater_than_equal","less_than","less_than_equal","between").required(),search_value:Ue.when("search_type",{switch:[{is:"equals",then:Ue.any()},{is:"between",then:Ue.array().items(Ue.alternatives([Ue.string(),Ue.number()])).length(2)}],otherwise:Ue.alternatives(Ue.string(),Ue.number())}).required()})).required()});jN.exports=function(e,t){let r=null;switch(t){case"value":r=JN.validateBySchema(e,pY);break;case"hashes":let i=function(o){n?n+=". "+o:n=o};var s=i;a(i,"addError");let n;i(XN("database",e.schema)),i(XN("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=JN.validateBySchema(e,TY);break;default:throw new Error(`Error validating search, unknown type: ${t}`)}if(!r&&e.schema!=="system"){let n=EY.checkGlobalSchemaTable(e.schema,e.table);if(n)return fY(new Error,n,SY.NOT_FOUND);let o=mY()[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=zN.filter(c,l=>l!=="*"&&l.attribute!=="*"&&!zN.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 uh=m((Kne,eb)=>{"use strict";var RY=Ie(),gY=Xi(),{getSchemaPath:AY}=Ce();eb.exports=OY;function OY(e){let t=gY(e,"hashes");if(t)throw t;let r=AY(e.schema,e.table);return RY.openEnvironment(r,e.table)}a(OY,"initialize")});var lh=m((Qne,tb)=>{"use strict";var NY=Ji(),bY=uh();tb.exports=yY;async function yY(e){let t=await bY(e),r=t.useReadTransaction();r.database=t;let s=global.hdb_schema[e.schema][e.table];try{return NY.batchSearchByHashToMap(r,s.hash_attribute,e.get_attributes,e.hash_values)}finally{r.done()}}a(yY,"lmdbGetDataByHash")});var Zi=m((Jne,rb)=>{"use strict";var _h=class{static{a(this,"SearchByHashObject")}constructor(t,r,s,n){this.schema=t,this.table=r,this.hash_values=s,this.get_attributes=n}};rb.exports=_h});var nb=m((jne,sb)=>{"use strict";var Zne=Zi(),IY=Ji(),wY=uh();sb.exports=CY;async function CY(e){let t=await wY(e),r=global.hdb_schema[e.schema][e.table];return IY.batchSearchByHash(t,r.hash_attribute,e.get_attributes,e.hash_values)}a(CY,"lmdbSearchByHash")});var us=m((tie,ib)=>{"use strict";var dh=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=_}};ib.exports=dh});var pl=m((sie,_b)=>{"use strict";var Ct=Ji(),UY=Ie(),DY=V(),oe=ke(),ni=A(),LY=Yn(),ob=nr().LMDB_ERRORS_ENUM,{getSchemaPath:MY}=Ce(),Vs=ni.SEARCH_WILDCARDS;async function PY(e,t,r){let s;e.schema===ni.SYSTEM_SCHEMA_NAME?s=LY[e.table]:s=global.hdb_schema[e.schema][e.table];let n=lb(e,s.hash_attribute,r,t);return cb(e,n,s.hash_attribute,r)}a(PY,"prepSearch");async function cb(e,t,r,s){let n=MY(e.schema,e.table),i=await UY.openEnvironment(n,e.table),o=ub(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?ab(o,()=>!0):o.map(E=>({[r]:E.key}));let d=a(E=>({[r]:E.value,[_]:E.key}),"toObject");return s?ab(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(cb,"executeSearch");function ub(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(ub,"searchByType");function ab(e,t){let r=new Map;for(let s of e)r.set(s.value,t(s));return r}a(ab,"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 lb(e,t,r,s){if(DY.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),Vs.indexOf(n)>-1)return r===!0?oe.SEARCH_TYPES.SEARCH_ALL_TO_MAP:oe.SEARCH_TYPES.SEARCH_ALL;if(n.indexOf(Vs[0])<0&&n.indexOf(Vs[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(Vs.indexOf(i)>=0&&Vs.indexOf(o)>=0)return e.search_value=e.search_value.slice(1,-1),oe.SEARCH_TYPES.CONTAINS;if(Vs.indexOf(i)>=0)return e.search_value=e.search_value.substr(1),oe.SEARCH_TYPES.ENDS_WITH;if(Vs.indexOf(o)>=0)return e.search_value=e.search_value.slice(0,-1),oe.SEARCH_TYPES.STARTS_WITH;if(n.includes(Vs[0])||n.includes(Vs[1]))return oe.SEARCH_TYPES.EQUALS;throw new Error(ob.UNKNOWN_SEARCH_TYPE)}else switch(s){case ni.VALUE_SEARCH_COMPARATORS.BETWEEN:return oe.SEARCH_TYPES.BETWEEN;case ni.VALUE_SEARCH_COMPARATORS.GREATER:return oe.SEARCH_TYPES.GREATER_THAN;case ni.VALUE_SEARCH_COMPARATORS.GREATER_OR_EQ:return oe.SEARCH_TYPES.GREATER_THAN_EQUAL;case ni.VALUE_SEARCH_COMPARATORS.LESS:return oe.SEARCH_TYPES.LESS_THAN;case ni.VALUE_SEARCH_COMPARATORS.LESS_OR_EQ:return oe.SEARCH_TYPES.LESS_THAN_EQUAL;default:throw new Error(ob.UNKNOWN_SEARCH_TYPE)}}a(lb,"createSearchTypeFromSearchObject");_b.exports={executeSearch:cb,createSearchTypeFromSearchObject:lb,prepSearch:PY,searchByType:ub}});var Eb=m((oie,db)=>{"use strict";var iie=us(),BY=Xi(),HY=V(),FY=A(),qY=pl();db.exports=GY;function GY(e,t){if(!HY.isEmpty(t)&&FY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=BY(e,"value");if(s)throw s;let n=!0;return qY.prepSearch(e,t,n)}a(GY,"lmdbGetDataByValue")});var La=m((uie,fb)=>{"use strict";var cie=us(),xY=Xi(),kY=V(),VY=A(),$Y=pl();fb.exports=YY;async function YY(e,t){if(!kY.isEmpty(t)&&VY.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[t]===void 0)throw new Error(`Value search comparator - ${t} - is not valid`);let s=xY(e,"value");if(s)throw s;return $Y.prepSearch(e,t,!1)}a(YY,"lmdbSearchByValue")});var mb=m((die,hb)=>{"use strict";var _ie=ke(),Eh=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}},fh=class{static{a(this,"SearchCondition")}constructor(t,r,s){this.search_attribute=t,this.search_type=r,this.search_value=s}},hh=class{static{a(this,"SortAttribute")}constructor(t,r){this.attribute=t,this.desc=r}};hb.exports={SearchByConditionsObject:Eh,SearchCondition:fh,SortAttribute:hh}});var gb=m((mie,Rb)=>{"use strict";var fie=mb().SearchByConditionsObject,KY=us(),WY=Xi(),mh=Ji(),Tl=ke(),{Resource:hie}=(es(),se(UE)),Tb=pl(),QY=ch(),zY=require("lodash"),{getSchemaPath:JY}=Ce(),Sb=Ie(),{handleHDBError:XY,hdb_errors:ZY}=W(),{HTTP_STATUS_CODES:jY}=ZY,e1=1e8;Rb.exports=t1;async function t1(e){let t=WY(e,"conditions");if(t)throw XY(t,t.message,jY.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=JY(e.schema,e.table),s=await Sb.openEnvironment(r,e.table),n=global.hdb_schema[e.schema][e.table];for(let l of e.conditions)Sb.openDBI(s,l.search_attribute);let i=zY.sortBy(e.conditions,l=>{if(l.estimated_count===void 0){let _=l.search_type;_===Tl.SEARCH_TYPES.EQUALS?l.estimated_count=mh.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=e1}return l.estimated_count}),o=s.useReadTransaction();o.database=s;let c=await pb(o,e,i[0],n.hash_attribute),u;if(!e.operator||e.operator.toLowerCase()==="and"){let l=s.dbis[n.hash_attribute],_=i.slice(1).map(Tb.filterByType),d=_.length,E=mh.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=>QY.parseRow(f,E))}else{for(let d=1;d<i.length;d++){let E=i[d],f=await pb(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=mh.batchSearchByHash(o,n.hash_attribute,e.get_attributes,c)}return u.onDone=()=>{o.done()},u}a(t1,"lmdbSearchByConditions");async function pb(e,t,r,s){let n=new KY(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,Tb.searchByType(e,n,i,s).map(o=>o.value)}a(pb,"executeConditionSearch")});var Ma=m((pie,Ab)=>{"use strict";var r1=A().OPERATIONS_ENUM,Sh=class{static{a(this,"DeleteObject")}constructor(t,r,s,n=void 0){this.operation=r1.DELETE,this.schema=t,this.table=r,this.hash_values=s,this.__origin=n}};Ab.exports=Sh});var ph=m((Rie,Ub)=>{"use strict";var yb=us(),Ib=Ma(),wb=La(),Cb=Ca(),Gt=A(),Ob=V(),Nb=Ie(),{getTransactionAuditStorePath:s1,getSchemaPath:n1}=Ce(),bb=k();Ub.exports=i1;async function i1(e){try{if(Ob.isEmpty(global.hdb_schema[e.schema])||Ob.isEmpty(global.hdb_schema[e.schema][e.table]))throw new Error(`unknown schema:${e.schema} and table ${e.table}`);await o1(e),await a1(e);let t=n1(e.schema,e.table);try{await Nb.deleteEnvironment(t,e.table)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}try{let r=s1(e.schema,e.table);await Nb.deleteEnvironment(r,e.table,!0)}catch(r){if(r.message==="invalid environment")bb.warn(`cannot delete environment for ${e.schema}.${e.table}, environment not found`);else throw r}}catch(t){throw t}}a(i1,"lmdbDropTable");async function o1(e){let t=new yb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r=Array.from(await wb(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 Ib(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,s);await Cb(n)}a(o1,"deleteAttributesFromSystem");async function a1(e){let t=new yb(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,e.table,void 0,[Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,Gt.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),r,s;try{r=Array.from(await wb(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 Ib(Gt.SYSTEM_SCHEMA_NAME,Gt.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,[s.id]);try{await Cb(n)}catch(i){throw i}}a(a1,"dropTableFromSystem")});var Lb=m((Aie,Db)=>{"use strict";var c1=require("fs-extra"),u1=us(),l1=Zi(),_1=Ma(),d1=ph(),E1=Ca(),f1=lh(),h1=La(),$s=A(),{getSchemaPath:m1}=Ce(),{handleHDBError:S1,hdb_errors:p1}=W(),{HDB_ERROR_MSGS:T1,HTTP_STATUS_CODES:R1}=p1;Db.exports=g1;async function g1(e){let t;try{t=await A1(e.schema);let r=new u1($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME,$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_KEY,t,void 0,[$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),s=Array.from(await h1(r));for(let o=0;o<s.length;o++){let c={schema:t,table:s[o].name};try{await d1(c)}catch(u){if(u.message!=="invalid environment")throw u}}let n=new _1($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[t]);await E1(n);let i=m1(t);await c1.remove(i)}catch(r){throw r}}a(g1,"lmdbDropSchema");async function A1(e){let t=new l1($s.SYSTEM_SCHEMA_NAME,$s.SYSTEM_TABLE_NAMES.SCHEMA_TABLE_NAME,[e],[$s.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_NAME_KEY]),r,s;try{r=Array.from(await f1(t))}catch(n){throw n}for(let[,n]of r)n.name===e&&(s=e);if(!s)throw S1(new Error,T1.SCHEMA_NOT_FOUND(e),R1.NOT_FOUND,void 0,void 0,!0);return s}a(A1,"validateDropSchema")});var Rh=m((Nie,Mb)=>{"use strict";var Th=class{static{a(this,"CreateTableObject")}constructor(t,r,s){this.schema=t,this.table=r,this.hash_attribute=s}};Mb.exports=Th});var vb=m((Iie,Pb)=>{"use strict";var O1=require("fs-extra"),Rl=Ie(),{getTransactionAuditStorePath:N1}=Ce(),gh=ke(),yie=Rh();Pb.exports=b1;async function b1(e){let t;try{let r=N1(e.schema,e.table);await O1.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,gh.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,!1,!0),Rl.createDBI(t,gh.TRANSACTIONS_DBI_NAMES_ENUM.HASH_VALUE,!0,!1),Rl.createDBI(t,gh.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(b1,"createTransactionsAuditEnvironment")});var qb=m((Cie,Fb)=>{"use strict";var Ah=A(),Bb=Ie(),y1=Fi(),{getSystemSchemaPath:I1,getSchemaPath:w1}=Ce(),C1=Yn(),U1=ku(),Oh=xu(),D1=k(),L1=vb(),bh=C1.hdb_table,Hb=[];for(let e=0;e<bh.attributes.length;e++)Hb.push(bh.attributes[e].attribute);Fb.exports=M1;async function M1(e,t){let r=w1(t.schema,t.table),s=new Oh(t.schema,t.table,Ah.TIME_STAMP_NAMES_ENUM.CREATED_TIME,void 0,!0),n=new Oh(t.schema,t.table,Ah.TIME_STAMP_NAMES_ENUM.UPDATED_TIME,void 0,!0),i=new Oh(t.schema,t.table,t.hash_attribute,void 0,!1,!0);try{if(await Bb.createEnvironment(r,t.table),e!==void 0){let o=await Bb.openEnvironment(I1(),Ah.SYSTEM_TABLE_NAMES.TABLE_TABLE_NAME);await y1.insertRecords(o,bh.hash_attribute,Hb,[e]),s.skip_table_check=!0,n.skip_table_check=!0,i.skip_table_check=!0,await Nh(s),await Nh(n),await Nh(i)}await L1(t)}catch(o){throw o}}a(M1,"lmdbCreateTable");async function Nh(e){try{await U1(e)}catch(t){D1.warn(`failed to create attribute ${e.attribute} due to ${t.message}`)}}a(Nh,"createAttribute")});var xb=m((Die,Gb)=>{"use strict";var P1=ha(),v1=Ra(),B1=_l(),Pa=A(),H1=Fi().updateRecords,F1=Ie(),{getSchemaPath:q1}=Ce(),G1=Ia(),x1=k();Gb.exports=k1;async function k1(e){try{let{schema_table:t,attributes:r}=P1(e);v1(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 B1(e.hdb_auth_header,t,r),n=q1(e.schema,e.table),i=await F1.openEnvironment(n,e.table),o=await H1(i,t.hash_attribute,r,e.records,e.__origin?.timestamp);try{await G1(e,o)}catch(c){x1.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(k1,"lmdbUpdateRecords")});var Vb=m((Mie,kb)=>{"use strict";var V1=A().OPERATIONS_ENUM,yh=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=V1.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};kb.exports=yh});var Yb=m((Bie,$b)=>{"use strict";var vie=Vb(),$1=ha(),Y1=Ra(),K1=_l(),va=A(),W1=Fi().upsertRecords,Q1=Ie(),{getSchemaPath:z1}=Ce(),J1=Ia(),X1=k(),{handleHDBError:Z1,hdb_errors:j1}=W();$b.exports=eK;async function eK(e){let t;try{t=$1(e)}catch(u){throw Z1(u,u.message,j1.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}let{schema_table:r,attributes:s}=t;Y1(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 K1(e.hdb_auth_header,r,s),i=z1(e.schema,e.table),o=await Q1.openEnvironment(i,e.table),c=await W1(o,r.hash_attribute,s,e.records,e.__origin?.timestamp);try{await J1(e,c)}catch(u){X1.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(eK,"lmdbUpsertRecords")});var Wb=m((Fie,Kb)=>{"use strict";var Ih=class{static{a(this,"DeleteBeforeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.timestamp=s}};Kb.exports=Ih});var zb=m((Gie,Qb)=>{"use strict";var wh=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}};Qb.exports=wh});var Zb=m((Vie,Xb)=>{"use strict";var Ch=Ie(),{getTransactionAuditStorePath:tK}=Ce(),kie=Wb(),Ba=ke(),rK=V(),Jb=zb(),sK=require("util").promisify,nK=sK(setTimeout),iK=1e4,oK=100;Xb.exports=aK;async function aK(e){let t=tK(e.schema,e.table),r=await Ch.openEnvironment(t,e.table,!0),s=Ch.listDBIs(r);Ch.initializeDBIs(r,Ba.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n,i=new Jb;do n=await cK(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 nK(oK);while(n.transactions_deleted>0);return i}a(aK,"deleteAuditLogsBefore");async function cK(e,t){let r=new Jb;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];rK.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>iK)break}return await n,r}catch(s){throw s}}a(cK,"deleteTransactions")});var ey=m((Yie,jb)=>{"use strict";var Uh=class{static{a(this,"DropAttributeObject")}constructor(t,r,s){this.schema=t,this.table=r,this.attribute=s}};jb.exports=Uh});var ry=m((Qie,ty)=>{"use strict";var uK=us(),lK=Ma(),Wie=ey(),ls=A(),_K=V(),Dh=Ie(),dK=Yn(),EK=La(),fK=Ca(),{getSchemaPath:hK}=Ce();ty.exports=mK;async function mK(e,t=!0){let r;e.schema===ls.SYSTEM_SCHEMA_NAME?r=dK[e.table]:r=global.hdb_schema[e.schema][e.table];let s=await pK(e),n=hK(e.schema,e.table),i=await Dh.openEnvironment(n,e.table);return t===!0&&await SK(e,i,r.hash_attribute),Dh.dropDBI(i,e.attribute),s}a(mK,"lmdbDropAttribute");async function SK(e,t,r){let s=Dh.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(SK,"removeAttributeFromAllObjects");async function pK(e){let t=new uK(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_SCHEMA_TABLE_KEY,`${e.schema}.${e.table}`,void 0,[ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY,ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]),s=Array.from(await EK(t)).filter(o=>o[ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ATTRIBUTE_KEY]===e.attribute);if(_K.isEmptyOrZeroLength(s))throw new Error(`Attribute '${e.attribute}' was not found in '${e.schema}.${e.table}'`);let n=s.map(o=>o[ls.SYSTEM_DEFAULT_ATTRIBUTE_NAMES.ATTR_ID_KEY]),i=new lK(ls.SYSTEM_SCHEMA_NAME,ls.SYSTEM_TABLE_NAMES.ATTRIBUTE_TABLE_NAME,n);return fK(i)}a(pK,"dropAttributeFromSystem")});var cy=m((Xie,ay)=>{"use strict";var Lh=Ie(),ji=ke(),Jie=Bt(),Mh=A(),sy=V(),{getTransactionAuditStorePath:TK}=Ce(),RK=Ji(),gl=Wi(),gK=k();ay.exports=AK;async function AK(e){let t=TK(e.schema,e.table),r=await Lh.openEnvironment(t,e.table,!0),s=Lh.listDBIs(r);Lh.initializeDBIs(r,ji.TRANSACTIONS_DBI_NAMES_ENUM.TIMESTAMP,s);let n;switch(e.search_type){case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.TIMESTAMP:return ny(r,e.search_values);case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.HASH_VALUE:return n=global.hdb_schema[e.schema][e.table].hash_attribute,NK(r,e.search_values,n);case Mh.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:return OK(r,e.search_values);default:return ny(r)}}a(AK,"readAuditLog");function ny(e,t=[0,Date.now()]){sy.isEmpty(t[0])&&(t[0]=0),sy.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 gl,n))}a(ny,"searchTransactionsByTimestamp");function OK(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,oy(e,i))}return Object.fromEntries(r)}a(OK,"searchTransactionsByUsername");function NK(e,t,r){let s=new Map;for(let c=0,u=t.length;c<u;c++){let l=t[c],_=RK.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=oy(e,n),o=new Map;for(let c=0;c<i.length;c++){let u=i[c],l=u.timestamp,_=s.get(l);iy(u,"records",r,_,o),iy(u,"original_records",r,_,o)}return Object.fromEntries(o)}a(NK,"searchTransactionsByHashValues");function iy(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(iy,"loopRecords");function oy(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 gl,i);r.push(o)}}catch(i){gK.warn(i)}return r}catch(s){throw s}}a(oy,"batchSearchTransactions")});var ly=m((toe,uy)=>{"use strict";var{getSchemaPath:jie}=Ce(),eoe=Ie(),{database:bK}=(Ee(),se(be));uy.exports={writeTransaction:yK};async function yK(e,t,r){return bK({database:e,table:t}).transaction(r)}a(yK,"writeTransaction")});var fy=m((soe,Ey)=>{"use strict";var{getSchemaPath:_y}=Ce(),dy=Ie();Ey.exports={flush:IK,resetReadTxn:wK};async function IK(e,t){return(await dy.openEnvironment(_y(e,t),t.toString())).flushed}a(IK,"flush");async function wK(e,t){try{(await dy.openEnvironment(_y(e,t),t.toString())).resetReadTxn()}catch{}}a(wK,"resetReadTxn")});var py=m((ioe,Sy)=>{"use strict";var{Readable:CK}=require("stream"),{getDatabases:UK}=(Ee(),se(be)),{readSync:DK,openSync:LK,createReadStream:hy}=require("fs"),{open:MK}=require("lmdb"),my=Du(),PK=Mu(),{INTERNAL_DBIS_NAME:vK}=ke();Sy.exports=HK;var Ph=32768,BK=100;async function HK(e){let t=e.database||e.schema||"data",r=UK()[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=MK({noSync:!0,maxDbs:PK.MAX_DBS}),E,f=d.openDB(vK,new my(!1)),h=_.useReadTransaction(),T=0;for(let{key:R,value:O}of _.getRange({transaction:h,start:!1}))if(n.some(F=>R.startsWith?.(F+"/"))){f.put(R,O);let[,F]=R.split("/"),$=!F,w=new my(!$,$);w.encoding="binary";let I=d.openDB(R,w),D=_.openDB(R,w);for(let{key:z,version:M,value:ee}of D.getRange({transaction:h,versions:$}))E=I.put(z,ee,M),T++%BK===0&&await new Promise(Ne=>setTimeout(Ne,20))}await E;let p=hy(d.path);return p.headers=u(),p.on("close",()=>{h.done(),d.close()}),p}let o=r[Object.keys(r)[0]].primaryStore,c=LK(o.path);return o.transaction(()=>{let l=Buffer.alloc(Ph);DK(c,l,0,Ph);let _=o.useReadTransaction(),d=hy(null,{fd:c,start:Ph}),E=new CK.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(HK,"getBackup")});var gy=m((aoe,Ry)=>{"use strict";var FK=k(),{handleHDBError:qK}=W(),GK=Fg(),xK=ku(),kK=sh(),VK=LN(),$K=Ca(),YK=lh(),KK=nb(),WK=Eb(),QK=La(),zK=gb(),JK=Lb(),XK=qb(),ZK=xb(),jK=Yb(),eW=Zb(),tW=ph(),rW=ry(),sW=cy(),nW=ly(),Ty=fy(),iW=py(),vh=class extends GK{static{a(this,"LMDBBridge")}async searchByConditions(t){return zK(t)}async getDataByHash(t){return await YK(t)}async searchByHash(t){return await KK(t)}async getDataByValue(t,r){return await WK(t,r)}async searchByValue(t){return await QK(t)}async createSchema(t){return await VK(t)}async dropSchema(t){return await JK(t)}async createTable(t,r){return await XK(t,r)}async dropTable(t){return await tW(t)}async createAttribute(t){return await xK(t)}async createRecords(t){return await kK(t)}async updateRecords(t){return await ZK(t)}async upsertRecords(t){try{return await jK(t)}catch(r){throw qK(r,null,null,FK.ERR,r)}}async deleteRecords(t){return await $K(t)}async dropAttribute(t){return await rW(t)}async deleteAuditLogsBefore(t){return await eW(t)}async readAuditLog(t){return await sW(t)}writeTransaction(t,r,s){return nW.writeTransaction(t,r,s)}flush(t,r){return Ty.flush(t,r)}resetReadTxn(t,r){return Ty.resetReadTxn(t,r)}getBackup(t){return iW(t)}};Ry.exports=vh});var Uy={};je(Uy,{ResourceBridge:()=>Fh});function qh({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 Oy(e,t){let r=_s(e),s=qh(e,r);if(!r)throw new xr.ClientError(`Table ${e.table} not found`);let n;s&&r.attributes.length-s.length>2&&s.length<5&&(n=!0);let i={user:e.hdb_user};return Ke(i,async function*(o){for(let c of e.hash_values){let u=await r.get({id:c,lazy:n,select:s},i);u=u&&Ou(u),t?yield{key:c,value:u}:yield u}})}function _s(e){let t=e.database||e.schema||aW,r=kr()[t];if(!r)throw(0,xr.handleHDBError)(new Error,oW.SCHEMA_NOT_FOUND(t),404);return r[e.table]}function Ny(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*by(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 yy,Al,xr,Iy,wy,Vr,Bh,Hh,Cy,oW,aW,cW,uW,Ay,Fh,Dy=pe(()=>{"use strict";yy=U(gy()),Al=U(Xi()),xr=U(W());Ee();Iy=U(ha()),wy=U(Ra()),Vr=U(A()),Bh=U(ks()),Hh=U(Gr()),Cy=U(V());Vn();Nu();({HDB_ERROR_MSGS:oW}=xr.hdb_errors),aW="data",cW=1e4,uW=10,Fh=class extends yy.default{static{a(this,"ResourceBridge")}constructor(t){super(t),Ay=this}async searchByConditions(t){let r=(0,Al.default)(t,"conditions");if(r)throw(0,xr.handleHDBError)(r,r.message,400,void 0,void 0,!0);let s=_s(t);if(!s)throw new xr.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:qh(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 xr.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 _s(t).addAttributes([{name:t.attribute,indexed:t.indexed??!0}]),`attribute ${t.schema}.${t.table}.${t.attribute} successfully created.`}async dropAttribute(t){let r=_s(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){_s(t).dropTable()}createSchema(t){return Ha({database:t.schema,table:null}),Bh.signalSchemaChange(new Hh.SchemaEventMsg(process.pid,Vr.OPERATIONS_ENUM.CREATE_SCHEMA,t.schema))}async dropSchema(t){await Gh(t.schema),Bh.signalSchemaChange(new Hh.SchemaEventMsg(process.pid,Vr.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,Ay.upsertRecords(t)}async upsertRecords(t){let{schema_table:r,attributes:s}=(0,Iy.default)(t);(0,wy.default)(t,s,r.primaryKey);let n,i=kr()[t.schema][t.table],o={user:t.hdb_user};return Ke(o,async c=>{if(!i.schemaDefined){n=[];for(let _ of s)i.attributes.find(E=>E.name==_)||n.push(_);n.length>0&&await i.addAttributes(n.map(_=>({name:_,indexed:!0})))}let u=[],l=[];for(let _ of t.records){let d=await i.get(_[i.primaryKey],o);if(t.requires_existing&&!d||t.requires_no_existing&&d){l.push(_[i.primaryKey]);continue}d&&(d=Ou(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=kr()[t.schema][t.table],s={user:t.hdb_user};return Ke(s,async n=>{let i=t.hash_values||t.records.map(u=>u[r.primaryKey]),o=[],c=[];for(let u of i)await r.delete(u,s)?o.push(u):c.push(u);return Ny(o,c,n.timestamp)})}async deleteRecordsBefore(t){let r=kr()[t.schema][t.table];if(!r.createdTimeProperty)throw new xr.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:Vr.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,Cy.async_set_timeout)(uW),u=[],n=!0},"chunkDelete");for await(let _ of s)u.push(_[r.primaryKey]),c++,c%cW===0&&await l();return u.length>0&&await l(),n?Ny(i,o,void 0):{message:"No records found to delete"}}searchByHash(t){let r=(0,Al.default)(t,"hashes");if(r)throw r;return Oy(t)}async getDataByHash(t){let r=new Map;t._returnKeyValue=!0;for await(let{key:s,value:n}of Oy(t,!0))r.set(s,n);return r}searchByValue(t,r){if(r&&Vr.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=_s(t);if(!n)throw new xr.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===Vr.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:qh(t,n)})}async getDataByValue(t,r){let s=new Map,n=_s(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){_s({schema:t,table:r})?.primaryStore.resetReadTxn()}async deleteAuditLogsBefore(t){return _s(t).deleteHistory(t.timestamp)}async readAuditLog(t){let r=_s(t),s={};switch(t.search_type){case Vr.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 Vr.READ_AUDIT_LOG_SEARCH_TYPES_ENUM.USERNAME:let n=t.search_values;for await(let i of by(r))n.includes(i.user_name)&&(s[i.user_name]||(s[i.user_name]=[])).push(i);return s;default:return by(r,t.search_values?.[0],t.search_values?.[1])}}};a(qh,"getSelect");a(Oy,"getRecords");a(_s,"getTable");a(Ny,"createDeleteResponse");a(by,"groupRecordsInHistory")});var Fr=m((Eoe,Ly)=>{"use strict";var{ResourceBridge:lW}=(Dy(),se(Uy)),_W=Q();_W.initSync();var Ol;function dW(){return Ol||(Ol=new lW,Ol)}a(dW,"getBridge");Ly.exports=dW()});var By=m((hoe,vy)=>{"use strict";var My=require("lodash"),Fa=require("mathjs"),EW=require("jsonata"),Py=V();vy.exports={distinct_array:e=>Array.isArray(e)&&e.length>1?My.uniqWith(e,My.isEqual):e,searchJSON:fW,mad:qa.bind(null,Fa.mad),mean:qa.bind(null,Fa.mean),mode:qa.bind(null,Fa.mode),prod:qa.bind(null,Fa.prod),median:qa.bind(null,Fa.median)};function qa(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(qa,"aggregateFunction");function fW(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(Py.isEmpty(this.__ala__.res)&&(this.__ala__.res={}),Py.isEmpty(this.__ala__.res[r])){let s=EW(e);this.__ala__.res[r]=s}return this.__ala__.res[r].evaluate(t)}a(fW,"searchJSON")});var Fy=m((Soe,Hy)=>{"use strict";var Qe=require("moment"),xh="YYYY-MM-DDTHH:mm:ss.SSSZZ";Qe.suppressDeprecationWarnings=!0;Hy.exports={current_date:()=>Qe().utc().format("YYYY-MM-DD"),current_time:()=>Qe().utc().format("HH:mm:ss.SSS"),extract:(e,t)=>{switch(t.toLowerCase()){case"year":return Qe(e).utc().format("YYYY");case"month":return Qe(e).utc().format("MM");case"day":return Qe(e).utc().format("DD");case"hour":return Qe(e).utc().format("HH");case"minute":return Qe(e).utc().format("mm");case"second":return Qe(e).utc().format("ss");case"millisecond":return Qe(e).utc().format("SSS");default:break}},date:e=>Qe(e).utc().format(xh),date_format:(e,t)=>Qe(e).utc().format(t),date_add:(e,t,r)=>Qe(e).utc().add(t,r).valueOf(),date_sub:(e,t,r)=>Qe(e).utc().subtract(t,r).valueOf(),date_diff:(e,t,r)=>{let s=Qe(e).utc(),n=Qe(t).utc();return r?s.diff(n,r,!0):s.diff(n)},now:()=>Qe().utc().valueOf(),get_server_time:()=>Qe().format(xh),offset_utc:(e,t)=>Qe(e).utc().utcOffset(t).format(xh)}});var ky=m((poe,xy)=>{"use strict";var hW=require("@turf/area"),mW=require("@turf/length"),SW=require("@turf/circle"),pW=require("@turf/difference"),TW=require("@turf/distance"),RW=require("@turf/boolean-contains"),gW=require("@turf/boolean-equal"),AW=require("@turf/boolean-disjoint"),OW=require("@turf/helpers"),qy=A(),_e=V();xy.exports={geoArea:NW,geoLength:bW,geoCircle:yW,geoDifference:IW,geoDistance:Gy,geoNear:wW,geoContains:CW,geoEqual:UW,geoCrosses:DW,geoConvert:LW};var kh="geo1 is required",Vh="geo2 is required";function NW(e){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),hW.default(e)}a(NW,"geoArea");function bW(e,t){if(_e.isEmpty(e))throw new Error("geoJSON is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),mW.default(e,{units:t||"kilometers"})}a(bW,"geoLength");function yW(e,t,r){if(_e.isEmpty(e))throw new Error("point is required");if(_e.isEmpty(t))throw new Error("radius is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),SW.default(e,t,{units:r||"kilometers"})}a(yW,"geoCircle");function IW(e,t){if(_e.isEmpty(e))throw new Error("poly1 is required");if(_e.isEmpty(t))throw new Error("poly2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),pW(e,t)}a(IW,"geoDifference");function Gy(e,t,r){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),TW.default(e,t,{units:r||"kilometers"})}a(Gy,"geoDistance");function wW(e,t,r,s){if(_e.isEmpty(e))throw new Error("point1 is required");if(_e.isEmpty(t))throw new Error("point2 is required");if(_e.isEmpty(r))throw new Error("distance is required");if(typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),isNaN(r))throw new Error("distance must be a number");return Gy(e,t,s)<=r}a(wW,"geoNear");function CW(e,t){if(_e.isEmpty(e))throw new Error(kh);if(_e.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),RW.default(e,t)}a(CW,"geoContains");function UW(e,t){if(_e.isEmpty(e))throw new Error(kh);if(_e.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),gW.default(e,t)}a(UW,"geoEqual");function DW(e,t){if(_e.isEmpty(e))throw new Error(kh);if(_e.isEmpty(e))throw new Error(Vh);return typeof e=="string"&&(e=_e.autoCastJSON(e)),typeof t=="string"&&(t=_e.autoCastJSON(t)),!AW.default(e,t)}a(DW,"geoCrosses");function LW(e,t,r){if(_e.isEmptyOrZeroLength(e))throw new Error("coordinates is required");if(_e.isEmpty(t))throw new Error("geo_type is required");if(_e.isEmpty(qy.GEO_CONVERSION_ENUM[t]))throw new Error(`geo_type of ${t} is invalid please use one of the following types: ${Object.keys(qy.GEO_CONVERSION_ENUM).join(",")}`);return OW[t](e,r)}a(LW,"geoConvert")});var Nl=m((Roe,Vy)=>{var ii=By(),_r=Fy(),ds=ky();Vy.exports=e=>{e.aggr.mad=e.aggr.MAD=ii.mad,e.aggr.mean=e.aggr.MEAN=ii.mean,e.aggr.mode=e.aggr.MODE=ii.mode,e.aggr.prod=e.aggr.PROD=ii.prod,e.aggr.median=e.aggr.MEDIAN=ii.median,e.fn.distinct_array=e.fn.DISTINCT_ARRAY=ii.distinct_array,e.fn.search_json=e.fn.SEARCH_JSON=ii.searchJSON,e.fn.__ala__=e,e.fn.current_date=e.fn.CURRENT_DATE=_r.current_date,e.fn.current_time=e.fn.CURRENT_TIME=_r.current_time,e.fn.extract=e.fn.EXTRACT=_r.extract,e.fn.date=e.fn.DATE=_r.date,e.fn.date_format=e.fn.DATE_FORMAT=_r.date_format,e.fn.date_add=e.fn.DATE_ADD=_r.date_add,e.fn.date_sub=e.fn.DATE_SUB=_r.date_sub,e.fn.date_diff=e.fn.DATE_DIFF=e.fn.datediff=e.fn.DATEDIFF=_r.date_diff,e.fn.now=e.fn.NOW=_r.now,e.fn.offset_utc=e.fn.OFFSET_UTC=_r.offset_utc,e.fn.get_server_time=e.fn.GET_SERVER_TIME=_r.get_server_time,e.fn.getdate=e.fn.GETDATE=_r.now,e.fn.current_timestamp=e.fn.CURRENT_TIMESTAMP=_r.now,e.fn.geoarea=e.fn.GEOAREA=e.fn.geoArea=ds.geoArea,e.fn.geocircle=e.fn.GEOCIRCLE=e.fn.geoCircle=ds.geoCircle,e.fn.geocontains=e.fn.GEOCONTAINS=e.fn.geoContains=ds.geoContains,e.fn.geoconvert=e.fn.GEOCONVERT=e.fn.geoConvert=ds.geoConvert,e.fn.geocrosses=e.fn.GEOCROSSES=e.fn.geoCrosses=ds.geoCrosses,e.fn.geodifference=e.fn.GEODIFFERENCE=e.fn.geoDifference=ds.geoDifference,e.fn.geodistance=e.fn.GEODISTANCE=e.fn.geoDistance=ds.geoDistance,e.fn.geoequal=e.fn.GEOEQUAL=e.fn.geoEqual=ds.geoEqual,e.fn.geolength=e.fn.GEOLENGTH=e.fn.geoLength=ds.geoLength,e.fn.geonear=e.fn.GEONEAR=e.fn.geoNear=ds.geoNear}});var Wy=m((goe,Ky)=>{"use strict";var Ga=require("lodash"),pt=require("alasql");pt.options.cache=!1;var MW=Nl(),$y=require("clone"),bl=require("recursive-iterator"),ne=k(),ie=V(),eo=Fr(),PW=A(),{hdb_errors:vW}=W(),{getDatabases:Yy}=(Ee(),se(be)),BW="IS NULL",$r="There was a problem performing this search. Please check the logs and try again.";MW(pt);var $h=class{static{a(this,"SQLSearch")}constructor(t,r){if(ie.isEmpty(t))throw ne.error("AST statement for SQL select process cannot be empty"),"statement cannot be null";this.statement=t,this.columns={},this.all_table_attributes=r,this.fetch_attributes=[],this.exact_search_values={},this.comparator_search_values={},this.tables=[],this.data={},this.has_aggregator=!1,this.has_ordinal=!1,this.has_outer_join=!1,this._getColumns(),this._getTables(),this._conditionsToFetchAttributeValues(),this._setAliasesForColumns(),ie.backtickASTSchemaItems(this.statement)}async search(){let t;try{let s=await this._checkEmptySQL();if(!ie.isEmptyOrZeroLength(s))return ne.trace("No results returned from checkEmptySQL SQLSearch method."),s}catch(s){throw ne.error("Error thrown from checkEmptySQL in SQLSearch class method search."),ne.error(s),new Error($r)}try{let s=await this._getFetchAttributeValues();if(s)return s}catch(s){throw ne.error("Error thrown from getFetchAttributeValues in SQLSearch class method search."),ne.error(s),new Error($r)}if(Object.keys(this.data).length===0)return ne.trace('SQLSearch class field: "data" is empty.'),[];let r;try{r=await this._processJoins()}catch(s){throw ne.error("Error thrown from processJoins in SQLSearch class method search."),ne.error(s),new Error($r)}try{await this._getFinalAttributeData(r.existing_attributes,r.joined_length)}catch(s){throw ne.error("Error thrown from getFinalAttributeData in SQLSearch class method search."),ne.error(s),new Error($r)}try{return t=await this._finalSQL(),t}catch(s){throw ne.error("Error thrown from finalSQL in SQLSearch class method search."),ne.error(s),new Error($r)}}_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($y(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=Yy()[r.databaseid][r.tableid].primaryKey,this.data[s].__merged_data={},this.data[s].__merged_attributes=[],this.data[s].__merged_attr_map={}})}_conditionsToFetchAttributeValues(){if(ie.isEmpty(this.statement.where)){ne.trace('AST "where" statement is empty.');return}let t=!1;for(let{node:r}of new bl(this.statement.where))if(r&&r.op&&r.op==="OR"&&(t=!0),!ie.isEmpty(r)&&r.right)if(ie.isNotEmptyAndHasValue(r.right.value)){let s=ie.autoCast(r.right.value);[!0,!1].indexOf(s)>=0?r.right=new pt.yy.LogicValue({value:s}):r.right instanceof pt.yy.StringValue&&!ie.isEmpty(s)&&ie.autoCasterIsNumberCheck(s.toString())&&(r.right=new pt.yy.NumValue({value:s}))}else Array.isArray(r.right)&&r.right.forEach((s,n)=>{let i=ie.autoCast(s.value);[!0,!1].indexOf(i)>=0?r.right[n]=new pt.yy.LogicValue({value:i}):s instanceof pt.yy.StringValue&&ie.autoCasterIsNumberCheck(i.toString())&&(r.right[n]=new pt.yy.NumValue({value:i}))});if(t){ne.trace('Where clause contains "OR", exact match search not performed on attributes.');return}for(let{node:r}of new 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(!ie.isEmpty(PW.VALUE_SEARCH_COMPARATORS_REVERSE_LOOKUP[r.op])){if(ie.isEmpty(this.comparator_search_values[o])&&(this.comparator_search_values[o]={ignore:!1,comparators:[]}),!this.comparator_search_values[o].ignore){if(ie.isEmptyOrZeroLength(r.left.columnid)||ie.isEmptyOrZeroLength(r.right.value)){this.comparator_search_values[o].ignore=!0,this.comparator_search_values[o].comparators=[];continue}this.comparator_search_values[o].comparators.push({attribute:r.left.columnid,operation:r.op,search_value:r.right.value})}continue}if(ie.isEmpty(this.exact_search_values[o])&&(this.exact_search_values[o]={ignore:!1,values:new Set}),!this.exact_search_values[o].ignore){let c=!1;switch(r.op){case"=":!ie.isEmpty(r.right.value)||!ie.isEmpty(r.left.value)?s.add(ie.isEmpty(r.right.value)?r.left.value:r.right.value):c=!0;break;case"IN":let u=Array.isArray(r.right)?r.right:r.left;for(let l=0;l<u.length;l++)if(u[l].value)s.add(u[l].value);else{c=!0;break}break;default:c=!0;break}this.exact_search_values[o].ignore=c,c?this.exact_search_values[o].values=new Set:this.exact_search_values[o].values=new Set([...this.exact_search_values[o].values,...s])}}}_setAliasesForColumns(){if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from)&&ie.isEmptyOrZeroLength(this.columns.columns))return;let t=[],r={};this.statement.columns.forEach((s,n)=>{if(s.columnid==="*"){t.push(n);return}if(s.aggregatorid&&(this.has_aggregator=!0),!s.aggregatorid&&!s.funcid)if(s.as_orig=s.as?s.as:s.columnid,this.statement.joins)if(r[s.as_orig]>=0){let i=r[s.as_orig]+1;s.as=`[${s.as_orig+i}]`,r[s.as_orig]=i}else s.as=`[${s.as_orig}]`,r[s.as_orig]=0;else s.as=`[${s.as_orig}]`;!s.aggregatorid&&s.funcid&&s.args&&(s.as_orig=s.as?s.as:s.toString().replace(/'/g,'"'),s.as=`[${s.as_orig}]`),s.aggregatorid&&s.expression.columnid!=="*"&&(s.as_orig=s.as?s.as:s.expression.tableid?`${s.aggregatorid}(${s.expression.tableid}.${s.expression.columnid})`:`${s.aggregatorid}(${s.expression.columnid})`,s.as=`[${s.as_orig}]`)}),this.statement.columns.length>1&&t.length>0&&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(ie.isEmptyOrZeroLength(r)){let s=this.columns.columns.filter(n=>n.as?t.columnid===n.as:!1);ie.isEmptyOrZeroLength(s)||(r=this.all_table_attributes.filter(n=>n.attribute===s[0].columnid&&s[0].tableid&&s[0].tableid===(n.table.as?n.table.as:n.table.tableid)))}return r[0]}async _checkEmptySQL(){let t=[];if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&!ie.isEmptyOrZeroLength(this.columns.columns))return t;if(ie.isEmptyOrZeroLength(this.all_table_attributes)&&ie.isEmptyOrZeroLength(this.statement.from))try{let r=this._buildSQL(!1);t=await pt.promise(r)}catch(r){throw ne.error("Error thrown from AlaSQL in SQLSearch class method checkEmptySQL."),ne.error(r),new Error("There was a problem with the SQL statement")}return t}_addFetchColumns(t){t&&t.length>0&&t.forEach(r=>{let s=this._findColumn(r);s&&this.fetch_attributes.push($y(s))})}_addColumnToMergedAttributes(t,r){this.data[t].__merged_attributes.push(r),this.data[t].__merged_attr_map[r]=this.data[t].__merged_attributes.length-1}_setMergedHashAttribute(t,r){this.data[t].__merged_data[r].splice(0,1,r)}_updateMergedAttribute(t,r,s,n){let i=this.data[t].__merged_attr_map[s];this.data[t].__merged_data[r].splice(i,1,n)}async _getFetchAttributeValues(){if(ie.isEmptyOrZeroLength(Object.keys(this.columns)))return[];this._addFetchColumns(this.columns.joins);let t=null;try{t=this.statement.where?this.statement.where.toString():""}catch{throw new Error("Could not generate proper where clause")}this.columns.where&&this._addFetchColumns(this.columns.where);let r=this._isSimpleSelect();if(r?this._addFetchColumns(this.columns.columns):(!this.columns.where&&this.fetch_attributes.length===0)|t.indexOf(BW)>-1&&this.tables.forEach(n=>{let i={columnid:Yy()[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),!ie.isEmpty(this.exact_search_values[l])&&!this.exact_search_values[l].ignore&&!ie.isEmptyOrZeroLength(this.exact_search_values[l].values))if(u)try{c.hash_values=Array.from(this.exact_search_values[l].values);let _=await 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 ne.error("Error thrown from getDataByHash function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error($r)}else try{c.search_attribute=n.attribute,await Promise.all(Array.from(this.exact_search_values[l].values).map(async _=>{let d=Object.assign({},c);d.search_value=_;let E=await 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,ie.autoCast(f)))}))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues exact match."),ne.error(_),new Error($r)}else if(!ie.isEmpty(this.comparator_search_values[l])&&!this.comparator_search_values[l].ignore&&!ie.isEmptyOrZeroLength(this.comparator_search_values[l].comparators))try{let _=this.comparator_search_values[l].comparators;for(let d=0,E=_.length;d<E;d++){let f=_[d];c.search_attribute=f.attribute,c.search_value=f.search_value;let h=await 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,ie.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,ie.autoCast(T)))}}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues comparator search values."),ne.error(_),new Error($r)}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,ie.autoCast(d)));else for(let[d,E]of _)this.data[i].__merged_data[d]?this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]):(this.data[i].__merged_data[d]=[...s[i]],this._updateMergedAttribute(i,d,n.attribute,E[n.attribute]),this._setMergedHashAttribute(i,ie.autoCast(d)))}catch(_){throw ne.error("Error thrown from getDataByValue function in SQLSearch class method getFetchAttributeValues no comparator search values."),ne.error(_),new Error($r)}}}_isSimpleSelect(){let t=!0;return Object.keys(this.statement).length!==2||!this.statement.columns||!this.statement.from||this.statement.from.length!==1?(t=!1,t):(this.statement.columns.forEach(r=>{r instanceof 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 ne.error("Error thrown from AlaSQL in SQLSearch class method processJoins."),ne.error(f),new Error("There was a problem processing the data.")}if(E&&E.length>0){for(let f=0,h=E.length;f<h;f++){let 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=Ga.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 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 ne.error("Error thrown from getData in SQLSearch class method getFinalAttributeData."),ne.error(i),new Error($r)}}async _getData(t){try{let r=t.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]?s[i].columns.push(n.attribute):s[i]={schema:n.table.databaseid,table:n.table.tableid,columns:[n.attribute]},s},{});for(let s in r){let n=r[s],i=this.data[s].__merged_data,o=[];for(let _ in i)o.push(i[_][0]);this.data[s].__merged_attributes.push(...n.columns);let c={schema:n.schema,table:n.table,hash_values:o,get_attributes:n.columns},u=await 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 ne.error("Error thrown from getDataByHash function in SQLSearch class method getData."),ne.error(r),r}}async _finalSQL(){let t=[],r=this.statement.from[0];t.push(Object.values(this.data[`${r.databaseid_orig}_${r.as?r.as_orig:r.tableid_orig}`].__merged_data)),r.as=r.as?r.as:r.tableid,r.databaseid="",r.tableid="?",this.statement.joins&&this.statement.joins.forEach(n=>{n.as=n.as?n.as:n.table.tableid,t.push(Object.values(this.data[`${n.table.databaseid_orig}_${n.table.as?n.table.as_orig:n.table.tableid_orig}`].__merged_data)),n.table.databaseid="",n.table.tableid="?"}),this.statement.order&&this.statement.order.forEach(n=>{if(n.is_ordinal)return;this.statement.columns.filter(o=>{let c=o.aggregatorid?o.expression:o,u=o.aggregatorid?o.as_orig:c.as_orig;return n.expression.tableid?c.columnid_orig===n.expression.columnid_orig&&c.tableid_orig===n.expression.tableid_orig:c.columnid_orig===n.expression.columnid_orig||n.expression.columnid_orig===u}).length===0&&(n.expression.columnid=n.initial_select_column.columnid)}),!this.has_aggregator&&!this.statement.group&&!this.has_ordinal&&(this.statement.limit&&delete this.statement.limit,this.statement.offset&&delete this.statement.offset);let s;try{let n=this._buildSQL();ne.trace(`Final SQL: ${n}`),s=await pt.promise(n,t),this.has_outer_join&&(s=this._translateUndefinedValues(s)),ne.trace(`Final AlaSQL results data included ${s.length} rows`)}catch(n){throw ne.error("Error thrown from AlaSQL in SQLSearch class method finalSQL."),ne.error(n),new Error("There was a problem running the generated sql.")}return s}_translateUndefinedValues(t){try{let r=[];for(let s of t){let n=Object.create(null);Object.keys(s).forEach(i=>{s[i]===void 0?n[i]=null:n[i]=s[i]}),r.push(n)}return r}catch(r){return ne.error(vW.HDB_ERROR_MSGS.OUTER_JOIN_TRANSLATION_ERROR),ne.trace(r.stack),t}}_buildSQL(t=!0){let r=this.statement.toString();return this.statement.columns.forEach(s=>{if(s.funcid&&s.as){let n=s.toString().replace(" AS "+s.as,"");r=r.replace(s.toString(),n)}}),t===!0?this._convertColumnsToIndexes(r,this.tables):r}_convertColumnsToIndexes(t,r){let s=t,n={};r.forEach(i=>{i.databaseid_orig?n[`${i.databaseid_orig}_${i.as?i.as_orig:i.tableid_orig}`]=i.as?i.as:i.tableid:n[`${i.databaseid}_${i.as?i.as:i.tableid}`]=`\`${i.as?i.as:i.tableid}\``});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=n[i],l=new RegExp(`${u}.\`${o}\``,"g"),_=`${u}.[${c}]`;s=s.replace(l,_)});for(let i in this.data)this.data[i].__merged_attributes.forEach((o,c)=>{let u=new RegExp(`\`${o}\``,"g"),l=`[${c}]`;s=s.replace(u,l)});return s}async _simpleSQLQuery(){let t=this.statement.columns.reduce((s,n)=>(n.as_orig&&n.as_orig!=n.columnid_orig?s[n.columnid_orig]=n.as_orig:s[n.columnid_orig]||(s[n.columnid_orig]=n.columnid_orig),s),{}),r=this.fetch_attributes.reduce((s,n)=>{let i=`${n.table.databaseid}_${n.table.as?n.table.as:n.table.tableid}`;return s[i]||(s[i]={}),s[i][t[n.attribute]]=null,s},{});for(let s of this.fetch_attributes){let n=`${s.table.databaseid}_${s.table.as?s.table.as:s.table.tableid}`,i={schema:s.table.databaseid,table:s.table.tableid,get_attributes:[s.attribute]};try{i.search_attribute=s.attribute,i.search_value="*";let o=await 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 ne.error("There was an error when processing this SQL operation. Check your logs"),ne.error(o),new Error($r)}}return Object.values(Object.values(this.data)[0].__merged_data)}};Ky.exports=$h});var Or=m((Ooe,Qy)=>{"use strict";var HW=Bg();Qy.exports={searchByConditions:qW,searchByHash:GW,searchByValue:xW,search:kW};var Yh=Fr(),{transformReq:Kh}=V(),FW=Wy();async function qW(e){return Kh(e),Yh.searchByConditions(e)}a(qW,"searchByConditions");async function GW(e){Kh(e),e.ids&&(e.hash_values=e.ids);let t=[];for await(let r of Yh.searchByHash(e))r&&t.push(r);return t}a(GW,"searchByHash");async function xW(e){Kh(e),e.hasOwnProperty("desc")===!0&&(e.reverse=e.desc);let t=[];for await(let r of Yh.searchByValue(e))t.push(r);return t}a(xW,"searchByValue");function kW(e,t){try{let r=new HW(e);r.validate(),new FW(r.statement,r.attributes).search().then(n=>{t(null,n)}).catch(n=>{t(n,null)})}catch(r){return t(r)}}a(kW,"search")});var yl=m((boe,zy)=>{"use strict";var VW=Fr();zy.exports={writeTransaction:$W};function $W(e,t,r){return VW.writeTransaction(e,t,r)}a($W,"writeTransaction")});var jy=m((woe,Zy)=>{"use strict";var YW=Or(),KW=fn(),Jy=k(),WW=Nr(),Ioe=yl(),QW=require("clone"),Qh=require("alasql"),zW=Nl(),Xy=require("util"),JW=Xy.promisify(KW.getTableSchema),XW=Xy.promisify(YW.search),ZW=A(),Wh=V();zW(Qh);Zy.exports={update:eQ};var jW="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 JW(e.table.databaseid,e.table.tableid),s=tQ(e.columns);Wh.backtickASTSchemaItems(e);let{table:n,where:i}=e,o=QW(n),c=Wh.isEmpty(i)?"":` WHERE ${i.toString()}`,u=`SELECT ${r.hash_attribute} FROM ${n.toString()} ${c}`,l=Qh.parse(u).statements[0],_=await XW(l),d=rQ(s,_);return sQ(o,d,t)}a(eQ,"update");function tQ(e){try{let t={};return e.forEach(r=>{"value"in r.expression?t[r.column.columnid]=r.expression.value??null:t[r.column.columnid]=Qh.compile(`SELECT ${r.expression.toString()} AS [${ZW.FUNC_VAL}] FROM ?`)}),t}catch(t){throw Jy.error(t),new Error(jW)}}a(tQ,"createUpdateRecord");function rQ(e,t){return Wh.isEmptyOrZeroLength(t)?[]:t.map(r=>Object.assign(r,e))}a(rQ,"buildUpdateRecords");async function sQ(e,t,r){let s={operation:"update",schema:e.databaseid_orig,table:e.tableid_orig,records:t,hdb_user:r},n=await WW.update(s);try{delete n.new_attributes,delete n.txn_time}catch(i){Jy.error(`Error delete new_attributes from update response: ${i}`)}return n}a(sQ,"updateRecords")});var tI=m((Loe,eI)=>{var nQ=require("alasql"),iQ=Or(),oQ=k(),aQ=Fr(),Jh=require("util"),zh=V(),cQ=A(),uQ=fn(),Uoe=yl(),Doe=Nr(),lQ="record",_Q="successfully deleted",dQ=Jh.callbackify(mQ),EQ=Jh.promisify(iQ.search),fQ=Jh.promisify(uQ.getTableSchema);eI.exports={convertDelete:dQ};function hQ(e){return`${e.deleted_hashes.length} ${lQ}${e.deleted_hashes.length===1?"":"s"} ${_Q}`}a(hQ,"generateReturnMessage");async function mQ({statement:e,hdb_user:t}){let r=await fQ(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=nQ.parse(o).statements[0],u={operation:cQ.OPERATIONS_ENUM.DELETE,schema:s.databaseid_orig,table:s.tableid_orig,hdb_user:t};try{u.records=await EQ(c);let l=await aQ.deleteRecords(u);return zh.isEmptyOrZeroLength(l.message)&&(l.message=hQ(l)),delete l.txn_time,l}catch(l){throw oQ.error(l),l.hdb_code?l.message:l}}a(mQ,"convertDelete")});var oI=m((Poe,iI)=>{"use strict";var SQ=Wn(),{hdb_errors:rI}=W(),{getDatabases:sI}=(Ee(),se(be));iI.exports={checkSchemaExists:nI,checkSchemaTableExists:pQ,schema_describe:SQ};async function nI(e){if(!sI()[e])return rI.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(nI,"checkSchemaExists");async function pQ(e,t){let r=await nI(e);if(r)return r;if(!sI()[e][t])return rI.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(pQ,"checkSchemaTableExists")});var Ul=m((Hoe,lI)=>{"use strict";var to=Gu(),ro=oI(),TQ=k(),RQ=require("uuid").v4,Boe=require("clone"),wl=ks(),so=A(),gQ=require("util"),An=Fr(),{handleHDBError:xt,hdb_errors:AQ}=W(),{HDB_ERROR_MSGS:Il,HTTP_STATUS_CODES:kt}=AQ,{SchemaEventMsg:Cl}=Gr(),aI=nt(),{getDatabases:OQ}=(Ee(),se(be)),{transformReq:no}=V();lI.exports={createSchema:NQ,createSchemaStructure:cI,createTable:bQ,createTableStructure:uI,createAttribute:UQ,dropSchema:yQ,dropTable:IQ,dropAttribute:wQ,getBackup:DQ};async function NQ(e){let t=await cI(e);return wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),t}a(NQ,"createSchema");async function cI(e){let t=to.schema_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(no(e),!await ro.checkSchemaExists(e.schema))throw xt(new Error,Il.SCHEMA_EXISTS_ERR(e.schema),kt.BAD_REQUEST,so.LOG_LEVELS.ERROR,Il.SCHEMA_EXISTS_ERR(e.schema),!0);return await An.createSchema(e),`database '${e.schema}' successfully created`}a(cI,"createSchemaStructure");async function bQ(e){return no(e),await uI(e)}a(bQ,"createTable");async function uI(e){let t=to.create_table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);if(to.validateTableResidence(e.residence),!await ro.checkSchemaTableExists(e.schema,e.table))throw xt(new Error,Il.TABLE_EXISTS_ERR(e.schema,e.table),kt.BAD_REQUEST,so.LOG_LEVELS.ERROR,Il.TABLE_EXISTS_ERR(e.schema,e.table),!0);let s={name:e.table,schema:e.schema,id:RQ(),hash_attribute:e.hash_attribute};try{if(e.residence)if(global.clustering_on)s.residence=e.residence,await An.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 An.createTable(s,e);return`table '${e.schema}.${e.table}' successfully created.`}catch(n){throw n}}a(uI,"createTableStructure");async function yQ(e){let t=!e.schema&&!e.database?new Error("database is required"):void 0,r=to.schema_object(e),s=t??r;if(s)throw xt(s,s.message,kt.BAD_REQUEST,void 0,void 0,!0);no(e);let n=await ro.checkSchemaExists(e.schema);if(n)throw xt(new Error,n,kt.NOT_FOUND,so.LOG_LEVELS.ERROR,n,!0);let i=await ro.schema_describe.describeSchema({schema:e.schema}),o=Object.keys(global.hdb_schema[e.schema]);return await An.dropSchema(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema)),await aI.purgeSchemaTableStreams(e.schema,o),`successfully deleted '${e.schema}'`}a(yQ,"dropSchema");async function IQ(e){let t=to.table_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);no(e);let r=await ro.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,so.LOG_LEVELS.ERROR,r,!0);return await An.dropTable(e),await aI.purgeTableStream(e.schema,e.table),`successfully deleted table '${e.schema}.${e.table}'`}a(IQ,"dropTable");async function wQ(e){let t=to.attribute_object(e);if(t)throw xt(t,t.message,kt.BAD_REQUEST,void 0,void 0,!0);no(e);let r=await ro.checkSchemaTableExists(e.schema,e.table);if(r)throw xt(new Error,r,kt.NOT_FOUND,so.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(so.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 An.dropAttribute(e),CQ(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`successfully deleted attribute '${e.attribute}'`}catch(s){throw TQ.error(`Got an error deleting attribute ${gQ.inspect(e)}.`),s}}a(wQ,"dropAttribute");function CQ(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(CQ,"dropAttributeFromGlobal");async function UQ(e){no(e);let t=OQ()[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 An.createAttribute(e),wl.signalSchemaChange(new Cl(process.pid,e.operation,e.schema,e.table,e.attribute)),`attribute '${e.schema}.${e.table}.${e.attribute}' successfully created.`}a(UQ,"createAttribute");function DQ(e){return An.getBackup(e)}a(DQ,"getBackup")});var dI=m((qoe,_I)=>{"use strict";var{OPERATIONS_ENUM:LQ}=A(),Xh=class{static{a(this,"ReadAuditLogObject")}constructor(t,r,s=void 0,n=void 0){this.operation=LQ.READ_AUDIT_LOG,this.schema=t,this.table=r,this.search_type=s,this.search_values=n}};_I.exports=Xh});var Zh=m((koe,SI)=>{"use strict";var MQ=Fr(),xoe=dI(),Dl=V(),Ll=A(),PQ=Q(),{handleHDBError:EI,hdb_errors:vQ}=W(),{HDB_ERROR_MSGS:fI,HTTP_STATUS_CODES:hI}=vQ,BQ=Object.values(Ll.READ_AUDIT_LOG_SEARCH_TYPES_ENUM),mI="To use this operation audit log must be enabled in harperdb-config.yaml";SI.exports=HQ;async function HQ(e){if(Dl.isEmpty(e.schema))throw new Error(fI.SCHEMA_REQUIRED_ERR);if(Dl.isEmpty(e.table))throw new Error(fI.TABLE_REQUIRED_ERR);if(!PQ.get(Ll.CONFIG_PARAMS.LOGGING_AUDITLOG))throw EI(new Error,mI,hI.BAD_REQUEST,Ll.LOG_LEVELS.ERROR,mI,!0);let t=Dl.checkSchemaTableExist(e.schema,e.table);if(t)throw EI(new Error,t,hI.NOT_FOUND,Ll.LOG_LEVELS.ERROR,t,!0);if(!Dl.isEmpty(e.search_type)&&BQ.indexOf(e.search_type)<0)throw new Error(`Invalid search_type '${e.search_type}'`);return await MQ.readAuditLog(e)}a(HQ,"readAuditLog")});var TI=m(($oe,pI)=>{"use strict";var{OPERATIONS_ENUM:FQ}=A(),jh=class{static{a(this,"GetBackupObject")}constructor(t,r,s=void 0,n=void 0){this.operation=FQ.GET_BACKUP,this.schema=t,this.table=r}};pI.exports=jh});var AI=m((Qoe,gI)=>{"use strict";var qQ=Fr(),Koe=TI(),em=V(),GQ=A(),Woe=Q(),{handleHDBError:xQ,hdb_errors:kQ}=W(),{HDB_ERROR_MSGS:RI,HTTP_STATUS_CODES:VQ}=kQ;gI.exports=$Q;async function $Q(e){if(em.isEmpty(e.schema))throw new Error(RI.SCHEMA_REQUIRED_ERR);if(em.isEmpty(e.table))throw new Error(RI.TABLE_REQUIRED_ERR);let t=em.checkSchemaTableExist(e.schema,e.table);if(t)throw xQ(new Error,t,VQ.NOT_FOUND,GQ.LOG_LEVELS.ERROR,t,!0);return await qQ.getBackup(read_audit_log_object)}a($Q,"getBackup")});var wI=m((Joe,II)=>{var On=require("validate.js"),NI=Be(),io=A(),{handleHDBError:YQ,hdb_errors:KQ}=W(),{HDB_ERROR_MSGS:$e,HTTP_STATUS_CODES:WQ}=KQ,tm=a(()=>({role:{presence:!0,format:"[\\w\\-\\_]+"},id:{presence:!0,format:"[\\w\\-\\_]+"},permission:{presence:!0}}),"constraintsTemplate"),QQ={STRUCTURE_USER:"structure_user"},OI=Object.values(io.ROLE_TYPES_ENUM),zQ="attribute_permissions",JQ="attribute_name",{PERMS_CRUD_ENUM:oo}=io,XQ=[zQ,...Object.values(oo)],bI=[oo.READ,oo.INSERT,oo.UPDATE],ZQ=[JQ,...bI];function jQ(e){let t=tm();return t.role.presence=!0,t.id.presence=!1,t.permission.presence=!0,yI(e,t)}a(jQ,"addRoleValidation");function ez(e){let t=tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!0,yI(e,t)}a(ez,"alterRoleValidation");function tz(e){let t=tm();return t.role.presence=!1,t.id.presence=!0,t.permission.presence=!1,NI.validateObject(e,t)}a(tz,"dropRoleValidation");var rz=["operation","role","id","permission","hdb_user","hdb_auth_header"];function yI(e,t){let r={main_permissions:[],schema_permissions:{}},s=Object.keys(e),n=[];for(let o=0,c=s.length;o<c;o++)rz.includes(s[o])||n.push(s[o]);n.length>0&&ze($e.INVALID_ROLE_JSON_KEYS(n),r);let i=NI.validateObject(e,t);if(i&&i.message.split(",").forEach(o=>{ze(o,r)}),e.permission){let o=sz(e);o&&ze(o,r),OI.forEach(c=>{e.permission[c]&&!On.isBoolean(e.permission[c])&&ze($e.SU_CU_ROLE_BOOLEAN_ERROR(c),r)})}for(let o in e.permission)if(OI.indexOf(o)<0){if(o===QQ.STRUCTURE_USER){let u=e.permission[o];if(typeof u=="boolean")continue;if(Array.isArray(u)){for(let l=0,_=u.length;l<_;l++){let d=u[l];global.hdb_schema[d]||ze($e.SCHEMA_NOT_FOUND(d),r)}continue}ze($e.STRUCTURE_USER_ROLE_TYPE_ERROR(o),r);continue}let c=e.permission[o];if(!o||!global.hdb_schema[o]){ze($e.SCHEMA_NOT_FOUND(o),r);continue}if(c.tables)for(let u in c.tables){let l=c.tables[u];if(!u||!global.hdb_schema[o][u]){ze($e.TABLE_NOT_FOUND(o,u),r);continue}if(Object.keys(l).forEach(_=>{XQ.includes(_)||ze($e.INVALID_PERM_KEY(_),r,o,u)}),Object.values(oo).forEach(_=>{On.isDefined(l[_])?On.isBoolean(l[_])||ze($e.TABLE_PERM_NOT_BOOLEAN(_),r,o,u):ze($e.TABLE_PERM_MISSING(_),r,o,u)}),On.isDefined(l.attribute_permissions)){if(!On.isArray(l.attribute_permissions)){ze($e.ATTR_PERMS_NOT_ARRAY,r,o,u);continue}}else{ze($e.ATTR_PERMS_ARRAY_MISSING,r,o,u);continue}if(l.attribute_permissions){let _=global.hdb_schema[o][u].attributes.map(({attribute:E})=>E),d={read:!1,insert:!1,update:!1};for(let E in l.attribute_permissions){let f=l.attribute_permissions[E];if(Object.keys(f).forEach(T=>{!ZQ.includes(T)&&T!==oo.DELETE&&ze($e.INVALID_ATTR_PERM_KEY(T),r,o,u)}),!On.isDefined(f.attribute_name)){ze($e.ATTR_PERM_MISSING_NAME,r,o,u);continue}let h=f.attribute_name;if(!_.includes(h)){ze($e.INVALID_ATTRIBUTE_IN_PERMS(h),r,o,u);continue}bI.forEach(T=>{On.isDefined(f[T])?On.isBoolean(f[T])||ze($e.ATTR_PERM_NOT_BOOLEAN(T,h),r,o,u):ze($e.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($e.MISMATCHED_TABLE_ATTR_PERMS(E),r,o,u)}}}}return nz(r)}a(yI,"customValidate");II.exports={addRoleValidation:jQ,alterRoleValidation:ez,dropRoleValidation:tz};function sz(e){let{operation:t,permission:r}=e;if(t===io.OPERATIONS_ENUM.ADD_ROLE||t===io.OPERATIONS_ENUM.ALTER_ROLE){let s=r.super_user===!0,n=r.cluster_user===!0;if(Object.keys(r).length>1&&(s||n)){if(n&&s)return $e.SU_CU_ROLE_COMBINED_ERROR;{let o=r.super_user?io.ROLE_TYPES_ENUM.SUPER_USER:io.ROLE_TYPES_ENUM.CLUSTER_USER;return $e.SU_CU_ROLE_NO_PERMS_ALLOWED(o)}}}return null}a(sz,"validateNoSUPerms");function nz(e){let{main_permissions:t,schema_permissions:r}=e;if(t.length>0||Object.keys(r).length>0){let s={error:$e.ROLE_PERMS_ERROR,...e};return YQ(new Error,s,WQ.BAD_REQUEST)}else return null}a(nz,"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 am=m((Zoe,LI)=>{"use strict";var CI=Nr(),UI=Or(),iz=Zn(),sm=wI(),nm=ks(),oz=require("uuid").v4,az=require("util"),Ml=A(),cz=V(),im=UI.searchByValue,uz=UI.searchByHash,lz=az.promisify(iz.delete),_z=us(),dz=Zi(),{hdb_errors:Ez,handleHDBError:ao}=W(),{HDB_ERROR_MSGS:DI,HTTP_STATUS_CODES:Pl}=Ez,{UserEventMsg:om}=Gr();LI.exports={addRole:fz,alterRole:hz,dropRole:mz,listRoles:Sz};function rm(e){try{e.hdb_auth_header&&delete e.hdb_auth_header,e.HDB_INTERNAL_PATH&&delete e.HDB_INTERNAL_PATH,e.operation&&delete e.operation,e.hdb_user&&delete e.hdb_user}catch{}return e}a(rm,"scrubRoleDetails");async function fz(e){let t=sm.addRoleValidation(e);if(t)throw t;e=rm(e);let r={schema:"system",table:"hdb_role",search_attribute:"role",search_value:e.role,hash_attribute:"id",get_attributes:["*"]},s;try{s=Array.from(await im(r)||[])}catch(i){throw ao(i)}if(s&&s.length>0)throw ao(new Error,DI.ROLE_ALREADY_EXISTS(e.role),Pl.CONFLICT,void 0,void 0,!0);e.id||(e.id=oz());let n={operation:"insert",schema:"system",table:"hdb_role",hash_attribute:"id",records:[e]};return await CI.insert(n),nm.signalUserChange(new om(process.pid)),e=rm(e),e}a(fz,"addRole");async function hz(e){let t=sm.alterRoleValidation(e);if(t)throw t;e=rm(e);let r={operation:"update",schema:"system",table:"hdb_role",records:[e]},s;try{s=await CI.update(r)}catch(n){throw ao(n)}if(s&&s?.message==="updated 0 of 1 records")throw ao(new Error,"Invalid role id",Pl.BAD_REQUEST,void 0,void 0,!0);return await nm.signalUserChange(new om(process.pid)),e}a(hz,"alterRole");async function mz(e){let t=sm.dropRoleValidation(e);if(t)throw ao(new Error,t,Pl.BAD_REQUEST,void 0,void 0,!0);let r=new dz(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,[e.id],["role"]),s=Array.from(await uz(r));if(s.length===0)throw ao(new Error,DI.ROLE_NOT_FOUND,Pl.NOT_FOUND,void 0,void 0,!0);let n=new _z(Ml.SYSTEM_SCHEMA_NAME,Ml.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,"role",e.id,void 0,["username","active"]),i=Array.from(await im(n)),o=!1;if(cz.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 lz(c),nm.signalUserChange(new om(process.pid)),`${s[0].role} successfully deleted`}a(mz,"dropRole");async function Sz(){return im({table:"hdb_role",schema:"system",hash_attribute:"id",search_attribute:"id",search_value:"*",get_attributes:["*"]})}a(Sz,"listRoles")});var BI=m((eae,vI)=>{"use strict";var pz=Q(),Nn=require("joi"),Tz=Be(),MI=require("moment"),Rz=require("fs-extra"),cm=require("path"),gz=require("lodash"),xa=A(),{LOG_LEVELS:oi}=A(),Az="YYYY-MM-DD hh:mm:ss",Oz=cm.resolve(__dirname,"../logs");vI.exports=function(e){return Tz.validateBySchema(e,Nz)};var Nz=Nn.object({from:Nn.custom(PI),until:Nn.custom(PI),level:Nn.valid(oi.NOTIFY,oi.FATAL,oi.ERROR,oi.WARN,oi.INFO,oi.DEBUG,oi.TRACE),order:Nn.valid("asc","desc"),limit:Nn.number().min(1),start:Nn.number().min(0),log_name:Nn.custom(bz)});function PI(e,t){if(MI(e,MI.ISO_8601).format(Az)==="Invalid date")return t.message(`'${t.state.path[0]}' date '${e}' is invalid.`)}a(PI,"validateDatetime");function bz(e,t){if(gz.invert(xa.LOG_NAMES)[e]===void 0)return t.message(`'log_name' '${e}' is invalid.`);let s=pz.get(xa.HDB_SETTINGS_NAMES.LOG_PATH_KEY),n=e===void 0?xa.LOG_NAMES.HDB:e,i=n===xa.LOG_NAMES.INSTALL?cm.join(Oz,xa.LOG_NAMES.INSTALL):cm.join(s,n);return Rz.existsSync(i)?null:t.message(`'log_name' '${e}' does not exist.`)}a(bz,"validateReadLogPath")});var lm=m((rae,FI)=>{"use strict";var vl=A(),yz=k(),Iz=Q(),wz=BI(),um=require("path"),HI=require("fs-extra"),{once:Cz}=require("events"),{handleHDBError:Uz,hdb_errors:Dz}=W(),{PACKAGE_ROOT:Lz}=A(),Mz=um.join(Lz,"logs"),Pz=1e3,vz=200;FI.exports=Bz;async function Bz(e){let t=wz(e);if(t)throw Uz(t,t.message,Dz.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0);let r=Iz.get(vl.HDB_SETTINGS_NAMES.LOG_PATH_KEY),s=e.log_name===void 0?vl.LOG_NAMES.HDB:e.log_name,n=s===vl.LOG_NAMES.INSTALL?um.join(Mz,vl.LOG_NAMES.INSTALL):um.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?Pz: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(HI.statSync(n).size-(h+5)*vz,0));let p=HI.createReadStream(n,{start:T});p.on("error",I=>{yz.error(I)});let R=0,O=[],F="",$;p.on("data",I=>{let D=/(?:^|\n)(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:[\d\.]+Z) \[(.+?)]: /g;I=F+I;let z=0,M;for(;(M=D.exec(I))&&!p.destroyed;){$&&($.message=I.slice(z,M.index),w($));let[ee,Ne,Lt]=M,rr=Lt.split("] ["),Zr=rr[0],Is=rr[1];rr.splice(0,2),$={timestamp:Ne,thread:Zr,level:Is,tags:rr,message:""},z=M.index+ee.length}F=I.slice(z)}),p.on("end",I=>{p.destroyed||$&&($.message=F.trim(),w($))}),p.resume();function w(I){let D,z,M;switch(!0){case(i&&c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),I.level===o&&D>=z&&D<=M&&R<f?R++:I.level===o&&D>=z&&D<=M&&(bn(I,E,O),R++,R===h&&p.destroy());break;case(i&&c):D=new Date(I.timestamp),z=new Date(u),I.level===o&&D>=z&&R<f?R++:I.level===o&&D>=z&&(bn(I,E,O),R++,R===h&&p.destroy());break;case(i&&l):D=new Date(I.timestamp),M=new Date(_),I.level===o&&D<=M&&R<f?R++:I.level===o&&D<=M&&(bn(I,E,O),R++,R===h&&p.destroy());break;case(c&&l):D=new Date(I.timestamp),z=new Date(u),M=new Date(_),D>=z&&D<=M&&R<f?R++:D>=z&&D<=M&&(bn(I,E,O),R++,R===h&&p.destroy());break;case i:I.level===o&&R<f?R++:I.level===o&&(bn(I,E,O),R++,R===h&&p.destroy());break;case c:D=new Date(I.timestamp),z=new Date(u),D>=z&&R<f?R++:D>=z&&R>=f&&(bn(I,E,O),R++,R===h&&p.destroy());break;case l:D=new Date(I.timestamp),M=new Date(_),D<=M&&R<f?R++:D<=M&&R>=f&&(bn(I,E,O),R++,R===h&&p.destroy());break;default:R<f?R++:(bn(I,E,O),R++,R===h&&p.destroy())}}return a(w,"onLogMessage"),await Cz(p,"close"),O}a(Bz,"readLog");function bn(e,t,r){t==="desc"?Hz(e,r):t==="asc"?Fz(e,r):r.push(e)}a(bn,"pushLineToResult");function Hz(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(Hz,"insertDescending");function Fz(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(Fz,"insertAscending")});var Hl=m((aae,kI)=>{"use strict";var _m=require("joi"),{string:Bl,boolean:qI,date:qz}=_m.types(),Gz=Be(),{validateSchemaExists:nae,validateTableExists:iae,validateSchemaName:oae}=is(),xz=A(),kz=He(),GI=Q();GI.initSync();var Vz=Bl.invalid(GI.get(xz.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(kz.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(),xI={operation:Bl.valid("add_node","update_node"),node_name:Vz,subscriptions:_m.array().items({table:Bl.optional(),schema:Bl.required(),subscribe:qI.required(),publish:qI.required().custom(Yz),start_time:qz.iso()}).min(1).required()};function $z(e){return Gz.validateBySchema(e,_m.object(xI))}a($z,"addUpdateNodeValidator");function Yz(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(Yz,"checkForFalsy");kI.exports={addUpdateNodeValidator:$z,validation_schema:xI}});var $I=m((uae,VI)=>{var Kz=Be(),Wz={user:{presence:!0},schema:{presence:!0},table:{presence:!0},operation:{presence:!0}};VI.exports=function(e){return Kz.validateObject(e,Wz)}});var Em=m((lae,YI)=>{"use strict";var Qz=A().OPERATIONS_ENUM,dm=class{static{a(this,"UpdateObject")}constructor(t,r,s,n=void 0){this.operation=Qz.UPDATE,this.schema=t,this.table=r,this.records=s,this.__origin=n}};YI.exports=dm});var WI=m((dae,KI)=>{"use strict";var zz={OPERATION:"operation",REFRESH:"refresh"},fm=class{static{a(this,"JWTTokens")}constructor(t,r){this.operation_token=t,this.refresh_token=r}},hm=class{static{a(this,"JWTRSAKeys")}constructor(t,r,s){this.public_key=t,this.private_key=r,this.passphrase=s}};KI.exports={JWTTokens:fm,TOKEN_TYPE_ENUM:zz,JWTRSAKeys:hm}});var $a=m((fae,XI)=>{"use strict";var Va=require("jsonwebtoken"),mm=require("fs-extra"),Sm=V(),wr=A(),{handleHDBError:Vt,hdb_errors:Jz}=W(),{HTTP_STATUS_CODES:$t,AUTHENTICATION_ERROR_MSGS:Yt}=Jz,ka=k(),QI=ju(),Rm=Ir(),Xz=Nr().update,Zz=Em(),jz=ks(),{UserEventMsg:eJ}=Gr(),yn=Q();yn.initSync();var pm=require("path"),{JWTTokens:tJ,JWTRSAKeys:rJ,TOKEN_TYPE_ENUM:Fl}=WI(),sJ=yn.get(wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY)?yn.get(wr.HDB_SETTINGS_NAMES.OPERATION_TOKEN_TIMEOUT_KEY):"1d",nJ=yn.get(wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY)?yn.get(wr.HDB_SETTINGS_NAMES.REFRESH_TOKEN_TIMEOUT_KEY):"30d",ql="RS256",Tm;XI.exports={createTokens:iJ,validateOperationToken:aJ,refreshOperationToken:oJ,validateRefreshToken:JI};async function iJ(e){if(Sm.isEmpty(e)||typeof e!="object")throw Vt(new Error,Yt.INVALID_AUTH_OBJECT,$t.BAD_REQUEST,void 0,void 0,!0);if(Sm.isEmpty(e.username))throw Vt(new Error,Yt.USERNAME_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);if(Sm.isEmpty(e.password))throw Vt(new Error,Yt.PASSWORD_REQUIRED,$t.BAD_REQUEST,void 0,void 0,!0);let t;try{if(t=await Rm.findAndValidateUser(e.username,e.password),!t)throw Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}catch(E){throw ka.error(E),Vt(new Error,Yt.INVALID_CREDENTIALS,$t.UNAUTHORIZED,void 0,void 0,!0)}let r=await Gl(),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 zI(i,r.private_key,r.passphrase),c=await Va.sign(i,{key:r.private_key,passphrase:r.passphrase},{expiresIn:nJ,algorithm:ql,subject:Fl.REFRESH}),u=QI.hash(c),l=new Zz(wr.SYSTEM_SCHEMA_NAME,wr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,[{username:e.username,refresh_token:u}]),_,d;try{_=await Xz(l)}catch(E){ka.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 jz.signalUserChange(new eJ(process.pid)),new tJ(o,c)}a(iJ,"createTokens");async function zI(e,t,r){return await Va.sign(e,{key:t,passphrase:r},{expiresIn:sJ,algorithm:ql,subject:Fl.OPERATION})}a(zI,"signOperationToken");async function Gl(){if(Tm===void 0)try{let e=pm.join(yn.getHdbBasePath(),wr.LICENSE_KEY_DIR_NAME,wr.JWT_ENUM.JWT_PASSPHRASE_NAME),t=pm.join(yn.getHdbBasePath(),wr.LICENSE_KEY_DIR_NAME,wr.JWT_ENUM.JWT_PRIVATE_KEY_NAME),r=pm.join(yn.getHdbBasePath(),wr.LICENSE_KEY_DIR_NAME,wr.JWT_ENUM.JWT_PUBLIC_KEY_NAME),s=(await mm.readFile(e)).toString(),n=(await mm.readFile(t)).toString(),i=(await mm.readFile(r)).toString();Tm=new rJ(i,n,s)}catch(e){throw ka.error(e),Vt(new Error,Yt.NO_ENCRYPTION_KEYS,$t.INTERNAL_SERVER_ERROR)}return Tm}a(Gl,"getJWTRSAKeys");async function oJ(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 JI(e.refresh_token);let t=await Gl(),r=await Va.decode(e.refresh_token);return{operation_token:await zI({username:r.username,super_user:r.super_user,cluster_user:r.cluster_user},t.private_key,t.passphrase)}}a(oJ,"refreshOperationToken");async function aJ(e){try{let t=await Gl(),r=await Va.verify(e,t.public_key,{algorithms:ql,subject:Fl.OPERATION});return await Rm.findAndValidateUser(r.username,void 0,!1)}catch(t){throw ka.warn(t),t.name&&t.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}}a(aJ,"validateOperationToken");async function JI(e){let t;try{let r=await Gl(),s=await Va.verify(e,r.public_key,{algorithms:ql,subject:Fl.REFRESH});t=await Rm.findAndValidateUser(s.username,void 0,!1)}catch(r){throw ka.warn(r),r.name&&r.name==="TokenExpiredError"?Vt(new Error,Yt.TOKEN_EXPIRED,$t.FORBIDDEN):Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED)}if(!QI.validate(t.refresh_token,e))throw Vt(new Error,Yt.INVALID_TOKEN,$t.UNAUTHORIZED);return t}a(JI,"validateRefreshToken")});var gm=m((Sae,ew)=>{"use strict";var cJ=$I(),co=require("passport"),uJ=require("passport-local").Strategy,lJ=require("passport-http").BasicStrategy,_J=require("util"),dJ=Ir(),jI=_J.callbackify(dJ.findAndValidateUser),mae=nr(),EJ=A(),ZI=$a();co.use(new uJ(function(e,t,r){jI(e,t,r)}));co.use(new lJ(function(e,t,r){jI(e,t,r)}));co.serializeUser(function(e,t){t(null,e)});co.deserializeUser(function(e,t){t(null,e)});function fJ(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":co.authenticate("basic",{session:!1},(o,c)=>{i(o,c)})(e,t,r);break;case"Bearer":e.body?.operation&&e.body.operation===EJ.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN?ZI.validateRefreshToken(n).then(o=>{e.body.refresh_token=n,r(null,o)}).catch(o=>{r(o)}):ZI.validateOperationToken(n).then(o=>{r(null,o)}).catch(o=>{r(o)});break;default:co.authenticate("local",{session:!1},function(o,c){i(o,c)})(e,t,r);break}}a(fJ,"authorize");function hJ(e,t){let r=cJ(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(hJ,"checkPermissions");ew.exports={authorize:fJ,checkPermissions:hJ}});var uo=m((Tae,tw)=>{"use strict";var Am=class{static{a(this,"Node")}constructor(t,r,s){this.name=t,this.subscriptions=r,this.system_info=s}},Om=class{static{a(this,"NodeSubscription")}constructor(t,r,s,n){this.schema=t,this.table=r,this.publish=s,this.subscribe=n}};tw.exports={Node:Am,NodeSubscription:Om}});var sw=m((gae,rw)=>{"use strict";var mJ=A().OPERATIONS_ENUM,Nm=class{static{a(this,"UpsertObject")}constructor(t,r,s,n=void 0){this.operation=mJ.UPSERT,this.schema=t,this.table=r,this.records=s,this.__origin=n}};rw.exports=Nm});var Ya=m((Oae,nw)=>{"use strict";var bm=class{static{a(this,"RemotePayloadObject")}constructor(t,r,s,n){this.operation=t,this.node_name=r,this.subscriptions=s,this.system_info=n}},ym=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)}};nw.exports={RemotePayloadObject:bm,RemotePayloadSubscription:ym}});var ow=m((bae,iw)=>{"use strict";var Im=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}};iw.exports=Im});var uw=m((Uae,cw)=>{"use strict";var SJ=ow(),Iae=ke(),aw=Ie(),pJ=k(),{getSchemaPath:wae,getTransactionAuditStorePath:Cae}=Ce(),{getDatabases:TJ}=(Ee(),se(be));cw.exports=RJ;async function RJ(e){let t=new SJ;try{let r=TJ()[e.schema]?.[e.name],s=r.primaryStore.getStats(),n=r.auditStore?.getStats(),i=await aw.environmentDataSize(schema_path,e.name),o=await aw.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){pJ.warn(`unable to stat table dbi due to ${r}`)}return t}a(RJ,"lmdbGetTableSize")});var _w=m((Lae,lw)=>{"use strict";var wm=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}};lw.exports=wm});var lo=m((Bae,hw)=>{"use strict";var gJ=require("fs-extra"),AJ=require("path"),Ut=require("systeminformation"),In=k(),OJ=nt(),Cm=He(),kl=A(),NJ=uw(),fw=Wn(),{getThreadInfo:dw}=dt(),qm=Q();qm.initSync();var bJ=_w(),{openEnvironment:Pae}=Ie(),{getSchemaPath:vae}=Ce(),{database:yJ}=(Ee(),se(be)),xl;hw.exports={getHDBProcessInfo:Mm,getNetworkInfo:vm,getDiskInfo:Pm,getMemoryInfo:Lm,getCPUInfo:Dm,getTimeInfo:Um,getSystemInformation:Bm,systemInformation:IJ,getTableSize:Hm,getMetrics:Fm};function Um(){return Ut.time()}a(Um,"getTimeInfo");async function Dm(){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(F=>{let{raw_load:$,raw_load_idle:w,raw_load_irq:I,raw_load_nice:D,raw_load_system:z,raw_load_user:M,...ee}=F;O.cpus.push(ee)}),_.current_load=O,_}catch(e){return In.error(`error in getCPUInfo: ${e}`),{}}}a(Dm,"getCPUInfo");async function Lm(){try{let{buffers:e,cached:t,slab:r,buffcache:s,...n}=await Ut.mem();return Object.assign(n,process.memoryUsage())}catch(e){return In.error(`error in getMemoryInfo: ${e}`),{}}}a(Lm,"getMemoryInfo");async function Mm(){let e={core:[],clustering:[]};try{let t=await Ut.processes(),r;try{r=Number.parseInt(await gJ.readFile(AJ.join(qm.get(kl.CONFIG_PARAMS.ROOTPATH),kl.HDB_PID_FILE),"utf8"))}catch(s){if(s.code===kl.NODE_ERROR_CODES.ENOENT)In.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 In.error(`error in getHDBProcessInfo: ${t}`),e}}a(Mm,"getHDBProcessInfo");async function Pm(){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 In.error(`error in getDiskInfo: ${t}`),e}}a(Pm,"getDiskInfo");async function vm(){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 In.error(`error in getNetworkInfo: ${t}`),e}}a(vm,"getNetworkInfo");async function Bm(){if(xl!==void 0)return xl;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,xl=e,xl}catch(t){return In.error(`error in getSystemInformation: ${t}`),e}}a(Bm,"getSystemInformation");async function Hm(){let e=[],t=await fw.describeAll();for(let r of Object.values(t))for(let s of Object.values(r))e.push(await NJ(s));return e}a(Hm,"getTableSize");async function Fm(){let e=await fw.describeAll(),t={};for(let r in e){let s=t[r]={};for(let n in e[r])try{let o=yJ({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){In.notify(`Error getting stats for table ${n}: ${i}`)}}return t}a(Fm,"getMetrics");async function Ew(){if(qm.get(kl.CONFIG_PARAMS.CLUSTERING_ENABLED)){let{js:e,jsm:t}=await OJ.getNATSReferences(),r=await t.streams.info(Cm.WORK_QUEUE_CONSUMER_NAMES.stream_name),s=await e.consumers.get(Cm.WORK_QUEUE_CONSUMER_NAMES.stream_name,Cm.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(Ew,"getNatsStreamInfo");async function IJ(e){let t=new bJ;if(!Array.isArray(e.attributes)||e.attributes.length===0)return t.system=await Bm(),t.time=Um(),t.cpu=await Dm(),t.memory=await Lm(),t.disk=await Pm(),t.network=await vm(),t.harperdb_processes=await Mm(),t.table_size=await Hm(),t.metrics=await Fm(),t.threads=await dw(),t.replication=await Ew(),t;for(let r=0;r<e.attributes.length;r++)switch(e.attributes[r]){case"system":t.system=await Bm();break;case"time":t.time=Um();break;case"cpu":t.cpu=await Dm();break;case"memory":t.memory=await Lm();break;case"disk":t.disk=await Pm();break;case"network":t.network=await vm();break;case"harperdb_processes":t.harperdb_processes=await Mm();break;case"table_size":t.table_size=await Hm();break;case"database_metrics":case"metrics":t.metrics=await Fm();break;case"threads":t.threads=await dw();break;case"replication":t.replication=await Ew();break;default:break}return t}a(IJ,"systemInformation")});var Ka=m((Fae,wJ)=>{wJ.exports={name:"harperdb",version:"4.2.0-alpha.15",description:"HarperDB is a distributed SQL & NoSQL data platform focused on speed, flexibility, and ease of use.",keywords:["database","sql","nosql","api","distributed","cloud","enterprise","Fastify","NATS"],main:"harperdb.js",bin:{harperdb:"./bin/harperdb.js"},engines:{node:">=14.0.0","preferred-node":"18.15.0","go-lang":"1.19.12","nats-server":"2.9.21"},exports:{".":"./index.js"},homepage:"https://www.harperdb.io/",bugs:"support@harperdb.io",author:{name:"HarperDB",email:"support@harperdb.io"},license:"SEE LICENSE IN LICENSE",scripts:{submodules:"git submodule update --init --recursive",build:"eslint -c ./.eslintbuild bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/",pretty:"eslint --fix bin/ dataLayer/ security/ server/ sqlTranslator/ upgrade/ utility/ validation/","cover:test":"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && nyc --no-clean --reporter=lcovonly npm run test:apitests && nyc --no-clean --reporter=lcovonly npm run test:logging && nyc --no-clean --reporter=lcovonly npm run test:upgrade && nyc --no-clean --reporter=lcovonly npm run test:nats && nyc --no-clean --reporter=lcovonly npm run test:cfserver && nyc --no-clean --reporter=lcovonly npm run test:hdbserver && nyc --no-clean --reporter=lcovonly npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license",test:"rimraf ./.nyc_output/* && node utility/devops/register.js --reset_license && npm run test:apitests && npm run test:logging && npm run test:upgrade && npm run test:nats && npm run test:cfserver && npm run test:hdbserver && npm run test:main && nyc merge .nyc_output coverage.json && node ./utility/devops/register.js --reset_license","test:main":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --config '../unitTests/.mocharc-main.json'","test:lmdbbridge":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --config '../unitTests/.mocharc.json'","test:lmdbutility":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --config '../unitTests/.mocharc.json'","test:hdbserver":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --config '../unitTests/.mocharc.json'","test:cfserver":"npm run submodules && cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/fastifyRoutes/customFunctionsServer-test.js' --config '../unitTests/.mocharc.json'","test:nats":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json'","test:upgrade":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --config '../unitTests/.mocharc.json'","test:apitests":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/apiTests/**/*-test.mjs' --config '../unitTests/.mocharc.json'","test:logging":"cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/utility/logging/*.js' --config '../unitTests/.mocharc.json'","test:ci":" cd bin/ && ../node_modules/mocha/bin/_mocha '../unitTests/**/*.js' --retries 3 --config '../unitTests/.mocharc-main.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/dataLayer/harperBridge/lmdbBridge/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/utility/lmdb/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/harperdb/hdbServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/customFunctions/customFunctionsServer-test.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/upgrade/**/*.js' --parallel --retries 3 --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter && ../node_modules/mocha/bin/_mocha '../unitTests/server/nats/**/*.js' --config '../unitTests/.mocharc.json' --reporter mocha-teamcity-reporter","hdb-check":"./utility/devops/hdb-check.sh","download-prebuilds":"node ./utility/devops/build/download-prebuilds.js",prebuild:"date",postinstall:"node ./launchServiceScripts/launchInstallNATSServer.js",build_nats_dependency:"node ./utility/devops/nats/builder.js",coverage:"nyc --reporter=lcov npm test"},dependencies:{"@aws-sdk/client-s3":"3.388.0","@aws-sdk/lib-storage":"3.383.0","@aws-sdk/abort-controller":"3.370.0","@endo/static-module-record":"^0.8.1","@fastify/autoload":"~5.7.1","@fastify/compress":"~6.4.0","@fastify/cors":"~8.3.0","@fastify/static":"~6.10.2","@turf/area":"6.5.0","@turf/boolean-contains":"6.5.0","@turf/boolean-disjoint":"6.5.0","@turf/boolean-equal":"6.5.0","@turf/circle":"6.5.0","@turf/difference":"6.5.0","@turf/distance":"6.5.0","@turf/helpers":"6.5.0","@turf/length":"6.5.0",alasql:"1.7.4","cbor-x":"1.5.4",chalk:"4.1.2","cli-progress":"3.12.0",clone:"2.1.2",esbuild:"^0.19.1","fast-glob":"3.3.1",fastify:"~4.21.0","fastify-plugin":"~4.5.0","fs-extra":"11.1.1",graphql:"^16.6.0","human-readable-ids":"1.0.4",inquirer:"8.2.6","is-number":"7.0.0",joi:"17.9.2",json2csv:"5.0.7",jsonata:"1.8.6",jsonwebtoken:"9.0.1",lmdb:"2.8.4",lodash:"4.17.21",mathjs:"11.9.1",minimist:"1.2.8",mkcert:"1.5.1",moment:"2.29.4","mqtt-packet":"~8.2.0",msgpackr:"1.9.7",nats:"2.16.0",needle:"3.2.0","node-stream-zip":"1.15.0","normalize-path":"^3.0.0",ora:"5.4.1","ordered-binary":"1.4.1",papaparse:"5.4.1",passport:"0.6.0","passport-http":"0.3.0","passport-local":"1.0.0",pino:"8.15.0",pm2:"5.3.0",prompt:"1.3.0","properties-reader":"2.2.0","recursive-iterator":"3.3.0",semver:"7.5.4",send:"^0.18.0",ses:"^0.18.1","stream-chain":"2.2.5","stream-json":"1.8.0",systeminformation:"5.18.15","tar-fs":"2.1.1",ulidx:"0.5.0",uuid:"9.0.0","validate.js":"0.13.1",ws:"^8.13.0",yaml:"2.3.1"},devDependencies:{"@tsconfig/node16":"^1.0.3","@types/node":"latest","@typescript-eslint/eslint-plugin":"^5.55.0","@typescript-eslint/parser":"^5.55.0",axios:"0.27.2",chai:"4.3.7","chai-integer":"0.1.0",eslint:"8.22.0","eslint-config-prettier":"8.3.0","eslint-plugin-prettier":"3.4.1","eslint-plugin-radar":"0.2.1",eventsource:"^2.0.2","hook-std":"3.0.0","intercept-stdout":"0.1.2",mocha:"^10.2.0","mocha-teamcity-reporter":"3.0.0","mock-require":"3.0.3","mock-stdin":"1.0.0",mqtt:"~4.3.7",newman:"5.3.2","newman-reporter-html":"1.0.5","newman-reporter-htmlextra":"^1.22.11","newman-reporter-teamcity":"^0.1.12","node-fetch":"2.6.7",nyc:"15.1.0",prettier:"2.8.4",rewire:"5.0.0",rimraf:"3.0.2",sinon:"10.0.0","sinon-chai":"3.7.0","source-map-support":"^0.5.21",typescript:"^4.9.4","why-is-node-still-running":"^1.0.0"},overrides:{"eslint-plugin-radar":{eslint:"8.22.0"},"newman-reporter-html":{newman:"5.3.2"},alasql:{xlsx:"0.18.5"}},optionalDependencies:{bufferutil:"^4.0.7","utf-8-validate":"^5.0.10"}}});var Gm=m((xae,mw)=>{"use strict";var qae=require("fs-extra"),Gae=k();mw.exports={version:CJ,printVersion:DJ,nodeVersion:UJ};var wn=Ka();function CJ(){if(wn)return wn.version}a(CJ,"version");function UJ(){if(wn&&wn.engines&&wn.engines["preferred-node"])return wn.engines["preferred-node"]}a(UJ,"nodeVersion");function DJ(){wn&&console.log(`HarperDB Version ${wn.version}`)}a(DJ,"printVersion")});var Ys=m((Yae,Rw)=>{"use strict";var LJ=Nr(),xm=V(),MJ=require("util"),ai=A(),Sw=Q();Sw.initSync();var PJ=gm(),pw=Or(),{Node:Vae,NodeSubscription:$ae}=uo(),vJ=Zi(),BJ=sw(),{RemotePayloadObject:HJ,RemotePayloadSubscription:FJ}=Ya(),{handleHDBError:qJ,hdb_errors:GJ}=W(),{HTTP_STATUS_CODES:xJ,HDB_ERROR_MSGS:kJ}=GJ,VJ=us(),$J=lo(),YJ=Gm(),{getDatabases:KJ}=(Ee(),se(be)),WJ=MJ.promisify(PJ.authorize),QJ=pw.searchByHash,zJ=pw.searchByValue;Rw.exports={authHeaderToUser:JJ,isEmpty:XJ,getNodeRecord:ZJ,upsertNodeRecord:jJ,buildNodePayloads:e2,checkClusteringEnabled:t2,getAllNodeRecords:r2,getSystemInfo:s2,reverseSubscription:Tw};async function JJ(e){let t={headers:{authorization:e.hdb_auth_header}};return e.hdb_user=await WJ(t,null),e}a(JJ,"authHeaderToUser");function XJ(e){return e==null}a(XJ,"isEmpty");async function ZJ(e){let t=new vJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e],["*"]);return QJ(t)}a(ZJ,"getNodeRecord");async function jJ(e){let t=new BJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[e]);return LJ.upsert(t)}a(jJ,"upsertNodeRecord");function Tw(e){if(xm.isEmpty(e.subscribe)||xm.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(Tw,"reverseSubscription");function e2(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,_=xm.getTableHashAttribute(u,l),{subscribe:d,publish:E}=Tw(c),f=KJ()[u]?.[l],h=new FJ(u,l,_,E,d,c.start_time,f.schemaDefined?f.attributes:void 0);n.push(h)}return new HJ(r,t,n,s)}a(e2,"buildNodePayloads");function t2(){if(!Sw.get(ai.CONFIG_PARAMS.CLUSTERING_ENABLED))throw qJ(new Error,kJ.CLUSTERING_NOT_ENABLED,xJ.BAD_REQUEST,void 0,void 0,!0)}a(t2,"checkClusteringEnabled");async function r2(){let e=new VJ(ai.SYSTEM_SCHEMA_NAME,ai.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,"name","*",void 0,["*"]);return Array.from(await zJ(e))}a(r2,"getAllNodeRecords");async function s2(){let e=await $J.getSystemInformation();return{hdb_version:YJ.version(),node_version:e.node_version,platform:e.platform}}a(s2,"getSystemInfo")});var km=m((Wae,ww)=>{"use strict";var Vl=nt(),gw=V(),Aw=He(),Ow=A(),$l=k(),Nw=Ul(),n2=Rh(),{RemotePayloadObject:i2}=Ya(),{handleHDBError:bw,hdb_errors:o2}=W(),{HTTP_STATUS_CODES:yw}=o2,{NodeSubscription:Iw}=uo();ww.exports=a2;async function a2(e,t){let r;try{r=await Vl.request(`${t}.${Aw.REQUEST_SUFFIX}`,new i2(Ow.OPERATIONS_ENUM.DESCRIBE_ALL,t,void 0,void 0)),$l.trace("Response from remote describe all request:",r)}catch(o){$l.error(`addNode received error from describe all request to remote node: ${o}`);let c=Vl.requestErrorHandler(o,"add_node",t);throw bw(new Error,c,yw.INTERNAL_SERVER_ERROR,"error",c)}if(r.status===Aw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let o=`Error returned from remote node ${t}: ${r.message}`;throw bw(new Error,o,yw.INTERNAL_SERVER_ERROR,"error",o)}let s=r.message,n=[],i=[];for(let o of e){let{schema:c,table:u}=o;if(c===Ow.SYSTEM_SCHEMA_NAME){await Vl.createLocalTableStream(c,u);let h=new Iw(c,u,o.publish,o.subscribe);h.start_time=o.start_time,i.push(h);continue}let l=gw.doesSchemaExist(c),_=s[c]!==void 0,d=u?gw.doesTableExist(c,u):!0,E=u?s?.[c]?.[u]!==void 0:!0;if(!l&&!_||!d&&!E){n.push(o);continue}if(!l&&_&&($l.trace(`addNode creating schema: ${c}`),await Nw.createSchema({operation:"create_schema",schema:c})),!d&&E){$l.trace(`addNode creating table: ${u} in schema: ${c} with attributes ${JSON.stringify(s[c][u].attributes)}`);let h=new n2(c,u,s[c][u].hash_attribute);s[c][u].attributes&&(h.attributes=s[c][u].attributes),await Nw.createTable(h)}await Vl.createLocalTableStream(c,u);let f=new Iw(c,u,o.publish,o.subscribe);f.start_time=o.start_time,i.push(f)}return{added:i,skipped:n}}a(a2,"reviewSubscriptions")});var Wl=m((zae,Dw)=>{"use strict";var{handleHDBError:Yl,hdb_errors:c2}=W(),{HTTP_STATUS_CODES:Kl}=c2,{addUpdateNodeValidator:u2}=Hl(),Wa=k(),Uw=A(),Cw=He(),l2=V(),Vm=nt(),Qa=Ys(),_2=Q(),d2=km(),{Node:E2,NodeSubscription:f2}=uo(),{broadcast:h2}=dt(),m2="Unable to create subscriptions due to schema and/or tables not existing on the local or remote node",S2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",p2=_2.get(Uw.CONFIG_PARAMS.CLUSTERING_NODENAME);Dw.exports=T2;async function T2(e,t=!1){Wa.trace("addNode called with:",e),Qa.checkClusteringEnabled();let r=u2(e);if(r)throw Yl(r,r.message,Kl.BAD_REQUEST,void 0,void 0,!0);let s=e.node_name;if(!t){let d=await Qa.getNodeRecord(s);if(!l2.isEmptyOrZeroLength(d))throw Yl(new Error,`Node '${s}' has already been added, perform update_node to proceed.`,Kl.BAD_REQUEST,void 0,void 0,!0)}let{added:n,skipped:i}=await d2(e.subscriptions,s),o={message:void 0,added:n,skipped:i};if(n.length===0)return o.message=m2,o;let c=Qa.buildNodePayloads(n,p2,Uw.OPERATIONS_ENUM.ADD_NODE,await Qa.getSystemInfo());Wa.trace("addNode sending remote payload:",c);let u;try{u=await Vm.request(`${s}.${Cw.REQUEST_SUFFIX}`,c)}catch(d){Wa.error(`addNode received error from request: ${d}`);let E=Vm.requestErrorHandler(d,"add_node",s);throw Yl(new Error,E,Kl.INTERNAL_SERVER_ERROR,"error",E)}if(u.status===Cw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let d=`Error returned from remote node ${s}: ${u.message}`;throw Yl(new Error,d,Kl.INTERNAL_SERVER_ERROR,"error",d)}Wa.trace(u);let l=[];for(let d=0,E=n.length;d<E;d++){let f=n[d];Wa.trace("Add node updating work stream for node:",s,"subscriptions:",f),await Vm.updateWorkStream(f,s),n[d].start_time===void 0&&delete n[d].start_time,l.push(new f2(f.schema,f.table,f.publish,f.subscribe))}let _=new E2(s,l,u.system_info);return await Qa.upsertNodeRecord(_),h2({type:"nats_update"}),i.length>0?o.message=S2:o.message=`Successfully added '${s}' to manifest`,o}a(T2,"addNode")});var Ym=m((Xae,Pw)=>{"use strict";var{handleHDBError:Ql,hdb_errors:R2}=W(),{HTTP_STATUS_CODES:zl}=R2,{addUpdateNodeValidator:g2}=Hl(),za=k(),Mw=A(),Lw=He(),A2=V(),$m=nt(),Ja=Ys(),O2=Q(),{cloneDeep:N2}=require("lodash"),b2=km(),{NodeSubscription:y2}=uo(),{broadcast:I2}=dt(),w2="Unable to update subscriptions due to schema and/or tables not existing on the local or remote node",C2="Some subscriptions were unsuccessful due to schema and/or tables not existing on the local or remote node",U2=O2.get(Mw.CONFIG_PARAMS.CLUSTERING_NODENAME);Pw.exports=D2;async function D2(e){za.trace("updateNode called with:",e),Ja.checkClusteringEnabled();let t=g2(e);if(t)throw Ql(t,t.message,zl.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=N2(await Ja.getNodeRecord(r));if(A2.isEmptyOrZeroLength(s))throw Ql(new Error,`Node '${r}' has not been added, perform add_node to proceed.`,zl.BAD_REQUEST,void 0,void 0,!0);let{added:n,skipped:i}=await b2(e.subscriptions,r),o={message:void 0,updated:n,skipped:i};if(n.length===0)return o.message=w2,o;let c=Ja.buildNodePayloads(n,U2,Mw.OPERATIONS_ENUM.UPDATE_NODE,await Ja.getSystemInfo());za.trace("updateNode sending remote payload:",c);let u;try{u=await $m.request(`${r}.${Lw.REQUEST_SUFFIX}`,c)}catch(l){za.error(`updateNode received error from request: ${l}`);let _=$m.requestErrorHandler(l,"update_node",r);throw Ql(new Error,_,zl.INTERNAL_SERVER_ERROR,"error",_)}if(u.status===Lw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR){let l=`Error returned from remote node ${r}: ${u.message}`;throw Ql(new Error,l,zl.INTERNAL_SERVER_ERROR,"error",l)}za.trace(u);for(let l=0,_=n.length;l<_;l++){let d=n[l];za.trace(`updateNode updating work stream for node: ${r} subscription:`,d),await $m.updateWorkStream(d,r),n[l].start_time===void 0&&delete n[l].start_time}return await L2(s[0],n,u.system_info),i.length>0?o.message=C2:o.message=`Successfully updated '${r}'`,o}a(D2,"updateNode");async function L2(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 y2(o.schema,o.table,o.publish,o.subscribe))}s.system_info=r,await Ja.upsertNodeRecord(s),I2({type:"nats_update"})}a(L2,"updateNodeTable")});var qw=m((jae,Fw)=>{"use strict";var Hw=require("joi"),{string:vw}=Hw.types(),M2=Be(),Bw=A(),P2=Q(),v2=He();Fw.exports=B2;function B2(e){let t=vw.invalid(P2.get(Bw.CONFIG_PARAMS.CLUSTERING_NODENAME)).pattern(v2.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=Hw.object({operation:vw.valid(Bw.OPERATIONS_ENUM.REMOVE_NODE).required(),node_name:t});return M2.validateBySchema(e,r)}a(B2,"removeNodeValidator")});var Xl=m((tce,Yw)=>{"use strict";var{handleHDBError:Gw,hdb_errors:H2}=W(),{HTTP_STATUS_CODES:xw}=H2,F2=qw(),Xa=k(),kw=Ys(),q2=V(),Jl=A(),Vw=He(),$w=nt(),G2=Q(),{RemotePayloadObject:x2}=Ya(),{NodeSubscription:k2}=uo(),V2=Ma(),$2=Zn(),{broadcast:Y2}=dt(),K2=G2.get(Jl.CONFIG_PARAMS.CLUSTERING_NODENAME);Yw.exports=W2;async function W2(e){Xa.trace("removeNode called with:",e),kw.checkClusteringEnabled();let t=F2(e);if(t)throw Gw(t,t.message,xw.BAD_REQUEST,void 0,void 0,!0);let r=e.node_name,s=await kw.getNodeRecord(r);if(q2.isEmptyOrZeroLength(s))throw Gw(new Error,`Node '${r}' was not found.`,xw.BAD_REQUEST,void 0,void 0,!0);s=s[0];let n=new x2(Jl.OPERATIONS_ENUM.REMOVE_NODE,K2,[]),i,o=!1;try{i=await $w.request(`${r}.${Vw.REQUEST_SUFFIX}`,n),Xa.trace("Remove node reply from remote node:",r,i)}catch(u){Xa.error("removeNode received error from request:",u),o=!0}for(let u=0,l=s.subscriptions.length;u<l;u++){let _=s.subscriptions[u];Xa.trace(`Remove node removing subscription: ${_.schema}.${_.table} for node: ${r}`);let d=new k2(_.schema,_.table,!1,!1);await $w.updateWorkStream(d,r)}let c=new V2(Jl.SYSTEM_SCHEMA_NAME,Jl.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,[r]);return await $2.deleteRecord(c),Y2({type:"nats_update"}),i?.status===Vw.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR||o?(Xa.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(W2,"removeNode")});var Qw=m((sce,Ww)=>{"use strict";var Kw=require("joi"),{string:Q2,array:z2}=Kw.types(),J2=Be(),X2=Hl();Ww.exports=Z2;function Z2(e){let t=Kw.object({operation:Q2.valid("configure_cluster").required(),connections:z2.items(X2.validation_schema).required()});return J2.validateBySchema(e,t)}a(Z2,"configureClusterValidator")});var Km=m((ice,jw)=>{"use strict";var j2=A(),Zl=k(),e3=V(),t3=Xl(),r3=Wl(),zw=Ys(),s3=Qw(),{handleHDBError:Jw,hdb_errors:n3}=W(),{HTTP_STATUS_CODES:Xw}=n3,i3="Configure cluster complete.",o3="Failed to configure the cluster. Check the logs for more details.",a3="Configure cluster was partially successful. Errors occurred when attempting to configure the following nodes. Check the logs for more details.";jw.exports=c3;async function c3(e){Zl.trace("configure cluster called with:",e),zw.checkClusteringEnabled();let t=s3(e);if(t)throw Jw(t,t.message,Xw.BAD_REQUEST,void 0,void 0,!0);let r=await zw.getAllNodeRecords(),s=[];for(let E=0,f=r.length;E<f;E++)s.push(Zw(t3,{operation:j2.OPERATIONS_ENUM.REMOVE_NODE,node_name:r[E].name},r[E].name));let n=await Promise.allSettled(s);Zl.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(Zw(r3,f,f.node_name))}let c=await Promise.allSettled(i);Zl.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"&&(Zl.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(e3.isEmptyOrZeroLength(u))return{message:i3,connections:l};if(_)return{message:a3,failed_nodes:u,connections:l};throw Jw(new Error,o3,Xw.INTERNAL_SERVER_ERROR,void 0,void 0,!0)}a(c3,"configureCluster");async function Zw(e,t,r){try{return{node_name:r,result:await e(t)}}catch(s){throw{node_name:r,error:s}}}a(Zw,"functionWrapper")});var tC=m((ace,eC)=>{"use strict";var jl=require("joi"),u3=Be(),{validateSchemaExists:l3,validateTableExists:_3,validateSchemaName:d3}=is(),E3=jl.object({operation:jl.string().valid("purge_stream"),schema:jl.string().custom(l3).custom(d3).required(),table:jl.string().custom(_3).required()});function f3(e){return u3.validateBySchema(e,E3)}a(f3,"purgeStreamValidator");eC.exports=f3});var Wm=m((uce,rC)=>{"use strict";var{handleHDBError:h3,hdb_errors:m3}=W(),{HTTP_STATUS_CODES:S3}=m3,p3=tC(),T3=nt(),R3=Ys();rC.exports=g3;async function g3(e){let t=p3(e);if(t)throw h3(t,t.message,S3.BAD_REQUEST,void 0,void 0,!0);R3.checkClusteringEnabled();let{schema:r,table:s}=e;return await T3.purgeTableStream(r,s),`Successfully purged table '${r}.${s}'`}a(g3,"purgeStream")});var Jm=m((_ce,cC)=>{"use strict";var zm=Ys(),A3=nt(),iC=Q(),e_=A(),ci=He(),O3=V(),Qm=k(),{RemotePayloadObject:N3}=Ya(),{ErrorCode:sC}=require("nats"),nC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_ENABLED),oC=iC.get(e_.CONFIG_PARAMS.CLUSTERING_NODENAME);cC.exports={clusterStatus:b3,buildNodeStatus:aC};async function b3(){let e={node_name:oC,is_enabled:nC,connections:[]};if(!nC)return e;let t=await zm.getAllNodeRecords();if(O3.isEmptyOrZeroLength(t))return e;let r=[];for(let s=0,n=t.length;s<n;s++)r.push(aC(t[s],e.connections));return await Promise.allSettled(r),e}a(b3,"clusterStatus");async function aC(e,t){let r=e.name,s=new N3(e_.OPERATIONS_ENUM.CLUSTER_STATUS,oC,void 0,await zm.getSystemInfo()),n,i,o=ci.CLUSTER_STATUS_STATUSES.OPEN;try{let u=Date.now();n=await A3.request(ci.REQUEST_SUBJECT(r),s),i=Date.now()-u,n.status===ci.UPDATE_REMOTE_RESPONSE_STATUSES.ERROR&&(o=ci.CLUSTER_STATUS_STATUSES.CLOSED,Qm.error(`Error getting node status from ${r} `,n))}catch(u){Qm.warn(`Error getting node status from ${r}`,u),u.code===sC.NoResponders?o=ci.CLUSTER_STATUS_STATUSES.NO_RESPONDERS:u.code===sC.Timeout?o=ci.CLUSTER_STATUS_STATUSES.TIMEOUT:o=ci.CLUSTER_STATUS_STATUSES.CLOSED}let c=new y3(r,o,n?.message?.ports?.clustering,n?.message?.ports?.operations_api,i,n?.message?.uptime,e.subscriptions,n?.message?.system_info);try{let u={name:r,system_info:n?.message?.system_info};e.system_info?.hdb_version!==e_.PRE_4_0_0_VERSION&&await zm.upsertNodeRecord(u)}catch(u){Qm.error("Cluster status encountered an error updating system info for node:",r,u)}t.push(c)}a(aC,"buildNodeStatus");function y3(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(y3,"NodeStatusObject")});var Zm=m((Ece,uC)=>{"use strict";var{handleHDBError:I3,hdb_errors:w3}=W(),{HTTP_STATUS_CODES:C3}=w3,U3=nt(),D3=Ys(),Xm=V(),t_=require("joi"),L3=Be(),M3=2e3,P3=t_.object({timeout:t_.number().min(1),connected_nodes:t_.boolean(),routes:t_.boolean()});uC.exports=v3;async function v3(e){D3.checkClusteringEnabled();let t=L3.validateBySchema(e,P3);if(t)throw I3(t,t.message,C3.BAD_REQUEST,void 0,void 0,!0);let{timeout:r,connected_nodes:s,routes:n}=e,i=s===void 0||Xm.autoCastBoolean(s),o=n===void 0||Xm.autoCastBoolean(n),c={nodes:[]},u=await U3.getServerList(r??M3),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:Xm.autoCast(T.split(":")[1])})):[]),c.nodes.push(h)}}return c}a(v3,"clusterNetwork")});var EC=m((hce,dC)=>{"use strict";var jm=require("joi"),lC=Be(),{route_constraints:_C}=Hf();dC.exports={setRoutesValidator:B3,deleteRoutesValidator:H3};function B3(e){let t=jm.object({server:jm.valid("hub","leaf").required(),routes:_C.required()});return lC.validateBySchema(e,t)}a(B3,"setRoutesValidator");function H3(e){let t=jm.object({routes:_C.required()});return lC.validateBySchema(e,t)}a(H3,"deleteRoutesValidator")});var tS=m((Sce,SC)=>{"use strict";var ui=yr(),eS=V(),r_=A(),fC=EC(),{handleHDBError:hC,hdb_errors:F3}=W(),{HTTP_STATUS_CODES:mC}=F3,q3="cluster routes successfully set",G3="cluster routes successfully deleted";SC.exports={setRoutes:x3,getRoutes:k3,deleteRoutes:V3};function x3(e){let t=fC.setRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ui.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=eS.autoCast(l.port);let _=s.some(E=>E.host===l.host&&E.port===l.port),d=n.some(E=>E.host===l.host&&E.port===l.port);_||d?i.push(l):(s.push(l),o.push(l))}return e.server==="hub"?ui.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s):ui.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,s),{message:q3,set:o,skipped:i}}a(x3,"setRoutes");function k3(){let e=ui.getClusteringRoutes();return{hub:e.hub_routes,leaf:e.leaf_routes}}a(k3,"getRoutes");function V3(e){let t=fC.deleteRoutesValidator(e);if(t)throw hC(t,t.message,mC.BAD_REQUEST,void 0,void 0,!0);let r=ui.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=eS.isEmptyOrZeroLength(s)?null:s,ui.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES,s)),u&&(n=eS.isEmptyOrZeroLength(n)?null:n,ui.updateConfigValue(r_.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_ROUTES,n)),{message:G3,deleted:i,skipped:o}}a(V3,"deleteRoutes")});var TC=m((Tce,pC)=>{"use strict";var Za=require("alasql"),li=require("recursive-iterator"),Yr=k(),$3=V(),ja=A(),rS=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,K3(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=>ja.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=>!ja.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][ja.PERMS_CRUD_ENUM.READ]){let c;t[i].tables[o].attribute_permissions.length>0?c=Y3(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=>!ja.SEARCH_WILDCARDS.includes(l));c.forEach(({attribute_name:l})=>{let _=new Za.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 Y3(e){return e.filter(t=>t[ja.PERMS_CRUD_ENUM.READ])}a(Y3,"filterReadRestrictedAttrs");function K3(e,t,r,s,n){W3(e,t,r,s,n)}a(K3,"interpretAST");function ec(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(ec,"addSchemaTableToMap");function W3(e,t,r,s,n){if(!e){Yr.info("getRecordAttributesAST: invalid SQL syntax tree");return}e instanceof Za.yy.Insert?X3(e,t,r):e instanceof Za.yy.Select?Q3(e,t,r,s,n):e instanceof Za.yy.Update?z3(e,t,r):e instanceof Za.yy.Delete?J3(e,t,r):Yr.error("AST in getRecordAttributesAST() is not a valid SQL type.")}a(W3,"getRecordAttributesAST");function Q3(e,t,r,s,n){if(!e){Yr.info("getSelectAttributes: invalid SQL syntax tree");return}if(!e.from||e.from[0]===void 0)return;let i=e.from[0].databaseid;if($3.isEmptyOrZeroLength(i)){Yr.error("No schema specified");return}e.from.forEach(c=>{ec(c,t,r,s,n)}),e.joins&&e.joins.forEach(c=>{c.as&&(c.table.as=c.as),ec(c.table,t,r,s,n)});let o=new li(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{Yr.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 li(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{Yr.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 li(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{Yr.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 li(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{Yr.info(`table specified as ${l} not found.`);return}t.get(_).get(l).indexOf(u.columnid)<0&&t.get(_).get(l).push(u.columnid)}}}a(Q3,"getSelectAttributes");function z3(e,t,r){if(!e){Yr.info("getUpdateAttributes: invalid SQL syntax tree");return}let s=new li(e.columns),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.table.tableid,n,i.columnid,t,r)}a(z3,"getUpdateAttributes");function J3(e,t,r){if(!e){Yr.info("getDeleteAttributes: invalid SQL syntax tree");return}let s=new li(e.where),n=e.table.databaseid;ec(e.table,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.table.tableid,n,i.columnid,t,r)}a(J3,"getDeleteAttributes");function X3(e,t,r){if(!e){Yr.info("getInsertAttributes: invalid SQL syntax tree");return}let s=new li(e.columns),n=e.into.databaseid;ec(e.into,t,r);for(let{node:i}of s)i&&i.columnid&&sS(e.into.tableid,n,i.columnid,t,r)}a(X3,"getInsertAttributes");function sS(e,t,r,s,n){if(!s.get(t))return;let i=e;s.get(t).has(i)||(i=n.get(i)),s.get(t).get(i).push(r)}a(sS,"pushAttribute");pC.exports=rS});var oS=m((gce,OC)=>{var s_=Oa(),RC=require("chalk"),dr=k(),gC=require("prompt"),{promisify:Z3}=require("util"),nS=A(),j3=require("fs-extra"),eX=require("path"),tX=V(),rX=Gm(),AC=Q();AC.initSync();var sX=require("moment"),nX=Z3(gC.get),iX=eX.join(AC.getHdbBasePath(),nS.LICENSE_KEY_DIR_NAME,nS.LICENSE_FILE_NAME,nS.LICENSE_FILE_NAME);OC.exports={getFingerprint:aX,setLicense:oX,parseLicense:iS,register:cX,getRegistrationInfo:lX};async function oX(e){if(e&&e.key&&e.company){try{dr.info(`parsing license key: ${e.key} and `);let t=e.company.toString();await iS(e.key.trim(),t.trim())}catch(t){let r="There was an error parsing the license key.";throw dr.error(r),dr.error(t),new Error(r)}return"Wrote license key file. Registration successful."}throw new Error("Invalid key or company specified for license file.")}a(oX,"setLicense");async function aX(){let e={};try{e=await s_.generateFingerPrint()}catch(t){let r="Error generating fingerprint.";throw dr.error(r),dr.error(t),new Error(r)}return e}a(aX,"getFingerprint");async function iS(e,t){if(!e||!t)throw new Error("Invalid entries for License Key and Customer Company");dr.info("Validating license input...");let r=s_.validateLicense(e,t);if(dr.info("checking for valid license..."),!r.valid_license)throw new Error("Invalid license found.");if(dr.info("checking valid license date..."),!r.valid_date)throw new Error("This License has expired.");if(dr.info(`checking for valid machine license ${r.valid_machine}`),!r.valid_machine)throw new Error("This license is in use on another machine.");try{dr.info("writing license to disk"),await j3.writeFile(iX,JSON.stringify({license_key:e,company:t}))}catch(s){throw dr.error("Failed to write License"),s}return"Registration successful."}a(iS,"parseLicense");async function cX(){let e=await uX();return iS(e.HDB_LICENSE,e.CUSTOMER_COMPANY)}a(cX,"register");async function uX(){let e=await s_.generateFingerPrint(),t={properties:{CUSTOMER_COMPANY:{description:RC.magenta("[COMPANY] Please enter your company name"),required:!0},HDB_LICENSE:{description:RC.magenta(`[HDB_LICENSE] Your fingerprint is ${e} Please enter your license key`),required:!0}}};try{gC.start()}catch(s){dr.error(s)}let r;try{r=await nX(t)}catch(s){throw console.error("There was a problem prompting for registration input. Exiting."),s}return r}a(uX,"promptForRegistration");async function lX(){let e={registered:!1,version:null,ram_allocation:null,license_expiration_date:null},t;try{t=await s_.getLicense()}catch(r){throw dr.error(`There was an error when searching licenses due to: ${r.message}`),r}if(tX.isEmptyOrZeroLength(t))throw new Error("There were no licenses found.");if(e.registered=t.enterprise,e.version=rX.version(),e.ram_allocation=t.ram_allocation,isNaN(t.exp_date))e.license_expiration_date=t.enterprise?t.exp_date:null;else{let r=sX.utc(t.exp_date).format("YYYY-MM-DD");e.license_expiration_date=t.enterprise?r:null}return e}a(lX,"getRegistrationInfo")});var bC=m((Oce,NC)=>{"use strict";var _X=He(),aS=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+_X.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"}};NC.exports=aS});var wC=m((bce,IC)=>{"use strict";var yC=He(),cS=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+yC.SERVER_SUFFIX.LEAF,this.pid_file=s,this.max_payload=67108864,this.jetstream={enabled:!0,store_dir:n,domain:r+yC.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"}};IC.exports=cS});var UC=m((Ice,CC)=>{"use strict";var uS=class{static{a(this,"HdbUserObject")}constructor(t,r){this.user=t,this.password=r}};CC.exports=uS});var LC=m((Cce,DC)=>{"use strict";var dX=He(),lS=class{static{a(this,"SysUserObject")}constructor(t,r){this.user=t+dX.SERVER_SUFFIX.ADMIN,this.password=r}};DC.exports=lS});var ES=m((Dce,vC)=>{"use strict";var tc=require("path"),a_=require("fs-extra"),EX=bC(),fX=wC(),hX=UC(),mX=LC(),_S=Ir(),_o=V(),Kt=yr(),o_=A(),n_=He(),{CONFIG_PARAMS:Je}=o_,sc=k(),c_=Q(),MC=Hs(),dS=nt(),rc="clustering",SX=1e4,PC=5;vC.exports={generateNatsConfig:pX,removeNatsConfig:TX};async function pX(e=!1,t=void 0){c_.initSync();let r=c_.get(Je.ROOTPATH),s=tc.join(r,rc,n_.PID_FILES.HUB),n=tc.join(r,rc,n_.PID_FILES.LEAF),i=Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_STREAMS_PATH),o=tc.join(r,rc,n_.NATS_CONFIG_FILES.HUB_SERVER),c=tc.join(r,rc,n_.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 dS.checkNATSServerInstalled()||u_("nats-server dependency is either missing or the wrong version. Run 'npm install' to fix");let T=await _S.listUsers(),p=Kt.getConfigFromFile(Je.CLUSTERING_USER),R=await _S.getClusterUser();(_o.isEmpty(R)||R.active!==!0)&&u_(`Invalid cluster user '${p}'. A valid user with the role 'cluster_user' must be defined under clustering.user in harperdb-config.yaml`),e||(await i_(Je.CLUSTERING_HUBSERVER_CLUSTER_NETWORK_PORT),await i_(Je.CLUSTERING_HUBSERVER_LEAFNODES_NETWORK_PORT),await i_(Je.CLUSTERING_HUBSERVER_NETWORK_PORT),await i_(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT));let O=[],F=[];for(let[ee,Ne]of T.entries())Ne.role.role===o_.ROLE_TYPES_ENUM.CLUSTER_USER&&Ne.active&&(O.push(new mX(Ne.username,MC.decrypt(Ne.hash))),F.push(new hX(Ne.username,MC.decrypt(Ne.hash))));let $=[],{hub_routes:w}=Kt.getClusteringRoutes();if(!_o.isEmptyOrZeroLength(w))for(let ee of w)$.push(`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@${ee.host}:${ee.port}`);let I=new EX(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,F);_==null&&(delete I.tls.ca_file,delete I.leafnodes.tls.ca_file),t=_o.isEmpty(t)?void 0:t.toLowerCase(),(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())&&(await a_.writeJson(o,I),sc.trace(`Hub server config written to ${o}`));let D=`tls://${R.sys_name_encoded}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,z=`tls://${R.uri_encoded_name}:${R.uri_encoded_d_hash}@0.0.0.0:${h}`,M=new fX(Kt.getConfigFromFile(Je.CLUSTERING_LEAFSERVER_NETWORK_PORT),f,n,i,[D],[z],O,F,u,l,_,d);_==null&&delete M.tls.ca_file,(t===void 0||t===o_.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())&&(await a_.writeJson(c,M),sc.trace(`Leaf server config written to ${c}`))}a(pX,"generateNatsConfig");async function i_(e){let t=c_.get(e);return _o.isEmpty(t)&&u_(`port undefined for '${e}'`),await _o.isPortTaken(t)&&u_(`'${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(i_,"isPortAvailable");function u_(e){let t=`Error generating clustering config: ${e}`;sc.error(t),console.error(t),process.exit(1)}a(u_,"generateNatsConfigError");async function TX(e){let{port:t,config_file:r}=dS.getServerConfig(e),{username:s,decrypt_hash:n}=await _S.getClusterUser(),i=0,o=500;for(;i<PC;){try{let l=await dS.createConnection(t,s,n,!1);if(l.protocol.connected===!0){l.close();break}}catch(l){sc.trace(`removeNatsConfig waiting for ${e}. Caught and swallowed error ${l}`)}if(i++,i>=PC)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 _o.async_set_timeout(o*i)}let c="0".repeat(SX),u=tc.join(c_.get(Je.ROOTPATH),rc,r);await a_.writeFile(u,c),await a_.remove(u),sc.notify(e,"started.")}a(TX,"removeNatsConfig")});var xC=m((Mce,GC)=>{"use strict";var Er=Q(),RX=Oa(),ae=A(),nc=He(),Ks=require("path"),{PACKAGE_ROOT:__}=A(),BC=Q(),l_=V(),Eo="/dev/null",gX=Ks.join(__,"launchServiceScripts"),HC=Ks.join(__,"utility/scripts"),AX=Ks.join(HC,ae.HDB_RESTART_SCRIPT),FC=Ks.resolve(__,"dependencies",`${process.platform}-${process.arch}`,nc.NATS_BINARY_NAME);function qC(){let t=RX.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 l_.noBootFile()&&(s[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{name:ae.PROCESS_DESCRIPTORS.HDB,script:ae.LAUNCH_SERVICE_SCRIPTS.MAIN,exec_mode:"fork",env:s,node_args:r,cwd:__}}a(qC,"generateMainServerConfig");var OX=9930;function NX(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",nc.NATS_CONFIG_FILES.HUB_SERVER),r=Ks.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=BC.get(ae.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_HUB+(s!==OX?"-"+s:""),script:FC,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 Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Eo,i.error_file=Eo),i}a(NX,"generateNatsHubServerConfig");var bX=9940;function yX(){Er.initSync(!0);let e=Er.get(ae.CONFIG_PARAMS.ROOTPATH),t=Ks.join(e,"clustering",nc.NATS_CONFIG_FILES.LEAF_SERVER),r=Ks.join(Er.get(ae.HDB_SETTINGS_NAMES.LOG_PATH_KEY),ae.LOG_NAMES.HDB),s=BC.get(ae.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),n=nc.LOG_LEVEL_FLAGS[Er.get(ae.CONFIG_PARAMS.CLUSTERING_LOGLEVEL)]??void 0,i={name:ae.PROCESS_DESCRIPTORS.CLUSTERING_LEAF+(s!==bX?"-"+s:""),script:FC,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 Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(i.out_file=Eo,i.error_file=Eo),i}a(yX,"generateNatsLeafServerConfig");function IX(){Er.initSync();let e=Ks.join(Er.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:gX,autorestart:!1};return Er.get(ae.HDB_SETTINGS_NAMES.LOG_TO_FILE)||(t.out_file=Eo,t.error_file=Eo),t}a(IX,"generateClusteringUpgradeV4ServiceConfig");function wX(){let e={[ae.PROCESS_NAME_ENV_PROP]:ae.PROCESS_DESCRIPTORS.RESTART_HDB};return l_.noBootFile()&&(e[ae.CONFIG_PARAMS.ROOTPATH.toUpperCase()]=l_.getEnvCliRootPath()),{...{name:ae.PROCESS_DESCRIPTORS.RESTART_HDB,exec_mode:"fork",env:e,instances:1,autorestart:!1,cwd:HC},script:AX}}a(wX,"generateRestart");function CX(){return{apps:[qC()]}}a(CX,"generateAllServiceConfigs");GC.exports={generateAllServiceConfigs:CX,generateMainServerConfig:qC,generateRestart:wX,generateNatsHubServerConfig:NX,generateNatsLeafServerConfig:yX,generateClusteringUpgradeV4ServiceConfig:IX}});var rU=m((Gce,tU)=>{"use strict";var Re=A(),UX=V(),ic=ES(),oc=nt(),Es=He(),Cn=xC(),d_=Q(),Ws=k(),DX=Ys(),{startWorker:kC,onMessageFromWorkers:LX}=dt(),MX=lo(),PX=require("util"),$C=require("child_process"),{execFile:vX}=$C,vce=PX.promisify($C.exec),Bce=require("systeminformation"),he;tU.exports={enterPM2Mode:BX,start:_i,stop:fS,reload:YC,restart:KC,list:hS,describe:QC,connect:Qs,kill:xX,startAllServices:kX,startService:mS,getUniqueServicesList:zC,restartAllServices:VX,isServiceRegistered:JC,reloadStopStart:XC,restartHdb:WC,deleteProcess:qX,startClusteringProcesses:jC,startClusteringThreads:eU,isHdbRestartRunning:GX,isClusteringRunning:YX,stopClustering:$X,reloadClustering:KX};var{PACKAGE_ROOT:Hce}=A(),Fce=A(),{loggerWithTag:qce}=Ws,ac=!1;LX(e=>{e.type==="restart"&&d_.initSync(!0)});function BX(){ac=!0}a(BX,"enterPM2Mode");function Qs(){return he||(he=require("pm2")),new Promise((e,t)=>{he.connect((r,s)=>{Ws.setupConsoleLogging(),r&&t(r),e(s)})})}a(Qs,"connect");var Wt,HX=10,VC;function _i(e){if(ac)return FX(e);let t=vX(e.script,e.args.split(" "),e);t.name=e.name,t.on("exit",n=>{let i=Wt.indexOf(t);i>-1&&Wt.splice(i,1),!VC&&n>0&&(e.restarts=(e.restarts||0)+1,e.restarts<HX&&_i(e))});let r={serviceName:e.name.replace(/ /g,"-")};function s(n){let i=d_.get(Re.CONFIG_PARAMS.CLUSTERING_LOGLEVEL),o=/\[\d+][^\[]+\[(\w+)]/g,c,u=0,l;for(;c=o.exec(n);){if(c.index&&Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let E=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",E,r,n.slice(u,c.index).trim())}let[_,d]=c;u=c.index+_.length,l=Es.LOG_LEVELS[d]}if(Es.LOG_LEVEL_HIERARCHY[i]>=Es.LOG_LEVEL_HIERARCHY[l||"info"]){let _=l===Es.LOG_LEVELS.ERR||l===Es.LOG_LEVELS.WRN?Ws.OUTPUTS.STDERR:Ws.OUTPUTS.STDOUT;Ws.logCustomLevel(l||"info",_,r,n.slice(u).trim())}}if(a(s,"extractMessages"),t.stdout.on("data",s),t.stderr.on("data",s),t.unref(),!Wt){Wt=[];let n=a(()=>{VC=!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(_i,"start");function FX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.start(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(FX,"startWithPM2");function fS(e){if(!ac){for(let t of Wt||[])t.name===e&&(Wt.splice(Wt.indexOf(t),1),t.kill());return}return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.stop(e,async(s,n)=>{s&&(he.disconnect(),r(s)),he.delete(e,(i,o)=>{i&&(he.disconnect(),r(s)),he.disconnect(),t(o)})})})}a(fS,"stop");function YC(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.reload(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(YC,"reload");function KC(e){if(!ac)for(let t of Wt||[])t.name===e&&t.kill();return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.restart(e,(s,n)=>{he.disconnect(),t(n)})})}a(KC,"restart");function qX(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.delete(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(qX,"deleteProcess");async function WC(){await _i(Cn.generateRestart())}a(WC,"restartHdb");async function GX(){let e=await hS();for(let t in e)if(e[t].name===Re.PROCESS_DESCRIPTORS.RESTART_HDB)return!0;return!1}a(GX,"isHdbRestartRunning");function hS(){return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}he.list((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(hS,"list");function QC(e){return new Promise(async(t,r)=>{try{await Qs()}catch(s){r(s)}he.describe(e,(s,n)=>{s&&(he.disconnect(),r(s)),he.disconnect(),t(n)})})}a(QC,"describe");function xX(){if(!ac){for(let e of Wt||[])e.kill();Wt=[];return}return new Promise(async(e,t)=>{try{await Qs()}catch(r){t(r)}he.killDaemon((r,s)=>{r&&(he.disconnect(),t(r)),he.disconnect(),e(s)})})}a(xX,"kill");async function kX(){try{await jC(),await eU(),await _i(Cn.generateAllServiceConfigs())}catch(e){throw he.disconnect(),e}}a(kX,"startAllServices");async function mS(e){try{let t;switch(e=e.toLowerCase(),e){case Re.PROCESS_DESCRIPTORS.HDB.toLowerCase():t=Cn.generateMainServerConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_INGEST_SERVICE.toLowerCase():t=Cn.generateNatsIngestServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE.toLowerCase():t=Cn.generateNatsReplyServiceConfig();break;case Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase():t=Cn.generateNatsHubServerConfig(),await _i(t),await ic.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase():t=Cn.generateNatsLeafServerConfig(),await _i(t),await ic.removeNatsConfig(e);return;case Re.PROCESS_DESCRIPTORS.CLUSTERING_UPGRADE_4_0_0.toLowerCase():t=Cn.generateClusteringUpgradeV4ServiceConfig();break;default:throw new Error(`Start service called with unknown service config: ${e}`)}await _i(t)}catch(t){throw he.disconnect(),t}}a(mS,"startService");async function zC(){try{let e=await hS(),t={};for(let r=0,s=e.length;r<s;r++){let n=e[r];t[n.name]===void 0&&(t[n.name]={name:n.name,exec_mode:n.pm2_env.exec_mode})}return t}catch(e){throw he.disconnect(),e}}a(zC,"getUniqueServicesList");async function VX(e=[]){try{let t=!1,r=await zC();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 KC(o))}t&&await XC(Re.PROCESS_DESCRIPTORS.HDB)}catch(t){throw he.disconnect(),t}}a(VX,"restartAllServices");async function JC(e){if(Wt?.find(r=>r.name===e))return!0;let t=await MX.getHDBProcessInfo();return t.core.length&&t.core[0]?.parent==="PM2"}a(JC,"isServiceRegistered");async function XC(e){let t=e===Re.PROCESS_DESCRIPTORS.HDB?d_.get(Re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES):d_.get(Re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES),r=await QC(e),s=UX.isEmptyOrZeroLength(r)?0:r.length;t!==s?(await fS(e),await mS(e)):e===Re.PROCESS_DESCRIPTORS.HDB?await WC():await YC(e)}a(XC,"reloadStopStart");var ZC;async function jC(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];await mS(t)}}a(jC,"startClusteringProcesses");async function eU(){ZC=kC(Re.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE,{name:Re.PROCESS_DESCRIPTORS.CLUSTERING_REPLY_SERVICE}),await oc.createWorkQueueStream(Es.WORK_QUEUE_CONSUMER_NAMES),await oc.updateIngestStreamConsumer(),await oc.updateLocalStreams();let e=await DX.getAllNodeRecords();for(let t=0,r=e.length;t<r;t++)if(e[t].system_info?.hdb_version===Re.PRE_4_0_0_VERSION){Ws.info("Starting clustering upgrade 4.0.0 process"),kC(Re.LAUNCH_SERVICE_SCRIPTS.NODES_UPGRADE_4_0_0,{name:"Upgrade-4-0-0"});break}}a(eU,"startClusteringThreads");async function $X(){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 ZC.terminate();else{let t=Re.CLUSTERING_PROCESSES[e];await fS(t)}}a($X,"stopClustering");async function YX(){for(let e in Re.CLUSTERING_PROCESSES){let t=Re.CLUSTERING_PROCESSES[e];if(await JC(t)===!1)return!1}return!0}a(YX,"isClusteringRunning");async function KX(){await ic.generateNatsConfig(!0),await oc.reloadNATSHub(),await oc.reloadNATSLeaf(),await ic.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase()),await ic.removeNatsConfig(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())}a(KX,"reloadClustering")});var OS=m((kce,cU)=>{"use strict";var WX=require("minimist"),{isMainThread:TS,parentPort:iU}=require("worker_threads"),Fe=A(),{PROCESS_DESCRIPTORS_VALIDATE:cc}=Fe,hs=k(),RS=V(),E_=ES(),fo=nt(),SS=He(),oU=yr(),ms=rU(),sU=lo(),QX=dE(),{restartWorkers:f_,onMessageByType:zX}=dt(),{handleHDBError:JX,hdb_errors:XX}=W(),{HTTP_STATUS_CODES:ZX}=XX,h_=Q();h_.initSync();var uc=`Restarting HarperDB. This may take up to ${Fe.RESTART_TIMEOUT_MS/1e3} seconds.`,jX="Restart is not available from the CLI when running in non-pm2 mode. Either call restart from the API or stop and start HarperDB.",nU="Clustering is not enabled so cannot be restarted",e4="Invalid service",di,Kr;cU.exports={restart:aU,restartService:gS};TS&&zX(Fe.ITC_EVENT_TYPES.RESTART,e=>{e.workerType?gS({service:e.workerType}):aU({operation:"restart"})});async function aU(e){Kr=Object.keys(e).length===0,di=await ms.isServiceRegistered(Fe.HDB_PROC_DESCRIPTOR);let t=WX(process.argv);if(t.service){await gS(t);return}if(Kr&&!di){console.error(jX);return}if(Kr&&console.log(uc),di){ms.enterPM2Mode(),hs.notify(uc);let r=QX(Object.keys(Fe.CONFIG_PARAM_MAP),!0);return RS.isEmptyOrZeroLength(Object.keys(r))||oU.updateConfigValue(void 0,void 0,r,!0,!0),r4(),uc}return TS?(hs.notify(uc),await AS(),setTimeout(()=>{f_()},50)):iU.postMessage({type:Fe.ITC_EVENT_TYPES.RESTART}),uc}a(aU,"restart");async function gS(e){let{service:t}=e;if(Fe.PROCESS_DESCRIPTORS_VALIDATE[t]===void 0)throw JX(new Error,e4,ZX.BAD_REQUEST,void 0,void 0,!0);if(di=await ms.isServiceRegistered(Fe.HDB_PROC_DESCRIPTOR),!TS)return iU.postMessage({type:Fe.ITC_EVENT_TYPES.RESTART,workerType:t}),t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`;let r;switch(t){case cc.clustering:if(!h_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}Kr&&console.log("Restarting clustering"),hs.notify("Restarting clustering"),await AS();break;case cc.clustering_config:case cc["clustering config"]:if(!h_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)){r=nU;break}Kr&&console.log("Restarting clustering_config"),hs.notify("Restarting clustering_config"),await ms.reloadClustering();break;case"custom_functions":case"custom functions":case cc.harperdb:case cc.http_workers:if(Kr&&!di){r=`Restart ${t} is not available from the CLI when running in non-pm2 mode. Either call restart ${t} from the API or stop and start HarperDB.`;break}Kr&&console.log("Restarting http_workers"),hs.notify("Restarting http_workers"),di?await ms.restart(Fe.HDB_PROC_DESCRIPTOR):setTimeout(()=>{f_("http")},200);break;default:r=`Unrecognized service: ${t}`;break}return r?(hs.error(r),Kr&&console.error(r),r):(t==="custom_functions"&&(t="Custom Functions"),`Restarting ${t}`)}a(gS,"restartService");async function t4(){await fo.publishToStream(`${SS.SUBJECT_PREFIXES.TXN}.${SS.WORK_QUEUE_CONSUMER_NAMES.stream_name}`,SS.WORK_QUEUE_CONSUMER_NAMES.stream_name,fo.addNatsMsgHeader({operation:"dummy_msg"},void 0),{operation:"dummy_msg"})}a(t4,"postDummyNatsMsg");async function r4(){await AS(),await ms.restart(Fe.HDB_PROC_DESCRIPTOR),await RS.async_set_timeout(2e3),h_.get(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED)&&await pS(),Kr&&(await fo.closeConnection(),process.exit(0))}a(r4,"restartPM2Mode");async function AS(){if(!oU.getConfigFromFile(Fe.CONFIG_PARAMS.CLUSTERING_ENABLED))return;if((await sU.getHDBProcessInfo()).clustering.length===0)hs.trace("Clustering not running, restart will start clustering services"),await E_.generateNatsConfig(!0),await ms.startClusteringProcesses(),await ms.startClusteringThreads(),await pS(),Kr&&await fo.closeConnection();else{await t4(),await E_.generateNatsConfig(!0),di?(hs.trace("Restart clustering restarting PM2 managed Hub and Leaf servers"),await ms.restart(Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await ms.restart(Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)):(await sU.getHDBProcessInfo()).clustering.forEach(n=>{hs.trace("Restart clustering killing process pid",n.pid),process.kill(n.pid)}),await RS.async_set_timeout(3e3),await pS(),await fo.updateLocalStreams(),Kr&&await fo.closeConnection(),hs.trace("Restart clustering restarting ingest and reply service threads");let t=f_(Fe.LAUNCH_SERVICE_SCRIPTS.NATS_INGEST_SERVICE),r=f_(Fe.LAUNCH_SERVICE_SCRIPTS.NATS_REPLY_SERVICE);await t,await r}}a(AS,"restartClustering");async function pS(){await E_.removeNatsConfig(Fe.PROCESS_DESCRIPTORS.CLUSTERING_HUB),await E_.removeNatsConfig(Fe.PROCESS_DESCRIPTORS.CLUSTERING_LEAF)}a(pS,"removeNatsConfig")});var TU=m((Yce,pU)=>{"use strict";var $ce=require("lodash"),Qt=A(),{handleHDBError:uU,hdb_errors:s4}=W(),{HDB_ERROR_MSGS:n4,HTTP_STATUS_CODES:i4}=s4,NS=k();pU.exports={getRolePermissions:a4};var Ei=Object.create(null),o4=a(e=>({key:e,perms:{}}),"perms_template_obj"),EU=a((e=!1)=>({describe:e,tables:{}}),"schema_perms_template"),fU=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"),bS=a((e=!1,t=!1,r=!1,s=!1,n=!1)=>({attribute_permissions:[],describe:e,...fU(t,r,s,n)}),"table_perms_template"),lU=a((e,t=fU())=>({attribute_name:e,describe:SU(t),[lc]:t[lc],[yS]:t[yS],[IS]:t[IS]}),"attr_perms_template"),_U=a((e,t=!1)=>({attribute_name:e,describe:t,[lc]:t}),"timestamp_attr_perms_template"),{READ:lc,INSERT:yS,UPDATE:IS}=Qt.PERMS_CRUD_ENUM,hU=Object.values(Qt.PERMS_CRUD_ENUM),mU=[lc,yS,IS];function a4(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(Ei[t]&&Ei[t].key===s)return Ei[t].perms;let n=c4(e,r);return Ei[t]?Ei[t].key=s:Ei[t]=o4(s),Ei[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 NS.error(s),NS.debug(r),uU(new Error,n4.OUTDATED_PERMS_TRANSLATION_ERROR,i4.BAD_REQUEST)}else{let s=`There was an error while translating role permissions for role: ${t}.
6
+ ${r.stack}`;throw NS.error(s),uU(new Error)}}}a(a4,"getRolePermissions");function c4(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]=u4(t[i]);return}r[i]=EU(),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=l4(c,u);r[i].describe||hU.forEach(_=>{l[_]&&(r[i].describe=!0)}),r[i].tables[o]=l}else r[i].tables[o]=bS()})):Object.keys(t[i]).forEach(o=>{r[i].tables[o]=bS()})}),r}a(c4,"translateRolePermissions");function u4(e){let t=EU(!0);return Object.keys(e).forEach(r=>{t.tables[r]=bS(!0,!0,!0,!0,!0)}),t}a(u4,"createStructureUserPermissions");function l4(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=_U(d,_[lc])),l[d]=E,l},{}),o=t.primaryKey||t.hash_attribute,c=!!i[o],u=lU(o);return t.attributes.forEach(({attribute:l})=>{if(i[l]){let _=i[l];_.describe=SU(_),n.attribute_permissions.push(_),c||_4(_,u)}else if(l!==o){let _;Qt.TIME_STAMP_NAMES.includes(l)?_=_U(l):_=lU(l),n.attribute_permissions.push(_)}}),c||n.attribute_permissions.push(u),n.describe=dU(n),n}else return e.describe=dU(e),e}a(l4,"getTableAttrPerms");function dU(e){return hU.filter(t=>e[t]).length>0}a(dU,"getSchemaTableDescribePerm");function SU(e){return mU.filter(t=>e[t]).length>0}a(SU,"getAttributeDescribePerm");function _4(e,t){mU.forEach(r=>{e[r]&&!t[r]&&(t[r]=!0,t.describe=!0)})}a(_4,"checkForHashPerms")});var RU={};je(RU,{Resources:()=>m_,keyArrayToString:()=>ho,resetResources:()=>d4,resources:()=>Un});function d4(){return Un=new m_}function ho(e){return Array.isArray(e)?e[e.length-1]===null?e.slice(0,-1).join("/")+"/":e.join("/"):e}var m_,Un,_c=pe(()=>{Vn();m_=class extends Map{static{a(this,"Resources")}isWorker=!0;loginPath;set(t,r,s,n){if(!r)throw new Error("Must provide a resource");t.startsWith("/")&&(t=t.replace(/^\/+/,""));let i={Resource:r,path:t,type:s,hasSubPaths:!1,relativeURL:""},o=super.get(t);if(o&&(o.Resource.databaseName!==r.databaseName||o.Resource.tableName!==r.tableName)&&!n)throw new Error(`Conflicting paths for ${t}`);super.set(t,i);for(let[c,u]of this){let l=2;for(;(l=c.indexOf("/",l))>-1;){let _=this.get(c.slice(0,l));_&&(_.hasSubPaths=!0),l+=2}}}getMatch(t,r){let s=2,n;for(;(s=t.indexOf("/",s))>-1;){let c=t.slice(0,s),u=this.get(c);if(u){if(u.relativeURL=t.slice(s),!u.hasSubPaths)return u;n=u}s+=2}if(n)return n;let i=t.indexOf("?"),o=i>-1?t.slice(0,i):t;return n=this.get(o),n?n.relativeURL=i>-1?t.slice(i):"":n||(n=this.get(""),n&&(n.relativeURL="")),n}getResource(t,r){let s=this.getMatch(t);if(s)return t=s.relativeURL,s.Resource.getResource(this.pathToId(t,s.Resource),r)}call(t,r,s){return Ke(r,async()=>{let n=this.getMatch(t);if(n)return t=n.relativeURL,s(n.Resource,n.path,t)})}setRepresentation(t,r,s){}};a(d4,"resetResources");a(ho,"keyArrayToString")});var fi,wS=pe(()=>{fi=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 dc={};je(dc,{authentication:()=>yU,login:()=>g4,logout:()=>A4,start:()=>R4});async function yU(e,t){let r=e.headers,s=r.authorization,n=r.cookie,i=r.origin,o=[];if(i){let f=e.isOperationsServer?m4?h4:[]:f4?E4:[];if(f.includes(i)||f.includes("*")){if(e.method==="OPTIONS"){let h=new fi([["Access-Control-Allow-Methods","POST, GET, PUT, DELETE, PATCH, OPTIONS"],["Access-Control-Allow-Headers","Accept, Content-Type, Authorization"],["Access-Control-Allow-Origin",i]]);return S_&&h.set("Access-Control-Allow-Credentials","true"),{status:200,headers:h}}o.push("Access-Control-Allow-Origin",i),S_&&o.push("Access-Control-Allow-Credentials","true")}}let c,u;if(S_){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 AU.get(c)}e.session=u||(u={})}e.user=null;let l=a((f,h,T)=>{let p=new R_.AuthAuditLog(f,h,Tt.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===Tt.AUTH_AUDIT_STATUS.SUCCESS?gU.notify(p):gU.error(p)},"authAuditLog"),_;if(s){if(_=mo.get(s),!_){let[f,h]=s.split(" "),T,p;try{switch(f){case"Basic":[T,p]=atob(h).split(":"),_=T||p?await tt.auth(T,p):null;break;case"Bearer":try{_=await(0,T_.validateOperationToken)(h)}catch(R){if(R.message==="invalid token")try{return await(0,T_.validateRefreshToken)(h),{status:-1}}catch{throw R}}break}}catch(R){return T4&&(mo.get(h)||(mo.set(h,h),l(T,Tt.AUTH_AUDIT_STATUS.FAILURE,f))),{status:401,body:zs({error:R.message},e)}}mo.set(s,_),p4&&l(_.username,Tt.AUTH_AUDIT_STATUS.SUCCESS,f)}e.user=_}else u?.user?e.user=await tt.auth(u.user,null,!1):S4&&(e.ip?.includes("127.0.0.1")||e.ip=="::1")&&(e.user=_=await(0,p_.getSuperUser)());S_&&(e.session.update=function(f){if(!c){c=(0,NU.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,AU.put(f)},e.login=async function(f,h){e.user=await tt.auth(f,h),e.session.update({user:e.user.username})},(_&&!u||u?.user?.username!==_?.username)&&r["user-agent"]?.startsWith("Mozilla")&&e.session.update({user:e.user.username}));let d=await t(e);if(!d)return d;d.status===401&&(r["user-agent"]?.startsWith("Mozilla")&&r.accept?.startsWith("text/html")&&Un.loginPath?(d.status=302,d.headers.set("Location",Un.loginPath(e))):d.headers.set("WWW-Authenticate","Basic"));let E=o.length;if(E>0){let f=d.headers;f||(d.headers=f=new fi);for(let h=0;h<E;){let T=o[h++];f.set(T,o[h++])}}return o=null,d}function R4({server:e,port:t}){e.request(yU,{port:t||"all"}),OU||(OU=!0,setInterval(()=>{mo=new Map},Cr.get(Tt.CONFIG_PARAMS.AUTHENTICATION_CACHETTL)).unref(),bU.user.addListener(()=>{mo=new Map}))}async function g4(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 A4(e){if(!e.baseRequest.session)throw new Error("No session for logout");return await e.baseRequest.session.update({user:null}),"Logout successful"}var p_,T_,NU,Cr,Tt,R_,bU,gU,E4,f4,h4,m4,AU,S_,S4,p4,T4,mo,OU,g_=pe(()=>{p_=U(Ir());ss();_c();T_=U($a());Ee();NU=require("uuid"),Cr=U(Q()),Tt=U(A()),R_=U(k());So();bU=U(ba());wS();gU=(0,R_.loggerWithTag)("auth-event");Cr.initSync();E4=Cr.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),f4=Cr.get(Tt.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS),h4=Cr.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORSACCESSLIST),m4=Cr.get(Tt.CONFIG_PARAMS.OPERATIONSAPI_NETWORK_CORS);tt.auth=p_.findAndValidateUser;AU=rt({table:"hdb_session",database:"system",attributes:[{name:"id",isPrimaryKey:!0},{name:"user"}]}),S_=Cr.get(Tt.CONFIG_PARAMS.AUTHENTICATION_ENABLESESSIONS)??!0,S4=Cr.get(Tt.CONFIG_PARAMS.AUTHENTICATION_AUTHORIZELOCAL)??!0,p4=Cr.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)??!1,T4=Cr.get(Tt.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)??!1,mo=new Map;a(yU,"authentication");a(R4,"start");a(g4,"login");a(A4,"logout")});var MU=m((sue,LU)=>{"use strict";var me=require("joi"),IU=require("fs-extra"),wU=require("path"),Xs=Be(),CU=Q(),UU=A(),DU=k(),{hdb_errors:O4}=W(),{HDB_ERROR_MSGS:Dt}=O4,Js=/^[a-zA-Z0-9-_]+$/;LU.exports={getDropCustomFunctionValidator:b4,setCustomFunctionValidator:y4,addComponentValidator:U4,dropCustomFunctionProjectValidator:D4,packageComponentValidator:L4,deployComponentValidator:M4,setComponentFileValidator:I4,getComponentFileValidator:C4,dropComponentFileValidator:w4};function A_(e,t,r){try{let s=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),n=wU.join(s,t);return IU.existsSync(n)?e?t:r.message(Dt.PROJECT_EXISTS):e?r.message(Dt.NO_PROJECT):t}catch(s){return DU.error(s),r.message(Dt.VALIDATION_ERR)}}a(A_,"checkProjectExists");function Ec(e,t){return e.includes("..")?t.message("Invalid file path"):e}a(Ec,"checkFilePath");function N4(e,t,r,s){try{let n=CU.get(UU.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),i=wU.join(n,e,t,r+".js");return IU.existsSync(i)?r:s.message(Dt.NO_FILE)}catch(n){return DU.error(n),s.message(Dt.VALIDATION_ERR)}}a(N4,"checkFileExists");function b4(e){let t=me.object({project:me.string().pattern(Js).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().pattern(Js).custom(N4.bind(null,e.project,e.type)).custom(Ec).required().messages({"string.pattern.base":Dt.BAD_FILE_NAME})});return Xs.validateBySchema(e,t)}a(b4,"getDropCustomFunctionValidator");function y4(e){let t=me.object({project:me.string().pattern(Js).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),type:me.string().valid("helpers","routes").required(),file:me.string().custom(Ec).required(),function_content:me.string().required()});return Xs.validateBySchema(e,t)}a(y4,"setCustomFunctionValidator");function I4(e){let t=me.object({project:me.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(Ec).required(),payload:me.string().allow("").optional(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(I4,"setComponentFileValidator");function w4(e){let t=me.object({project:me.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),file:me.string().custom(Ec).optional()});return Xs.validateBySchema(e,t)}a(w4,"dropComponentFileValidator");function C4(e){let t=me.object({project:me.string().required(),file:me.string().custom(Ec).required(),encoding:me.string().valid("utf8","ASCII","binary","hex","base64","utf16le","latin1","ucs2").optional()});return Xs.validateBySchema(e,t)}a(C4,"getComponentFileValidator");function U4(e){let t=me.object({project:me.string().pattern(Js).custom(A_.bind(null,!1)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(U4,"addComponentValidator");function D4(e){let t=me.object({project:me.string().pattern(Js).custom(A_.bind(null,!0)).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME})});return Xs.validateBySchema(e,t)}a(D4,"dropCustomFunctionProjectValidator");function L4(e){let t=me.object({project:me.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),skip_node_modules:me.boolean()});return Xs.validateBySchema(e,t)}a(L4,"packageComponentValidator");function M4(e){let t=me.object({project:me.string().pattern(Js).required().messages({"string.pattern.base":Dt.BAD_PROJECT_NAME}),payload:me.string().optional().messages({"string.pattern.base":Dt.BAD_PACKAGE}),package:me.string().optional()});return Xs.validateBySchema(e,t)}a(M4,"deployComponentValidator")});var LS=m((iue,BU)=>{"use strict";var ye=require("fs-extra"),CS=require("fast-glob"),Se=require("path"),PU=require("tar-fs"),P4=require("uuid").v4,US=require("normalize-path"),Ss=MU(),Rt=k(),we=A(),Ye=Q(),O_=yr(),v4=V(),{PACKAGE_ROOT:B4}=A(),{handleHDBError:it,hdb_errors:H4}=W(),{HDB_ERROR_MSGS:Dn,HTTP_STATUS_CODES:ot}=H4,F4=Se.join(B4,"application-template"),DS=Se.join(Ye.get(we.HDB_SETTINGS_NAMES.HDB_ROOT_KEY),"tmp");function vU(){let e=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY);if(!(e==="true"||e===!0||e==="TRUE"))throw it(new Error,Dn.NOT_ENABLED,ot.BAD_REQUEST,void 0,void 0,!0)}a(vU,"isCFEnabled");function q4(){Rt.trace("getting custom api status");let e={};try{e={is_enabled:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY),port:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY),directory:Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY)}}catch(t){throw it(new Error,Dn.FUNCTION_STATUS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,t)}return e}a(q4,"customFunctionsStatus");function G4(){Rt.trace("getting custom api endpoints");let e={},t=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY);try{CS.sync(US(`${t}/*`),{onlyDirectories:!0}).forEach(s=>{let n=s.split("/").pop();e[n]={routes:CS.sync(US(`${s}/routes/*.js`)).map(i=>i.split("/").pop().split(".js")[0]),helpers:CS.sync(US(`${s}/helpers/*.js`)).map(i=>i.split("/").pop().split(".js")[0])}})}catch(r){throw it(new Error,Dn.GET_FUNCTIONS,ot.INTERNAL_SERVER_ERROR,Rt.ERR,r)}return e}a(G4,"getCustomFunctions");function x4(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("getting custom api endpoint file content");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e,o=Se.join(r,s,n,i+".js");try{return ye.readFileSync(o,{encoding:"utf8"})}catch(c){throw it(new Error,Dn.GET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(x4,"getCustomFunction");function k4(e){vU(),e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Ss.setCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("setting custom function file content");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i,function_content:o}=e;try{return ye.outputFileSync(Se.join(r,s,n,i+".js"),o),`Successfully updated custom function: ${i}.js`}catch(c){throw it(new Error,Dn.SET_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,c)}}a(k4,"setCustomFunction");function V4(e){e.project&&(e.project=Se.parse(e.project).name),e.file&&(e.file=Se.parse(e.file).name);let t=Ss.getDropCustomFunctionValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("dropping custom function file");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,type:n,file:i}=e;try{return ye.unlinkSync(Se.join(r,s,n,i+".js")),`Successfully deleted custom function: ${i}.js`}catch(o){throw it(new Error,Dn.DROP_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,o)}}a(V4,"dropCustomFunction");function $4(e){vU(),e.project&&(e.project=Se.parse(e.project).name);let t=Ss.addComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("adding component");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;try{let n=Se.join(r,s);return ye.mkdirSync(n,{recursive:!0}),ye.copySync(F4,n),`Successfully added project: ${s}`}catch(n){throw it(new Error,Dn.ADD_FUNCTION,ot.INTERNAL_SERVER_ERROR,Rt.ERR,n)}}a($4,"addComponent");function Y4(e){e.project&&(e.project=Se.parse(e.project).name);let t=Ss.dropCustomFunctionProjectValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);Rt.trace("dropping custom function project");let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e,n=Ye.get(we.CONFIG_PARAMS.APPS);if(!v4.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 O_.updateConfigValue(we.CONFIG_PARAMS.APPS,n),`Successfully deleted project: ${s}`}try{let i=Se.join(r,s);return ye.rmSync(i,{recursive:!0}),`Successfully deleted project: ${s}`}catch(i){throw it(new Error,Dn.DROP_FUNCTION_PROJECT,ot.INTERNAL_SERVER_ERROR,Rt.ERR,i)}}a(Y4,"dropCustomFunctionProject");async function K4(e){e.project&&(e.project=Se.parse(e.project).name);let t=Ss.packageComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s}=e;Rt.trace("packaging component",s);let n;try{n=await ye.realpath(Se.join(r,s))}catch(u){if(u.code!==we.NODE_ERROR_CODES.ENOENT)throw u;try{n=await ye.realpath(Se.join(Ye.get(we.CONFIG_PARAMS.ROOTPATH),"node_modules",s))}catch(l){if(l.code===we.NODE_ERROR_CODES.ENOENT)throw new Error(`Unable to locate project '${s}'`)}}await ye.ensureDir(DS);let i=Se.join(DS,`${s}.tar`),o={};(e.skip_node_modules===!0||e.skip_node_modules==="true")&&(o={ignore:u=>u.includes(Se.join(n,"node_modules"))}),PU.pack(n,o).pipe(ye.createWriteStream(i,{overwrite:!0})),await new Promise(u=>setTimeout(u,2e3));let c=ye.readFileSync(i,{encoding:"base64"});return await ye.remove(i),{project:s,payload:c}}a(K4,"packageComponent");async function W4(e){e.project&&(e.project=Se.parse(e.project).name);let t=Ss.deployComponentValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=Ye.get(we.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),{project:s,payload:n,package:i}=e;if(Rt.trace("deploying component",s),!n&&!i)throw new Error("'payload' or 'package' must be provided");if(n){let o=Se.join(r,s);i="file:"+o,await ye.ensureDir(o);let c,u;do c=Se.join(DS,P4()+".tar"),u=await ye.pathExists(c);while(u);await ye.outputFile(c,n,{encoding:"base64"});let l=ye.createReadStream(c);l.pipe(PU.extract(o)),await new Promise(_=>l.on("end",_)),await ye.unlink(c)}return O_.updateConfigValue(`${s}_package`,i,void 0,!1,!1,!0),`Successfully deployed: ${s}`}a(W4,"deployComponent");async function Q4(){let e=O_.getConfiguration(),t=[];for(let s in e)if(e[s]?.package){if(e[s].package.startsWith("file:"))continue;t.push(Object.assign(e[s],{name:s}))}let r=a(async(s,n)=>{let i=await ye.readdir(s,{withFileTypes:!0});for(let o of i){let c=o.name;if(c.startsWith(".")||c==="node_modules")continue;let u=Se.join(s,c);if(await o.isDirectory()){let l={name:c,entries:[]};n.entries.push(l),await r(u,l)}else{let l=await ye.stat(u),_={name:Se.basename(c),mtime:l.mtime,size:l.size};n.entries.push(_)}}return n},"walk_dir");return r(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),{name:Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT).split(Se.sep).slice(-1).pop(),entries:t})}a(Q4,"getComponents");async function z4(e){let t=Ss.getComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"};try{return await ye.readFile(Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file),r)}catch(s){throw s.code===we.NODE_ERROR_CODES.ENOENT?new Error(`Component file not found '${Se.join(e.project,e.file)}'`):s}}a(z4,"getComponentFile");async function J4(e){let t=Ss.setComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.encoding?{encoding:e.encoding}:{encoding:"utf8"},s=Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),e.project,e.file);return e.payload!==void 0?(await ye.ensureFile(s),await ye.outputFile(s,e.payload,r)):await ye.ensureDir(s),"Successfully set component: "+e.file}a(J4,"setComponentFile");async function X4(e){let t=Ss.dropComponentFileValidator(e);if(t)throw it(t,t.message,ot.BAD_REQUEST);let r=e.file?Se.join(e.project,e.file):e.project,s=Se.join(Ye.get(we.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),r);return await ye.pathExists(s)&&await ye.remove(s),O_.deleteConfigFromFile([e.project]),"Successfully dropped: "+r}a(X4,"dropComponent");BU.exports={customFunctionsStatus:q4,getCustomFunctions:G4,getCustomFunction:x4,setCustomFunction:k4,dropCustomFunction:V4,addComponent:$4,dropCustomFunctionProject:Y4,packageComponent:K4,deployComponent:W4,getComponents:Q4,getComponentFile:z4,setComponentFile:J4,dropComponent:X4}});var MS=m((aue,FU)=>{"use strict";var ps=require("joi"),HU=Be();FU.exports={readTransactionLogValidator:Z4,deleteTransactionLogsBeforeValidator:j4};function Z4(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),from:ps.date().timestamp(),to:ps.date().timestamp(),limit:ps.number().min(1)});return HU.validateBySchema(e,t)}a(Z4,"readTransactionLogValidator");function j4(e){let t=ps.object({schema:ps.string().required(),table:ps.string().required(),timestamp:ps.date().timestamp().required()});return HU.validateBySchema(e,t)}a(j4,"deleteTransactionLogsBeforeValidator")});var b_=m((uue,VU)=>{"use strict";var PS=A(),N_=nt(),qU=V(),GU=Q(),xU=Hs(),{handleHDBError:po,hdb_errors:eZ}=W(),{HTTP_STATUS_CODES:To}=eZ,{readTransactionLogValidator:tZ,deleteTransactionLogsBeforeValidator:rZ}=MS(),kU="This operation relies on clustering and cannot run with it disable.",sZ="Logs successfully deleted from transaction log.",nZ="All logs successfully deleted from transaction log.";VU.exports={readTransactionLog:iZ,deleteTransactionLogsBefore:oZ};async function*iZ(e){let t=tZ(e);if(t)throw po(t,t.message,To.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(PS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw po(new Error,kU,To.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s}=e,n=qU.checkSchemaTableExist(r,s);if(n)throw po(new Error,n,To.NOT_FOUND,void 0,void 0,!0);let i=xU.createNatsTableStreamName(r,s),o=await N_.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===PS.OPERATIONS_ENUM.DELETE&&(l.hash_values=c?.entry?.hash_values),yield l}}a(iZ,"readTransactionLog");async function oZ(e){let t=rZ(e);if(t)throw po(t,t.message,To.BAD_REQUEST,void 0,void 0,!0);if(!GU.get(PS.CONFIG_PARAMS.CLUSTERING_ENABLED))throw po(new Error,kU,To.NOT_FOUND,void 0,void 0,!0);let{schema:r,table:s,timestamp:n}=e,i=qU.checkSchemaTableExist(r,s);if(i)throw po(new Error,i,To.NOT_FOUND,void 0,void 0,!0);let o=xU.createNatsTableStreamName(r,s),{jsm:c}=await N_.getNATSReferences(),u=await N_.getStreamInfo(o),l=new Date(u.state.first_ts).getTime();if(n<=l)return`No transactions exist before: ${n}`;let _=sZ,d,E=new Date(u.state.last_ts).getTime();return n>E?(d=u.state.last_seq+1,_=nZ):d=(await N_.viewStream(o,parseInt(n),1))[0].nats_sequence,await c.streams.purge(o,{seq:d}),_}a(oZ,"deleteTransactionLogsBefore")});var C_=m((_ue,JU)=>{"use strict";var y_=require("joi"),I_=require("path"),$U=require("fs-extra"),{exec:aZ}=require("child_process"),cZ=require("util"),YU=cZ.promisify(aZ),fc=A(),{handleHDBError:Ro,hdb_errors:uZ}=W(),{HTTP_STATUS_CODES:go}=uZ,mc=Q(),lZ=Be(),hc=k();mc.initSync();var vS=mc.get(fc.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY),KU="npm install --omit=dev --json",_Z=`${KU} --dry-run`;JU.exports={installModules:hZ,auditModules:mZ,installAllRootModules:dZ,uninstallRootModule:EZ,linkHarperdb:fZ};async function dZ(e=!1){await w_(),await Sc(e?"npm install --ignore-scripts":"npm install",mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(dZ,"installAllRootModules");async function EZ(e){await Sc(`npm uninstall ${e}`,mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(EZ,"uninstallRootModule");async function fZ(){await w_(),await Sc(`npm link ${fc.PACKAGE_ROOT}`,mc.get(fc.CONFIG_PARAMS.ROOTPATH))}a(fZ,"linkHarperdb");async function Sc(e,t=void 0){let{stdout:r,stderr:s}=await YU(e,{cwd:t});if(s&&!s.includes("Debugger listening"))throw new Error(s.replace(`
7
+ `,""));return hc.trace(r,s),r.replace(`
8
+ `,"")}a(Sc,"runCommand");async function hZ(e){hc.info(`starting installModules for request: ${e}`);let t=zU(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST);let{projects:r,dry_run:s}=e,n=s===!0?_Z:KU;await w_(),await QU(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=I_.join(vS,u),_,d=null;try{let{stdout:E,stderr:f}=await YU(n,{cwd:l});_=E?E.replace(`
9
9
  `,""):null,d=f?f.replace(`
10
- `,""):null}catch(E){E.stderr?i[u].npm_error=WU(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 fc.info(`finished installModules with response ${i}`),i}a(EZ,"installModules");function WU(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
11
- `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(WU,"parseNPMStdErr");async function fZ(e){fc.info(`starting auditModules for request: ${e}`);let t=zU(e);if(t)throw po(t,t.message,To.BAD_REQUEST);let{projects:r}=e;await w_(),await QU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=I_.join(vS,o);s[o]={npm_output:null,npm_error:null};try{let u=await mc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=WU(u.stderr)}}return fc.info(`finished auditModules with response ${s}`),s}a(fZ,"auditModules");async function w_(){try{return await mc("npm -v"),!0}catch{throw po(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",To.BAD_REQUEST,void 0,void 0,!0)}}a(w_,"checkNPMInstalled");async function QU(e){if(!Array.isArray(e)||e.length===0)throw po(new Error,"projects argument must be an array with at least 1 element",To.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=I_.join(vS,i.toString());if(!await $U.pathExists(o)){t.push(i);continue}let u=I_.join(o,"package.json");await $U.pathExists(u)||r.push(i)}if(t.length>0)throw po(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,To.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw po(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,To.BAD_REQUEST,void 0,void 0,!0)}a(QU,"checkProjectPaths");function zU(e){let t=y_.object({projects:y_.array().min(1).items(y_.string()).required(),dry_run:y_.boolean().default(!1)});return cZ.validateBySchema(e,t)}a(zU,"modulesValidator")});var ZU=m((due,XU)=>{"use strict";var BS=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}};XU.exports=BS});var eD=m((fue,jU)=>{"use strict";var HS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};jU.exports=HS});var qS=m((mue,rD)=>{"use strict";var tD=ZU(),hZ=eD(),{HDB_ERROR_MSGS:mZ}=rr(),FS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=mZ.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 tD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new hZ(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 tD(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}};rD.exports=FS});var M_=m((pue,pD)=>{"use strict";var GS=Ar(),U_=gr(),Cr=Ul(),Tc=$n(),xS=zn(),SZ=Zh(),pZ=AI(),Rc=br(),D_=am(),at=x(),TZ=lm(),RZ=Wl(),gZ=Ym(),AZ=Xl(),OZ=Km(),NZ=Wm(),bZ=Jm(),yZ=Zm(),kS=tS(),Qs=V(),IZ=TC(),VS=oS(),iD=OS(),wr=A(),oD=TU(),wZ=ao(),aD=Va(),cD=(g_(),re(_c)),uD=Nr(),dr=LS(),CZ=require("alasql"),lD=b_(),_D=C_(),dD=qS(),{handleHDBError:Qt,hdb_errors:ED}=W(),{HDB_ERROR_MSGS:gt,HTTP_STATUS_CODES:Sc}=ED,M=new Map,fD="delete",wn="insert",zs="read",_i="update",pc="describe",sD=Tc.describeSchema.name,nD=Tc.describeTable.name,hD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},UZ="catchup",DZ="handleGetJob",LZ="handleGetJobsByStartDate",L_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},MZ=[Cr.createTable.name,Cr.createAttribute.name,Cr.dropTable.name,Cr.dropAttribute.name],mD={EXPORT_TO_S3:"export_to_s3",EXPORT_LOCAL:"export_local"},H=class{static{a(this,"permission")}constructor(t,r){this.requires_su=t,this.perms=r}};M.set(GS.insert.name,new H(!1,[wn]));M.set(GS.update.name,new H(!1,[_i]));M.set(GS.upsert.name,new H(!1,[wn,_i]));M.set(U_.searchByConditions.name,new H(!1,[zs]));M.set(U_.searchByHash.name,new H(!1,[zs]));M.set(U_.searchByValue.name,new H(!1,[zs]));M.set(U_.search.name,new H(!1,[zs]));M.set(Cr.createSchema.name,new H(!0,[]));M.set(Cr.createTable.name,new H(!0,[]));M.set(Cr.createAttribute.name,new H(!1,[wn]));M.set(Cr.dropSchema.name,new H(!0,[]));M.set(Cr.dropTable.name,new H(!0,[]));M.set(Cr.dropAttribute.name,new H(!0,[]));M.set(Tc.describeSchema.name,new H(!1,[zs]));M.set(Tc.describeTable.name,new H(!1,[zs]));M.set(xS.deleteRecord.name,new H(!1,[fD]));M.set(Rc.addUser.name,new H(!0,[]));M.set(Rc.alterUser.name,new H(!0,[]));M.set(Rc.dropUser.name,new H(!0,[]));M.set(Rc.listUsersExternal.name,new H(!0,[]));M.set(D_.listRoles.name,new H(!0,[]));M.set(D_.addRole.name,new H(!0,[]));M.set(D_.alterRole.name,new H(!0,[]));M.set(D_.dropRole.name,new H(!0,[]));M.set(TZ.name,new H(!0,[]));M.set(RZ.name,new H(!0,[]));M.set(gZ.name,new H(!0,[]));M.set(AZ.name,new H(!0,[]));M.set(OZ.name,new H(!0,[]));M.set(NZ.name,new H(!0,[]));M.set(kS.setRoutes.name,new H(!0,[]));M.set(kS.getRoutes.name,new H(!0,[]));M.set(kS.deleteRoutes.name,new H(!0,[]));M.set(uD.setConfiguration.name,new H(!0,[]));M.set(bZ.clusterStatus.name,new H(!0,[]));M.set(yZ.name,new H(!0,[]));M.set(VS.getFingerprint.name,new H(!0,[]));M.set(VS.setLicense.name,new H(!0,[]));M.set(xS.deleteFilesBefore.name,new H(!0,[]));M.set(xS.deleteAuditLogsBefore.name,new H(!0,[]));M.set(iD.restart.name,new H(!0,[]));M.set(iD.restartService.name,new H(!0,[]));M.set(SZ.name,new H(!0,[]));M.set(pZ.name,new H(!0,[zs]));M.set(wZ.systemInformation.name,new H(!0,[]));M.set(uD.getConfiguration.name,new H(!0,[]));M.set(lD.readTransactionLog.name,new H(!0,[]));M.set(lD.deleteTransactionLogsBefore.name,new H(!0,[]));M.set(_D.installModules.name,new H(!0,[]));M.set(_D.auditModules.name,new H(!0,[]));M.set(aD.createTokens.name,new H(!1,[]));M.set(aD.refreshOperationToken.name,new H(!1,[]));M.set(cD.login.name,new H(!1,[]));M.set(cD.logout.name,new H(!1,[]));M.set(dr.customFunctionsStatus.name,new H(!0,[]));M.set(dr.getCustomFunctions.name,new H(!0,[]));M.set(dr.getComponents.name,new H(!0,[]));M.set(dr.getComponentFile.name,new H(!0,[]));M.set(dr.setComponentFile.name,new H(!0,[]));M.set(dr.dropComponent.name,new H(!0,[]));M.set(dr.getCustomFunction.name,new H(!0,[]));M.set(dr.setCustomFunction.name,new H(!0,[]));M.set(dr.dropCustomFunction.name,new H(!0,[]));M.set(dr.addComponent.name,new H(!0,[]));M.set(dr.dropCustomFunctionProject.name,new H(!0,[]));M.set(dr.packageComponent.name,new H(!0,[]));M.set(dr.deployComponent.name,new H(!0,[]));M.set(VS.getRegistrationInfo.name,new H(!1,[]));M.set(Rc.userInfo.name,new H(!1,[]));M.set(Tc.describeAll.name,new H(!1,[]));M.set(DZ,new H(!1,[]));M.set(LZ,new H(!0,[]));M.set(UZ,new H(!0,[]));M.set(L_.CSV_DATA_LOAD,new H(!1,[wn,_i]));M.set(L_.CSV_URL_LOAD,new H(!1,[wn,_i]));M.set(L_.CSV_FILE_LOAD,new H(!1,[wn,_i]));M.set(L_.IMPORT_FROM_S3,new H(!1,[wn,_i]));M.set(mD.EXPORT_TO_S3,new H(!0,[]));M.set(mD.EXPORT_LOCAL,new H(!0,[]));M.set(wr.VALID_SQL_OPS_ENUM.DELETE,new H(!1,[fD]));M.set(wr.VALID_SQL_OPS_ENUM.SELECT,new H(!1,[zs]));M.set(wr.VALID_SQL_OPS_ENUM.INSERT,new H(!1,[wn]));M.set(wr.VALID_SQL_OPS_ENUM.UPDATE,new H(!1,[_i]));pD.exports={verifyPerms:vZ,verifyPermsAst:PZ,verifyBulkLoadAttributePerms:HZ};function PZ(e,t,r){if(Qs.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Qs.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),Qt(new Error);if(Qs.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),Qt(new Error);try{let s=new dD,n=new IZ(e),i=n.getSchemas(),o=new Map;if((!i||i.length===0)&&n.affected_attributes&&n.affected_attributes.size>0)throw at.info("No schemas defined in verifyPermsAst(), will not continue."),Qt(new Error);let c=!!t.role.permission.super_user,u=i.includes("system");if(u&&hD[r])throw Qt(new Error,gt.DROP_SYSTEM,Sc.FORBIDDEN);if(c&&!u)return null;let l=oD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof CZ.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 _=SD(t,r,o,s);return _||(o.forEach((d,E)=>{for(let f=0;f<d.length;f++){let h=n.getAttributesBySchemaTableName(E,d[f]),p=YS(t.role.permission,E,d[f]);$S(h,p,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw Qt(s)}}a(PZ,"verifyPermsAst");function vZ(e,t){if(e===null||t===null||e.hdb_user===void 0||e.hdb_user===null)throw at.info("null required parameter in verifyPerms"),Qt(new Error,gt.DEFAULT_INVALID_REQUEST,Sc.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 dD;if(Qs.isEmptyOrZeroLength(e.hdb_user.role)||Qs.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(gt.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(wr.SYSTEM_SCHEMA_NAME)||n===wr.SYSTEM_SCHEMA_NAME;if(_&&hD[r])throw Qt(new Error,gt.DROP_SYSTEM,Sc.FORBIDDEN);if(u&&!_||l===!0&&(r===Cr.createSchema.name||r===Cr.dropSchema.name))return null;if(MZ.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=oD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===sD||r===nD){if(n===wr.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(gt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===sD&&(!d[n]||!d[n][pc]))return c.handleInvalidItem(gt.SCHEMA_NOT_FOUND(n));if(r===nD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][pc]))return c.handleInvalidItem(gt.TABLE_NOT_FOUND(n,i))}}let E=SD(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&&wr.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let p=[],T=d[n].tables[i];T[wr.PERMS_CRUD_ENUM.READ]&&(T.attribute_permissions.length>0?T.attribute_permissions.filter(O=>O[wr.PERMS_CRUD_ENUM.READ]).forEach(O=>{p.push(O.attribute_name)}):p=global.hdb_schema[n][i].attributes.map(g=>g.attribute),e.get_attributes=p)}let f=BZ(e),h=YS(e.hdb_user.role.permission,n,i);return $S(f,h,r,i,n,c,s),c.getPermsResponse()}a(vZ,"verifyPerms");function SD(e,t,r,s,n){if(Qs.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),Qt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||M.get(t).requires_su))return null;if(!M.get(t))throw at.info(`operation ${t} not found.`),Qt(new Error,gt.OP_NOT_FOUND(t),Sc.BAD_REQUEST);if(M.get(t)&&M.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][pc]===!1){s.addInvalidItem(gt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(gt.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[pc]===!1)s.addInvalidItem(gt.TABLE_NOT_FOUND(u,_));else try{let E=[],f=M.get(t).perms;!Qs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let p=f[h],T=d[p];(T==null||T===!1)&&(at.info(`Required ${p} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(p))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=gt.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),Qt(ED.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(SD,"hasPermissions");function $S(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),Qt(new Error);let c=M.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),Qt(new Error);if(Qs.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[pc]===!1){i.addInvalidItem(gt.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(wr.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==zs)throw Qt(new Error,gt.SYSTEM_TIMESTAMP_PERMS_ERR,Sc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(gt.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a($S,"checkAttributePerms");function BZ(e){let t=new Set;try{if(e.action)return t;if(e.operation===wr.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(BZ,"getRecordAttributes");function YS(e,t,r){let s=new Map;if(Qs.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(YS,"getAttributePermissions");function HZ(e,t,r,s,n,i,o){let c=new Set(i),u=YS(e,s,n);$S(c,u,t,n,s,o,r)}a(HZ,"verifyBulkLoadAttributePerms")});var v_=m((Rue,OD)=>{"use strict";OD.exports={evaluateSQL:JZ,processAST:AD,convertSQLToAST:gD,checkASTPermissions:RD};var FZ=Ar(),TD=require("util"),qZ=TD.callbackify(FZ.insert),GZ=gr().search,xZ=jy().update,kZ=TD.callbackify(xZ),VZ=tI().convertDelete,Cn=require("alasql"),$Z=M_(),P_=x(),YZ=Nl(),KZ=V(),gc=A(),{hdb_errors:WZ,handleHDBError:KS}=W(),{HTTP_STATUS_CODES:WS}=WZ;YZ(Cn);var QZ=403,zZ="There was a problem performing this insert. Please check the logs and try again.",QS=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function JZ(e,t){let r=e.parsed_sql_object;if(!r){r=gD(e.sql);let s,n=r.ast.statements[0];if(n instanceof Cn.yy.Insert?s=n.into.databaseid:n instanceof Cn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Cn.yy.Update||n instanceof Cn.yy.Delete?s=n.table.databaseid:P_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Cn.yy.Select)&&KZ.isEmptyOrZeroLength(s))return t("No schema specified",null)}AD(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(JZ,"evaluateSQL");function RD(e,t){let r;try{r=$Z.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(RD,"checkASTPermissions");function gD(e){let t=new QS;if(!e)throw KS(new Error,"The 'sql' parameter is missing from the request body",WS.BAD_REQUEST);try{let r=e.trim(),s=Cn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
12
- `);throw s[1]?KS(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WS.BAD_REQUEST):KS(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WS.BAD_REQUEST)}return t}a(gD,"convertSQLToAST");function AD(e,t,r){try{let s=XZ;if(!e.bypass_auth&&!t.permissions_checked){let i=RD(e,t);if(i&&i.length>0)return r(QZ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case gc.VALID_SQL_OPS_ENUM.SELECT:s=GZ,n=t.ast.statements[0];break;case gc.VALID_SQL_OPS_ENUM.INSERT:s=ZZ;break;case gc.VALID_SQL_OPS_ENUM.UPDATE:s=kZ;break;case gc.VALID_SQL_OPS_ENUM.DELETE:s=VZ;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(AD,"processAST");function XZ(e,t){P_.info(e),t("unknown sql statement")}a(XZ,"nullFunction");function ZZ({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=jZ(i,e.values)}catch(o){return r(o)}qZ(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){P_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(ZZ,"convertInsert");function jZ(e,t){try{return t.map(r=>{if(e.length!==r.length)throw"number of values do not match number of columns in insert";let s={};return r.forEach((n,i)=>{if(n.columnid)throw"cannot use a column in insert value";"value"in n?s[e[i]]=n.value:s[e[i]]=Cn.compile(`SELECT ${n.toString()} AS [${gc.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw P_.error(r),new Error(zZ)}}a(jZ,"createDataObjects")});var zS=m((Aue,bD)=>{"use strict";var{S3:ej,GetObjectCommand:tj}=require("@aws-sdk/client-s3");bD.exports={getFileStreamFromS3:rj,getS3AuthObj:ND};async function rj(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ND(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new tj(r))).Body}a(rj,"getFileStreamFromS3");function ND(e,t,r){return new ej({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ND,"getS3AuthObj")});var B_=m((Nue,vD)=>{"use strict";var wD=gr(),sj=v_(),nj=zS(),{AsyncParser:ij,Transform:oj}=require("json2csv"),Oc=require("stream"),Er=V(),JS=require("fs-extra"),aj=require("path"),Ur=x(),{promisify:CD}=require("util"),Ac=V(),{handleHDBError:Je,hdb_errors:cj}=W(),{HDB_ERROR_MSGS:zt,HTTP_STATUS_CODES:Xe}=cj,{streamAsJSON:uj}=GE(),{Upload:lj}=require("@aws-sdk/lib-storage"),yD=["search_by_value","search_by_hash","sql"],ID=["json","csv"],UD="json",DD="csv",_j="Successfully exported JSON locally.",dj="Successfully exported CSV locally.",Ej=1e3,fj=wD.searchByHash,hj=wD.searchByValue,mj=CD(sj.evaluateSQL),Sj=CD(Oc.finished);vD.exports={export_to_s3:gj,export_local:pj,toCsvStream:LD};async function pj(e){Ur.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=MD(e);if(!Er.isEmpty(t))throw Ur.error(t),Je(new Error,t,Xe.BAD_REQUEST,void 0,void 0,!0);if(Er.isEmpty(e.path))throw Ur.error(zt.MISSING_VALUE("path")),Je(new Error,zt.MISSING_VALUE("path"),Xe.BAD_REQUEST,void 0,void 0,!0);let r=(Er.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(aj.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=Er.buildFolderPath(e.path,r);await Tj(e.path);let n=await PD(e);return await Rj(s,e.format,n)}a(pj,"export_local");async function Tj(e){if(Ur.trace("in confirmPath"),Er.isEmptyOrZeroLength(e))throw Je(new Error,`Invalid path: ${e}`,Xe.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await JS.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,Ur.error(s),Je(new Error,s,Xe.BAD_REQUEST,void 0,void 0,!0)}if(!t.isDirectory()){let r=`path '${e}' is not a directory, please supply a valid folder path`;throw Ur.error(r),Je(new Error,r,Xe.BAD_REQUEST,void 0,void 0,!0)}return!0}a(Tj,"confirmPath");async function Rj(e,t,r){if(Ur.trace("in saveToLocal"),Ac.isEmptyOrZeroLength(e))throw Je(new Error,zt.INVALID_VALUE("file_path"),Xe.BAD_REQUEST,void 0,void 0,!0);if(Ac.isEmptyOrZeroLength(t))throw Je(new Error,zt.INVALID_VALUE("Source format"),Xe.BAD_REQUEST,void 0,void 0,!0);if(Ac.isEmpty(r))throw Je(new Error,zt.NOT_FOUND("Data"),Xe.BAD_REQUEST,void 0,void 0,!0);if(t===UD){let s=JS.createWriteStream(e);return uj(r).pipe(s),await Sj(s),{message:_j,path:e}}else if(t===DD){let s=JS.createWriteStream(e),n=Oc.Readable.from(r),i={},o={objectMode:!0};return await new ij(i,o).fromInput(n).toOutput(s).promise(!1),{message:dj,path:e}}throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST)}a(Rj,"saveToLocal");async function gj(e){if(!e.s3||Object.keys(e.s3).length===0)throw Je(new Error,zt.MISSING_VALUE("S3 object"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Je(new Error,zt.MISSING_VALUE("aws_access_key_id"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Je(new Error,zt.MISSING_VALUE("aws_secret_access_key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.bucket))throw Je(new Error,zt.MISSING_VALUE("bucket"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.key))throw Je(new Error,zt.MISSING_VALUE("key"),Xe.BAD_REQUEST);if(Er.isEmptyOrZeroLength(e.s3.region))throw Je(new Error,zt.MISSING_VALUE("region"),Xe.BAD_REQUEST);let t=MD(e);if(!Er.isEmpty(t))throw Je(new Error,t,Xe.BAD_REQUEST);Ur.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await PD(e)}catch(u){throw Ur.error(u),u}let s,n=await nj.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Oc.PassThrough;if(e.format===DD){i=e.s3.key+".csv";let u=LD(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===UD){i=e.s3.key+".json";let u=new Oc.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%Ej===0&&(u.push(_),_="")}_.length!==0&&u.push(_),u.push("]"),u.push(null)}else throw Je(new Error,zt.INVALID_VALUE("format"),Xe.BAD_REQUEST);return new lj({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(gj,"export_to_s3");function LD(e){let t=Oc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new oj(r,s);return t.pipe(n)}a(LD,"toCsvStream");function MD(e){if(Ur.trace("in exportCoreValidation"),Er.isEmpty(e.format))return"format missing";if(ID.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ID.join(", ")}`;let t=e.search_operation.operation;if(Er.isEmpty(t))return"search_operation.operation missing";if(yD.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yD.join(", ")}`}a(MD,"exportCoreValidation");async function PD(e){Ur.trace("in getRecords");let t,r;if(Ac.isEmpty(e.search_operation)||Ac.isEmptyOrZeroLength(e.search_operation.operation))throw Je(new Error,zt.INVALID_VALUE("Search operation"),Xe.BAD_REQUEST);switch(e.search_operation.operation){case"search_by_value":t=hj;break;case"search_by_hash":t=fj;break;case"sql":t=mj;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Ur.error(r),Je(new Error,r,Xe.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(PD,"getRecords")});var xD={};je(xD,{contentTypes:()=>qD,findBestSerializer:()=>G_,getDeserializer:()=>Ro,registerContentHandlers:()=>ZS,serialize:()=>jS,serializeMessage:()=>Ys});function Aj(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function ZS(e){e.register(Nj,{serializers:[{regex:/^application\/json$/,serializer:H_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new di.EncoderStream(Nc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?q_.Readable.from((0,ms.encodeIter)(t,Nc)):(0,ms.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,XS.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,di.decode)(r))}catch(n){n.statusCode=400,s(n)}})}function G_(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 jS(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=G_(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,F_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,F_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function Ys(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=G_(t);return r=t.serialize=s.serializer.serialize,r(e)}function bj(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 Ro(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||HD(e,s);return o=>bj(o).then(i)}return Et.get(e)?.deserialize||HD(e,s)}function HD(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 yj(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 H_,XS,ms,di,F_,q_,FD,Nc,Et,qD,BD,GD,Oj,Nj,ho=Se(()=>{H_=C(GE()),XS=C(B_()),ms=require("msgpackr"),di=require("cbor-x"),F_=require("zlib"),q_=require("stream");es();FD=require("../index"),Nc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,qD=Et;(0,FD._assignPackageExport)("contentTypes",qD);Et.set("application/json",{serializeStream:H_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});BD=new di.Encoder(Nc);Et.set("application/cbor",{serializeStream(e){return new di.EncoderStream(Nc).end(e)},serialize:BD.encode,deserialize:BD.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?q_.Readable.from((0,ms.encodeIter)(e,Nc)):(0,ms.pack)(e)},serialize:ms.pack,deserialize:ms.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,XS.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return q_.Readable.from(yj(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
10
+ `,""):null}catch(E){E.stderr?i[u].npm_error=WU(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 hc.info(`finished installModules with response ${i}`),i}a(hZ,"installModules");function WU(e){let t='"error": {',r=e.indexOf('"error": {'),s=e.indexOf(`}
11
+ `);return r>-1&&s>-1?JSON.parse(e.substring(r+t.length-1,s+1)):e}a(WU,"parseNPMStdErr");async function mZ(e){hc.info(`starting auditModules for request: ${e}`);let t=zU(e);if(t)throw Ro(t,t.message,go.BAD_REQUEST);let{projects:r}=e;await w_(),await QU(r);let s={};for(let n=0,i=r.length;n<i;n++){let o=r[n],c=I_.join(vS,o);s[o]={npm_output:null,npm_error:null};try{let u=await Sc("npm audit --json",c);s[o].npm_output=JSON.parse(u)}catch(u){s[o].npm_error=WU(u.stderr)}}return hc.info(`finished auditModules with response ${s}`),s}a(mZ,"auditModules");async function w_(){try{return await Sc("npm -v"),!0}catch{throw Ro(new Error,"Unable to install project dependencies: npm is not installed on this instance of HarperDB.",go.BAD_REQUEST,void 0,void 0,!0)}}a(w_,"checkNPMInstalled");async function QU(e){if(!Array.isArray(e)||e.length===0)throw Ro(new Error,"projects argument must be an array with at least 1 element",go.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=I_.join(vS,i.toString());if(!await $U.pathExists(o)){t.push(i);continue}let u=I_.join(o,"package.json");await $U.pathExists(u)||r.push(i)}if(t.length>0)throw Ro(new Error,`Unable to install project dependencies: custom function projects '${t.join(",")}' does not exist.`,go.BAD_REQUEST,void 0,void 0,!0);if(r.length>0)throw Ro(new Error,`Unable to install project dependencies: custom function projects '${r.join(",")}' do not have a package.json file.`,go.BAD_REQUEST,void 0,void 0,!0)}a(QU,"checkProjectPaths");function zU(e){let t=y_.object({projects:y_.array().min(1).items(y_.string()).required(),dry_run:y_.boolean().default(!1)});return lZ.validateBySchema(e,t)}a(zU,"modulesValidator")});var ZU=m((Eue,XU)=>{"use strict";var BS=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}};XU.exports=BS});var eD=m((hue,jU)=>{"use strict";var HS=class{static{a(this,"PermissionAttributeResponseObject")}constructor(t,r=[]){this.attribute_name=t,this.required_permissions=r}};jU.exports=HS});var qS=m((Sue,rD)=>{"use strict";var tD=ZU(),SZ=eD(),{HDB_ERROR_MSGS:pZ}=nr(),FS=class{static{a(this,"PermissionResponseObject")}constructor(){this.error=pZ.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 tD(t,r,s),i=`${t}_${r}`;this.unauthorized_access[i]=n}addUnauthorizedAttributes(t,r,s,n){let i=[];t.forEach(c=>{let u=new SZ(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 tD(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}};rD.exports=FS});var M_=m((Tue,pD)=>{"use strict";var GS=Nr(),U_=Or(),Dr=Ul(),Rc=Wn(),xS=Zn(),TZ=Zh(),RZ=AI(),gc=Ir(),D_=am(),at=k(),gZ=lm(),AZ=Wl(),OZ=Ym(),NZ=Xl(),bZ=Km(),yZ=Wm(),IZ=Jm(),wZ=Zm(),kS=tS(),Zs=V(),CZ=TC(),VS=oS(),iD=OS(),Ur=A(),oD=TU(),UZ=lo(),aD=$a(),cD=(g_(),se(dc)),uD=yr(),fr=LS(),DZ=require("alasql"),lD=b_(),_D=C_(),dD=qS(),{handleHDBError:zt,hdb_errors:ED}=W(),{HDB_ERROR_MSGS:gt,HTTP_STATUS_CODES:pc}=ED,v=new Map,fD="delete",Ln="insert",js="read",hi="update",Tc="describe",sD=Rc.describeSchema.name,nD=Rc.describeTable.name,hD={delete:!0,deleteRecord:!0,update:!0,updateData:!0,dropAttribute:!0,dropTable:!0,dropSchema:!0,upsert:!0,upsertData:!0},LZ="catchup",MZ="handleGetJob",PZ="handleGetJobsByStartDate",L_={CSV_DATA_LOAD:"csvDataLoad",CSV_URL_LOAD:"csvURLLoad",CSV_FILE_LOAD:"csvFileLoad",IMPORT_FROM_S3:"importFromS3"},vZ=[Dr.createTable.name,Dr.createAttribute.name,Dr.dropTable.name,Dr.dropAttribute.name],mD={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}};v.set(GS.insert.name,new q(!1,[Ln]));v.set(GS.update.name,new q(!1,[hi]));v.set(GS.upsert.name,new q(!1,[Ln,hi]));v.set(U_.searchByConditions.name,new q(!1,[js]));v.set(U_.searchByHash.name,new q(!1,[js]));v.set(U_.searchByValue.name,new q(!1,[js]));v.set(U_.search.name,new q(!1,[js]));v.set(Dr.createSchema.name,new q(!0,[]));v.set(Dr.createTable.name,new q(!0,[]));v.set(Dr.createAttribute.name,new q(!1,[Ln]));v.set(Dr.dropSchema.name,new q(!0,[]));v.set(Dr.dropTable.name,new q(!0,[]));v.set(Dr.dropAttribute.name,new q(!0,[]));v.set(Rc.describeSchema.name,new q(!1,[js]));v.set(Rc.describeTable.name,new q(!1,[js]));v.set(xS.deleteRecord.name,new q(!1,[fD]));v.set(gc.addUser.name,new q(!0,[]));v.set(gc.alterUser.name,new q(!0,[]));v.set(gc.dropUser.name,new q(!0,[]));v.set(gc.listUsersExternal.name,new q(!0,[]));v.set(D_.listRoles.name,new q(!0,[]));v.set(D_.addRole.name,new q(!0,[]));v.set(D_.alterRole.name,new q(!0,[]));v.set(D_.dropRole.name,new q(!0,[]));v.set(gZ.name,new q(!0,[]));v.set(AZ.name,new q(!0,[]));v.set(OZ.name,new q(!0,[]));v.set(NZ.name,new q(!0,[]));v.set(bZ.name,new q(!0,[]));v.set(yZ.name,new q(!0,[]));v.set(kS.setRoutes.name,new q(!0,[]));v.set(kS.getRoutes.name,new q(!0,[]));v.set(kS.deleteRoutes.name,new q(!0,[]));v.set(uD.setConfiguration.name,new q(!0,[]));v.set(IZ.clusterStatus.name,new q(!0,[]));v.set(wZ.name,new q(!0,[]));v.set(VS.getFingerprint.name,new q(!0,[]));v.set(VS.setLicense.name,new q(!0,[]));v.set(xS.deleteFilesBefore.name,new q(!0,[]));v.set(xS.deleteAuditLogsBefore.name,new q(!0,[]));v.set(iD.restart.name,new q(!0,[]));v.set(iD.restartService.name,new q(!0,[]));v.set(TZ.name,new q(!0,[]));v.set(RZ.name,new q(!0,[js]));v.set(UZ.systemInformation.name,new q(!0,[]));v.set(uD.getConfiguration.name,new q(!0,[]));v.set(lD.readTransactionLog.name,new q(!0,[]));v.set(lD.deleteTransactionLogsBefore.name,new q(!0,[]));v.set(_D.installModules.name,new q(!0,[]));v.set(_D.auditModules.name,new q(!0,[]));v.set(aD.createTokens.name,new q(!1,[]));v.set(aD.refreshOperationToken.name,new q(!1,[]));v.set(cD.login.name,new q(!1,[]));v.set(cD.logout.name,new q(!1,[]));v.set(fr.customFunctionsStatus.name,new q(!0,[]));v.set(fr.getCustomFunctions.name,new q(!0,[]));v.set(fr.getComponents.name,new q(!0,[]));v.set(fr.getComponentFile.name,new q(!0,[]));v.set(fr.setComponentFile.name,new q(!0,[]));v.set(fr.dropComponent.name,new q(!0,[]));v.set(fr.getCustomFunction.name,new q(!0,[]));v.set(fr.setCustomFunction.name,new q(!0,[]));v.set(fr.dropCustomFunction.name,new q(!0,[]));v.set(fr.addComponent.name,new q(!0,[]));v.set(fr.dropCustomFunctionProject.name,new q(!0,[]));v.set(fr.packageComponent.name,new q(!0,[]));v.set(fr.deployComponent.name,new q(!0,[]));v.set(VS.getRegistrationInfo.name,new q(!1,[]));v.set(gc.userInfo.name,new q(!1,[]));v.set(Rc.describeAll.name,new q(!1,[]));v.set(MZ,new q(!1,[]));v.set(PZ,new q(!0,[]));v.set(LZ,new q(!0,[]));v.set(L_.CSV_DATA_LOAD,new q(!1,[Ln,hi]));v.set(L_.CSV_URL_LOAD,new q(!1,[Ln,hi]));v.set(L_.CSV_FILE_LOAD,new q(!1,[Ln,hi]));v.set(L_.IMPORT_FROM_S3,new q(!1,[Ln,hi]));v.set(mD.EXPORT_TO_S3,new q(!0,[]));v.set(mD.EXPORT_LOCAL,new q(!0,[]));v.set(Ur.VALID_SQL_OPS_ENUM.DELETE,new q(!1,[fD]));v.set(Ur.VALID_SQL_OPS_ENUM.SELECT,new q(!1,[js]));v.set(Ur.VALID_SQL_OPS_ENUM.INSERT,new q(!1,[Ln]));v.set(Ur.VALID_SQL_OPS_ENUM.UPDATE,new q(!1,[hi]));pD.exports={verifyPerms:HZ,verifyPermsAst:BZ,verifyBulkLoadAttributePerms:qZ};function BZ(e,t,r){if(Zs.isEmptyOrZeroLength(e))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Zs.isEmptyOrZeroLength(t))throw at.info("verify_perms_ast has an empty user parameter"),zt(new Error);if(Zs.isEmptyOrZeroLength(r))throw at.info("verify_perms_ast has a null operation parameter"),zt(new Error);try{let s=new dD,n=new CZ(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&&hD[r])throw zt(new Error,gt.DROP_SYSTEM,pc.FORBIDDEN);if(c&&!u)return null;let l=oD.getRolePermissions(t.role);t.role.permission=l,!c&&e instanceof DZ.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 _=SD(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=YS(t.role.permission,E,d[f]);$S(h,T,r,d[f],E,s)}}),s.getPermsResponse())}catch(s){throw zt(s)}}a(BZ,"verifyPermsAst");function HZ(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,gt.DEFAULT_INVALID_REQUEST,pc.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 dD;if(Zs.isEmptyOrZeroLength(e.hdb_user.role)||Zs.isEmptyOrZeroLength(e.hdb_user.role.permission))return at.info(`User ${e.hdb_user.username} has no role or permissions. Please assign the user a valid role.`),c.handleUnauthorizedItem(gt.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(Ur.SYSTEM_SCHEMA_NAME)||n===Ur.SYSTEM_SCHEMA_NAME;if(_&&hD[r])throw zt(new Error,gt.DROP_SYSTEM,pc.FORBIDDEN);if(u&&!_||l===!0&&(r===Dr.createSchema.name||r===Dr.dropSchema.name))return null;if(vZ.indexOf(r)>=0&&(l===!0||Array.isArray(l)))return l===!0||l.indexOf(n)>=0?null:c.handleUnauthorizedItem(`User does not have access to perform '${e.operation}' against schema '${n}'`);let d=oD.getRolePermissions(e.hdb_user.role);if(e.hdb_user.role.permission=d,r===sD||r===nD){if(n===Ur.SYSTEM_SCHEMA_NAME)return c.handleUnauthorizedItem(gt.SCHEMA_PERM_ERROR(n));if(!d.super_user){if(r===sD&&(!d[n]||!d[n][Tc]))return c.handleInvalidItem(gt.SCHEMA_NOT_FOUND(n));if(r===nD&&(!d[n]||!d[n].tables[i]||!d[n].tables[i][Tc]))return c.handleInvalidItem(gt.TABLE_NOT_FOUND(n,i))}}let E=SD(e.hdb_user,r,o,c,s);if(E)return E;if(v.get(r)&&v.get(r).perms.length===0)return null;if(!u&&e.get_attributes&&Ur.SEARCH_WILDCARDS.includes(e.get_attributes[0])){let T=[],p=d[n].tables[i];p[Ur.PERMS_CRUD_ENUM.READ]&&(p.attribute_permissions.length>0?p.attribute_permissions.filter(O=>O[Ur.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=FZ(e),h=YS(e.hdb_user.role.permission,n,i);return $S(f,h,r,i,n,c,s),c.getPermsResponse()}a(HZ,"verifyPerms");function SD(e,t,r,s,n){if(Zs.arrayHasEmptyValues([e,t,r]))throw at.info("hasPermissions has an invalid parameter"),zt(new Error);let i=r.has("system"),o=e.role.permission;if(o.super_user&&(!i||v.get(t).requires_su))return null;if(!v.get(t))throw at.info(`operation ${t} not found.`),zt(new Error,gt.OP_NOT_FOUND(t),pc.BAD_REQUEST);if(v.get(t)&&v.get(t).requires_su)return at.info(`operation ${t} requires SU permissions.`),s.handleUnauthorizedItem(gt.OP_IS_SU_ONLY(t));let c=r.keys();for(let u of c){try{if(u&&!o[u]||o[u][Tc]===!1){s.addInvalidItem(gt.SCHEMA_NOT_FOUND(u));continue}}catch{s.addInvalidItem(gt.SCHEMA_NOT_FOUND(u));continue}let l=r.get(u);for(let _ of l){let d=o[u].tables[_];if(!d||d[Tc]===!1)s.addInvalidItem(gt.TABLE_NOT_FOUND(u,_));else try{let E=[],f=v.get(t).perms;!Zs.isEmpty(n)&&f.includes(n)&&(f=[n]);for(let h=0;h<f.length;h++){let T=f[h],p=d[T];(p==null||p===!1)&&(at.info(`Required ${T} permission not found for ${t} ${n?`${n} `:""}operation in role ${e.role.id}`),E.push(T))}E.length>0&&s.addUnauthorizedTable(u,_,E)}catch(E){let f=gt.UNKNOWN_OP_AUTH_ERROR(t,u,_);throw at.error(f),at.error(E),zt(ED.CHECK_LOGS_WRAPPER(f))}}}return r.size<2?s.getPermsResponse():null}a(SD,"hasPermissions");function $S(e,t,r,s,n,i,o){if(!e||!t)throw at.info("no attributes specified in checkAttributePerms."),zt(new Error);let c=v.get(r).perms;if(!c||c==="")throw at.info(`no permissions found for ${r} in checkAttributePerms().`),zt(new Error);if(Zs.isEmptyOrZeroLength(t))return at.info("No role permissions set (this is OK)."),null;o&&c.includes(o)&&(c=[o]);let u={};for(let _ of e){let d=t.get(_);if(d){if(d[Tc]===!1){i.addInvalidItem(gt.ATTR_NOT_FOUND(n,s,_),n,s);continue}if(c)for(let E of c){if(Ur.TIME_STAMP_NAMES.includes(d.attribute_name)&&E!==js)throw zt(new Error,gt.SYSTEM_TIMESTAMP_PERMS_ERR,pc.FORBIDDEN);d[E]===!1&&(u[d.attribute_name]?u[d.attribute_name].push(E):u[d.attribute_name]=[E])}}else i.addInvalidItem(gt.ATTR_NOT_FOUND(n,s,_),n,s)}let l=Object.keys(u);l.length>0&&i.addUnauthorizedAttributes(l,n,s,u)}a($S,"checkAttributePerms");function FZ(e){let t=new Set;try{if(e.action)return t;if(e.operation===Ur.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(FZ,"getRecordAttributes");function YS(e,t,r){let s=new Map;if(Zs.isEmpty(e))return at.info("no hdb_user specified in getAttributePermissions"),s;if(e.super_user||!t||!r)return s;try{e[t].tables[r].attribute_permissions.forEach(n=>{s.has(n.attribute_name)||s.set(n.attribute_name,n)})}catch{at.info(`No attribute permissions found for schema ${t} and table ${r}.`)}return s}a(YS,"getAttributePermissions");function qZ(e,t,r,s,n,i,o){let c=new Set(i),u=YS(e,s,n);$S(c,u,t,n,s,o,r)}a(qZ,"verifyBulkLoadAttributePerms")});var v_=m((gue,OD)=>{"use strict";OD.exports={evaluateSQL:ZZ,processAST:AD,convertSQLToAST:gD,checkASTPermissions:RD};var GZ=Nr(),TD=require("util"),xZ=TD.callbackify(GZ.insert),kZ=Or().search,VZ=jy().update,$Z=TD.callbackify(VZ),YZ=tI().convertDelete,Mn=require("alasql"),KZ=M_(),P_=k(),WZ=Nl(),QZ=V(),Ac=A(),{hdb_errors:zZ,handleHDBError:KS}=W(),{HTTP_STATUS_CODES:WS}=zZ;WZ(Mn);var JZ=403,XZ="There was a problem performing this insert. Please check the logs and try again.",QS=class{static{a(this,"ParsedSQLObject")}constructor(){this.ast=void 0,this.variant=void 0,this.permissions_checked=!1}};function ZZ(e,t){let r=e.parsed_sql_object;if(!r){r=gD(e.sql);let s,n=r.ast.statements[0];if(n instanceof Mn.yy.Insert?s=n.into.databaseid:n instanceof Mn.yy.Select?s=n.from?n.from[0].databaseid:null:n instanceof Mn.yy.Update||n instanceof Mn.yy.Delete?s=n.table.databaseid:P_.error("AST in evaluateSQL is not a valid SQL type."),!(n instanceof Mn.yy.Select)&&QZ.isEmptyOrZeroLength(s))return t("No schema specified",null)}AD(e,r,(s,n)=>{if(s)return t(s);t(null,n)})}a(ZZ,"evaluateSQL");function RD(e,t){let r;try{r=KZ.verifyPermsAst(t.ast.statements[0],e.hdb_user,t.variant),t.permissions_checked=!0}catch(s){throw s}return r||null}a(RD,"checkASTPermissions");function gD(e){let t=new QS;if(!e)throw KS(new Error,"The 'sql' parameter is missing from the request body",WS.BAD_REQUEST);try{let r=e.trim(),s=Mn.parse(r),n=r.split(" ")[0].toLowerCase();t.ast=s,t.variant=n}catch(r){let s=r.message.split(`
12
+ `);throw s[1]?KS(r,`Invalid SQL at: ${s[1]}. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.`,WS.BAD_REQUEST):KS(r,"We had trouble parsing your request. Please ensure your SQL is valid. Try adding backticks to reserved words and schema table references.",WS.BAD_REQUEST)}return t}a(gD,"convertSQLToAST");function AD(e,t,r){try{let s=jZ;if(!e.bypass_auth&&!t.permissions_checked){let i=RD(e,t);if(i&&i.length>0)return r(JZ,i)}let n={statement:t.ast.statements[0],hdb_user:e.hdb_user};switch(t.variant){case Ac.VALID_SQL_OPS_ENUM.SELECT:s=kZ,n=t.ast.statements[0];break;case Ac.VALID_SQL_OPS_ENUM.INSERT:s=ej;break;case Ac.VALID_SQL_OPS_ENUM.UPDATE:s=$Z;break;case Ac.VALID_SQL_OPS_ENUM.DELETE:s=YZ;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(AD,"processAST");function jZ(e,t){P_.info(e),t("unknown sql statement")}a(jZ,"nullFunction");function ej({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=tj(i,e.values)}catch(o){return r(o)}xZ(n,(o,c)=>{if(o)return r(o);try{delete c.new_attributes,delete c.txn_time}catch(u){P_.error(`Error delete new_attributes from insert response: ${u}`)}r(null,c)})}a(ej,"convertInsert");function tj(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]]=Mn.compile(`SELECT ${n.toString()} AS [${Ac.FUNC_VAL}] FROM ?`)}),s})}catch(r){throw P_.error(r),new Error(XZ)}}a(tj,"createDataObjects")});var zS=m((Oue,bD)=>{"use strict";var{S3:rj,GetObjectCommand:sj}=require("@aws-sdk/client-s3");bD.exports={getFileStreamFromS3:nj,getS3AuthObj:ND};async function nj(e){let{s3:t}=e,r={Bucket:t.bucket,Key:t.key};return(await ND(t.aws_access_key_id,t.aws_secret_access_key,t.region).send(new sj(r))).Body}a(nj,"getFileStreamFromS3");function ND(e,t,r){return new rj({credentials:{accessKeyId:e,secretAccessKey:t},region:r})}a(ND,"getS3AuthObj")});var B_=m((bue,vD)=>{"use strict";var wD=Or(),ij=v_(),oj=zS(),{AsyncParser:aj,Transform:cj}=require("json2csv"),Nc=require("stream"),hr=V(),JS=require("fs-extra"),uj=require("path"),Lr=k(),{promisify:CD}=require("util"),Oc=V(),{handleHDBError:Xe,hdb_errors:lj}=W(),{HDB_ERROR_MSGS:Jt,HTTP_STATUS_CODES:Ze}=lj,{streamAsJSON:_j}=GE(),{Upload:dj}=require("@aws-sdk/lib-storage"),yD=["search_by_value","search_by_hash","sql"],ID=["json","csv"],UD="json",DD="csv",Ej="Successfully exported JSON locally.",fj="Successfully exported CSV locally.",hj=1e3,mj=wD.searchByHash,Sj=wD.searchByValue,pj=CD(ij.evaluateSQL),Tj=CD(Nc.finished);vD.exports={export_to_s3:Oj,export_local:Rj,toCsvStream:LD};async function Rj(e){Lr.trace(`export_local request to path: ${e.path}, filename: ${e.filename}, format: ${e.format}`);let t=MD(e);if(!hr.isEmpty(t))throw Lr.error(t),Xe(new Error,t,Ze.BAD_REQUEST,void 0,void 0,!0);if(hr.isEmpty(e.path))throw Lr.error(Jt.MISSING_VALUE("path")),Xe(new Error,Jt.MISSING_VALUE("path"),Ze.BAD_REQUEST,void 0,void 0,!0);let r=(hr.isEmpty(e.filename)?new Date().getTime():e.filename)+"."+e.format;e.path.endsWith(uj.sep)&&(e.path=e.path.substring(0,e.path.length-1));let s=hr.buildFolderPath(e.path,r);await gj(e.path);let n=await PD(e);return await Aj(s,e.format,n)}a(Rj,"export_local");async function gj(e){if(Lr.trace("in confirmPath"),hr.isEmptyOrZeroLength(e))throw Xe(new Error,`Invalid path: ${e}`,Ze.BAD_REQUEST,void 0,void 0,!0);let t;try{t=await JS.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,Lr.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 Lr.error(r),Xe(new Error,r,Ze.BAD_REQUEST,void 0,void 0,!0)}return!0}a(gj,"confirmPath");async function Aj(e,t,r){if(Lr.trace("in saveToLocal"),Oc.isEmptyOrZeroLength(e))throw Xe(new Error,Jt.INVALID_VALUE("file_path"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Oc.isEmptyOrZeroLength(t))throw Xe(new Error,Jt.INVALID_VALUE("Source format"),Ze.BAD_REQUEST,void 0,void 0,!0);if(Oc.isEmpty(r))throw Xe(new Error,Jt.NOT_FOUND("Data"),Ze.BAD_REQUEST,void 0,void 0,!0);if(t===UD){let s=JS.createWriteStream(e);return _j(r).pipe(s),await Tj(s),{message:Ej,path:e}}else if(t===DD){let s=JS.createWriteStream(e),n=Nc.Readable.from(r),i={},o={objectMode:!0};return await new aj(i,o).fromInput(n).toOutput(s).promise(!1),{message:fj,path:e}}throw Xe(new Error,Jt.INVALID_VALUE("format"),Ze.BAD_REQUEST)}a(Aj,"saveToLocal");async function Oj(e){if(!e.s3||Object.keys(e.s3).length===0)throw Xe(new Error,Jt.MISSING_VALUE("S3 object"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_access_key_id))throw Xe(new Error,Jt.MISSING_VALUE("aws_access_key_id"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.aws_secret_access_key))throw Xe(new Error,Jt.MISSING_VALUE("aws_secret_access_key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.bucket))throw Xe(new Error,Jt.MISSING_VALUE("bucket"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.key))throw Xe(new Error,Jt.MISSING_VALUE("key"),Ze.BAD_REQUEST);if(hr.isEmptyOrZeroLength(e.s3.region))throw Xe(new Error,Jt.MISSING_VALUE("region"),Ze.BAD_REQUEST);let t=MD(e);if(!hr.isEmpty(t))throw Xe(new Error,t,Ze.BAD_REQUEST);Lr.trace(`called export_to_s3 to bucket: ${e.s3.bucket} and query ${e.search_operation.sql}`);let r;try{r=await PD(e)}catch(u){throw Lr.error(u),u}let s,n=await oj.getS3AuthObj(e.s3.aws_access_key_id,e.s3.aws_secret_access_key,e.s3.region),i,o=new Nc.PassThrough;if(e.format===DD){i=e.s3.key+".csv";let u=LD(r);u.on("error",l=>{throw l}),u.pipe(o)}else if(e.format===UD){i=e.s3.key+".json";let u=new Nc.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%hj===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 dj({client:n,params:{Bucket:e.s3.bucket,Key:i,Body:o}}).done()}a(Oj,"export_to_s3");function LD(e){let t=Nc.Readable.from(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator]?e:[e]),r={},s={objectMode:!0},n=new cj(r,s);return t.pipe(n)}a(LD,"toCsvStream");function MD(e){if(Lr.trace("in exportCoreValidation"),hr.isEmpty(e.format))return"format missing";if(ID.indexOf(e.format)<0)return`format invalid. must be one of the following values: ${ID.join(", ")}`;let t=e.search_operation.operation;if(hr.isEmpty(t))return"search_operation.operation missing";if(yD.indexOf(t)<0)return`search_operation.operation must be one of the following values: ${yD.join(", ")}`}a(MD,"exportCoreValidation");async function PD(e){Lr.trace("in getRecords");let t,r;if(Oc.isEmpty(e.search_operation)||Oc.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=Sj;break;case"search_by_hash":t=mj;break;case"sql":t=pj;break;default:throw r=`Operation ${e.search_operation.operation} is not support by export.`,Lr.error(r),Xe(new Error,r,Ze.BAD_REQUEST)}return e.search_operation.hdb_user=e.hdb_user,t(e.search_operation)}a(PD,"getRecords")});var xD={};je(xD,{contentTypes:()=>qD,findBestSerializer:()=>G_,getDeserializer:()=>Ao,registerContentHandlers:()=>ZS,serialize:()=>jS,serializeMessage:()=>zs});function Nj(e){try{return e?.[0]===123?JSON.parse(e):e}catch{return e}}function ZS(e){e.register(yj,{serializers:[{regex:/^application\/json$/,serializer:H_.streamAsJSON},{regex:/^application\/cbor$/,serializer:function(t){return new mi.EncoderStream(bc).end(t)}},{regex:/^application\/(x-)?msgpack$/,serializer:function(t){return(t?.[Symbol.iterator]||t?.[Symbol.asyncIterator])&&!Array.isArray(t)?q_.Readable.from((0,Ts.encodeIter)(t,bc)):(0,Ts.pack)(t)}},{regex:/^text\/csv$/,serializer:function(t){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,XS.toCsvStream)(t)}}]}),e.addContentTypeParser("application/x-msgpack",{parseAs:"buffer"},(t,r,s)=>{try{s(null,(0,Ts.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 G_(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 jS(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=G_(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,F_.createBrotliCompress)({}))),o}n=i.serializer.serialize(e)}return s?(r.headers.set("Content-Encoding","br"),new Promise((i,o)=>(0,F_.brotliCompress)(n,(c,u)=>{c?o(c):i(u)}))):n}function zs(e,t){if(e?.contentType!=null&&e.data!=null)return e;let r=t.serialize;if(r)return r(e);let s=G_(t);return r=t.serialize=s.serializer.serialize,r(e)}function Ij(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 Ao(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||HD(e,s);return o=>Ij(o).then(i)}return Et.get(e)?.deserialize||HD(e,s)}function HD(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 wj(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 H_,XS,Ts,mi,F_,q_,FD,bc,Et,qD,BD,GD,bj,yj,So=pe(()=>{H_=U(GE()),XS=U(B_()),Ts=require("msgpackr"),mi=require("cbor-x"),F_=require("zlib"),q_=require("stream");ss();FD=require("../index"),bc={useRecords:!1,useToJSON:!0};tt.contentType=function(e,t){Et.set(e,t)};Et=new Map,qD=Et;(0,FD._assignPackageExport)("contentTypes",qD);Et.set("application/json",{serializeStream:H_.streamAsJSON,serialize:JSON.stringify,deserialize:JSON.parse,q:.8});BD=new mi.Encoder(bc);Et.set("application/cbor",{serializeStream(e){return new mi.EncoderStream(bc).end(e)},serialize:BD.encode,deserialize:BD.decode,q:1});Et.set("application/x-msgpack",{serializeStream(e){return(e?.[Symbol.iterator]||e?.[Symbol.asyncIterator])&&!Array.isArray(e)?q_.Readable.from((0,Ts.encodeIter)(e,bc)):(0,Ts.pack)(e)},serialize:Ts.pack,deserialize:Ts.unpack,q:.9});Et.set("text/csv",{serializeStream(e){return this.header("Content-Disposition",'attachment; filename="data.csv"'),(0,XS.toCsvStream)(e)},q:.1});Et.set("text/plain",{serialize(e){return e.toString()},deserialize(e){return e.toString()},q:.01});Et.set("text/event-stream",{serializeStream:function(e){return q_.Readable.from(wj(e,this.serialize))},serialize:function(e){if(e.data||e.event){let t="";if(e.event&&(t+="event: "+e.event+`
13
13
  `),e.data){let r=e.data;typeof r=="object"&&(r=JSON.stringify(r)),t+="data: "+r+`
14
14
  `}return e.id&&(t+="id: "+e.id+`
15
15
  `),e.retry&&(t+="retry: "+e.retry+`
16
16
  `),t+`
17
17
  `}else return"data: "+e+`
18
18
 
19
- `},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()}});GD={type:"application/json",serializeStream:H_.streamAsJSON,serialize:JSON.stringify,deserialize:Aj,q:.8};Et.set("*/*",GD);Et.set("",GD);a(Aj,"tryJSONParse");a(ZS,"registerContentHandlers");Oj=require("fastify-plugin"),Nj=Oj(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=G_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(G_,"findBestSerializer");a(jS,"serialize");a(Ys,"serializeMessage");a(bj,"streamToBuffer");a(Ro,"getDeserializer");a(HD,"deserializerUnknownType");a(yj,"transformIterable")});var rp={};je(rp,{start:()=>Cj});async function wj(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&bu(e);let s=performance.now(),n,i=new Eo;try{e.responseHeaders=i;let o=e.url.slice(1),c=tp.getMatch(o);if(!c)return t(e);e.handlerPath=c.path;let u={url:c.relativeURL},l=c.Resource,_=await Ye(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Ro(e.headers["content-type"],!0)(e.body)}catch(p){throw new bc.ClientError(p,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return l.get(u,e);case"POST":return l.post(u,e.data,e);case"PUT":return l.put(u,e.data,e);case"DELETE":return l.delete(u,e);case"PATCH":return l.patch(u,e.data,e);case"OPTIONS":i.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return l.connect(u,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return l.query(u,e.data,e);case"COPY":return l.copy(u,e.headers.destination,e);case"MOVE":return l.move(u,e.headers.destination,e);case"BREW":throw new 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=200,E;if(_==null)d=r==="GET"||r==="HEAD"?404:204;else if(E=e?.lastModified){Ij[0]=E;let p=String.fromCharCode(34,(At[0]&63)+62,(At[0]>>6)+(At[1]<<2&63)+62,(At[1]>>4)+(At[2]<<4&63)+62,(At[2]>>2)+62,(At[3]&63)+62,(At[3]>>6)+(At[4]<<2&63)+62,(At[4]>>4)+(At[5]<<4&63)+62,(At[5]>>2)+62,(At[6]&63)+62,(At[6]>>6)+(At[7]<<2&63)+62,34),T=e.headers["if-none-match"];T&&p==T?(_?.onDone&&_.onDone(),d=304,_=void 0):i.set("ETag",p)}e.createdResource&&(d=201),e.newLocation&&i.set("Location",e.newLocation);let f={status:d,headers:i,body:void 0},h=_?.wasLoadedFromSource?.();return h!==void 0&&(h?f.wasCacheMiss=!0:E&&i.set("Age",Math.round((Date.now()-E)/1e3))),_!==void 0&&(f.body=jS(_,e,f),r==="HEAD"&&(f.body=void 0)),f}catch(o){return o.statusCode||console.error(o),o.statusCode===405&&(o.method&&(o.message+=` to handle HTTP method ${o.method.toUpperCase()||""}`),o.allow&&(o.allow.push("trace","head","options"),i.set("Allow",o.allow.map(c=>c.toUpperCase()).join(", ")))),{status:o.statusCode||500,headers:i,body:Ys(o.toString(),e)}}}function Cj(e){if(kD)return;kD=!0,tp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return wj(r,s)}),e.server.ws(async(r,s,n)=>{VD++,ep||(setTimeout(()=>{console.log("connection count",VD,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),ep=!1},1e3),ep=!0),t(s);let i=new Jr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Ro(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await tp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(Ys(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(Ys(_.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,At,Ij,kD,tp,VD,ep,$D=Se(()=>{ho();bc=C(W());yu();sa();Gn();wS();At=new Uint8Array(8),Ij=new Float64Array(At.buffer,0,1);a(wj,"http");VD=0;a(Cj,"start")});var $_={};je($_,{addAnalyticsListener:()=>ap,recordAction:()=>fi,recordActionBinary:()=>op,setAnalyticsEnabled:()=>Uj});function Uj(e){jD=e}function fi(e,t,r,s,n){if(!jD)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=V_.get(i);o?(o.push(e),o.total+=e):(o=[e],o.total=e,o.description={metric:t,path:r,method:s,type:n},V_.set(i,o)),k_||Dj()}function op(e,t,r,s,n){fi(e?1:0,t,r,s,n)}function ap(e){tL.push(e)}function Dj(){k_=performance.now(),setTimeout(()=>{let e=performance.now()-k_;k_=0;let t=[],r={time:Date.now(),period:e,threadId:Ei.threadId,metrics:t};for(let[n,i]of V_)if(i.sort){i.sort();let o=i.length;t.push(Object.assign(i.description,{median:i[o>>1],mean:i.total/o,p1:i[Math.floor(o*.01)],p10:i[Math.floor(o*.1)],p25:i[Math.floor(o*.25)],p75:i[Math.floor(o*.75)],p90:i[Math.floor(o*.9)],p95:i[Math.floor(o*.95)],p99:i[Math.floor(o*.99)],count:o}))}else t.push(i);let s=process.memoryUsage();t.push({metric:"memory",threadId:Ei.threadId,...s});for(let n of tL)n(t);V_=new Map,Ei.parentPort?Ei.parentPort.postMessage({type:eL,report:r}):sL({report:r})},np).unref()}async function Lj(e,t=6e4){let r=cp(),s;for(let _ of r.primaryStore.getRange({start:x_+"z",end:x_,reverse:!0}))if(_.value?.time){s=_.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o;for(let{key:_,value:d}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!d)continue;if(n){if(_>n+t)break}else n=_;o=_;let{metrics:E}=d;for(let f of E||[]){let{path:h,method:p,type:T,metric:g,count:O,threadId:k,...$}=f;O||(O=1);let U=g+(h?"-"+h:"");p&&(U+="-"+p);let b=i.get(U);if(b){b.count||(b.count=1);let P=b.count;for(let z in $){let F=$[z];typeof F=="number"&&(b[z]=(b[z]*P+F*O)/(P+O))}b.count+=O}else b=Object.assign({period:t},f),i.set(U,b)}await Mj()}for(let[_,d]of i)d.id=x_+Math.round(o)+"-"+_,d.time=o,r.put(d);let c=Date.now(),{idle:u,active:l}=performance.eventLoopUtilization();r.put({id:x_+Math.round(c)+"-main-thread-utilization",metric:"main-thread-utilization",idle:u-YD,active:l-KD,time:c}),YD=u,KD=l}async function Pj(e,t){let r=cp(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function cp(){return WD||(WD=rt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function Bj(){rL=!0;let e=(0,Ic.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Lj(np,e),await Pj(vj,np)},e/2).unref()}function sL(e,t){let r=e.report;r.threadId=t?.threadId||Ei.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(QD+=s.mean*s.count);r.totalBytesProcessed=QD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(zD.get(t))}),zD.set(t,t.performance.eventLoopUtilization())),r.id=(0,ZD.getNextMonotonicTime)(),cp().put(r),rL||Bj(),Hj&&(nL=qj(r))}async function qj(e){if(await nL,!Un){let r=(0,yc.dirname)((0,XD.getLogFilePath)());try{Un=await(0,sp.open)((0,yc.join)(r,"analytics.log"),"r+")}catch{Un=await(0,sp.open)((0,yc.join)(r,"analytics.log"),"w+")}}let t=(await Un.stat()).size;if(t>Fj){let r=Buffer.alloc(t);await Un.read(r,{position:0}),r=r.subarray(r.indexOf(10,r.length/2)+1),await Un.write(r,{position:0}),await Un.truncate(r.length),t=r.length}await Un.write(JSON.stringify(e)+`
20
- `,t)}var Ei,JD,XD,yc,sp,ZD,Ic,ip,V_,jD,k_,np,eL,tL,x_,YD,KD,Mj,vj,WD,rL,QD,zD,Hj,nL,Un,Fj,go=Se(()=>{Ei=require("worker_threads"),JD=C(dt());de();XD=C(x()),yc=require("path"),sp=require("fs/promises"),ZD=C(vt()),Ic=C(Q()),ip=C(A());es();(0,Ic.initSync)();V_=new Map,jD=(0,Ic.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Uj,"setAnalyticsEnabled");a(fi,"recordAction");tt.recordAnalytics=fi;a(op,"recordActionBinary");k_=0,np=1e3,eL="analytics-report",tL=[];a(ap,"addAnalyticsListener");a(Dj,"sendAnalytics");x_="sum-";a(Lj,"aggregation");YD=0,KD=0,Mj=a(()=>new Promise(setImmediate),"rest");a(Pj,"cleanup");vj=36e5;a(cp,"getAnalyticsTable");(0,JD.setChildListenerByType)(eL,sL);a(Bj,"startScheduledTasks");QD=0,zD=new Map,Hj=!1;a(sL,"recordAnalytics");Fj=1e6;a(qj,"logAnalytics")});var up=m(($ue,iL)=>{var{recordAction:Y_,recordActionBinary:Gj}=(go(),re($_)),xj=require("fastify-plugin"),kj=200;iL.exports=xj(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),Y_(o,"TTFB",l,d,_),Gj(n.raw.statusCode<400,"success",l,d,_);let E=kj;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Y_(performance.now()-c,"transfer",l,d,_),Y_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Y_(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Ep=m((Yue,lL)=>{var J_=require("clone"),X_=ve(),Vj=V(),Q_=A(),$j=x(),K_=require("fs"),lp=require("joi"),{string:z_}=lp.types(),{hdb_errors:Yj,handleHDBError:wc}=W(),{HDB_ERROR_MSGS:Kj,HTTP_STATUS_CODES:W_}=Yj,{common_validators:Ao}=rs(),oL=1e9,aL=" is required",Wj=["insert","update","upsert"],_p={database:{presence:!1,format:Ao.schema_format,length:Ao.schema_length},schema:{presence:!1,format:Ao.schema_format,length:Ao.schema_length},table:{presence:!0,format:Ao.schema_format,length:Ao.schema_length},action:{inclusion:{within:Wj,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},Qj={schema:z_.required(),table:z_.required(),action:z_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:zj,AWS_SECRET:Jj,AWS_BUCKET:Xj,AWS_FILE_KEY:Zj,REGION:jj}=Q_.S3_BUCKET_AUTH_KEYS,e5={s3:{presence:!0},[`s3.${zj}`]:{presence:!0,type:"String"},[`s3.${Jj}`]:{presence:!0,type:"String"},[`s3.${Xj}`]:{presence:!0,type:"String"},[`s3.${Zj}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${jj}`]:{presence:!0,type:"String"}},cL=J_(_p);cL.data.presence={message:aL};var uL=J_(_p);uL.file_path.presence={message:aL};var t5=Object.assign(J_(_p),e5),dp=J_(Qj);dp.csv_url=z_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();dp.passthrough_headers=lp.object();function r5(e){let t=X_.validateObject(e,cL);return Z_(e,t)}a(r5,"dataObject");function s5(e){let t=X_.validateBySchema(e,lp.object(dp));return Z_(e,t)}a(s5,"urlObject");function n5(e){let t=X_.validateObject(e,uL);return Z_(e,t)}a(n5,"fileObject");function i5(e){let t=X_.validateObject(e,t5);return Z_(e,t)}a(i5,"s3FileObject");function Z_(e,t){if(!t){let r=Vj.checkGlobalSchemaTable(e.schema,e.table);if(r)return wc(new Error,r,W_.BAD_REQUEST);if(e.operation===Q_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{K_.accessSync(e.file_path,K_.constants.R_OK|K_.constants.F_OK)}catch(s){return s.code===Q_.NODE_ERROR_CODES.ENOENT?wc(s,`No such file or directory ${s.path}`,W_.BAD_REQUEST):s.code===Q_.NODE_ERROR_CODES.EACCES?wc(s,`Permission denied ${s.path}`,W_.BAD_REQUEST):wc(s)}try{let s=K_.statSync(e.file_path).size;if(s>oL)return wc(new Error,Kj.MAX_FILE_SIZE_ERR(s,oL),W_.BAD_REQUEST)}catch(s){$j.error(s),console.error(s)}}}return t}a(Z_,"postValidateChecks");lL.exports={dataObject:r5,urlObject:s5,fileObject:n5,s3FileObject:i5}});var fp=m((Wue,_L)=>{"use strict";var Cc=x(),j_=A();async function o5(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===j_.OPERATIONS_ENUM.INSERT||t.operation===j_.OPERATIONS_ENUM.UPDATE||t.operation===j_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===j_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Cc.info(i.message),i):i.http_resp_msg?(Cc.error(`Error calling operation: ${e.name}`),Cc.error(i.http_resp_msg),i):(Cc.error(`Error calling operation: ${e.name}`),Cc.error(i),i)}}a(o5,"callOperationFunctionAsAwait");_L.exports={callOperationFunctionAsAwait:o5}});var EL=m((zue,dL)=>{"use strict";var hp=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}},mp=class{static{a(this,"BulkLoadDataObject")}constructor(t,r,s,n){this.action=t,this.schema=r,this.table=s,this.data=n}};dL.exports={BulkLoadFileObject:hp,BulkLoadDataObject:mp}});var hL=m((Xue,fL)=>{"use strict";var Sp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};fL.exports=Sp});var Op=m((sle,LL)=>{"use strict";var ed=Ar(),rd=Ep(),a5=require("needle"),Yr=A(),jue=Be(),Oo=V(),{handleHDBError:Fe,hdb_errors:NL}=W(),{HTTP_STATUS_CODES:Ot,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:mi}=NL,No=x(),pp=require("papaparse");Oo.promisifyPapaParse();var Kr=require("fs-extra"),c5=require("path"),{chain:mL}=require("stream-chain"),SL=require("stream-json/streamers/StreamArray"),pL=require("stream-json/utils/Batch"),TL=require("stream-chain/utils/comp"),{finished:RL}=require("stream"),u5=Q(),bL=fp(),l5=zS(),{BulkLoadFileObject:Rp,BulkLoadDataObject:_5}=EL(),gp=qS(),{verifyBulkLoadAttributePerms:yL}=M_(),ele=hL(),tle=nt(),rle=Ms(),{databases:d5}=(de(),re(Ne)),{coerceType:E5}=(sd(),re(Np)),gL="No records parsed from csv file.",hi=`${u5.get("HDB_ROOT")}/tmp`,{schema_regex:f5}=rs(),AL=1024*1024*2,OL=5e3,h5={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};LL.exports={csvDataLoad:m5,csvURLLoad:S5,csvFileLoad:p5,importFromS3:T5};async function m5(e,t){let r=rd.dataObject(e);if(r)throw Fe(r,r.message,Ot.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=CL(e.schema,e.table),i=pp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Tp.bind(null,n),dynamicTyping:!1}),o=new gp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&yL(e.hdb_user.role.permission,this.job_operation_function.name,e.action,e.schema,e.table,i.meta.fields,o);let c=o.getPermsResponse();if(c)throw Fe(new Error,c,Ot.BAD_REQUEST,void 0,void 0,!0);let u=new _5(e.action,e.schema,e.table,i.data);return s=await bL.callOperationFunctionAsAwait(UL,u,null),s.message===gL?gL:DL(s.records,s.number_written)}catch(n){throw Si(n)}}a(m5,"csvDataLoad");async function S5(e){let t=rd.urlObject(e);if(t)throw Fe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${hi}/${r}`;try{await R5(e,r)}catch(n){throw No.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),Fe(n,mi(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,s,Yr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Ap(n);return await td(s),i}catch(n){throw await td(s),Si(n)}}a(S5,"csvURLLoad");async function p5(e){let t=rd.fileObject(e);if(t)throw Fe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Yr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Ap(r)}catch(s){throw Si(s)}}a(p5,"csvFileLoad");async function T5(e){let t=rd.s3FileObject(e);if(t)throw Fe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=c5.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${hi}/${n}`;let i=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await g5(n,e);let o=await Ap(i);return await td(r),o}catch(s){throw await td(r),Si(s)}}a(T5,"importFromS3");async function R5(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await a5("get",e.csv_url,s)}catch(s){let n=`Error downloading CSV file from ${e.csv_url}, status code: ${s.statusCode}. Check the log for more information.`;throw Fe(s,n,s.statusCode,Yr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}O5(r,e.csv_url),await A5(t,r.raw)}a(R5,"downloadCSVFile");async function g5(e,t){try{let r=`${hi}/${e}`;await Kr.mkdirp(hi),await Kr.writeFile(`${hi}/${e}`,"",{flag:"a+"});let s=await Kr.createWriteStream(r),n=await l5.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(){No.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw No.error(ct.S3_DOWNLOAD_ERR+" - "+r),Fe(r,mi(ct.S3_DOWNLOAD_ERR))}}a(g5,"downloadFileFromS3");async function A5(e,t){try{await Kr.mkdirp(hi),await Kr.writeFile(`${hi}/${e}`,t)}catch(r){throw No.error(ct.WRITE_TEMP_FILE_ERR),Fe(r,mi(ct.DEFAULT_BULK_LOAD_ERR))}}a(A5,"writeFileToTempFolder");async function td(e){if(e)try{await Kr.access(e),await Kr.unlink(e)}catch{No.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(td,"deleteTempFile");function O5(e,t){if(e.statusCode!==NL.HTTP_STATUS_CODES.OK)throw Fe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ot.BAD_REQUEST);if(!h5[e.headers["content-type"]])throw Fe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ot.BAD_REQUEST);if(!e.raw)throw Fe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ot.BAD_REQUEST)}a(O5,"validateURLResponse");async function Ap(e){try{let t;switch(e.file_type){case Yr.VALID_S3_FILE_TYPES.CSV:t=await N5(e);break;case Yr.VALID_S3_FILE_TYPES.JSON:t=await b5(e);break;default:throw Fe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Ot.BAD_REQUEST,Yr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return DL(t.records,t.number_written)}catch(t){throw Si(t)}}a(Ap,"fileLoad");async function IL(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 ed.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&yL(e.role_perms,e.op,e.action,e.schema,e.table,c,t),n&&n.resume()}catch(c){let u=Fe(c);r(u)}}a(IL,"validateChunk");async function wL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;Oo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!Oo.isEmpty(c)&&!Oo.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 bL.callOperationFunctionAsAwait(UL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=Fe(c,mi(ct.INSERT_CSV_ERR),Ot.INTERNAL_SERVER_ERROR,Yr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(wL,"insertChunk");async function N5(e){let t={records:0,number_written:0},r=CL(e.schema,e.table);try{let s=new gp,n=Kr.createReadStream(e.file_path,{highWaterMark:AL});n.setEncoding("utf8"),await pp.parsePromise(n,IL.bind(null,e,s),Tp.bind(null,r));let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Ot.BAD_REQUEST);return n=Kr.createReadStream(e.file_path,{highWaterMark:AL}),n.setEncoding("utf8"),await pp.parsePromise(n,wL.bind(null,e,t),Tp.bind(null,r)),n.destroy(),t}catch(s){throw Fe(s,mi(ct.PAPA_PARSE_ERR),Ot.INTERNAL_SERVER_ERROR,Yr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(N5,"callPapaParse");function CL(e,t){let r=d5[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>E5(i,n));return s}a(CL,"createTransformMap");function Tp(e,t,r){let s=e.get(r);return s?s(t):Oo.autoCast(t)}a(Tp,"typeFunction");async function b5(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new gp,n=mL([Kr.createReadStream(e.file_path,{encoding:"utf-8"}),SL.withParser(),c=>c.value,new pL({batchSize:OL}),TL(async c=>{await IL(e,s,r,c)})]);await new Promise((c,u)=>{RL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw Fe(new Error,i,Ot.BAD_REQUEST);let o=mL([Kr.createReadStream(e.file_path,{encoding:"utf-8"}),SL.withParser(),c=>c.value,new pL({batchSize:OL}),TL(async c=>{await wL(e,t,r,c)})]);return await new Promise((c,u)=>{RL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw Fe(s,mi(ct.INSERT_JSON_ERR),Ot.INTERNAL_SERVER_ERROR,Yr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(b5,"insertJson");async function UL(e){let t={};try{e.data&&e.data.length>0&&y5(e.data[0])?t=await I5(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",No.info(t.message))}catch(r){throw Si(r)}return t}a(UL,"callBulkFileLoad");function y5(e){let t=Object.keys(e);for(let r of t)if(!f5.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(y5,"validateColumnNames");async function I5(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ed.insert;break;case"update":i=ed.update;break;case"upsert":i=ed.upsert;break;default:throw Fe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Ot.BAD_REQUEST,Yr.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=Oo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw Si(o)}}a(I5,"bulkFileLoad");function DL(e,t){return`successfully loaded ${t} of ${e} records`}a(DL,"buildResponseMsg");function Si(e){return Fe(e,mi(ct.DEFAULT_BULK_LOAD_ERR),Ot.INTERNAL_SERVER_ERROR,Yr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(Si,"buildTopLevelErrMsg")});var PL=m((ile,ML)=>{"use strict";var bp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};ML.exports=bp});var HL=m((ale,BL)=>{"use strict";var w5=A(),vL=require("moment"),C5=require("uuid").v4,yp=class{static{a(this,"JobObject")}constructor(){this.id=C5(),this.type=void 0,this.start_datetime=vL().valueOf(),this.created_datetime=vL().valueOf(),this.end_datetime=void 0,this.status=w5.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};BL.exports=yp});var Ip=m((ule,VL)=>{"use strict";var U5=require("uuid").v4,GL=Ar(),xL=gr(),D5=os(),L5=zi(),M5=PL(),qe=A(),P5=HL(),v5=Em(),Dr=x(),B5=ha(),bo=V(),{promisify:H5}=require("util"),pi=require("moment"),F5=v_(),nd=Ep(),FL=yf(),{deleteTransactionLogsBeforeValidator:q5}=MS(),{handleHDBError:G5,hdb_errors:x5}=W(),{HTTP_STATUS_CODES:k5}=x5,qL=xL.searchByValue,V5=xL.searchByHash,$5=GL.insert,Y5=H5(F5.evaluateSQL),K5=GL.update;VL.exports={addJob:z5,updateJob:X5,handleGetJob:W5,handleGetJobsByStartDate:Q5,getJobById:kL};async function W5(e){try{let t=await kL(e.id);return bo.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 Dr.error("There was an error getting job",t),new Error(r)}}a(W5,"handleGetJob");async function Q5(e){try{let t=await J5(e);if(Dr.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=pi(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=pi(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 Dr.error(r),new Error(r)}}a(Q5,"handleGetJobsByStartDate");async function z5(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||bo.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Dr.info(_),t.error=_,t}if(!qe.JOB_TYPE_ENUM[e.operation])return Dr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case qe.OPERATIONS_ENUM.CSV_FILE_LOAD:s=nd.fileObject(e);break;case qe.OPERATIONS_ENUM.CSV_URL_LOAD:s=nd.urlObject(e);break;case qe.OPERATIONS_ENUM.CSV_DATA_LOAD:s=nd.dataObject(e);break;case qe.OPERATIONS_ENUM.IMPORT_FROM_S3:s=nd.s3FileObject(e);break;case qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=FL(e,"date");break;case qe.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=FL(e,"timestamp");break;case qe.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=q5(e);break;default:break}if(s)throw G5(s,s.message,k5.BAD_REQUEST,void 0,void 0,!0);let n=new P5;n.type=e.operation===qe.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?qe.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new D5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await qL(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Dr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=U5();try{o=await qL(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Dr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Dr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new B5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await $5(u)}catch(_){return Dr.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,Dr.trace(_)}return t}a(z5,"addJob");async function J5(e){let t=pi(e.from_date,pi.ISO_8601),r=pi(e.to_date,pi.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 M5(s,e.hdb_user);try{return await Y5(n)}catch(i){throw Dr.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(J5,"getJobsInDateRange");async function kL(e){if(bo.isEmptyOrZeroLength(e))return bo.errorizeMessage("Invalid job ID specified.");let t=new L5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await V5(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Dr.error(s),bo.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a(kL,"getJobById");async function X5(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(bo.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===qe.JOB_STATUS_ENUM.COMPLETE||e.status===qe.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=pi().valueOf());let t=new v5(qe.SYSTEM_SCHEMA_NAME,qe.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await K5(t),r}a(X5,"updateJob")});var zL=m((_le,QL)=>{"use strict";var $L=V(),Jt=A(),Z5=require("moment"),id=Op(),od=x(),YL=Ip(),KL=B_(),WL=zn(),j5=dt(),e8=b_(),wp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function t8(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($L.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if($L.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Jt.JOB_TYPE_ENUM.csv_file_load:await Js(e,id.csvFileLoad);break;case Jt.JOB_TYPE_ENUM.csv_url_load:await Js(e,id.csvURLLoad);break;case Jt.JOB_TYPE_ENUM.csv_data_load:await Js(e,id.csvDataLoad);break;case Jt.JOB_TYPE_ENUM.import_from_s3:await Js(e,id.importFromS3);break;case Jt.JOB_TYPE_ENUM.empty_trash:break;case Jt.JOB_TYPE_ENUM.export_local:await Js(e,KL.export_local);break;case Jt.JOB_TYPE_ENUM.export_to_s3:await Js(e,KL.export_to_s3);break;case Jt.JOB_TYPE_ENUM.delete_files_before:case Jt.JOB_TYPE_ENUM.delete_records_before:await Js(e,WL.deleteFilesBefore);break;case Jt.JOB_TYPE_ENUM.delete_audit_logs_before:await Js(e,WL.deleteAuditLogsBefore);break;case Jt.JOB_TYPE_ENUM.delete_transaction_logs_before:await Js(e,e8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(t8,"parseMessage");async function Js(e,t){try{e.job.status=Jt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=Z5().valueOf(),await YL.updateJob(e.job),await r8(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):od.error(`There was an error running ${t.name} job with id ${e.job.id}`),od.error(s),e.job.message=s,e.job.status=Jt.JOB_STATUS_ENUM.ERROR;try{await YL.updateJob(e.job)}catch(n){throw od.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(Js,"runJob");async function r8(e){od.trace("launching job thread:",e),j5.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Jt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(r8,"launchJobThread");QL.exports={parseMessage:t8,RunnerMessage:wp}});var XL=m((Ele,JL)=>{"use strict";var Cp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};JL.exports=Cp});var fM=m((hle,Pp)=>{"use strict";var ld=gr(),Lp=v_(),ad=Op(),Xs=Ul(),cd=$n(),Dc=zn(),s8=Zh(),Uc=br(),ud=am(),Nt=LS(),ut=x(),n8=lm(),i8=Wl(),o8=Ym(),a8=Xl(),c8=Km(),u8=Wm(),l8=Jm(),_8=Zm(),Up=tS(),ZL=B_(),d8=M_(),Mp=Ip(),I=A(),{hdb_errors:Mc,handleHDBError:Lc}=W(),{HTTP_STATUS_CODES:jL}=Mc,Dp=oS(),eM=OS(),uM=require("util"),yo=Ar(),E8=ln(),f8=ao(),tM=zL(),rM=Va(),sM=(g_(),re(_c)),nM=Nr(),iM=b_(),oM=C_(),{setServerUtilities:h8}=(sd(),re(Np)),{CONTEXT:m8}=(Xr(),re(UE)),{_assignPackageExport:S8}=require("../index"),{transformReq:p8}=V(),T8=fp(),aM=ld.searchByHash,R8=ld.searchByValue,g8=uM.promisify(ld.search),A8=uM.promisify(Lp.evaluateSQL),O8={[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=XL();async function lM(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 T8.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return O8[e.body.operation]&&E8.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(lM,"processLocalTransaction");var cM=b8();Pp.exports={chooseOperation:_M,getOperationFunction:dM,operation:EM,processLocalTransaction:lM};h8(Pp.exports);function _M(e){let t;try{t=dM(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=Lp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Lp.checkASTPermissions(e,i);if(o)throw ut.error(`${jL.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Lc(new Error,o,Mc.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=d8.verifyPerms(i,n);if(o)throw ut.error(`${jL.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Lc(new Error,o,Mc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Lc(n,"There was an error when trying to choose an operation path")}return r}a(_M,"chooseOperation");function dM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),cM.has(e.operation))return cM.get(e.operation);throw Lc(new Error,Mc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Mc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(dM,"getOperationFunction");S8("operation",EM);function EM(e,t){e.hdb_user=this[m8]?.user,e.bypass_auth=!t;let r=_M(e);return lM({body:e},r)}a(EM,"operation");async function N8(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 yo.insert(i);break;case I.OPERATIONS_ENUM.UPDATE:o=await yo.update(i);break;case I.OPERATIONS_ENUM.UPSERT:o=await yo.upsert(i);break;case I.OPERATIONS_ENUM.DELETE:o=await Dc.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(N8,"catchup");async function Ss(e){p8(e);let t,r;try{r=await Mp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new tM.RunnerMessage(t,e);return await tM.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),Lc(s,n)}}a(Ss,"executeJob");function b8(){let e=new Map;return e.set(I.OPERATIONS_ENUM.INSERT,new B(yo.insert)),e.set(I.OPERATIONS_ENUM.UPDATE,new B(yo.update)),e.set(I.OPERATIONS_ENUM.UPSERT,new B(yo.upsert)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(ld.searchByConditions)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(aM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_ID,new B(aM)),e.set(I.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(R8)),e.set(I.OPERATIONS_ENUM.SEARCH,new B(g8)),e.set(I.OPERATIONS_ENUM.SQL,new B(A8)),e.set(I.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Ss,ad.csvDataLoad)),e.set(I.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Ss,ad.csvFileLoad)),e.set(I.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Ss,ad.csvURLLoad)),e.set(I.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Ss,ad.importFromS3)),e.set(I.OPERATIONS_ENUM.CREATE_SCHEMA,new B(Xs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_DATABASE,new B(Xs.createSchema)),e.set(I.OPERATIONS_ENUM.CREATE_TABLE,new B(Xs.createTable)),e.set(I.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(Xs.createAttribute)),e.set(I.OPERATIONS_ENUM.DROP_SCHEMA,new B(Xs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_DATABASE,new B(Xs.dropSchema)),e.set(I.OPERATIONS_ENUM.DROP_TABLE,new B(Xs.dropTable)),e.set(I.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(Xs.dropAttribute)),e.set(I.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(cd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(cd.describeSchema)),e.set(I.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(cd.describeTable)),e.set(I.OPERATIONS_ENUM.DESCRIBE_ALL,new B(cd.describeAll)),e.set(I.OPERATIONS_ENUM.DELETE,new B(Dc.deleteRecord)),e.set(I.OPERATIONS_ENUM.ADD_USER,new B(Uc.addUser)),e.set(I.OPERATIONS_ENUM.ALTER_USER,new B(Uc.alterUser)),e.set(I.OPERATIONS_ENUM.DROP_USER,new B(Uc.dropUser)),e.set(I.OPERATIONS_ENUM.LIST_USERS,new B(Uc.listUsersExternal)),e.set(I.OPERATIONS_ENUM.LIST_ROLES,new B(ud.listRoles)),e.set(I.OPERATIONS_ENUM.ADD_ROLE,new B(ud.addRole)),e.set(I.OPERATIONS_ENUM.ALTER_ROLE,new B(ud.alterRole)),e.set(I.OPERATIONS_ENUM.DROP_ROLE,new B(ud.dropRole)),e.set(I.OPERATIONS_ENUM.USER_INFO,new B(Uc.userInfo)),e.set(I.OPERATIONS_ENUM.READ_LOG,new B(n8)),e.set(I.OPERATIONS_ENUM.ADD_NODE,new B(i8)),e.set(I.OPERATIONS_ENUM.UPDATE_NODE,new B(o8)),e.set(I.OPERATIONS_ENUM.REMOVE_NODE,new B(a8)),e.set(I.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(c8)),e.set(I.OPERATIONS_ENUM.PURGE_STREAM,new B(u8)),e.set(I.OPERATIONS_ENUM.SET_CONFIGURATION,new B(nM.setConfiguration)),e.set(I.OPERATIONS_ENUM.CLUSTER_STATUS,new B(l8.clusterStatus)),e.set(I.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(_8)),e.set(I.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Up.setRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Up.getRoutes)),e.set(I.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Up.deleteRoutes)),e.set(I.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Ss,ZL.export_to_s3)),e.set(I.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Ss,Dc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Ss,Dc.deleteFilesBefore)),e.set(I.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Ss,ZL.export_local)),e.set(I.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Mp.handleGetJobsByStartDate)),e.set(I.OPERATIONS_ENUM.GET_JOB,new B(Mp.handleGetJob)),e.set(I.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Dp.getFingerprint)),e.set(I.OPERATIONS_ENUM.SET_LICENSE,new B(Dp.setLicense)),e.set(I.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Dp.getRegistrationInfo)),e.set(I.OPERATIONS_ENUM.RESTART,new B(eM.restart)),e.set(I.OPERATIONS_ENUM.RESTART_SERVICE,new B(eM.restartService)),e.set(I.OPERATIONS_ENUM.CATCHUP,new B(N8)),e.set(I.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(f8.systemInformation)),e.set(I.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Ss,Dc.deleteAuditLogsBefore)),e.set(I.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(s8)),e.set(I.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(rM.createTokens)),e.set(I.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(rM.refreshOperationToken)),e.set(I.OPERATIONS_ENUM.LOGIN,new B(sM.login)),e.set(I.OPERATIONS_ENUM.LOGOUT,new B(sM.logout)),e.set(I.OPERATIONS_ENUM.GET_CONFIGURATION,new B(nM.getConfiguration)),e.set(I.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(Nt.customFunctionsStatus)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(Nt.getCustomFunctions)),e.set(I.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(Nt.getComponentFile)),e.set(I.OPERATIONS_ENUM.GET_COMPONENTS,new B(Nt.getComponents)),e.set(I.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(Nt.setComponentFile)),e.set(I.OPERATIONS_ENUM.DROP_COMPONENT,new B(Nt.dropComponent)),e.set(I.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(Nt.getCustomFunction)),e.set(I.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(Nt.setCustomFunction)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(Nt.dropCustomFunction)),e.set(I.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(Nt.addComponent)),e.set(I.OPERATIONS_ENUM.ADD_COMPONENT,new B(Nt.addComponent)),e.set(I.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(Nt.dropCustomFunctionProject)),e.set(I.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(Nt.packageComponent)),e.set(I.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(Nt.packageComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(Nt.deployComponent)),e.set(I.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(Nt.deployComponent)),e.set(I.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(iM.readTransactionLog)),e.set(I.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Ss,iM.deleteTransactionLogsBefore)),e.set(I.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(oM.installModules)),e.set(I.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(oM.auditModules)),e.set(I.OPERATIONS_ENUM.GET_BACKUP,new B(Xs.getBackup)),e}a(b8,"initializeOperationFunctionMap")});var dd=m((Sle,SM)=>{"use strict";var vp=A(),y8=V(),Pc=x(),{handleHDBError:Bp,hdb_errors:_d}=W(),{isMainThread:I8}=require("worker_threads"),{Readable:w8}=require("stream"),hM=require("os"),C8=require("util"),U8=gm(),D8=C8.promisify(U8.authorize),mM=fM(),{Gzip:L8}=require("zlib");function M8(e){let t=`Found an uncaught exception with message: ${e.message}. ${hM.EOL}Stack: ${e.stack} ${hM.EOL}Terminating ${I8?"HDB":"thread"}.`;console.error(t),Pc.fatal(t),process.exit(1)}a(M8,"handleServerUncaughtException");function P8(e,t,r){if(Pc[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:_d.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(P8,"serverErrorHandler");function v8(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Bp(new Error,"Invalid JSON.",_d.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(y8.isEmpty(e.body.operation)){let s=Bp(new Error,"Request body must include an 'operation' property.",_d.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(v8,"reqBodyValidationHandler");function B8(e,t,r){let s;e.body.operation!==vp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vp.OPERATIONS_ENUM.LOGOUT?D8(e,t).then(n=>{s=n,e.body.hdb_user=s,e.body.hdb_auth_header=e.headers.authorization,r()}).catch(n=>{Pc.warn(n),Pc.warn(`{"ip":"${e.socket.remoteAddress}", "error":"${n.stack}"`);let i=typeof n=="string"?{error:n}:{error:n.message};r(Bp(n,i,_d.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(B8,"authHandler");async function H8(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=mM.chooseOperation(e.body);let n=await mM.processLocalTransaction(e,s);if(n instanceof w8&&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 L8))}return n}catch(n){throw Pc.error(n),n}}a(H8,"handlePostRequest");SM.exports={authHandler:B8,handlePostRequest:H8,handleServerUncaughtException:M8,serverErrorHandler:P8,reqBodyValidationHandler:v8}});var gM=m((Tle,RM)=>{"use strict";var F8=require("fastify-plugin"),{handlePostRequest:pM,authHandler:q8,reqBodyValidationHandler:G8}=dd();async function x8(e){e.decorate("hdbCore",{preValidation:[G8,q8],request:t=>TM(pM(t,response)),requestWithoutAuthentication:(t,r)=>TM(pM(t,r,!0))})}a(x8,"hdbCore");async function TM(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(TM,"convertAsyncIterators");RM.exports=F8(x8)});var OM=m((gle,AM)=>{"use strict";var Hp=require("fs"),Io=Q();Io.initSync();var{CONFIG_PARAMS:vc}=A(),k8=1024*1024*1024;function V8(e){let t=Io.get(vc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Io.get(vc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:k8,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Io.get(vc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Io.get(vc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Io.get(vc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Hp.readFileSync(`${n}`),cert:Hp.readFileSync(i)+(o?`
19
+ `},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()}});GD={type:"application/json",serializeStream:H_.streamAsJSON,serialize:JSON.stringify,deserialize:Nj,q:.8};Et.set("*/*",GD);Et.set("",GD);a(Nj,"tryJSONParse");a(ZS,"registerContentHandlers");bj=require("fastify-plugin"),yj=bj(function(e,t,r){e.addHook("preSerialization",async(s,n)=>{if(n.raw.getHeader("content-type"))return;let{serializer:o,type:c}=G_(s.raw);n.type(c),n.serializer(o.serializeStream||o.serialize)}),r()},{name:"content-type-negotiation"});a(G_,"findBestSerializer");a(jS,"serialize");a(zs,"serializeMessage");a(Ij,"streamToBuffer");a(Ao,"getDeserializer");a(HD,"deserializerUnknownType");a(wj,"transformIterable")});var rp={};je(rp,{start:()=>Dj});async function Uj(e,t){let r=e.headers.accept==="text/event-stream"?"CONNECT":e.method;e.search&&bu(e);let s=new fi;try{e.responseHeaders=s;let n=e.url.slice(1),i=tp.getMatch(n);if(!i)return t(e);e.handlerPath=i.path;let o={url:i.relativeURL},c=i.Resource,u=await Ke(e,()=>{if(r==="POST"||r==="PUT"||r==="PATCH"||r==="QUERY")try{e.data=Ao(e.headers["content-type"],!0)(e.body)}catch(f){throw new yc.ClientError(f,400)}switch(e.authorize=!0,r){case"GET":case"HEAD":return c.get(o,e);case"POST":return c.post(o,e.data,e);case"PUT":return c.put(o,e.data,e);case"DELETE":return c.delete(o,e);case"PATCH":return c.patch(o,e.data,e);case"OPTIONS":s.set("Allow","GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, QUERY, COPY, MOVE");return;case"CONNECT":return c.connect(o,e);case"TRACE":return"HarperDB is the terminating server";case"QUERY":return c.query(o,e.data,e);case"COPY":return c.copy(o,e.headers.destination,e);case"MOVE":return c.move(o,e.headers.destination,e);case"BREW":throw new yc.ClientError("HarperDB is short and stout and can't brew coffee",418);default:throw new yc.ServerError(`Method ${r} is not recognized`,501)}}),l=200,_;if(u==null)l=r==="GET"||r==="HEAD"?404:204;else if(_=e?.lastModified){Cj[0]=_;let f=String.fromCharCode(34,(At[0]&63)+62,(At[0]>>6)+(At[1]<<2&63)+62,(At[1]>>4)+(At[2]<<4&63)+62,(At[2]>>2)+62,(At[3]&63)+62,(At[3]>>6)+(At[4]<<2&63)+62,(At[4]>>4)+(At[5]<<4&63)+62,(At[5]>>2)+62,(At[6]&63)+62,(At[6]>>6)+(At[7]<<2&63)+62,34),h=e.headers["if-none-match"];h&&f==h?(u?.onDone&&u.onDone(),l=304,u=void 0):s.set("ETag",f)}e.createdResource&&(l=201),e.newLocation&&s.set("Location",e.newLocation);let d={status:l,headers:s,body:void 0},E=u?.wasLoadedFromSource?.();return E!==void 0&&(E?d.wasCacheMiss=!0:_&&s.set("Age",Math.round((Date.now()-_)/1e3))),u!==void 0&&(d.body=jS(u,e,d),r==="HEAD"&&(d.body=void 0)),d}catch(n){return n.statusCode||console.error(n),n.statusCode===405&&(n.method&&(n.message+=` to handle HTTP method ${n.method.toUpperCase()||""}`),n.allow&&(n.allow.push("trace","head","options"),s.set("Allow",n.allow.map(i=>i.toUpperCase()).join(", ")))),{status:n.statusCode||500,headers:s,body:zs(n.toString(),e)}}}function Dj(e){if(kD)return;kD=!0,tp=e.resources,e.server.http(async(r,s)=>{if(!r.isWebSocket)return Uj(r,s)}),e.server.ws(async(r,s,n)=>{VD++,ep||(setTimeout(()=>{console.log("connection count",VD,"mem",Math.round(process.memoryUsage().heapUsed/1e6)),ep=!1},1e3),ep=!0),t(s);let i=new jr;r.on("error",console.error);let o;r.on("message",a(function(d){o||(o=Ao(s.headers["content-type"]));let E=o(d);i.push(E)},"message"));let c;r.on("close",()=>{i.emit("close"),c&&c.return()}),await n;let u,l=await tp.call(s.pathname.slice(1),s,(_,d)=>(u=!0,_.connect(i)));if(!u)r.send(zs(`No resource was found to handle ${s.pathname}`,s));else{c=l[Symbol.asyncIterator]();let _;for(;!(_=await c.next()).done;)r.send(zs(_.value,s))}r.close()});function t(r){let s=r.pathname,n=s.lastIndexOf(".");if(n>-1){let i=s.slice(n+1),o=EXTENSION_TYPES[i];o&&(r.headers.accept=o)}}a(t,"startRequest")}var yc,At,Cj,kD,tp,VD,ep,$D=pe(()=>{So();yc=U(W());yu();na();Vn();wS();At=new Uint8Array(8),Cj=new Float64Array(At.buffer,0,1);a(Uj,"http");VD=0;a(Dj,"start")});var $_={};je($_,{addAnalyticsListener:()=>ap,recordAction:()=>pi,recordActionBinary:()=>op,setAnalyticsEnabled:()=>Lj});function Lj(e){jD=e}function pi(e,t,r,s,n){if(!jD)return;let i=t+(r?"-"+r:"");s&&(i+="-"+s);let o=V_.get(i);if(o)if(typeof e=="number"){let c=o.values,u=c.index++;if(u>=c.length){let l=c;o.values=c=new Float32Array(u*2),c.set(l),c.index=u+1}c[u]=Math.random(),o.total+=e}else if(typeof e=="boolean")e&&o.total++,o.count++;else throw new TypeError("Invalid metric value type "+typeof e);else{if(typeof e=="number")o={total:e,values:new Float32Array(4)},o.values.index=1,o.values[0]=e,o.total=e;else if(typeof e=="boolean")o={},o.total=e?1:0,o.count=1;else throw new TypeError("Invalid metric value type "+typeof e);o.description={metric:t,path:r,method:s,type:n},V_.set(i,o)}k_||Mj()}function op(e,t,r,s,n){pi(!!e,t,r,s,n)}function ap(e){tL.push(e)}function Mj(){k_=performance.now(),setTimeout(async()=>{let e=performance.now()-k_;k_=0;let t=[],r={time:Date.now(),period:e,threadId:Si.threadId,metrics:t};for(let[n,i]of V_){if(i.values){let o=i.values.subarray(0,i.values.index);o.sort();let c=o.length,u=0,l=[],_;for(let d of rL){let E=Math.floor(c*d),f=o[E-1];if(E>u){let h=E-u;f===_?l[l.length-1].count+=h:(l.push(h>1?{value:f,count:h}:f),_=f),u=E}}t.push(Object.assign(i.description,{mean:i.total/c,distribution:l,count:c}))}else t.push(i);await sL()}let s=process.memoryUsage();t.push({metric:"memory",threadId:Si.threadId,...s});for(let n of tL)n(t);V_=new Map,Si.parentPort?Si.parentPort.postMessage({type:eL,report:r}):iL({report:r})},np).unref()}async function Pj(e,t=6e4){let r=cp(),s;for(let E of r.primaryStore.getRange({start:x_+"z",end:x_,reverse:!0}))if(E.value?.time){s=E.value.time;break}if(Date.now()-t<s)return;let n,i=new Map,o=new Map,c;for(let{key:E,value:f}of r.primaryStore.getRange({start:s||!1,exclusiveStart:!0,end:1/0})){if(!f)continue;if(n){if(E>n+t)break}else n=E;c=E;let{metrics:h,threadId:T}=f;for(let p of h||[]){let{path:R,method:O,type:F,metric:$,count:w,total:I,distribution:D,...z}=p;w||(w=1);let M=$+(R?"-"+R:"");O&&(M+="-"+O);let ee=i.get(M);if(ee){ee.count||(ee.count=1);let Ne=ee.count;for(let Lt in z){let rr=z[Lt];typeof rr=="number"&&(ee[Lt]=(ee[Lt]*Ne+rr*w)/(Ne+w))}ee.count+=w,I>=0&&(ee.total+=I,ee.ratio=ee.total/ee.count)}else ee=Object.assign({period:t},p),delete ee.distribution,i.set(M,ee);if(D){D=D.map(Lt=>typeof Lt=="number"?{value:Lt,count:1}:Lt);let Ne=o.get(M);Ne?Ne.push(...D):o.set(M,D)}}await sL()}for(let[E,f]of o){let h=i.get(E);f.sort((rr,Zr)=>rr.value>Zr.value?1:-1);let T=h.count-1,p=[],R=0,O=0,F;for(let rr of rL){let Zr=T*rr;for(;R<Zr;)F=f[O++],R+=F.count,O===1&&R--;let Is=f[O>1?O-2:0];F||(F=f[0]),p.push(F.value-(F.value-Is.value)*(R-Zr)/F.count)}let[$,w,I,D,z,M,ee,Ne,Lt]=p;Object.assign(h,{p1:$,p10:w,p25:I,median:D,p75:z,p90:M,p95:ee,p99:Ne,p999:Lt})}let u;for(let[E,f]of i)f.id=x_+Math.round(c)+"-"+E,f.time=c,r.put(f),u=!0;let l=Date.now(),{idle:_,active:d}=performance.eventLoopUtilization();(u||d*10>_)&&r.put({id:x_+Math.round(l)+"-main-thread-utilization",metric:"main-thread-utilization",idle:_-YD,active:d-KD,time:l}),YD=_,KD=d}async function vj(e,t){let r=cp(),s=Date.now()-e;for(let n of r.primaryStore.getKeys({start:!1,end:s}))r.primaryStore.remove(n)}function cp(){return WD||(WD=rt({table:"hdb_analytics",database:"system",expiration:864e3,audit:!1,trackDeletes:!1,attributes:[{name:"id",isPrimaryKey:!0},{name:"action"},{name:"values"}]}))}function Hj(){nL=!0;let e=(0,wc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)*1e3;e&&setInterval(async()=>{await Pj(np,e),await vj(Bj,np)},e/2).unref()}function iL(e,t){let r=e.report;r.threadId=t?.threadId||Si.threadId;for(let s of r.metrics)s.metric==="bytes-sent"&&(QD+=s.mean*s.count);r.totalBytesProcessed=QD,t&&(r.metrics.push({metric:"utilization",...t.performance.eventLoopUtilization(zD.get(t))}),zD.set(t,t.performance.eventLoopUtilization())),r.id=(0,ZD.getNextMonotonicTime)(),cp().put(r),nL||Hj(),Fj&&(oL=Gj(r))}async function Gj(e){if(await oL,!Pn){let r=(0,Ic.dirname)((0,XD.getLogFilePath)());try{Pn=await(0,sp.open)((0,Ic.join)(r,"analytics.log"),"r+")}catch{Pn=await(0,sp.open)((0,Ic.join)(r,"analytics.log"),"w+")}}let t=(await Pn.stat()).size;if(t>qj){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)+`
20
+ `,t)}var Si,JD,XD,Ic,sp,ZD,wc,ip,V_,jD,k_,np,eL,tL,rL,x_,YD,KD,sL,Bj,WD,nL,QD,zD,Fj,oL,Pn,qj,Oo=pe(()=>{Si=require("worker_threads"),JD=U(dt());Ee();XD=U(k()),Ic=require("path"),sp=require("fs/promises"),ZD=U(Bt()),wc=U(Q()),ip=U(A());ss();(0,wc.initSync)();V_=new Map,jD=(0,wc.get)(ip.CONFIG_PARAMS.ANALYTICS_AGGREGATEPERIOD)>-1;a(Lj,"setAnalyticsEnabled");a(pi,"recordAction");tt.recordAnalytics=pi;a(op,"recordActionBinary");k_=0,np=1e3,eL="analytics-report",tL=[];a(ap,"addAnalyticsListener");rL=[.01,.1,.25,.5,.75,.9,.95,.99,.999,1];a(Mj,"sendAnalytics");x_="sum-";a(Pj,"aggregation");YD=0,KD=0,sL=a(()=>new Promise(setImmediate),"rest");a(vj,"cleanup");Bj=36e5;a(cp,"getAnalyticsTable");(0,JD.setChildListenerByType)(eL,iL);a(Hj,"startScheduledTasks");QD=0,zD=new Map,Fj=!1;a(iL,"recordAnalytics");qj=1e6;a(Gj,"logAnalytics")});var up=m((Yue,aL)=>{var{recordAction:Y_,recordActionBinary:xj}=(Oo(),se($_)),kj=require("fastify-plugin"),Vj=200;aL.exports=kj(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),Y_(o,"TTFB",l,d,_),xj(n.raw.statusCode<400,"success",l,d,_);let E=Vj;i?.pipe?(i.on("data",h=>{E+=h.length}),i.on("end",()=>{Y_(performance.now()-c,"transfer",l,d,_),Y_(E,"bytes-sent",l,d,_)})):(E+=i?.length||0,Y_(E,"bytes-sent",l,d,_));let f=o.toFixed(3);n.header("Server-Timing",`db;dur=${f}`)}),r()},{name:"hdb-request-time"})});var Ep=m((Kue,dL)=>{var J_=require("clone"),X_=Be(),$j=V(),Q_=A(),Yj=k(),K_=require("fs"),lp=require("joi"),{string:z_}=lp.types(),{hdb_errors:Kj,handleHDBError:Cc}=W(),{HDB_ERROR_MSGS:Wj,HTTP_STATUS_CODES:W_}=Kj,{common_validators:No}=is(),cL=1e9,uL=" is required",Qj=["insert","update","upsert"],_p={database:{presence:!1,format:No.schema_format,length:No.schema_length},schema:{presence:!1,format:No.schema_format,length:No.schema_length},table:{presence:!0,format:No.schema_format,length:No.schema_length},action:{inclusion:{within:Qj,message:"is required and must be either insert, update, or upsert"}},file_path:{},csv_url:{url:{allowLocal:!0}},data:{},passthrough_headers:{}},zj={schema:z_.required(),table:z_.required(),action:z_.valid("insert","update","upsert")},{AWS_ACCESS_KEY:Jj,AWS_SECRET:Xj,AWS_BUCKET:Zj,AWS_FILE_KEY:jj,REGION:e5}=Q_.S3_BUCKET_AUTH_KEYS,t5={s3:{presence:!0},[`s3.${Jj}`]:{presence:!0,type:"String"},[`s3.${Xj}`]:{presence:!0,type:"String"},[`s3.${Zj}`]:{presence:!0,type:"String"},[`s3.${jj}`]:{presence:!0,type:"String",hasValidFileExt:[".csv",".json"]},[`s3.${e5}`]:{presence:!0,type:"String"}},lL=J_(_p);lL.data.presence={message:uL};var _L=J_(_p);_L.file_path.presence={message:uL};var r5=Object.assign(J_(_p),t5),dp=J_(zj);dp.csv_url=z_.uri().messages({"string.uri":"'csv_url' must be a valid url"}).required();dp.passthrough_headers=lp.object();function s5(e){let t=X_.validateObject(e,lL);return Z_(e,t)}a(s5,"dataObject");function n5(e){let t=X_.validateBySchema(e,lp.object(dp));return Z_(e,t)}a(n5,"urlObject");function i5(e){let t=X_.validateObject(e,_L);return Z_(e,t)}a(i5,"fileObject");function o5(e){let t=X_.validateObject(e,r5);return Z_(e,t)}a(o5,"s3FileObject");function Z_(e,t){if(!t){let r=$j.checkGlobalSchemaTable(e.schema,e.table);if(r)return Cc(new Error,r,W_.BAD_REQUEST);if(e.operation===Q_.OPERATIONS_ENUM.CSV_FILE_LOAD){try{K_.accessSync(e.file_path,K_.constants.R_OK|K_.constants.F_OK)}catch(s){return s.code===Q_.NODE_ERROR_CODES.ENOENT?Cc(s,`No such file or directory ${s.path}`,W_.BAD_REQUEST):s.code===Q_.NODE_ERROR_CODES.EACCES?Cc(s,`Permission denied ${s.path}`,W_.BAD_REQUEST):Cc(s)}try{let s=K_.statSync(e.file_path).size;if(s>cL)return Cc(new Error,Wj.MAX_FILE_SIZE_ERR(s,cL),W_.BAD_REQUEST)}catch(s){Yj.error(s),console.error(s)}}}return t}a(Z_,"postValidateChecks");dL.exports={dataObject:s5,urlObject:n5,fileObject:i5,s3FileObject:o5}});var fp=m((Que,EL)=>{"use strict";var Uc=k(),j_=A();async function a5(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===j_.OPERATIONS_ENUM.INSERT||t.operation===j_.OPERATIONS_ENUM.UPDATE||t.operation===j_.OPERATIONS_ENUM.UPSERT?(delete n.new_attributes,delete n.txn_time):t.operation===j_.OPERATIONS_ENUM.DELETE&&delete n.txn_time,n}catch(i){throw i.message&&typeof i.message=="string"&&i.message.includes("already exists")?(Uc.info(i.message),i):i.http_resp_msg?(Uc.error(`Error calling operation: ${e.name}`),Uc.error(i.http_resp_msg),i):(Uc.error(`Error calling operation: ${e.name}`),Uc.error(i),i)}}a(a5,"callOperationFunctionAsAwait");EL.exports={callOperationFunctionAsAwait:a5}});var hL=m((Jue,fL)=>{"use strict";var hp=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}},mp=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:hp,BulkLoadDataObject:mp}});var SL=m((Zue,mL)=>{"use strict";var Sp=class{static{a(this,"ClusteringOriginObject")}constructor(t,r,s){this.timestamp=t,this.user=r,this.node_name=s}};mL.exports=Sp});var Op=m((nle,PL)=>{"use strict";var ed=Nr(),rd=Ep(),c5=require("needle"),Wr=A(),ele=He(),bo=V(),{handleHDBError:qe,hdb_errors:yL}=W(),{HTTP_STATUS_CODES:Ot,HDB_ERROR_MSGS:ct,CHECK_LOGS_WRAPPER:Ri}=yL,yo=k(),pp=require("papaparse");bo.promisifyPapaParse();var Qr=require("fs-extra"),u5=require("path"),{chain:pL}=require("stream-chain"),TL=require("stream-json/streamers/StreamArray"),RL=require("stream-json/utils/Batch"),gL=require("stream-chain/utils/comp"),{finished:AL}=require("stream"),l5=Q(),IL=fp(),_5=zS(),{BulkLoadFileObject:Rp,BulkLoadDataObject:d5}=hL(),gp=qS(),{verifyBulkLoadAttributePerms:wL}=M_(),tle=SL(),rle=nt(),sle=Hs(),{databases:E5}=(Ee(),se(be)),{coerceType:f5}=(sd(),se(Np)),OL="No records parsed from csv file.",Ti=`${l5.get("HDB_ROOT")}/tmp`,{schema_regex:h5}=is(),NL=1024*1024*2,bL=5e3,m5={"text/csv":!0,"application/octet-stream":!0,"text/plain":!0,"application/vnd.ms-excel":!0};PL.exports={csvDataLoad:S5,csvURLLoad:p5,csvFileLoad:T5,importFromS3:R5};async function S5(e,t){let r=rd.dataObject(e);if(r)throw qe(r,r.message,Ot.BAD_REQUEST,void 0,void 0,!0);let s={};try{let n=DL(e.schema,e.table),i=pp.parse(e.data,{header:!0,skipEmptyLines:!0,transform:Tp.bind(null,n),dynamicTyping:!1}),o=new gp;e.hdb_user&&e.hdb_user.role&&e.hdb_user.role.permission&&e.hdb_user.role.permission.super_user!==!0&&wL(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,Ot.BAD_REQUEST,void 0,void 0,!0);let u=new d5(e.action,e.schema,e.table,i.data);return s=await IL.callOperationFunctionAsAwait(LL,u,null),s.message===OL?OL:ML(s.records,s.number_written)}catch(n){throw gi(n)}}a(S5,"csvDataLoad");async function p5(e){let t=rd.urlObject(e);if(t)throw qe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=`${Date.now()}.csv`,s=`${Ti}/${r}`;try{await g5(e,r)}catch(n){throw yo.error(ct.DOWNLOAD_FILE_ERR(r)+" - "+n),qe(n,Ri(ct.DOWNLOAD_FILE_ERR(r)))}try{let n=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,s,Wr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission),i=await Ap(n);return await td(s),i}catch(n){throw await td(s),gi(n)}}a(p5,"csvURLLoad");async function T5(e){let t=rd.fileObject(e);if(t)throw qe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,e.file_path,Wr.VALID_S3_FILE_TYPES.CSV,e.hdb_user.role.permission);try{return await Ap(r)}catch(s){throw gi(s)}}a(T5,"csvFileLoad");async function R5(e){let t=rd.s3FileObject(e);if(t)throw qe(t,t.message,Ot.BAD_REQUEST,void 0,void 0,!0);let r;try{let s=u5.extname(e.s3.key),n=`${Date.now()}${s}`;r=`${Ti}/${n}`;let i=new Rp(this.job_operation_function.name,e.action,e.schema,e.table,r,s,e.hdb_user.role.permission);await A5(n,e);let o=await Ap(i);return await td(r),o}catch(s){throw await td(r),gi(s)}}a(R5,"importFromS3");async function g5(e,t){let r;try{let s=e.passthrough_headers?{headers:e.passthrough_headers}:void 0;r=await c5("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,Wr.LOG_LEVELS.ERROR,"Error downloading CSV file - "+s)}N5(r,e.csv_url),await O5(t,r.raw)}a(g5,"downloadCSVFile");async function A5(e,t){try{let r=`${Ti}/${e}`;await Qr.mkdirp(Ti),await Qr.writeFile(`${Ti}/${e}`,"",{flag:"a+"});let s=await Qr.createWriteStream(r),n=await _5.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(){yo.info(`${t.s3.key} successfully downloaded to ${r}`),i()})})}catch(r){throw yo.error(ct.S3_DOWNLOAD_ERR+" - "+r),qe(r,Ri(ct.S3_DOWNLOAD_ERR))}}a(A5,"downloadFileFromS3");async function O5(e,t){try{await Qr.mkdirp(Ti),await Qr.writeFile(`${Ti}/${e}`,t)}catch(r){throw yo.error(ct.WRITE_TEMP_FILE_ERR),qe(r,Ri(ct.DEFAULT_BULK_LOAD_ERR))}}a(O5,"writeFileToTempFolder");async function td(e){if(e)try{await Qr.access(e),await Qr.unlink(e)}catch{yo.warn(`could not delete temp csv file at ${e}, file does not exist`)}}a(td,"deleteTempFile");function N5(e,t){if(e.statusCode!==yL.HTTP_STATUS_CODES.OK)throw qe(new Error,`CSV Load failed from URL: ${t}, status code: ${e.statusCode}, message: ${e.statusMessage}`,Ot.BAD_REQUEST);if(!m5[e.headers["content-type"]])throw qe(new Error,`CSV Load failed from URL: ${t}, unsupported content type: ${e.headers["content-type"]}`,Ot.BAD_REQUEST);if(!e.raw)throw qe(new Error,`CSV Load failed from URL: ${t}, no csv found at url`,Ot.BAD_REQUEST)}a(N5,"validateURLResponse");async function Ap(e){try{let t;switch(e.file_type){case Wr.VALID_S3_FILE_TYPES.CSV:t=await b5(e);break;case Wr.VALID_S3_FILE_TYPES.JSON:t=await y5(e);break;default:throw qe(new Error,ct.DEFAULT_BULK_LOAD_ERR,Ot.BAD_REQUEST,Wr.LOG_LEVELS.ERROR,ct.INVALID_FILE_EXT_ERR(e))}return ML(t.records,t.number_written)}catch(t){throw gi(t)}}a(Ap,"fileLoad");async function CL(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 ed.validation(o);e.role_perms&&e.role_perms.super_user!==!0&&wL(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(CL,"validateChunk");async function UL(e,t,r,s,n){let i=s.data?s.data:s;if(i.length===0)return;bo.autoCastJSONDeep(i),n&&n.pause();let o=s.meta?s.meta.fields:null;if(o)i.forEach(c=>{!bo.isEmpty(c)&&!bo.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 IL.callOperationFunctionAsAwait(LL,c,null);t.records+=u.records,t.number_written+=u.number_written,n&&n.resume()}catch(c){let u=qe(c,Ri(ct.INSERT_CSV_ERR),Ot.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,ct.INSERT_CSV_ERR+" - "+c);r(u)}}a(UL,"insertChunk");async function b5(e){let t={records:0,number_written:0},r=DL(e.schema,e.table);try{let s=new gp,n=Qr.createReadStream(e.file_path,{highWaterMark:NL});n.setEncoding("utf8"),await pp.parsePromise(n,CL.bind(null,e,s),Tp.bind(null,r));let i=s.getPermsResponse();if(i)throw qe(new Error,i,Ot.BAD_REQUEST);return n=Qr.createReadStream(e.file_path,{highWaterMark:NL}),n.setEncoding("utf8"),await pp.parsePromise(n,UL.bind(null,e,t),Tp.bind(null,r)),n.destroy(),t}catch(s){throw qe(s,Ri(ct.PAPA_PARSE_ERR),Ot.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,ct.PAPA_PARSE_ERR+s)}}a(b5,"callPapaParse");function DL(e,t){let r=E5[e][t].attributes,s=new Map;for(let n of r)n.type&&s.set(n.name,i=>f5(i,n));return s}a(DL,"createTransformMap");function Tp(e,t,r){let s=e.get(r);return s?s(t):bo.autoCast(t)}a(Tp,"typeFunction");async function y5(e){let t={records:0,number_written:0},r=a(s=>{throw s},"throwErr");try{let s=new gp,n=pL([Qr.createReadStream(e.file_path,{encoding:"utf-8"}),TL.withParser(),c=>c.value,new RL({batchSize:bL}),gL(async c=>{await CL(e,s,r,c)})]);await new Promise((c,u)=>{AL(n,l=>{l?u(l):c()}),n.resume()});let i=s.getPermsResponse();if(i)throw qe(new Error,i,Ot.BAD_REQUEST);let o=pL([Qr.createReadStream(e.file_path,{encoding:"utf-8"}),TL.withParser(),c=>c.value,new RL({batchSize:bL}),gL(async c=>{await UL(e,t,r,c)})]);return await new Promise((c,u)=>{AL(o,l=>{l?u(l):c()}),o.resume()}),t}catch(s){throw qe(s,Ri(ct.INSERT_JSON_ERR),Ot.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,ct.INSERT_JSON_ERR+s)}}a(y5,"insertJson");async function LL(e){let t={};try{e.data&&e.data.length>0&&I5(e.data[0])?t=await w5(e.data,e.schema,e.table,e.action):(t.message="No records parsed from csv file.",yo.info(t.message))}catch(r){throw gi(r)}return t}a(LL,"callBulkFileLoad");function I5(e){let t=Object.keys(e);for(let r of t)if(!h5.test(r))throw new Error(`Invalid column name '${r}', cancelling load operation`);return!0}a(I5,"validateColumnNames");async function w5(e,t,r,s){s||(s="insert");let n={operation:s,schema:t,table:r,records:e},i;switch(s){case"insert":i=ed.insert;break;case"update":i=ed.update;break;case"upsert":i=ed.upsert;break;default:throw qe(new Error,ct.INVALID_ACTION_PARAM_ERR(s),Ot.BAD_REQUEST,Wr.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=bo.isEmptyOrZeroLength(c)?0:c.length;return{records:e.length,number_written:u,new_attributes:o.new_attributes}}catch(o){throw gi(o)}}a(w5,"bulkFileLoad");function ML(e,t){return`successfully loaded ${t} of ${e} records`}a(ML,"buildResponseMsg");function gi(e){return qe(e,Ri(ct.DEFAULT_BULK_LOAD_ERR),Ot.INTERNAL_SERVER_ERROR,Wr.LOG_LEVELS.ERROR,ct.DEFAULT_BULK_LOAD_ERR+" - "+e)}a(gi,"buildTopLevelErrMsg")});var BL=m((ole,vL)=>{"use strict";var bp=class{static{a(this,"SqlSearchObject")}constructor(t,r){this.operation="sql",this.sql=t,this.hdb_user=r}};vL.exports=bp});var qL=m((cle,FL)=>{"use strict";var C5=A(),HL=require("moment"),U5=require("uuid").v4,yp=class{static{a(this,"JobObject")}constructor(){this.id=U5(),this.type=void 0,this.start_datetime=HL().valueOf(),this.created_datetime=HL().valueOf(),this.end_datetime=void 0,this.status=C5.JOB_STATUS_ENUM.CREATED,this.message=void 0,this.user=void 0,this.request=void 0}};FL.exports=yp});var Ip=m((lle,YL)=>{"use strict";var D5=require("uuid").v4,kL=Nr(),VL=Or(),L5=us(),M5=Zi(),P5=BL(),Ge=A(),v5=qL(),B5=Em(),Mr=k(),H5=ma(),Io=V(),{promisify:F5}=require("util"),Ai=require("moment"),q5=v_(),nd=Ep(),GL=yf(),{deleteTransactionLogsBeforeValidator:G5}=MS(),{handleHDBError:x5,hdb_errors:k5}=W(),{HTTP_STATUS_CODES:V5}=k5,xL=VL.searchByValue,$5=VL.searchByHash,Y5=kL.insert,K5=F5(q5.evaluateSQL),W5=kL.update;YL.exports={addJob:J5,updateJob:Z5,handleGetJob:Q5,handleGetJobsByStartDate:z5,getJobById:$L};async function Q5(e){try{let t=await $L(e.id);return Io.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 Mr.error("There was an error getting job",t),new Error(r)}}a(Q5,"handleGetJob");async function z5(e){try{let t=await X5(e);if(Mr.trace(`Searching for jobs from ${e.from_date} to ${e.to_date}`),t&&t.length>0)for(let r of t)r.start_datetime&&(r.start_datetime_converted=Ai(r.start_datetime)),r.end_datetime&&(r.end_datetime_converted=Ai(r.end_datetime)),r.request!==void 0&&delete r.request,delete r.__createdtime__,delete r.__updatedtime__;return t}catch(t){let r=`There was an error searching jobs by date: ${t}`;throw Mr.error(r),new Error(r)}}a(z5,"handleGetJobsByStartDate");async function J5(e){let t={message:"",error:"",success:!1,createdJob:void 0};if(!e||Object.keys(e).length===0||Io.isEmptyOrZeroLength(e.operation)){let _="job parameter is invalid";return Mr.info(_),t.error=_,t}if(!Ge.JOB_TYPE_ENUM[e.operation])return Mr.info(`invalid job type specified: ${e.operation}.`),t;let r=e.operation,s;switch(r){case Ge.OPERATIONS_ENUM.CSV_FILE_LOAD:s=nd.fileObject(e);break;case Ge.OPERATIONS_ENUM.CSV_URL_LOAD:s=nd.urlObject(e);break;case Ge.OPERATIONS_ENUM.CSV_DATA_LOAD:s=nd.dataObject(e);break;case Ge.OPERATIONS_ENUM.IMPORT_FROM_S3:s=nd.s3FileObject(e);break;case Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:case Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE:s=GL(e,"date");break;case Ge.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE:s=GL(e,"timestamp");break;case Ge.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE:s=G5(e);break;default:break}if(s)throw x5(s,s.message,V5.BAD_REQUEST,void 0,void 0,!0);let n=new v5;n.type=e.operation===Ge.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE?Ge.OPERATIONS_ENUM.DELETE_FILES_BEFORE:e.operation,n.type=e.operation,n.user=e.hdb_user.username;let i=new L5(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",n.id,"id",["id"]),o;try{o=Array.from(await xL(i))}catch(_){let d=`There was an error inserting a new job: ${_}`;return Mr.error(d),t}let c=Array.isArray(o)?o:Object.keys(o);if(c&&c.length>0){n.id=D5();try{o=await xL(i)}catch(_){let d=`There was an error inserting a new job: ${_}`;return Mr.error(d),t}if(c=Array.isArray(o)?o:Object.keys(o),c&&c.length>0)return Mr.error("Error creating a job, could not find a unique job id."),t}n.request=e;let u=new H5(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,"id",[n]),l;try{l=await Y5(u)}catch(_){return Mr.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,Mr.trace(_)}return t}a(J5,"addJob");async function X5(e){let t=Ai(e.from_date,Ai.ISO_8601),r=Ai(e.to_date,Ai.ISO_8601);if(!t.isValid())throw new Error("Invalid 'from' date, must be in ISO-8601 format (YYYY-MM-DD).");if(!r.isValid())throw new Error("Invalid 'to' date, must be in ISO-8601 format (YYYY-MM-DD)");let s=`select * from system.hdb_job where start_datetime > '${t.valueOf()}' and start_datetime < '${r.valueOf()}'`,n=new P5(s,e.hdb_user);try{return await K5(n)}catch(i){throw Mr.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(X5,"getJobsInDateRange");async function $L(e){if(Io.isEmptyOrZeroLength(e))return Io.errorizeMessage("Invalid job ID specified.");let t=new M5(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e],["*"]);try{return await $5(t)}catch(r){let s=`There was an error searching for a job by id: ${e} ${r}`;return Mr.error(s),Io.errorizeMessage("there was an error searching for jobs. Please check the log for details.")}}a($L,"getJobById");async function Z5(e){if(Object.keys(e).length===0)throw new Error("invalid job object passed to updateJob");if(Io.isEmptyOrZeroLength(e.id))throw new Error("invalid ID passed to updateJob");(e.status===Ge.JOB_STATUS_ENUM.COMPLETE||e.status===Ge.JOB_STATUS_ENUM.ERROR)&&(e.end_datetime=Ai().valueOf());let t=new B5(Ge.SYSTEM_SCHEMA_NAME,Ge.SYSTEM_TABLE_NAMES.JOB_TABLE_NAME,[e]),r;return r=await W5(t),r}a(Z5,"updateJob")});var XL=m((dle,JL)=>{"use strict";var KL=V(),Xt=A(),j5=require("moment"),id=Op(),od=k(),WL=Ip(),QL=B_(),zL=Zn(),e8=dt(),t8=b_(),wp=class{static{a(this,"RunnerMessage")}constructor(t,r){this.job=t,this.json=r}};async function r8(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(KL.isEmptyOrZeroLength(e.json.operation))throw new Error("Invalid operation");if(KL.isEmptyOrZeroLength(e.job.id))throw new Error("Empty job id specified");switch(e.json.operation){case Xt.JOB_TYPE_ENUM.csv_file_load:await en(e,id.csvFileLoad);break;case Xt.JOB_TYPE_ENUM.csv_url_load:await en(e,id.csvURLLoad);break;case Xt.JOB_TYPE_ENUM.csv_data_load:await en(e,id.csvDataLoad);break;case Xt.JOB_TYPE_ENUM.import_from_s3:await en(e,id.importFromS3);break;case Xt.JOB_TYPE_ENUM.empty_trash:break;case Xt.JOB_TYPE_ENUM.export_local:await en(e,QL.export_local);break;case Xt.JOB_TYPE_ENUM.export_to_s3:await en(e,QL.export_to_s3);break;case Xt.JOB_TYPE_ENUM.delete_files_before:case Xt.JOB_TYPE_ENUM.delete_records_before:await en(e,zL.deleteFilesBefore);break;case Xt.JOB_TYPE_ENUM.delete_audit_logs_before:await en(e,zL.deleteAuditLogsBefore);break;case Xt.JOB_TYPE_ENUM.delete_transaction_logs_before:await en(e,t8.deleteTransactionLogsBefore);break;default:return`Invalid operation ${e.json.operation} specified`}}a(r8,"parseMessage");async function en(e,t){try{e.job.status=Xt.JOB_STATUS_ENUM.IN_PROGRESS,e.job.start_datetime=j5().valueOf(),await WL.updateJob(e.job),await s8(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):od.error(`There was an error running ${t.name} job with id ${e.job.id}`),od.error(s),e.job.message=s,e.job.status=Xt.JOB_STATUS_ENUM.ERROR;try{await WL.updateJob(e.job)}catch(n){throw od.error(`Unable to update job with id ${e.job.id}`),n}throw r}}a(en,"runJob");async function s8(e){od.trace("launching job thread:",e),e8.startWorker("server/jobs/jobProcess.js",{autoRestart:!1,name:"job",env:Object.assign({},process.env,{[Xt.PROCESS_NAME_ENV_PROP]:`JOB-${e}`})})}a(s8,"launchJobThread");JL.exports={parseMessage:r8,RunnerMessage:wp}});var jL=m((fle,ZL)=>{"use strict";var Cp=class{static{a(this,"OperationFunctionObject")}constructor(t,r=void 0){this.operation_function=t,this.job_operation_function=r}};ZL.exports=Cp});var mM=m((mle,Pp)=>{"use strict";var ld=Or(),Lp=v_(),ad=Op(),tn=Ul(),cd=Wn(),Lc=Zn(),n8=Zh(),Dc=Ir(),ud=am(),Nt=LS(),ut=k(),i8=lm(),o8=Wl(),a8=Ym(),c8=Xl(),u8=Km(),l8=Wm(),_8=Jm(),d8=Zm(),Up=tS(),eM=B_(),E8=M_(),Mp=Ip(),y=A(),{hdb_errors:Pc,handleHDBError:Mc}=W(),{HTTP_STATUS_CODES:tM}=Pc,Dp=oS(),rM=OS(),_M=require("util"),wo=Nr(),f8=fn(),h8=lo(),sM=XL(),nM=$a(),iM=(g_(),se(dc)),oM=yr(),aM=b_(),cM=C_(),{setServerUtilities:m8}=(sd(),se(Np)),{CONTEXT:S8}=(es(),se(UE)),{_assignPackageExport:p8}=require("../index"),{transformReq:T8}=V(),R8=fp(),uM=ld.searchByHash,g8=ld.searchByValue,A8=_M.promisify(ld.search),O8=_M.promisify(Lp.evaluateSQL),N8={[y.OPERATIONS_ENUM.CREATE_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.CREATE_TABLE]:!0,[y.OPERATIONS_ENUM.CREATE_SCHEMA]:!0,[y.OPERATIONS_ENUM.DROP_ATTRIBUTE]:!0,[y.OPERATIONS_ENUM.DROP_TABLE]:!0,[y.OPERATIONS_ENUM.DROP_SCHEMA]:!0},B=jL();async function dM(e,t){try{if(e.body.operation!=="read_log"&&(ut.log_level===y.LOG_LEVELS.INFO||ut.log_level===y.LOG_LEVELS.DEBUG||ut.log_level===y.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 R8.callOperationFunctionAsAwait(t,e.body,null);if(typeof r!="object"&&(r={message:r}),r instanceof Error)throw r;return N8[e.body.operation]&&f8.setSchemaDataToGlobal(s=>{s&&ut.error(s)}),r}a(dM,"processLocalTransaction");var lM=y8();Pp.exports={chooseOperation:EM,getOperationFunction:fM,operation:hM,processLocalTransaction:dM};m8(Pp.exports);function EM(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=Lp.convertSQLToAST(n);if(e.parsed_sql_object=i,!e.bypass_auth){let o=Lp.checkASTPermissions(e,i);if(o)throw ut.error(`${tM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${e.hdb_user.username}' is not permitted to ${e.operation}`),Mc(new Error,o,Pc.HTTP_STATUS_CODES.FORBIDDEN,void 0,void 0,!0)}}else if(!e.bypass_auth&&e.operation!==y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.operation!==y.OPERATIONS_ENUM.LOGIN&&e.operation!==y.OPERATIONS_ENUM.LOGOUT){let n=s===void 0?r:s,i=e.search_operation?e.search_operation:e;i.hdb_user||(i.hdb_user=e.hdb_user);let o=E8.verifyPerms(i,n);if(o)throw ut.error(`${tM.FORBIDDEN} from operation ${e.operation}`),ut.warn(`User '${i.hdb_user.username}' is not permitted to ${i.operation}`),Mc(new Error,o,Pc.HTTP_STATUS_CODES.FORBIDDEN,void 0,!1,!0)}}catch(n){throw Mc(n,"There was an error when trying to choose an operation path")}return r}a(EM,"chooseOperation");function fM(e){if(ut.trace(`getOperationFunction with operation: ${e.operation}`),lM.has(e.operation))return lM.get(e.operation);throw Mc(new Error,Pc.HDB_ERROR_MSGS.OP_NOT_FOUND(e.operation),Pc.HTTP_STATUS_CODES.BAD_REQUEST,void 0,void 0,!0)}a(fM,"getOperationFunction");p8("operation",hM);function hM(e,t){e.hdb_user=this[S8]?.user,e.bypass_auth=!t;let r=EM(e);return dM({body:e},r)}a(hM,"operation");async function b8(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[y.CLUSTERING_FLAG]=!0;let o;switch(i.operation){case y.OPERATIONS_ENUM.INSERT:o=await wo.insert(i);break;case y.OPERATIONS_ENUM.UPDATE:o=await wo.update(i);break;case y.OPERATIONS_ENUM.UPSERT:o=await wo.upsert(i);break;case y.OPERATIONS_ENUM.DELETE:o=await Lc.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(b8,"catchup");async function Rs(e){T8(e);let t,r;try{r=await Mp.addJob(e),t=r.createdJob,ut.info("addJob result",r);let s=new sM.RunnerMessage(t,e);return await sM.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),Mc(s,n)}}a(Rs,"executeJob");function y8(){let e=new Map;return e.set(y.OPERATIONS_ENUM.INSERT,new B(wo.insert)),e.set(y.OPERATIONS_ENUM.UPDATE,new B(wo.update)),e.set(y.OPERATIONS_ENUM.UPSERT,new B(wo.upsert)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_CONDITIONS,new B(ld.searchByConditions)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_HASH,new B(uM)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_ID,new B(uM)),e.set(y.OPERATIONS_ENUM.SEARCH_BY_VALUE,new B(g8)),e.set(y.OPERATIONS_ENUM.SEARCH,new B(A8)),e.set(y.OPERATIONS_ENUM.SQL,new B(O8)),e.set(y.OPERATIONS_ENUM.CSV_DATA_LOAD,new B(Rs,ad.csvDataLoad)),e.set(y.OPERATIONS_ENUM.CSV_FILE_LOAD,new B(Rs,ad.csvFileLoad)),e.set(y.OPERATIONS_ENUM.CSV_URL_LOAD,new B(Rs,ad.csvURLLoad)),e.set(y.OPERATIONS_ENUM.IMPORT_FROM_S3,new B(Rs,ad.importFromS3)),e.set(y.OPERATIONS_ENUM.CREATE_SCHEMA,new B(tn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_DATABASE,new B(tn.createSchema)),e.set(y.OPERATIONS_ENUM.CREATE_TABLE,new B(tn.createTable)),e.set(y.OPERATIONS_ENUM.CREATE_ATTRIBUTE,new B(tn.createAttribute)),e.set(y.OPERATIONS_ENUM.DROP_SCHEMA,new B(tn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_DATABASE,new B(tn.dropSchema)),e.set(y.OPERATIONS_ENUM.DROP_TABLE,new B(tn.dropTable)),e.set(y.OPERATIONS_ENUM.DROP_ATTRIBUTE,new B(tn.dropAttribute)),e.set(y.OPERATIONS_ENUM.DESCRIBE_SCHEMA,new B(cd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_DATABASE,new B(cd.describeSchema)),e.set(y.OPERATIONS_ENUM.DESCRIBE_TABLE,new B(cd.describeTable)),e.set(y.OPERATIONS_ENUM.DESCRIBE_ALL,new B(cd.describeAll)),e.set(y.OPERATIONS_ENUM.DELETE,new B(Lc.deleteRecord)),e.set(y.OPERATIONS_ENUM.ADD_USER,new B(Dc.addUser)),e.set(y.OPERATIONS_ENUM.ALTER_USER,new B(Dc.alterUser)),e.set(y.OPERATIONS_ENUM.DROP_USER,new B(Dc.dropUser)),e.set(y.OPERATIONS_ENUM.LIST_USERS,new B(Dc.listUsersExternal)),e.set(y.OPERATIONS_ENUM.LIST_ROLES,new B(ud.listRoles)),e.set(y.OPERATIONS_ENUM.ADD_ROLE,new B(ud.addRole)),e.set(y.OPERATIONS_ENUM.ALTER_ROLE,new B(ud.alterRole)),e.set(y.OPERATIONS_ENUM.DROP_ROLE,new B(ud.dropRole)),e.set(y.OPERATIONS_ENUM.USER_INFO,new B(Dc.userInfo)),e.set(y.OPERATIONS_ENUM.READ_LOG,new B(i8)),e.set(y.OPERATIONS_ENUM.ADD_NODE,new B(o8)),e.set(y.OPERATIONS_ENUM.UPDATE_NODE,new B(a8)),e.set(y.OPERATIONS_ENUM.REMOVE_NODE,new B(c8)),e.set(y.OPERATIONS_ENUM.CONFIGURE_CLUSTER,new B(u8)),e.set(y.OPERATIONS_ENUM.PURGE_STREAM,new B(l8)),e.set(y.OPERATIONS_ENUM.SET_CONFIGURATION,new B(oM.setConfiguration)),e.set(y.OPERATIONS_ENUM.CLUSTER_STATUS,new B(_8.clusterStatus)),e.set(y.OPERATIONS_ENUM.CLUSTER_NETWORK,new B(d8)),e.set(y.OPERATIONS_ENUM.CLUSTER_SET_ROUTES,new B(Up.setRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_GET_ROUTES,new B(Up.getRoutes)),e.set(y.OPERATIONS_ENUM.CLUSTER_DELETE_ROUTES,new B(Up.deleteRoutes)),e.set(y.OPERATIONS_ENUM.EXPORT_TO_S3,new B(Rs,eM.export_to_s3)),e.set(y.OPERATIONS_ENUM.DELETE_FILES_BEFORE,new B(Rs,Lc.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.DELETE_RECORDS_BEFORE,new B(Rs,Lc.deleteFilesBefore)),e.set(y.OPERATIONS_ENUM.EXPORT_LOCAL,new B(Rs,eM.export_local)),e.set(y.OPERATIONS_ENUM.SEARCH_JOBS_BY_START_DATE,new B(Mp.handleGetJobsByStartDate)),e.set(y.OPERATIONS_ENUM.GET_JOB,new B(Mp.handleGetJob)),e.set(y.OPERATIONS_ENUM.GET_FINGERPRINT,new B(Dp.getFingerprint)),e.set(y.OPERATIONS_ENUM.SET_LICENSE,new B(Dp.setLicense)),e.set(y.OPERATIONS_ENUM.GET_REGISTRATION_INFO,new B(Dp.getRegistrationInfo)),e.set(y.OPERATIONS_ENUM.RESTART,new B(rM.restart)),e.set(y.OPERATIONS_ENUM.RESTART_SERVICE,new B(rM.restartService)),e.set(y.OPERATIONS_ENUM.CATCHUP,new B(b8)),e.set(y.OPERATIONS_ENUM.SYSTEM_INFORMATION,new B(h8.systemInformation)),e.set(y.OPERATIONS_ENUM.DELETE_AUDIT_LOGS_BEFORE,new B(Rs,Lc.deleteAuditLogsBefore)),e.set(y.OPERATIONS_ENUM.READ_AUDIT_LOG,new B(n8)),e.set(y.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS,new B(nM.createTokens)),e.set(y.OPERATIONS_ENUM.REFRESH_OPERATION_TOKEN,new B(nM.refreshOperationToken)),e.set(y.OPERATIONS_ENUM.LOGIN,new B(iM.login)),e.set(y.OPERATIONS_ENUM.LOGOUT,new B(iM.logout)),e.set(y.OPERATIONS_ENUM.GET_CONFIGURATION,new B(oM.getConfiguration)),e.set(y.OPERATIONS_ENUM.CUSTOM_FUNCTIONS_STATUS,new B(Nt.customFunctionsStatus)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTIONS,new B(Nt.getCustomFunctions)),e.set(y.OPERATIONS_ENUM.GET_COMPONENT_FILE,new B(Nt.getComponentFile)),e.set(y.OPERATIONS_ENUM.GET_COMPONENTS,new B(Nt.getComponents)),e.set(y.OPERATIONS_ENUM.SET_COMPONENT_FILE,new B(Nt.setComponentFile)),e.set(y.OPERATIONS_ENUM.DROP_COMPONENT,new B(Nt.dropComponent)),e.set(y.OPERATIONS_ENUM.GET_CUSTOM_FUNCTION,new B(Nt.getCustomFunction)),e.set(y.OPERATIONS_ENUM.SET_CUSTOM_FUNCTION,new B(Nt.setCustomFunction)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION,new B(Nt.dropCustomFunction)),e.set(y.OPERATIONS_ENUM.ADD_CUSTOM_FUNCTION_PROJECT,new B(Nt.addComponent)),e.set(y.OPERATIONS_ENUM.ADD_COMPONENT,new B(Nt.addComponent)),e.set(y.OPERATIONS_ENUM.DROP_CUSTOM_FUNCTION_PROJECT,new B(Nt.dropCustomFunctionProject)),e.set(y.OPERATIONS_ENUM.PACKAGE_CUSTOM_FUNCTION_PROJECT,new B(Nt.packageComponent)),e.set(y.OPERATIONS_ENUM.PACKAGE_COMPONENT,new B(Nt.packageComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_CUSTOM_FUNCTION_PROJECT,new B(Nt.deployComponent)),e.set(y.OPERATIONS_ENUM.DEPLOY_COMPONENT,new B(Nt.deployComponent)),e.set(y.OPERATIONS_ENUM.READ_TRANSACTION_LOG,new B(aM.readTransactionLog)),e.set(y.OPERATIONS_ENUM.DELETE_TRANSACTION_LOGS_BEFORE,new B(Rs,aM.deleteTransactionLogsBefore)),e.set(y.OPERATIONS_ENUM.INSTALL_NODE_MODULES,new B(cM.installModules)),e.set(y.OPERATIONS_ENUM.AUDIT_NODE_MODULES,new B(cM.auditModules)),e.set(y.OPERATIONS_ENUM.GET_BACKUP,new B(tn.getBackup)),e}a(y8,"initializeOperationFunctionMap")});var dd=m((ple,TM)=>{"use strict";var vp=A(),I8=V(),vc=k(),{handleHDBError:Bp,hdb_errors:_d}=W(),{isMainThread:w8}=require("worker_threads"),{Readable:C8}=require("stream"),SM=require("os"),U8=require("util"),D8=gm(),L8=U8.promisify(D8.authorize),pM=mM(),{Gzip:M8}=require("zlib");function P8(e){let t=`Found an uncaught exception with message: ${e.message}. ${SM.EOL}Stack: ${e.stack} ${SM.EOL}Terminating ${w8?"HDB":"thread"}.`;console.error(t),vc.fatal(t),process.exit(1)}a(P8,"handleServerUncaughtException");function v8(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:_d.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(v8,"serverErrorHandler");function B8(e,t,r){if(!e.body||Object.keys(e.body).length===0||typeof e.body!="object"){let s=Bp(new Error,"Invalid JSON.",_d.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}if(I8.isEmpty(e.body.operation)){let s=Bp(new Error,"Request body must include an 'operation' property.",_d.HTTP_STATUS_CODES.BAD_REQUEST);r(s,null)}r()}a(B8,"reqBodyValidationHandler");function H8(e,t,r){let s;e.body.operation!==vp.OPERATIONS_ENUM.CREATE_AUTHENTICATION_TOKENS&&e.body.operation!==vp.OPERATIONS_ENUM.LOGIN&&e.body.operation!==vp.OPERATIONS_ENUM.LOGOUT?L8(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(Bp(n,i,_d.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(H8,"authHandler");async function F8(e,t,r=!1){let s;try{r&&(e.body.operation!=="configure_cluster"||e.body.operation!=="set_configuration")&&(e.body.bypass_auth=r),s=pM.chooseOperation(e.body);let n=await pM.processLocalTransaction(e,s);if(n instanceof C8&&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 M8))}return n}catch(n){throw vc.error(n),n}}a(F8,"handlePostRequest");TM.exports={authHandler:H8,handlePostRequest:F8,handleServerUncaughtException:P8,serverErrorHandler:v8,reqBodyValidationHandler:B8}});var OM=m((Rle,AM)=>{"use strict";var q8=require("fastify-plugin"),{handlePostRequest:RM,authHandler:G8,reqBodyValidationHandler:x8}=dd();async function k8(e){e.decorate("hdbCore",{preValidation:[x8,G8],request:t=>gM(RM(t,response)),requestWithoutAuthentication:(t,r)=>gM(RM(t,r,!0))})}a(k8,"hdbCore");async function gM(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(gM,"convertAsyncIterators");AM.exports=q8(k8)});var bM=m((Ale,NM)=>{"use strict";var Hp=require("fs"),Co=Q();Co.initSync();var{CONFIG_PARAMS:Bc}=A(),V8=1024*1024*1024;function $8(e){let t=Co.get(Bc.CUSTOMFUNCTIONS_NETWORK_TIMEOUT),r=Co.get(Bc.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT),s={bodyLimit:V8,connectionTimeout:t,keepAliveTimeout:r,return503OnClosing:!1,forceCloseConnections:!0,ignoreTrailingSlash:!0};if(e){let n=Co.get(Bc.CUSTOMFUNCTIONS_TLS_PRIVATEKEY),i=Co.get(Bc.CUSTOMFUNCTIONS_TLS_CERTIFICATE),o=Co.get(Bc.OPERATIONSAPI_TLS_CERT_AUTH);s.https={allowHTTP1:!0,key:Hp.readFileSync(`${n}`),cert:Hp.readFileSync(i)+(o?`
21
21
 
22
- `+Hp.readFileSync(o):"")},s.http2=!0}return s}a(V8,"getServerOptions");AM.exports=V8});var yM=m((Ole,bM)=>{"use strict";var Fp=Q();Fp.initSync();var{CONFIG_PARAMS:NM}=A();function $8(){let e=Fp.get(NM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Fp.get(NM.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($8,"getCORSOptions");bM.exports=$8});var CM=m((ble,wM)=>{"use strict";var IM=Q();IM.initSync();var Y8=A();function K8(){return IM.get(Y8.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(K8,"getHeaderTimeoutConfig");wM.exports=K8});var xp={};je(xp,{customFunctionsServer:()=>z8,handleFile:()=>Q8,ready:()=>Z8});async function Q8(e,t,r,s){if(!Zs){let c=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);Zs=kM(c),tt.http((await Zs).server)}let n=await Zs,i=(0,DM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),UM.has(i)||(UM.add(i),n.register(X8(i,o)))}async function z8(){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 J8();let e=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=Zs=await kM(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 J8(){try{Ue.info("Custom Functions starting configuration."),await HM.setUsersToGlobal(),Ue.info("Custom Functions completed configuration.")}catch(e){Ue.error(e)}}function X8(e,t){return async function(r){try{Ue.info("Custom Functions starting buildRoutes"),Ue.trace("Loading fastify routes folder "+e),(0,LM.existsSync)(e)&&r.register(BM.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 kM(e){Ue.info("Custom Functions starting buildServer.");let t=(0,FM.default)(e),r=(0,MM.default)(t);r.server.headersTimeout=(0,GM.default)(),r.setErrorHandler(xM.serverErrorHandler);let s=(0,qM.default)();return s&&r.register(PM.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(vM.default),await r.register(W8),await r.after(),ZS(r),Ue.info("Custom Functions completed buildServer."),r}function Z8(){if(Zs)return Zs.then?Zs.then(e=>e.ready()):Zs.ready()}var DM,LM,MM,PM,vM,BM,qp,Gp,Ue,W8,HM,FM,qM,GM,xM,Zs,UM,VM=Se(()=>{DM=require("path"),LM=require("fs"),MM=C(require("fastify")),PM=C(require("@fastify/cors")),vM=C(up()),BM=C(require("@fastify/autoload")),qp=C(Q()),Gp=C(A()),Ue=C(x()),W8=C(gM()),HM=C(br()),FM=C(OM()),qM=C(yM()),GM=C(CM()),xM=C(dd());ho();es();UM=new Set;a(Q8,"handleFile");a(z8,"customFunctionsServer");a(J8,"setUp");a(X8,"buildRouteFolder");a(kM,"buildServer");a(Z8,"ready")});var kp={};je(kp,{start:()=>j8});function j8(e){let t=e.root;return{handleFile(r,s,n){YM||(YM=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=$M.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,KM.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))),$M.set(s,n)}}}var KM,$M,YM,WM=Se(()=>{KM=C(require("send")),$M=new Map;a(j8,"start")});function r6(e,t=1,r){if(Vp++,(0,Ti.startWorker)("server/threads/threadServer.js",{name:hd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===hd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});t6.push(n),await n,wo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=fd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=wo.indexOf(s);o>-1&&wo.splice(o,1)}if(a(i,"removeWorker"),Co){let o=Co;Co=[];for(let c of o)XM[c.localPort](c)}}}),r){let s=setInterval(()=>{$p?$p=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Ti.shutdownWorkers)(),Vp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function ZM(e=0,t){if(typeof e=="string")try{(0,Sd.existsSync)(e)&&(0,Sd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=s6:r=n6(t):r=Yp;let s=(0,JM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},XM[e]=i=>{$p=!0,r(i,(o,c)=>{if(!o){QM?(QM.deliverSocket(i,e,c),i.resume()):Vp>0?(Co.length===0&&setTimeout(()=>{Co.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(),Co.push(i)):(console.log("start up a dynamic thread to handle request"),r6(0));return}o.requests++;let u=i._handle.fd;md.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):c6(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Ya();return md.info(`HarperDB ${n.version} Server running on port ${e}`),s}function Yp(e,t){let r,s=0;for(let n of wo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Ed)return Ed=i,t(r);s=i}Ed=0,t(r)}function s6(e,t){let r=e.remoteAddress,s=Uo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Yp(e,i=>{Uo.set(r,{worker:i,lastUsed:n}),t(i)})}function n6(e){let t=new RegExp(`${e}:\\s*(.+)`,"i");return r.readsData=!0,r;function r(s,n){s.on("data",i=>{s._handle.readStop();let c=i.toString("latin1").match(t)?.[1],u=Uo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);Yp(s,_=>{Uo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function o6(){Ed=0;for(let e of wo)e.expectedIdle=e.recentELU.idle+i6,e.requests=1;wo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function c6(e,t,r){let s=a6++;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(),fd.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")),fd.delete(s)),n.event=="destroy"&&(e.destroy(),fd.delete(s))})}var Ti,JM,hd,md,Sd,e6,wo,Co,XM,QM,Vp,t6,$p,Ed,zM,Uo,i6,fd,a6,jM=Se(()=>{Ti=C(dt()),JM=require("net"),hd=C(A()),md=C(x()),Sd=require("fs"),{isMainThread:e6}=require("worker_threads"),wo=[],Co=[],XM=[],Vp=0,t6=[];e6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(r6,"startHTTPWorker");a(ZM,"startSocketServer");Ed=0;a(Yp,"findMostIdleWorker");zM=36e5,Uo=new Map;a(s6,"findByRemoteAddressAffinity");a(n6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Uo)r.lastUsed+zM<e&&Uo.delete(t)},zM).unref();i6=1e3;a(o6,"updateWorkerIdleness");(0,Ti.setMonitorListener)(o6);fd=new Map,a6=1;a(c6,"proxySocket")});var nP=m((Ble,sP)=>{"use strict";var u6=require("cluster"),Wr=Q();Wr.initSync();var tP=A(),Mle=require("util"),js=x(),Kp=require("fs"),l6=require("fastify"),Ple=Ya(),_6=require("@fastify/cors"),d6=require("@fastify/compress"),E6=require("@fastify/static"),f6=up(),h6=require("path"),{PACKAGE_ROOT:m6}=A(),S6=ln(),p6=V(),T6=br(),R6=Aa(),{server:g6}=(es(),re(wu)),{authHandler:A6,handlePostRequest:O6,serverErrorHandler:N6,reqBodyValidationHandler:b6}=dd(),vle=require("net"),{registerContentHandlers:y6}=(ho(),re(xD)),I6=1024*1024*1024,rP="TRUE",{HDB_SETTINGS_NAMES:gi,CONFIG_PARAMS:w6}=tP,C6=gi.CORS_ENABLED_KEY,U6="CORS_ACCESSLIST",D6=gi.SERVER_TIMEOUT_KEY,L6=gi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,M6=gi.SERVER_HEADERS_TIMEOUT_KEY,P6=gi.PRIVATE_KEY_KEY,v6=gi.CERT_KEY,B6=gi.HTTP_SECURE_ENABLED_KEY,Ri;sP.exports={hdbServer:eP,start:eP};async function eP(e){try{js.info("In Fastify server"+process.cwd()),js.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),js.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=u6.isMaster,await H6();let t=Wr.get(B6),r=t&&(t===!0||t.toUpperCase()===rP);Ri=F6(r),await Ri.ready(),e||(e={}),e.isOperationsServer=!0,Ri.server.cantCleanupProperly=!0;try{g6.http(Ri.server,e),Ri.server.closeIdleConnections||await Ri.listen({port:0,host:"::"})}catch(s){throw Ri.close(),js.error(s),js.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),js.fatal(t),process.exit(1)}}a(eP,"operationsServer");async function H6(){js.trace("Configuring HarperDB process."),S6.setSchemaDataToGlobal(),await T6.setUsersToGlobal(),await R6.getLicense()}a(H6,"setUp");function F6(e){js.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=q6(e),r=l6(t);r.server.headersTimeout=x6(),r.setErrorHandler(N6);let s=G6();s&&r.register(_6,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(f6),r.register(d6),r.register(E6,{root:h6.join(m6,"docs")}),y6(r);let n=Wr.get(tP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!p6.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[b6,A6],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),O6(i,o)}),r.get("/health",()=>"HarperDB is running."),js.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(F6,"buildServer");function q6(e){let t=Wr.get(D6),r=Wr.get(L6),s={bodyLimit:I6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=Wr.get(P6),i=Wr.get(v6),o=Wr.get(w6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:Kp.readFileSync(n),cert:Kp.readFileSync(i)+(o?`
22
+ `+Hp.readFileSync(o):"")},s.http2=!0}return s}a($8,"getServerOptions");NM.exports=$8});var wM=m((Nle,IM)=>{"use strict";var Fp=Q();Fp.initSync();var{CONFIG_PARAMS:yM}=A();function Y8(){let e=Fp.get(yM.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST),t=Fp.get(yM.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(Y8,"getCORSOptions");IM.exports=Y8});var DM=m((yle,UM)=>{"use strict";var CM=Q();CM.initSync();var K8=A();function W8(){return CM.get(K8.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT)}a(W8,"getHeaderTimeoutConfig");UM.exports=W8});var xp={};je(xp,{customFunctionsServer:()=>J8,handleFile:()=>z8,ready:()=>j8});async function z8(e,t,r,s){if(!rn){let c=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS);rn=$M(c),tt.http((await rn).server)}let n=await rn,i=(0,MM.dirname)(r),o=t.replace(/\/routes\/.*/g,"");o.startsWith("/")&&(o=o.slice(1)),LM.has(i)||(LM.add(i),n.register(Z8(i,o)))}async function J8(){try{De.info("In Custom Functions Fastify server"+process.cwd()),De.info(`Custom Functions Running with NODE_ENV set as: ${process.env.NODE_ENV}`),De.debug(`Custom Functions server process ${process.pid} starting up.`),await X8();let e=qp.get(Gp.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS),t=e&&(e===!0||e.toUpperCase()===TRUE_COMPARE_VAL),r;try{r=rn=await $M(t)}catch(s){throw De.error(`Custom Functions buildServer error: ${s}`),s}try{await r.ready()}catch(s){throw De.error(`Custom Functions server.ready() error: ${s}`),s}r.server.cantCleanupProperly=!0}catch(e){De.error(`Custom Functions ${process.pid} Error: ${e}`),De.error(e),process.exit(1)}}async function X8(){try{De.info("Custom Functions starting configuration."),await qM.setUsersToGlobal(),De.info("Custom Functions completed configuration.")}catch(e){De.error(e)}}function Z8(e,t){return async function(r){try{De.info("Custom Functions starting buildRoutes"),De.trace("Loading fastify routes folder "+e),(0,PM.existsSync)(e)&&r.register(FM.default,n=>({dir:e,dirNameRoutePrefix:!1,options:{hdbCore:n.hdbCore,logger:De.loggerWithTag("custom-function"),prefix:`/${t}`}})).after((n,i,o)=>{n?.message?De.error(n.message):n&&De.error(n),o()})}catch(s){De.error(`Custom Functions errored buildRoutes: ${s}`)}}}async function $M(e){De.info("Custom Functions starting buildServer.");let t=(0,GM.default)(e),r=(0,vM.default)(t);r.server.headersTimeout=(0,kM.default)(),r.setErrorHandler(VM.serverErrorHandler);let s=(0,xM.default)();return s&&r.register(BM.default,s),r.register(function(n,i,o){n.setNotFoundHandler(function(c,u){r.server.emit("unhandled",c.raw,u.raw)}),o()}),r.register(HM.default),await r.register(Q8),await r.after(),ZS(r),De.info("Custom Functions completed buildServer."),r}function j8(){if(rn)return rn.then?rn.then(e=>e.ready()):rn.ready()}var MM,PM,vM,BM,HM,FM,qp,Gp,De,Q8,qM,GM,xM,kM,VM,rn,LM,YM=pe(()=>{MM=require("path"),PM=require("fs"),vM=U(require("fastify")),BM=U(require("@fastify/cors")),HM=U(up()),FM=U(require("@fastify/autoload")),qp=U(Q()),Gp=U(A()),De=U(k()),Q8=U(OM()),qM=U(Ir()),GM=U(bM()),xM=U(wM()),kM=U(DM()),VM=U(dd());So();ss();LM=new Set;a(z8,"handleFile");a(J8,"customFunctionsServer");a(X8,"setUp");a(Z8,"buildRouteFolder");a($M,"buildServer");a(j8,"ready")});var kp={};je(kp,{start:()=>e6});function e6(e){let t=e.root;return{handleFile(r,s,n){WM||(WM=!0,e.server.http(async(i,o)=>{if(!i.isWebSocket){let c=KM.get(i.pathname);if(c)return{handlesHeaders:!0,body:(0,QM.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))),KM.set(s,n)}}}var QM,KM,WM,zM=pe(()=>{QM=U(require("send")),KM=new Map;a(e6,"start")});function s6(e,t=1,r){if(Vp++,(0,Oi.startWorker)("server/threads/threadServer.js",{name:hd.THREAD_TYPES.HTTP,workerIndex:e,threadCount:t,async onStarted(s){let n=new Promise((o,c)=>{function u(l){l.type===hd.CLUSTER_MESSAGE_TYPE_ENUM.CHILD_STARTED&&(s.removeListener("message",u),o(s))}a(u,"onMessage"),s.on("message",u),s.on("error",c)});r6.push(n),await n,Uo.push(s),s.expectedIdle=1,s.lastIdle=0,s.requests=1,s.on("message",o=>{if(o.requestId){let c=fd.get(o.requestId);c&&c(o)}}),s.on("exit",i),s.on("shutdown",i);function i(){let o=Uo.indexOf(s);o>-1&&Uo.splice(o,1)}if(a(i,"removeWorker"),Do){let o=Do;Do=[];for(let c of o)jM[c.localPort](c)}}}),r){let s=setInterval(()=>{$p?$p=!1:(clearInterval(s),console.log("shut down dynamic thread due to inactivity"),(0,Oi.shutdownWorkers)(),Vp=0,setTimeout(()=>{global.gc?.()},5e3))},1e4)}}function eP(e=0,t){if(typeof e=="string")try{(0,Sd.existsSync)(e)&&(0,Sd.unlinkSync)(e)}catch{}let r;t?t==="ip"?r=n6:r=i6(t):r=Yp;let s=(0,ZM.createServer)({allowHalfOpen:!0,pauseOnConnect:!r.readsData},jM[e]=i=>{$p=!0,r(i,(o,c)=>{if(!o){JM?(JM.deliverSocket(i,e,c),i.resume()):Vp>0?(Do.length===0&&setTimeout(()=>{Do.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(),Do.push(i)):(console.log("start up a dynamic thread to handle request"),s6(0));return}o.requests++;let u=i._handle.fd;md.trace("Socket",u,"from",i.remoteAddress," routed to worker",o.threadId),u>=0?o.postMessage({port:e,fd:u,data:c}):u6(i,o,e)})}).listen(e);s.on("error",i=>{console.error("Error in socket server",i)}),process.env._UNREF_SERVER&&s.unref();let n=Ka();return md.info(`HarperDB ${n.version} Server running on port ${e}`),s}function Yp(e,t){let r,s=0;for(let n of Uo){if(n.threadId===-1)continue;let i=n.expectedIdle/n.requests;if(i>s)r=n;else if(s>=Ed)return Ed=i,t(r);s=i}Ed=0,t(r)}function n6(e,t){let r=e.remoteAddress,s=Lo.get(r),n=Date.now();if(s&&s.worker.threadId!==-1)return s.lastUsed=n,t(s.worker);Yp(e,i=>{Lo.set(r,{worker:i,lastUsed:n}),t(i)})}function i6(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=Lo.get(c),l=Date.now();if(u&&u.worker.threadId!==-1)return u.lastUsed=l,n(u.worker);Yp(s,_=>{Lo.set(c,{worker:_,lastUsed:l}),n(_,i)})})}a(r,"findByHeaderAffinity")}function a6(){Ed=0;for(let e of Uo)e.expectedIdle=e.recentELU.idle+o6,e.requests=1;Uo.sort((e,t)=>e.expectedIdle>t.expectedIdle?-1:1)}function u6(e,t,r){let s=c6++;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(),fd.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")),fd.delete(s)),n.event=="destroy"&&(e.destroy(),fd.delete(s))})}var Oi,ZM,hd,md,Sd,t6,Uo,Do,jM,JM,Vp,r6,$p,Ed,XM,Lo,o6,fd,c6,tP=pe(()=>{Oi=U(dt()),ZM=require("net"),hd=U(A()),md=U(k()),Sd=require("fs"),{isMainThread:t6}=require("worker_threads"),Uo=[],Do=[],jM=[],Vp=0,r6=[];t6&&process.on("uncaughtException",e=>{e.code!=="ECONNRESET"&&console.error("uncaughtException",e)});a(s6,"startHTTPWorker");a(eP,"startSocketServer");Ed=0;a(Yp,"findMostIdleWorker");XM=36e5,Lo=new Map;a(n6,"findByRemoteAddressAffinity");a(i6,"makeFindByHeaderAffinity");setInterval(()=>{let e=Date.now();for(let[t,r]of Lo)r.lastUsed+XM<e&&Lo.delete(t)},XM).unref();o6=1e3;a(a6,"updateWorkerIdleness");(0,Oi.setMonitorListener)(a6);fd=new Map,c6=1;a(u6,"proxySocket")});var oP=m((Hle,iP)=>{"use strict";var l6=require("cluster"),zr=Q();zr.initSync();var sP=A(),Ple=require("util"),sn=k(),Kp=require("fs"),_6=require("fastify"),vle=Ka(),d6=require("@fastify/cors"),E6=require("@fastify/compress"),f6=require("@fastify/static"),h6=up(),m6=require("path"),{PACKAGE_ROOT:S6}=A(),p6=fn(),T6=V(),R6=Ir(),g6=Oa(),{server:A6}=(ss(),se(wu)),{authHandler:O6,handlePostRequest:N6,serverErrorHandler:b6,reqBodyValidationHandler:y6}=dd(),Ble=require("net"),{registerContentHandlers:I6}=(So(),se(xD)),w6=1024*1024*1024,nP="TRUE",{HDB_SETTINGS_NAMES:bi,CONFIG_PARAMS:C6}=sP,U6=bi.CORS_ENABLED_KEY,D6="CORS_ACCESSLIST",L6=bi.SERVER_TIMEOUT_KEY,M6=bi.SERVER_KEEP_ALIVE_TIMEOUT_KEY,P6=bi.SERVER_HEADERS_TIMEOUT_KEY,v6=bi.PRIVATE_KEY_KEY,B6=bi.CERT_KEY,H6=bi.HTTP_SECURE_ENABLED_KEY,Ni;iP.exports={hdbServer:rP,start:rP};async function rP(e){try{sn.info("In Fastify server"+process.cwd()),sn.info(`Running with NODE_ENV set as: ${process.env.NODE_ENV}`),sn.debug(`HarperDB server process ${process.pid} starting up.`),global.clustering_on=!1,global.isMaster=l6.isMaster,await F6();let t=zr.get(H6),r=t&&(t===!0||t.toUpperCase()===nP);Ni=q6(r),await Ni.ready(),e||(e={}),e.isOperationsServer=!0,Ni.server.cantCleanupProperly=!0;try{A6.http(Ni.server,e),Ni.server.closeIdleConnections||await Ni.listen({port:0,host:"::"})}catch(s){throw Ni.close(),sn.error(s),sn.error(`Error configuring ${server_type} server`),s}}catch(t){console.error(`Failed to build server on ${process.pid}`,t),sn.fatal(t),process.exit(1)}}a(rP,"operationsServer");async function F6(){sn.trace("Configuring HarperDB process."),p6.setSchemaDataToGlobal(),await R6.setUsersToGlobal(),await g6.getLicense()}a(F6,"setUp");function q6(e){sn.debug(`HarperDB process starting to build ${e?"HTTPS":"HTTP"} server.`);let t=G6(e),r=_6(t);r.server.headersTimeout=k6(),r.setErrorHandler(b6);let s=x6();s&&r.register(d6,s),r.register(function(i,o,c){i.setNotFoundHandler(function(u,l){r.server.emit("unhandled",u.raw,l.raw)}),c()}),r.register(h6),r.register(E6),r.register(f6,{root:m6.join(S6,"docs")}),I6(r);let n=zr.get(sP.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON);return r.get("/",function(i,o){return!T6.isEmpty(n)&&n.toString().toLowerCase()==="true"?o.sendFile("index.html"):o.callNotFound()}),r.post("/",{preValidation:[y6,O6],config:{isOperation:!0}},async function(i,o){return i.body?.operation?.startsWith("restart")&&o.header("Connection","close"),N6(i,o)}),r.get("/health",()=>"HarperDB is running."),sn.debug(`HarperDB process starting up ${e?"HTTPS":"HTTP"} server listener.`),r}a(q6,"buildServer");function G6(e){let t=zr.get(L6),r=zr.get(M6),s={bodyLimit:w6,connectionTimeout:t,keepAliveTimeout:r,forceCloseConnections:!0,return503OnClosing:!1};if(e){let n=zr.get(v6),i=zr.get(B6),o=zr.get(C6.OPERATIONSAPI_TLS_CERT_AUTH),c={allowHTTP1:!0,key:Kp.readFileSync(n),cert:Kp.readFileSync(i)+(o?`
23
23
 
24
- `+Kp.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(q6,"getServerOptions");function G6(){let e=Wr.get(C6),t=Wr.get(U6),r;return e&&(e===!0||e.toUpperCase()===rP)&&(r={origin:!0,allowedHeaders:["Content-Type","Authorization","Accept"],credentials:!1},t&&t.length>0&&t[0]!==null&&t[0]!=="*"&&(r.origin=(s,n)=>n(null,t.indexOf(s)!==-1))),r}a(G6,"getCORSOpts");function x6(){return Wr.get(M6)}a(x6,"getHeaderTimeoutConfig")});var Zp={};je(Zp,{disableNATS:()=>V6,setNATSReplicator:()=>Wp,start:()=>k6});function k6(){Td.default.get(Rd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&Y6()}function V6(e=!0){uP=e}function Y6(){if(uP)return;let e=Gr(),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];Wp(n,r,i)}}jp((r,s)=>{Wp(r.tableName,r.databaseName,r),s&&_P(r)}),!iP&&(iP=!0)}function Wp(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[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){_P(o)}static mergeSource(o,c){return s=o,s?.get&&(!s.get.reliesOnPrototype||s.prototype.get)&&(c?.replicationSource?this.get=async(u,l)=>{let _=await s.get(u,l);return _&&n(l).addWrite(t,{operation:"put",table:e,id:u,record:_}),_}:this.get=(u,l)=>s.get(u,l)),this}static subscribe(){let o=new Jr;return(0,oP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<$6}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 pd(i.transaction,i)),o.user=i.user):o=lP),o}a(n,"getNATSTransaction")}function _P(e){let t=Td.default.get(Rd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Xp.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 zp,Jp,Xp,oP,aP,Td,Rd,cP,uP,$6,lP,iP,pd,Qp,dP=Se(()=>{de();Xr();zp=C(nt()),Jp=C(Be()),Xp=C(Ms());sa();oP=C(eT()),aP=C(vt()),Td=C(Q()),Rd=C(A()),cP=C(x());a(k6,"start");a(V6,"disableNATS");$6=2;a(Y6,"assignReplicationSource");a(Wp,"setNATSReplicator");a(_P,"publishSchema");pd=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=Td.default.get(Rd.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||(cP.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,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Xp.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},Qp=class extends pd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,aP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};lP=new Qp});async function fP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await tT.getResource(e,{});n=new sT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await tT.get(e);i&&i.delete()}n=new Ad(e,t)}return n}function rT(){return gd++,gd>65500&&(gd=1),gd}var EP,Bc,tT,gd,Ad,sT,hP=Se(()=>{de();lc();EP=C(vt()),Bc=C(x());Gn();tT=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(fP,"getSession");gd=1;a(rT,"getNextMessageId");Ad=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=yn.getMatch(l);if(!h)throw new Error(`The topic ${n} does not exist, no resource has been defined to handle this topic`);f.url=h.relativeURL;let p=h.path,T=h.Resource,g=await Ye(f,async()=>{let O=await T.subscribe(f);if(!O)throw new Error(`No subscription was returned from subscribe for topic ${n}`);if(!O[Symbol.asyncIterator])throw new Error(`Subscription is not (async) iterable for topic ${n}`);return(async()=>{for await(let k of O)try{let $;if(k.type&&k.type!=="put"&&k.type!=="delete"&&k.type!=="message"||s&&!s(k))continue;r?(k.topic=n,$=this.needsAcknowledge(k)):$=rT();let U=k.id;Array.isArray(U)&&(U=_o(U)),U==null&&(U=""),this.listener(p+"/"+U,k.value,$,t)}catch($){(0,Bc.warn)($)}})(),O});return g.topic=n,g.qos=t.qos,this.subscriptions.push(g),g}resume(){}needsAcknowledge(t){return rT()}acknowledge(t){}async removeSubscription(t){let r=this.subscriptions.find(s=>s.topic===t);r&&r.end()}async publish(t,r){let{topic:s,retain:n}=t;t.data=r,t.user=this.user;let i=yn.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let 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 Ad{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=rT();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,Bc.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,EP.getNextMonotonicTime)()),(0,Bc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),tT.put(this.sessionRecord)),t.qos}}});var oT={};je(oT,{start:()=>W6});async function W6({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:_}=pP(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,en.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;K6&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,TP.getSuperUser)());let{onMessage:u,onClose:l}=pP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,en.info)("Socket error",_)})},{port:t,securePort:s})}function pP(e,t,r,s,n){SP||(SP=!0,ap(_=>{_.push({metric:"mqtt-connections",connections:nT})})),nT++;let i,o={protocolVersion:4},c=(0,Od.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){nT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,iT.get)(tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&mP.notify({username:s.username,status:tn.AUTH_AUDIT_STATUS.SUCCESS,type:tn.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iT.get)(tn.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&mP.error({username:s.username,status:tn.AUTH_AUDIT_STATUS.FAILURE,type:tn.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=fP({user:s,..._}),i=await i}catch(O){return(0,en.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,en.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,en.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",p=e.deserialize||(e.deserialize=Ro(r?.headers["content-type"])),T=_.payload?.length>0?p(_.payload):void 0,g;try{g=await i.publish(_,T)}catch(O){console.warn(O),_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:128},_.topic)}_.qos>0&&d({cmd:h,messageId:_.messageId,reasonCode:g===!1?144:0},_.topic);break;case"pubrec":d({cmd:"pubrel",messageId:_.messageId,reasonCode:0});break;case"pubcomp":case"puback":i.acknowledge(_.messageId);break;case"pingreq":d({cmd:"pingresp"});break;case"disconnect":i?.disconnect(),e.close?e.close():e.end();break}}catch(f){console.error(f),d({cmd:"disconnect"})}function d(f,h){let p=(0,Od.generate)(f,o);t(p),fi(p.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?Ys(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Od,TP,iT,tn,en,mP,K6,SP,nT,RP=Se(()=>{Od=require("mqtt-packet");hP();TP=C(br());ho();go();es();iT=C(Q()),tn=C(A()),en=C(x()),mP=(0,en.loggerWithTag)("auth-event"),K6=!0;a(W6,"start");nT=0;a(pP,"onSocket")});var UP={};je(UP,{loadComponent:()=>Nd,loadComponentDirectories:()=>CP});function CP(e,t){t&&(cT=t),e&&(uT=e);let r=[];if((0,ps.existsSync)(aT)){let n=(0,ps.readdirSync)(aT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Lr.join)(aT,o);r.push(Nd(c,cT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Nd(s,cT,s)),Promise.all(r).then(()=>{wP=!0})}async function Nd(e,t,r,s,n){if(!AP.has(e)){AP.set(e,!0),n&&(uT=n);try{let i,o=(0,Lr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,ps.existsSync)(o)?i=(0,OP.parseDocument)((0,ps.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=X6;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,Lr.join)(E,"node_modules",u));)if(E=(0,Lr.dirname)(E),E.length<(0,IP.getHdbBasePath)().length){f=null;break}if(f)_=await Nd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=J6[u];if(_)try{c.push(_);let E=a(T=>(T.origin=r,rt(T)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,p=!f?.https&&f?.port;if(Hc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:p,securePort:h,resources:t,...l})||_,s&&f))for(let T of[p,h])try{if(+T&&!gP.includes(T)){gP.push(T);let g=lT.get(_T.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);ZM(T,g)}}catch(g){console.error("Error listening on socket",T,g,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:p,securePort:h,resources:t,...l})||_),uT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,yP.handleHDBError)("Can not reference parent directories");let T=(0,Lr.join)(e,l.files);for(let g of await(0,NP.default)(T,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:k}=g,$=(0,Lr.relative)(e,O),U=(0,Lr.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 z6(O);Hc.isMainThread&&await _.setupFile?.(P,b,O,t),t.isWorker&&await _.handleFile?.(P,b,O,t)}else Hc.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 Fc(P))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new Fc(E),null,!0)}}if(Hc.isMainThread&&!wP&&(0,bP.watchDir)(e,async()=>CP()),i.extensionModule)return await Cu((0,Lr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new Fc(i))}}}var ps,Lr,Hc,OP,lT,_T,NP,bP,yP,IP,Q6,z6,aT,uT,wP,cT,J6,X6,gP,AP,Fc,DP=Se(()=>{ps=require("fs"),Lr=require("path"),Hc=require("worker_threads"),OP=require("yaml"),lT=C(Q()),_T=C(A());hg();Tg();Rg();$D();VM();WM();NP=C(require("fast-glob")),bP=C(dt());PE();es();yP=C(W());Xr();de();jM();IP=C(Q()),Q6=C(nP());g_();dP();RP();({readFile:z6}=ps.promises),aT=lT.get(_T.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),uT=new Map;a(CP,"loadComponentDirectories");J6={REST:rp,graphqlSchema:ME,jsResource:BE,fastifyRoutes:xp,login:FE,static:kp,operationsApi:Q6,customFunctions:{},clustering:Zp,authentication:_c,mqtt:oT},X6={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},gP=[],AP=new Map;a(Nd,"loadComponent");Fc=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 HP=m((l_e,BP)=>{"use strict";var Id=require("fs-extra"),dT=require("path"),bd=x(),LP=V(),yd=A(),vP=Q(),Z6=Nr();BP.exports=j6;async function j6(){let e=e9(),t=vP.get(yd.CONFIG_PARAMS.ROOTPATH),r=dT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+yd.PACKAGE_ROOT}},n=dT.join(t,"node_modules");await Id.ensureDir(n);let i,o=!0,c=!1;try{i=await Id.readJson(r)}catch(u){if(LP.isEmptyOrZeroLength(e))return;if(u.code!==yd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!LP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await MP(l);s.dependencies[u]=_+l}if(!o){bd.notify("Installing components"),await PP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await MP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(bd.notify("Removing component",u),c=!0);c&&(bd.notify("Updating components."),await PP(r,s))}a(j6,"installComponents");function e9(){let e=Z6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(e9,"getComponentsConfig");async function MP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dT.extname(e)||await Id.pathExists(e)?"file:":"github:"}a(MP,"getPkgPrefix");async function PP(e,t){bd.trace("npm installing components package.json",t),await Id.writeFile(e,JSON.stringify(t,null," ")),await C_().installAllRootModules(vP.get(yd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(PP,"installPackages")});var GP=m((d_e,qP)=>{var{isMainThread:FP}=require("worker_threads"),{getTables:t9}=(de(),re(Ne)),{loadComponentDirectories:r9,loadComponent:s9}=(DP(),re(UP)),{resetResources:n9}=(lc(),re(RU)),i9=HP(),o9=Nr(),{dirname:a9}=require("path"),{getConnection:c9}=nt(),u9=Q(),l9=A(),ET=new Map;async function _9(e=!1){!FP&&u9.get(l9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&c9(),FP&&await i9();let t=n9();t9(),t.isWorker=e,await s9(a9(o9.getConfigFilePath()),t,"hdb",!0,ET),await r9(ET,t);let r=[];for(let[s]of ET)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(_9,"loadRootComponents");qP.exports.loadRootComponents=_9});var dt=m((h_e,Mn)=>{"use strict";var{Worker:d9,MessageChannel:E9,parentPort:Ts,isMainThread:pT,threadId:f9,workerData:qc}=require("worker_threads"),{PACKAGE_ROOT:h9}=A(),{join:VP,isAbsolute:m9,extname:Cd}=require("path"),{server:S9}=(es(),re(wu)),{watch:p9,readdir:T9}=require("fs/promises"),{totalmem:xP}=require("os"),TT=A(),Do=x(),f_e=A(),{randomBytes:R9}=require("crypto"),g9=1024*1024,Ln=[],Dn=[],A9=50,$P=1e4,O9="restart",YP="request_thread_info",KP="resource_report",WP="thread_info",QP="added-port",N9="ack",fT;Mn.exports={startWorker:hT,restartWorkers:RT,shutdownWorkers:w9,workers:Ln,setMonitorListener:B9,onMessageFromWorkers:C9,onMessageByType:U9,broadcast:D9,broadcastWithAcknowledgement:M9,setChildListenerByType:I9,getWorkerIndex:JP,getTicketKeys:XP,setMainIsWorker:b9,restartNumber:qc?.restartNumber||1};var zP;function JP(){return qc?qc.workerIndex:zP?0:void 0}a(JP,"getWorkerIndex");function b9(e){zP=e}a(b9,"setMainIsWorker");var wd;function XP(){return wd||(wd=pT?R9(48):qc.ticketKeys,wd)}a(XP,"getTicketKeys");Object.defineProperty(S9,"workerIndex",{get(){return JP()}});var ZP={[YP](e,t){P9(t)},[KP](e,t){v9(t,e)}};function hT(e,t={}){let r=process.constrainedMemory?.()||xP();r=Math.min(r,xP());let s=Math.max(Math.floor(r/g9/(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 E9;c.postMessage({type:QP,port:u},[u]),i.push(l)}Cd(e)||(e+=".js");let o=new d9(m9(e)?e:VP(h9,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:XP()},transferList:i},t));return Dd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{hT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Do.error("Worker error:",c)}),o.on("exit",c=>{Ln.splice(Ln.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<A9?(t.unexpectedRestarts=o.unexpectedRestarts+1,hT(e,t)):Do.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{ZP[c.type]?.(c,o)}),Ln.push(o),F9(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(hT,"startWorker");var y9=[TT.THREAD_TYPES.HTTP];async function RT(e=null,t=2,r=!0){if(pT){if(r){let{loadRootComponents:n}=GP();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:TT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=y9.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),$P*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:O9,workerType:e})}a(RT,"restartWorkers");function I9(e,t){ZP[e]=t}a(I9,"setChildListenerByType");function w9(e){return RT(e,1/0,!1)}a(w9,"shutdownWorkers");var jP=[];function C9(e){jP.push(e)}a(C9,"onMessageFromWorkers");var mT=new Map;function U9(e,t){let r=mT.get(e);r||mT.set(e,r=[]),r.push(t)}a(U9,"onMessageByType");function D9(e){for(let t of Dn)try{t.postMessage(e)}catch(r){Do.error("Unable to send message to worker",r)}}a(D9,"broadcast");var Ud=new Map,L9=1;function M9(e){return new Promise(t=>{let r=0;for(let s of Dn)try{let n=L9++,i=a(()=>{Ud.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,Ud.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Ud)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Do.error("Unable to send message to worker",n)}r===0&&t()})}a(M9,"broadcastWithAcknowledgement");function P9(e){e.postMessage({type:WP,workers:ev()})}a(P9,"sendThreadInfo");function ev(){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(ev,"getChildWorkerInfo");function v9(e,t){e.resources=t,e.resources.updated=Date.now()}a(v9,"recordResourceReport");var ST;function B9(e){ST=e}a(B9,"setMonitorListener");var H9=1e3,kP=!1;function F9(){kP||(kP=!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}ST&&ST()},H9).unref())}a(F9,"startMonitoring");var q9=1e3;if(Ts){Dd(Ts);for(let e of qc.addPorts)Dd(e);setInterval(()=>{let e=process.memoryUsage();Ts.postMessage({type:KP,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},q9).unref(),fT=a(()=>new Promise((e,t)=>{Ts.on("message",r),Ts.postMessage({type:YP});function r(s){s.type===WP&&(Ts.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fT=ev;Mn.exports.getThreadInfo=fT;function Dd(e,t){Dn.push(e),e.on("message",r=>{if(r.type===QP)Dd(r.port);else if(r.type===N9){let s=Ud.get(r.id);s&&s()}else{for(let n of jP)n(r,e);let s=mT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Do.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(Dd,"addPort");if(pT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await T9(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(VP(s,i.name));try{for await(let{filename:i}of p9(s,{persistent:!1}))(Cd(i)===".ts"||Cd(i)===".js"||Cd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await RT(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"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===TT.ITC_EVENT_TYPES.SHUTDOWN&&(Mn.exports.restartNumber=e.restartNumber,Ts.unref(),setTimeout(()=>{Do.warn("Thread did not voluntarily terminate",f9),process.exit(0)},$P).unref())})});function bT(e){let t=e.auditStore=e.openDB(iv.AUDIT_STORE_NAME,x9);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,av.getWorkerIndex)()===0&&e.on("aftercommit",()=>{AT||(AT=setTimeout(()=>{if(AT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-tv,0]})){if((n[0]&15)===NT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},tv/10).unref())}),t}function Pd(e,t,r){let s=lv[r.type],n=3;if(t?t.length>80?(s|=Ld,n=(0,rn.writeKey)(t,Rs,e?14:6),gT.setUint16(2,n)):(n=(0,rn.writeKey)(t,Rs,e?11:3),Rs[1]=n):Rs[1]=0,e){s|=uv;let i=s&Ld?6:3;gT.setFloat64(i,e),t||(n=i+8)}return Rs[0]=s,s&Ld?gT.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&Ld,i=n?6:3,o;r&uv&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&OT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:lv[r&7],value:u,lastVersion:o,get user(){return c?(0,rn.readKey)(e,i,c):void 0}}}var rn,Md,iv,ov,av,cv,Rs,gT,G9,x9,tv,AT,OT,rv,NT,sv,nv,Ld,uv,lv,Gc=Se(()=>{rn=require("ordered-binary"),Md=C(Q()),iv=C(xe()),ov=C(A()),av=C(dt()),cv=C(V());(0,Md.initSync)();Rs=Buffer.alloc(1024),gT=new DataView(Rs.buffer,Rs.byteOffset,1024),G9={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,rn.writeKey)(e[2],t,r+12)}else return(0,rn.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,rn.readKey)(e,t+12,r)]}else return(0,rn.readKey)(e,t,r)}},x9={encoding:"binary",keyEncoder:G9},tv=(0,cv.convertToMS)((0,Md.get)(ov.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,AT=null;a(bT,"openAuditStore");OT=16,rv=1,NT=2,sv=3,nv=4,Ld=128,uv=64,lv={put:rv|OT,[rv]:"put",delete:NT,[NT]:"delete",message:sv|OT,[sv]:"message",invalidate:nv,[nv]:"invalidate"};a(Pd,"createAuditEntry");a(Pn,"readAuditEntry")});var yT,Ai,k9,xc,vd,_v=Se(()=>{yT=C(vt());Gc();Ai=Symbol("completion"),k9=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,yT.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[Ai]&&(i||(i=[]),i.push(d[Ai])),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,Pd(_.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<k9>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},vd=class extends xc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,yT.getNextMonotonicTime)())}getReadTxn(){}}});function hv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;Mo||((0,Oi.onMessageByType)(Ev,d=>{let E=d.auditIds;wT(d.path,E,d.txnId)}),(0,Oi.onMessageByType)(fv,d=>{(0,gs.trace)("confirming to proceed with txn",d.txnId)}),Mo=Object.create(null));let c=Mo[i]||(Mo[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=_o(t);let l=new IT(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 wT(e,t,r,s){if(!Mo)return;let n=Mo[e];if(n){if(Lo&&Lo+1!==r){(0,gs.trace)("Waiting to ensure latest txn id",Lo,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Bd)o<r&&((0,gs.trace)("Txn",r,"waiting for txn",o),await c);if(Lo+1!==r){await(0,Oi.broadcastWithAcknowledgement)({type:fv,txnId:r});for(let[o,c]of Bd)o<r&&((0,gs.trace)("Txn",r,"waiting for txn",o),await c)}Bd.delete(r),(0,gs.trace)("Proceeding with txn id",r),Lo=r-1,wT(e,t,r,s)})();return Bd.set(r,i),i}(0,gs.trace)("Notifying with txn id",r,s),Lo=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,dv.writeKey)(i,$9,0);let _=i[3];_&&(i.length=3);let d,E=_o(u),f;do{let h=l.get(E);if(h){for(let T of h)if(!(f&&!T.includeDescendants)){if(T.startTime>=o){(0,gs.info)("omitting",u,T.startTime,o);continue}try{if(T.crossThreads===!1&&!s)continue;if(d===void 0){let g=n.auditStore.get(i);if(!g||(d=Pn(g,l.store),d.type!=="message"&&l.store.getEntry(i[2])?.version!==i[0])||_&&d.type!=="invalidate")continue e}T.listener(u,d,o)}catch(g){console.error(g),(0,gs.info)(g)}}}if(E==null)break;let p=E.lastIndexOf?.("/",E.length-2);p>-1?E=E.slice(0,p+1):E=null,f=!0}while(!0)}}}function mv(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&V9)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,Oi.broadcast)({type:Ev,path:n,auditIds:l,txnId:c,start:u}),wT(n,l,c,!0))})}}var gs,Oi,dv,Ev,fv,V9,Mo,$9,IT,Lo,Bd,Sv=Se(()=>{gs=C(x()),Oi=C(dt()),dv=require("ordered-binary");sa();lc();Gc();Ev="transaction",fv="transaction-await",V9=67108864,$9=Buffer.alloc(4096);a(hv,"addSubscription");IT=class extends Jr{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"}}},Bd=new Map;a(wT,"notifyFromTransactionData");a(mv,"listenToCommits")});var Np={};je(Np,{coerceType:()=>Hd,makeTable:()=>qd,setServerUtilities:()=>z9});function qd(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=[]),mv(i,u);let p=0,T,g,O,k={},$,U,b,P;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(U=Z),Z.expiresAt&&(b=Z),Z.isPrimaryKey&&(k=Z);let z;E&&JT();class F 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=$;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 g=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let D=!1,y=a(async w=>{let v=w.value,q=w.table?Pe[c][w.table]:F;if(c===Qr.SYSTEM_SCHEMA_NAME&&(w.table===Qr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||w.table===Qr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(D=!0),w.id===void 0&&(w.id=v[q.primaryKey],w.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(w));let L=await q.getResource(w.id,w,kc);switch(w.type){case"put":return L._writeUpdate(v,kc);case"delete":return L._writeDelete(kc);case"publish":return L._writePublish(v,kc);case"invalidate":return L.invalidate(kc);default:yi.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,bi.getWorkerIndex)()):(0,bi.getWorkerIndex)()===0,q=w&&v&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(q)for await(let L of q)try{if(!(L.type==="transaction"?L.writes[0]:L)){console.error("Bad subscription event");continue}let X=Ye(L,()=>{if(L.type==="transaction"){let J=[];for(let Y of L.writes){Y[Ae]=L;try{J.push(y(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(L),j}}return Promise.all(J)}else if(L.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of L.attributes)J.find(De=>De.name===j.name)||(J.push(j),Y=!0);Y&&(rt({table:n,database:c,attributes:J,origin:"cluster"}),Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return y(L)});L.onCommit&&(X?.then&&D&&Yc.signalUserChange(new Kc.UserEventMsg(process.pid)),X?.then?X.then(L.onCommit):L.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(w){console.error(w)}})(),this}static getResource(S,N,D){let y=super.getResource(S,N,D);if(S!=null)try{if(y.hasOwnProperty(ce))return y;let w=y._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let v,q,G={transaction:w?.getReadTxn()},X;return iu(S,N,G,y,D?.allowInvalidated,(J,Y)=>{Y?q(Y):(y[ce]=J?.value,y[Xt]=J?.version,X=!0,v?.(y))}),X?y:new Promise((J,Y)=>{v=J,q=Y})}catch(w){throw w.message.includes("Unable to serialize object")&&(w.message+=": "+JSON.stringify(S)),w}return y}static setTTLExpiration(S){(0,bi.getWorkerIndex)()===0&&(d=S*1e3,this.expirationTimer&&clearInterval(this.expirationTimer),this.expirationTimer=setInterval(()=>{if(this.primaryStore.rootStore.status!=="open")return clearInterval(this.expirationTimer);for(let{key:N,value:D,version:y}of this.primaryStore.getRange({start:!1,versions:!0}))y<Date.now()-d&&y>0&&D?.__invalidated__==null&&F.evict(N,D,y)},d).unref())}static enableAuditing(){E=!0,JT(),F.audit=!0}static coerceId(S){return S===""?null:Hd(S,k)}static async dropTable(){if(delete Pe[c][n],c===o){for(let S in r)_.remove(F.tableName+"/"+S),r[S].drop();_.remove(F.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Yc.signalSchemaChange(new Kc.SchemaEventMsg(process.pid,Qr.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[Cs])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=CT(y,"read");N.select=w.filter(q=>v[q])}else N.select=y.filter(v=>v.read).map(v=>v.attribute_name);return N}else return!0}}allowUpdate(S,N,D){if(!S)return!1;let y=S.role.permission;if(y.super_user)return!0;if(y[n]?.update){let w=y[n].attribute_permissions;if(w){let v=CT(w,"update");for(let q in N)if(!v[q])return!1;if(D)for(let q of w){let L=q.attribute_name;!q.update&&!(L in N)&&(N[L]=this.getProperty(L))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let D=S.role.permission;if(D.super_user)return!0;if(D[n]?.insert){let y=D[n].attribute_permissions;if(y){let w=CT(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[ft],y&&(S=Object.assign(y,S)),this[ft]=y=S}return!this[ce]&&t&&!(y||(y=this[ft]))?.[t]&&(y||(y=this[ft]=Object.create(null)),y[t]=this[ae]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ae],store:i,invalidated:!0,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(D,y)=>{if(y)return;let w={__invalidated__:D};for(let G in r)w[G]=this.getProperty(G);let v=F.Source,q,L=this[ae];return S?.isNotification||v?.shouldReceiveInvalidations&&(q=v.invalidate(L,this)),i.put(this[ae],w,D),{type:E&&"invalidate",[Ai]:q}}})}static evict(S,N,D){let y=this.Source;if(y?.get&&(!y.get.reliesOnPrototype||y.prototype.get)){let w;if(!N){let v=i.getEntry(S);if(!v)return;N=v.value,D=v.version}if(N)for(let v in r)w||(w={__invalidated__:0}),w[v]=N[v];return w?i.put(S,w,D,D):i.remove(S,D)}else return i.remove(S,D)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,yv.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let D=this._txnForRequest();if(this[ae]===void 0)throw new Error("Can not save record without an id");let y=this[ce],w,v,q=this[ae];y||(this[ce]={}),D.addWrite({key:q,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(L,G)=>{let X;if(G){if(w)return;let Y=i.getEntry(q);y=Y?.value;let j=this[Ae];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!v){if(v=!0,N?.isNotification)S=ia(S);else{if(S[Rv]&&(w=!Ru(S),w))return;t&&S[t]!==q&&(S[t]=q),U&&(S[U.name]=U.type==="Date"?new Date(L):U.type==="String"?new Date(L).toISOString():L),$&&(y?S[$.name]=y[$.name]:S[$.name]=$.type==="Date"?new Date(L):$.type==="String"?new Date(L).toISOString():L),S=ia(S);let Y=F.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(q,S,this))}if(S[ce])throw new Error("Can not assign a record with a record property");this[ce]=S}if(yi.trace("Checking timestamp for put",q,this[Xt]>L,this[Xt],L),this[Xt]>L)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ae],(0,Po.asBinary)(J),L),Ze(this[ae],y,S),y===null&&!G&&Hn(-1),{type:E&&"put",value:J,[Ai]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ce]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),D,y=this[ae],w;return N.addWrite({key:y,store:i,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,commit:(v,q)=>{let L=this[ce];if(q){let G=i.getEntry(y);L=G?.value;let X=this[Ae];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!D&&(D=!0,!S?.isNotification)){let G=F.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(w=G.delete(y,this))}if(!(this[Xt]>v))return Ze(this[ae],L),yi.trace("Write delete entry",E||f,v),E||f?(i.put(this[ae],null,v),E||zT(),q||Hn(1)):i.remove(this[ae]),{type:E&&"delete",[Ai]: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(nn=>nn.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,Ni.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function w(Y,j){return Array.isArray(Y)?Y.map(De=>Hd(De,j)):Hd(Y,j)}a(w,"coerceTypedValues"),y.length>1&&(y=(0,Nv.sortBy)(y,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===Vc.SEARCH_TYPES.EQUALS){let De=Y[0]??Y.attribute;if(De==null||De===t)Y.estimated_count=1;else{let nn=r[De];Y.estimated_count=nn?nn.getValuesCount(Y[1]??Y.value):1/0}}else j===Vc.SEARCH_TYPES.CONTAINS||j===Vc.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===Vc.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=K9:Y.estimated_count=Y9}return Y.estimated_count}));let v=N.getReadTxn();v.use();let q=S.select,L=y[0],G;if(!L)G=i.getRange(D?{end:!1,reverse:!0,transaction:v,lazy:q?.length<4}:{start:!1,transaction:v,lazy:q?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Po.SKIP);else{let Y=yE(L,v,D,F,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=y.slice(1).map(IE);G=J(Y,j)}else{for(let De=1;De<y.length;De++){let nn=y[De],sE=yE(nn,v,D,F,S.allowFullScan);Y=Y.concat(sE)}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,nn={transaction:v,lazy:De>0||q?.length<4,alwaysPrefetch:!0};return Y.map(sE=>new Promise(nE=>iu(sE,X,nn,null,!1,IB=>{let iE=IB?.value;if(!iE)return nE(Po.SKIP);for(let oE=0;oE<De;oE++)if(!j[oE](iE))return nE(Po.SKIP);nE(iE)})))}return a(J,"idsToRecords"),G}async subscribe(S){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=hv(F,this[ae]??null,function(v,q,L){try{this.send({id:v,timestamp:L,...q})}catch(G){console.error(G)}},S.startTime,this[Cs]),D=this[ae],y=S.previousCount;y>1e3&&(y=1e3);let w=S.startTime;if(this[Cs]){if(w){if(y)throw new Ni.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:v,value:q}of u.getRange({start:[w,Number.MAX_SAFE_INTEGER]})){let[L,G,X]=v;if(v.length>3&&(X=v.slice(2)),G!==s)continue;let J=Pn(q,i);(D==null||Ov(D,X))&&N.send({id:X,timestamp:L,...J}),N.startTime=L}}else if(y){let v=[];for(let{key:q,value:L}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=q;if(q.length>3&&(J=q.slice(2)),X!==s)continue;if(D==null||Ov(D,J)){let Y=Pn(L,i);if(v.push({id:J,timestamp:G,...Y}),--y<=0)break}}catch(G){yi.error("Error getting history entry",q,G)}for(let q=v.length;q>0;)N.send(v[--q]);v[0]&&(N.startTime=v[0].timestamp)}else if(!S.omitCurrent)for(let{key:v,value:q,version:L}of i.getRange({start:D??!1,end:D==null?void 0:[D,bv.MAXIMUM_KEY],versions:!0}))q&&N.send({id:v,timestamp:L,value:q})}else{y&&!w&&(w=0);let v=this[Xt];if(w<v){let q=[],L=v;do{let G=[L,s,D],X=u.get(G);if(X){S.omitCurrent=!0;let J=Pn(X,i);q.push({id:D,timestamp:L,...J}),L=J.lastVersion}else break;y&&y--}while(L>w&&y!==0);for(let G=q.length;G>0;)N.send(q[--G]);N.startTime=v}!S.omitCurrent&&this.doesExist()&&N.send({id:D,timestamp:this[Xt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ce]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let D=this._txnForRequest(),y=this[ae]||null,w,v;D.addWrite({store:i,key:y,lastVersion:this[Xt],nodeName:this[Ae]?.nodeName,validate:()=>{this.validate(S)},commit:(q,L)=>{if(this.validate(S),!v&&(v=!0,!N?.isNotification)){let J=F.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(w=J.publish(y,S,this))}let G=L>0?i.get(y):this[ce];G===void 0&&!L&&(E||f)&&(E||zT(),Hn(1));let X={type:"message",value:i.encoder.encode(S),[Ai]:w};return!D.hasWrittenTime&&this[Xt]>q&&(q=X.newTxnTime=this[Xt]+.001),i.put(y,G??null,q),X}})}_txnForRequest(){let S=this[Ae],N=S?.transaction;if(N){let D;return(D=N?.find(y=>y.lmdbDb?.path===i.path))||N.push(D=new xc(i,S.user,u)),D}else return new vd(i,S.user,u)}validate(S){let N;for(let D=0,y=h.length;D<y;D++){let w=h[D];if(w.type){let v=S[w.name];if(v!=null)switch(w.type){case"Int":case"Float":(typeof v!="number"||w.type==="Int"&&v!==Math.floor(v))&&(N||(N=[])).push(`Property ${w.name} must be an ${w.type==="Int"?"integer":"number"}`);break;case"ID":typeof v=="string"||v?.length>0&&v.every?.(q=>typeof q=="string")||(N||(N=[])).push(`Property ${w.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof v!="string"&&(N||(N=[])).push(`Property ${w.name} must be a string`)}}w.required&&S[w.name]==null&&(N||(N=[])).push(`Property ${w.name} is required`)}if(N)throw new Ni.ClientError(N.join(". "))}getUpdatedTime(){return this[Xt]}wasLoadedFromSource(){return g?!!this[gv]:void 0}static async addAttributes(S){let N=h.slice(0);for(let D of S){if(!D.name)throw new Ni.ClientError("Attribute name is required");if(D.name.match(/[`/]/))throw new Ni.ClientError("Attribute names cannot include backticks or forward slashes");N.push(D)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static async removeAttributes(S){let N=h.filter(D=>!S.includes(D.name));return rt({table:n,database:c,schemaDefined:l,attributes:N}),F.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:D}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=D||0);return i.getStats().entryCount-S}static updatedAttributes(){Au(this,this)}static async deleteHistory(S=0){let N;for(let{key:D,value:y}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(L=>setImmediate(L));let[w,v,q]=D;D.length>3&&(q=D.slice(2)),v===s&&(N=i.remove(q))}await N}static async*getHistory(S=0,N=1/0){for(let{key:D,value:y}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[w,v,q]=D;if(D.length>3&&(q=D.slice(2)),v!==s)continue;let L=Pn(y,i);L.id=q,L.timestamp=w,yield L}}static async getHistoryOfRecord(S){let N=[],D=i.getEntry(S);if(!D)return N;let y=D.version,w=0;do{await new Promise(L=>setImmediate(L));let v=[y,s,S],q=u.get(v);if(q){let L=Pn(q,i);L.timestamp=y,N.push(L),y=L.lastVersion}else break}while(w<1e3);return N.reverse()}static cleanup(){z?.remove()}}F.updatedAttributes();let Oe=F.prototype;return Oe[Rv]=!0,d&&F.setTTLExpiration(d/1e3),b&&yB(),F;function Ze(Z,S,N){let D;for(let y in r){let w=r[y],v=w.isIndexing,q=N?.[y],L=S?.[y];if(q===L&&!v)continue;D=!0;let G=(0,$c.getIndexedValues)(L);if(G){pv&&w.prefetch(G.map(X=>({key:X,value:Z})),Av);for(let X=0,J=G.length;X<J;X++)w.remove(G[X],Z)}if(G=(0,$c.getIndexedValues)(q),G){pv&&w.prefetch(G.map(X=>({key:X,value:Z})),Av);for(let X=0,J=G.length;X<J;X++)w.put(G[X],Z)}}return D}a(Ze,"updateIndices");function iu(Z,S,N,D,y,w){let v=a(()=>{let q=N.transaction;if(q?.isDone)throw new Error("Invalid read transaction");let L;q&&!q.hasRunLoadRecord&&(L=!0,q.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(q)+" first loadRecord: "+L,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(S&&G?.version>(S.lastModified||0)&&(S.lastModified=G.version),J=G.version,X=G.value,(J<0||!X||typeof X.__invalidated__=="number"||d&&J<Date.now()-d)&&(Y=!0)):Y=!0,g&&op(Y,"cache-hit",n),Y&&!y&&(D&&(D[gv]=!0),g))return ko(Z,X,J,S).then(j=>{if(j?.value?.[ce])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),w(j)},j=>{w(null,j)});if(G?.value?.[ce])throw new Error("Can not assign a record with a record property");w(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return v();i.prefetch([Z],v)}a(iu,"loadRecord");function Ui(){P=new Set,(0,bi.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of P)S()}a(Z,"onCommit")}a(Ui,"setupCommitListeners");async function ko(Z,S=null,N,D){if(N<0){let L;return P||Ui(),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(ko(Z,L.value,L.version,D));G(L)}},"listener");P.add(J),X=setTimeout(()=>{P.delete(J),G(ko(Z,L?.value,void 0,D))},1e4).unref()})}let y=S?.__invalidated__,w=-(N||1);i.put(Z,S,w,N);let v={transaction:D?.transaction,replacingRecord:S,replacingVersion:N},q=D?.responseHeaders;q&&(v.responseHeaders=q);try{let L=performance.now(),G=await F.Source.get(Z,v),X=performance.now()-L;fi(X,"cache-resolution",n),q&&q.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=v.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,$c.getNextMonotonicTime)());let j=Ze(Z,S,G)&&N||y>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,w)):i.remove(Z,w),j&&E&&u.put([J,s,Z],Pd(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(ko,"getFromSource");function Hn(Z){p||(p=i.get([Tv,UT.threadId])||0),p+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([Tv,UT.threadId],p)},50))}a(Hn,"recordDeletion");function zT(){T||(T=setTimeout(()=>{if(T=null,i.rootStore.status==="open"){for(let{key:Z,value:S}of i.getRange({start:!0}))if(S===null){let N=i.getEntry(Z);N?.value===null&&i.remove(Z,N.version),Hn(-1)}}},F.getRecordCount()*100+Q9).unref())}a(zT,"enqueueDeletionCleanup");function JT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Hn(-1)})}a(JT,"addDeleteRemoval");function yB(){(0,bi.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=b.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${b} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let D=i.getEntry(N);D?.value?.[Z]<Date.now()&&F.evict(N,D.value,D.version),await new Promise(y=>setImmediate(y))}}catch(Z){yi.error("Error in evicting old records",Z)}},W9).unref()}a(yB,"runRecordExpirationEviction")}function CT(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 Av(){}function z9(e){yv=e}function Hd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!J9.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Fd.autoCast)(e)}function Ov(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 Qr,Po,$c,Nv,UT,Vc,Wc,Ni,Yc,Kc,yi,bv,bi,Fd,yv,Y9,K9,W9,pv,Tv,Xt,Rv,F_e,gv,kc,Q9,J9,sd=Se(()=>{Qr=C(A()),Po=require("lmdb"),$c=C(vt()),Nv=require("lodash"),UT=require("worker_threads");Xr();_v();Vc=C(xe()),Wc=C(Q());Sv();Ni=C(W()),Yc=C(Fs()),Kc=C(Fr());de();yu();yi=C(x());Nu();Gn();bv=require("ordered-binary"),bi=C(dt());Gc();Fd=C(V());go();Y9=1e8,K9=1e7,W9=6e4;Wc.initSync();pv=Wc.get(Qr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),Tv=Symbol.for("deletions"),Xt=Symbol.for("version"),Rv=Symbol.for("incremental-update"),F_e=Symbol("source-resource"),gv=Symbol("load-from-source"),kc={isNotification:!0,allowInvalidated:!0},Q9=(0,Fd.convertToMS)(Wc.get(Qr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(qd,"makeTable");a(CT,"attributesAsObject");a(Av,"noop");a(z9,"setServerUtilities");J9=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Hd,"coerceType");a(Ov,"isDescendantId")});var Ne={};je(Ne,{database:()=>Ba,databases:()=>Pe,dropDatabase:()=>Gh,dropTableMeta:()=>r7,getDatabases:()=>Gr,getTables:()=>X9,onUpdatedTable:()=>jp,readMetaDb:()=>Qc,resetDatabases:()=>Z9,table:()=>rt,tables:()=>sr});function X9(){return Vd||Gr(),sr||{}}function Gr(){if(Vd)return Pe;Vd=!0,Fo=new Map;let e=(0,bt.getHdbBasePath)()&&(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),t=(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)||{};if(process.env.SCHEMAS_DATA_PATH&&(t.data={path:process.env.SCHEMAS_DATA_PATH}),e=process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,fr.existsSync)(e)?e:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,fr.existsSync)(e))for(let r of(0,fr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Me.basename)(r.name,".mdb");r.isFile()&&(0,Me.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&Qc((0,Me.join)(e,r.name),null,s)}if((0,fr.existsSync)((0,Ho.getBaseSchemaPath)())){for(let r of(0,fr.readdirSync)((0,Ho.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Me.join)((0,Ho.getBaseSchemaPath)(),r.name),n=(0,Me.join)((0,Ho.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,fr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Me.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Me.join)(n,i.name);Qc((0,Me.join)(s,i.name),(0,Me.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,fr.existsSync)(n))for(let o of(0,fr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Me.extname)(o.name).toLowerCase()===".mdb"&&Qc((0,Me.join)(n,o.name),(0,Me.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Me.join)(c.path,(0,Me.basename)(o+".mdb"));(0,fr.existsSync)(u)&&Qc(u,o,r,null,!0)}}for(let r in Pe){let s=Fo.get(r);if(s){let n=Pe[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 Pe[r],r==="data"){for(let n in sr)delete sr[n];delete sr[$d]}}return Fo=null,Pe}}function Z9(){Vd=!1;for(let[,e]of vn)e.needsDeletion=!0;Gr();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 Pe}function Qc(e,t,r=MT,s,n){let i=new DT.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,Gd.open)(i),vn.set(e,o));let c=new Ii.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(vo.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,fr.existsSync)(s)&&(i.path=s,l=(0,Gd.open)(i),l.isLegacy=!0):l=bT(o));let _=Uv(r),d=_[$d],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[p,T]=f.toString().split("/");e.includes("delete")&&Le.trace(`read key ${f}`),T===""?T=h.name:T||(T=p,p=t,h.name||(h.name=T,h.indexed=!h.is_hash_attribute)),d?.add(p);let g=E.get(p);g||E.set(p,g={attributes:[]}),(T==null||h.is_hash_attribute)&&(g.primary=h),T!=null&&g.attributes.push(h),Object.defineProperty(h,"key",{value:f,configurable:!0})}for(let[f,h]of E){let{attributes:p,primary:T}=h;if(!T){for(let F of p)if(F.is_hash_attribute||F.isPrimaryKey){T=F;break}if(!T)throw new Error(`Unable to find a primary key attribute on table ${f}, with attributes: ${JSON.stringify(p)}`)}let g=_[f],O={},k=[],$,U,b=typeof T.audit=="boolean"?T.audit:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),P=T.trackDeletes,z=T.expiration;if(g)O=g.indices,k=g.attributes,g.schemaVersion++;else{$=T.tableId,$?$>=(u.get(Bo)||0)&&u.putSync(Bo,$+1):(T.tableId=$=u.get(Bo),$||($=1),u.putSync(Bo,$+1),u.putSync(T.key,T));let F=new Ii.default(!T.is_hash_attribute,T.is_hash_attribute);Le.trace(`openDB ${T.key} from ${r}`),U=o.openDB(T.key,F),U.rootStore=o,U.tableId=$}for(let F of p){F.attribute=F.name;try{if(!F.is_hash_attribute&&(F.indexed||F.attribute&&!F.name)){if(!O[F.name]){let Ze=new Ii.default(!F.is_hash_attribute,F.is_hash_attribute);Le.trace(`openDB ${F.key} from ${r}`),O[F.name]=o.openDB(F.key,Ze)}let Oe=k.find(Ze=>Ze.name===F.name);Oe?k.splice(k.indexOf(Oe),1,F):k.push(F)}}catch(Oe){Le.error("Error trying to update attribute",F,k,O,Oe)}}if(!g){Le.trace(`creating table class ${f}`,Object.keys(_)),g=Dv(_,f,qd({primaryStore:U,auditStore:l,audit:b,expirationMS:z&&z*1e3,trackDeletes:P,tableName:f,tableId:$,primaryKey:T.name,databasePath:n?r+"/"+f:r,databaseName:r,indices:O,attributes:p,schemaDefined:T.schemaDefined,dbisDB:u})),g.schemaVersion=1;for(let F of PT)F(g)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Uv(e){let t=Pe[e];if(t||(e==="data"?t=Pe[e]=sr:e==="system"?Object.defineProperty(Pe,"system",{value:t=Object.create(null),configurable:!0}):t=Pe[e]=Object.create(null)),Fo&&!Fo.has(e)){let r=new Set;t[$d]=r,Fo.set(e,r)}return t}function Dv(e,t,r){return e[t]=r,r}function Ba({database:e,table:t}){e||(e=MT),Gr();let r=Uv(e),s=(0,Me.join)((0,bt.getHdbBasePath)(),Zt.DATABASES_DIR_NAME),n=t&&(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,bt.get)(Zt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,bt.get)(Zt.CONFIG_PARAMS.STORAGE_PATH)||((0,fr.existsSync)(s)?s:(0,Me.join)((0,bt.getHdbBasePath)(),Zt.LEGACY_DATABASES_DIR_NAME));let i=(0,Me.join)(s,(n?t:e)+".mdb"),o=vn.get(i);if(!o){let c=new DT.default(i,!1);o=(0,Gd.open)(c),vn.set(i,o)}return o}async function Gh(e){if(!Pe[e])throw new Error("Schema does not exist");let t=Pe[e];for(let r in t){let n=t[r].primaryStore.rootStore;vn.delete(n.path),n.status==="open"&&(await n.close(),await Iv.remove(n.path))}if(e==="data"){for(let r in sr)delete sr[r];delete sr[$d]}delete Pe[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=MT);let u=Ba({database:t,table:e}),l=Pe[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let p=new Ii.default(!1);for(let U of s)U.attribute?(U.name=U.attribute,U.indexed=!0):U.attribute=U.name,U.expiresAt&&(U.indexed=!0);let T,g;if(_){if(Le.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let U=u.auditStore;U||(U=bT(u)),E=s.find(F=>F.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,bt.get)(Zt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Le.trace(`${e} table loading, opening primary store`);let b=new Ii.default(!1,!0),P=e+"/";Le.trace(`openDB ${P} from ${t}`);let z=u.openDB(P,b);z.rootStore=u,Le.trace(`openDB ${vo.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(vo.INTERNAL_DBIS_NAME,p),z.tableId=h.get(Bo),z.tableId||(z.tableId=1),h.putSync(Bo,z.tableId+1),E.tableId=z.tableId,_=Dv(l,e,qd({primaryStore:z,auditStore:U,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,T=!0,$(),h.put(P,E)}Le.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Le.trace(`openDB ${vo.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(vo.INTERNAL_DBIS_NAME,p)),_.dbisDB=h;let O=[];for(let{key:U,value:b}of h.getRange({start:!0})){let[P,z]=U.toString().split("/");if(z===""&&(z=b.name),z){if(P!==e)continue}else z=P;if(!s.find(Oe=>Oe.name===z)?.indexed&&b.indexed&&!b.isPrimaryKey){$(),T=!0,h.remove(U);let Oe=_.indices[P];Oe&&O.push(Oe)}}Le.trace(`${e} table loading, comparing atributes`);let k=[];try{for(let U of s||[]){let b=e+"/"+(U.name||"");Object.defineProperty(U,"key",{value:b,configurable:!0});let P=h.get(b);if(U.isPrimaryKey){if(n===!0&&!_.audit){_.enableAuditing(),P||(b=e+"/",P=h.get(b));let F=Object.assign({},P,{audit:!0});T=!0,$(),h.put(b,F)}continue}P?.attribute&&!P.name&&(P.indexed=!0);let z=!P||P.type!==U.type||P.indexed!==U.indexed||JSON.stringify(P.attributes)!==JSON.stringify(U.attributes)||JSON.stringify(P.elements)!==JSON.stringify(U.elements);if(U.indexed){let F=new Ii.default(!0,!1);Le.trace(`openDB ${b} from ${t}`);let Oe=u.openDB(b,F);(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(T=!0,$(),P=h.get(b),(z||P.indexingPID&&P.indexingPID!==process.pid||P.restartNumber<zc.workerData?.restartNumber)&&(T=!0,U.lastIndexedKey=P?.lastIndexedKey||!1,U.indexingPID=process.pid,Oe.isIndexing=!0,Object.defineProperty(U,"dbi",{value:Oe}),k.push(U)),h.put(b,U)),f[U.name]=Oe}else z&&(T=!0,$(),h.put(b,U))}}finally{g&&g()}if(T&&(_.schemaVersion++,_.updatedAttributes()),Le.trace(`${e} table loading, running index`),k.length>0||O.length>0?_.indexingOperation=t7(_,k,O):T&&xd.signalSchemaChange(new kd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,T)for(let U of PT)U(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Le.trace(`${e} table loaded`),_;function $(){g||u.transactionSync(()=>({then(U){g=U}}))}a($,"startTxn")}async function t7(e,t,r){try{let s=e.schemaVersion;await xd.signalSchemaChange(new kd.SchemaEventMsg(process.pid,"schema-change",e.databaseName,e.tableName));let n;for(let u of r)n=u.drop();let i,o=0,c=t.length;if(await new Promise(u=>setImmediate(u)),c>0){let u=0;for(let{key:l,value:_,version:d}of e.primaryStore.getRange({start:t[0].lastIndexedKey,lazy:c<4,versions:!0,snapshot:!1}))if(_){if(u++,n=e.primaryStore.ifVersion(l,d,()=>{for(let E=0;E<c;E++){let f=t[E],h=f.name,p=(0,wv.getIndexedValues)(_[h]);if(p)for(let T=0,g=p.length;T<g;T++)f.dbi.put(p[T],l)}}),n.then(()=>u--,E=>{u--,Le.error(E)}),zc.workerData&&zc.workerData.restartNumber!==Cv.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>j9?await n:u>e7&&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 kd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Le.error("Error in indexing",s)}}function r7({table:e,database:t}){let r=Ba({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 jp(e){PT.push(e)}var bt,vo,Gd,Me,fr,Ho,Ii,DT,Zt,Iv,LT,wv,xd,kd,zc,Le,Cv,MT,$d,sr,Pe,Bo,PT,Vd,vn,Fo,j9,e7,de=Se(()=>{bt=C(Q()),vo=C(xe()),Gd=require("lmdb"),Me=require("path"),fr=require("fs"),Ho=C(we());sd();Ii=C(Du()),DT=C(Mu()),Zt=C(A()),Iv=C(require("fs-extra")),LT=require("../index"),wv=C(vt()),xd=C(Fs()),kd=C(Fr()),zc=require("worker_threads"),Le=C(x()),Cv=C(dt());Gc();MT="data",$d=Symbol("defined-tables");(0,bt.initSync)();sr=Object.create(null),Pe=Object.create(null);(0,LT._assignPackageExport)("databases",Pe);(0,LT._assignPackageExport)("tables",sr);Bo=Symbol.for("next-table-id"),PT=[],vn=new Map;a(X9,"getTables");a(Gr,"getDatabases");a(Z9,"resetDatabases");a(Qc,"readMetaDb");a(Uv,"ensureDB");a(Dv,"setTable");a(Ba,"database");a(Gh,"dropDatabase");a(rt,"table");j9=1e3,e7=10;a(t7,"runIndexing");a(r7,"dropTableMeta");a(jp,"onUpdatedTable")});var V=m((W_e,Yv)=>{"use strict";var Bn=require("path"),Bv=require("fs-extra"),jt=x(),Lv=require("fs-extra"),Yd=require("os"),s7=require("net"),n7=require("recursive-iterator"),Ge=A(),i7=CR(),Mv=require("papaparse"),Kd=require("moment"),{inspect:o7}=require("util"),Pv=require("is-number"),K_e=require("lodash"),a7=require("minimist"),c7=require("https"),u7=require("http"),{hdb_errors:Wd}=W(),l7=/^((\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)))$/,Hv=require("util").promisify(setTimeout),_7=100,d7=5,E7="",f7=4,vv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Yv.exports={isEmpty:hr,isEmptyOrZeroLength:As,arrayHasEmptyValues:S7,arrayHasEmptyOrZeroLengthValues:p7,buildFolderPath:T7,isBoolean:Fv,errorizeMessage:h7,stripFileExtension:g7,autoCast:A7,autoCastJSON:qv,autoCastJSONDeep:BT,removeDir:O7,compareVersions:N7,isCompatibleDataVersion:b7,escapeRawValue:y7,unescapeValue:I7,stringifyProps:w7,timeoutPromise:U7,isClusterOperation:L7,getClusterUser:P7,checkGlobalSchemaTable:M7,getHomeDir:xv,getPropsFilePath:C7,promisifyPapaParse:v7,removeBOM:kv,createEventPromise:B7,checkProcessRunning:H7,checkSchemaTableExist:F7,checkSchemaExists:Vv,checkTableExists:$v,getStartOfTomorrowInSeconds:q7,getLimitKey:G7,isObject:R7,isNotEmptyAndHasValue:m7,autoCasterIsNumberCheck:Gv,backtickASTSchemaItems:x7,isPortTaken:D7,createForkArgs:k7,autoCastBoolean:V7,async_set_timeout:Hv,getTableHashAttribute:$7,doesSchemaExist:Y7,doesTableExist:K7,stringifyObj:W7,ms_to_time:Q7,changeExtension:z7,getEnvCliRootPath:HT,noBootFile:J7,httpRequest:X7,transformReq:Z7,convertToMS:j7,PACKAGE_ROOT:Ge.PACKAGE_ROOT};function h7(e){return e instanceof Error?e:new Error(e)}a(h7,"errorizeMessage");function hr(e){return e==null}a(hr,"isEmpty");function m7(e){return!hr(e)&&(e||e===0||e===""||Fv(e))}a(m7,"isNotEmptyAndHasValue");function As(e){return hr(e)||e.length===0||e.size===0}a(As,"isEmptyOrZeroLength");function S7(e){if(hr(e))return!0;for(let t=0;t<e.length;t++)if(hr(e[t]))return!0;return!1}a(S7,"arrayHasEmptyValues");function p7(e){if(As(e))return!0;for(let t=0;t<e.length;t++)if(As(e[t]))return!0;return!1}a(p7,"arrayHasEmptyOrZeroLengthValues");function T7(...e){try{return e.join(Bn.sep)}catch{console.error(e)}}a(T7,"buildFolderPath");function Fv(e){return hr(e)?!1:e===!0||e===!1}a(Fv,"isBoolean");function R7(e){return hr(e)?!1:typeof e=="object"}a(R7,"isObject");function g7(e){return As(e)?E7:e.slice(0,-f7)}a(g7,"stripFileExtension");function A7(e){return hr(e)||e===""||typeof e!="string"?e:vv[e]!==void 0?vv[e]:Gv(e)===!0?Number(e):l7.test(e)?new Date(e):e}a(A7,"autoCast");function qv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(qv,"autoCastJSON");function BT(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=BT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=BT(r);s!==r&&(e[t]=s)}return e}else return qv(e)}a(BT,"autoCastJSONDeep");function Gv(e){if(e.startsWith("0.")&&Pv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Pv(e))}a(Gv,"autoCasterIsNumberCheck");async function O7(e){if(As(e))throw new Error(`Directory path: ${e} does not exist`);try{await Lv.emptyDir(e),await Lv.remove(e)}catch(t){throw jt.error(`Error removing files in ${e} -- ${t}`),t}}a(O7,"removeDir");function N7(e,t){if(As(e)){jt.info("Invalid current version sent as parameter.");return}if(As(t)){jt.info("Invalid upgrade version sent as parameter.");return}let r,s=/(\.0+)+$/,n=e.version?e.version:e,i=t.version?t.version:t,o=n.replace(s,"").split("."),c=i.replace(s,"").split("."),u=Math.min(o.length,c.length);for(let l=0;l<u;l++)if(r=parseInt(o[l],10)-parseInt(c[l],10),r)return r;return o.length-c.length}a(N7,"compareVersions");function b7(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(b7,"isCompatibleDataVersion");function y7(e){if(hr(e))return e;let t=String(e);return t==="."?Ge.UNICODE_PERIOD:t===".."?Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD:t.replace(Ge.FORWARD_SLASH_REGEX,Ge.UNICODE_FORWARD_SLASH)}a(y7,"escapeRawValue");function I7(e){if(hr(e))return e;let t=String(e);return t===Ge.UNICODE_PERIOD?".":t===Ge.UNICODE_PERIOD+Ge.UNICODE_PERIOD?"..":String(e).replace(Ge.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(I7,"unescapeValue");function w7(e,t){if(hr(e))return jt.info("Properties object is null"),"";let r="";return e.each(function(s,n){try{if(t&&t[s]){let i=t[s];for(let o of i)r+=";"+o+Yd.EOL}!As(s)&&s[0]===";"?r+=" "+s+n+Yd.EOL:As(s)||(r+=s+"="+n+Yd.EOL)}catch{jt.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(w7,"stringifyProps");function xv(){let e;try{e=Yd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(xv,"getHomeDir");function C7(){let e=Bn.join(xv(),Ge.HDB_HOME_DIR_NAME,Ge.BOOT_PROPS_FILE_NAME);return Bv.existsSync(e)||(e=Bn.join(__dirname,"../","hdb_boot_properties.file")),e}a(C7,"getPropsFilePath");function U7(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(U7,"timeoutPromise");async function D7(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=s7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(D7,"isPortTaken");function L7(e){try{return Ge.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){jt.error(`Error checking operation against cluster ops ${t}`)}return!1}a(L7,"isClusterOperation");function M7(e,t){let r=(de(),re(Ne)).getDatabases();if(!r[e])return Wd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Wd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(M7,"checkGlobalSchemaTable");function P7(e,t){if(hr(t)){jt.warn("No CLUSTERING_USER defined, clustering disabled");return}if(hr(e)||As(e)){jt.warn("No users to search.");return}let r;try{let s=e.get(t);s&&s.role.permission.cluster_user===!0&&s.active===!0&&(r=s)}catch(s){jt.error(`unable to find cluster_user due to: ${s.message}`);return}if(r===void 0){jt.warn(`CLUSTERING_USER: ${t} not found or is not active.`);return}return r}a(P7,"getClusterUser");function v7(){Mv.parsePromise=function(e,t,r){return new Promise(function(s,n){Mv.parse(e,{header:!0,transformHeader:kv,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(v7,"promisifyPapaParse");function kv(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a(kv,"removeBOM");function B7(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;jt.info(`Got cluster status event response: ${o7(n)}`);try{i.cancel()}catch{jt.error("Error trying to cancel timeout.")}s(n)})})}a(B7,"createEventPromise");async function H7(e){let t=!0,r=0;do await Hv(_7*r++),(await i7.findPs(e)).length>0&&(t=!1);while(t&&r<d7);if(t)throw new Error(`process ${e} was not started`)}a(H7,"checkProcessRunning");function F7(e,t){let r=Vv(e);if(r)return r;let s=$v(e,t);if(s)return s}a(F7,"checkSchemaTableExist");function Vv(e){let{getDatabases:t}=(de(),re(Ne));if(!t()[e])return Wd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Vv,"checkSchemaExists");function $v(e,t){let{getDatabases:r}=(de(),re(Ne));if(!r()[e][t])return Wd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a($v,"checkTableExists");function q7(){let e=Kd().utc().add(1,Ge.MOMENT_DAYS_TAG).startOf(Ge.MOMENT_DAYS_TAG).unix(),t=Kd().utc().unix();return e-t}a(q7,"getStartOfTomorrowInSeconds");function G7(){return Kd().utc().format("DD-MM-YYYY")}a(G7,"getLimitKey");function x7(e){try{let t=new n7(e);for(let{node:r}of t)r&&(r.columnid&&typeof r.columnid!="string"&&(r.columnid=r.columnid.toString()),r.columnid&&!r.columnid.startsWith("`")&&(r.columnid_orig=r.columnid,r.columnid=`\`${r.columnid}\``),r.tableid&&!r.tableid.startsWith("`")&&(r.tableid_orig=r.tableid,r.tableid=`\`${r.tableid}\``),r.databaseid&&!r.databaseid.startsWith("`")&&(r.databaseid_orig=r.databaseid,r.databaseid=`\`${r.databaseid}\``),r.as&&typeof r.as=="string"&&!r.as.startsWith("[")&&(r.as_orig=r.as,r.as=`\`${r.as}\``))}catch(t){jt.error("Got an error back ticking items."),jt.error(t)}}a(x7,"backtickASTSchemaItems");function k7(e){return[e]}a(k7,"createForkArgs");function V7(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a(V7,"autoCastBoolean");function $7(e,t){let{getDatabases:r}=(de(),re(Ne)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a($7,"getTableHashAttribute");function Y7(e){let{getDatabases:t}=(de(),re(Ne));return t()[e]!==void 0}a(Y7,"doesSchemaExist");function K7(e,t){let{getDatabases:r}=(de(),re(Ne));return r()[e]?.[t]!==void 0}a(K7,"doesTableExist");function W7(e){try{return JSON.stringify(e)}catch{return e}}a(W7,"stringifyObj");function Q7(e){let t=Kd.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(Q7,"ms_to_time");function z7(e,t){let r=Bn.basename(e,Bn.extname(e));return Bn.join(Bn.dirname(e),r+t)}a(z7,"changeExtension");function HT(){if(process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=a7(process.argv);if(e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[Ge.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(HT,"getEnvCliRootPath");var vT;function J7(){if(vT)return vT;let e=HT();HT()&&Bv.pathExistsSync(Bn.join(e,Ge.HDB_CONFIG_FILE))&&(vT=!0)}a(J7,"noBootFile");function X7(e,t){let r;return e.protocol==="http:"?r=u7:r=c7,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(X7,"httpRequest");function Z7(e){if(!e.schema&&!e.database){e.schema=Ge.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(Z7,"transformReq");function j7(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(j7,"convertToMS")});var Q=m((z_e,Qv)=>{"use strict";var FT=require("fs-extra"),zr=require("path"),Kv=require("os"),eee=require("properties-reader"),Jc=x(),wi=V(),te=A(),Qd=Nr(),tee="Error initializing environment manager",zd="BOOT_PROPS_FILE_PATH",Wv=!1,ree={[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},sn={};Qv.exports={BOOT_PROPS_FILE_PATH:zd,getHdbBasePath:see,setHdbBasePath:nee,get:iee,initSync:aee,setProperty:Ee,initTestEnvironment:cee};function see(){return sn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(see,"getHdbBasePath");function nee(e){sn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(nee,"setHdbBasePath");function iee(e){let t=Qd.getConfigValue(e);return t===void 0?sn[e]:t}a(iee,"get");function Ee(e,t){ree[e]&&(sn[e]=t),Qd.updateConfigObject(e,t)}a(Ee,"setProperty");function oee(){let e;try{e=wi.getPropsFilePath(),FT.accessSync(e,FT.constants.F_OK|FT.constants.R_OK),Wv=!0;let t=eee(e);return sn[te.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(te.HDB_SETTINGS_NAMES.INSTALL_USER),sn[te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),sn[zd]=e,!0}catch{return Jc.trace(`Environment manager found no properties file at ${e}`),!1}}a(oee,"doesPropFileExist");function aee(e=!1){try{(Wv||oee()||wi.noBootFile())&&(Qd.initConfig(e),sn[te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Qd.getConfigValue(te.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Jc.error(tee),Jc.error(t),console.error(t),process.exit(1)}}a(aee,"initSync");function cee(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=zr.join(__dirname,"../../","unitTests");sn[zd]=zr.join(u,"hdb_boot_properties.file"),Ee(te.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,zr.join(u,"settings.test")),Ee(te.HDB_SETTINGS_NAMES.INSTALL_USER,Kv.userInfo()?Kv.userInfo().username:void 0),Ee(te.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.HDB_SETTINGS_NAMES.CERT_KEY,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,zr.join(u,"envDir","utility","keys","privateKey.pem")),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,zr.join(u,"envDir","utility","keys","certificate.pem")),Ee(te.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),Ee(te.HDB_SETTINGS_NAMES.LOG_PATH_KEY,zr.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,zr.join(u,"envDir")),Ee(te.CONFIG_PARAMS.STORAGE_PATH,zr.join(u,"envDir")),Ee(te.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,wi.isEmpty(n)?!0:n),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,wi.isEmpty(n)?!0:n),Ee(te.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),Ee(te.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,wi.isEmpty(i)?!1:i),Ee(te.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,wi.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,zr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),Ee(te.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,wi.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 ${zd}. Please check your boot props and settings files`;Jc.fatal(r),Jc.error(t)}}a(cee,"initTestEnvironment")});var nt=m((tde,EB)=>{"use strict";var yt=Q();yt.initSync();var uee=require("fs-extra"),lee=require("semver"),eu=require("path"),{monotonicFactory:_ee}=require("ulidx"),kT=_ee(),dee=require("util"),Jv=require("child_process"),Eee=dee.promisify(Jv.exec),fee=Jv.spawn,_e=Be(),Re=A(),Jd=V(),Mr=x(),Xd=Ms(),hee=yl(),Xc=Nr(),{Encoder:mee,decode:VT}=require("msgpackr"),Xv=new mee,{isEmpty:Ci}=Jd,Zv=br(),jv=12e10,See=48*36e11,pee=5e9,{connect:Tee,StorageType:eB,RetentionPolicy:tB,AckPolicy:Zd,DeliverPolicy:jd,DiscardPolicy:Ree,NatsConnection:X_e,JetStreamManager:Z_e,JetStreamClient:j_e,StringCodec:ede,JSONCodec:gee,createInbox:$T,headers:Aee,ErrorCode:zv}=require("nats"),{PACKAGE_ROOT:Oee}=A(),Nee=Ya(),{recordAction:bee}=(go(),re($_)),rB=gee(),yee="clustering",Iee=Nee.engines[_e.NATS_SERVER_NAME],wee=eu.join(Oee,"dependencies"),xT=eu.join(wee,`${process.platform}-${process.arch}`,_e.NATS_BINARY_NAME),qT,GT,Zc,qo,Go;EB.exports={runCommand:sB,checkNATSServerInstalled:Cee,createConnection:YT,getConnection:eE,getJetStreamManager:tu,getJetStream:nB,getNATSReferences:er,getServerList:Dee,createLocalStream:KT,listStreams:iB,deleteLocalStream:Lee,getServerConfig:ru,listRemoteStreams:Mee,viewStream:Pee,viewStreamIterator:vee,publishToStream:Bee,createWorkQueueStream:Hee,addSourceToWorkStream:aB,request:qee,removeSourceFromWorkStream:uB,reloadNATS:WT,reloadNATSHub:Gee,reloadNATSLeaf:xee,extractServerName:cB,requestErrorHandler:kee,updateWorkStream:Vee,createLocalTableStream:_B,createTableStreams:$ee,purgeTableStream:dB,purgeSchemaTableStreams:Yee,getStreamInfo:Kee,updateLocalStreams:Qee,closeConnection:Uee,getJsmServerName:su,addNatsMsgHeader:oB,updateIngestStreamConsumer:Fee};async function sB(e,t=void 0){let{stdout:r,stderr:s}=await Eee(e,{cwd:t});if(s)throw new Error(s.replace(`
24
+ `+Kp.readFileSync(o):"")};s.http2=!0,s.https=c}return s}a(G6,"getServerOptions");function x6(){let e=zr.get(U6),t=zr.get(D6),r;return e&&(e===!0||e.toUpperCase()===nP)&&(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(x6,"getCORSOpts");function k6(){return zr.get(P6)}a(k6,"getHeaderTimeoutConfig")});var Zp={};je(Zp,{disableNATS:()=>$6,setNATSReplicator:()=>Wp,start:()=>V6});function V6(){Td.default.get(Rd.default.CONFIG_PARAMS.CLUSTERING_ENABLED)&&K6()}function $6(e=!0){_P=e}function K6(){if(_P)return;let e=kr(),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];Wp(n,r,i)}}jp((r,s)=>{Wp(r.tableName,r.databaseName,r),s&&EP(r)}),!aP&&(aP=!0)}function Wp(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[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"put",table:e,id:this[ce],record:o},c)}delete(){let o;return s?.delete&&(!s.delete.reliesOnPrototype||s.prototype.delete)&&(o=s.delete(this[ce],this.getContext())),n(this.getContext()).addWrite(t,{operation:"delete",table:e,id:this[ce]},o)}publish(o){let c;return s?.publish&&(!s.publish.reliesOnPrototype||s.prototype.publish)&&(c=s.publish(this[ce],o,this.getContext())),n(this.getContext()).addWrite(t,{operation:"publish",table:e,id:this[ce],record:o},c)}invalidate(o){n(this.getContext()).addWrite(t,{operation:"invalidate",table:e,id:this[ce]})}static defineSchema(o){EP(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,cP.setSubscription)(t,e,o),o}static subscribeOnThisThread(o){return o<Y6}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 pd(i.transaction,i)),o.user=i.user):o=dP),o}a(n,"getNATSTransaction")}function EP(e){let t=Td.default.get(Rd.default.CONFIG_PARAMS.CLUSTERING_NODENAME);(0,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${e.databaseName}.${e.tableName}`,(0,Xp.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 zp,Jp,Xp,cP,uP,Td,Rd,lP,_P,Y6,dP,aP,pd,Qp,fP=pe(()=>{Ee();es();zp=U(nt()),Jp=U(He()),Xp=U(Hs());na();cP=U(eT()),uP=U(Bt()),Td=U(Q()),Rd=U(A()),lP=U(k());a(V6,"start");a($6,"disableNATS");Y6=2;a(K6,"assignReplicationSource");a(Wp,"setNATSReplicator");a(EP,"publishSchema");pd=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=Td.default.get(Rd.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||(lP.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,zp.publishToStream)(`${Jp.SUBJECT_PREFIXES.TXN}.${n}.${u.table}`,(0,Xp.createNatsTableStreamName)(n,u.table),void 0,u))}return Promise.all(s)}},Qp=class extends pd{static{a(this,"ImmmediateNATSTransaction")}constructor(){super({get timestamp(){return(0,uP.getNextMonotonicTime)()}})}addWrite(t,r){super.addWrite(t,r),this.commit()}};dP=new Qp});async function mP({clientId:e,user:t,listener:r,clean:s}){let n;if(e&&!s){let i=await tT.getResource(e,{});n=new sT(e,t,i),i&&(n.sessionWasPresent=!0)}else{if(e){let i=await tT.get(e);i&&i.delete()}n=new Ad(e,t)}return n}function rT(){return gd++,gd>65500&&(gd=1),gd}var hP,Hc,tT,gd,Ad,sT,SP=pe(()=>{Ee();_c();hP=U(Bt()),Hc=U(k());Vn();tT=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(mP,"getSession");gd=1;a(rT,"getNextMessageId");Ad=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=Un.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 Ke(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 F of O)try{let $;if(F.type&&F.type!=="put"&&F.type!=="delete"&&F.type!=="message"||s&&!s(F))continue;r?(F.topic=n,$=this.needsAcknowledge(F)):$=rT();let w=F.id;Array.isArray(w)&&(w=ho(w)),w==null&&(w=""),this.listener(T+"/"+w,F.value,$,t)}catch($){(0,Hc.warn)($)}})(),O});return R.topic=n,R.qos=t.qos,this.subscriptions.push(R),R}resume(){}needsAcknowledge(t){return rT()}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=Un.getMatch(s);if(!i)throw new Error(`Can not publish to topic ${s} as it does not exist, no resource has been defined to handle this topic`);t.url=i.relativeURL;let o=i.Resource;return Ke(t,()=>n?r===void 0?o.delete(t,t):o.put(t,t.data,t):o.publish(t,t.data,t))}setListener(t){this.listener=t}disconnect(){for(let t of this.subscriptions)t.end();this.subscriptions=[]}},sT=class extends Ad{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=rT();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,Hc.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,hP.getNextMonotonicTime)()),(0,Hc.trace)("Added durable subscription",i.topic,o),{qos:i.qos,topic:i.topic,startTime:o}}),tT.put(this.sessionRecord)),t.qos}}});var oT={};je(oT,{start:()=>Q6});async function Q6({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:_}=RP(o,(d,E)=>{if(o.send(d),E&&o._socket.writableNeedDrain)return new Promise(f=>this._socket.once("drain",f))},c,Promise.resolve(u).then(()=>c?.user),i);o.on("message",l),o.on("close",_),o.on("error",d=>{(0,nn.info)("WebSocket error",d)})}},{subProtocol:"mqtt"}),(t||s)&&e.socket(async o=>{let c;W6&&o.remoteAddress.includes("127.0.0.1")&&(c=await(0,gP.getSuperUser)());let{onMessage:u,onClose:l}=RP(o,_=>o.write(_),null,c,i);o.on("data",u),o.on("close",l),o.on("error",_=>{(0,nn.info)("Socket error",_)})},{port:t,securePort:s})}function RP(e,t,r,s,n){TP||(TP=!0,ap(_=>{_.push({metric:"mqtt-connections",connections:nT})})),nT++;let i,o={protocolVersion:4},c=(0,Od.parser)({protocolVersion:5});function u(_){c.parse(_)}a(u,"onMessage");function l(){nT--,i?.disconnect()}return a(l,"onClose"),c.on("packet",async _=>{s?.then&&(s=await s),i?.then&&await i;try{switch(_.cmd){case"connect":if(o.protocolVersion=_.protocolVersion,_.username)try{s=await tt.auth(_.username,_.password.toString()),(0,iT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGSUCCESSFUL)&&pP.notify({username:s.username,status:on.AUTH_AUDIT_STATUS.SUCCESS,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"MQTT",remote_address:e.remoteAddress})}catch{return(0,iT.get)(on.CONFIG_PARAMS.LOGGING_AUDITAUTHEVENTS_LOGFAILED)&&pP.error({username:s.username,status:on.AUTH_AUDIT_STATUS.FAILURE,type:on.AUTH_AUDIT_TYPES.AUTHENTICATION,auth_strategy:"mqtt",remote_address:e.remoteAddress}),d({cmd:"connack",reasonCode:134,returnCode:134})}if(!s&&n.requireAuthentication)return d({cmd:"connack",reasonCode:134,returnCode:134});try{n.authorizeClient?.(_,s),i=mP({user:s,..._}),i=await i}catch(O){return(0,nn.error)(O),d({cmd:"connack",reasonCode:O.code||128,returnCode:O.code||128})}d({cmd:"connack",sessionPresent:i.sessionWasPresent,reasonCode:0,returnCode:0}),i.setListener((O,F,$,w)=>{try{let I=O.indexOf("/",1),D=I>0?O.slice(0,I):O;d({cmd:"publish",topic:O,payload:E(F),messageId:$||Math.floor(Math.random()*1e8),qos:w.qos},D)}catch(I){(0,nn.error)(I),i?.disconnect()}}),i.sessionWasPresent&&await i.resume();break;case"subscribe":let f=[];for(let O of _.subscriptions){let F;try{F=(await i.addSubscription(O,O.qos>=1)).qos||0}catch($){(0,nn.error)($),F=128}f.push(F)}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=Ao(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,Od.generate)(f,o);t(T),pi(T.length,"bytes-sent",h,f.cmd,"mqtt")}a(d,"sendPacket");function E(f){return r?zs(f,r):JSON.stringify(f)}a(E,"serialize")}),{onMessage:u,onClose:l}}var Od,gP,iT,on,nn,pP,W6,TP,nT,AP=pe(()=>{Od=require("mqtt-packet");SP();gP=U(Ir());So();Oo();ss();iT=U(Q()),on=U(A()),nn=U(k()),pP=(0,nn.loggerWithTag)("auth-event"),W6=!0;a(Q6,"start");nT=0;a(RP,"onSocket")});var LP={};je(LP,{loadComponent:()=>Nd,loadComponentDirectories:()=>DP});function DP(e,t){t&&(cT=t),e&&(uT=e);let r=[];if((0,gs.existsSync)(aT)){let n=(0,gs.readdirSync)(aT,{withFileTypes:!0});for(let i of n){if(!i.isDirectory()&&!i.isSymbolicLink())continue;let o=i.name,c=(0,Pr.join)(aT,o);r.push(Nd(c,cT,"hdb",!1))}}let s=process.env.RUN_HDB_APP;return s&&r.push(Nd(s,cT,s)),Promise.all(r).then(()=>{UP=!0})}async function Nd(e,t,r,s,n){if(!NP.has(e)){NP.set(e,!0),n&&(uT=n);try{let i,o=(0,Pr.join)(e,s?"harperdb-config.yaml":"config.yaml");(0,gs.existsSync)(o)?i=(0,bP.parseDocument)((0,gs.readFileSync)(o,"utf8"),{simpleKeys:!0}).toJSON():i=Z6;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,gs.existsSync)(f=(0,Pr.join)(E,"node_modules",u));)if(E=(0,Pr.dirname)(E),E.length<(0,CP.getHdbBasePath)().length){f=null;break}if(f)_=await Nd(f,t,r,!1);else throw new Error(`Unable to find package ${u}:${d}`)}else _=X6[u];if(_)try{c.push(_);let E=a(p=>(p.origin=r,rt(p)),"ensureTable"),f=l.network||(l.port||l.securePort)&&l,h=f?.securePort||f?.https&&f.port,T=!f?.https&&f?.port;if(Fc.isMainThread&&(_=await _.startOnMainThread?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_,s&&f))for(let p of[T,h])try{if(+p&&!OP.includes(p)){OP.push(p);let R=lT.get(_T.CONFIG_PARAMS.HTTP_SESSION_AFFINITY);eP(p,R)}}catch(R){console.error("Error listening on socket",p,R,u)}if(t.isWorker&&(_=await _.start?.({server:tt,ensureTable:E,port:T,securePort:h,resources:t,...l})||_),uT.set(_,!0),_.handleFile&&l.files){if(l.files.includes(".."))throw(0,wP.handleHDBError)("Can not reference parent directories");let p=(0,Pr.join)(e,l.files);for(let R of await(0,yP.default)(p,{onlyFiles:!1,objectMode:!0})){let{path:O,dirent:F}=R,$=(0,Pr.relative)(e,O),w=(0,Pr.basename)(e),I=l.path||"/";I=I.startsWith("/")?I:I.startsWith("./")?"/"+w+I.slice(2):I==="."?"/"+w:"/"+w+"/"+I,I+=(I.endsWith("/")?"":"/")+$;try{if(F.isFile()){let D=await J6(O);Fc.isMainThread&&await _.setupFile?.(D,I,O,t),t.isWorker&&await _.handleFile?.(D,I,O,t)}else Fc.isMainThread&&await _.setupDirectory?.(I,O,t),t.isWorker&&await _.handleDirectory?.(I,O,t)}catch(D){console.error(`Could not load ${F.isFile()?"file":"directory"} ${O} using ${l.module} for application ${e}`,D),t.set(l.path||"/",new qc(D))}}}}catch(E){console.error(`Could not load component ${u} for application ${e}`,E),t.set(l.path||"/",new qc(E),null,!0)}}if(Fc.isMainThread&&!UP&&(0,IP.watchDir)(e,async()=>DP()),i.extensionModule)return await Cu((0,Pr.join)(e,i.extensionModule))}catch(i){console.error(`Could not load application directory ${e}`,i),t.set("",new qc(i))}}}var gs,Pr,Fc,bP,lT,_T,yP,IP,wP,CP,z6,J6,aT,uT,UP,cT,X6,Z6,OP,NP,qc,MP=pe(()=>{gs=require("fs"),Pr=require("path"),Fc=require("worker_threads"),bP=require("yaml"),lT=U(Q()),_T=U(A());hg();Tg();Rg();$D();YM();zM();yP=U(require("fast-glob")),IP=U(dt());PE();ss();wP=U(W());es();Ee();tP();CP=U(Q()),z6=U(oP());g_();fP();AP();({readFile:J6}=gs.promises),aT=lT.get(_T.CONFIG_PARAMS.CUSTOMFUNCTIONS_ROOT),uT=new Map;a(DP,"loadComponentDirectories");X6={REST:rp,graphqlSchema:ME,jsResource:BE,fastifyRoutes:xp,login:FE,static:kp,operationsApi:z6,customFunctions:{},clustering:Zp,authentication:dc,mqtt:oT},Z6={REST:!0,graphqlSchema:{files:"*.graphql"},jsResource:{files:"resources.js"},fastifyRoutes:{files:"routes/*.js",path:"."}},OP=[],NP=new Map;a(Nd,"loadComponent");qc=class extends ht{constructor(r){super();this.error=r}static{a(this,"ErrorResource")}get(){throw this.error}post(){throw this.error}put(){throw this.error}delete(){throw this.error}connect(){throw this.error}getResource(){return this}publish(){throw this.error}subscribe(){throw this.error}}});var qP=m((__e,FP)=>{"use strict";var Id=require("fs-extra"),dT=require("path"),bd=k(),PP=V(),yd=A(),HP=Q(),j6=yr();FP.exports=e9;async function e9(){let e=t9(),t=HP.get(yd.CONFIG_PARAMS.ROOTPATH),r=dT.join(t,"package.json"),s={dependencies:{harperdb:"file:"+yd.PACKAGE_ROOT}},n=dT.join(t,"node_modules");await Id.ensureDir(n);let i,o=!0,c=!1;try{i=await Id.readJson(r)}catch(u){if(PP.isEmptyOrZeroLength(e))return;if(u.code!==yd.NODE_ERROR_CODES.ENOENT)throw u;o=!1}if(!PP.isEmptyOrZeroLength(e)){for(let{name:u,package:l}of e){let _=await vP(l);s.dependencies[u]=_+l}if(!o){bd.notify("Installing components"),await BP(r,s);return}for(let{name:u,package:l}of e){let _=i.dependencies[u],d=await vP(l);if(_===void 0||_!==d+l){c=!0;break}}}for(let u in i.dependencies)s.dependencies[u]===void 0&&(bd.notify("Removing component",u),c=!0);c&&(bd.notify("Updating components."),await BP(r,s))}a(e9,"installComponents");function t9(){let e=j6.getConfiguration(),t=[];for(let r in e)e[r]?.package&&t.push(Object.assign(e[r],{name:r}));return t}a(t9,"getComponentsConfig");async function vP(e){return e.includes(":")?"":e.startsWith("@")||!e.startsWith("@")&&!e.includes("/")?"npm:":dT.extname(e)||await Id.pathExists(e)?"file:":"github:"}a(vP,"getPkgPrefix");async function BP(e,t){bd.trace("npm installing components package.json",t),await Id.writeFile(e,JSON.stringify(t,null," ")),await C_().installAllRootModules(HP.get(yd.CONFIG_PARAMS.IGNORE_SCRIPTS)===!0)}a(BP,"installPackages")});var kP=m((E_e,xP)=>{var{isMainThread:GP}=require("worker_threads"),{getTables:r9}=(Ee(),se(be)),{loadComponentDirectories:s9,loadComponent:n9}=(MP(),se(LP)),{resetResources:i9}=(_c(),se(RU)),o9=qP(),a9=yr(),{dirname:c9}=require("path"),{getConnection:u9}=nt(),l9=Q(),_9=A(),ET=new Map;async function d9(e=!1){!GP&&l9.get(_9.CONFIG_PARAMS.CLUSTERING_ENABLED)&&u9(),GP&&await o9();let t=i9();r9(),t.isWorker=e,await n9(c9(a9.getConfigFilePath()),t,"hdb",!0,ET),await s9(ET,t);let r=[];for(let[s]of ET)s.ready&&r.push(s.ready());r.length>0&&await Promise.all(r)}a(d9,"loadRootComponents");xP.exports.loadRootComponents=d9});var dt=m((m_e,Hn)=>{"use strict";var{Worker:E9,MessageChannel:f9,parentPort:As,isMainThread:pT,threadId:h9,workerData:Gc}=require("worker_threads"),{PACKAGE_ROOT:m9}=A(),{join:YP,isAbsolute:S9,extname:Cd}=require("path"),{server:p9}=(ss(),se(wu)),{watch:T9,readdir:R9}=require("fs/promises"),{totalmem:VP}=require("os"),TT=A(),Mo=k(),h_e=A(),{randomBytes:g9}=require("crypto"),A9=1024*1024,Bn=[],vn=[],O9=50,KP=1e4,N9="restart",WP="request_thread_info",QP="resource_report",zP="thread_info",JP="added-port",b9="ack",fT;Hn.exports={startWorker:hT,restartWorkers:RT,shutdownWorkers:C9,workers:Bn,setMonitorListener:H9,onMessageFromWorkers:U9,onMessageByType:D9,broadcast:L9,broadcastWithAcknowledgement:P9,setChildListenerByType:w9,getWorkerIndex:ZP,getTicketKeys:jP,setMainIsWorker:y9,restartNumber:Gc?.restartNumber||1};var XP;function ZP(){return Gc?Gc.workerIndex:XP?0:void 0}a(ZP,"getWorkerIndex");function y9(e){XP=e}a(y9,"setMainIsWorker");var wd;function jP(){return wd||(wd=pT?g9(48):Gc.ticketKeys,wd)}a(jP,"getTicketKeys");Object.defineProperty(p9,"workerIndex",{get(){return ZP()}});var ev={[WP](e,t){v9(t)},[QP](e,t){B9(t,e)}};function hT(e,t={}){let r=process.constrainedMemory?.()||VP();r=Math.min(r,VP());let s=Math.max(Math.floor(r/A9/(1+(t.threadCount||1)/4)),512),n=Math.min(Math.max(s>>7,16),64),i=[];for(let c of vn){let{port1:u,port2:l}=new f9;c.postMessage({type:JP,port:u},[u]),i.push(l)}Cd(e)||(e+=".js");let o=new E9(S9(e)?e:YP(m9,e),Object.assign({resourceLimits:{maxOldGenerationSizeMb:s,maxYoungGenerationSizeMb:n},execArgv:["--enable-source-maps"],argv:process.argv.slice(2),workerData:{addPorts:i,workerIndex:t.workerIndex,name:t.name,restartNumber:Hn.exports.restartNumber,ticketKeys:jP()},transferList:i},t));return Dd(o,!0),o.unexpectedRestarts=t.unexpectedRestarts||0,o.startCopy=()=>{hT(e,t)},o.on("error",c=>{console.error("Worker error:",c),Mo.error("Worker error:",c)}),o.on("exit",c=>{Bn.splice(Bn.indexOf(o),1),!o.wasShutdown&&t.autoRestart!==!1&&(o.unexpectedRestarts<O9?(t.unexpectedRestarts=o.unexpectedRestarts+1,hT(e,t)):Mo.error(`Thread has been restarted ${o.restarts} times and will not be restarted`))}),o.on("message",c=>{ev[c.type]?.(c,o)}),Bn.push(o),q9(),t.onStarted&&t.onStarted(o),o.name=t.name,o}a(hT,"startWorker");var I9=[TT.THREAD_TYPES.HTTP];async function RT(e=null,t=2,r=!0){if(pT){if(r){let{loadRootComponents:n}=kP();await n()}Hn.exports.restartNumber++,t<1&&(t=t*Bn.length);let s=[];for(let n of Bn.slice(0)){if(e&&n.name!==e||n.wasShutdown)continue;n.postMessage({restartNumber:Hn.exports.restartNumber,type:TT.ITC_EVENT_TYPES.SHUTDOWN}),n.wasShutdown=!0,n.emit("shutdown",{});let i=I9.indexOf(n.name)>-1,o=new Promise(c=>{let u=setTimeout(()=>n.terminate(),KP*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 As.postMessage({type:N9,workerType:e})}a(RT,"restartWorkers");function w9(e,t){ev[e]=t}a(w9,"setChildListenerByType");function C9(e){return RT(e,1/0,!1)}a(C9,"shutdownWorkers");var tv=[];function U9(e){tv.push(e)}a(U9,"onMessageFromWorkers");var mT=new Map;function D9(e,t){let r=mT.get(e);r||mT.set(e,r=[]),r.push(t)}a(D9,"onMessageByType");function L9(e){for(let t of vn)try{t.postMessage(e)}catch(r){Mo.error("Unable to send message to worker",r)}}a(L9,"broadcast");var Ud=new Map,M9=1;function P9(e){return new Promise(t=>{let r=0;for(let s of vn)try{let n=M9++,i=a(()=>{Ud.delete(n),--r===0&&t(),s!==As&&--s.refCount===0&&s.unref()},"ack_handler");i.port=s,s.ref(),s.refCount=(s.refCount||0)+1,Ud.set(e.requestId=n,i),s.hasAckCloseListener||(s.hasAckCloseListener=!0,s.on(s.close?"close":"exit",()=>{for(let[,o]of Ud)o.port===s&&o()})),s.postMessage(e),r++}catch(n){Mo.error("Unable to send message to worker",n)}r===0&&t()})}a(P9,"broadcastWithAcknowledgement");function v9(e){e.postMessage({type:zP,workers:rv()})}a(v9,"sendThreadInfo");function rv(){let e=Date.now();return Bn.map(t=>({threadId:t.threadId,name:t.name,heapTotal:t.resources?.heapTotal,heapUsed:t.resources?.heapUsed,externalMemory:t.resources?.external,arrayBuffers:t.resources?.arrayBuffers,sinceLastUpdate:e-t.resources?.updated,...t.recentELU}))}a(rv,"getChildWorkerInfo");function B9(e,t){e.resources=t,e.resources.updated=Date.now()}a(B9,"recordResourceReport");var ST;function H9(e){ST=e}a(H9,"setMonitorListener");var F9=1e3,$P=!1;function q9(){$P||($P=!0,setInterval(()=>{for(let e of Bn){let t=e.performance.eventLoopUtilization(),r;e.lastTotalELU?r=e.performance.eventLoopUtilization(t,e.lastTotalELU):r=t,e.lastTotalELU=t,e.recentELU=r}ST&&ST()},F9).unref())}a(q9,"startMonitoring");var G9=1e3;if(As){Dd(As);for(let e of Gc.addPorts)Dd(e);setInterval(()=>{let e=process.memoryUsage();As.postMessage({type:QP,heapTotal:e.heapTotal,heapUsed:e.heapUsed,external:e.external,arrayBuffers:e.arrayBuffers})},G9).unref(),fT=a(()=>new Promise((e,t)=>{As.on("message",r),As.postMessage({type:WP});function r(s){s.type===zP&&(As.off("message",r),e(s.workers))}a(r,"receiveThreadInfo")}),"getThreadInfo")}else fT=rv;Hn.exports.getThreadInfo=fT;function Dd(e,t){vn.push(e),e.on("message",r=>{if(r.type===JP)Dd(r.port);else if(r.type===b9){let s=Ud.get(r.id);s&&s()}else{for(let n of tv)n(r,e);let s=mT.get(r.type);if(s)for(let n of s)try{n(r,e)}catch(i){Mo.error(i)}}}).on("close",()=>{vn.splice(vn.indexOf(e),1)}).on("exit",()=>{vn.splice(vn.indexOf(e),1)}),t?e.refCount=100:e.unref()}a(Dd,"addPort");if(pT){let e,t,r=a(async(s,n)=>{n&&(e=n);for(let i of await R9(s,{withFileTypes:!0}))i.isDirectory()&&i.name!=="node_modules"&&r(YP(s,i.name));try{for await(let{filename:i}of T9(s,{persistent:!1}))(Cd(i)===".ts"||Cd(i)===".js"||Cd(i)===".graphql")&&(t&&clearTimeout(t),t=setTimeout(async()=>{e&&await e(),await RT(),console.log("Reloaded HarperDB components")},100))}catch(i){console.warn("Error trying to watch component directory",s,i)}},"watch_dir");Hn.exports.watchDir=r,process.env.WATCH_DIR&&r(process.env.WATCH_DIR)}else As.on("message",async e=>{let{type:t}=e;t===TT.ITC_EVENT_TYPES.SHUTDOWN&&(Hn.exports.restartNumber=e.restartNumber,As.unref(),setTimeout(()=>{Mo.warn("Thread did not voluntarily terminate",h9),process.exit(0)},KP).unref())})});function bT(e){let t=e.auditStore=e.openDB(av.AUDIT_STORE_NAME,k9);t.rootStore=e;let r=[];return t.addDeleteRemovalCallback=function(s,n){return r[s]=n,{remove(){delete r[s]}}},(0,uv.getWorkerIndex)()===0&&e.on("aftercommit",()=>{AT||(AT=setTimeout(()=>{if(AT=null,t.rootStore.status!=="closed")for(let{key:s,value:n}of t.getRange({start:[0,0],end:[Date.now()-sv,0]})){if((n[0]&15)===NT){let i=s[1];r[i]?.(s[2])}t.remove(s)}},sv/10).unref())}),t}function Pd(e,t,r){let s=dv[r.type],n=3;if(t?t.length>80?(s|=Ld,n=(0,an.writeKey)(t,Os,e?14:6),gT.setUint16(2,n)):(n=(0,an.writeKey)(t,Os,e?11:3),Os[1]=n):Os[1]=0,e){s|=_v;let i=s&Ld?6:3;gT.setFloat64(i,e),t||(n=i+8)}return Os[0]=s,s&Ld?gT.setUint16(4,0):Os[2]=0,r.value?Buffer.concat([Os.slice(0,n),r.value]):Os.subarray(0,n)}function Fn(e,t){let r=e[0],s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength)),n=r&Ld,i=n?6:3,o;r&_v&&(o=s.getFloat64(i),i+=8);let c;n?c=s.getUint16(2):c=e[1];let u=r&OT?t.decoder.decode(e.subarray(c||i)):void 0;return{type:dv[r&7],value:u,lastVersion:o,get user(){return c?(0,an.readKey)(e,i,c):void 0}}}var an,Md,av,cv,uv,lv,Os,gT,x9,k9,sv,AT,OT,nv,NT,iv,ov,Ld,_v,dv,xc=pe(()=>{an=require("ordered-binary"),Md=U(Q()),av=U(ke()),cv=U(A()),uv=U(dt()),lv=U(V());(0,Md.initSync)();Os=Buffer.alloc(1024),gT=new DataView(Os.buffer,Os.byteOffset,1024),x9={writeKey(e,t,r){if(Array.isArray(e)){let s=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength));return s.setFloat64(r,e[0]),s.setUint32(r+8,e[1]),(0,an.writeKey)(e[2],t,r+12)}else return(0,an.writeKey)(e,t,r)},readKey(e,t,r){if(e[t]>40){let s=e.dataView||(e.dataView=new DataView(e.buffer,e.byteOffset,e.byteLength));return[s.getFloat64(t),s.getUint32(t+8),(0,an.readKey)(e,t+12,r)]}else return(0,an.readKey)(e,t,r)}},k9={encoding:"binary",keyEncoder:x9},sv=(0,lv.convertToMS)((0,Md.get)(cv.CONFIG_PARAMS.LOGGING_AUDITRETENTION))||86400*3,AT=null;a(bT,"openAuditStore");OT=16,nv=1,NT=2,iv=3,ov=4,Ld=128,_v=64,dv={put:nv|OT,[nv]:"put",delete:NT,[NT]:"delete",message:iv|OT,[iv]:"message",invalidate:ov,[ov]:"invalidate"};a(Pd,"createAuditEntry");a(Fn,"readAuditEntry")});var yT,yi,V9,kc,vd,Ev=pe(()=>{yT=U(Bt());xc();yi=Symbol("completion"),V9=100,kc=class{static{a(this,"DatabaseTransaction")}writes=[];hasWrittenTime;username;lmdbDb;auditStore;readTxn;constructor(t,r,s){this.lmdbDb=t,this.username=r?.username,this.auditStore=s}getReadTxn(){return this.readTxn||(this.readTxn=this.lmdbDb.useReadTransaction())}resetReadSnapshot(){this.readTxn&&(this.readTxn.done(),this.readTxn=null)}addWrite(t){this.writes.push(t)}validate(){for(let t of this.writes||[])t.validate?.()}commit(t=(0,yT.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,Pd(_.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<V9>>s?l():(s=1,n=this.writes[0].store.transaction(()=>{for(let _ of this.writes)u(_);return!0})),n?.then(_=>_?(c&&i.push(c.flushed),Promise.all(i).then(()=>(this.writes=[],{txnTime:t}))):this.commit(t,r,s+1))}abort(){this.resetReadSnapshot(),this.writes=[]}},vd=class extends kc{static{a(this,"ImmediateTransaction")}_timestamp;addWrite(t){super.addWrite(t),this.commit(this.timestamp)}get timestamp(){return this._timestamp||(this._timestamp=(0,yT.getNextMonotonicTime)())}getReadTxn(){}}});function Sv(e,t,r,s,n){let i=e.primaryStore.env.path,o=e.primaryStore.tableId;vo||((0,Ii.onMessageByType)(hv,d=>{let E=d.auditIds;wT(d.path,E,d.txnId)}),(0,Ii.onMessageByType)(mv,d=>{(0,Ns.trace)("confirming to proceed with txn",d.txnId)}),vo=Object.create(null));let c=vo[i]||(vo[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=ho(t);let l=new IT(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 wT(e,t,r,s){if(!vo)return;let n=vo[e];if(n){if(Po&&Po+1!==r){(0,Ns.trace)("Waiting to ensure latest txn id",Po,"proceeds",r,s);let i=(async()=>{for(let[o,c]of Bd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c);if(Po+1!==r){await(0,Ii.broadcastWithAcknowledgement)({type:mv,txnId:r});for(let[o,c]of Bd)o<r&&((0,Ns.trace)("Txn",r,"waiting for txn",o),await c)}Bd.delete(r),(0,Ns.trace)("Proceeding with txn id",r),Po=r-1,wT(e,t,r,s)})();return Bd.set(r,i),i}(0,Ns.trace)("Notifying with txn id",r,s),Po=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,fv.writeKey)(i,Y9,0);let _=i[3];_&&(i.length=3);let d,E=ho(u),f;do{let h=l.get(E);if(h){for(let p of h)if(!(f&&!p.includeDescendants)){if(p.startTime>=o){(0,Ns.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=Fn(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,Ns.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 pv(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&$9)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:hv,path:n,auditIds:l,txnId:c,start:u}),wT(n,l,c,!0))})}}var Ns,Ii,fv,hv,mv,$9,vo,Y9,IT,Po,Bd,Tv=pe(()=>{Ns=U(k()),Ii=U(dt()),fv=require("ordered-binary");na();_c();xc();hv="transaction",mv="transaction-await",$9=67108864,Y9=Buffer.alloc(4096);a(Sv,"addSubscription");IT=class extends jr{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"}}},Bd=new Map;a(wT,"notifyFromTransactionData");a(pv,"listenToCommits")});var Np={};je(Np,{coerceType:()=>Hd,makeTable:()=>qd,setServerUtilities:()=>J9});function qd(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=[]),pv(i,u);let T=0,p,R,O,F={},$,w,I,D;for(let Z of h)(Z.assignCreatedTime||Z.name==="__createdtime__")&&($=Z),(Z.assignUpdatedTime||Z.name==="__updatedtime__")&&(w=Z),Z.expiresAt&&(I=Z),Z.isPrimaryKey&&(F=Z);let z;E&&JT();class M 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=$;static updatedTimeProperty=w;static get expirationMS(){return d}static dbisDB=_;static schemaDefined=l;static sourcedFrom(S,N){if(N&&(this.sourceOptions=N,N.expiration&&this.setTTLExpiration(N.expiration)),this.Source)if(this.Source.mergeSource)this.Source=this.Source.mergeSource(S,this.sourceOptions);else if(S.mergeSource)this.Source=S.mergeSource(this.Source,this.sourceOptions);else throw new Error("Can not assign multiple sources to a table with no source providing a (static) mergeSource method");else this.Source=S;return R=S&&S.get&&(!S.get.reliesOnPrototype||S.prototype.get),(async()=>{let L=!1,b=a(async C=>{let H=C.value,x=C.table?ve[c][C.table]:M;if(c===Jr.SYSTEM_SCHEMA_NAME&&(C.table===Jr.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME||C.table===Jr.SYSTEM_TABLE_NAMES.USER_TABLE_NAME)&&(L=!0),C.id===void 0&&(C.id=H[x.primaryKey],C.id===void 0))throw new Error("Replication message without an id "+JSON.stringify(C));let P=await x.getResource(C.id,C,Vc);switch(C.type){case"put":return P._writeUpdate(H,Vc);case"delete":return P._writeDelete(Vc);case"publish":return P._writePublish(H,Vc);case"invalidate":return P.invalidate(Vc);default:Ui.error("Unknown operation",C.type,C.id)}},"writeUpdate");try{let C=S.subscribe&&(!S.subscribe.reliesOnPrototype||S.prototype.subscribe);C&&f==null&&(f=!0);let H=S.subscribeOnThisThread?S.subscribeOnThisThread((0,Ci.getWorkerIndex)()):(0,Ci.getWorkerIndex)()===0,x=C&&H&&await S.subscribe?.({crossThreads:!1,inTransactionUpdates:!0,supportsTransactions:!0,omitCurrent:!0});if(x)for await(let P of x)try{if(!(P.type==="transaction"?P.writes[0]:P)){console.error("Bad subscription event");continue}let X=Ke(P,()=>{if(P.type==="transaction"){let J=[];for(let Y of P.writes){Y[Oe]=P;try{J.push(b(Y))}catch(j){throw j.message+=" writing "+JSON.stringify(Y)+" of event "+JSON.stringify(P),j}}return Promise.all(J)}else if(P.type==="define_schema"){let J=this.attributes.slice(0),Y;for(let j of P.attributes)J.find(Le=>Le.name===j.name)||(J.push(j),Y=!0);Y&&(rt({table:n,database:c,attributes:J,origin:"cluster"}),Kc.signalSchemaChange(new Wc.SchemaEventMsg(process.pid,Jr.OPERATIONS_ENUM.CREATE_TABLE,c,n)))}else return b(P)});P.onCommit&&(X?.then&&L&&Kc.signalUserChange(new Wc.UserEventMsg(process.pid)),X?.then?X.then(P.onCommit):P.onCommit())}catch(G){console.error("error in subscription handler",G)}}catch(C){console.error(C)}})(),this}static getResource(S,N,L){let b=super.getResource(S,N,L);if(S!=null)try{if(b.hasOwnProperty(ue))return b;let C=b._txnForRequest();if(typeof S=="object"&&S&&!Array.isArray(S))throw new Error(`Invalid id ${JSON.stringify(S)}`);let H,x,G={transaction:C?.getReadTxn()},X;return Lt(S,N,G,b,L?.allowInvalidated,(J,Y)=>{Y?x(Y):(b[ue]=J?.value,b[Zt]=J?.version,X=!0,H?.(b))}),X?b:new Promise((J,Y)=>{H=J,x=Y})}catch(C){throw C.message.includes("Unable to serialize object")&&(C.message+=": "+JSON.stringify(S)),C}return b}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:L,version:b}of this.primaryStore.getRange({start:!1,versions:!0}))b<Date.now()-d&&b>0&&L?.__invalidated__==null&&M.evict(N,L,b)},d).unref())}static enableAuditing(){E=!0,JT(),M.audit=!0}static coerceId(S){return S===""?null:Hd(S,F)}static async dropTable(){if(delete ve[c][n],c===o){for(let S in r)_.remove(M.tableName+"/"+S),r[S].drop();_.remove(M.tableName+"/"),i.drop(),await _.committed}else console.log("legacy dropTable"),await i.close(),await fs.remove(data_path),await fs.remove(data_path===standard_path?data_path+MDB_LOCK_FILE_SUFFIX:path.join(path.dirname(data_path),MDB_LEGACY_LOCK_FILE_NAME));Kc.signalSchemaChange(new Wc.SchemaEventMsg(process.pid,Jr.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[Ms])return this.search(S);if(S?.property)return this.getProperty(S.property);if(this.doesExist()||this[Oe]?.hasOwnProperty("returnNonexistent")&&this[Oe].returnNonexistent)return this}static allowRead(S,N){if(!S)return!1;let L=S.role.permission;if(L.super_user)return!0;if(L[n]?.read){let b=L[n].attribute_permissions;if(b){N||(N={});let C=N.select;if(C){let H=CT(b,"read");N.select=C.filter(x=>H[x])}else N.select=b.filter(H=>H.read).map(H=>H.attribute_name);return N}else return!0}}allowUpdate(S,N,L){if(!S)return!1;let b=S.role.permission;if(b.super_user)return!0;if(b[n]?.update){let C=b[n].attribute_permissions;if(C){let H=CT(C,"update");for(let x in N)if(!H[x])return!1;if(L)for(let x of C){let P=x.attribute_name;!x.update&&!(P in N)&&(N[P]=this.getProperty(P))}}else return!0}}allowCreate(S,N){return this.allowUpdate(S,{})}static allowCreate(S,N){if(!S)return!1;let L=S.role.permission;if(L.super_user)return!0;if(L[n]?.insert){let b=L[n].attribute_permissions;if(b){let C=CT(b,"insert");for(let H in N)if(!C[H])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 b;if(typeof S=="object"&&S){if(N)for(let C in this[ue])S[C]===void 0&&(S[C]=void 0);b=this[ft],b&&(S=Object.assign(b,S)),this[ft]=b=S}return!this[ue]&&t&&!(b||(b=this[ft]))?.[t]&&(b||(b=this[ft]=Object.create(null)),b[t]=this[ce]),this._writeUpdate(this),this}invalidate(S){this._txnForRequest().addWrite({key:this[ce],store:i,invalidated:!0,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(L,b)=>{if(b)return;let C={__invalidated__:L};for(let G in r)C[G]=this.getProperty(G);let H=M.Source,x,P=this[ce];return S?.isNotification||H?.shouldReceiveInvalidations&&(x=H.invalidate(P,this)),i.put(this[ce],C,L),{type:E&&"invalidate",[yi]:x}}})}static evict(S,N,L){let b=this.Source;if(b?.get&&(!b.get.reliesOnPrototype||b.prototype.get)){let C;if(!N){let H=i.getEntry(S);if(!H)return;N=H.value,L=H.version}if(N)for(let H in r)C||(C={__invalidated__:0}),C[H]=N[H];return C?i.put(S,C,L,L):i.remove(S,L)}else return i.remove(S,L)}lock(){throw new Error("Not yet implemented")}static operation(S,N){return S.table||=n,S.schema||=c,wv.operation(S,N)}async put(S){this.update(S,!0)}_writeUpdate(S,N){let L=this._txnForRequest();if(this[ce]===void 0)throw new Error("Can not save record without an id");let b=this[ue],C,H,x=this[ce];b||(this[ue]={}),L.addWrite({key:x,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(S)},commit:(P,G)=>{let X;if(G){if(C)return;let Y=i.getEntry(x);b=Y?.value;let j=this[Oe];j&&Y?.version>(j.lastModified||0)&&(j.lastModified=Y.version)}if(!H){if(H=!0,N?.isNotification)S=oa(S);else{if(S[Av]&&(C=!Ru(S),C))return;t&&S[t]!==x&&(S[t]=x),w&&(S[w.name]=w.type==="Date"?new Date(P):w.type==="String"?new Date(P).toISOString():P),$&&(b?S[$.name]=b[$.name]:S[$.name]=$.type==="Date"?new Date(P):$.type==="String"?new Date(P).toISOString():P),S=oa(S);let Y=M.Source;Y?.put&&(!Y.put.reliesOnPrototype||Y.prototype.put)&&(X=Y.put(x,S,this))}if(S[ue])throw new Error("Can not assign a record with a record property");this[ue]=S}if(Ui.trace("Checking timestamp for put",x,this[Zt]>P,this[Zt],P),this[Zt]>P)return E&&{type:"put",value:i.encoder.encode(S)};let J=i.encoder.encode(S);return i.put(this[ce],(0,Bo.asBinary)(J),P),Ne(this[ce],b,S),b===null&&!G&&Is(-1),{type:E&&"put",value:J,[yi]:X}}})}async delete(S){return typeof S=="string"?this.deleteProperty(S):this[ue]?this._writeDelete(S):!1}_writeDelete(S){let N=this._txnForRequest(),L,b=this[ce],C;return N.addWrite({key:b,store:i,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,commit:(H,x)=>{let P=this[ue];if(x){let G=i.getEntry(b);P=G?.value;let X=this[Oe];X&&G?.version>(X.lastModified||0)&&(X.lastModified=G.version)}if(!L&&(L=!0,!S?.isNotification)){let G=M.Source;G?.delete&&(!G.delete.reliesOnPrototype||G.prototype.delete)&&(C=G.delete(b,this))}if(!(this[Zt]>H))return Ne(this[ce],P),Ui.trace("Write delete entry",E||f,H),E||f?(i.put(this[ce],null,H),E||zT(),x||Is(1)):i.remove(this[ce]),{type:E&&"delete",[yi]:C}}}),!0}search(S){let N=this._txnForRequest();if(!S)throw new Error("No query provided");let L=S.reverse===!0,b=S.conditions;b?b.length===void 0&&(b=Array.from(b)):b=Array.isArray(S)?S:S[Symbol.iterator]?Array.from(S):[],this[ce]&&(b=[{attribute:null,comparator:"prefix",value:this[ce]}].concat(b));for(let Y of b){let j=Y[0]??Y.attribute,Le=j==null?F:h.find(un=>un.name==j);if(Le)Le.type&&(Y[1]===void 0?Y.value=C(Y.value,Le):Y[1]=C(Y[1],Le));else if(j!=null)throw(0,wi.handleHDBError)(new Error,`${j} is not a defined attribute`,404)}function C(Y,j){return Array.isArray(Y)?Y.map(Le=>Hd(Le,j)):Hd(Y,j)}a(C,"coerceTypedValues"),b.length>1&&(b=(0,yv.sortBy)(b,Y=>{if(Y.estimated_count===void 0){let j=Y.comparator||Y.search_type;if(j===$c.SEARCH_TYPES.EQUALS){let Le=Y[0]??Y.attribute;if(Le==null||Le===t)Y.estimated_count=1;else{let un=r[Le];Y.estimated_count=un?un.getValuesCount(Y[1]??Y.value):1/0}}else j===$c.SEARCH_TYPES.CONTAINS||j===$c.SEARCH_TYPES.ENDS_WITH||j==="ne"?Y.estimated_count=1/0:j===$c.SEARCH_TYPES.STARTS_WITH||j==="prefix"?Y.estimated_count=W9:Y.estimated_count=K9}return Y.estimated_count}));let H=N.getReadTxn();H.use();let x=S.select,P=b[0],G;if(!P)G=i.getRange(L?{end:!1,reverse:!0,transaction:H,lazy:x?.length<4}:{start:!1,transaction:H,lazy:x?.length<4}).map(({value:Y})=>Y?new Promise(j=>setImmediate(()=>j(Y))):Bo.SKIP);else{let Y=yE(P,H,L,M,S.allowFullScan);if(!S.operator||S.operator.toLowerCase()==="and"){let j=b.slice(1).map(IE);G=J(Y,j)}else{for(let Le=1;Le<b.length;Le++){let un=b[Le],sE=yE(un,H,L,M,S.allowFullScan);Y=Y.concat(sE)}let j=new Set;Y=Y.filter(Le=>j.has(Le)?!1:(j.add(Le),!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=()=>{H.done()};let X=this[Oe];function J(Y,j){let Le=j?.length,un={transaction:H,lazy:Le>0||x?.length<4,alwaysPrefetch:!0};return Y.map(sE=>new Promise(nE=>Lt(sE,X,un,null,!1,CB=>{let iE=CB?.value;if(!iE)return nE(Bo.SKIP);for(let oE=0;oE<Le;oE++)if(!j[oE](iE))return nE(Bo.SKIP);nE(iE)})))}return a(J,"idsToRecords"),G}async subscribe(S){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=Sv(M,this[ce]??null,function(H,x,P){try{this.send({id:H,timestamp:P,...x})}catch(G){console.error(G)}},S.startTime,this[Ms]),L=this[ce],b=S.previousCount;b>1e3&&(b=1e3);let C=S.startTime;if(this[Ms]){if(C){if(b)throw new wi.ClientError("startTime and previousCount can not be combined for a table level subscription");for(let{key:H,value:x}of u.getRange({start:[C,Number.MAX_SAFE_INTEGER]})){let[P,G,X]=H;if(H.length>3&&(X=H.slice(2)),G!==s)continue;let J=Fn(x,i);(L==null||bv(L,X))&&N.send({id:X,timestamp:P,...J}),N.startTime=P}}else if(b){let H=[];for(let{key:x,value:P}of u.getRange({start:"z",end:!1,reverse:!0}))try{let[G,X,J]=x;if(x.length>3&&(J=x.slice(2)),X!==s)continue;if(L==null||bv(L,J)){let Y=Fn(P,i);if(H.push({id:J,timestamp:G,...Y}),--b<=0)break}}catch(G){Ui.error("Error getting history entry",x,G)}for(let x=H.length;x>0;)N.send(H[--x]);H[0]&&(N.startTime=H[0].timestamp)}else if(!S.omitCurrent)for(let{key:H,value:x,version:P}of i.getRange({start:L??!1,end:L==null?void 0:[L,Iv.MAXIMUM_KEY],versions:!0}))x&&N.send({id:H,timestamp:P,value:x})}else{b&&!C&&(C=0);let H=this[Zt];if(C<H){let x=[],P=H;do{let G=[P,s,L],X=u.get(G);if(X){S.omitCurrent=!0;let J=Fn(X,i);x.push({id:L,timestamp:P,...J}),P=J.lastVersion}else break;b&&b--}while(P>C&&b!==0);for(let G=x.length;G>0;)N.send(x[--G]);N.startTime=H}!S.omitCurrent&&this.doesExist()&&N.send({id:L,timestamp:this[Zt],value:this})}return S.listener&&N.on("data",S.listener),N}doesExist(){return!!this[ue]}async publish(S,N){this._writePublish(S,N)}_writePublish(S,N){let L=this._txnForRequest(),b=this[ce]||null,C,H;L.addWrite({store:i,key:b,lastVersion:this[Zt],nodeName:this[Oe]?.nodeName,validate:()=>{this.validate(S)},commit:(x,P)=>{if(this.validate(S),!H&&(H=!0,!N?.isNotification)){let J=M.Source;J?.publish&&(!J.publish.reliesOnPrototype||J.prototype.publish)&&(C=J.publish(b,S,this))}let G=P>0?i.get(b):this[ue];G===void 0&&!P&&(E||f)&&(E||zT(),Is(1));let X={type:"message",value:i.encoder.encode(S),[yi]:C};return!L.hasWrittenTime&&this[Zt]>x&&(x=X.newTxnTime=this[Zt]+.001),i.put(b,G??null,x),X}})}_txnForRequest(){let S=this[Oe],N=S?.transaction;if(N){let L;return(L=N?.find(b=>b.lmdbDb?.path===i.path))||N.push(L=new kc(i,S.user,u)),L}else return new vd(i,S.user,u)}validate(S){let N;for(let L=0,b=h.length;L<b;L++){let C=h[L];if(C.type){let H=S[C.name];if(H!=null)switch(C.type){case"Int":case"Float":(typeof H!="number"||C.type==="Int"&&H!==Math.floor(H))&&(N||(N=[])).push(`Property ${C.name} must be an ${C.type==="Int"?"integer":"number"}`);break;case"ID":typeof H=="string"||H?.length>0&&H.every?.(x=>typeof x=="string")||(N||(N=[])).push(`Property ${C.name} must be a string, number, or an array (of strings and numbers)`);break;case"String":typeof H!="string"&&(N||(N=[])).push(`Property ${C.name} must be a string`)}}C.required&&S[C.name]==null&&(N||(N=[])).push(`Property ${C.name} is required`)}if(N)throw new wi.ClientError(N.join(". "))}getUpdatedTime(){return this[Zt]}wasLoadedFromSource(){return R?!!this[Ov]:void 0}static async addAttributes(S){let N=h.slice(0);for(let L of S){if(!L.name)throw new wi.ClientError("Attribute name is required");if(L.name.match(/[`/]/))throw new wi.ClientError("Attribute names cannot include backticks or forward slashes");N.push(L)}return rt({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static async removeAttributes(S){let N=h.filter(L=>!S.includes(L.name));return rt({table:n,database:c,schemaDefined:l,attributes:N}),M.indexingOperation}static getRecordCount(){let S=0;for(let{key:N,value:L}of i.getRange({end:!1}))S++,N[0]?.description==="deletions"&&(S+=L||0);return i.getStats().entryCount-S}static updatedAttributes(){Au(this,this)}static async deleteHistory(S=0){let N;for(let{key:L,value:b}of u.getRange({start:[0,0],end:[S,0]})){await new Promise(P=>setImmediate(P));let[C,H,x]=L;L.length>3&&(x=L.slice(2)),H===s&&(N=i.remove(x))}await N}static async*getHistory(S=0,N=1/0){for(let{key:L,value:b}of u.getRange({start:[S,0],end:[N,0]})){await new Promise(G=>setImmediate(G));let[C,H,x]=L;if(L.length>3&&(x=L.slice(2)),H!==s)continue;let P=Fn(b,i);P.id=x,P.timestamp=C,yield P}}static async getHistoryOfRecord(S){let N=[],L=i.getEntry(S);if(!L)return N;let b=L.version,C=0;do{await new Promise(P=>setImmediate(P));let H=[b,s,S],x=u.get(H);if(x){let P=Fn(x,i);P.timestamp=b,N.push(P),b=P.lastVersion}else break}while(C<1e3);return N.reverse()}static cleanup(){z?.remove()}}M.updatedAttributes();let ee=M.prototype;return ee[Av]=!0,d&&M.setTTLExpiration(d/1e3),I&&wB(),M;function Ne(Z,S,N){let L;for(let b in r){let C=r[b],H=C.isIndexing,x=N?.[b],P=S?.[b];if(x===P&&!H)continue;L=!0;let G=(0,Yc.getIndexedValues)(P);if(G){Rv&&C.prefetch(G.map(X=>({key:X,value:Z})),Nv);for(let X=0,J=G.length;X<J;X++)C.remove(G[X],Z)}if(G=(0,Yc.getIndexedValues)(x),G){Rv&&C.prefetch(G.map(X=>({key:X,value:Z})),Nv);for(let X=0,J=G.length;X<J;X++)C.put(G[X],Z)}}return L}a(Ne,"updateIndices");function Lt(Z,S,N,L,b,C){let H=a(()=>{let x=N.transaction;if(x?.isDone)throw new Error("Invalid read transaction");let P;x&&!x.hasRunLoadRecord&&(P=!0,x.hasRunLoadRecord=!0);let G;try{G=i.getEntry(Z,N)}catch(j){throw j.message+=". The read txn is "+JSON.stringify(x)+" first loadRecord: "+P,console.error(j),console.error("reader list",i.readerList()),console.error("reader check",i.readerCheck()),console.error("reader list",i.readerList()),j}let X,J,Y;if(G?(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&&op(Y,"cache-hit",n),Y&&!b&&(L&&(L[Ov]=!0),R))return Zr(Z,X,J,S).then(j=>{if(j?.value?.[ue])throw new Error("Can not assign a record with a record property");S&&j?.version>(S.lastModified||0)&&(S.lastModified=j.version),C(j)},j=>{C(null,j)});if(G?.value?.[ue])throw new Error("Can not assign a record with a record property");C(G)},"whenPrefetched");if(!N.alwaysPrefetch&&(Z==null||i.cache?.get(Z)))return H();i.prefetch([Z],H)}a(Lt,"loadRecord");function rr(){D=new Set,(0,Ci.onMessageByType)("transaction",Z),i.on("aftercommit",Z);function Z(){for(let S of D)S()}a(Z,"onCommit")}a(rr,"setupCommitListeners");async function Zr(Z,S=null,N,L){if(N<0){let P;return D||rr(),await new Promise(G=>{let X,J=a(()=>{if(P=i.getEntry(Z),!P||P.version>0){if(clearTimeout(X),D.delete(J),typeof P?.value?.__invalidated__=="number")return G(Zr(Z,P.value,P.version,L));G(P)}},"listener");D.add(J),X=setTimeout(()=>{D.delete(J),G(Zr(Z,P?.value,void 0,L))},1e4).unref()})}let b=S?.__invalidated__,C=-(N||1);i.put(Z,S,C,N);let H={requestContext:L,replacingRecord:S,replacingVersion:N},x=L?.responseHeaders;try{let P=performance.now(),G=await M.Source.get(Z,H),X=performance.now()-P;pi(X,"cache-resolution",n),x&&x.append("Server-Timing",`cache-resolve;dur=${X.toFixed(2)}`);let J=H.lastModified||N;(!J||d&&J<Date.now()-d)&&(J=(0,Yc.getNextMonotonicTime)());let j=Ne(Z,S,G)&&N||b>0;return G?(t&&(G[t]=Z),typeof G.toJSON=="function"&&(G=G.toJSON()),i.put(Z,G,J,C)):i.remove(Z,C),j&&E&&u.put([J,s,Z],Pd(b,null,G?{type:"put",value:i.encoder.encode(G)}:{type:"delete"})),{version:J,value:G}}catch(P){throw i.put(Z,S,N,C),P}}a(Zr,"getFromSource");function Is(Z){T||(T=i.get([gv,UT.threadId])||0),T+=Z,O||(O=setTimeout(()=>{O=null,i.rootStore.status==="open"&&i.put([gv,UT.threadId],T)},50))}a(Is,"recordDeletion");function zT(){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),Is(-1)}}},M.getRecordCount()*100+z9).unref())}a(zT,"enqueueDeletionCleanup");function JT(){z=u?.addDeleteRemovalCallback(s,Z=>{let S=i.getEntry(Z);S?.value===null&&i.remove(Z,S.version),Is(-1)})}a(JT,"addDeleteRemoval");function wB(){(0,Ci.getWorkerIndex)()===0&&setInterval(async()=>{try{let Z=I.name,S=r[Z];if(!S)throw new Error(`expiresAt attribute ${I} must be indexed`);for(let{value:N}of S.getRange({start:!0,end:Date.now(),versions:!0,snapshot:!1})){let L=i.getEntry(N);L?.value?.[Z]<Date.now()&&M.evict(N,L.value,L.version),await new Promise(b=>setImmediate(b))}}catch(Z){Ui.error("Error in evicting old records",Z)}},Q9).unref()}a(wB,"runRecordExpirationEviction")}function CT(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 Nv(){}function J9(e){wv=e}function Hd(e,t){let r=t?.type;return e===null?e:r==="Int"?parseInt(e):r==="Float"?parseFloat(e):r==="Date"?(typeof e!="number"&&!X9.test(e)&&(e+="Z"),new Date(e)):r?e:(0,Fd.autoCast)(e)}function bv(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 Jr,Bo,Yc,yv,UT,$c,Qc,wi,Kc,Wc,Ui,Iv,Ci,Fd,wv,K9,W9,Q9,Rv,gv,Zt,Av,q_e,Ov,Vc,z9,X9,sd=pe(()=>{Jr=U(A()),Bo=require("lmdb"),Yc=U(Bt()),yv=require("lodash"),UT=require("worker_threads");es();Ev();$c=U(ke()),Qc=U(Q());Tv();wi=U(W()),Kc=U(ks()),Wc=U(Gr());Ee();yu();Ui=U(k());Nu();Vn();Iv=require("ordered-binary"),Ci=U(dt());xc();Fd=U(V());Oo();K9=1e8,W9=1e7,Q9=6e4;Qc.initSync();Rv=Qc.get(Jr.CONFIG_PARAMS.STORAGE_PREFETCHWRITES),gv=Symbol.for("deletions"),Zt=Symbol.for("version"),Av=Symbol.for("incremental-update"),q_e=Symbol("source-resource"),Ov=Symbol("load-from-source"),Vc={isNotification:!0,allowInvalidated:!0},z9=(0,Fd.convertToMS)(Qc.get(Jr.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE))||864e5;a(qd,"makeTable");a(CT,"attributesAsObject");a(Nv,"noop");a(J9,"setServerUtilities");X9=/[+-][0-9]{2}:[0-9]{2}|[a-zA-Z]$/;a(Hd,"coerceType");a(bv,"isDescendantId")});var be={};je(be,{database:()=>Ha,databases:()=>ve,dropDatabase:()=>Gh,dropTableMeta:()=>s7,getDatabases:()=>kr,getTables:()=>Z9,onUpdatedTable:()=>jp,readMetaDb:()=>zc,resetDatabases:()=>j9,table:()=>rt,tables:()=>ir});function Z9(){return Vd||kr(),ir||{}}function kr(){if(Vd)return ve;Vd=!0,Go=new Map;let e=(0,bt.getHdbBasePath)()&&(0,Pe.join)((0,bt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),t=(0,bt.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,bt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||e&&((0,mr.existsSync)(e)?e:(0,Pe.join)((0,bt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME)),!!e){if((0,mr.existsSync)(e))for(let r of(0,mr.readdirSync)(e,{withFileTypes:!0})){let s=(0,Pe.basename)(r.name,".mdb");r.isFile()&&(0,Pe.extname)(r.name).toLowerCase()===".mdb"&&!t[s]?.path&&zc((0,Pe.join)(e,r.name),null,s)}if((0,mr.existsSync)((0,qo.getBaseSchemaPath)())){for(let r of(0,mr.readdirSync)((0,qo.getBaseSchemaPath)(),{withFileTypes:!0}))if(!r.isFile()){let s=(0,Pe.join)((0,qo.getBaseSchemaPath)(),r.name),n=(0,Pe.join)((0,qo.getTransactionAuditStoreBasePath)(),r.name);for(let i of(0,mr.readdirSync)(s,{withFileTypes:!0}))if(i.isFile()&&(0,Pe.extname)(i.name).toLowerCase()===".mdb"){let o=(0,Pe.join)(n,i.name);zc((0,Pe.join)(s,i.name),(0,Pe.basename)(i.name,".mdb"),r.name,o,!0)}}}if(t)for(let r in t){let s=t[r],n=s.path;if((0,mr.existsSync)(n))for(let o of(0,mr.readdirSync)(n,{withFileTypes:!0}))o.isFile()&&(0,Pe.extname)(o.name).toLowerCase()===".mdb"&&zc((0,Pe.join)(n,o.name),(0,Pe.basename)(o.name,".mdb"),r);let i=s.tables;if(i)for(let o in i){let c=i[o],u=(0,Pe.join)(c.path,(0,Pe.basename)(o+".mdb"));(0,mr.existsSync)(u)&&zc(u,o,r,null,!0)}}for(let r in ve){let s=Go.get(r);if(s){let n=ve[r];r.includes("delete")&&Me.trace(`defined tables ${Array.from(s.keys())}`);for(let i in n)s.has(i)||(Me.trace(`delete table class ${i}`),delete n[i])}else if(delete ve[r],r==="data"){for(let n in ir)delete ir[n];delete ir[$d]}}return Go=null,ve}}function j9(){Vd=!1;for(let[,e]of qn)e.needsDeletion=!0;kr();for(let[e,t]of qn)t.needsDeletion&&!e.endsWith("system.mdb")&&(console.log("closing database",e),t.close().then(()=>console.log("closed database",e)),qn.delete(e));return ve}function zc(e,t,r=MT,s,n){let i=new DT.default(e,!1);e.includes("delete")&&Me.trace(`reading meta data from ${e}`);try{let o=qn.get(e);o?o.needsDeletion=!1:(o=(0,Gd.open)(i),qn.set(e,o));let c=new Di.default(!1),u=o.dbisDb||(o.dbisDb=o.openDB(Ho.INTERNAL_DBIS_NAME,c)),l=o.auditStore;l||(s?(0,mr.existsSync)(s)&&(i.path=s,l=(0,Gd.open)(i),l.isLegacy=!0):l=bT(o));let _=Lv(r),d=_[$d],E=new Map;for(let{key:f,value:h}of u.getRange({start:!1})){let[T,p]=f.toString().split("/");e.includes("delete")&&Me.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 M of T)if(M.is_hash_attribute||M.isPrimaryKey){p=M;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={},F=[],$,w,I=typeof p.audit=="boolean"?p.audit:(0,bt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),D=p.trackDeletes,z=p.expiration;if(R)O=R.indices,F=R.attributes,R.schemaVersion++;else{$=p.tableId,$?$>=(u.get(Fo)||0)&&u.putSync(Fo,$+1):(p.tableId=$=u.get(Fo),$||($=1),u.putSync(Fo,$+1),u.putSync(p.key,p));let M=new Di.default(!p.is_hash_attribute,p.is_hash_attribute);Me.trace(`openDB ${p.key} from ${r}`),w=o.openDB(p.key,M),w.rootStore=o,w.tableId=$}for(let M of T){M.attribute=M.name;try{if(!M.is_hash_attribute&&(M.indexed||M.attribute&&!M.name)){if(!O[M.name]){let Ne=new Di.default(!M.is_hash_attribute,M.is_hash_attribute);Me.trace(`openDB ${M.key} from ${r}`),O[M.name]=o.openDB(M.key,Ne)}let ee=F.find(Ne=>Ne.name===M.name);ee?F.splice(F.indexOf(ee),1,M):F.push(M)}}catch(ee){Me.error("Error trying to update attribute",M,F,O,ee)}}if(!R){Me.trace(`creating table class ${f}`,Object.keys(_)),R=Mv(_,f,qd({primaryStore:w,auditStore:l,audit:I,expirationMS:z&&z*1e3,trackDeletes:D,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 M of PT)M(R)}}return o}catch(o){throw o.message+=` opening database ${e}`,o}}function Lv(e){let t=ve[e];if(t||(e==="data"?t=ve[e]=ir:e==="system"?Object.defineProperty(ve,"system",{value:t=Object.create(null),configurable:!0}):t=ve[e]=Object.create(null)),Go&&!Go.has(e)){let r=new Set;t[$d]=r,Go.set(e,r)}return t}function Mv(e,t,r){return e[t]=r,r}function Ha({database:e,table:t}){e||(e=MT),kr();let r=Lv(e),s=(0,Pe.join)((0,bt.getHdbBasePath)(),jt.DATABASES_DIR_NAME),n=t&&(0,bt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.tables?.[t]?.path;s=n||(0,bt.get)(jt.CONFIG_PARAMS.SCHEMAS)?.[e]?.path||process.env.STORAGE_PATH||(0,bt.get)(jt.CONFIG_PARAMS.STORAGE_PATH)||((0,mr.existsSync)(s)?s:(0,Pe.join)((0,bt.getHdbBasePath)(),jt.LEGACY_DATABASES_DIR_NAME));let i=(0,Pe.join)(s,(n?t:e)+".mdb"),o=qn.get(i);if(!o){let c=new DT.default(i,!1);o=(0,Gd.open)(c),qn.set(i,o)}return o}async function Gh(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;qn.delete(n.path),n.status==="open"&&(await n.close(),await Cv.remove(n.path))}if(e==="data"){for(let r in ir)delete ir[r];delete ir[$d]}delete ve[e]}function rt({table:e,database:t,expiration:r,attributes:s,audit:n,trackDeletes:i,schemaDefined:o,origin:c}){t||(t=MT);let u=Ha({database:t,table:e}),l=ve[t],_=l?.[e];if(u.status==="closed")throw new Error(`Can not use a closed data store for ${e}`);let d,E,f,h;o==null&&(o=!0);let T=new Di.default(!1);for(let w of s)w.attribute?(w.name=w.attribute,w.indexed=!0):w.attribute=w.name,w.expiresAt&&(w.indexed=!0);let p,R;if(_){if(Me.trace(`${e} table already exists`),d=_.primaryKey,_.primaryStore.rootStore.status==="closed")throw new Error(`Can not use a closed data store from ${e} class`);_.attributes.splice(0,_.attributes.length,...s)}else{let w=u.auditStore;w||(w=bT(u)),E=s.find(M=>M.isPrimaryKey)||{},d=E.name,E.is_hash_attribute=!0,E.schemaDefined=o,i&&(E.trackDeletes=!0),n=E.audit=typeof n=="boolean"?n:(0,bt.get)(jt.CONFIG_PARAMS.LOGGING_AUDITLOG),r&&(E.expiration=r),c&&(E.origins?E.origins.includes(c)||E.origins.push(c):E.origins=[c]),Me.trace(`${e} table loading, opening primary store`);let I=new Di.default(!1,!0),D=e+"/";Me.trace(`openDB ${D} from ${t}`);let z=u.openDB(D,I);z.rootStore=u,Me.trace(`openDB ${Ho.INTERNAL_DBIS_NAME} from ${t}`),h=u.dbisDb=u.openDB(Ho.INTERNAL_DBIS_NAME,T),z.tableId=h.get(Fo),z.tableId||(z.tableId=1),h.putSync(Fo,z.tableId+1),E.tableId=z.tableId,_=Mv(l,e,qd({primaryStore:z,auditStore:w,audit:n,trackDeletes:i,expirationMS:r&&r*1e3,primaryKey:d,tableName:e,tableId:z.tableId,databasePath:t,databaseName:t,indices:{},attributes:s,schemaDefined:o,dbisDB:h})),_.schemaVersion=1,p=!0,$(),h.put(D,E)}Me.trace(`${e} table loading, getting stored attributes`),f=_.indices,h||Me.trace(`openDB ${Ho.INTERNAL_DBIS_NAME} from ${t}`),h=h||(u.dbisDb=u.openDB(Ho.INTERNAL_DBIS_NAME,T)),_.dbisDB=h;let O=[];for(let{key:w,value:I}of h.getRange({start:!0})){let[D,z]=w.toString().split("/");if(z===""&&(z=I.name),z){if(D!==e)continue}else z=D;if(!s.find(ee=>ee.name===z)?.indexed&&I.indexed&&!I.isPrimaryKey){$(),p=!0,h.remove(w);let ee=_.indices[D];ee&&O.push(ee)}}Me.trace(`${e} table loading, comparing atributes`);let F=[];try{for(let w of s||[]){let I=e+"/"+(w.name||"");Object.defineProperty(w,"key",{value:I,configurable:!0});let D=h.get(I);if(w.isPrimaryKey){if(D=D||h.get(I=e+"/"),n===!0&&!_.audit||(+r||void 0)!==(+D.expiration||void 0)){let M=Object.assign({},D);n&&(_.enableAuditing(),M.audit=!0),r&&(M.expiration=+r),p=!0,$(),h.put(I,M)}continue}D?.attribute&&!D.name&&(D.indexed=!0);let z=!D||D.type!==w.type||D.indexed!==w.indexed||JSON.stringify(D.attributes)!==JSON.stringify(w.attributes)||JSON.stringify(D.elements)!==JSON.stringify(w.elements);if(w.indexed){let M=new Di.default(!0,!1);Me.trace(`openDB ${I} from ${t}`);let ee=u.openDB(I,M);(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<Jc.workerData?.restartNumber)&&(p=!0,$(),D=h.get(I),(z||D.indexingPID&&D.indexingPID!==process.pid||D.restartNumber<Jc.workerData?.restartNumber)&&(p=!0,w.lastIndexedKey=D?.lastIndexedKey||!1,w.indexingPID=process.pid,ee.isIndexing=!0,Object.defineProperty(w,"dbi",{value:ee}),F.push(w)),h.put(I,w)),f[w.name]=ee}else z&&(p=!0,$(),h.put(I,w))}}finally{R&&R()}if(p&&(_.schemaVersion++,_.updatedAttributes()),Me.trace(`${e} table loading, running index`),F.length>0||O.length>0?_.indexingOperation=r7(_,F,O):p&&xd.signalSchemaChange(new kd.SchemaEventMsg(process.pid,"schema-change",_.databaseName,_.tableName)),_.origin=c,p)for(let w of PT)w(_,c!=="cluster");return r&&_.setTTLExpiration(+r),Me.trace(`${e} table loaded`),_;function $(){R||u.transactionSync(()=>({then(w){R=w}}))}a($,"startTxn")}async function r7(e,t,r){try{let s=e.schemaVersion;await xd.signalSchemaChange(new kd.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,Uv.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--,Me.error(E)}),Jc.workerData&&Jc.workerData.restartNumber!==Dv.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>e7?await n:u>t7&&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 kd.SchemaEventMsg(process.pid,"indexing-finished",e.databaseName,e.tableName))}catch(s){Me.error("Error in indexing",s)}}function s7({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 jp(e){PT.push(e)}var bt,Ho,Gd,Pe,mr,qo,Di,DT,jt,Cv,LT,Uv,xd,kd,Jc,Me,Dv,MT,$d,ir,ve,Fo,PT,Vd,qn,Go,e7,t7,Ee=pe(()=>{bt=U(Q()),Ho=U(ke()),Gd=require("lmdb"),Pe=require("path"),mr=require("fs"),qo=U(Ce());sd();Di=U(Du()),DT=U(Mu()),jt=U(A()),Cv=U(require("fs-extra")),LT=require("../index"),Uv=U(Bt()),xd=U(ks()),kd=U(Gr()),Jc=require("worker_threads"),Me=U(k()),Dv=U(dt());xc();MT="data",$d=Symbol("defined-tables");(0,bt.initSync)();ir=Object.create(null),ve=Object.create(null);(0,LT._assignPackageExport)("databases",ve);(0,LT._assignPackageExport)("tables",ir);Fo=Symbol.for("next-table-id"),PT=[],qn=new Map;a(Z9,"getTables");a(kr,"getDatabases");a(j9,"resetDatabases");a(zc,"readMetaDb");a(Lv,"ensureDB");a(Mv,"setTable");a(Ha,"database");a(Gh,"dropDatabase");a(rt,"table");e7=1e3,t7=10;a(r7,"runIndexing");a(s7,"dropTableMeta");a(jp,"onUpdatedTable")});var V=m((Q_e,Wv)=>{"use strict";var Gn=require("path"),Fv=require("fs-extra"),er=k(),Pv=require("fs-extra"),Yd=require("os"),n7=require("net"),i7=require("recursive-iterator"),xe=A(),o7=CR(),vv=require("papaparse"),Kd=require("moment"),{inspect:a7}=require("util"),Bv=require("is-number"),W_e=require("lodash"),c7=require("minimist"),u7=require("https"),l7=require("http"),{hdb_errors:Wd}=W(),_7=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,qv=require("util").promisify(setTimeout),d7=100,E7=5,f7="",h7=4,Hv={true:!0,TRUE:!0,FALSE:!1,false:!1,undefined:null,null:null,NULL:null,NaN:NaN};Wv.exports={isEmpty:Sr,isEmptyOrZeroLength:bs,arrayHasEmptyValues:p7,arrayHasEmptyOrZeroLengthValues:T7,buildFolderPath:R7,isBoolean:Gv,errorizeMessage:m7,stripFileExtension:A7,autoCast:O7,autoCastJSON:xv,autoCastJSONDeep:BT,removeDir:N7,compareVersions:b7,isCompatibleDataVersion:y7,escapeRawValue:I7,unescapeValue:w7,stringifyProps:C7,timeoutPromise:D7,isClusterOperation:M7,getClusterUser:v7,checkGlobalSchemaTable:P7,getHomeDir:Vv,getPropsFilePath:U7,promisifyPapaParse:B7,removeBOM:$v,createEventPromise:H7,checkProcessRunning:F7,checkSchemaTableExist:q7,checkSchemaExists:Yv,checkTableExists:Kv,getStartOfTomorrowInSeconds:G7,getLimitKey:x7,isObject:g7,isNotEmptyAndHasValue:S7,autoCasterIsNumberCheck:kv,backtickASTSchemaItems:k7,isPortTaken:L7,createForkArgs:V7,autoCastBoolean:$7,async_set_timeout:qv,getTableHashAttribute:Y7,doesSchemaExist:K7,doesTableExist:W7,stringifyObj:Q7,ms_to_time:z7,changeExtension:J7,getEnvCliRootPath:HT,noBootFile:X7,httpRequest:Z7,transformReq:j7,convertToMS:eee,PACKAGE_ROOT:xe.PACKAGE_ROOT};function m7(e){return e instanceof Error?e:new Error(e)}a(m7,"errorizeMessage");function Sr(e){return e==null}a(Sr,"isEmpty");function S7(e){return!Sr(e)&&(e||e===0||e===""||Gv(e))}a(S7,"isNotEmptyAndHasValue");function bs(e){return Sr(e)||e.length===0||e.size===0}a(bs,"isEmptyOrZeroLength");function p7(e){if(Sr(e))return!0;for(let t=0;t<e.length;t++)if(Sr(e[t]))return!0;return!1}a(p7,"arrayHasEmptyValues");function T7(e){if(bs(e))return!0;for(let t=0;t<e.length;t++)if(bs(e[t]))return!0;return!1}a(T7,"arrayHasEmptyOrZeroLengthValues");function R7(...e){try{return e.join(Gn.sep)}catch{console.error(e)}}a(R7,"buildFolderPath");function Gv(e){return Sr(e)?!1:e===!0||e===!1}a(Gv,"isBoolean");function g7(e){return Sr(e)?!1:typeof e=="object"}a(g7,"isObject");function A7(e){return bs(e)?f7:e.slice(0,-h7)}a(A7,"stripFileExtension");function O7(e){return Sr(e)||e===""||typeof e!="string"?e:Hv[e]!==void 0?Hv[e]:kv(e)===!0?Number(e):_7.test(e)?new Date(e):e}a(O7,"autoCast");function xv(e){if(typeof e=="string"&&(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]")))try{return JSON.parse(e)}catch{}return e}a(xv,"autoCastJSON");function BT(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=BT(s);n!==s&&(e[t]=n)}else for(let t in e){let r=e[t],s=BT(r);s!==r&&(e[t]=s)}return e}else return xv(e)}a(BT,"autoCastJSONDeep");function kv(e){if(e.startsWith("0.")&&Bv(e))return!0;let t=e.toUpperCase().includes("E");return!!((e!=="0"&&e.startsWith("0"))===!1&&t===!1&&Bv(e))}a(kv,"autoCasterIsNumberCheck");async function N7(e){if(bs(e))throw new Error(`Directory path: ${e} does not exist`);try{await Pv.emptyDir(e),await Pv.remove(e)}catch(t){throw er.error(`Error removing files in ${e} -- ${t}`),t}}a(N7,"removeDir");function b7(e,t){if(bs(e)){er.info("Invalid current version sent as parameter.");return}if(bs(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(b7,"compareVersions");function y7(e,t,r=!1){let s=e.toString().split("."),n=t.toString().split(".");return s[0]===n[0]&&(!r||s[1]===n[1])}a(y7,"isCompatibleDataVersion");function I7(e){if(Sr(e))return e;let t=String(e);return t==="."?xe.UNICODE_PERIOD:t===".."?xe.UNICODE_PERIOD+xe.UNICODE_PERIOD:t.replace(xe.FORWARD_SLASH_REGEX,xe.UNICODE_FORWARD_SLASH)}a(I7,"escapeRawValue");function w7(e){if(Sr(e))return e;let t=String(e);return t===xe.UNICODE_PERIOD?".":t===xe.UNICODE_PERIOD+xe.UNICODE_PERIOD?"..":String(e).replace(xe.ESCAPED_FORWARD_SLASH_REGEX,"/")}a(w7,"unescapeValue");function C7(e,t){if(Sr(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+Yd.EOL}!bs(s)&&s[0]===";"?r+=" "+s+n+Yd.EOL:bs(s)||(r+=s+"="+n+Yd.EOL)}catch{er.error(`Found bad property during upgrade with key ${s} and value: ${n}`)}}),r}a(C7,"stringifyProps");function Vv(){let e;try{e=Yd.homedir()}catch{e=process.env.HOME}return e||(e="~/"),e}a(Vv,"getHomeDir");function U7(){let e=Gn.join(Vv(),xe.HDB_HOME_DIR_NAME,xe.BOOT_PROPS_FILE_NAME);return Fv.existsSync(e)||(e=Gn.join(__dirname,"../","hdb_boot_properties.file")),e}a(U7,"getPropsFilePath");function D7(e,t){let r,s;return s=new Promise(function(n){r=setTimeout(function(){n(t)},e)}),{promise:s,cancel:function(){clearTimeout(r)}}}a(D7,"timeoutPromise");async function L7(e){if(!e)throw new Error("Invalid port passed as parameter");return new Promise((t,r)=>{let s=n7.createServer().once("error",n=>{n.code==="EADDRINUSE"?t(!0):r(n)}).once("listening",()=>s.once("close",()=>t(!1)).close()).listen(e)})}a(L7,"isPortTaken");function M7(e){try{return xe.CLUSTER_OPERATIONS[e.toLowerCase()]!==void 0}catch(t){er.error(`Error checking operation against cluster ops ${t}`)}return!1}a(M7,"isClusterOperation");function P7(e,t){let r=(Ee(),se(be)).getDatabases();if(!r[e])return Wd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e);if(!r[e][t])return Wd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(P7,"checkGlobalSchemaTable");function v7(e,t){if(Sr(t)){er.warn("No CLUSTERING_USER defined, clustering disabled");return}if(Sr(e)||bs(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(v7,"getClusterUser");function B7(){vv.parsePromise=function(e,t,r){return new Promise(function(s,n){vv.parse(e,{header:!0,transformHeader:$v,chunk:t.bind(null,n),skipEmptyLines:!0,transform:r,dynamicTyping:!1,error:n,complete:s})})}}a(B7,"promisifyPapaParse");function $v(e){if(typeof e!="string")throw new TypeError(`Expected a string, got ${typeof e}`);return e.charCodeAt(0)===65279?e.slice(1):e}a($v,"removeBOM");function H7(e,t,r){return new Promise(s=>{t.once(e,n=>{let i=r;er.info(`Got cluster status event response: ${a7(n)}`);try{i.cancel()}catch{er.error("Error trying to cancel timeout.")}s(n)})})}a(H7,"createEventPromise");async function F7(e){let t=!0,r=0;do await qv(d7*r++),(await o7.findPs(e)).length>0&&(t=!1);while(t&&r<E7);if(t)throw new Error(`process ${e} was not started`)}a(F7,"checkProcessRunning");function q7(e,t){let r=Yv(e);if(r)return r;let s=Kv(e,t);if(s)return s}a(q7,"checkSchemaTableExist");function Yv(e){let{getDatabases:t}=(Ee(),se(be));if(!t()[e])return Wd.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(e)}a(Yv,"checkSchemaExists");function Kv(e,t){let{getDatabases:r}=(Ee(),se(be));if(!r()[e][t])return Wd.HDB_ERROR_MSGS.TABLE_NOT_FOUND(e,t)}a(Kv,"checkTableExists");function G7(){let e=Kd().utc().add(1,xe.MOMENT_DAYS_TAG).startOf(xe.MOMENT_DAYS_TAG).unix(),t=Kd().utc().unix();return e-t}a(G7,"getStartOfTomorrowInSeconds");function x7(){return Kd().utc().format("DD-MM-YYYY")}a(x7,"getLimitKey");function k7(e){try{let t=new i7(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(k7,"backtickASTSchemaItems");function V7(e){return[e]}a(V7,"createForkArgs");function $7(e){return e===!0||typeof e=="string"&&e.toLowerCase()==="true"}a($7,"autoCastBoolean");function Y7(e,t){let{getDatabases:r}=(Ee(),se(be)),s=r()[e]?.[t];return s?.primaryKey||s?.hash_attribute}a(Y7,"getTableHashAttribute");function K7(e){let{getDatabases:t}=(Ee(),se(be));return t()[e]!==void 0}a(K7,"doesSchemaExist");function W7(e,t){let{getDatabases:r}=(Ee(),se(be));return r()[e]?.[t]!==void 0}a(W7,"doesTableExist");function Q7(e){try{return JSON.stringify(e)}catch{return e}}a(Q7,"stringifyObj");function z7(e){let t=Kd.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(z7,"ms_to_time");function J7(e,t){let r=Gn.basename(e,Gn.extname(e));return Gn.join(Gn.dirname(e),r+t)}a(J7,"changeExtension");function HT(){if(process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return process.env[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()];let e=c7(process.argv);if(e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()])return e[xe.CONFIG_PARAMS.ROOTPATH.toUpperCase()]}a(HT,"getEnvCliRootPath");var vT;function X7(){if(vT)return vT;let e=HT();HT()&&Fv.pathExistsSync(Gn.join(e,xe.HDB_CONFIG_FILE))&&(vT=!0)}a(X7,"noBootFile");function Z7(e,t){let r;return e.protocol==="http:"?r=l7:r=u7,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(Z7,"httpRequest");function j7(e){if(!e.schema&&!e.database){e.schema=xe.DEFAULT_DATABASE_NAME;return}e.database&&(e.schema=e.database)}a(j7,"transformReq");function eee(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(eee,"convertToMS")});var Q=m((J_e,Jv)=>{"use strict";var FT=require("fs-extra"),Xr=require("path"),Qv=require("os"),tee=require("properties-reader"),Xc=k(),Li=V(),re=A(),Qd=yr(),ree="Error initializing environment manager",zd="BOOT_PROPS_FILE_PATH",zv=!1,see={[re.HDB_SETTINGS_NAMES.INSTALL_USER]:!0,[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]:!0,[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]:!0,BOOT_PROPS_FILE_PATH:!0},cn={};Jv.exports={BOOT_PROPS_FILE_PATH:zd,getHdbBasePath:nee,setHdbBasePath:iee,get:oee,initSync:cee,setProperty:fe,initTestEnvironment:uee};function nee(){return cn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]}a(nee,"getHdbBasePath");function iee(e){cn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=e}a(iee,"setHdbBasePath");function oee(e){let t=Qd.getConfigValue(e);return t===void 0?cn[e]:t}a(oee,"get");function fe(e,t){see[e]&&(cn[e]=t),Qd.updateConfigObject(e,t)}a(fe,"setProperty");function aee(){let e;try{e=Li.getPropsFilePath(),FT.accessSync(e,FT.constants.F_OK|FT.constants.R_OK),zv=!0;let t=tee(e);return cn[re.HDB_SETTINGS_NAMES.INSTALL_USER]=t.get(re.HDB_SETTINGS_NAMES.INSTALL_USER),cn[re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY]=t.get(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY),cn[zd]=e,!0}catch{return Xc.trace(`Environment manager found no properties file at ${e}`),!1}}a(aee,"doesPropFileExist");function cee(e=!1){try{(zv||aee()||Li.noBootFile())&&(Qd.initConfig(e),cn[re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY]=Qd.getConfigValue(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY))}catch(t){Xc.error(ree),Xc.error(t),console.error(t),process.exit(1)}}a(cee,"initSync");function uee(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=Xr.join(__dirname,"../../","unitTests");cn[zd]=Xr.join(u,"hdb_boot_properties.file"),fe(re.HDB_SETTINGS_NAMES.SETTINGS_PATH_KEY,Xr.join(u,"settings.test")),fe(re.HDB_SETTINGS_NAMES.INSTALL_USER,Qv.userInfo()?Qv.userInfo().username:void 0),fe(re.HDB_SETTINGS_NAMES.PRIVATE_KEY_KEY,Xr.join(u,"envDir","utility","keys","privateKey.pem")),fe(re.HDB_SETTINGS_NAMES.CERT_KEY,Xr.join(u,"envDir","utility","keys","certificate.pem")),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_PRIVATEKEY,Xr.join(u,"envDir","utility","keys","privateKey.pem")),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_TLS_CERTIFICATE,Xr.join(u,"envDir","utility","keys","certificate.pem")),fe(re.HDB_SETTINGS_NAMES.LOG_LEVEL_KEY,"debug"),fe(re.HDB_SETTINGS_NAMES.LOG_PATH_KEY,Xr.join(u,"envDir","log")),fe(re.HDB_SETTINGS_NAMES.LOG_DAILY_ROTATE_KEY,!1),fe(re.HDB_SETTINGS_NAMES.CLUSTERING_ENABLED_KEY,!0),fe(re.HDB_SETTINGS_NAMES.CLUSTERING_NODE_NAME_KEY,"1231412de213"),fe(re.HDB_SETTINGS_NAMES.HDB_ROOT_KEY,Xr.join(u,"envDir")),fe(re.CONFIG_PARAMS.STORAGE_PATH,Xr.join(u,"envDir")),fe(re.HDB_SETTINGS_NAMES.HTTP_SECURE_ENABLED_KEY,Li.isEmpty(n)?!0:n),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HTTPS,Li.isEmpty(n)?!0:n),fe(re.HDB_SETTINGS_NAMES.SERVER_PORT_KEY,9925),fe(re.HDB_SETTINGS_NAMES.CORS_ENABLED_KEY,Li.isEmpty(i)?!1:i),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORS,Li.isEmpty(i)?!1:i),fe(re.HDB_SETTINGS_NAMES.MAX_CUSTOM_FUNCTION_PROCESSES,2),fe(re.HDB_SETTINGS_NAMES.MAX_HDB_PROCESSES,4),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_PORT_KEY,9926),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_ENABLED_KEY,!0),fe(re.HDB_SETTINGS_NAMES.CUSTOM_FUNCTIONS_DIRECTORY_KEY,Xr.resolve(__dirname,"../../unitTests/server/fastifyRoutes/custom_functions")),fe(re.HDB_SETTINGS_NAMES.LOCAL_STUDIO_ON,Li.isEmpty(c)?!1:c),o&&(fe("CORS_ACCESSLIST",o),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_CORSACCESSLIST,o)),s&&(fe(re.HDB_SETTINGS_NAMES.SERVER_TIMEOUT_KEY,s),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_TIMEOUT,s)),t&&(fe(re.HDB_SETTINGS_NAMES.SERVER_KEEP_ALIVE_TIMEOUT_KEY,t),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_KEEPALIVETIMEOUT,t)),r&&(fe(re.HDB_SETTINGS_NAMES.SERVER_HEADERS_TIMEOUT_KEY,r),fe(re.CONFIG_PARAMS.CUSTOMFUNCTIONS_NETWORK_HEADERSTIMEOUT,r))}catch(t){let r=`Error reading in HDB environment variables from path ${zd}. Please check your boot props and settings files`;Xc.fatal(r),Xc.error(t)}}a(uee,"initTestEnvironment")});var nt=m((rde,hB)=>{"use strict";var yt=Q();yt.initSync();var lee=require("fs-extra"),_ee=require("semver"),tu=require("path"),{monotonicFactory:dee}=require("ulidx"),kT=dee(),Eee=require("util"),Zv=require("child_process"),fee=Eee.promisify(Zv.exec),hee=Zv.spawn,de=He(),ge=A(),Jd=V(),vr=k(),Xd=Hs(),mee=yl(),Zc=yr(),{Encoder:See,decode:VT}=require("msgpackr"),jv=new See,{isEmpty:Mi}=Jd,eB=Ir(),tB=12e10,pee=48*36e11,Tee=5e9,{connect:Ree,StorageType:rB,RetentionPolicy:sB,AckPolicy:Zd,DeliverPolicy:jd,DiscardPolicy:gee,NatsConnection:Z_e,JetStreamManager:j_e,JetStreamClient:ede,StringCodec:tde,JSONCodec:Aee,createInbox:$T,headers:Oee,ErrorCode:Xv}=require("nats"),{PACKAGE_ROOT:Nee}=A(),bee=Ka(),{recordAction:yee}=(Oo(),se($_)),nB=Aee(),Iee="clustering",wee=bee.engines[de.NATS_SERVER_NAME],Cee=tu.join(Nee,"dependencies"),xT=tu.join(Cee,`${process.platform}-${process.arch}`,de.NATS_BINARY_NAME),qT,GT,jc,xo,ko;hB.exports={runCommand:iB,checkNATSServerInstalled:Uee,createConnection:YT,getConnection:eE,getJetStreamManager:ru,getJetStream:oB,getNATSReferences:tr,getServerList:Lee,createLocalStream:KT,listStreams:aB,deleteLocalStream:Mee,getServerConfig:su,listRemoteStreams:Pee,viewStream:vee,viewStreamIterator:Bee,publishToStream:Hee,createWorkQueueStream:Fee,addSourceToWorkStream:uB,request:Gee,removeSourceFromWorkStream:_B,reloadNATS:WT,reloadNATSHub:xee,reloadNATSLeaf:kee,extractServerName:lB,requestErrorHandler:Vee,updateWorkStream:$ee,createLocalTableStream:EB,createTableStreams:Yee,purgeTableStream:fB,purgeSchemaTableStreams:Kee,getStreamInfo:Wee,updateLocalStreams:zee,closeConnection:Dee,getJsmServerName:nu,addNatsMsgHeader:cB,updateIngestStreamConsumer:qee};async function iB(e,t=void 0){let{stdout:r,stderr:s}=await fee(e,{cwd:t});if(s)throw new Error(s.replace(`
25
25
  `,""));return r.replace(`
26
- `,"")}a(sB,"runCommand");async function Cee(){try{await uee.access(xT)}catch{return!1}let e=await sB(`${xT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return lee.eq(t,Iee)}a(Cee,"checkNATSServerInstalled");async function YT(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await Zv.getClusterUser();if(Ci(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}Mr.trace("create nats connection called");let i=await Tee({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:yt.get(Re.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return Mr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(YT,"createConnection");async function Uee(){Os&&(await Os.drain(),Os=void 0,qo=void 0,Go=void 0,jc=void 0)}a(Uee,"closeConnection");var Os,jc;async function eE(){return jc||(jc=YT(yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),Os=await jc),Os||jc}a(eE,"getConnection");async function tu(){if(qo)return qo;Ci(Os)&&await eE();let{domain:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return qo=await Os.jetstreamManager({domain:e}),qo}a(tu,"getJetStreamManager");async function nB(){if(Go)return Go;Ci(Os)&&await eE();let{domain:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Ci(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return Go=Os.jetstream({domain:e}),Go}a(nB,"getJetStream");async function er(){let e=Os||await eE(),t=qo||await tu(),r=Go||await nB();return{connection:e,jsm:t,js:r}}a(er,"getNATSReferences");async function Dee(e){let t=yt.get(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await Zv.getClusterUser(),n=await YT(t,r,s),i=$T(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=rB.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 Jd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(Dee,"getServerList");async function KT(e,t){let{jsm:r}=await er(),s=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:eB.File,retention:tB.Limits,subjects:t,discard:Ree.Old,duplicate_window:jv,max_msgs:n,max_bytes:i,max_age:s})}a(KT,"createLocalStream");async function iB(){let{jsm:e}=await er(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(iB,"listStreams");async function Lee(e){let{jsm:t}=await er();await t.streams.delete(e)}a(Lee,"deleteLocalStream");async function Mee(e){let{connection:t}=await er(),r=[],s=$T(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(rB.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(Mee,"listRemoteStreams");async function Pee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await er(),i=kT(),o={durable_name:i,ack_policy:Zd.Explicit};t&&(o.deliver_policy=jd.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=VT(_.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(Pee,"viewStream");async function*vee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await er(),i=kT(),o={durable_name:i,ack_policy:Zd.Explicit};t&&(o.deliver_policy=jd.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 _=VT(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(vee,"viewStreamIterator");async function Bee(e,t,r,s){Mr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=oB(s,r);let{js:n}=await er(),i=await su(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:Xv.encode(s);try{Mr.trace(`publishToStream publishing to subject: ${o}`),bee(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 lB(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){Mr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await KT(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Bee,"publishToStream");function oB(e,t){t===void 0&&(t=Aee());let r=yt.get(Re.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(_e.MSG_HEADERS.NATS_MSG_ID)){let s=Jd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${kT()}`;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(oB,"addNatsMsgHeader");function ru(e){e=e.toLowerCase();let t=eu.join(yt.get(Re.CONFIG_PARAMS.ROOTPATH),yee);if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Ci(GT)&&(GT={port:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.HUB,config_file:_e.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:eu.join(t,_e.PID_FILES.HUB),hdb_nats_path:t}),GT;if(e===Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Ci(qT)&&(qT={port:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,config_file:_e.NATS_CONFIG_FILES.LEAF_SERVER,domain:Xc.getConfigFromFile(Re.CONFIG_PARAMS.CLUSTERING_NODENAME)+_e.SERVER_SUFFIX.LEAF,pid_file_path:eu.join(t,_e.PID_FILES.LEAF),hdb_nats_path:t}),qT;Mr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(ru,"getServerConfig");async function Hee(e){let{jsm:t}=await er(),r=await su();try{await t.streams.add({name:e.stream_name,storage:eB.File,retention:tB.Limits,duplicate_window:jv,max_age:See,max_bytes:pee,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:Zd.Explicit,durable_name:e.durable_name,deliver_policy:jd.All,max_ack_pending:1e4});else throw s}}a(Hee,"createWorkQueueStream");async function Fee(){let{jsm:e}=await er();(await e.consumers.info(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,_e.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(Mr.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),Mr.info("Adding pull consumer to ingest stream"),await e.consumers.add(_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Zd.Explicit,durable_name:_e.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:jd.All,max_ack_pending:1e4}))}a(Fee,"updateIngestStreamConsumer");async function aB(e,t,r){let{jsm:s}=await er(),n=await s.streams.info(t),i=cB(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Xd.createNatsTableStreamName(c,u),_=i===e,d,E,f=!1;if(!Array.isArray(n.config.sources)||n.config.sources.length===0)n.config.sources=[];else for(let p=0,T=n.config.sources.length;p<T;p++)if(d=n.config.sources[p],E=p,_&&d.name===l||!_&&d.name===l&&d.external&&d.external.api===`$JS.${e}.API`){f=!0;break}if(f===!0){if(d.opt_start_time===o)return;n.config.sources.splice(E,1),await s.streams.update(t,n.config)}let h={name:l,opt_start_time:o,filter_subject:`${_e.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(aB,"addSourceToWorkStream");function cB(e){return e.split(".")[1]}a(cB,"extractServerName");async function uB(e,t,r){let{schema:s,table:n}=r,i=Xd.createNatsTableStreamName(s,n),{jsm:o}=await er(),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(uB,"removeSourceFromWorkStream");async function qee(e,t,r=2e4,s=$T()){if(!Jd.isObject(t))throw new Error("data param must be an object");let n=Xv.encode(t),{connection:i}=await er(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return VT(c.data)}a(qee,"request");function WT(e){return new Promise(async(t,r)=>{let s=fee(xT,["--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(WT,"reloadNATS");async function Gee(){let{pid_file_path:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await WT(e)}a(Gee,"reloadNATSHub");async function xee(){let{pid_file_path:e}=ru(Re.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await WT(e)}a(xee,"reloadNATSLeaf");function kee(e,t,r){let s;switch(e.code){case zv.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case zv.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(kee,"requestErrorHandler");async function Vee(e,t){let r=t+_e.SERVER_SUFFIX.LEAF;await lB(async()=>{e.subscribe===!0?await aB(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await uB(r,_e.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a(Vee,"updateWorkStream");function lB(e){return hee.writeTransaction(Re.SYSTEM_SCHEMA_NAME,Re.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(lB,"exclusiveLock");async function _B(e,t){let r=Xd.createNatsTableStreamName(e,t),s=await su(),n=Wee(e,t,s);await KT(r,[n])}a(_B,"createLocalTableStream");async function $ee(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await _B(s,n)}}a($ee,"createTableStreams");async function dB(e,t){if(yt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Xd.createNatsTableStreamName(e,t),{jsm:s}=await er();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")Mr.warn(r);else throw r}}a(dB,"purgeTableStream");async function Yee(e,t){if(yt.get(Re.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await dB(e,t[r])}a(Yee,"purgeSchemaTableStreams");async function Kee(e){return(await tu()).streams.info(e)}a(Kee,"getStreamInfo");function Wee(e,t,r){return`${_e.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Wee,"createSubjectName");async function su(){if(Zc)return Zc;if(Zc=(await tu())?.nc?.info?.server_name,Zc===void 0)throw new Error("Unable to get jetstream manager server name");return Zc}a(su,"getJsmServerName");async function Qee(){let e=await tu(),t=await su(),r=await iB();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=zee(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}`;Mr.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}`;Mr.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(".");Mr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(Qee,"updateLocalStreams");function zee(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=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=yt.get(Re.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);return i=i===null?-1:i,s!==t.max_age&&(t.max_age=s,r=!0),n!==t.max_bytes&&(t.max_bytes=n,r=!0),i!==t.max_msgs&&(t.max_msgs=i,r=!0),r}a(zee,"updateStreamLimits")});var eT=m((ide,NB)=>{"use strict";var{decode:Jee}=require("msgpackr"),{isMainThread:Xee,parentPort:Zee,threadId:sde}=require("worker_threads"),QT=nt(),xo=Be(),jee=A(),nu=x(),fB=Q(),SB=A();dt();var ete=Ms(),{recordAction:tte,recordActionBinary:rte}=(go(),re($_)),{publishToStream:ste}=QT,nde={durable:xo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:xo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},nte,ite,ote,pB,TB;NB.exports={initialize:RB,workQueueListener:OB,setSubscription:ate,setIgnoreOrigin:ute,getDatabaseSubscriptions:cte};async function RB(){TB=!0,nu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await QT.getNATSReferences();nte=e,ite=e.info.server_name,ote=t,pB=r}a(RB,"initialize");var rE=new Map;function ate(e,t,r){let s=rE.get(e);s||rE.set(e,s=new Map),s.set(t,r),TB||RB().then(OB)}a(ate,"setSubscription");function cte(){return rE}a(cte,"getDatabaseSubscriptions");var gB;function ute(e){gB=e}a(ute,"setIgnoreOrigin");var AB=100,hB=new Array(AB),tE=0;async function OB(){let t=await(await pB.consumers.get(xo.WORK_QUEUE_CONSUMER_NAMES.stream_name,xo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await hB[tE],hB[tE]=lte(r).catch(s=>{nu.error(s)}),++tE>=AB&&(tE=0)}a(OB,"workQueueListener");Xee||Zee.on("message",async e=>{let{type:t}=e;t===SB.ITC_EVENT_TYPES.SHUTDOWN&&QT.closeConnection()});async function lte(e){let t=Jee(e.data);tte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(xo.MSG_HEADERS.ORIGIN)===fB.get(jee.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!gB;if(rte(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;nu.trace("processing message:",i,o,u,(l?"records: "+l.map(g=>g.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),nu.trace(`messageProcessor nats msg id: ${e.headers.get(xo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:p}=d||{},T=rE.get(o)?.get(u);if(!T)throw new Error("Missing table for replication message",u);if(i==="define_schema")t.type=i,T.send(t);else if(l.length===1&&!c)T.send({type:mB(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:p});else{let g=l.map((O,k)=>({type:mB(i),value:O,id:_?.[k],table:u}));for(;c;)g.push({type:c.operation,value:c.record,id:c.id,table:c.table}),c=c.next;T.send({type:"transaction",writes:g,table:u,timestamp:f,onCommit:E,user:h,nodeName:p})}fB.get(SB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&ste(e.subject.split(".").slice(0,-1).join("."),ete.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){nu.error(i)}e.ack()}a(lte,"messageProcessor");function mB(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(mB,"convertOperation")});var bB=eT();(async()=>{try{await bB.initialize(),await bB.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();
26
+ `,"")}a(iB,"runCommand");async function Uee(){try{await lee.access(xT)}catch{return!1}let e=await iB(`${xT} --version`,void 0),t=e.substring(e.lastIndexOf("v")+1,e.length);return _ee.eq(t,wee)}a(Uee,"checkNATSServerInstalled");async function YT(e,t,r,s=!0,n="127.0.0.1"){if(!t&&!r){let o=await eB.getClusterUser();if(Mi(o))throw new Error("Unable to get nats connection. Cluster user is undefined.");t=o.username,r=o.decrypt_hash}vr.trace("create nats connection called");let i=await Ree({name:n,port:e,user:t,pass:r,maxReconnectAttempts:-1,waitOnFirstConnect:s,timeout:3e4,tls:{keyFile:yt.get(ge.CONFIG_PARAMS.CLUSTERING_TLS_PRIVATEKEY),certFile:yt.get(ge.CONFIG_PARAMS.CLUSTERING_TLS_CERTIFICATE),caFile:yt.get(ge.CONFIG_PARAMS.CLUSTERING_TLS_CERT_AUTH),rejectUnauthorized:!1}});return vr.trace("create connection established a nats client connection with id",i?.info?.client_id),i}a(YT,"createConnection");async function Dee(){ys&&(await ys.drain(),ys=void 0,xo=void 0,ko=void 0,eu=void 0)}a(Dee,"closeConnection");var ys,eu;async function eE(){return eu||(eu=YT(yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),void 0,void 0),ys=await eu),ys||eu}a(eE,"getConnection");async function ru(){if(xo)return xo;Mi(ys)&&await eE();let{domain:e}=su(ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Mi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return xo=await ys.jetstreamManager({domain:e}),xo}a(ru,"getJetStreamManager");async function oB(){if(ko)return ko;Mi(ys)&&await eE();let{domain:e}=su(ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);if(Mi(e))throw new Error("Error getting JetStream domain. Unable to get JetStream manager.");return ko=ys.jetstream({domain:e}),ko}a(oB,"getJetStream");async function tr(){let e=ys||await eE(),t=xo||await ru(),r=ko||await oB();return{connection:e,jsm:t,js:r}}a(tr,"getNATSReferences");async function Lee(e){let t=yt.get(ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),{sys_name:r,decrypt_hash:s}=await eB.getClusterUser(),n=await YT(t,r,s),i=$T(),o=n.subscribe(i),c=[],u,l=(async()=>{for await(let _ of o){let d=nB.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 Jd.async_set_timeout(e),await o.drain(),await n.close(),await l,c}a(Lee,"getServerList");async function KT(e,t){let{jsm:r}=await tr(),s=yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXMSGS);n=n===null?-1:n;let i=yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);i=i===null?-1:i,await r.streams.add({name:e,storage:rB.File,retention:sB.Limits,subjects:t,discard:gee.Old,duplicate_window:tB,max_msgs:n,max_bytes:i,max_age:s})}a(KT,"createLocalStream");async function aB(){let{jsm:e}=await tr(),t=await e.streams.list().next(),r=[];return t.forEach(s=>{r.push(s)}),r}a(aB,"listStreams");async function Mee(e){let{jsm:t}=await tr();await t.streams.delete(e)}a(Mee,"deleteLocalStream");async function Pee(e){let{connection:t}=await tr(),r=[],s=$T(),n=t.subscribe(s),i=(async()=>{for await(let o of n)r.push(nB.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(Pee,"listRemoteStreams");async function vee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await tr(),i=kT(),o={durable_name:i,ack_policy:Zd.Explicit};t&&(o.deliver_policy=jd.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=VT(_.data),E={nats_timestamp:_.info.timestampNanos,nats_sequence:_.info.streamSequence,entry:d};if(_.headers&&(E.origin=_.headers.get(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=_.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),l.push(E),_.ack(),_.info.pending===0)break}return await c.delete(),l}a(vee,"viewStream");async function*Bee(e,t=void 0,r=void 0){let{jsm:s,js:n}=await tr(),i=kT(),o={durable_name:i,ack_policy:Zd.Explicit};t&&(o.deliver_policy=jd.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 _=VT(l.data);_[0]||(_=[_]);for(let d of _){let E={nats_timestamp:l.info.timestampNanos,nats_sequence:l.info.streamSequence,entry:d};l.headers&&(E.origin=l.headers.get(de.MSG_HEADERS.ORIGIN),E.nats_msg_id=l.headers.get(de.MSG_HEADERS.NATS_MSG_ID)),yield E}if(l.ack(),l.info.pending===0)break}await c.delete()}a(Bee,"viewStreamIterator");async function Hee(e,t,r,s){vr.trace(`publishToStream called with subject: ${e}, stream: ${t}, entries:`,s.operation),r=cB(s,r);let{js:n}=await tr(),i=await nu(),o=`${e}.${i}`,c=s instanceof Uint8Array?s:jv.encode(s);try{vr.trace(`publishToStream publishing to subject: ${o}`),yee(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 dB(async()=>{try{await n.publish(o,c,{headers:r})}catch{if(u.code&&u.code.toString()==="503"){vr.trace(`publishToStream creating stream: ${t}`);let _=o.split(".");_[2]="*",await KT(t,[o]),await n.publish(o,c,{headers:r})}else throw u}});throw u}}a(Hee,"publishToStream");function cB(e,t){t===void 0&&(t=Oee());let r=yt.get(ge.CONFIG_PARAMS.CLUSTERING_NODENAME);if(!t.has(de.MSG_HEADERS.NATS_MSG_ID)){let s=Jd.getTableHashAttribute(e.schema,e.table),n=e.action?e.action:e.operation,i=`${r}.${e.schema}.${e.table}.${n}.${s}.${Date.now()}.${kT()}`;t.append(de.MSG_HEADERS.NATS_MSG_ID,i)}return t.has(de.MSG_HEADERS.ORIGIN)||t.append(de.MSG_HEADERS.ORIGIN,r),t}a(cB,"addNatsMsgHeader");function su(e){e=e.toLowerCase();let t=tu.join(yt.get(ge.CONFIG_PARAMS.ROOTPATH),Iee);if(e===ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB.toLowerCase())return Mi(GT)&&(GT={port:Zc.getConfigFromFile(ge.CONFIG_PARAMS.CLUSTERING_HUBSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(ge.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.HUB,config_file:de.NATS_CONFIG_FILES.HUB_SERVER,pid_file_path:tu.join(t,de.PID_FILES.HUB),hdb_nats_path:t}),GT;if(e===ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF.toLowerCase())return Mi(qT)&&(qT={port:Zc.getConfigFromFile(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_NETWORK_PORT),server_name:Zc.getConfigFromFile(ge.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,config_file:de.NATS_CONFIG_FILES.LEAF_SERVER,domain:Zc.getConfigFromFile(ge.CONFIG_PARAMS.CLUSTERING_NODENAME)+de.SERVER_SUFFIX.LEAF,pid_file_path:tu.join(t,de.PID_FILES.LEAF),hdb_nats_path:t}),qT;vr.error(`Unable to get Nats server config. Unrecognized process: ${e}`)}a(su,"getServerConfig");async function Fee(e){let{jsm:t}=await tr(),r=await nu();try{await t.streams.add({name:e.stream_name,storage:rB.File,retention:sB.Limits,duplicate_window:tB,max_age:pee,max_bytes:Tee,subjects:[`${de.SUBJECT_PREFIXES.TXN}.${e.stream_name}.${r}`]})}catch(s){if(s.code!=="400")throw s}try{await t.consumers.info(e.stream_name,e.durable_name)}catch(s){if(s.code.toString()==="404")await t.consumers.add(e.stream_name,{ack_policy:Zd.Explicit,durable_name:e.durable_name,deliver_policy:jd.All,max_ack_pending:1e4});else throw s}}a(Fee,"createWorkQueueStream");async function qee(){let{jsm:e}=await tr();(await e.consumers.info(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name)).config.deliver_subject&&(vr.info("Removing old nats push consumer from ingest stream"),await e.consumers.delete(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,de.WORK_QUEUE_CONSUMER_NAMES.durable_name),vr.info("Adding pull consumer to ingest stream"),await e.consumers.add(de.WORK_QUEUE_CONSUMER_NAMES.stream_name,{ack_policy:Zd.Explicit,durable_name:de.WORK_QUEUE_CONSUMER_NAMES.durable_name,deliver_policy:jd.All,max_ack_pending:1e4}))}a(qee,"updateIngestStreamConsumer");async function uB(e,t,r){let{jsm:s}=await tr(),n=await s.streams.info(t),i=lB(s.prefix),o=r.start_time?r.start_time:new Date(Date.now()).toISOString(),{schema:c,table:u}=r,l=Xd.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:`${de.SUBJECT_PREFIXES.TXN}.>`};_||(h.external={api:`$JS.${e}.API`,deliver:""}),n.config.sources.push(h),await s.streams.update(t,n.config)}a(uB,"addSourceToWorkStream");function lB(e){return e.split(".")[1]}a(lB,"extractServerName");async function _B(e,t,r){let{schema:s,table:n}=r,i=Xd.createNatsTableStreamName(s,n),{jsm:o}=await tr(),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(_B,"removeSourceFromWorkStream");async function Gee(e,t,r=2e4,s=$T()){if(!Jd.isObject(t))throw new Error("data param must be an object");let n=jv.encode(t),{connection:i}=await tr(),o={timeout:r};s&&(o.reply=s,o.noMux=!0);let c=await i.request(e,n,o);return VT(c.data)}a(Gee,"request");function WT(e){return new Promise(async(t,r)=>{let s=hee(xT,["--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(WT,"reloadNATS");async function xee(){let{pid_file_path:e}=su(ge.PROCESS_DESCRIPTORS.CLUSTERING_HUB);await WT(e)}a(xee,"reloadNATSHub");async function kee(){let{pid_file_path:e}=su(ge.PROCESS_DESCRIPTORS.CLUSTERING_LEAF);await WT(e)}a(kee,"reloadNATSLeaf");function Vee(e,t,r){let s;switch(e.code){case Xv.NoResponders:s=`Unable to ${t}, node '${r}' is not listening.`;break;case Xv.Timeout:s=`Unable to ${t}, node '${r}' is listening but did not respond.`;break;default:s=e.message;break}return s}a(Vee,"requestErrorHandler");async function $ee(e,t){let r=t+de.SERVER_SUFFIX.LEAF;await dB(async()=>{e.subscribe===!0?await uB(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e):await _B(r,de.WORK_QUEUE_CONSUMER_NAMES.stream_name,e)})}a($ee,"updateWorkStream");function dB(e){return mee.writeTransaction(ge.SYSTEM_SCHEMA_NAME,ge.SYSTEM_TABLE_NAMES.NODE_TABLE_NAME,e)}a(dB,"exclusiveLock");async function EB(e,t){let r=Xd.createNatsTableStreamName(e,t),s=await nu(),n=Qee(e,t,s);await KT(r,[n])}a(EB,"createLocalTableStream");async function Yee(e){for(let t=0,r=e.length;t<r;t++){let s=e[t].schema,n=e[t].table;await EB(s,n)}}a(Yee,"createTableStreams");async function fB(e,t){if(yt.get(ge.CONFIG_PARAMS.CLUSTERING_ENABLED))try{let r=Xd.createNatsTableStreamName(e,t),{jsm:s}=await tr();await s.streams.purge(r)}catch(r){if(r.message==="stream not found")vr.warn(r);else throw r}}a(fB,"purgeTableStream");async function Kee(e,t){if(yt.get(ge.CONFIG_PARAMS.CLUSTERING_ENABLED))for(let r=0,s=t.length;r<s;r++)await fB(e,t[r])}a(Kee,"purgeSchemaTableStreams");async function Wee(e){return(await ru()).streams.info(e)}a(Wee,"getStreamInfo");function Qee(e,t,r){return`${de.SUBJECT_PREFIXES.TXN}.${e}${t?"."+t:""}.${r}`}a(Qee,"createSubjectName");async function nu(){if(jc)return jc;if(jc=(await ru())?.nc?.info?.server_name,jc===void 0)throw new Error("Unable to get jetstream manager server name");return jc}a(nu,"getJsmServerName");async function zee(){let e=await ru(),t=await nu(),r=await aB();for(let s of r){let n=s.config,i=n.subjects[0];if(!i)continue;let o=Jee(s),c=i.split(".");if(!(c[c.length-1]===t&&!o)){if(n.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.SCHEMA_QUEUE_CONSUMER_NAMES.deliver_subject}.${t}`;vr.trace(`Updating stream subject name from: ${i} to: ${l}`),n.subjects[0]=l}else if(n.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name){let l=`${de.WORK_QUEUE_CONSUMER_NAMES.stream_name}.${t}`;vr.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(".");vr.trace(`Updating stream subject name from: ${i} to: ${_}`),n.subjects[0]=_}await e.streams.update(n.name,n)}}}a(zee,"updateLocalStreams");function Jee(e){let{config:t}=e,r=!1;if(t.name===de.SCHEMA_QUEUE_CONSUMER_NAMES.stream_name||t.name===de.WORK_QUEUE_CONSUMER_NAMES.stream_name)return r;let s=yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXAGE);s=s===null?0:s*1e9;let n=yt.get(ge.CONFIG_PARAMS.CLUSTERING_LEAFSERVER_STREAMS_MAXBYTES);n=n===null?-1:n;let i=yt.get(ge.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(Jee,"updateStreamLimits")});var eT=m((ode,yB)=>{"use strict";var{decode:Xee}=require("msgpackr"),{isMainThread:Zee,parentPort:jee,threadId:nde}=require("worker_threads"),QT=nt(),Vo=He(),ete=A(),iu=k(),mB=Q(),TB=A();dt();var tte=Hs(),{recordAction:rte,recordActionBinary:ste}=(Oo(),se($_)),{publishToStream:nte}=QT,ide={durable:Vo.WORK_QUEUE_CONSUMER_NAMES.durable_name,queue:Vo.WORK_QUEUE_CONSUMER_NAMES.deliver_group},ite,ote,ate,RB,gB;yB.exports={initialize:AB,workQueueListener:bB,setSubscription:cte,setIgnoreOrigin:lte,getDatabaseSubscriptions:ute};async function AB(){gB=!0,iu.notify("Starting clustering ingest service.");let{connection:e,jsm:t,js:r}=await QT.getNATSReferences();ite=e,ote=e.info.server_name,ate=t,RB=r}a(AB,"initialize");var rE=new Map;function cte(e,t,r){let s=rE.get(e);s||rE.set(e,s=new Map),s.set(t,r),gB||AB().then(bB)}a(cte,"setSubscription");function ute(){return rE}a(ute,"getDatabaseSubscriptions");var OB;function lte(e){OB=e}a(lte,"setIgnoreOrigin");var NB=100,SB=new Array(NB),tE=0;async function bB(){let t=await(await RB.consumers.get(Vo.WORK_QUEUE_CONSUMER_NAMES.stream_name,Vo.WORK_QUEUE_CONSUMER_NAMES.durable_name)).consume();for await(let r of t)await SB[tE],SB[tE]=_te(r).catch(s=>{iu.error(s)}),++tE>=NB&&(tE=0)}a(bB,"workQueueListener");Zee||jee.on("message",async e=>{let{type:t}=e;t===TB.ITC_EVENT_TYPES.SHUTDOWN&&QT.closeConnection()});async function _te(e){let t=Xee(e.data);rte(e.data.length,"bytes-received",e.subject,t.operation,"ingest");let n=e.headers.get(Vo.MSG_HEADERS.ORIGIN)===mB.get(ete.CONFIG_PARAMS.CLUSTERING_NODENAME)&&!OB;if(ste(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;iu.trace("processing message:",i,o,u,(l?"records: "+l.map(R=>R.id):"")+(_?"ids: "+_:""),"with sequence:",e.seq),iu.trace(`messageProcessor nats msg id: ${e.headers.get(Vo.MSG_HEADERS.NATS_MSG_ID)}`);let E;l||(l=_);let{timestamp:f,user:h,node_name:T}=d||{},p=rE.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:pB(i),value:l[0],id:_?.[0],timestamp:f,table:u,onCommit:E,user:h,nodeName:T});else{let R=l.map((O,F)=>({type:pB(i),value:O,id:_?.[F],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})}mB.get(TB.CONFIG_PARAMS.CLUSTERING_REPUBLISHMESSAGES)!==!1&&nte(e.subject.split(".").slice(0,-1).join("."),tte.createNatsTableStreamName(o,u),e.headers,e.data)}catch(i){iu.error(i)}e.ack()}a(_te,"messageProcessor");function pB(e){switch(e){case"insert":case"upsert":case"update":return"put"}return e}a(pB,"convertOperation")});var IB=eT();(async()=>{try{await IB.initialize(),await IB.workQueueListener()}catch(e){console.error("Error launching Nats ingest service."),console.error(e)}})();